さゆがC/C++の宿題を片付けるの 36代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
从*・ 。.・)<さゆがわからないしゅくだいをこたえるの
       どんどんもってくるの
――【注意点】――――――――――――――――――――――
・使用する言語(C/C++)や環境(CUI/GUIなど)は必ず書きましょう。
・問題文は、ちゃんと解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式自体をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その行とエラーの詳細を書きましょう。
 エラーメッセージが出た場合はそのままコピーしてください。
・後になって問題につけたしをするのはやめましょう。
 解いてもらっている方に失礼になってしまいます。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

【歴代スレは>>1-10辺り】
35代目: http://pc5.2ch.net/test/read.cgi/tech/1101568895/
34代目: http://pc5.2ch.net/test/read.cgi/tech/1100530682/
33代目: http://pc5.2ch.net/test/read.cgi/tech/1097932699/
32代目: http://pc5.2ch.net/test/read.cgi/tech/1097592876/
31代目: http://pc5.2ch.net/test/read.cgi/tech/1095075678/
30代目: http://pc5.2ch.net/test/read.cgi/tech/1091954342/
29代目: http://pc5.2ch.net/test/read.cgi/tech/1090765027/
28代目: http://pc5.2ch.net/test/read.cgi/tech/1089974839/
27代目: http://pc5.2ch.net/test/read.cgi/tech/1089448445/
26代目: http://pc5.2ch.net/test/read.cgi/tech/1088860889/
25代目: http://pc5.2ch.net/test/read.cgi/tech/1087929711/
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
2デフォルトの名無しさん:04/12/11 17:26:12
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
14代目: http://pc5.2ch.net/tech/kako/1067/10671/1067175933.html
13代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
9代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
8代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
7代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
6代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
5代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc5.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
1代目: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
【注意点追加】
・複雑なAAはスレが荒れたり問題を埋もれさせてしまう原因に
 なりますので、使用を控えてください。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:
3デフォルトの名無しさん:04/12/11 17:27:06
从*・ 。.・)ノ<よろ〜
4ぼるじょあ ◆yBEncckFOU :04/12/11 17:28:09
(・3・) エェー ぼるじょあも答えるYO!
5デフォルトの名無しさん:04/12/11 17:42:27
>>1
乙。
うpローダーのURLを、前スレで作ってくれた方の所に変えて欲しかった。
6デフォルトの名無しさん:04/12/11 17:52:47
7デフォルトの名無しさん:04/12/11 18:48:47
なにこのきもいスレ
8デフォルトの名無しさん:04/12/11 18:50:44
>>7はキモ杉
9デフォルトの名無しさん:04/12/11 18:52:11
さゆってなに?白湯?
10デフォルトの名無しさん:04/12/11 18:59:32
11デフォルトの名無しさん:04/12/11 19:38:50
ぶしゅ
12デフォルトの名無しさん:04/12/11 20:05:09
#include <stdio.h>

int
main(void)
{
printf(&linux["\021%six\012\0"], (linux)["have"] + "fun" - 97);
return 0;
}
135:04/12/11 20:33:41
>>6
thk
14デフォルトの名無しさん:04/12/11 21:16:39
[課題]
角度θを0度から180度まで5度おきに変えてsinθとcosθ
をもとめ、一覧表として表示するプログラムを作りなさい。
角度を実数値として扱いなさい。
[環境]
言語:C
簡単なプログラムなら作れるんですが数学が混じるとorz
15デフォルトの名無しさん:04/12/11 21:33:34
[課題]
(1)テキストエディタを用いて、20個の整数をdata.txtというファイルに保存せよ。
ただし、各整数は空白か改行で区切られているものとする。
(2)data.txtから20個の整数を読み込んで、それらを配列に格納せよ。その配列の全要素
を逆順にしてoutput.txtへ出力せよ。この時、各要素は空白で区切られているものとする。

[環境]
言語:C

“テキストエディタを用いて”って書いてありますけど、多分Cでどうにかするんだと思います。
何かもうそれすらあやふやなほどで、1〜10まで全然分からないので本当に困っています。
どなたか宜しくお願いします。
16菜々 ◆Xl6OTFSLJ2 :04/12/11 21:37:35
>>14
#include <math.h>
int main(){
int x=0;//実数値(角度)
float y=3.141592;//円周率
/***** sin *****/
printf("== sin ==\n");
for(x=0;x<=180;x=x+5){
printf("\t%1.5f\n",sin(y*x/180));
}
/***** cos *****/
printf("== cos ==\n");
for(x=0;x<=180;x=x+5){
printf("\t%1.5f\n",cos(y*x/180));
}
}
17デフォルトの名無しさん:04/12/11 21:40:03
>>14

#define PI 3.14159

#include <stdio.h>
#include <math.h>

int main(int argc,char* argv[]){
unsigned short ang;
for(ang=0;ang<=180;ang+=5)
printf("sin(%u):%.3f\tcos(%u):%.3f\n",ang,sin(ang*PI/180),ang,cos(ang*PI/180));

return(0);
}

これでいいんかなぁ?
18デフォルトの名無しさん:04/12/11 21:47:09
>>15
「テキストエディタを用いて」って記述されてるから、data.txtはエディタで作れば
いいんじゃないの。
19デフォルトの名無しさん:04/12/11 21:49:05
>>16
>>17
ありがとうございます
2017:04/12/11 21:52:37
あらま。被ってしまったね。すまんこ
2115:04/12/11 21:53:04
>>18
>data.txtはエディタで作ればいいんじゃないの。

ということは、実質的にはC言語の問題は(2)ということで良いんすか?
というか、テキストエディタって、そういうソフトですか?
22デフォルトの名無しさん:04/12/11 22:03:08
テキストエディタを用いてって書いてあるんなら、テキストエディタで作ればいいんだよ
23デフォルトの名無しさん:04/12/11 22:05:56
>>21
なるほど、君が非常にやばい状況にあるのはわかった。
テキストエディタとは、Windowsに初めからインストールされている「メモ帳」など
の総称だよ。だから、data.txtはメモ帳で

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

と打って、data.txtというファイル名で保存すればよい。
数字と数字の間はスペースで、区切ってあるよ。
あと、コーディング(C言語の問題)の箇所は、君の言うとおり(2)になるね。
24デフォルトの名無しさん:04/12/11 22:06:36
>>16
すいませんがもっと理解が簡単な風に作れないですか?
この課題はC言語を1からやる講義の課題なので
自分は高校で軽くやっただけなので考察書くことを考える
と中身が分からないとつらいので
すいませんがお願いします。
あとVisual Stadioでプログラムを作るのでお願いします
25デフォルトの名無しさん:04/12/11 22:09:38
>>24
>>16が難しいとか言ってたらなにも作れない気がする
26デフォルトの名無しさん:04/12/11 22:12:00
>>24
君にはVisual*Studio*すらももったいない気がする。
すちゅーでぃお

>>16はこれでもかって言うぐらいとても簡単です。
27デフォルトの名無しさん:04/12/11 22:14:22
【入力】
 aaaa:0.0.0.0-0.255.255.255
 bbbb:1.1.1.1-32.133.246.0
【出力】
 0.0.0.0-0.255.255.255
 1.1.1.1-32.133.246.0

と、IP範囲だけをファイルに書くというプログラムを作りたいです。
こういうの作ったけど、m=1となってエラーが出ます。

ソース:
ttp://www.70i.net/data/70i1300.jpg
結果:
ttp://www.70i.net/data/70i1301.jpg

':' の前後をちゃんと分けてないようです。
どうしたら良いでしょう?
2821:04/12/11 22:17:59
>>23
おぉ、神降臨!
テキストエディタの説明、大変有難う御座いました!
何か説明を受けてから改めて問題を見てみると、自力で出来そうな気がしてきました!
ちょっとやってみて、やっぱり駄目だったらまた来ます!
29デフォルトの名無しさん:04/12/11 22:20:37
>>25
二次方程式ax2 + bx + c = 0の 2つの実数解、重解、2つの複素解を
求めるプログラムを作り、実行しなさい。ただし係数は簡単のため0と
する。
このレベルぐらいならつくれました。
30デフォルトの名無しさん:04/12/11 22:22:26
質問者達はちゃんと>>2のテンプレ読め
3117:04/12/11 22:23:17
>>29
俺のやつは使い物にならないのかw
がーん

ってか係数が0だったらその式は定数じゃないのか???
32デフォルトの名無しさん:04/12/11 22:23:54
>>29
そうよかったね
33デフォルトの名無しさん:04/12/11 22:24:22
>>27
%sではホワイトスペースが現れるまで一つの文字列と見做してしまう。
:の前後で分けたいなら、少なくとも前は%[^:]などで取らないといけない。
3414:04/12/11 22:26:00
すいません。
コピーしてテキストに貼り付けたら文字化け起こしたため困惑
してました orz
35デフォルトの名無しさん:04/12/11 22:26:13
>>31
どうでもいいけど無闇とshortを使うのはよくない。
36デフォルトの名無しさん:04/12/11 22:26:13
>>29
SUGEEEEEEE!!!!!
神だ!
これでこのスレは救われりゅ!
37デフォルトの名無しさん:04/12/11 22:27:50
>>31
だからできたんだって。
3817:04/12/11 22:31:45
>>35
だって範囲的にshortの範囲じゃない?
無闇にint使うのはメモリの無駄じゃない?

shortで収まると分かっている場合はshortのがいいと思う。
>>37
だろうな。定数なんだもんw
解を求めるルーチンが間違ってても、正解は出てくるんじゃないかな。
39デフォルトの名無しさん:04/12/11 22:36:21
>メモリの無駄

じつはアドレッシングサイズを変えてしまうほうが無駄
40デフォルトの名無しさん:04/12/11 22:40:43
intもshortも16ビット以上であることしか保障されてないんじゃなかったっけ?
41デフォルトの名無しさん:04/12/11 22:46:46
>>38
普通にintを使うほうがより適切なコードになる可能性が高い。
試しに使っている環境で最適化をしたコード同士を較べて見たら?
42デフォルトの名無しさん:04/12/11 22:48:01
shortは16bit, longは32bit
intは16or32bit
43デフォルトの名無しさん:04/12/11 22:56:16
>>38
それはよほど大きな配列をつくる場合だけだ。
44デフォルトの名無しさん:04/12/11 22:56:28
>>16を見てみたがこれ異常ないくらい簡単だな。
45デフォルトの名無しさん:04/12/11 22:57:26
>>42
信じちゃダメ、絶対
4617:04/12/11 22:59:27
そうか。了解。これからは余りshort使わないようにするわ。dクス
47デフォルトの名無しさん:04/12/11 23:00:01
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
としか決められてない。
4828:04/12/11 23:05:44
自力でやってみましたが、時間の無駄でした!

どなたか>>15の(2)をお願いします!
49デフォルトの名無しさん:04/12/11 23:05:51
sizeof(char) < sizeof(short)
じゃないの?
50デフォルトの名無しさん:04/12/11 23:08:26
>>49
sizeof(char)==sizeof(short)でもいい。
ただし、その場合charは16bit以上になる。
51デフォルトの名無しさん:04/12/11 23:11:10
>>50
そんなの存在するのかな?
1バイトが16ビットとか
52ぼる:04/12/11 23:16:53
>>51
charもintもlongもみーんな32bitの環境で開発したという話を聞いたことがあるYO!
53デフォルトの名無しさん:04/12/11 23:19:33
それどころかshort、int、long、long longみんな64ビットって話も聞いたことがある。
(charはどうだったかは聞いていないが)
5427:04/12/12 00:08:33
>>33
ありがとうがざいます。
55デフォルトの名無しさん:04/12/12 00:15:59
>>48
時間の無駄ってことはないだろう。自分で考えるほどプラスになることはない。
まぁ、とりあえずほれ。
でもちゃんと勉強しとかなきゃ後で大変だぞー。
int main()
{
 FILE* in_stream;
 FILE* out_stream;
 int value[20];

 in_stream = fopen("data.txt", "r");
 if (in_stream == NULL) {
  return -1;
 }
 out_stream = fopen("output.txt", "w");
 if (out_stream == NULL) {
  return -1;
 }

 for (int i=0; i<20; i++) {
  fscanf(in_stream, "%d", &value[i]);
 }
 for (int i=19; i>=0; i--) {
  fprintf(out_stream, "%d ", value[i]);
 }

 fclose(in_stream);
 fclose(out_stream);
 return 0;
}
56デフォルトの名無しさん:04/12/12 01:23:52
おいおい、sizeof(char)はCの規格で8bitと保証されているよ
57デフォルトの名無しさん:04/12/12 01:28:56
charは一律1バイトだろ。ぜってー(←なぜか変換できない)
58デフォルトの名無しさん:04/12/12 01:31:43
>>56
釣られてなるものか!
59デフォルトの名無しさん:04/12/12 01:33:29
bit数はどの型も処理系依存
60デフォルトの名無しさん:04/12/12 01:49:47
ま、#include <limits.h>してCHAR_BIT使えばいいわけだが。
6148:04/12/12 02:47:51
>>55
ありがとうございました!
何か自分の不甲斐無さとやって頂いた嬉しさと
貴方の物腰の柔らかさに冗談抜きで泣きそうです…。
とりあえず今は課題ですので、提出する事を
重視しています。幸いうちの学校は春休みが
二ヶ月強あるので、そこでじっくり理解
していくつもりです。

長文失礼しました。
62デフォルトの名無しさん:04/12/12 03:39:45
[課題]
文字列操作関数strcpy()と同じ働きをする関数strcopy()を定義せよ。
ただし定義した関数の中では、ポインタを用いること(配列アクセスabc[i]などを用いない)。
また、ここで定義した関数と、次のmain()を組み合わせたプログラムを作成し、うまく動作することを確認せよ。

#include<stdio.h>
#define LINELEN 80

main()
{
char str1[LINELEN],str2[LINELEN];
while (gets(str1) != NULL)
{
strcopy(str2,str1);
printf("%s\n",str2);
}
}

[環境]
言語:C

お願いします。
63 ◆zKht1y/vIY :04/12/12 03:54:10
>>62
char* strcopy(char* to, char* from){
 while(*to++ = *from++)
  ;
 return to;
}
64デフォルトの名無しさん:04/12/12 04:03:13
>63の関数と>62をコンパイルして実行したらうまく動作しません。なんで?
65デフォルトの名無しさん:04/12/12 04:06:21
>>63がアホ過ぎるから
66 ◆zKht1y/vIY :04/12/12 04:06:24
>>64
どういう風にうまく動作しないのかを書け
67デフォルトの名無しさん:04/12/12 04:12:32
>>66
冗談はほどほどにな
68デフォルトの名無しさん:04/12/12 04:13:44
この関数の戻り値って使い道あるの?
69デフォルトの名無しさん:04/12/12 04:15:10
>>68
>>62の2行目
70デフォルトの名無しさん:04/12/12 04:17:05
>>69
位置がずれまくった戻り値って使い道あるの?
まあそれ以前の問題があるが。
71デフォルトの名無しさん:04/12/12 04:19:10
>>70
あ。釣ってくる
72デフォルトの名無しさん:04/12/12 04:46:21
>>68
戻り値は必須ではないけど、標準のstrcpyは返すから。
使い道って意味でも必須ではないけど、あるとウレシイこともある。
まれだけど。
>>64動かないのはなんでだろうね?自分のとこでは動きました。
7372:04/12/12 04:47:01
>>71
つりだったんだ・・・
7462:04/12/12 04:57:27
まず>>64は私ではありません。

間違ったのはchar* strcopyの*を入れてなかったことかも…
引数のほうだけじゃダメなんですね。
言われてみれば戻り値にも入れないと確かにダメだ…。
今Windowsでコンパイラとかインストールしてないので試せないのですが、
UNIXでやったときはコンパイルすると関数にエラーが出てしまい(残念ながらメッセージは思い出せません…)、
実行できませんでした。
たぶんそれは上のことが原因だと思います。
明日試してみたいと思います。
ありがとうございました。
7562:04/12/12 05:03:30
あと気になっていたんですが、これがいわゆる「ぬるぽ」ってやつなんですか?
76デフォルトの名無しさん:04/12/12 09:37:54
全然ちがう
77デフォルトの名無しさん:04/12/12 10:26:18
スミマセン、こんな課題が出ました。
手助けお願い致します。


2004年のカレンダーを、UNIXのcalコマンドと同様に表示させる。

言語はCです。
よろしくお願い致します。
78デフォルトの名無しさん:04/12/12 10:37:08
cal [-jy ] [[month] year]

   オプション  
-j ユリウス暦で表示する
-y 現在の年のすべてのカレンダを表示する
month 表示したい月を指定する
year 表示したい年を指定する

説明  
カレンダをテキスト・ベースで形成して表示する。オプションを指定しない場合は現在の月のカレンダが表示される。
79デフォルトの名無しさん:04/12/12 10:39:24
system("cal");
system("cal -y");
:
80デフォルトの名無しさん:04/12/12 10:51:12
   ( ・∀・)   | | ガッ
  と    )    | |
    Y /ノ    人
     / )    <  >__Λ∩
   _/し' //. V`Д´)/
  (_フ彡        /  ←>>75
81デフォルトの名無しさん:04/12/12 10:52:39
>>75
char *str1,*str2;
while (gets(str1) != NULL)
{
strcopy(str2,str1);
printf("%s\n",str2);
}
82デフォルトの名無しさん:04/12/12 11:12:43
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
if(execv("/usr/bin/cal", argv) < 0) {
fprintf(stderr, "execv err\n");
exit(127);
}
return 0;
}
83デフォルトの名無しさん:04/12/12 13:11:28
変数xは0から1までの0.01刻みの値(101個)をとるものとする。このとき2次関数
f(x)=3x*x+2x+1の値が2.0<f(x)<3.0となるxの値の個数を求めるプログラムおねがいします
xを因数としf(x)の値を返す関数を作成してそれを使用する
84从*・ 。.・):04/12/12 13:34:48
>>83
#include <stdio.h>

#define EPS (1e-12)
#define LE(x, y) ((x) - (y) < EPS)

double
f(double x)
{
return 3 * x * x + 2 * x + 1;
}

int
main(void)
{
int count = 0;
double x;
for (x = 0.0; LE(x, 1.0); x += 0.01) { if (LE(2.0, f(x)) && LE(f(x), 3.0)) { count++; } }
printf("%d\n", count);
return 0;
}
85デフォルトの名無しさん:04/12/12 13:57:27
>>84
ありがとうございます。
defineとかまだ習ってないんですが使わないとできないんですか?
86デフォルトの名無しさん:04/12/12 14:07:18
>>85
#include <stdio.h>

double
f(double x)
{
return 3 * x * x + 2 * x + 1;
}

int
main(void)
{
int count = 0;
double x;
for (x = 0.0; x < 1.0 + 0.0001; x += 0.01) { if (2.0 < f(x) + 0.0001 && f(x) < 3.0 + 0.0001) { count++; } }
printf("%d\n", count);
return 0;
}
87デフォルトの名無しさん:04/12/12 14:11:04
どうもありがとうございました。
delphiってわかります?
88デフォルトの名無しさん:04/12/12 14:59:07
x < 1.0 + 0.0001

なんぢゃそりゃw
89デフォルトの名無しさん:04/12/12 15:14:31
普通はx - 1.0 < 0.0001だな。
90デフォルトの名無しさん:04/12/12 15:19:32
x - 1.0 < 0.0001

なんぢゃそりゃアゲインw
91デフォルトの名無しさん:04/12/12 15:26:34
スマソ
想像で書いちまった

http://www.kouno.jp/home/c_faq/c14.html#5
if (fabs(x - 1.0) <= 0.0001 * x)
こうでいいのかな
92デフォルトの名無しさん:04/12/12 15:35:00
>91
そいつはどうかな

提示のCFAQは2値が十分に等しいと見なせるか、であって
>86 みたいなループにはdoubleを使うな、って事でねーの? >88 は
93デフォルトの名無しさん:04/12/12 16:28:52
x < 1.1
94名無し募集中。。。:04/12/12 16:51:52
やったね、やったね!>∋oノハヾo∈
                从*・ 。.・)
               ⊂   ,,O
               (  ノ
          ≡≡≡⊂\_) テケテケ

∋oノハヾo∈<新スレおめでと〜!
  (・ 。.・*从
  O,,   ⊃
    ヽ  )       テケテケ
    (_/⊃≡≡≡
 _______
| ∋oノノハヾo∈|<きょうはもうねるの>>1
| 〔从*- 。.-从ノシ |
(⌒⌒⌒⌒⌒⌒⌒⌒)
95デフォルトの名無しさん:04/12/12 17:05:35
if (2.0 < f(x) + 0.0001 && f(x) < 3.0 + 0.0001)
なんぢゃそりゃアゲインw
96デフォルトの名無しさん:04/12/12 21:49:50
質問者はとりあえずここ読んどけ。
http://myu.daa.jp/osiete/know2.html
97デフォルトの名無しさん:04/12/12 21:52:22
代わりにやって君:
自分じゃ出来ないからといって、他人にやってもらおうとする人。
やらされる側の面倒さを全く考えてない。

待ってます君:
勝手に一人で面倒な条件を言いつけ、
「待ってます!」と捨てゼリフを言い残して、言われた側へプレッシャーをかける。
無視すると数日後に再び現われ「あの〜、お願いしたんですけど…」と言ってくる。
98デフォルトの名無しさん:04/12/12 22:12:52
教えて君バリアーには掲示板廃止が一番有効
99デフォルトの名無しさん:04/12/13 00:17:28
廃止すると他のスレに混入するからだめ
100デフォルトの名無しさん:04/12/13 00:51:33
100
101101:04/12/13 15:56:32
101
102デフォルトの名無しさん:04/12/13 16:02:46
int main(void){
label:
char *p;
p=malloc(1);
goto label;
return 0;
}

C言語で初めてプログラムを作ってみました。
みなさんどうぞ。
誰かこれを実行してみて下さい。
実行者が現れるまで待ってます!
103デフォルトの名無しさん:04/12/13 16:06:18
      __
    i<´   }\   , - 、
   ヽ.._\./  .ンく r-兮、 __
    ∠`ヽ.! /   ヾニEヲぐ ,ゝ->    さゆがゴッグだ
   /_`シ'K-───‐-、l∠ イ      なんともないぜ
   l´__,/l\、_ ̄0¨0)゙@Yヘ, -┤      
.    l'___|⌒ヾ''ー==、ーr='イ i二|     
   / .」   i   /./7r‐く  lー!
.   f.  ヽ‐i人.∠'<   _i. l,.-ゝ.
    トiヘヘ「ト〈      `X  トレi7__|
   〉ト:トハj`! i.    /  トー┤lルj,リ
  /‐+----+‐l    iー--i---ヾ'〃
.  l_i____i__|   |___i,__i_|

104お願いします:04/12/13 16:10:51
問題:

電卓プログラムを作成せよ
四則演算はもちろん、sinx,cosxを含む計算も出来、
途中で終了も出来るようにせよ

105お願いします:04/12/13 16:12:51
#include <stdio.h>
main()

{ char op;
int end_fg;
double a, result;
end_fg = 1;
scanf("%lf", &result);

while(end_fg >= 1)
{ scanf("%c",&op);

switch(op)
{
case '+':
scanf("%lf",&a)
result = result + a
printf("%lf\n", result);
break;
(中略)
case '*':
scanf("%lf",&a);
result = result * a
printf("%lf\n", result);
break;
case 'q':
end_fg = end_fg - 1;
break;
}}}
ここまで自分で作りました!四則演算だけなら続けて計算できます。
あとはend_fgを切り替えてsinx、cosxの計算を出来るようにするだけなのですが・・・
106デフォルトの名無しさん:04/12/13 16:36:06
>>105
sinxやcosxなどはどうしても判別に3文字(s,cから始まる演算子がほかになければ別ですが)
まずは与えられた式をトークンに分解してどこかに保存なんかしてやると楽かもしれません。
なお計算機の場合若干難しいですが「逆ポーランド記法」をつかえるとやりやすいです。

もし今のままやりたいのでしたらsinやcosの判別を行った後
math.hないで定義されているsin,cos関数を呼び出してやればいいと思います。
呼び出し方
#include <math.h>
を2行目くらいに付け加えてみてください。

時間がないものですから中途半端なヒントでごめんなさい。
ほかの方フォローお願いします。
107デフォルトの名無しさん:04/12/13 17:10:52
下図のようにn段のピラミッドを表示する関数を作成しなさい。(nは入力した値)
void npire(int n);

こんな課題が出ました。
言語はCです。
どうかお願い致します。

1
222
33333
4444444
108デフォルトの名無しさん:04/12/13 17:25:48
>107
nが10以上とかマイナスのときは上手くいかないけど。

#include <stdio.h>

void npire(int n);

void main()
{
/*とりあえず5段*/
npire(5);
}

void npire(int n)
{
int i,j,k;
/*段数ループ*/
for(i=0;i<n;i++){
/*行頭の空白*/
for(j=0;j<(n-i-1);j++)putchar(' ');
/*数字部分*/
for(k=0;k<1+(i*2);k++)printf("%d",i+1);
putchar('\n');
}
}
109デフォルトの名無しさん:04/12/13 17:42:07
例えば、DATAというファイルに

 ------- DATA.text---------------
1 1.0000
2 2.3000
3 3.4443
.
.
10
-----------------------------
といった内容が入っているファイルがあるとします。
 
ファイル中から指定した値を検索し、書き換えてファイルに保存するようなプログラムが作りたいのですが。
例えば、1.000という値を0.001に書き換えて保存するような形です。
言語はc言語です。unix作業しています。よろしくお願いします。
110名無し募集中。。。:04/12/13 17:49:58
>>102
% gcc -Wall -Wpointer-arith -Wstrict-prototypes hoge.c
hoge.c: In function `main':
hoge.c:3: error: 構文解析エラー が "char" の前にあります
hoge.c:4: error: `p' が宣言されていません (この関数内で最初に利用)
hoge.c:4: error: (未宣言の各変数については、それが最初に現われたそれぞれの関数
hoge.c:4: error: に対して一度だけ報告されます。)
hoge.c:4: 警告: 関数 `malloc' の暗黙の宣言
111デフォルトの名無しさん:04/12/13 17:54:00
>>109
从*T 。.T)ノ<さゆは宿題しかやらないの
        sed, awk の使えない Unixer はただの豚なの
112デフォルトの名無しさん:04/12/13 18:53:53
>>111
アフォか?
sedやawkの実装を自分でやったらどうなるかを学ぶ宿題に決まってるだろ?
113デフォルトの名無しさん:04/12/13 19:24:24
始点から終点までの円弧を書きたいのですが、角度計算がうまくできなくて
円弧がうまく描画されません。kakudo[t]の計算に問題があると思うのですが、
どう改良したらよいか分かりません。どなたかご教授ください。

/* 始点 */arcx[0] = arc[z][0].sx; arcy[0] = arc[z][0].sy; arcz[0] = arc[z][0].sz;
/* 中間点 */arcx[1] = arc[z][1].sx; arcy[1] = arc[z][1].sy; arcz[1] = arc[z][1].sz;
/* 終点 */arcx[2] = arc[z][2].sx; arcy[2] = arc[z][2].sy; arcz[2] = arc[z][2].sz;

for(t=0; t<3; t++){
cx = a[0][3]/2; cy = a[1][3]/2;
r = sqrt((arcx[t]-cx)*(arcx[t]-cx)) + ((arcy[t]-cy)*(arcy[t]-cy));
pi = (2.0*asin(1.0));
rad = (pi/180.0);
kaku = (arcx[t] -cx)/r;
kakudo[t] = acos(kaku)*(180/pi);ra[t] = (kakudo0[t])*(pi/180.0);
sinx = (arcy[t]-cy)/r;
cosx = (arcx[t]-cx)/r;
tanx = (arcy[t]-cy)/(arcx[t]-cx);
w = r*cosx;
v = r*sinx;

kakudo1 = (ra[0]/pi*180) - (ra[1]/pi*180);
kakudo2 = (ra[1]/pi*180) - (ra[2]/pi*180);
kakudo3 = kakudo2 + kakudo1;
kakubun = kakudo3/40;

}}
114前スレ981:04/12/13 20:03:42
前スレ981なんですがもう一度問題ここにコピーしてよろしいですか?
115sage:04/12/13 20:33:48
文字配列により表現された16進正整数から整数に変換する関数を定義し、コマンドの引数として、
<16進正整数><演算子><16進正整数>
の形で与えられた四則演算式を計算し、結果を16進正整数の形で出力するプログラムを作成せよ。
ただし、演算結果が実数になる場合は、小数点以下を切り捨てよ。

という問題なのですが。
sscanfを使用してはいけないらしく、どうすれば良いのかわかりません。
宜しくお願いします。
116デフォルトの名無しさん:04/12/13 21:04:12
>>114 == 前スレ981
コピーしちゃだめ。
「前スレ981」だけで充分。
117デフォルトの名無しさん:04/12/13 21:07:00
>>115
16進正整数の値の範囲は?
1) 0-FF
2) 0-FFFF
3) 0-FFFFFFFF
4) 0-FFFFFFFFFFFFFFFF
5) それ以外
118sage:04/12/13 21:11:06
>>117
特に指定はされていません。
おそらく、文字列の長さを数えるstr_length関数を定義しなければならないかと…。
119デフォルトの名無しさん:04/12/13 21:14:06
>>118
strlenやatoiを使っちゃいかんのか?
120デフォルトの名無しさん:04/12/13 21:15:27
ってatoiを自分で作れってのも課題の一つか。すまん
121デフォルトの名無しさん:04/12/13 21:18:07
int main(void){
char *p;
label:
p=malloc(1);
goto label;
return 0;
}

>>110
こちらをどうぞ召し上がれ
122sage:04/12/13 21:18:44
>>119
あ、それは問題には指定されていないので使ってもいいと思います。
宜しくお願いします。
123デフォルトの名無しさん:04/12/13 21:25:44
どっちなんだYO!
124名無し募集中。。。:04/12/13 21:29:13
>>121
% gcc -Wall -Wpointer-arith -Wstrict-prototypes hoge.c
hoge.c: In function `main':
hoge.c:4: 警告: 関数 `malloc' の暗黙の宣言
% ./a.out
zsh: 4922 segmentation fault ./a.out

せぐめんてーしょんふぉーると(pgl
125sage:04/12/13 21:50:07
文字配列により表現された16進正整数をatoiで整数に変換できるのであれば、使っちゃダメだと思われます。
すみません…。strlenはOKだと思われます。
126デフォルトの名無しさん:04/12/13 21:52:00
>>125
大丈夫。atoiは16進数文字列からは整数にできない。
127デフォルトの名無しさん:04/12/13 21:54:31
問題は
文字型で入力し、その後1文字ずつ改行を加えながら表示させなさい
下記まで考えたができんっ!ちなみにこんな感じの考え方で良いんだって。
まぁ、どうせ初心者だし
#include <stdio.h>
int main()
{
char a,*pa;
scanf("%s",&a);
pa=a;
while(a!='\0'){
printf("%c\n",a);
pa++;
}
return 0;
}
128デフォルトの名無しさん:04/12/13 22:06:44
言語C++
「番兵を用いた双方向リストに対して、マージソートを用いて辞書順にソートする関数を作成せよ」という課題が出ました。
ちなみに、リストは

struct BListCell {
char word[ 64 ]; /* 単語を格納する配列 */
struct BListCell *next; /* 次のセルを指すポインタ */
struct BListCell *prev; /* 前のセルを指すポインタ */
};

と定義してあります。
結構面倒くさいかもしれませんが、よろしくお願いします。
129前スレ988:04/12/13 22:16:53
前スレ988ですが、それっぽいものを作ってみたものの、実行してみたら
「エラーが発生したので、…(プログラム名).exeを終了します」とか言われました。

どなたか添削お願いします。

#include <stdio.h>
#include <string.h>
char *my_strstr(char *s, char *p){
char *cs, *cp;
while(*s){
cs = s; cp = p;
while(*cs == *cp){
cs++; cp++;
}
if(*cp == '\0'){
return(s);
}
s++;
}
return(NULL);
}
130前スレ988続き:04/12/13 22:17:55
int main(void){
int i, x, p = 0, q = 0;
char *pat = "abc", buf[256], result[256];
scanf("%d", &x);
for(i = 0; i <= x; i++){
fgets(buf, sizeof buf, stdin);
}
if(my_strstr(buf, pat)){
p = q + strlen(buf);
for(i = q; i <= p; i++){
buf[i] = result[i];
q = q + strlen(buf);
}
}
for(i = 0; i <= p; i++){
printf("%s\n", result[i]);
}
return(0);
}

以上です。お願いします。
131デフォルトの名無しさん:04/12/13 22:20:21
少しは自分でやれよプ
132デフォルトの名無しさん:04/12/13 22:38:42
( ´ー`)フゥー...
>>124>>121

#include <stdio.h>
#include <stdlib.h>

int main(void){
char *p;
label:
p=malloc(1);
goto label;
return 0;
}
133デフォルトの名無しさん:04/12/13 22:41:17
>>129
http://en.wikibooks.org/wiki/Programming:C_strings#The_strstr_function
#include <string.h>
/* strstr */
char *(strstr)(const char *s1, const char *s2)
{
    size_t s2len;
    /* Check for the null s2 case.  */
    if (*s2 == '\0')
        return (char *) s1;
    s2len = strlen(s2);
    for (; (s1 = strchr(s1, *s2)) != NULL; s1++)
        if (memcmp(s1, s2, s2len) == 0)
            return (char *) s1;
    return NULL;
}
134デフォルトの名無しさん:04/12/13 22:50:38
>>132
<stdio.h> は何で include するの?
135デフォルトの名無しさん:04/12/13 22:52:42
>>115
ふと気になったのだが

>演算結果が実数になる場合は、小数点以下を切り捨てよ
正整数同士の四則演算で、虚数が出てくることってあるのか?
136デフォルトの名無しさん:04/12/13 22:58:12
[1] 授業単元: データの入力と出力
[2] 問題文(含コード&リンク):
1.半径rをキーボードから読み込み、その球の表面積Sと体積Vを求めるプログラムを作れ。
 ただし、 S=4πr^2 V=4πr^3/3  π=3.14 とする。

2.実行すると「画面の前にいる人に名前を尋ねて、その人がキーボードに打ち込んだ名前を文字列に収納する」ようなプログラムを作れ。

[3] 環境 :C言語
[4] 期限:2004年12月14日12:00まで
[5] その他の制限: なし。

お願いいたします。
137デフォルトの名無しさん:04/12/13 22:58:31
>>135
正整数と四則演算と虚数の定義によるんじゃない?
138sage:04/12/13 23:05:08
>>136
[1]
#include <stdio.h>
int main(void)
{
double r;
double PI = 3.14;
scanf("%lf", &r);
printf("S = %lf\nV = %lf\n", 4 * PI * r * r, 4 * PI * r * r * r / 3);
return 0;
}

[2]
#include <stdio.h>
#define BUF_SIZE 1024
int main(void)
{
char buf[BUF_SIZE];
printf("がめんのまえにいるひとのなまえはなんですか?: ");
fgets(buf, BUF_SIZE, stdin);
return 0;
}
139デフォルトの名無しさん:04/12/13 23:08:09
>>136
なんかもう、自分では一切やりませんよって感じだなw
140デフォルトの名無しさん:04/12/13 23:10:44
宿題対策は2chで。とか広まってんじゃねプ
141デフォルトの名無しさん:04/12/13 23:16:20
>>138
ありがとうございます。

>>139
自分でやったんですがテンプレに記入するところが見当たらなかったので・・・

142デフォルトの名無しさん:04/12/13 23:20:30
テンプレにないから書きませんでしたか。すごいやる気のなさだな
143デフォルトの名無しさん:04/12/13 23:25:11

144デフォルトの名無しさん:04/12/13 23:30:30
プププ
145デフォルトの名無しさん:04/12/13 23:36:28

146デフォルトの名無しさん:04/12/13 23:40:22
ジウ
147デフォルトの名無しさん:04/12/13 23:43:00
ヨン
148six:04/12/13 23:47:16
ハフマン符号のプログラムで下記のプログラムをvisual c で実行したとこと、
「f:\プログラム\huffman.c(11) : fatal error C1083: インクルード ファイルがオープンできません。'unistd.h': No such file or directory
cl.exe の実行エラー」
とでるのですが、これはvisual c がきちんと入ってないから起こるエラー
なのでしょうか?どなたかわかるかたいらっしゃったら詳しく聞かせてもらえないでしょうか。
149six:04/12/13 23:47:37
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<unistd.h>

#defineSIZE256
#defineBRANCH0x100


typedef struct _node {
intsym;
intcount;
struct _node*right;
struct _node*left;
} NODE;
150six:04/12/13 23:48:20
intsym_count[SIZE];
intcode[SIZE];
intheap_size = 0;
NODE*heap_table[SIZE];
NODE*root;
charheader[] = "HUFF";
intresult = 0;



NODE *
get_node( void )
{
NODE*node = malloc( sizeof( NODE ) );
if( node == NULL ){
fprintf( stderr, "メモリが足りません\n");
exit( 1 );
}
return node;
}
151デフォルトの名無しさん:04/12/13 23:48:32
>>148
unistdはunix用ヘッダだからVCには入ってない
152six:04/12/13 23:48:56
#defineCOUNT_COMP( i, j )heap_table[(i)]->count - heap_table[(j)]->count


#define SWAP( i, j ){\
NODE*tmp = heap_table[(i)];\
heap_table[(i)] = heap_table[(j)];\
heap_table[(j)] = tmp;\
}

void
make_heap( void )
{
inti, j , k;
for( i = 0; i < SIZE; i++ ){

if( sym_count[i] ){
NODE*p = get_node();
p->sym = i;
p->count = sym_count[i];
p->left = p->right = NULL;
heap_table[heap_size++] = p;
}
}
153six:04/12/13 23:49:20

for( i = heap_size / 2 - 1; i >= 0; i-- ){
for( j = i; (k = 2 * j + 1) < heap_size; j = k){
if( (k + 1 < heap_size) && COUNT_COMP( k, k + 1 ) > 0 ) k++;
if( COUNT_COMP( j, k ) < 0 ) break;
SWAP( j, k )
}
}
}
NODE *
get_heap( void )
{
NODE*result;
intj, k;
result = heap_table[0];
heap_table[0] = heap_table[--heap_size];
for( j = 0; (k = 2 * j + 1) < heap_size; j = k){
if((k + 1 < heap_size) && (COUNT_COMP(k, k + 1) > 0)) k++;
if( COUNT_COMP( j, k ) < 0 ) break;
SWAP( j, k )
}
return result;
}
154ぼるじょあ:04/12/13 23:55:46
perlで次のようなコードを書きました。
$s = '1102785302.dat<>ダイオキシンが原因 ウクライナ野党候補の急病 (120)';
$s =~ m/^(\d+)\.dat.*\((\d+)\)$/;
print $1,"\t",$2,"\n";
出力結果は、
1102785302 120
で、期待どおりのものでした。

これをC++のboost::regexで実行しようとして、次のようなコードを書きました。
string str = "1102785302.dat<>ダイオキシンが原因 ウクライナ野党候補の急病 (120)";
boost::smatch m;
boost::regex r("^(\d+)\.dat.*\((\d+)\)$");
boost::regex_search(str, m, r);
cout << m.str(1) << "\t" << m.str(2) << endl;

ところが、出力は期待のものが得られませんでした。
これはboostの正規表現はperlのものと違うということでしょうか?

155デフォルトの名無しさん:04/12/14 00:01:54
>>154
\は\\にしないとダメぽ

boost::regex r("^(\\d+)\\.dat.*\\((\\d+)\\)$");
156デフォルトの名無しさん:04/12/14 00:48:50
文字列の入ったテキストファイルを読み込んで、
あらかじめ作っておいた配列に格納する方法を教えてください
C言語でお願いします
157デフォルトの名無しさん:04/12/14 00:55:58
マルチ死ね
158デフォルトの名無しさん:04/12/14 01:25:46
マルチだろうがなんだろうが、宿題スレなんだから引き受けて
もらわないと困るんですよ
159デフォルトの名無しさん:04/12/14 01:27:40
ttp://para-site.net/up/data/755.jpg
これの時計部分だけをユーザー関数にしたいのですが、どうすれば良いかわかりません。
お願いします。
160デフォルトの名無しさん:04/12/14 01:28:28
>>159
リンク先はjpgとなっていますが、IEでテキストとして見れます。
161デフォルトの名無しさん:04/12/14 01:30:17
>>157
うっせーよ自治厨
162デフォルトの名無しさん:04/12/14 01:34:29
マルチだろうがなんだろうが、宿題スレなんだから引き受けて
もらわないと困るんですよ
163デフォルトの名無しさん:04/12/14 01:36:23
>>162
タダで仕事を無理に引き受けさせようとするお前の態度が気に入らない。
164デフォルトの名無しさん:04/12/14 01:42:01
FILE *fp;
int n=0;
if ((fp = fopen("file.txt", "r")) == NULL) exit(1);
while (fgets(array[n], MAX_LEN, fp) != NULL) n++;
fclose(fp);
165デフォルトの名無しさん:04/12/14 01:42:03
マルチだろうがなんだろうが、宿題スレなんだから引き受けて
もらわないと困るんですよ
166デフォルトの名無しさん:04/12/14 01:43:48
マルチだろうがなんだろうが、宿題スレなんだからさっさと答えろやお前ら。
どうせ仕事してないんだろ?
167デフォルトの名無しさん:04/12/14 01:46:35
マルチだろうがなんだろうが、宿題スレなんだからさっさとやっとけよ?
俺が起きるまでにドキュメントも仕上げとけ
168デフォルトの名無しさん:04/12/14 02:57:46
彼は寝た?
169デフォルトの名無しさん:04/12/14 03:06:02
[1] ファイル入出力
[2] 予め与えられた行列(テキストファイル)で、列重みが最大な列の番号を出力するプログラム 。
[3] 環境
 [3.1] OS:UNIX
 [3.3] 言語:C
[4] 期限:水曜
170デフォルトの名無しさん:04/12/14 04:13:30
171デフォルトの名無しさん:04/12/14 04:41:03
[2] 問題文1:
input.txtなるファイルからスペースで区切られた数値の列を読み込み,
その平均値をoutput.txtなるファイルに出力せよ.
その際,ファイルの終わりは,EOFにより検出せよ.

問題文2:
文字列型変数nameと整数型変数iの値をキーボードから読み込み,
文字列型データのi番目の文字を標準出力に出力せよ.

問題文3:
倍精度実数xの値をキーボードから読み込み,
以下の2つの式の値の差の絶対値が0.00001より小さくなるような最小のnを標準出力に出力せよ.
y=Σ[i=0,n]x^i
z=1/(1-x)

[3] 環境
 [3.1] OS:UNIX
 [3.3] 言語:C
[4] 期限:2004年12月14日17:00まで

いろいろやってみましたができませんでした・・・。
3番はできればでいいのでよろしくお願いします。
172デフォルトの名無しさん:04/12/14 05:09:56
くだらない質問で恐縮ですが、
C言語で配列の要素数を#defineやプログラム内で宣言せずに
scanfなどでプログラム実行中に後から指定する方法は無いのでしょうか?
やって見ると、「定数式が必要」とエラーになるのですが・・・
173デフォルトの名無しさん:04/12/14 05:13:54
C99
174デフォルトの名無しさん:04/12/14 05:50:21
>>154
うまくいきました!
ありがとうございました
175154:04/12/14 05:51:06
まちがい。上は
>>155 さん 宛てです。
176デフォルトの名無しさん:04/12/14 05:52:07
>>159をヒントだけで良いのでお願いします。
177デフォルトの名無しさん:04/12/14 05:59:45
はやく朝飯作れよ
178デフォルトの名無しさん:04/12/14 06:09:23
>>172
C99から静的配列の要素数にconst int 型の変数が使えるようなった。
C99がつかえないなら callocをつかう。
const int bufsize = 1024;
int *iptr = calloc ( bufsize, sizeof(int) )
/
何らかの処理
/
free(ipr);;
179デフォルトの名無しさん:04/12/14 06:30:32
>>171 問題文1 おいら初心者なので間違ってたらゴメン
#include <stdio.h>
int main(){
 double data, temp = 0; int cnt = 0;
 FILE *fp1, *fp2;
 char fname1[64] = "hw.dat"; char fname2[64] = "output.txt";

 fp1 = fopen(fname1, "r");
 if (fp1 == NULL){
  printf("ファイルをオープンできません。\n");
 } else {
  while(1){
   if ( fscanf(fp1, "%lf", &data) == -1 ){
    break;
   } else {
    temp += data;
    cnt++;
   }
  }
  fclose(fp1);
  fp2 = fopen(fname2, "w");
  if (fp2 == NULL){
   printf("ファイルをオープンできません。\n");
  } else {
   if ( fprintf(fp2, "%f", temp / cnt ) == -1){
    printf("ファイルの書き込みに失敗しました\n");
   }
  fclose(fp2);
  }
 }
 return 0;
}
180デフォルトの名無しさん:04/12/14 07:28:05
3番

xが -1 < 0 < 1 の範囲のとき、解が求まるけど、あってますか?
181171:04/12/14 08:32:32
>>179
ありがとうございます。参考にさせていただきます

>>180
解はそうかもしれませんね。なんか数学の定理だか公式らしいです。
出力結果は
例えば,x=0.9 のとき n=131, x=0.5 のとき n=17 となる.
らしいです。
182デフォルトの名無しさん:04/12/14 08:47:36
>>178
どうも有難うございます。
前者の方でできました。
183デフォルトの名無しさん:04/12/14 12:01:07
【課題】
入力ファイルの英文単語の先頭文字を大文字へ変換して別ファイルへ出力するプログラムを作りたい。
【仕様】
1.次のような入力ファイルを入力すると、出力ファイルReformed.txtを得る。

入力ファイルlyrics.txtの内容
there's a lady who's sure all that gitters is gold and she's buying a stairway to heaven.
出力ファイルReformed.txtの内容
There's A Lady Who's Sure All That Gitters Is Gold And She's Buying A Stairway To Heaven.
(注意!プログラムは行頭が空白でも正しく機能すること)

2.プログラムは a.out lyrics.txt reformed.txt とコマンドを入力して実行する。

3.プログラムはファイル入力部分、大文字変換部分、ファイル出力部分の3つの関数とMain関数から構成したい。

【環境】
言語:C言語

関数とか…苦手なんだよママン…(;つД`) 
どなたか力を貸していただきたいです。
184デフォルトの名無しさん:04/12/14 13:30:44
↑関数苦手だったら何もできないのと同じじゃないかヲイ
185デフォルトの名無しさん:04/12/14 13:40:23
a.out lyrics.txt reformed.txt
で reformed.txt を Reformed.txt に変更してから
ファイルを作成する機能も必要?
186デフォルトの名無しさん:04/12/14 13:47:43
そうかもね
環境unix系ぽいし関数の流用利くし
187デフォルトの名無しさん:04/12/14 13:50:48
アップローダはここ使うといいよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
188デフォルトの名無しさん:04/12/14 16:01:15
課題:"今までに習った事を用いて", sin,cosの計算をするプログラムを作成せよ.  例) 入力[s90]結果[1] 入力[c60]結果[0.5] など
#include <stdio.h>
#include <math.h>
#define pi (3.1415926535)

main()
{
char op2;
double kakudo, x, result;
scanf("%c", op2);
if(op2 = 'c'){
scanf("%lf",&kakudo);
x = kakudo / 180. * pi;
result = cos(x);
printf("%lf\n",result);
}
else if(op2 = 's'){
scanf("%lf",&kakudo);
x = kakudo / 180. * pi;
result = sin(x);
printf("%lf\n",result);
}
}
ここまで作りましたが,実行しても何故か Segmentation fault と表示されてしまいます.一体何がいけないのでしょうか.ご教授お願いします!

189デフォルトの名無しさん:04/12/14 16:08:38
>>188
("%c", &op2);
==
190デフォルトの名無しさん:04/12/14 16:08:45
>>188
printfの書式指定文字列に"%lf"ってあったっけ。もっとも、間違えやすい
人が多いので、許している処理系もあるが。
191188:04/12/14 16:25:27
>>189
ありがとうございます
最初の問題は解決しました

しかしsとcどちらの入力をしてもコサインの計算が行なわれるようです.
if文の使い方に問題があるのでしょうか?
192デフォルトの名無しさん:04/12/14 16:38:00
質問です(C言語) 
「 mcbsp0_rx_intr 」 ←の動作を説明していただけませんか?

また、McBSP0_DRR,McBSP0_DXRはc6711.hに定義されているレジスタであって、
*(unsigned int *)McBSP0_DXR=x&0xfffe;
の「0xfffe」の意味は何か

これも説明していただけると幸いですm(_ _)m

ちなみにプログラムの一部は
temp=*(unsigned int *)MUXL&0xfc1fffff;
temp=temp | 0x01a00000;
*(unsigned int*)MUXL=temp
ICR=0xffff;
IER=0x0102;
CSR=CSR | 1;

INT8:
b _mcbsp0_rx_intr
NOP
〃(×6)
となります。
193デフォルトの名無しさん:04/12/14 17:02:44
>>192
こういう質問は何度見てもむかつくな
194デフォルトの名無しさん:04/12/14 17:06:22
>>191
Cの等価比較は=じゃなくて==だ。
195デフォルトの名無しさん:04/12/14 17:21:56
>>183
の1の問題を勉強のためC++で作っていたのですが
出力されたファイルが文字が数字なってしまって。
どなたか見て頂きたいです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/27.txt
196デフォルトの名無しさん:04/12/14 17:28:31
>>159をヒントだけで良いのでお願いします。
197デフォルトの名無しさん:04/12/14 17:32:36
>>195
int input[256]; → char input[256];
ざっと眺めただけだからいけるかどうかわからんけど。
あと、<iostream.h>とかは古いから<iostream>とかを使うようにしようね。
198デフォルトの名無しさん:04/12/14 17:37:31
>>196
コンパイルすら通らないコード持って来るな。
199デフォルトの名無しさん:04/12/14 17:38:09
>>197
charとは気がつきませんでした、
どうもありがとうございます。
200デフォルトの名無しさん:04/12/14 17:39:14
>>198
コンパイルとおりませんでしたか!?
失礼しました。
こちらで確認します。
201デフォルトの名無しさん:04/12/14 17:53:33
>>195
あと、
input[j] = toupper(input[j=j+1]);
これは動作未定義だよ。副作用完了点がはっきりしない。
次の行でjをインクリメントするように汁。
202デフォルトの名無しさん:04/12/14 17:55:55
それと、there'sがThere'Sになるのはまずいだろう。
203デフォルトの名無しさん:04/12/14 17:57:07
未定義じゃなくて左辺のjがインクリマンコ後の値になる
204デフォルトの名無しさん:04/12/14 18:03:12
確かにインクリマンコですた。
205デフォルトの名無しさん:04/12/14 21:52:14
2次元配列を用いて九九の結果を画面に出力するプログラムを作成せよ。
但し掛け算の計算はmulとして関数を作成すること。
おしえてくだされ
206デフォルトの名無しさん:04/12/14 21:54:13
キーボードから2つの整数を入力し、その加算、減算、乗算、除算を計算し結果を
画面に出力するプログラムを作成せよ。
但し各処理ごとに加算:add 減算:sub 乗算:mul 除算:divとして関数を作成すること。
(除算の結果は実数で)
C言語についてです。わかりません
207デフォルトの名無しさん:04/12/14 21:58:30
>>205
マルチ

>>206
マルチ
208デフォルトの名無しさん:04/12/14 22:01:35
>>207
>>206 は誘導されてここに来てるからマルチじゃないけど、
>>205 は自分で勝手に移動してるからマルチ認定。
209デフォルトの名無しさん:04/12/14 22:03:07
マルチだろうがなんだろうが、宿題スレなんだから引き受けて
もらわないと困るんですよ
210デフォルトの名無しさん:04/12/14 22:04:49
>>205

#include<stdio.h>

void kuku(int *x){
int i,j;
int *xi;
xi=x;
for(i=0;i<9;i++){
for(j=0;j<9;j++){
*(xi+j)=(i+1)*(j+1);
}
}
}
int main(int argc,char* argv[]){
int x[9][9];
int i,j;
kuku(&x[0][0]);
for(i=0;i<9;i++){
for(j=0;j<9;j++){
printf("%d ",x[i][j]);
}
printf("\n");
}
return(0);
}
211デフォルトの名無しさん:04/12/14 22:10:02
>>210
mulがねーぞー、こんなもん使えねーなー
212デフォルトの名無しさん:04/12/14 22:11:25
>>211
わりぃわりぃ
#include<stdio.h>

void mul(int *x){
int i,j;
int *xi;
xi=x;
for(i=0;i<9;i++){
for(j=0;j<9;j++){
*(xi+j)=(i+1)*(j+1);
}
}
}
int main(int argc,char* argv[]){
int x[9][9];
int i,j;
kuku(&x[0][0]);
for(i=0;i<9;i++){
for(j=0;j<9;j++){
printf("%d ",x[i][j]);
}
printf("\n");
}
return(0);
}
213デフォルトの名無しさん:04/12/14 22:12:16
>>211
いかん、酔ってるなw
#include<stdio.h>

void mul(int *x){
int i,j;
int *xi;
xi=x;
for(i=0;i<9;i++){
for(j=0;j<9;j++){
*(xi+j)=(i+1)*(j+1);
}
}
}
int main(int argc,char* argv[]){
int x[9][9];
int i,j;
mul(&x[0][0]);
for(i=0;i<9;i++){
for(j=0;j<9;j++){
printf("%d ",x[i][j]);
}
printf("\n");
}
return(0);
}

このmul結構速いし、いいと思うよ。
214デフォルトの名無しさん:04/12/14 22:14:13
>>206ぐらいまでくると、わからないと言われても考えてないだけにしか思えないな
215デフォルトの名無しさん:04/12/14 22:15:21
>>206
#include <stdio.h>

int add(int x, int y){return x + y;}
int sub(int x, int y){return x - y;}
int mul(int x, int y){return x * y;}
double div(int x, int y){return (double)x / y;}

int main(){
  int x, y;
  printf("x?:");
  scanf("%d", &x);
  printf("y?:");
  scanf("%d", &y);

  printf("%d+%d=%d\n", x, y, add(x, y));
  printf("%d-%d=%d\n", x, y, sub(x, y));
  printf("%d*%d=%d\n", x, y, mul(x, y));
  printf("%d/%d=%f\n", x, y, div(x, y));
}
216デフォルトの名無しさん:04/12/14 22:15:57
>>214
そんんことはどうでも良いんだよ。はよ、答え作れボケカス
217215:04/12/14 22:19:48
>>216
ご要望には添えなかったかい?
218デフォルトの名無しさん:04/12/14 22:19:59
>>214 >>216
彼は寝ただろう。
219デフォルトの名無しさん:04/12/14 22:20:17
>>216
>>215にあるしwwwwwwwwwwwww
あ、釣られちったwwwwwwwwwwww
220デフォルトの名無しさん:04/12/14 22:21:48
>>205
#include <stdio.h>

int mul(int x, int y){
  return x * y;
}

int main(){
  int i, j, res[9][9];
  for (i = 1; i <= 9; ++i)
    for (j = 1; j <= 9; ++j)
      res[i - 1][j - 1] = mul(i, j);

  printf("   1  2  3  4  5  6  7  8  9\n");
  for (i = 1; i <= 9; ++i){
    printf("%d", i);
    for (j = 1; j <= 9; ++j)
      printf("%3d", res[i - 1][j - 1]);
    printf("\n");
  }
}
221206:04/12/14 22:38:35
サンクス
次は>>206のプログラムをポインタ変数を使い計算するようにプログラムを書き直せ
ヒント:例えば、問題>>206で2つの整数型の変数を
int num1, num2;
と宣言しているならば、
int *pnum1, *pnum2;
として、各変数のアドレスを代入するためのポインタ変数を宣言し、後のプログラム
もポインタ変数にあわせて修正する。

だそうです。お願いします
222デフォルトの名無しさん:04/12/14 22:41:31
ワラタw
223デフォルトの名無しさん:04/12/14 23:16:59
すげー
224215:04/12/14 23:19:06
>>221
こういうことかな。出来れば問題は一度に書いてほしいんだけれども。
#include <stdio.h>

int add(int *x, int *y){return *x + *y;}
int sub(int *x, int *y){return *x - *y;}
int mul(int *x, int *y){return *x * *y;}
double div(int *x, int *y){return (double)*x / *y;}

int main(){
  int x, y;
  int *px = &x, *py = &y;
  printf("x?:");
  scanf("%d", px);
  printf("y?:");
  scanf("%d", py);

  printf("%d+%d=%d\n", *px, *py, add(px, py));
  printf("%d-%d=%d\n", *px, *py, sub(px, py));
  printf("%d*%d=%d\n", *px, *py, mul(px, py));
  printf("%d/%d=%f\n", *px, *py, div(px, py));
}
225206:04/12/14 23:32:51
サンクス。がmmばって単位とりまし
226215:04/12/14 23:38:18
単位取りだけじゃなくて勉強もがんばろうね。まぁ、こういうところで
聞いてるわけだし、プログラムが将来いらないような職業に就くん
だろうけど。
227デフォルトの名無しさん:04/12/14 23:53:33
これで単位取れるような教育に意味なんてあるんだろうか・・・
228デフォルトの名無しさん:04/12/14 23:55:27
丸写しバレバレだから単位取れないと思うよ
229デフォルトの名無しさん:04/12/14 23:56:46
>>206
最低限質疑応答に答えられるくらいの理解はして桶
230さゆ:04/12/15 00:52:09
<<183
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

#define BUF 256

#define wordblock(s) s == ' ' || s == ',' || s == '.'\
|| s ==':' || s == ';' || s == ')' || s == '(' || s == '?'\
|| s == ']' || s == '[' || s == '@' || s == '/' || s == '<'\
|| s == '>' || s == '#' || s == '$' || s == '&' || s == '*'\
|| s == '%' || s == '{' || s == '}'

#define file_open(fp, fname, mode, errno) \
if((fp = fopen(fname, mode)) == NULL){\
fprintf(stderr, "Can't open file:%s\n", fname);\
exit(errno);\
}


int input_stream(FILE *fp, char *s);
void convert(char *s);
int output_stream(FILE *fp, char *s);

231さゆ:04/12/15 00:53:30
int main(int argc, char *argv[])
{
char s[BUF];
FILE *fp1, *fp2;

if(argc != 3){
fprintf(stderr, "Input read & write file name\n");
exit(1);
}

file_open(fp1, argv[1], "r", 1);
file_open(fp2, argv[2], "w", 1);

while(input_stream(fp1, s) != EOF){
convert(s);
if(output_stream(fp2, s) == '\0'){
fprintf(stderr, "Can't write file %s:\n",fp2);
exit(1);
}
}

fclose(fp1);
fclose(fp2);

return 0;
}

232さゆ:04/12/15 00:54:52
int input_stream(FILE *fp, char *s)
{
int c, i;
for(i =0; i < BUF - 1; i++){
if((c = fgetc(fp)) == EOF){
if(i == 0)
return EOF;
s[i] = '\0';
return 1;
}
s[i] = c;
}
s[i] = '\0';

return 1;
}
void convert(char *s)
{
int i, c;
static int up = 1;
for(i = 0; s[i] != '\0'; i++){
c = s[i];
if(wordblock(c))
up = 1;
else if(isalpha(c) && up){
c = toupper(c);
up = 0;
}
s[i] = c;
}
}
233さゆ:04/12/15 00:55:13
int output_stream(FILE *fp, char *s)
{
if(fprintf(fp, s) < 0)
return '\0';

return 1;
}
/*改行も区切りにするときは最初のところに付け加えてね。*/
234デフォルトの名無しさん:04/12/15 01:10:04
出力後のfclose()のエラーチェックしないでfprintf()のエラーチェックをしている馬鹿さ加減が笑える。
235さゆPさん ◆SayuminPM. :04/12/15 01:18:58
>>230
マジカル美勇伝はちゃんと見た?
236デフォルトの名無しさん:04/12/15 01:36:27
半径(r)と中心点(x0,y0)、始点(x1,y1)、中間点(x2,y2)、終点(x3,y3)と分かっていて、
始点から中間点の角度、中間点から終点の角度をそれぞれ計算し、
始点から中間点を通って終点までの円弧の長さの計算のプログラムを作成してください。
お願いします。
237さゆ:04/12/15 01:40:05
>>
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:

238デフォルトの名無しさん:04/12/15 01:41:31
>>236
中心 (x0, y0) 半径r ってのは分かるけど
始点中間点終点の定義が分からない絵にでも書いて
239デフォルトの名無しさん:04/12/15 01:43:22
それらのデータの整合性が取れている保証はある?
240236:04/12/15 01:52:36
始点中間点終点は任意で決め、そこから中心と半径を求めるプログラムを作り、
それから236へつながってます。説明不足ですみません。
241デフォルトの名無しさん:04/12/15 02:26:43
3点が決まれば円が描けるが、2点以上が同じ点だったり、
一直線上に乗っていないかどうかとかはチェックする必要あり。

242デフォルトの名無しさん:04/12/15 02:27:34
str1で渡された文字列を、反転してstr2で指定された領域に格納する関数
char*strrev(char *str1,char *str2)
を定義し、その動作を確認するプログラムを書け。
ただし文字列の長さを調べるstrlen関数を使用すること。
また、関数strrevは反転した文字列の先頭ポインタを関数値とすること。
(str1が''abc''ならstr2は''cba''という風に)

以上です。C言語でお願いします。
ポインタの概念がどうもよく分からないです...う〜ん、勉強不足か。
参考書とか買って自主的に勉強しないとなぁ...
243デフォルトの名無しさん:04/12/15 02:36:32
>>242
#include <stdio.h>
#include <string.h>

char *strrev1(char *str1, char *str2)
{
char *p = str1 + strlen(str1) - 1, *orig2 = str2;

while (1) {
*str2++ = *p;
if (p == str1) {
*str2 = '\0';
break;
} else
p--;
}
return orig2;
}

int main(void)
{
char buf[128], buf2[128];

printf("input str1 = ");
fgets(buf, sizeof(buf), stdin);
buf[strlen(buf) - 1] = '\0';
printf("reversed string(str2) = %s\n", strrev1(buf, buf2));

return 0;
}
244デフォルトの名無しさん:04/12/15 02:37:31
>>242
上のプログラムで関数名がstrrev1()となっているのは、string.h内に
同名の関数strrev()があるからです。その辺は適当にいじって。
245デフォルトの名無しさん:04/12/15 03:52:19
ところで strrev の使い道ってどんなのがあるん?
246デフォルトの名無しさん:04/12/15 03:59:01
はじめまして。C++でよろしくお願いします。
------------------------------------------
(a.txtファイル)
aaaaaaaaaaa:fajdjgal;djkl;asjfl;as
bbbbbbbbbbbbbbbb:klasjf;laskdjfklsjgslkjf
ccccccccccc:klasjfl;asjf
     ・
     ・
     ・
------------------------------------------
一行が?:?っていうパターンの文字なんですが、
これを
------------------------------------------
(a.txtファイル)
aaaaaaaaaaa
bbbbbbbbbbbbbbbb
ccccccccccc
     ・
     ・
     ・
------------------------------------------
こんな風なa.txtファイルにしたいんです。
:が出てきたらどうにかするんだと思うのですが、
よくわかりません。よろしくお願いします。
247デフォルトの名無しさん:04/12/15 04:17:23
>>246
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstdlib>

int main()
{
std::ifstream ifs("a.txt");
std::string str;
std::vector<std::string> vs;

if (!ifs) {
std::cerr << "a.txtがありません。" << std::endl;
std::exit(1);
}
while (std::getline(ifs, str))
vs.push_back(str);

ifs.close();

std::ofstream ofs("a.txt");
if (!ofs) {
std::cerr << "a.txtのオープンに失敗しました。" << std::endl;
std::exit(1);
}
248デフォルトの名無しさん:04/12/15 04:17:47
for (std::vector<std::string>::const_iterator pos = vs.begin(); pos != vs.end(); ++pos) {
str = *pos;
std::string::size_type sz = str.find(":");
if (sz != std::string::npos)
str = str.substr(0, sz);
ofs << str << "\n";
}
ofs.close();
}
249246:04/12/15 04:40:24
>>247
おおお、こんなにも早くありがとうございました。
250デフォルトの名無しさん:04/12/15 04:51:43
>>242
・・・その問題、全く同じ形で先日オレの大学で出されたのだが・・・。
多分あんた、オレと同級生かもね。
251デフォルトの名無しさん:04/12/15 04:53:46
>>250
チクレ!
252デフォルトの名無しさん:04/12/15 05:01:34
二次元平面上の点のための構造体point,円のための構造体circleを次のように定義する
struct point{double x;double y;}
struct circle{struct point center;double hankei;}
(1)円の面積を求める次の関数を作り,mainプログラムでその動作を調べよ。
 double menseki(struct circle c1)

構造体を習ったばかりで出されたのですが全然分かりません、教えてください。
253デフォルトの名無しさん:04/12/15 05:11:53
>>252
出題者って相当頭弱そうだなそれ
254デフォルトの名無しさん:04/12/15 05:12:59
>>252
中心の座標を入力する意味が無いけどこんな感じ?
#include <stdio.h>
#include <math.h>
struct point { double x; double y; };
struct circle { struct point center; double hankei; };
double menseki(struct circle c1)
{
return c1.hankei * c1.hankei * M_PI;
}
int main(void)
{
struct circle c;
printf("中心の座標を入力: ");
scanf("%lf%lf", &c.center.x, &c.center.y);
printf("半径を入力: ");
scanf("%lf", &c.hankei);
printf("%lf\n", menseki(c));
return 0;
}
255デフォルトの名無しさん:04/12/15 05:13:50
>>253
オマエガナー
256252:04/12/15 05:20:05
252です、その問題には続きがあって、
ttp://www.siokara.cjb.net/siobin/sio001/src/sa10580.zip.html
ここのcir.cです。できればdic.cも教えてください
257デフォルトの名無しさん:04/12/15 05:27:57
jpgワロタ
究極の丸投げだなw
258デフォルトの名無しさん:04/12/15 06:13:10
>>252
だいぶ、問題からずれてるけど

>>187のろだ拝借
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/28.txt
259デフォルトの名無しさん:04/12/15 06:27:45
おはようございます。よろしくおねがいします。
問題1.ファイルの整理の問題です。
list.txt
------------
tanaka
okawa
jack

 ・
tanaka
okawa

 ・
tanaka
 ・
 ・
------------
これを
list-out.txt
------------
tanaka
okawa
jack
 ・
 ・
------------
というふうに一回出てきた名前(文字列)を削除して出力してください。
260デフォルトの名無しさん:04/12/15 06:28:31
問題2.2つのファイルの整理の問題です。
list1.txt
------------
tanaka
okawa
jack

 ・
------------

list2.txt
------------
jack
 ・
 ・
------------
list2.txtに出てきた名前(文字列)をlist1.txtから取り除いて

list3.txt
------------
tanaka
okawa

 ・
------------
と言うふうに出力してください。
よろしくお願いしますです。
261259:04/12/15 06:32:48
259です。
言語はC++です。修行中です。
よろしくおねがいします。
262242:04/12/15 08:46:51
>>252
まさかと思って問題見たら、同じ学校ですね....w
お互いCの勉強頑張りましょう。
263デフォルトの名無しさん:04/12/15 08:50:51
質問ブン投げで何を勉強するの?
264デフォルトの名無しさん:04/12/15 09:24:05
学校の勉強はC言語だけじゃありませんから。
C言語は単位さえ取れればいいんです。
265デフォルトの名無しさん:04/12/15 09:28:02
266デフォルトの名無しさん:04/12/15 09:28:39
今技術職だとどんな分野でも大抵はプログラミングやるよ。
足し算とか掛け算も出来ないレベルだと、将来困ると思う。

基礎の基礎(教科書の最初の方)くらいは出来た方がいいと思うのだが・・・
それとプログラムってやってみると意外と楽しいよ。論理的思考力も付くしね。
267デフォルトの名無しさん:04/12/15 09:41:48
仕事中ににちゃんねるで説教ですか。
あまり説得力無いですね。
268さすらいAA:04/12/15 10:18:13
>>260
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <functional>
269さすらいAA:04/12/15 10:18:54
using namespace std;
int main()
{
string str;
vector<string> vec_List2;
vector<string>::iterator itr;
ifstream ifs("list2.txt");
if (!ifs) {cerr << "ファイルlist2.txtがねぇよ" << endl;exit(1);}
while (std::getline(ifs, str)){
vec_List2.push_back(str);
}
sort(vec_List2.begin(),vec_List2.end());
ifs.close();
ifs.open("list1.txt");
if (!ifs) {cerr << "ファイルlist1.txtがねぇよ" << endl;exit(1);}
ofstream ofs("list3.txt");
if (!ofs) {cerr << "list3.txtがつくれねぇ" << endl;ifs.close();exit(1);}
while (std::getline(ifs, str)){
itr = lower_bound(vec_List2.begin(), vec_List2.end(), str );
if (itr == vec_List2.end()){
ofs << str << endl;
}
}
ofs.close();
ifs.close();
}
270さすらいAA:04/12/15 10:42:11
>>259
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
int main()
{
string str;
vector<string> vec_List2;
vector<string>::iterator itr;
ifstream ifs("list.txt");
if (!ifs) {cerr << "ファイルlist.txtがねぇよ" << endl;exit(1);}
while (std::getline(ifs, str)){
vec_List2.push_back(str);
}
sort(vec_List2.begin(),vec_List2.end());
itr = unique(vec_List2.begin(),vec_List2.end());
vec_List2.erase(itr,vec_List2.end());
ofstream ofs("list-out.txt");
if (!ofs) { cerr << "list-out.txtがつくれねぇ" << endl; ifs.close(); exit(1); }
for ( int i = 0 ; i < vec_List2.size() ; i++ ){
ofs << vec_List2[i] << endl;
}
ifs.close();
ofs.close();
}
271259:04/12/15 10:51:11
>>268
>>269
>>270
さすらいAAさんありがとうございました。
一行ずつ時間を掛けて読んで行きたいと思います。
272デフォルトの名無しさん:04/12/15 11:05:54
>>259
cat list1.txt | sort | uniq > list-out.txt
>>260
cat list1.txt | sort | uniq > list1.tmp
cat list2.txt | sort | uniq > list2.tmp
diff list1.tmp list2.tmp > list3.txt
273さゆPさん ◆SayuminPM. :04/12/15 11:23:25
>>272
> cat list1.txt | sort | uniq > list1.tmp
> cat list2.txt | sort | uniq > list2.tmp
> diff list1.tmp list2.tmp > list3.txt

zsh だと
diff =(sort -u < list1.txt) =(sort -u < list2.txt) > list3.txt
ですんじゃうんですよと zsh の宣伝.
274デフォルトの名無しさん:04/12/15 11:29:36
>>272-273
テンポラリ作らずに済ませる方法に興味があるんだけど
zsh以外のシェルでも同様の事は出来るんですか?
275デフォルトの名無しさん:04/12/15 12:22:03
要素数がnである配列aからkeyと一致する全要素の添え字を、
配列idxの先頭から順に格納し、一致した要素数を返す以下の関数を作成する。
int searchidx(int a[],int n, int key, int idx[]);


自分でも考えたのですが、検索を開始するとコアダンプしてしまいます。
御指導お願いします。
276デフォルトの名無しさん:04/12/15 13:14:16
idxの領域確保してないんじゃないの?
277デフォルトの名無しさん:04/12/15 13:19:09
>>275
まずおまいが書いたソースうpキボン
278252:04/12/15 14:00:18
>>254
ありがとう御座います、参考にさせていただきますm(__)m

>>262
多分同じ・・ですねコリャ。お互いがんばりましょう
279デフォルトの名無しさん:04/12/15 14:18:10
[1] 授業単元:情報工学
[2] 問題文:整数専用で、しかも足し算・掛け算・引き算しか出来ない電卓のプログラム
     を作る。+,-,*,=以外の記号を入力した場合、再入力させます。=が入力されたら
     終了して結果表示する。while文を使う。
              
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ(バージョン):visual basic かな・・
 [3.3] 言語:C++
[4] 期限:2004念12月21日
[5] その他の制限: 整数値を入力      54 
          +,-,*,=のいずれか入力  +
整数値を入力      6
          +,-,*,=のいずれか入力  =
答えは         60です。
みたいな感じにして下さい。お願いします!
                     
280デフォルトの名無しさん:04/12/15 14:19:01
[課題]
文字列s1、s2を引数で受け取り、s1に文字列s2が含まれているかどうか調べる関数を作成しなさい
実行結果は、含まれているなら1を、含まれていないなら0をそれぞれ返すようにしなさい。
文字列検索関数strcmpなどは使用しないこと。
[環境]
言語:C

文字列検索関数を使えば簡単に解けるんですけど、使用禁止となるとさっぱりわかりませんorz
281デフォルトの名無しさん:04/12/15 14:28:42
>>280
アルファベットのみ?
282280:04/12/15 15:05:23
アルファベットのみです
283デフォルトの名無しさん:04/12/15 15:37:16
#include <stdio.h>
int incr(int);
int main(void)
{
int a;
scanf("%d",&a);
a=incr(a);
printf("%d\n",a);
}
int incr(int x)
{
return(x+1);
}
このプログラムで変数aのアドレスを引数として渡し、返値のない形の
関数に書き換えてください
おねがいします
284デフォルトの名無しさん:04/12/15 15:40:45
void incr(int *x)
{
(*x)++;
}

- a=incr(a);
+ incr(&a);
285さゆ:04/12/15 15:41:31
>>280

int same(char *s1, char *s2)
{
int i, j, n, m;
int skip[0x80];

n = strlen(s1) - 1;
m = strlen(s2) - 1;

for(i = 0; i < 0x80; i++)
skip[i] = m + 1;
for(i = 0; i < m; i++)
skip[i] = m - i;
for(i = 0; i < n - m + 1; i += skip[s1[i+m]])
if(s1[i+m] == s2[m]){
for(j = m - 1; j >= 0; j--)
if(s1[i+j] != s2[j])
break;
if(j < 0)
return 1;
}
return 0;
}

はーい。
286デフォルトの名無しさん:04/12/15 15:56:38
>>280
ベタに書いてみました
さゆたんのはBM法?
int mystrstr(const char* s1,const char* s2)
{
int i,j;

for(i=0;s1[i];i++){
for(j=0;s2[j];j++){
if(s2[j]!=s1[i+j])break;
}
if(s2[j]=='\0')return 1;
}
return 0;
}
287デフォルトの名無しさん:04/12/15 16:04:00
>>286
if(s2[j]!=s1[i+j])break;

これはまずいよー。
288デフォルトの名無しさん:04/12/15 16:11:26
ほんとだまずいねー
if(s1[i+j]||s2[j]!=s1[i+j])break;
289デフォルトの名無しさん:04/12/15 16:19:29
>>284
ありがとうございました
290デフォルトの名無しさん:04/12/15 16:28:46
Visual C++

・2つの整数型変数の値を入れ替える関数を作る。
・呼び出した側の変数iとjの値を変更するのが目的なので、swap()は引数にアドレスを渡す必要がある
・関数swap()の中で、2つの値を壊さずに入れ替えるには、中間変数を経由して代入する必要がある


#include <stdio.h>

void swap(int *ip, int *jp){
/* swap()の中だけで用いる局所的な変数の宣言*/
/* *ip と *jp の値を入れ換える処理*/
}
void main (){
int i, j;
/* iを入力させるためのプロンプト */
/* scanf()の呼び出し */
/* jを入力させるためのプロンプト*/
/* scanf()の呼び出し */
/* swap()の呼び出し */
/* iとjの表示(printf()の呼び出し)*/
}

お願いします。
291デフォルトの名無しさん:04/12/15 16:37:42
>>290
#include <stdio.h>
void swap(int *ip, int *jp)
{
int tmp = *ip;
*ip = *jp;
*jp = tmp;
}
int main(void)
{
int i, j;
printf("input i: ");
scanf("%d", &i);
printf("input j: ");
scanf("%d", &j);
swap(&i, &j);
printf("i: %d\nj: %d\n", i, j);
return 0;
}
292デフォルトの名無しさん:04/12/15 16:43:41
>>291
うまく実行しました。ありがとうございます。
293さすらいAA:04/12/15 17:01:33
int strcmp2(const char *s1, const char *s2)
{
while(*s1 == *s2){
if (*s1 == '\0') return 0;
s1++;
s2++;
}
return (unsigned char)*s1-(unsigned char)*s2;
}
294デフォルトの名無しさん:04/12/15 17:02:46
>>267
馬鹿野郎オレは無職だ
295デフォルトの名無しさん:04/12/15 17:09:27
学習単元:条件文
環境:C言語
問題:「予算1000円以内、総移動時間6時間以内」の小旅行をしようと思う。
目的地までの片道の運賃と所要時間を入力すると、この条件に合うかどうかを判別してくれるプログラムを作成しなさい。


コンパイルできる環境がないので添削お願いします。

#include <stdio.h>
int main(void)
{
int a,b;

printf("片道の運賃は?");
scanf("%d",&a);
printf("所要時間は?");
scanf("%d",&b);
if (a*2<=1000 && b*2<=6) {
printf("この計画は条件にあう。%\n");
}
else {
printf("この計画は条件にあわない。%\n");
}

return 0;
}
296デフォルトの名無しさん:04/12/15 17:14:22
>>295
パッと見あってるけど、%\n←これは?
297デフォルトの名無しさん:04/12/15 17:14:30
\nの前の%の意味を教えてくれ

あと所要時間を入力させるところは、「何時間か」より「何分か」を入力させた方がよくないか?
それを変えるなら分岐条件も b<=6*60 になるが
298デフォルトの名無しさん:04/12/15 17:15:52
>>290
>・関数swap()の中で、2つの値を壊さずに入れ替えるには、中間変数を経由して代入する必要がある

ダウト
299デフォルトの名無しさん:04/12/15 17:16:58
あと例えば-1000円とか入れても通ってしまうのは( ゚Д゚)マズー
>>297も入れて

if (a>=0 && b>=0 && a*2<=1000 && b*2<=360)
で。
300デフォルトの名無しさん:04/12/15 17:18:38
a^=b
b^=a
a^=b

これだけでも入れ替えは可能だな
301デフォルトの名無しさん:04/12/15 17:19:37
>>296-297
%はタイプミスです。すいません

302さすらいAA:04/12/15 17:21:46
 [3.2] コンパイラ(バージョン):visual basic
 [3.3] 言語:C++
 
>>279
303デフォルトの名無しさん:04/12/15 17:23:15
>>302
!?
304デフォルトの名無しさん:04/12/15 17:24:52
>>300
こんなのでもいけるね。
a=b-a;
b-=a;
a+=b;
305デフォルトの名無しさん:04/12/15 17:29:38
>>296-297
>>299
アドバイスありがとうございます。
306デフォルトの名無しさん:04/12/15 17:31:28
>>302
まずVBでC++を使う方法を教えてくれ
307从*・ 。.・) ◆SayuminPM. :04/12/15 17:39:50
>>300
void swap(int *a, int *b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
で同じポインタを swap に渡した場合はできないんじゃぁ?
308デフォルトの名無しさん:04/12/15 17:51:26
>>307
void swap(int *a, int *b)
{
  if (*a != *b)
  {
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
  }
}
309デフォルトの名無しさん:04/12/15 17:53:36
a=101
b=101

a^=b → a=000
b^=a → b=101
a^=b → a=101
310デフォルトの名無しさん:04/12/15 17:55:32
>>309
swap(&a, &a);みたいなときだよあわてんぼさん
311デフォルトの名無しさん:04/12/15 17:59:49
312デフォルトの名無しさん:04/12/15 18:02:02
a と a の値を交換
a = 1
a ^= a
a ^= a
a ^= a
失敗
313デフォルトの名無しさん:04/12/15 18:03:24
いや、308の if (*a != *b) へのツッコミだったんだが
この場合は if (a != b) でないと意味がないぞ、と
314デフォルトの名無しさん:04/12/15 18:10:15
void swap(int * restrict a, int * restrict b)
{
  *a ^= *b;
  *b ^= *a;
  *a ^= *b;
}
315デフォルトの名無しさん:04/12/15 18:13:12
>>313
*a!=*b⇒a!=b
316さすらいAA:04/12/15 18:21:55
>>279
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;

bool CheckNum(const char *s){
if (*s == '\0') return false;
if (*s == '-') s++;
while(*s!='\0'){
if ( *s < '0' || *s > '9' ) return false;
s++;
}
return true;
}

char CheckOperator(const char *s){
if (*s == '\0') return 0;
switch (*s){
case '+':
case '-':
case '*':
case '=':
s++;
break;
default:
return 0;
}
if (*s == '\0') return *(s-1);
return 0;
}
317さすらいAA:04/12/15 18:23:10
int InputNum(){
int ret;
string str;
while(true) {
cout << "数値を入力\t\t";
cin >> str;
if (CheckNum(str.c_str())){
ret = atoi(str.c_str());
break;
}else{
cout << "数値といっているだろう" << endl;
}
}
return ret;
}
318さすらいAA:04/12/15 18:24:02
int main()
{
int ret = InputNum();
int n;
string str;
while(true) {
cout << "+,-,*,=のいずれか入力\t\t";
cin >> str;
char c = CheckOperator(str.c_str());
if (c){
switch(c){
case '+':
ret += InputNum();
continue;
case '-':
ret -= InputNum();
continue;
case '*':
ret *= InputNum();
continue;
case '=':
cout << "答えは\t\t" << ret << "です" << endl;
break;
}
break;
}else{
cout << "+,-,*,=のいずれかといっているだろう" << endl;
}
}
return 0;
}
319デフォルトの名無しさん:04/12/15 18:36:05
[言語]C言語
[課題]ファイルに書かれている数式を読み込んで
計算結果をそのファイルに追加で出力するプログラム。
なお、ファイル名はkeisan.txtとする。
読み込んだ数式 ((3+1)*4)+3
計算結果 19
よろしくお願いします。
320デフォルトの名無しさん:04/12/15 18:42:52
さっきのswapって、aとbの領域が部分的に重なってる場合は考えなくていいの?
321デフォルトの名無しさん:04/12/15 18:46:42
cをアセンブリに書き換える時のコツって何?
322デフォルトの名無しさん:04/12/15 18:47:48
323デフォルトの名無しさん:04/12/15 18:48:35
>>321
ななめ45度からえぐるように打つ
324デフォルトの名無しさん:04/12/15 18:51:35
>>323
つまんねーんだよ、タコ。
325デフォルトの名無しさん:04/12/15 18:52:11
326デフォルトの名無しさん:04/12/15 18:52:18
>>324
あなたにあわせてあげたのです
327デフォルトの名無しさん:04/12/15 18:55:18
>>326
はい、さよなら。
328デフォルトの名無しさん:04/12/15 20:01:06
>>317
直接 cin >> ret;じゃだめなのか?
329デフォルトの名無しさん:04/12/15 20:29:04
[課題]
与えられた文字列をURLエンコードする関数を作れ。
引数はconst char* を受け取り、戻り値はstd::string型の変数とする。
関数の使用例
std::string s = url_encode("はにゃ〜ん");[]
[環境]
Borland C++ Builder

おながいします。
perlでの例は検索して調べたのですが、Cは難しくてorz
330デフォルトの名無しさん:04/12/15 20:54:05
課題なら検索して調べるとかじゃなくて考えろよ
331デフォルトの名無しさん:04/12/15 20:58:19
>>329
std::string url_encode(const char* str)
{
 std::ostringstream ss;
 unsigned char c;
 while (c = *str++) {
 if (('A' <= c && c <= 'Z') ||
   ('a' <= c && c <= 'z') ||
   ('0' <= c && c <= '9') ||
   c == '*' || c == '-' || c == '.' || c == '@' || c == '_')
  {
   ss << c;
  } else if (c == ' ') {
   ss << '+';
  } else {
   ss << '%' << std::hex << (int)c;
  }
 }
 return ss.str();
}
強引だけど…。文字コード考慮に入れないと駄目かね
332デフォルトの名無しさん:04/12/15 21:10:28
>>331
isalnum使えよ。
333デフォルトの名無しさん:04/12/15 21:58:30
2つの変数(整数)の値を交換する関数を作る。2つの変数のアドレスを引数とし返値
のない形にすること。値の入力、結果の表示はmainで行うこと.
おねがいします。

実行例
a=13
b=12
交換後
a=12
b=13
334デフォルトの名無しさん:04/12/15 22:04:36
#include <stdio.h>
void swap(int* pa, int *pb)
{
int c = *pa;
*pa = *pb;
*pb = c;
}
int main(void)
{
int a,b;
printf("a=");
scanf("%d", &a);
printf("b=");
scanf("%d", &b);
swap(&a,&b);
printf("a=%d\nb=%d\n", a, b);
return 0;
}
335デフォルトの名無しさん:04/12/15 22:06:54
ワラタ
336デフォルトの名無しさん:04/12/15 22:14:29
#include <stdio.h>
void swap(int*a, int*b);

main()
{
int a,b;
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
swap(&a,&b);
printf("a=%d\n",a);
printf("b=%d\n",b);

return 0;
}

void swap(int* a, int* b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
337デフォルトの名無しさん:04/12/15 23:07:19
atoiの反対の働きをする関数itoaってありますかね(C,C++問わず)
実装するとこんなかんじですか?
char* itoa(char s[],int n)
{
int i;
i = 0;
do{
s[i] = n%10 + '0';
} while((n/10) > 0);
reverse(s);
return s;
}
338デフォルトの名無しさん:04/12/15 23:16:07
>>337
そのまんまitoaがあるぞ。
調べればすぐ分かるだろ
339デフォルトの名無しさん:04/12/15 23:23:27
ここの質問者達はプログラミングとかより先に、
自分で必要な情報を探し出す方法を勉強した方が良いな
340デフォルトの名無しさん:04/12/15 23:23:56
>>274
スレ違いだが、GnuDiffなら片方は標準入力を使えるのでテンポラリは一つで済む。
341デフォルトの名無しさん:04/12/15 23:29:57
>>338
itoa()は標準関数じゃないだろ。もっともほとんどの処理系にはあるけど。
342从*・ 。.・) ◆SayuminPM. :04/12/15 23:44:47
343デフォルトの名無しさん:04/12/15 23:45:21
sprintfでいいんじゃないの?
344デフォルトの名無しさん:04/12/16 00:01:27
boost::lexical_cast<>でいいんじゃないの?
345デフォルトの名無しさん:04/12/16 01:11:22
[課題]
長さnの配列aを、バケットソートを用いてソートする関数bucket_sort(a[], n);を作る。
要素の値の重複はないものと仮定する。つまりバケットには連結リストを用いる必要はない。
また、入力データ(配列aの各要素)の値は0以上であると仮定して良い。
入力データの最大値はn-1であるとする。
nの値は実行するまでわからないので、バケットはmalloc関数を用いて確保する。
動作テストに用いるデータとしてはrand_array関数で出力される配列を用いるとよい。


言語はC++です。宜しくお願いします
346デフォルトの名無しさん:04/12/16 01:46:30
>>345
#include <iostream>
#include <algorithm>
#include <iterator>

const int N = 100; // 例えば

void bucket_sort(int a[], int n)
{
int* bucket = new int[n];

for (int i = 0; i < n; i++)
bucket[a[i]] = a[i];

for(int i = 0; i < n; i++)
a[i] = bucket[i];

delete[] bucket;
}

int main()
{
int a[N];

for (int i = 0; i < N; i++)
a[i] = i;
std::random_shuffle(a, a + N);
std::cout << "ソート前 : ";
std::copy(a, a + N, std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
347デフォルトの名無しさん:04/12/16 01:48:49
bucket_sort(a, N);

std::cout << "ソート後 : ";
std::copy(a, a + N, std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
}

C++の場合はmallocよりもnew/deleteが自然なのでそちらを使った。
malllocが必要な場合は直して欲しい。

要素の重複がない事から、リストを省略した。rand_array()では要素の
重複が出ないようにするのは難しいので、random_shuffle()を使った。
348345:04/12/16 01:48:59
>>346
ありがとうございます
349345:04/12/16 01:54:40
すみません。確認してみたら使用言語はCでした
350デフォルトの名無しさん:04/12/16 01:55:22
>>349
ブブ。ちと待っとれ
351345:04/12/16 01:57:15
>>350
本当にすいません
352デフォルトの名無しさん:04/12/16 01:58:18
使ってる言語すら間違えるってどれだけアホなんだよ
353デフォルトの名無しさん:04/12/16 02:00:46
うるさいだまれ
354デフォルトの名無しさん:04/12/16 02:01:09
#include <stdio.h>
#include <stdlib.h>

#define N 100

void bucket_sort(int a[], int n)
{
int *bucket = malloc(n * sizeof(int));
int i;

for (i = 0; i < n; i++)
bucket[a[i]] = a[i];

for(i = 0; i < n; i++)
a[i] = bucket[i];

free(bucket);
}

int main(void)
{
int a[N];
int i, j;

for (i = 0; i < N; i++)
a[i] = i;
355デフォルトの名無しさん:04/12/16 02:01:45
for (i = N - 1; i > 0; i--) {
int j = rand() % i, t;
if (i == 1)
j = 0;
t = a[i], a[i] = a[j], a[j] = t;
}
printf("ソート前 : ");
for (i = 0; i < N; i++)
printf("%d ", a[i]);
printf("\n");

bucket_sort(a, N);

printf("ソート後 : ");
for (i = 0; i < N; i++)
printf("%d ", a[i]);
printf("\n");

return 0;
}

あーCだとちょっとしたアルゴリズムも全部手作り。。。
356345:04/12/16 02:02:49
>>354
ありがとうございました
357デフォルトの名無しさん:04/12/16 11:25:57
>>287
>if(s2[j]!=s1[i+j])break;
>これはまずいよー。
よく考えたけどまずくなかったよ
この場所でs1[i+j]で'\0'の後ろにアクセスすることはないでう
358280:04/12/16 12:08:31
無事解けました、ありがとうございます。
359デフォルトの名無しさん:04/12/16 12:34:01
>>334
>>336
ありがとうございました
360デフォルトの名無しさん:04/12/16 13:11:41
どこがおかしいですか?
問題
西暦2000年から10000年の間で,夏季オリンピックが開催されるにもかかわらず,
閏年でない年をすべて列挙するプログラムを作りなさい。

#include <stdio.h>
main()
{
int y;
for(y=2000; y<=10000; y++)
if (y % 100 == 0 && y % 400 != 0);
printf("%d",y);
}

[環境]
言語:C

よろしくお願いします。
361デフォルトの名無しさん:04/12/16 13:23:56
>>360
とりあえず

if (y % 100 == 0 && y % 400 != 0);
                       ↑
362デフォルトの名無しさん:04/12/16 13:24:37
西暦10000年までオリンピックが行われるという仮定。
363デフォルトの名無しさん:04/12/16 13:32:38
すいません。ifの後の;はミスです。
「夏季オリンピックが開催されるにもかかわらず」というのを表すには
どうすればよろしいのでしょうか?
なくても結果は変わらないとは思いますが。
364デフォルトの名無しさん:04/12/16 13:45:47
夏季オリンピックがある年は閏年と言われている
だがそうでない年があるからそれを求めろという問題なんだろうから
なくても結果は変わらない、ということはないんでないの?
365デフォルトの名無しさん:04/12/16 14:10:33
課題:
C++でスレッドを実装しなさい。
OSのシステムコールは使わないこと。
環境
Linux gcc

おながいします
366デフォルトの名無しさん:04/12/16 14:36:50
課題
data.txtに0〜100未満の整数が10000個格納されている。コレを全て読み込んで、
“x x+1 x+2”という具合にデータが並んでいるところを探し、あればxが何番目の
データかを返し(はじめのデータは一番目)、無ければ“no”を出力せよ。複数の
データが条件を満たす場合には、一番目のデータに一番近い位置にあるものを出力せよ。
例)10 11 12 の様な並びを探す。この時、10が740番目のデータであれば740を出力する。

という問題を出されたので自分でやってみたのですが何か駄目でした。
下に作ったのを乗せますので添削お願いします。 言語はC言語です。
367366:04/12/16 14:37:49
#include <stdio.h>
int main(void){
int x1, x2,i, j = 0;
int value[10000], result[10000];
FILE *in_stream;
in_stream = fopen("data.txt", "r");
if((in_stream = fopen("data.txt", "r")) == NULL){
printf("data.txtは存在しません\n");
return(-1);
}
for(i = 0; i < 10000; i++){
fscanf(in_stream, "%d", &value[i]);
}
for(i = 0; i < 10000; i++){
x1 = value[i];
x2 = value[i + 1] - 1;
if(x1 = x2){
i = result[j + i];
j = i + 1;
}
}
for(i = 0; i < 10000; i++){
printf("%d\n", result[i]);
}
fclose(in_stream);
return(0);
}

以上です。お願いします。
368デフォルトの名無しさん:04/12/16 14:47:49
>>360
自信ないです
間違ってたらごめんなさい

#include <stdio.h>
int main()
{
int i;
int flag;

for (i = 2000; i <= 10000; i++){
if ( (i % 4) == 0 ){
if ( (i % 100) == 0 ){
flag = 1;
if ( (i % 400) == 0 ){
flag = 0;
}
}
}
if (flag == 1){
printf("%d ", i);
}
flag = 0;
}
putchar('\n');
return 0;
}
369デフォルトの名無しさん:04/12/16 14:48:29
>>367
> FILE *in_stream;
> in_stream = fopen("data.txt", "r");
> if((in_stream = fopen("data.txt", "r")) == NULL){
fopenは1回でいい。
FILE *in_stream = fopen("data.txt", "r");
if (in_stream == NULL) {
370デフォルトの名無しさん:04/12/16 14:55:01
>>360
まず夏季オリンピックがどういう条件で開催されるかどうかを考える。
そして、閏年になる条件をもう一度よく考える。
その後にプログラムを見直せば2つの条件が足りないことに気づくはずだ。
両方書き足すと冗長になるけど。
371370:04/12/16 15:00:18
リロードすべきたっだか・・・
>>368
flag = 0;
をforループの先頭に書くべき。
372デフォルトの名無しさん:04/12/16 15:03:28
>>371
その通りで。
ご指摘ありがとうございます。
373896:04/12/16 16:24:42
>>368
何故そんなに複雑にするんだ
#include <stdio.h>

int main(){
 int i;
 for (i = 2000; i <= 10000; i++)
  if((i % 4) == 0 && (i % 100) == 0 && (i % 400) != 0)
   printf("%d ", i);
 putchar('\n');
 return 0;
}
374373:04/12/16 16:25:14
名前消し忘れた
375デフォルトの名無しさん:04/12/16 17:16:22
Cの問題です。
文字列(char配列)を引数として受け取り、中の要素を逆順に並び替える関数reverseを作成しなさい。
reverseの内部の処理については配列操作ではなくポインタ操作で使用すること。
          void reverse(char *s);
自力でやったやつ↓
#include <stdio.h>
void reverse(char *s)
{
char *p,c[100];
p=&c;
p = s;
for(;*p;)*p++;
*p--;
for(;*s;)*s++ = *p--;
}
main()
{
char s[100];
printf("文字列を逆から表示します.");
scanf("%s",s);
reverse(&s);
printf("%s",s);
}
までやったのですが、半分まで逆に並び替えるのですが、もう半分は元のままです。
例 abcdef を入力するとfeddef になります。
警告 W8075 asdfa.c 6: 問題のあるポインタの変換(関数 reverse )
警告 W8019 asdfa.c 8: コードは効果を持たない(関数 reverse )
警告 W8019 asdfa.c 9: コードは効果を持たない(関数 reverse )
警告 W8004 asdfa.c 6: 'p' に代入した値は使われていない(関数 reverse )
警告 W8075 asdfa.c 18: 問題のあるポインタの変換(関数 main )
警告 W8070 asdfa.c 20: 関数は値を返すべき(関数 main )
って出ます。
376デフォルトの名無しさん:04/12/16 17:19:18
>>375
えー、エラー出るだろー
377375:04/12/16 17:22:13
え!?こっちでは出ないですよ。
378デフォルトの名無しさん:04/12/16 17:22:30
>>375
1回でもデバッガで追ってみた?
むしろこれくらい脳内で追えて欲しいが。
379デフォルトの名無しさん:04/12/16 17:24:51
警告ですむのか・・・。
アレなコンパイラだな。
380デフォルトの名無しさん:04/12/16 17:26:50
if(a=1){
n=238;
}
printf("%d\n",n);
if(a=2){
n=239;
printf("%d\n",n);
}
if(a=3){
n=240;
printf("%d\n",n);
}
if(n=4){
n=241;
printf("%d\n",n);
}

という風にしたいのですが、ひとつずつ書かずに
for文での書き方を教えて下さい。
381デフォルトの名無しさん:04/12/16 17:30:53
>>380
for(a = 1; a <= 4; ++a)
 n = 237 + a;
382デフォルトの名無しさん:04/12/16 17:31:32
あーもう、こっちまで頭悪くなりそうだ。
383380:04/12/16 17:35:25
みす!いきおいで書いちまったがfor文ではかけない
かけないこともないが無駄
384375:04/12/16 17:36:06
>>375
デバッガっての使ったことないです…;;

>>379
CPadってやつ使ってるんですが…
385380:04/12/16 17:39:07
>>381さん
出来ました!!!ありがとうございます☆
助かりました(^ー^)
386381:04/12/16 17:42:07
>>385
ちょっと待て!できてないだろ!
387385:04/12/16 17:46:04
>>381さん
えっ!?なんか出来たっぽいのですが(><)
答えがあってるんです。。。

えっともっと細かく書くと、
a=1〜18のとき、 n=238〜255に、
a=19〜41のとき n=1〜23
にそれぞれ対応するようにしたいんですけど。。。
388デフォルトの名無しさん:04/12/16 17:50:11
if (1<=a && a<=18) n = a+237;
if (19<=a && a<=41) n = a-18;
389デフォルトの名無しさん:04/12/16 17:50:14
if(1 <= a && a <= 18)
  n = 237 + a;
else if(19 <= a && a <= 41)
  n = a - 18;
forはいらんな
390389:04/12/16 17:51:00
うわかぶった。
391デフォルトの名無しさん:04/12/16 17:53:02
なんかもう見てるだけでダルイ('A`)
プログラムって難しいな('A`)
392385:04/12/16 17:54:44
>>388さん、389さん
出来ました!!!!for文はいらないんですね☆
ほんとにほんとにありがとうございます(^ー^)
393デフォルトの名無しさん:04/12/16 17:56:51
>>384=375
LSI-Cかな?
CPadはコンパイラではない。

p=&c;       //だめ。しかもつかってないし。(エラーでそう)
for(;*p;)*p++;  // *p++ の * は邪魔
*p--;       // 上と同じ

reverse(&s);  // &は邪魔(エラーでそう)

int mainなんだからreturn 0;でもして置くように。
警告については以上。

ただ、違う問題が大きいんであとよろしこ。
394デフォルトの名無しさん:04/12/16 19:50:32
int main(void){
char s[100];
printf("文字列を逆から表示します.\n");
scanf("%s",s);
printf("%s\n", reverse(s) );
return 0;
}

void reverse(char *s) {
char *p;
p = s;
for( ; *p !='\0' ;p++ ) ;
for( ; *s !='\0' ;s++) *s = *(--p);
*s='\0';
}
395デフォルトの名無しさん:04/12/16 20:06:59
>>394
396デフォルトの名無しさん:04/12/16 20:12:59
void reverse(char *s) {
char *p;
char tmp;
p = s;
for( ; *p !='\0' ;p++ ) ;
for( ; p - s > 0 ;s++ ) {
tmp = *(--p);
*p = *s;
*s = tmp;
}
}

int main(void){
char s[100];
printf("文字列を逆から表示します.\n");
scanf("%s",s);
reverse(s);
printf("%s\n", s);
return 0;
}
397デフォルトの名無しさん:04/12/16 21:02:06
d^2x/dt^2+dx/dt+x=0
なんていう微分方程式をオイラーとかを使わずに、解析的に解くプログラムはどうすればいいのでしょうか?
398デフォルトの名無しさん:04/12/16 21:16:35
むり。
計算機代数でググレ
399デフォルトの名無しさん:04/12/16 21:33:55
オセロゲームのプログラムなのですがわからないところがあります。
実行すると8*8のオセロ盤が表示され、座標値を入力して駒を置きます。
Y軸(縦)が0〜7までの数字で、X軸(横)がa〜hまでのアルファベットです。
左隅に置く場合は、x:0 y:aと入力します。まだ作り始めたところなので
どこにでも駒を置けます。これに駒をチェックする関数をプラスして
駒が置けない場所にはエラーを表示し、駒が配置できなくしたいのです。
下の仕様を満たした関数を教えて下さい。お願いします。

<関数の仕様>
・引数…盤の配列データ、駒の配列データ、駒のX座標、駒のY座標、駒の種類
・戻り値…駒が配置できれば1、できなければ0
・駒が置けない場所…既に駒がある所、周りに一つも駒がない所、
周りに相手の駒がある所(その方向の延長上に自分と同じ駒がない)

<プログラム>
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/29.txt
400デフォルトの名無しさん:04/12/16 21:43:07
その腐った仕様を何とかしたほうがいいんじゃね?

0:駒無し、ー1:黒、1:白

static check(int tate,int yoko){
static char board[8][8]={0};
:
}

とかして、board[tate][yoko] の値をチェックすれ。
401デフォルトの名無しさん:04/12/16 21:50:42
>>397
Wolfram Researchにでも就職しな。
402デフォルトの名無しさん:04/12/16 22:24:10
>>373
何故そんなに複雑にするんだ

for (i = 2000; i <= 10000; i += 4) {
/* 以下略 */
}

ではいかんのかね。
403367:04/12/16 23:13:05
>>369

ありがとうございます!
そこって、いつも書くとき面倒だと思ってたんですよ〜。

他に何か指摘する所はありますか?
404デフォルトの名無しさん:04/12/16 23:24:24
(1)スタックを実現するプログラムを作成せよ。
(2)二分探索をするプログラムを作成せよ。

(1)は、pushの仕方は分かるのですが、popの仕方がイマイチわかりません。
C言語で作成しています。
どなたかご指導お願い致します。
405デフォルトの名無しさん:04/12/16 23:30:05
406デフォルトの名無しさん:04/12/16 23:39:45
>>403
突っ込みどころだらけ。
最低限、コンパイラの警告はできるだけ多く出るように設定し、丹念に読むことをお勧め。
407403:04/12/17 00:06:51
>>406
何か、ビルドとかしてもエラーとか出ないんですが、その代わりに
実行すると別ウィンドウで
「エラーが発生したので〜(プログラム名).exeを終了します」
とか出るんですが・・・
詳しい駄目なところが分からず困ってます。
408406:04/12/17 00:22:47
>>407
さっき見た限りではif文の中が比較ではなく代入になっていた。後は忘れた。
409デフォルトの名無しさん:04/12/17 00:38:58
すいません。ご迷惑おかけしますが
わからないのでお願いします。

宿題↓
テキストファイルを読み込み、行番号を変えて画面に表示し、
また新しいファイルにも書き出すプログラムを作成せよ。
入力:入力ファイル名と出力ファイル名
処理:ファイルの内容を読み込む(最大999桁)
    入力用と出力用の2つのファイルポインタを用意する。
    (2つのファイルをオープンする)
出力:「行番号」、「読み込んだファイルの内容」を画面と
    新しいファイルに出力する。
    (printfとfprintf関数を利用すること)
410409:04/12/17 00:39:51
とりあえず、ここまで作りました・・・
ここからどうすればいいのでしょうか?

#include <stdio.h>
#include <stdlib.h>

main()
{
char fi[50],b[256];
int i;
FILE* fp,fp1;
printf("input file name:");
scanf("%s",fi);
if(NULL==(fp=fopen(fi,"r+")))
{
fprintf(stderr,"error:file open[%s].\n",fi);
exit(1);
}
for(i=1;i<=999;++i)
{
if(NULL==fgets(b,256,fp))
{
break;
}
}
fclose(fp);
}
411デフォルトの名無しさん:04/12/17 00:43:02
>>410
それじゃ999桁じゃなくて999行だ。。。
412デフォルトの名無しさん:04/12/17 01:14:12
>>410

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXCOL 1000

int main(void)
{
char ci[MAXCOL], buf[128];
int i;
FILE *fi, *fo;

printf("input file name:");
fgets(buf, sizeof(buf), stdin);
buf[strlen(buf) - 1] = '\0';
if ((fi = fopen(buf, "r")) == NULL) {
fprintf(stderr, "error: file open[%s].\n", buf);
exit(1);
}

printf("output file name:");
fgets(buf, sizeof(buf), stdin);
buf[strlen(buf) - 1] = '\0';
if ((fo = fopen(buf, "w")) == NULL) {
fprintf(stderr, "error: file open[%s].\n", buf);
exit(1);
}
413デフォルトの名無しさん:04/12/17 01:14:33
i = 0;
while (fgets(ci, sizeof(ci), fi)) {
printf("%05d: %s", ++i, ci);
fprintf(fo, "%05d: %s", i, ci);
}

fclose(fi);
fclose(fo);

return 0;
}
414デフォルトの名無しさん:04/12/17 01:15:34
>>409さん
素人がつくってみました。参考になれば幸いです。
またプロの方からみておかしいところは修正御願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/31.txt
415デフォルトの名無しさん:04/12/17 01:19:33
>>414
別にそれでええんとちゃう?但し、409さんがファイル名の入力をどうも
起動時オプションではなく、プログラム中で入力させているようだから、
そこら辺はもしかしたら修正が必要かと思う。どっちかわからんけどね。
416409:04/12/17 01:28:58
>>411-415
みなさん。どうもありがとうございます。
414さん、参考も何も作ってくれるだけでそれは
もうありがたいです。
ありがとうございます。
415さん、環境を書くのを忘れたのはこっちのミスでした・・・
私はvisual stdio.net を使っています。
C言語で作成させなくてはいけないので。
417デフォルトの名無しさん:04/12/17 02:17:10
>if( (fp_w=fopen(argv[2],"w") ) == NULL){
>exit(1);
>}

もしここでexit()するような場合、fp_rはclose()しなくてもよいのか?
418デフォルトの名無しさん:04/12/17 02:19:22
>最大999桁
>char line_c[256];

意識しているか?
419デフォルトの名無しさん:04/12/17 02:25:11
また来週〜
420414:04/12/17 03:04:21
>>415さま
確かにプログラム中でファイル名の入力を促してますね。
うっかりみのがしてました。アドバイスどうもです。

>>416さま
お役に立てて幸いです。

>>417-418さま


if( (fp_w=fopen(argv[2],"w") ) == NULL){
close(fp_r)
exit(1);
}
として修正します^^;

>最大999桁
>char line_c[256];
すっかり忘れてました。
>>412さんのを参考に修正します^^;


421420:04/12/17 03:06:05
close(fp_r)→fclose(fp_r);

^^;
422デフォルトの名無しさん:04/12/17 03:30:13
exit()はfcloseall()するから要らないとも言えるが。
423デフォルトの名無しさん:04/12/17 04:28:38
visual stdio.netは釣り?
424デフォルトの名無しさん:04/12/17 04:39:32
>>417
馬鹿が湧いてたか。
425デフォルトの名無しさん:04/12/17 08:37:03
>>399
悪いことは言わんから
boardは[10][10]で確保して壁に印付けとき。
426デフォルトの名無しさん:04/12/17 14:41:52
4進数の配列で
1111,1112,1113,1114,1121,1123,1124・・・・・
桁上がりをする配列はどうのようにすればよいのでしょうか

宿題はこれを使うものなのですが、これが分からなくて
427デフォルトの名無しさん:04/12/17 15:26:02
>>426

#include <stdio.h>
// 4桁の4進数でa=a+bを行う。戻り値はキャリー
int add(int* a,int* b)
{
int i;
int s,c;
for(i=0;i<4;i++){
s=a[i]+b[i];
c=s>>2;
a[i]=s&3;
}
return c;
}
void print(int* a)
{
int i;
for(i=3;i>=0;i--)printf("%1d",a[i]);
puts("");
}
int main()
{
int a[]={1,1,2,3};
int b[]={3,2,1,0};
add(a,b);
print(a);
return 0;
}
428デフォルトの名無しさん:04/12/17 15:36:24
うはキャリー考慮してねえから訂正
int add(int* a,int* b)
{
int i;
int s,c=0;
for(i=0;i<4;i++){
s=a[i]+b[i]+c;
c=s>>2;
a[i]=s&3;
}
return c;
}
429デフォルトの名無しさん:04/12/17 16:39:20
C言語です

直線を指定した座標から座標まで引くプログラムなんですが
ターミナルに出力するのではなくてファイルに出力するらしいです。
検索してもライン関数を使ってるのしかなくて、そのライン関数
自体の中身がわからりません。どうか教えてください。
430デフォルトの名無しさん:04/12/17 17:22:05
>>426
なんで4進数に4が出てくるの?
431デフォルトの名無しさん:04/12/17 17:23:28
432デフォルトの名無しさん:04/12/17 18:38:33
433デフォルトの名無しさん:04/12/17 19:16:40
DDAなんてレイトレの基本だな。
434デフォルトの名無しさん:04/12/17 20:58:34
>>430
1〜4を使う4進数なんだろうよ。
435デフォルトの名無しさん:04/12/17 23:05:53
c++でお願いします。

注意書き
記述は入出力ストリームで。
参考範囲は、文字列配列。

問題
2つの文字列配列を1つの配列に格納し、連結して表示させるプログラム。
例:aaaaと一回目に入力し、次にbbbbと入力したらaaaabbbbと表示させるもの。
ただし、連結した文字列を入力する配列は、ヌル文字で初期化しておくこと。
もしくは、2番目の文字列を入れた後でヌル文字を1字入れても良い。

よろしくお願いします。
436デフォルトの名無しさん:04/12/17 23:14:08
もっとレベル高い宿題はないの?
437デフォルトの名無しさん:04/12/17 23:22:49
>>435
#include <iostream>
#include <cstring>
const int BUFSIZE = 64;
int main()
{
  char Buf1[BUFSIZE], Buf2[BUFSIZE], Buf3[BUFSIZE * 2];
  std::cin >> Buf1 >> Buf2;
  std::cout << std::strcat(std::strcpy(Buf3, Buf1), Buf2) << std::endl;
  return 0;
}
438デフォルトの名無しさん:04/12/17 23:36:13
C++ならせめてstd::stringstreamを使わせて欲しいなあ。文字列配列と書いて
あるからだめだけど。
439デフォルトの名無しさん:04/12/17 23:39:50
で、いつになったらスーパープログラミングは始まるの?
440435:04/12/18 00:02:06
>std::stringstream
ってなんですか・・・
無知ですみません
441435:04/12/18 00:03:18
あっそれと
stdも何か教えてください
お願いします
442デフォルトの名無しさん:04/12/18 00:05:40
名前空間で検索しる
443デフォルトの名無しさん:04/12/18 00:07:06
>>440>>441
std::stringstreamを使うと、まるでファイルで読み書きするように、メモリ内に
ストリームを持つことができる。使用できるメンバ関数もほとんど同じ。
更に、従来のCスタイルの文字列へのインターフェースとして、str()を持つ。

std::は、C++の名前空間(namespace)を勉強しないと理解するのは困難だが、
要するに名前のバッティングを防ぐ役割をすると思えばいい。std名前空間に
入っている名前はC++標準ライブラリの名前。
444デフォルトの名無しさん:04/12/18 00:23:38
>>431>>432様ありがとうございます。

自分はまだファイル処理のこと勉強中なんでこのプログラムを
どうやったら実行できるのかはわからないんですが
頑張って勉強して自分のものにしていきます。これからも
わからないことがあると思いますがその時はよろしくお願いします!
445デフォルトの名無しさん:04/12/18 00:30:20
a(n)=1×2×...×n
b(n)=b(n-1)+b(n-2)、 b(1)=1、 b(0)=0

・n(≥1)が入力として与えられたとき、a(n)の値を返す再帰的なプログラムを記述せよ。
・上記の問題を再帰を用いないプログラムで記述せよ。
・n(≥1)が入力として与えられたとき、b(n)の値を返す再帰的なプログラムを記述せよ。
・上記の問題を再帰を用いないプログラムで記述せよ。
※ただし入力と出力は全ての整数型で与えられるとし、記述はDel-phiで記述せよ。
446デフォルトの名無しさん:04/12/18 00:32:36
>>445
失せろキチガイ
447デフォルトの名無しさん:04/12/18 00:34:34
Delphi使いだけで再帰苦手なのでパス
448デフォルトの名無しさん:04/12/18 00:35:54
>>445
どなたかわかる方いらっしゃいませんか??
もしくはわかりそうな人がいるとこしりませんか??
449デフォルトの名無しさん:04/12/18 00:37:48
>>448
お前の態度が気に食わない。かつ、マルチポストするなボケ。
450デフォルトの名無しさん:04/12/18 00:40:14
int func(int n){
if(n==1)
return 1;
else
return func(n-1);
}
451デフォルトの名無しさん:04/12/18 01:07:49
いろいろ調べてみたんですが、シェイカーソートを使ったプログラムがつくれません。
教えていただけないでしょうか?
452デフォルトの名無しさん:04/12/18 01:10:51
>>451
バブルソートと基本的に考え方は同じで、バブルソートが一方向のみの走査なのに
対し、シェーカーソートは行ったり来たりの両方向の走査をする。んだけ。
453デフォルトの名無しさん:04/12/18 01:14:37
454sage:04/12/18 01:32:00
Cです
以下の問題(1から10)についてのプログラムを作成せよ.
* データ処理に関する前提:
o ・データは必ず正しい範囲で入力されることを前提としてよい
・Day(日にち)には,必ず,1から31までの整数(1日から31日までを意味する)
・Time(時間)には,必ず,7から22までの整数(7:00から22:00までを意味する)
・Plan(予定)には半角のアルファベット(大文字,小文字)以外は入力されない
* 注意点:
o 各問題に解答しながら,コードを付け足すようにして,1つのプログラムを作成すること.
o「処理内容を説明せよ.」または「アルゴリズムを説明せよ.」という指示がある場合,レポートメールの
「2.関数の処理内容およびアルゴリズムの説明」において,問題番号とそのアルゴリズムの説明を記述すること.
(指示がない場合には説明しなくてよい.)
o 関数名,引数および戻り値の型を変更しないこと.
455デフォルトの名無しさん:04/12/18 01:34:36
あげてしまった・・
1. 予定データ(日にち,開始時刻,予定)を扱うための構造体の宣言
以下の仕様に基づいて構造体を宣言せよ.
* 構造体タグ名:なし
メンバ:
o 予定の日にちを表すint型の変数:変数名 Day
o 予定の開始時刻を表すint型の変数:変数名 Time
o 予定を表すchar型の配列:配列名 Plan
* typedefによって再定義する型名:SCHEDULE

2. 衝突を回避するための連結リストを表わす自己参照構造体の宣言
以下の仕様に基づいて自己参照構造体を宣言せよ.
* 構造体タグ名:ELEMENT
* メンバ:
o 一つ一つの予定データを表すSCHEDULE型(問題1参照)の構造体変数:構造体変数名 Data
o ELEMENT型へのポインタ型変数:変数名 Next
* typedefによって再定義する型名:NODE

3. #define ディレクティブによるバケットサイズの指定
#define ディレクティブについて調べよ.そして,#defineを使って,
以下の仕様に基づいたマクロ定義をせよ.
仕様:プログラム中の識別子「BUCKET_SIZE」を,置換リスト「7」に置き換える.


456デフォルトの名無しさん:04/12/18 01:39:56
4. ハッシュ表の初期化(5%)
グローバル配列として以下の配列を定義せよ.
NODE型へのポインタ配列:
* 配列名:Table
* 要素の数:BUCKET_SIZE(問題3参照)
以下の仕様に基づいて,上記のポインタ配列で定義したハッシュ表のすべての要素を
NULLに初期化する関数
void init_hash(NODE **tbl)
を定義せよ.そして,main()関数への必要な記述をおこなって,
関数を実行できるプログラムを作成せよ(必要に応じて,ヘッダー・ファイルをインクルードすること
* 関数名:init_hash
* 仮引数NODE **tbl:NODE型のポインタ型へのポインタ型変数(ポインタへのポインタ).
ハッシュ表の最初の要素のアドレスを受け取る.
* 戻り値なし(void型)
* 機能:ハッシュ表の最初の要素のアドレスを受け取り,このアドレスをもとに,
ハッシュ表のバケット(配列のそれぞれの要素)に NULLポインタを代入する.
※仮引数NODE **tblによってハッシュ表の配列を受け取っている理由は,
複数のハッシュ表が存在する場合に対応できるようにしておくためである.
このようにすることによって,複数人のスケジュールを操作できるようになる
457デフォルトの名無しさん:04/12/18 01:42:14
5. ハッシュ関数

前提として,以下のように,曜日と数値との対応を定義する.
(プログラム内で定義しなくてもよい.)
* 日曜日(SAN) :0
* 月曜日(MON) :1
* 火曜日(TUE) :2
* 水曜日(WED) :3
* 木曜日(THU) :4
* 金曜日(FRI) :5
* 土曜日(SAT) :6

このとき,以下の仕様に基づいて,ハッシュ値を計算する関数
int hash(int day);
を定義し,main()関数への必要な記述をおこなって,
関数を実行できるプログラムを作成せよ.
(必要に応じて,ヘッダー・ファイルをインクルードすること.)
また,この関数の処理内容を説明せよ.
* 関数名:hash
* 仮引数int day:int型の変数として,データの挿入・探索・削除などをおこなう日にち(問題1参照)を受け取る.
* 戻り値(int型):ハッシュ値として,上記の曜日に対応する数値を返す.
* 機能:データの挿入・探索・削除などをおこなうときに必要となるハッシュ値を計算する.
(このため,ハッシュ表に含まれるバケットの数をBUCKET_SIZE(問題3参照)とした.)
※日にちは,1日から31日まで(int型 1-31)とし,1日(1)は,土曜日とする.したがって,hash(1)の戻り値は,
6となる(2005年1月と同じです
458デフォルトの名無しさん:04/12/18 01:44:30
6. ひとつの予定データの挿入(25%)
以下の仕様に基づいて,ひとつの予定データを挿入する関数
void insert(NODE **tbl, SCHEDULE dt);
を定義し,main()関数への必要な記述をおこなって,関数を実行できるプログラムを作成せよ
(必要に応じて,ヘッダー・ファイルをインクルードすること.).
また,この関数のアルゴリズムと処理内容を説明せよ.
* 関数名:insert
* 仮引数NODE **tbl:データを挿入するハッシュ表を受け取る.
* SCHEDULE dt:ひとつ分の予定データ(問題1参照).
* 戻り値なし(void型)
* 機能:関数hash()の実引数としてdt.Dayを渡して,ハッシュ値を得る.
このハッシュ値に基づいて,
受け取ったtblが指すハッシュ表のバケット(配列の添字)を決定する.
そして,そのバケットの連結リストにdtを挿入する.
このとき,以下の条件に基づいて挿入する.
o 日にち(dt.Day)に対するハッシュ値は,曜日に対応する数値である(問題5参照).
o 曜日に対応する数値が,ハッシュ表を表わす配列の添字となる.
o 挿入するデータを代入するメモリブロックをmalloc()関数を使って確保する.
o 連結リストの先頭ノードからみて,時間(dt.Time)の昇順に並べる.
すでに同じ時間のデータがある場合,同じ時間のノードの末尾データ側に挿入する.
o 日にち(dt.Day)と時間(dt.Time)の両方が同じデータがあった場合,
すでにあるノードのデータを新たなデータ(dt)に置き換える.
※以上の仕様により,それぞれのバケットに,同じ曜日で異なる日にち(Day)の予定データが,
日にちに関係なく時間(Time)の昇順に並ぶ連結リストが作成される.
459デフォルトの名無しさん:04/12/18 01:46:26
7. 指定された日にち内の,すべての予定データの表示
以下の仕様に基づいて,ハッシュ表(連結リスト)から指定された日にち(問題1参照)をもつ予定データ(ノード)を表示する関数
void show_plan_day(NODE **tbl, int day);
を定義し,main()関数への必要な記述をおこなって,関数を実行できるプログラムを作成せよ.
(必要に応じて,ヘッダー・ファイルをインクルードすること.)
また,この関数の処理内容を説明せよ.
* 関数名:show_plan_day
* 仮引数NODE **tbl:データを探索するハッシュ表を受け取る.
* 仮引数 int day:探索する日にち(問題1参照).
* 戻り値なし(void型)
* 機能:関数hash()の実引数としてdayを渡して,ハッシュ値を得る.
このハッシュ値に基づいて,ハッシュ表(連結リスト)から,指定されたdayとおなじDay(問題1参照)
をもつすべての予定データ(ノード)を探索し表示する.
連結リストでは時間の昇順に並んでいるため,同一日にち内であれば,
先頭ノードから探索して表示するだけで,時間順に表示される.

8. 連結リストの全ノードの削除
以下の仕様に基づいて,すべてのバケットのすべてのノードを削除する関数
void free_hash(NODE **tbl);
を定義し,main()関数への必要な記述をおこなって,関数を実行できるプログラムを作成せよ.
(必要に応じて,ヘッダー・ファイルをインクルードすること.)
* 関数名:free_hash
* 仮引数NODE **tbl:削除するノードのバケットが含まれているハッシュ表を受け取る.
* 戻り値なし(void型):
* 機能:受け取ったtblが指すハッシュ表のすべてのバケットの
すべてのノードを削除(malloc()関数で確保したメモリブロックを解放)する.

460デフォルトの名無しさん:04/12/18 01:47:27
よろしくお願いします
461デフォルトの名無しさん:04/12/18 01:53:02
>>454-
丸投げもここまで来るとすがすがしいな。
462デフォルトの名無しさん:04/12/18 02:06:36
毒毒しいよ
463デフォルトの名無しさん:04/12/18 02:15:52
>>454-459
>以下の問題(1から10)についてのプログラムを作成せよ

1から8までしかないような気がするんだが気のせいか?
464デフォルトの名無しさん:04/12/18 02:17:09
从*・ 。.・)ノ<丸投げすぎなの
465デフォルトの名無しさん:04/12/18 02:27:50
class base{
virtual func(){}
}

class a{
466デフォルトの名無しさん:04/12/18 02:28:12
すいません;ミスです
467デフォルトの名無しさん:04/12/18 02:42:26
class teach_begger: public solve_begger {
468デフォルトの名無しさん:04/12/18 10:07:45
>>454
1.
typedef struct {
  int Day;
  int Time;
  char Plan[256];
} SCHEDULE;
469デフォルトの名無しさん:04/12/18 10:08:50
2.
typedef struct ELEMENT {
  SCHEDULE Data;
  struct ELEMENT *Next;
} NODE;
470デフォルトの名無しさん:04/12/18 10:09:38
3.
#define BUCKET_SIZE 7
471デフォルトの名無しさん:04/12/18 10:12:59
4.
NODE *Table[BUCKET_SIZE];

void init_hash(NODE **tbl)
{
  int i;
  for(i = 0; i < BUCKET_SIZE; i++)
    tbl[i] = NULL;
}

int main()
{
  init_hash(Table);
}
472デフォルトの名無しさん:04/12/18 10:16:13
5.
int hash(int day)
{
  return (day + 5) % BUCKET_SIZE;
}
473デフォルトの名無しさん:04/12/18 10:48:29
6.
void insert(NODE **tbl, SCHEDULE dt)
{
  int h;
  NODE *n;
  NODE **p;
  if(!(n = malloc(sizeof(NODE)))) assert('ぬるぽ');
  n->Data = dt;
  n->Next = NULL;
  for(p = &Table[h = hash(dt.Day)]; *p && (*p)->Time < dt.Time; *p = (*p)->Next){}
  if(!*p){
    *p = n;
  }else{
    if((*p)->Time != dt.Time){
      n->Next = *p;
      *p = n;
    }else{
      NODE *q = *p;
      n->Next = (*p)->Next;
      *p = n;
      free(q);
    }
  }
}
474訂正:04/12/18 11:02:19
6.
#include <stdio.h>

void insert(NODE **tbl, SCHEDULE dt)
{
  NODE *n;
  NODE **p;
  if(!(n = malloc(sizeof(NODE)))){
    fprintf(stderr, "ぬるぽ\n");
    exit(1);
  }
  n->Data = dt;
  n->Next = NULL;
  for(p = &tbl[hash(dt.Day)]; *p && (*p)->Time < dt.Time; *p = (*p)->Next){}
  if(!*p){
    *p = n;
  }else{
    if((*p)->Time != dt.Time){
      n->Next = *p;
      *p = n;
    }else{
      NODE *q = *p;
      n->Next = (*p)->Next;
      *p = n;
      free(q);
    }
  }
}
475ああ再訂正:04/12/18 11:08:25
>o 連結リストの先頭ノードからみて,時間(dt.Time)の昇順に並べる.
>すでに同じ時間のデータがある場合,同じ時間のノードの末尾データ側に挿入する.
>o 日にち(dt.Day)と時間(dt.Time)の両方が同じデータがあった場合,
>すでにあるノードのデータを新たなデータ(dt)に置き換える.
>※以上の仕様により,それぞれのバケットに,同じ曜日で異なる日にち(Day)の予定データが,
>日にちに関係なく時間(Time)の昇順に並ぶ連結リストが作成される.

かなり違うな・・・出直してきます・・・orz
476デフォルトの名無しさん:04/12/18 12:57:22
>>475
どっちにしてもおかしいよ
誤 for(p = &tbl[hash(dt.Day)]; *p && (*p)->Time < dt.Time; *p = (*p)->Next){}

正 for(p = &tbl[hash(dt.Day)]; *p && (*p)->Time <= dt.Time; p = &((*p)->Next)){}
477476 ◆FIcNi4f8js :04/12/18 13:12:59
>>474
こんな感じかな

void insert(NODE **tbl, SCHEDULE dt)
{
NODE *n;
NODE **p;
if(!(n = malloc(sizeof(NODE)))){
fprintf(stderr, "ぬるぽ\n");
exit(1);
}
n->Data = dt;
n->Next = NULL;
for(p = &tbl[hash(dt.Day)]; *p; p = &((*p)->Next)){
if((*p)->Data.Time > dt.Time) break;
if((*p)->Data.Time == dt.Time && (*p)->Data.Day == dt.Day) break;
}
if(!*p){
*p = n;
}else{
if((*p)->Data.Time != dt.Time){
n->Next = *p;
*p = n;
}else{
NODE *q = *p;
n->Next = (*p)->Next;
*p = n;
free(q);
}
}
}
478476 ◆FIcNi4f8js :04/12/18 14:08:35
>>454-460
ほれ
begin-base64 644 schedule.c.gz
eNq9Vttu20YQfTfgL8jL+CaQMmUoDtI+yBYQxwpqVFEL2AaKuoJAkctoYWpJ85LYcfTvmdkLl6Qp
pEWLGja9Ozs8M3N2LjzgIojLkMFZXoQ8OVmNd3cO6rKYL6UQxSGLuGBwcfthcX315wRO3/5Ul77/
dXKjDn6uq1/6T4uPVzN43RK9+wPe1GQ3fC3Vhi0Rqp2+IbziKWV4AEyUa3iO/DhnHhRZyTawTJKY
+WJUV8vxKCjgeXcHgIuCbI7MGoGZ3AQrP4PfY1/cmaDmKN/A9ftfJpe300kX4mQ6+TiZ3Shko4jw
hS8hW1r9GXssJObst0uFRwvo3/jLmN3VWJvLQ3Jv5ecrhxah/+Tu7khDGSvKTICDIjiGty4c1Rkn
A/T254SHGCEvFhJDWeoXy9jAECqXfkZJ5nA4h+EIOJw1wIAfH7ukA4Cv3vE5qs1up9OGlShjTFpZ
sJitmShybU4YW2qbVtZShBEjSEfgPit0pfGA8nQw1kSRnLCd1NU7eu9BrjedDvwHYXYEoyJ3W8zm
LCtq9jybAGHRjFuM7FqTwCNnzxHozNqP4yRwcv6VJZGEc/FHkxKlGbofOVh7LMs82H91eHE4Pbw/
nL9yLv4S+4YW9sgL57VriAEQgzFlIeKHikihSLW3Z++hR+FJ8sLiBEvDnY/oqiTXPcfpp656t/IK
fVdSMnFCBQRjtCNXLiwz5t+PtmqenxtV6PWgdoqW9SH5UIPZGL5QV3vQV/kjTxkW/3bH9ipz5t06
F/oyWpBN0Hpq1vQtiGWoG0zn8IO5rM2L9M1XyZfu+vGgVfvbCym1peNWdOxRj/j2jQ4aJEtA5ZxO
sf2j0xDkX46J5dXfsBvi0e6oWTaLQgaSoniBFhq10QpDu1ZlVFWjP67S57bjgwEcHIUwGEi/uVvR
3kGrqmQPhs3LqF33lpdUfVBxeDKORg/SMwdHCAvuZegvw6WLOKsGIF4JCcZm/JmoTEx0T5/9uGSw
LvMClgwpgswXnxhQqPg4kdFqPK/C0WHpESEnoy0iLaVBOep0veBr6Tr+r7mOO3TdDGV0nQRjM5Lb
rsuy+zu+a0CvAvp3vjMROh+usPv2o9RT0zxoTcyIWmyUuhTDXkDPgKph+Di8rG/eGQNExdrnwjE4
tQ5vvxmWZdT4ZFBDx8xdOdtdLf6y4jFzKIauC5fMXWM0YRljo4SqvUefGKYh2vGqDy4P6BtNuLbR
WhbkiSf9Gs7dZkfO88AXkcLax+ug3xwvo6f6rlqoMseFqXDTTWyC6zbtQpCIgouSvdCiXDKt94Wa
CfvuKJyDfuRzmRbGka1+qMEreaXDqhR/TPD/Qqkl858x1+ydVXgWSIdo2x42PkoxoFX1MdAJMzQJ
aD+UGnmp62OoEv87Ls5PKw==
====
479デフォルトの名無しさん:04/12/18 15:47:41
ダイアログボックスのピクチャーコントロールに
実行中のデータを逐次表示させようとスレッドのなかで
GetDlgItem()関数でピクチャーコントロールのポインタを取得しようとしているのですが
上手くいきません。

    CWnd* h = (CWnd*)GetDlgItem(IDD_WAITQSIM_DIALOG,IDC_GRAPH);
こう書くと「1 番目の引数を 'const int' から 'struct HWND__ *' に変換できません。」
と言われます

    CWnd* h = (CWnd*)GetDlgItem((HWND)IDD_WAITQSIM_DIALOG,IDC_GRAPH);
と書いたり
    CWnd* h = (CWnd*)GetDlgItem((HWND__ *)IDD_WAITQSIM_DIALOG,IDC_GRAPH);
と書いたりするとコンパイルはビルドは上手くいくのですが、
実行中にポインタが全然違うところを指しているというような類のエラーが出ます。
GetDlgItem()の第一引数の渡し方が悪いようですが、どうすれば正しいのか分りません。
環境は[VC++ 6.0(MFCダイアログベースアプリケーション) OS:Win2000]です。
助言をお願いします。
480デフォルトの名無しさん:04/12/18 16:03:26
>>479
スレ違い
481デフォルトの名無しさん:04/12/18 16:24:25
>>480
すみません、、VC++系のスレのほうが適所ですか‥
しかし、ダイアログボックスのハンドルの渡し方がよくわからないので、
それだけでも教えてください。
482デフォルトの名無しさん:04/12/18 16:33:20
>>481
MFC使っているなら、
IDD_WAITQSIM_DIALOGのIDを持つダイアログクラスのメンバ関数と仮定して、単純に
CWnd * h = GetDlgItem(IDC_GRAPH);
でいい。
483デフォルトの名無しさん:04/12/18 16:43:50
そうすると
「'GetDlgItem' : 関数が不正な 1 個の実引数をともなって呼び出されました。」
と出てしまいます。
484デフォルトの名無しさん:04/12/18 17:24:05
>>483
>482に書いてある仮定が読めないならC++の基礎からやり直せ。
そしてここに戻ってくるな。
485デフォルトの名無しさん:04/12/18 17:26:32
続きはこちらへどうぞ
http://pc5.2ch.net/test/read.cgi/tech/1101393155/
486デフォルトの名無しさん:04/12/18 18:15:20
>>485
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
どっちかってとこっちじゃない
487デフォルトの名無しさん:04/12/18 19:19:52
488デフォルトの名無しさん:04/12/18 19:24:03
定期美少女って表現は狼のスレでたまに見かけるな
スレ汚しスマソ

真・定期美少女
http://www.helloproject.com/apartment/profile/risa.html
489& ◆QWv3R1XL8M :04/12/18 19:26:21
つうか仕様とか出されても読むのめんどくせーから全部UMLで書いてきた
やつ以外読むのやめようぜ?
490デフォルトの名無しさん:04/12/18 19:37:14
>>489
お前誰?
491デフォルトの名無しさん:04/12/18 19:43:11
白(裏は赤)のカードが6枚並べて、サイコロを振ってその数だけ(左から順に)カードを裏返します。

例えば・・・・
サイコロを2回振ったら
赤が0:6
赤が1:10
赤が2:8
赤が3:6
赤が4:4
赤が5:2
赤が6:0

サイコロを3回振ったら
赤が0:0
赤が1:16
赤が2:40
赤が3:52
赤が4:52
赤が5:40
赤が6:16

というふうに100回分出力させるにはどうすればよいでしょうか・・・・
ど素人で申し訳ないですC++でおながいします。
492デフォルトの名無しさん:04/12/18 19:50:53
>>491
ごめん、CとかC++とかプログラムとかの前に、
法則がさっぱりわからん。
493デフォルトの名無しさん:04/12/18 19:53:55
>>484
仮定するってどういうことですか
494デフォルトの名無しさん:04/12/18 19:56:56
>>491
なんで賽子を2回振ってるのに赤が0が6なんだ?
495デフォルトの名無しさん:04/12/18 19:58:05
Ax=bの連立方程式を生成するプログラムを作っています。
このプログラムを改良して対角が0でない行列と対角優位行列を作れるようにしたいのですが
どのようにすればいいのでしょうか? よろしくお願いします。

#include <stdio.h>
#include <stdlib.h>

#define SIZE 100

int main(int argc, char *argv[])
{
int i, j;
FILE *fp;

if((fp = fopen(argv[1], "w"))==NULL) {
fprintf(stdout,"出力ファイルを指定してください\n");
exit(1);


496495:04/12/18 19:58:35
}

fprintf(fp, "%d",SIZE);
for(i=0; i<SIZE; i++) {
fprintf(fp,"\n");
for(j=0; j<SIZE; j++) {
fprintf(fp, "%d ", rand());
}
}
fprintf(fp,"\n");
for(i=0; i<SIZE; i++)
fprintf(fp,"%d ", rand());

fclose(fp);

return 0;
}
497デフォルトの名無しさん:04/12/18 20:00:30
プログラム以前に「対角優位行列」が何かわからん。

あと、いきなりあるかないかわからん文字列使ってfopenすんな。
argcの値でチェックしろ。
498デフォルトの名無しさん:04/12/18 20:04:27
a(n)=1×2×...×n
b(n)=b(n-1)+b(n-2)、 b(1)=1、 b(0)=0

・n(≥1)が入力として与えられたとき、a(n)の値を返す再帰的なプログラムを記述せよ。
・上記の問題を再帰を用いないプログラムで記述せよ。
・n(≥1)が入力として与えられたとき、b(n)の値を返す再帰的なプログラムを記述せよ。
・上記の問題を再帰を用いないプログラムで記述せよ。
※ただし入力と出力は全ての整数型で与えられるとし、記述はDel-phiで記述せよ。


499デフォルトの名無しさん:04/12/18 20:05:16
最初の状態
[白][白][白][白][白][白]

(1回目)サイコロの目が2だとすると・・・
[赤][赤][白][白][白][白]

(2回目)サイコロの目が4だとすると・・・
[白][白][赤][赤][白][白]

(3回目)サイコロの目が6だとすると・・・
[赤][赤][白][白][赤][赤]

こんな法則です。言葉足らずで申し訳ないです。
一回目は
赤が0:0
赤が1:1 (サイコロの目は1)
赤が2:1 (サイコロの目は2)
赤が3:1 (サイコロの目は3)
赤が4:1 (サイコロの目は4)
赤が5:1 (サイコロの目は5)
赤が6:1 (サイコロの目は6)

サイコロ100回振った結果を出力させたいのです。
>>494
一回目と2回目のサイの目が同じなら0になるといった感じです。。
500デフォルトの名無しさん:04/12/18 20:11:53
>(2回目)サイコロの目が4だとすると・・・
>[白][白][赤][赤][白][白]

(;´Д`)??
1回目とあわせて合計6だから、

[赤][赤][赤][赤][赤][赤]

じゃないの?
501デフォルトの名無しさん:04/12/18 20:13:05
>>500
賽子一回ずつ左から引っ繰り返すんだと。
502491:04/12/18 20:16:56
>>501
おっしゃる通りです。

>>499の法則で1回目から順に100回目までを>>491のような形式で出力させたいんです。
503デフォルトの名無しさん:04/12/18 20:17:39
>>501
ああっ、なるほど。やっとわかった。
504デフォルトの名無しさん:04/12/18 20:19:40
100回目までとなると総当りはきついな。
505デフォルトの名無しさん:04/12/18 20:22:51
つーか6の100乗あたりの数字になると、32ビット整数型にとても収まらない。
真面目に解決しようと思えばそこから考えなければいけないわけだな。
>>491のプログラムのレベルは相当低そうだが、誰にこんな問題出されてんの?
506491:04/12/18 20:28:02
>>505
やっぱりきついですよね。
ある知人(C++は知らない人)から電話で「お前これ作ってみろ」って言われたんです・・・
507デフォルトの名無しさん:04/12/18 20:46:16
6^100なんて普通にやったら終わらないよ
508デフォルトの名無しさん:04/12/18 21:03:11
>>491
この法則だと例えば賽を3回振ったときに
2−2−4と2−4−2と4−2−2では最終的な結果は同じになる。
要は何回目にどの目が出たかではなくて、
ある目が出た回数が重要になる。
従って100回の場合は106C6=1705904746パターンを
チェックすればいいことになるので後はがんばれ。
6^100=6.5e+77回計算するよりは遙かに楽だ。
509デフォルトの名無しさん:04/12/18 21:08:48
>>508
うーん。なるほど。賢いなあ。
でも、結局最終的に、

100回目の場合、
赤が0:29836748923792375235925892375892789572
赤が1:3457897693768934768934764897389734896734
    :
(値は適当)

とか表示しなければいけないのでそれはどうするんだ・・・
510デフォルトの名無しさん:04/12/18 21:17:01
多倍長整数を作るか、
浮動小数点で我慢するか。精度の条件しだいか。
511デフォルトの名無しさん:04/12/18 21:22:36
そろそろスーパープログラミングがお目にかかれそうです。
512デフォルトの名無しさん:04/12/18 21:22:44
具体的な数値が分かるよりも
出現回数Nと試行回数nから結果を
求める計算式が分かる方が有難い
513デフォルトの名無しさん:04/12/18 21:32:27
数学板行きの問題のような気もするが。
514デフォルトの名無しさん:04/12/18 22:03:51
親指シフトユーザーってどういう意味なの?
ぐぐってもわからんかった。
515デフォルトの名無しさん:04/12/18 22:07:32
>>514
すれ違い。
親指の位置にシフトキーがあるキーボードのユーザのこと。(だとおもう)
5161/2:04/12/18 22:18:20
>>491

#include <stdio.h>

int num_of_red(int n[])
{
 int num = 0;
 int i;
 for (i=0; i<6; i++)
  num = (n[i] & 1)?(i-num+1):(num);
 return num;
}

double factorial(int n)
{
 int i;
 double ret = 1;
 for(i=1; i<=n; i++)
  ret *= i;
 return ret;
}

double num_of_pattern(int n[])
{
 double num;
 int i;
 num = factorial(n[0] + n[1] + n[2] + n[3] + n[4] + n[5]);
 for(i=0; i<6; i++)
  num /= factorial(n[i]);
 return num;
}
5172/2:04/12/18 22:20:09
int main()
{
 int i, j;
 int n[6];
 for(i=1; i<=100; i++) {
  double sum[7] = { 0, 0, 0, 0, 0, 0, 0 };
  for(n[0]=0; n[0]<=i; n[0]++)
   for(n[1]=0; n[0]+n[1]<=i; n[1]++)
    for(n[2]=0; n[0]+n[1]+n[2]<=i; n[2]++)
     for(n[3]=0; n[0]+n[1]+n[2]+n[3]<=i; n[3]++)
      for(n[4]=0; n[0]+n[1]+n[2]+n[3]+n[4]<=i; n[4]++) {
       int index;
       double pattern;
       n[5] = i - (n[0] + n[1] + n[2] + n[3] + n[4]);
       index = num_of_red(n);
       pattern = num_of_pattern(n);
       sum[index] += pattern;
      }

  printf("賽を%d回振った場合\n", i);
  for(j=0; j<=6; j++)
   printf("赤が%d枚 : %.0lf 回\n", j, sum[j]);
 }
 return 0;
}

10までで確かめたが大丈夫だった。
それ以上での精度はしらん。
518デフォルトの名無しさん:04/12/18 22:22:52
こんなときのためにstd::next_permutation()があるんだろうな。
どう使っていいかわからないが。
519デフォルトの名無しさん:04/12/18 22:25:26
>>515
thxです。
520デフォルトの名無しさん:04/12/18 22:34:31
手を交叉させると親指シフトユーザー
521デフォルトの名無しさん:04/12/18 23:03:46
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100

int main(){
int i,j,sai,temp,cards=0,red=0,toukei[7]={0,0,0,0,0,0,0};
srand((unsigned) time(NULL));
for(i=0;i<N;i++){
sai=(int)((double)rand()/(double)RAND_MAX*6)+1;
switch(sai){
case 1: cards=cards^1;break;
case 2: cards=cards^3;break;
case 3: cards=cards^7;break;
case 4: cards=cards^15;break;
case 5: cards=cards^31;break;
case 6: cards=cards^63;break;
}
temp=cards;
for(j=0;j<6;j++){
if (temp%2==1) red++;
temp=temp>>1;
}
toukei[red]++;
red=0;
}
printf("%d回試行の結果\n",N);
for(i=0;i<7;i++) printf("赤が%dの場合 %d\n",i,toukei[i]);
return 0;
}
522デフォルトの名無しさん:04/12/18 23:07:37
>>521
ご苦労さんだが、思いっきり間違ってるよ。
523デフォルトの名無しさん:04/12/18 23:13:21
問題(C言語)
○×ゲームを作る。3×3のマス目が書かれたボードに○と×を交互に書き入れていき、
どちらかが縦横斜めのいずれかに3つ並べて書いたら勝ち。一手書く毎にボードの様子を出力せよ。
どちらかが勝った場合には勝者を、引き分けだった場合には“draw”と出力して終了せよ。

こんな課題が出されました。全くもって見当も付きません。
そもそもこんなのC言語で可能なんですか?

どなたか出来る方がいましたらお願い致します。
524デフォルトの名無しさん:04/12/18 23:17:12
>>523
>そもそもこんなのC言語で可能なんですか?
お前はC言語をなめてんのか。
525デフォルトの名無しさん:04/12/18 23:19:14
>>523
UNIX を書いた言語ですから!
526デフォルトの名無しさん:04/12/18 23:21:06
描画なんてできないと思ったんだろ。
↓こんなんでいいんだよ。


○×○
×○×
527デフォルトの名無しさん:04/12/18 23:21:39
523はDel厨
528デフォルトの名無しさん:04/12/18 23:41:40
>>523
こんなの貼るの恥ずかしいんだが、適当につくった。
エラーチェックとか一切してないから不完全だが。
#include <stdio.h>
int main(void)
{
char*sym[] = {" ", "〇", "×"};
intboard[3][3] = {0};
inti, j, k;
intx, y;
intwinner = 0;
for (i = 0; i < 9; i++) {

scanf("%d%d", &x, &y);
board[y][x] = i % 2 + 1;

for (j = 0; j < 3; j++) {
if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j]||
board[j][0] == board[j][1] && board[j][1] == board[j][2] && board[j][0]||
board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1]||
board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[1][1]) {
winner = board[y][x];
}
}
529つづき:04/12/18 23:42:09
for (j = 0; j < 3; j++) {
for (k = 0; k < 3; k++) {
printf("%s", sym[board[j][k]]);
}
puts("");
}
if (winner) break;

}

switch (winner) {
case 0:
puts("draw");
break;
case 1:
puts("〇が勝利");
break;
case 2:
puts("×が勝利");
break;
}

return 0;
}
530528:04/12/18 23:43:15
winner = board[y][x];
のあとにbreak;入れたほうがよかったな…
斜め一致の場合無意味にループが3回回る。ま、いいか。
531デフォルトの名無しさん:04/12/18 23:53:28
>>517
> printf("賽を%d回振った場合\n", i);

糞を%d回振った場合
に見えた...orz
532デフォルトの名無しさん:04/12/18 23:58:41
>>516-517
亀レスですが、2chで質問して一番感動しました。
for文をこんな感じで使うといいんですね・・・・
本当にありがとうございました!!
533523:04/12/19 00:15:30
>>528-530
うぅお〜〜〜〜、早ぇ!!?
・・・・失礼、あまりに早い反応に取り乱してしまいました。

ありがとうございます!
まだ実行はしてませんがお礼だけは言わせて下さい!
そしてお疲れ様でした!

>>524
すいません、自分まだC言語習い始めて3ヶ月ちょいなんですよ・・・。
なので、一体どこまで広がりがあるかが分からなくって。
何かC言語みくびった様な発言したみたいですいませんでした。
534デフォルトの名無しさん:04/12/19 01:28:33
>>524
チョーワロタw
535さゆ:04/12/19 01:49:38
>>528
痛々しいコードですね。
536528:04/12/19 01:55:19
>>535
んなこたわかってるっつーの。
537デフォルトの名無しさん:04/12/19 02:03:59
>>533
UNIXのOSのほとんどはCで書かれてるし、
Windowsの多くの商業アプリケーションもCで書かれてるし、
PlayStation2などの多くのゲームもCで書かれてる。
538デフォルトの名無しさん:04/12/19 02:11:55
CodeWarrior for PlayStation(R)2マンセー
539デフォルトの名無しさん:04/12/19 02:50:57
>>535
更に痛々しくしてやろう

#include <stdio.h>

void SetBit(int *dest, int field){ *dest |= 1 << field; return; }
int GetBit(int src, int field){ return (src >> field) & 1; }

int main()
{
    int board[2] = {0}, x, y, i, j, mask[] = {7, 56, 448, 73, 144, 292, 273, 84};
    char buf[256], *piece[] = {" ", "○", "×"};
    for(i = 0; i < 9; i++){
        if(sscanf(fgets(buf, sizeof(buf), stdin), "%d%d", &x, &y) == 2){
            if(x < 3 && y < 3 && (GetBit(board[0], x + y * 3) | GetBit(board[1], x + y * 3)) == 0){
                SetBit(&board[i&1], x + y * 3);
                for(j = 0; j < 9; j++){
                    printf("%s ",piece[GetBit(board[0], j)|(GetBit(board[1], j)<<1)]);
                    if((j + 1) % 3 == 0) printf("\n");
                }
                for(j = 0; j < sizeof(mask) / sizeof(int); j++)
                    if((board[i%1] & mask[j]) == mask[j]){ printf("%sが勝利", piece[i % 1 + 1]); i = 9; break; }
            } else { i--; puts("You can't set there."); continue; }
        }
        else{ i--; puts("Unknown data."); continue; }
    }
}
540デフォルトの名無しさん:04/12/19 02:54:04
return 0;忘れた
541デフォルトの名無しさん:04/12/19 02:55:55
>>539
イタタタタっイタタタタタタ
\____________/
        O       >ー-"'" ⌒,,ィシヽミミiミミ 、
        o 。   /     三彡彡彡ィ`、ミミミ`、
           /      シ彡彡彡彡ノ'ヽミミミ`、
           ,'        ,三彡彡彡彡彡ソ,ー--'
             l    _ _ """'彡彡彡彡彡ノi
          {;、 ';;;='''"""`  彡彡彡 - 、ノノi
             kr) .ィェー   彡彡' r、ヽ}彡i  
           レ'  ..      シ彡' )ァ' /彡'   と思うC言語見習い侍であった
          {_,,,、 ;、      シ彡 ニンミミ{
           l         '''"::.   彡ミi
            ! ̄"`     ...:::::::: ノ
542533:04/12/19 03:43:51
>>537
そうなんですか!?
何か素で勉強になります。
ありがとうございます。
543デフォルトの名無しさん:04/12/19 07:24:03
10進数を16進数で表示するプログラムを作っているんですがうまくいかないんで
教えてください。C言語でgccです。

#include <stdio.h>
int main() {
int x, a[100], i, j;
scanf("%d", &x);
for (i = 0; x > 1; i++, x = x / 16)
a[i] = x % 16;
for (j = 0; j <= i; j++)
printf("%c", "0123456789ABCDEF"[a[i-j]]);
}


例えば10進数の111を16進数にすると6Fが正解ですが
printf("%c", "0123456789ABCDEF"[a[j]]);
とすると、F6になってしまいます。これを解消するためにa[i-j]とすると
なぜかエラーが出てしまうんです。
ちなみに
printf("%c", "0123456789ABCDEF"[数字]);
の1文は必ず使わないといけません。おねがいします。
544デフォルトの名無しさん:04/12/19 07:33:16
for (j = i - 1;; j >= 0 ; j--)
printf("%c", "0123456789ABCDEF"[a[j]]);
545デフォルトの名無しさん:04/12/19 07:33:47
しまった
for (j = i - 1; j >= 0; j--)
546デフォルトの名無しさん:04/12/19 07:56:30
>>543
(1) x>1 を x>0に
(2) j<=iをj<iに
(3) i-jをi-j-1に
547543:04/12/19 08:01:42
できました!
なるほど、範囲外のところを呼び出してしまってたんですね。
ありがとうございました。
548デフォルトの名無しさん:04/12/19 08:02:04
xが0のときはまずい
549デフォルトの名無しさん:04/12/19 08:03:09
>>548
ほんとだな。
上のfor文はdo〜whileに置き換えた方がいい。
550デフォルトの名無しさん:04/12/19 13:21:10
いつもおもってるんだけど、プレステのゲームのコードって、
どの程度コードレビューとかするんだろう?
551デフォルトの名無しさん:04/12/19 16:48:29
>>550
もう2度と変更されない、保守されないコードをレビューする必要ってあるんだろうか…
552デフォルトの名無しさん:04/12/19 18:08:34
引いたのは戻さないでトランプ全部から一枚だけランダムに選んでいくのって
残り枚数数えて、0からその枚数までの数字をランダムで選んで、
順番に配列に入ってる残り枚数を引いてって0になったときのインデックスで
種類を決定するしかないんですか。

553デフォルトの名無しさん:04/12/19 18:12:13
>>552
まず分かりやすい日本語を書いてくれ。でないと答えようがない。
554デフォルトの名無しさん:04/12/19 18:17:42
>>552
トランプの枚数と同じだけのサイズの配列を確保して、
そこに引いたor引いてないのフラグを立てるといんでないかい?
君が言ってるのよりはこの方が速いと思う。
555552:04/12/19 18:23:35
ある袋に次の色をしたたまが入ってる。
赤 4個
青 3個
緑 4個
白 3個

例えばs[] = {4,3,4,3}のようになっている。

ここで赤〜白のたまを一つ引いて色を決定する場合
たまの合計は14個
でランダムの数字で1〜13までだして7まででたとすると
7 - s[4] = 3
3 - s[3] = 0
ここで0以下になったので、青に決定。

みたいなやり方をやっていたんですが、何か計算量が多い気がしたのです。

>>554
やっぱり一つずつ、別に扱ったほうが(・∀・)イイ!!んですかね。



556552:04/12/19 18:25:27
まちがえました。

袋からたまを一つ引いて色を決定する場合
たまの合計は14個
でランダムの数字で1〜13まででだして7がでたとすると
7 - s[0] = 3
3 - s[1] = 0
557デフォルトの名無しさん:04/12/19 18:39:49
>>555
>ここで赤〜白のたまを一つ引いて色を決定する場合
これの意味が良く分からん・・・

s[]={4,3,4,3};
t[]={0,0,0,0};
とやっておいて、青を一つ引いたら,t[1]+=1;とかじゃ駄目なの?
これで何を引いたか記憶出来るでしょ?
558デフォルトの名無しさん:04/12/19 18:53:15
あらかじめ配列をシャッフルしといて順番にひけばええやん?
559デフォルトの名無しさん:04/12/19 18:57:23
>>557
多分それじゃ、どの珠も引く確立が1/4になるからだめなんじゃ?
560デフォルトの名無しさん:04/12/19 18:57:50
なんつー日本語下手なやつだ。
学力低下ってやつか。
561デフォルトの名無しさん:04/12/19 18:58:55
頭の悪いやつは、問題文を丸写しして書け。
562552:04/12/19 19:07:32
>>560

自分でもわかりにくいと思ったから、説明しなおしたんですが
その説明でもわからないでしょうか。
563デフォルトの名無しさん:04/12/19 19:10:02
>>562
説明と言うか日本語が下手すぎる
564デフォルトの名無しさん:04/12/19 19:30:34
C言語について質問です。

例えば入力文字列 abc00325.txt に対して abc00326.txt のように、
ファイル名の数字の部分に1を加えた文字列を返すようなプログラムを
作りたいのですが、どうしたらよいでしょうか?

なお、 a012bc00325.txt のように途中に数字が入っていた場合、
最後の部分の数字だけ1を加えて a012bc00326.txt のようにする、という
条件があります。
565デフォルトの名無しさん:04/12/19 19:32:52
enum ball_color{red, blue, green, white};
std::vector<ball_color> bag;
for (int i = 0; i < 4; ++i) bag.push_back(red);
for (int i = 0; i < 3; ++i) bag.push_back(blue);
for (int i = 0; i < 4; ++i) bag.push_back(green);
for (int i = 0; i < 3; ++i) bag.push_back(white);
std::random_shuffle(bag.begin(), bag.end());
ball_color taken = bag.back(); bag.pop_back(); // 取り出し
566デフォルトの名無しさん:04/12/19 19:34:35
>>564
1.文字列を数字の部分とそうでない部分に分割する。
2.数字の部分を数値に変換する。
3.インクリメントする。
4.文字列に戻して数字以外の部分と結合する。
567デフォルトの名無しさん:04/12/19 19:34:41
>>564
ピリオド'.'より一つ前の文字からisdigit()で数字が続く限り前方にポインタを動かし、
そこからピリオドまでを切り取ってsscanf()(またはitoa()、標準ではない)でint型に
直し、+1してから、改めてsprintf()して新しいファイル名を作り出す。
568デフォルトの名無しさん:04/12/19 19:37:09
>>555  翻訳してみた

ある袋に
 赤4、青3、緑4、白3
と玉が合計14個入っている。
これを配列で表すと、s[]={4,3,4,3}と表せる。

今やりたいことは、袋の中から玉を一つとったとき、その色を求めることである。
今、玉を横一列に並べよう
 赤赤赤赤青青青緑緑緑緑白白白
となる。玉は14個あるので、1〜13 (訳注:14じゃないか?) の中からランダムで選び、(xとする)
横に並べた左からx番目の色を求める、っていうのを考えたんだ。
たとえば、ランダムで7がでたら、
 7-s[0]=3…赤をとった残りは3
3-x[1]=0…次に青をとった残り、0以下になったので青でfinal answer

でも、このやり方をしたら、計算量が多い気がしたから、質問してみたんだ
569555:04/12/19 19:41:10
>>568
すみません、そんな感じです。1〜14でした。
結構、ありがちな問題だと思ったので何となくで伝わるような気がしてました。
570デフォルトの名無しさん:04/12/19 19:41:31
> (訳注:14じゃないか?)
おれは0〜13かなぁと思った。

しかし、翻訳したら急にフランクになってるなw
「多い気がしたから、質問してみたんだ」とか本人が言ってたらムカッとするところw
571デフォルトの名無しさん:04/12/19 19:44:31
あぁ、なるほど・・・トランプの話は余分だったと思うぞw
まぁ、計算はそのやり方でいいと思うよ。
572555:04/12/19 19:46:59
>>571
すみません、実はちょっと勘違いしててトランプは数字も、マークも全く同じものが4枚あると
勘違いしてたんです。
573555:04/12/19 19:48:42
また日本語おかしくなったorz
574デフォルトの名無しさん:04/12/19 19:49:46
>>572
>トランプは数字も、マークも全く同じものが4枚あると
仮面ライダーブレイドでも観て勉強しろ!
でも捨てハンはファイズだな…。
575デフォルトの名無しさん:04/12/19 19:51:28
>>572の(訳)
すみません。実はトランプには数字もマークも全く同じものが、
それぞれ4枚ずつあると勘違いしていたのです。
576デフォルトの名無しさん:04/12/19 19:53:26
>>575の(訳)
すみません。実際、[4]がさらに持っているものがあった時、
1つの、完全に同じ数、そして1つの、完全に同じマーク、一度に、それぞれ、それはカード用に誤りました。
577デフォルトの名無しさん:04/12/19 19:58:01
>>576
そこぞの翻訳エンジンのようだ
578564:04/12/19 21:19:23
>>566 >>567
ありがとうございます、方法は理解したのですが、
コードが全然書けません。。。
どなたか書いて頂けないでしょうか?
579デフォルトの名無しさん:04/12/19 21:31:18
test
580デフォルトの名無しさん:04/12/19 21:37:51
すみません、教えて下さい。
10進数を16進数に変換するプログラムを作成したいんですが、どうなりますか?
581ぼるじょあ ◆yBEncckFOU :04/12/19 21:42:07
>>580

#include <stdio.h>
#include <stdlib.h>
int main()
{
char suuji[100]="12345";
long suuchi;
printf("%s\n↓\n",suuji);
suuchi=atol(suuji);
sprintf(suuji,"%lX",suuchi); /* ここで変換 */
printf("%s\n",suuji);
return 0;
}
582デフォルトの名無しさん:04/12/19 21:42:52
char ss[] = "abc00325.txt";
ss[7]++;
printf("%s\n", ss);
583デフォルトの名無しさん:04/12/19 21:44:41
>>580
std::cout << std::hex << 12345;
584デフォルトの名無しさん:04/12/19 21:46:53
>>578
理解できたような気になっているだけだから
かけないんだと思います。
585デフォルトの名無しさん:04/12/19 21:48:53
>>580
#include<iostream>
#include<string>
#include<boost/lexical_cast.hpp>

int main(){
 std::string str = "12345"
 std::cout << std::hex << boost::lexical_cast<int>(12345);
}
586585:04/12/19 21:49:44
typo.
std::cout << std::hex << boost::lexical_cast<int>(str);
587デフォルトの名無しさん:04/12/19 22:07:20
>>578
方法を理解したなら、それなりの形のものはできるはずだ
泥臭いものでもいいからとりあえず書いてみろ

多分俺以外の誰かが添削してくれるから
588デフォルトの名無しさん:04/12/19 22:42:12
すいません。質問です。red hat linuxの
xwindow上で、グラフを描く時に必要な処理を教えて下さい。
とりあえずアルゴリズムは分かるのですが、グラフィックは未経験なので、
直線を引くために必要なライブラリと、描画の準備のための処理、直線を描く命令
などが分からないのです。

検索するとxlibなるものが出てくるのですが、なにやら説明が難しいので
もっと簡単なものがあればそれでお願いします。
あとlinuxで一般的に使えるものでお願いします。
直線を描くだけなので、処理速度などに対する考慮はいりません。
分かる方、どうかお願いします。
589名無し募集中。。。:04/12/19 22:45:04
ここはどこだ?
590デフォルトの名無しさん:04/12/19 22:45:34
>>588
OpenGL
591429:04/12/19 22:46:35
C言語ですお願いします

座標位置 (x, y) に点を打つ。というpsetなんですが
直線のアルゴリズムは理解できたんですがこのpsetをしていく
中身がわかりません。
<stdio.h>のみで書けるのでしょうか?何度もすみません
592デフォルトの名無しさん:04/12/19 22:51:54
>>591
「psetをしていく」の意味が解かりません。
593デフォルトの名無しさん:04/12/19 22:51:56
DDAを理解しようとがんばるなんて立派なもんだ
おれの後輩は「API一発っすよ」と真顔で答えてた
594デフォルトの名無しさん:04/12/19 22:53:01
C言語の規格には、図を描くための規格は一切ありません。
よってどのような環境でも通用するような図の描き方はありません。
よってあなたが環境を書かない限りレスのしようがありません。
595429:04/12/19 23:09:31
どうやったら座標上に点がプロットできるのでしょうか
検索してもpset関数?みたいなのでpset(x,y,color);
のようにしてるんですがそのプロットする上ので中身がわかりません。

初心者なもので質問の仕方もへたなんですがよろしくおねがいします。
596デフォルトの名無しさん:04/12/19 23:11:04
> 初心者なもので質問の仕方もへたなんですが
そういう問題かなぁ…。
597デフォルトの名無しさん:04/12/19 23:11:08
598デフォルトの名無しさん:04/12/19 23:12:56
>>595
お前とりあえず、
1.何歳?
2.今の身分は?(学生?社会人?)
3.そもそも何でそんなプログラム組もうと思ってんの?
599429:04/12/19 23:17:04
20の学生で課題です。
windows xp で CPad for Borland C++ Compiler使ってます。
環境おくれてすみません!
600デフォルトの名無しさん:04/12/19 23:27:20
>>599
プログラミングを諦めるか人生を諦めるか、好きな方を選べ。
601デフォルトの名無しさん:04/12/19 23:27:24
[1] 授業単元:計算機
[2] 問題文(含コード&リンク):N個の数値があり、それを区間ごとにわけ、
区間ごとに入った数の個数を調べたい。私は次のレスのように考えたのですが
上手くいかないので、何処が間違ってるのか教えてください。
[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:なし
602601:04/12/19 23:29:48
調べる数はl_0[]

for (h = (-1.0)*a ; h<=a-1.0; h++){
cou[h] = 0.0;
for (k = 0; k <= N-1; k++){
s = 600.0 * (h / (double)a);
t = 600.0 * (h + 1.0) / (double)a;
if((s < l_0[k]) && (l_0[k] < t))
cou[h]++;
}
fprintf(out_rk_2,"%lf %lf\n",(s+t) / 2.0 , cou[h]);
}
603デフォルトの名無しさん:04/12/19 23:31:02
k <= N-1

この時点で馬鹿。
604429:04/12/19 23:31:12
最初に書いてあったのみてなかったです。ごめんなさい
自分でやってみます。どうもありがとう
605デフォルトの名無しさん:04/12/19 23:31:52
h++

じゃねーの?
606デフォルトの名無しさん:04/12/19 23:32:54
配列s[ ]に16進数0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
を格納し、sの内容を8進、10進、16進数で出力せよ。
教えて下さい・・。
607601:04/12/19 23:33:03
>>603
k < N-1って書けということですか?
608デフォルトの名無しさん:04/12/19 23:34:03
8神って %何 だっけ?
609デフォルトの名無しさん:04/12/19 23:34:14
>>606
もうね、そんなことすらできないのなら、プログラムやめろと。
あと、多分言いたいことは「16進数…」じゃなくて「10進数…」だろ?
16進数だとしたら、9と10の間が空くぞ。
610デフォルトの名無しさん:04/12/19 23:34:21
>>607
k < N
611デフォルトの名無しさん:04/12/19 23:34:37
>>607
k < Nだ。
612601:04/12/19 23:34:59
>>605
何処をh++にすればよいのでしょう?
613588:04/12/19 23:34:57
>>590 ありがとうございます!
openGLで調べてみます!即答感謝します!マジで時間がないので助かります。
614デフォルトの名無しさん:04/12/19 23:35:43
%o
615ぼるじょあ ◆yBEncckFOU :04/12/19 23:35:52
>>606
#include <stdio.h>
int main()
{
int s[]={0,1,2,3,4,5,6,7,8,9,0x10,0x11,0x12,0x13,0x14,0x15};
int i;
for(i=0;i<16;i++)
printf("%o %d %X\n",s[i]);
return 0;
}
616デフォルトの名無しさん:04/12/19 23:36:15
>>609
教授がキモイ教授なので間違いだと思います・・。
教えて頂けませんか?
617605:04/12/19 23:36:50
h の型はなんだ?
h++ がまずいんじゃねーの?
618デフォルトの名無しさん:04/12/19 23:37:16
>>616
>>615に書いてあるとおりだ。
10進数だとしたら、初期化子の0xを消せ。
619デフォルトの名無しさん:04/12/19 23:40:07
>>616
お前も相当キモイぞ
620601:04/12/19 23:40:19
>>617
hの型はint型にしてあります。
621デフォルトの名無しさん:04/12/19 23:43:22
>>615
printf("%o %d %X\n", s[i], s[i], s[i]);だろ
622ぼるじょあ ◆yBEncckFOU :04/12/19 23:44:21
>>621
エェー
言われるまで気づかなかったYO!
623デフォルトの名無しさん:04/12/19 23:46:38
>>621,622
ありがとうございます。
621に修正して実行したんですが、
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
10 8 8
11 9 9
20 16 10
21 17 11
22 18 12
23 19 13
24 20 14
25 21 15
Press any key to continue
となってしまいました・・
624623:04/12/19 23:48:05
俺の環境がわるいんすかね・・
625デフォルトの名無しさん:04/12/19 23:48:14
>>623
だから10進の0〜15にしたいのなら、>>618の通りにしろってば。
626デフォルトの名無しさん:04/12/19 23:50:57
>>623
/* Ver 1.01 */
#include <stdio.h>
int main()
{
int s[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int i;
for(i=0;i<16;i++)
printf("%o %d %X\n",s[i],s[i],s[i]);
return 0;
}
627623:04/12/19 23:51:47
>>625,626
#include <stdio.h>
int main()
{
int s[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int i;
for(i=0;i<16;i++)
printf("%o %d %X\n", s[i], s[i], s[i]);
return 0;
}
でやったらできました。房ですみません・・。ガンガリマス
628601:04/12/20 00:02:17
何でcou[h]の値がマイナスになる区間が出てくるんだろう…orz
629デフォルトの名無しさん:04/12/20 00:06:42
couの初期化ミス
630601:04/12/20 00:26:58
考えたけどやっぱりわかりません(´・ω・`)
質問に答えてくれた方ありがとうございました。
631デフォルトの名無しさん:04/12/20 00:36:43
だから、aが正だとhが負をとり得るんだけど、そのときcouは大丈夫?
632601:04/12/20 00:39:26
>>631
全然大丈夫じゃありませんね…orz
俺のバカ…
どうもありがとうございます。
633601:04/12/20 00:41:44
>>631
ちゃんとできました。
本当にありがとうございます。
634デフォルトの名無しさん:04/12/20 01:54:08
5人の点数の平均点を出力して、その平均点と5人の内の1人の点数
を比較するプログラムなんですが、エラーがどうしても消せません。
分かる方教えていただけないでしょうか?
double test(int ma[])
{
int i,vy,vx;

for(i=0; i<=number; i++){
printf("%d番:",i+1);

vy+=ma[i];
}

vx=(double)vy/number;

return(vx);
}
635デフォルトの名無しさん:04/12/20 01:55:26
上の続きです
int main(void)
{

int i,a;
int vz[number];
double ave;
int test;

printf(" %d人分の点数を入力してください。\n",number);
for(i=0; i<=number; i++)
scanf("%d",&vz[i]);

ave=test(vz);

printf("平均点は%.1fです。\n",ave);


printf("比較する生徒の番号を入力してください。\n");
scanf("%d",&a);

if(ave<vz[a])
printf("その人は平均以上です。");
else
printf("その人は平均以下です。");

return(0);
}
636デフォルトの名無しさん:04/12/20 01:57:20
for(i=0; i<=number; i++)
637デフォルトの名無しさん:04/12/20 01:58:40
vx,vy未初期化
638デフォルトの名無しさん:04/12/20 02:00:18
「以上」「以下」用語の理解誤り
639634:04/12/20 02:04:35
>>636-638
自分へのレスですか?
もしそうなのであればもう少し分かりやすくお願いできないでしょうか?
>>638
その辺りは後でちゃんとやります・・・orz
640デフォルトの名無しさん:04/12/20 02:08:29
「後でちゃんとやります」
641デフォルトの名無しさん:04/12/20 02:09:06
>>639
>エラーがどうしても消せません。
エラーをなぜ書かないの?

>>637がいいたいこと
>vy+=ma[i];
vyに初期化してないのに、vy = vy+ma[i];とかしても望む値はこないだろうけどいいのかと。
642634:04/12/20 02:17:26
>>641
すみませんエラーは ave=test(vz); のところで
 関数で無いものを呼び出している
と出ます。

初期化のことなんですが、どうすればいいか分からないのですが。
何も分からなくてすいません
643デフォルトの名無しさん:04/12/20 02:20:20
int test;
644634:04/12/20 02:26:15
>>643
int test
のところがまずいんですか?
645デフォルトの名無しさん:04/12/20 02:31:19
全部
646デフォルトの名無しさん:04/12/20 02:31:55
いい加減教科書読むか、授業に出ろ
647デフォルトの名無しさん:04/12/20 02:34:34
>>634
修正したった。どこが修正されたかは自分で確認してね♪
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/34.txt
648634:04/12/20 02:35:09
はい、わかりました。
明日聞いてみますお手数かけました・・・
649634:04/12/20 02:39:32
>>647
すみません。更新するの忘れていました。
わざわざそこまでしていただいて申し訳ありません。
参考にさせていただきます。
こんな夜中にありがとうございました。
650デフォルトの名無しさん:04/12/20 02:46:15
>>634

自分で確認させようとも思ったけど、
丸投げさせるために修正箇所を書こうw
1)int i,vy,vx;→int i,vy=0;
          double vx;
理由:
関数testの戻り値がdouble だからvxもdouble

2)for(i=0; i<=number; i++){ →for(i=0; i<NUMBER; i++){
理由:numberが3つまり生徒数三人だとのとき左だと0,1,2,3までで四つ
右だと0,1,2までで三つ

3)int test; を消しました。
ave=test(vz); のところで
 関数で無いものを呼び出している の原因

もう更新しないかな?w


651デフォルトの名無しさん:04/12/20 02:48:43
あっと 1) に追記
vy=0として初期化
652634:04/12/20 02:49:22
更新してまつよ。
今、やってるところでつ
653デフォルトの名無しさん:04/12/20 02:59:30
突然失礼します。
この問題を教えていただきたいのですが。
(問題)
sinの値が以下のように与えられている場合、ラグランジュの公式を用いて、
sin25°の値を計算せよ。また、その誤差を検討せよ。角度はラジアンに直せ。
xi(°)={0,10,20,30,40,50,60,70,80,90}
sin(xi)={0.000000,0.173648,0.342020,0.500000,0.642788,0.766044,0.866025,0.939693,0.984808,1.000000}


よろしくお願いします。
654デフォルトの名無しさん:04/12/20 03:09:12
655653:04/12/20 03:46:23
言語はCです。
656デフォルトの名無しさん:04/12/20 04:31:51
657デフォルトの名無しさん:04/12/20 04:59:18
>>653
#include <stdio.h>
#include <math.h>

#define RAD(x) ((x) * M_PI / 180.)

struct sin_table {
double x;
double sinx;
};

double lagrange_interpolation(double x, int n, struct sin_table st[])
{
int i, j;
double t, y = 0.;

for (i = 0; i < n; i++) {
t = st[i].sinx;
for (j = 0; j < n; j++)
if (i != j)
t *= (x - st[j].x) / (st[i].x - st[j].x);
y += t;
}
return y;
}

int main(void)
{ };
658デフォルトの名無しさん:04/12/20 04:59:51
struct sin_table st[] = {{0. , 0.000000},
{10., 0.173648},
{20., 0.342020},
{30., 0.500000},
{40., 0.642788},
{50., 0.766044},
{60., 0.866025},
{70., 0.939693},
{80., 0.984808},
{90., 1.000000},
};
double eps;

printf("sin(25°) by lagrange補間 = %.15g\n", eps = lagrange_interpolation(25., sizeof(st) / sizeof(st[0]), st));
printf("sin(25°) by sin関数 = %.15g\n", sin(RAD(25.)));
printf("誤差 = %.15g\n", fabs(sin(RAD(25.)) - eps));


return 0;
}
659デフォルトの名無しさん:04/12/20 05:00:44
>>657
int main(void)の次の行の
{ };

{
に直して下さい。コピペミスした。
660デフォルトの名無しさん:04/12/20 05:03:47
>>657
ありがとうございます。助かりました。
661デフォルトの名無しさん:04/12/20 05:24:38
>>660
まだ見てるかな・・・・
元のデータの小数点以下の精度が6桁しかないので、%.15gってのは意味があまりないです。
%.6gでいいです。
662デフォルトの名無しさん:04/12/20 05:32:41
>>659
42行と43行に'M_PI' undefinedっていうエラーが出たんですけどわかりますか?
663デフォルトの名無しさん:04/12/20 05:34:18
>>662
あーそれなら、
#define M_PI 3.141592653589793

#include <math.h>
の後ろに付けて。
M_PIは標準マクロじゃないから。スマソ
664デフォルトの名無しさん:04/12/20 05:35:51
>>663
何度もありがとうございます。さっそくやってみます。
665デフォルトの名無しさん:04/12/20 05:37:15
>>664
あと、マルチポストすると誰も答えてくれない可能性が大きいから、今度からは宿題スレ
だけに出題してね。
666デフォルトの名無しさん:04/12/20 05:55:06
すみませんでした。はじめてなんでわかりませんでした。
667デフォルトの名無しさん:04/12/20 06:07:05
コンパイルできません!
こういうことですよね?

#include <stdio.h>
#include <math.h>
#define M_PI 3.141592653589793
#define RAD(x) ((x) * M_PI / 180.)






668デフォルトの名無しさん:04/12/20 07:07:46
>>667
何だ何だ?コンパイラは何?
エラーメッセージをそのまま貼り付けれ。
669デフォルトの名無しさん:04/12/20 13:49:29
すいませんお願いします。
太閤立志伝でちんちろりんってゲームありますよね。
あれをC言語でやってこいと先生に言われたんですが。ただし1人分だけでいいそうです。
1.最初に何回勝負するか入力できる。さいころは3こ独立してる。
2.1回目 ○○○←ここに数字。数字の横に出目が2なら2か… 3なら3か… みたくセリフの場所
3.ルールは出目がAABなら→Bが勝負数字。(ABAでもBAAでも可です。)
  また3個ゾロメと 、123と456っていうパターンがあります。
お願いします。C言語です。
670デフォルトの名無しさん:04/12/20 13:53:09
・問題文は、ちゃんと解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式自体をあげ、どのような計算をするのか詳しく説明してください。
671669:04/12/20 14:03:44
ごめんなさい。乱数です。だから多分…3個のさいころがあって振った時の出目が乱数です。
その結果を1回目 131 3か…(311でも113でもOK)
     2回目 111 きた!!ピンゾロ
3回目 125 出目なしか
     4回目 123 アイタタタ(231でも321でもOK)
って表示したいんです。
乱数の結果をifか何かで振り分けるそうです。3個のサイコロの出目の順番は関係ありません。

   
672デフォルトの名無しさん:04/12/20 14:05:04
正直全然わからない
673669:04/12/20 14:20:52
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<time.h>



int main()
{
int sai1,sai2,sai3,kai,i;
srand((unsigned)time(NULL)); //ランダム

printf("さいころを振る回数を入力して下さい。");
scanf("%d" , &kai );

for(i = 0; i < kai; i++)
{
sai1 = rand() % 6 + 1;
sai2 = rand() % 6 + 1;
sai3 = rand() % 6 + 1;
printf("出た目は = %d %d %d\n",sai1,sai2,sai3);
}

return 0;
}

ここまではできたんですけど。「出た目は」ってところも1、2、3と表示が変わるようにしてほしいです。
674デフォルトの名無しさん:04/12/20 14:39:59
>673
printf("%d回目 出た目は = %d %d %d\n",i ,sai1, sai2, sai3);
675AMI:04/12/20 16:48:40
現在VisualC++6.0を使用しております。
そこで他アプリの起動、終了を行う処理をしております。
起動処理
BOOL bResult;
STARTUPINFO StartInfo;
StartInfo.lpTitle = NULL;
StartInfo.lpDesktop = NULL;
StartInfo.dwFlags = STARTF_USESHOWWINDOW;
StartInfo.wShowWindow = SW_SHOWDEFAULT;
StartInfo.lpReserved = NULL;
StartInfo.lpReserved2 = 0;
StartInfo.cb = sizeof(StartInfo);
PROCESS_INFORMATION ProcessInfo;
bResult = CreateProcess(
"C:\\WINNT\\NOTEPAD.EXE",NULL,NULL,NULL,FALSE,
HIGH_PRIORITY_CLASS + CREATE_NEW_PROCESS_GROUP,NULL,NULL,&StartInfo,
&ProcessInfo);
終了処理
DWORD dwExitCode;
GetExitCodeProcess(ProcessInfo.hProcess,&dwExitCode);
TerminateProcess(ProcessInfo.hProcess,(UINT)dwExitCode);
CloseHandle(ProcessInfo.hProcess);
のように記述して、成功しているのですが、
たとえばウインドウズからノートパッドを立ち上げ、それをVC側で終了するのは
どのようにすればよろしいのでしょうか?
上記処理まではなんとか調べて、できたのですが・・・・。
すみませんがよろしくお願いします。
676デフォルトの名無しさん:04/12/20 17:18:16
Cで、0〜9までの4つの数字に四則演算を施して10にする方法を求め、
可能な解をすべて列挙し、解が無い場合は解なしと出力するプログラムを教えてください。
例えば、3 4 2 5 → 3*2=6, 6-4=2, 2*5=10
    0 1 2 3 → 解なし というように、計算法が分かるように出力してください。
677デフォルトの名無しさん:04/12/20 17:33:05
数字4桁分の4つのループのなかで、
四則演算の組み合わせ4^3パターン全てチェックして、
該当する演算パターンになったか調べるだけじゃん。


678デフォルトの名無しさん:04/12/20 17:40:43
【質問テンプレ】
[1] 授業単元:レジストリ
[2] 問題文(含コード&リンク):レジストリをいじりたいのですが、参考になるサイト教えて下さい
[3] 環境
 [3.1] OS:WinXPProSP1
 [3.2] コンパイラ(バージョン):BCC5.5.1
 [3.3] 言語:C/C++
[4] 期限:無期限
[5] その他の制限:
679デフォルトの名無しさん:04/12/20 17:41:38
>>678
www.google.co.jp
680デフォルトの名無しさん:04/12/20 17:42:39
open http://www.google.com/
type レジストリ
click tons of links
681デフォルトの名無しさん:04/12/20 19:18:40
わかる人お願いします・゚・(つД`)・゚・
問:以下のプログラムで、(☆)の箇所で、このプログラムだと
  プロセスproを起動したにも関わらずa[0]=0のままである。
  a[0]=1とするにはどうすればいいか

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>

void pro(int a[10]){
pid_t pid;
pid=getpid();
a[0]=1;
return ;}

main(){
int i,k,a[10];
pid_t p_pid,pid;
p_pid=getpid();
a[0]=0;
switch(pid=fork()){
case 0: /* child */
 pro(a);
 exit(1);
 break;
case -1:
 perror("fork");
 break;
}
pid=wait(0);
printf("a[0]=%d\n",a[0]); ──(☆)
}
682デフォルトの名無しさん:04/12/20 19:26:12
フォークした時点で変数は分離されるので、親と子は別の変数になり、
子の中で何かしても、親の変数にはまったく影響ないよ。
683デフォルトの名無しさん:04/12/20 19:26:45
いくら宿題スレでも酷すぎね?文字も読めないの?
684デフォルトの名無しさん:04/12/20 19:27:44
問題:有限ビットで表される、2つの整数を加算した場合にオーバフローがおきるかどうかをチェッ
クするコードをC言語で書いてください

環境:動くコードを。プラットフォームは問わない

お願いします。
685デフォルトの名無しさん:04/12/20 19:33:51
補数とって大小比較すればいいんちゃうんちゃう?
686デフォルトの名無しさん:04/12/20 19:35:02
Cで二つの整数入力して、足し算した結果を出力するプログラム作っておいて。
687デフォルトの名無しさん:04/12/20 19:38:11
#include <stdio.h>
void main(void){printf("Cで二つの整数を入力して、足し算した結果\n");}



688デフォルトの名無しさん:04/12/20 19:45:25
>>684
#include <stdio.h>
#include <limits.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
if(b>INT_MAX-a)
printf("おきる\n");
else
printf("おきない\n");
return 0;
}
689デフォルトの名無しさん:04/12/20 20:10:06
>>684
問題が明瞭ではない
690デフォルトの名無しさん:04/12/20 20:16:22
>>689
どこが?
691デフォルトの名無しさん:04/12/20 20:24:47
>>688
ダメです。わざわざ、任意のビット長と断ったはずです。
これでは、CのINTにしか適用できません。

それに、これではオーバーフローを調査したことにはなり
ません。2数の演算のオーバーフローを調査するだけなら、
もっと簡単な方法があります。

ということらしいです。>>684 の回答をもう一度お願いします。
692デフォルトの名無しさん:04/12/20 20:26:30
ああ、やっぱり荒らしか。
693デフォルトの名無しさん:04/12/20 20:30:26
>>692
いや、お手上げなので質問を(^^;
694デフォルトの名無しさん:04/12/20 20:31:55
そもそも有限ビット長の整数をどう表せばいい?
bitsetのような配列でいいのか?
695デフォルトの名無しさん:04/12/20 20:32:18
>ダメです。わざわざ、任意のビット長と断ったはずです。
答えてもらっといて何だこの態度は
696デフォルトの名無しさん:04/12/20 20:38:29
>>695
ええと、それは教授から私へのレスポンスがそうであったんで、
そのまま貼り付けました。ですから一番最後に自分の言葉ではない事を
分かってもらう為に
「ということらしいです」
と書きましたが。

>>694
私も大学生ですのでその程度は自分で考えろとの回答です。
697695:04/12/20 20:41:03
はやとちりごめん
698デフォルトの名無しさん:04/12/20 20:42:48
君も大学生ならその程度自分で考えろYO
699デフォルトの名無しさん:04/12/20 20:43:15
>>696
> 私も大学生ですのでその程度は自分で考えろとの回答です。
その程度は自分で考えろ
700684:04/12/20 20:46:03
お手上げですので、こちらで質問しているのです。
701デフォルトの名無しさん:04/12/20 20:47:55
>>700
お前態度むかつくな
702デフォルトの名無しさん:04/12/20 20:49:06
しているのです。
しているのです。
しているのです。
703684:04/12/20 20:50:32
私はわからないので質問をしているのに
「その程度は自分で考えろ。」
との回答の方が理解できないと思われますが。
704デフォルトの名無しさん:04/12/20 20:53:27
>>703
お前うぜえよ。>>691の発言は何だ。
タダで答えてもらっておいて、その発言はないだろ。
嫌なら金払え。じゃないなら去れ。誰も答えないから。
705デフォルトの名無しさん:04/12/20 20:54:36
任意のビット長なんて684のどこにも書かれていないんだが
706デフォルトの名無しさん:04/12/20 20:54:40
2数のMSBと、加算後の数値のMSBを見れば分かるとか
そういう概念的な話じゃないの?
707デフォルトの名無しさん:04/12/20 20:55:16
>>703
m9(^Д^)プギャーーーッ
708デフォルトの名無しさん:04/12/20 20:56:03
放置、放置、
709684:04/12/20 20:56:10
>>704
>>691 は私のレスポンスではない旨は >>696 に(^^;
710デフォルトの名無しさん:04/12/20 20:56:24
このスレ読んでると、「バカの壁」って良い本なんだなーって思えてくるよ
711デフォルトの名無しさん:04/12/20 20:57:00
>>709
プギャーーーッ(^^;
712デフォルトの名無しさん:04/12/20 20:57:53
>>709
君のレスではないとしても、そのまま書いてしまうという君の態度が気に入らない。
ここば文章だけの世界なんだから、誤解を招いても仕方ない書き込みをしてしまった
時点で君は既に厨だ。もう誰もまともに答える気をなくしていると思う。
713デフォルトの名無しさん:04/12/20 20:58:36
よく考えたら、
>>703をそのまま教授に送りつければいいんじゃね?
714デフォルトの名無しさん:04/12/20 20:59:03
質問です、有限ビットってなんですか?
715デフォルトの名無しさん:04/12/20 20:59:20
任意のビット長ってintを越える整数も考慮してるんか?
していないなら>>706
716デフォルトの名無しさん:04/12/20 20:59:55
>>713
その通りだ!
717デフォルトの名無しさん:04/12/20 21:03:03
大学の名前と教授の名前を晒せ。代わりに言ってやるから。
718デフォルトの名無しさん:04/12/20 21:03:50
教授相手にそんな文章送れる度胸あるんやね。この板の住人って。
すげーなーと思った漏れですた
719デフォルトの名無しさん:04/12/20 21:04:54
ネタをネタと見抜けない奴は日テレのイマイでも見てろ
720デフォルトの名無しさん:04/12/20 21:06:06
>>718
教授には言えないことを、善意の第3者がただで答えてくれてる場で発する態度にムカついてるだけだ。
721デフォルトの名無しさん:04/12/20 21:10:26
禁じ手: 「釣りでした」

それでは対戦をお楽しみください
722デフォルトの名無しさん:04/12/20 21:11:32
釣りだった
723デフォルトの名無しさん:04/12/20 21:12:37
釣られた
724デフォルトの名無しさん:04/12/20 21:14:05
なんか、、、端からみてて態度云々より、結局分かる香具師が居ない事のほうが、悲しいよ。
725デフォルトの名無しさん:04/12/20 21:15:53
>>724
わかる奴はいっぱいいると思うよ。
少なくともオレはわかる。
皆こんな奴のために答えたくないだけかと。
726デフォルトの名無しさん:04/12/20 21:18:03
ていうか、答えでてね?
727デフォルトの名無しさん:04/12/20 21:18:30
でてる。
728デフォルトの名無しさん:04/12/20 21:19:48
新種のフィッシング詐欺
729デフォルトの名無しさん:04/12/20 21:21:35
解説者: 「これは釣り矢倉の一種ですね。禁じ手です」
730デフォルトの名無しさん:04/12/20 21:23:58
何だ?このスレの奴等は宿題を”解かせてもらっている”んじゃなかったの?
質問者の態度にいちゃもんつけるのは筋違い。回答者の方が丁寧な姿勢になるべきじゃないの?
731デフォルトの名無しさん:04/12/20 21:24:22
ふぅ...
732デフォルトの名無しさん:04/12/20 21:24:52
いつからそんな総意になったんだよ。>>1にあるか?
733デフォルトの名無しさん:04/12/20 21:25:30
>>730
もういいって
734デフォルトの名無しさん:04/12/20 21:26:24
何だ。このスレを続けるための言い訳の一つでしか無かったのか。くだらねぇ。
735ケンカストッパー:04/12/20 21:29:54
         ケンカ     やめれ!!
               ∧∧
     |\       (´Д`)          /|
     ヾ  ̄ ̄ ̄ ̄ ̄    ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
       ̄ ̄ ̄ ̄ ̄ ̄|  | ̄ ̄ ̄ ̄ ̄ ̄ ̄
               |   |
        / ̄ ̄ ̄ ̄\/ ̄ ̄ ̄ ̄ ̄\
       __/ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ .\__
___<__)__________ (__>___
736デフォルトの名無しさん:04/12/20 21:31:33
今日中に900いかなかったら
私の顔写真up
737デフォルトの名無しさん:04/12/20 21:32:10
この流れなら900は軽い。
738デフォルトの名無しさん:04/12/20 21:47:36
>>734
いまごろ気づくなよ
739デフォルトの名無しさん:04/12/20 21:52:52
         ケンカ     ファイティング!!
               ∧∧
     |\       (´Д`)          /|
     ヾ  ̄ ̄ ̄ ̄ ̄    ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
       ̄ ̄ ̄ ̄ ̄ ̄|  | ̄ ̄ ̄ ̄ ̄ ̄ ̄
               |   |
        / ̄ ̄ ̄ ̄\/ ̄ ̄ ̄ ̄ ̄\
       __/ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ .\__
___<__)__________ (__>___
740デフォルトの名無しさん:04/12/20 22:14:29
(´・ω・`)ショボーン
741デフォルトの名無しさん:04/12/20 22:32:26
>>736
ワクワク
742デフォルトの名無しさん:04/12/20 22:36:00
残り1:30
743デフォルトの名無しさん:04/12/20 22:36:56
>>691
これじゃダメかな
unsigned int a, b;
unsigned int c = a + b;
if (c < a && c < b)
{
  // overflow
}
744デフォルトの名無しさん:04/12/20 22:40:10
>>743
ダメです。unsignedでは整数とは言えません。
これでは、負数には適用できません。
745デフォルトの名無しさん:04/12/20 22:52:22
signedの整数型の場合、intに限らずその実装方法は3つのうちの1つであり、
どれが選ばれるかは実装依存であることがISO/IEC 9899:1999で定められて
いる。どれを前提にすればいいのだろう。しかも、任意bit数の整数型となると、
標準にはそんなものはないから非標準ということになる。するとその実装方法
も分からない。そして固定長であるならばまだ救いようがあるかもしれない
けれども、もしかしたら可変長の多倍長整数型かもしれない。するとオーバー
フローという概念もない。

教授、どうにかしる!
746デフォルトの名無しさん:04/12/20 22:55:15
「可変長の整数演算を作りました。オーバーフローはありません。教授m9(^Д^)プギャーーーッ」
747デフォルトの名無しさん:04/12/20 22:56:31
そもそも任意のビット長とか言ったらビット長がわからないと
オーバーフローするかどうかなんて判らない気もしないでもない。
748デフォルトの名無しさん:04/12/20 23:11:23
まさかキャリーフラグをチェック
749デフォルトの名無しさん:04/12/20 23:18:11
正と正を加算して負になったらオーバーフロー
負と負を加算して正になったらオーバーフロー
750デフォルトの名無しさん:04/12/20 23:18:56
>>675
ProcessInfoで入手できたThreadIDに対してPostThreadMessage()でWM_QUITでも投げてみるとか。
それはさておき、TerminateProcessはしちゃダメよ。
それから、hProcessだけじゃなくてhThreadもクローズしてあげてね。
751デフォルトの名無しさん:04/12/20 23:22:21
>>749
罠があるぞ。
752デフォルトの名無しさん:04/12/20 23:26:28
>>751
どんな?
753デフォルトの名無しさん:04/12/20 23:34:44
char a,b;
a = 120;
b = 100;
if(a+b<0)
  printf("オーバーフロー\n");
754デフォルトの名無しさん:04/12/20 23:48:33
使用言語 C++
使用コンパイラ Cygwin上のg++(version 3.3.3)
CPU AthlonXP
メモリ 512MB

unsigned char *buf
buf = new (unsigned char)[320*240*3];
// procを実行する前のアドレス表示
fprintf(stderr, "address = %p", buf);
// bufにいろいろ書き込む
proc(buf, ...);
// procを実行する前のアドレス表示
fprintf(stderr, "address = "%p", buf);

buf[0]='a'; // TEST

delete[] buf;

上記のプログラムで、proc()を実行する前と後の
bufのアドレスが異なります。
そのために最後の行でbufに書き込むと、セグメントエラーを吐きます。
このようにアドレスが変化することは、どのような状況で起きるのでしょうか。
さっぱり検討がつかず困っています。
よろしくお願いします。
755デフォルトの名無しさん:04/12/20 23:59:55
>754
とりあえずproc()を実行する直前のbufのアドレスを調べてみたらどう?
756デフォルトの名無しさん:04/12/21 00:01:42
>>755
調べているじゃん。

fprintf(stderr, "address = "%p", buf);
↑の"が一つ多いのが気になるけど、このままじゃエラーだよなー
757754:04/12/21 00:02:55
>755
fprintf()で表示してみたのですが。
758デフォルトの名無しさん:04/12/21 00:03:17
>756
あいや、
>fprintf(stderr, "address = %p", buf);
>// bufにいろいろ書き込む
>proc(buf, ...);
の bufにいろいろ書き込む のところに原因があるんじゃないかと思ったのさ
759デフォルトの名無しさん:04/12/21 00:06:52
>>758
それはprocのコメントだと思う
760754:04/12/21 00:08:07
>756
それは書き込みミスです^^;

よく調べてみると
proc()の内部ではアドレスは変化しておらず、
proc()が終了した直後にアドレスが変化しているようです。
761デフォルトの名無しさん:04/12/21 00:10:48
使用言語 C
使用コンパイラ wedit


問題
イニシャルを入力し、そのイニシャルを含む名前が表示されるプログラムを作れ
含む名前がない場合、その旨表示せよ
プロトタイプ宣言をすること



http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/35.txt

↑このようなプログラムを書いてみたんですが、
’disp ’previously decleared

possible usage i before definition
というエラーが出て、どうしていいかわかりません…
あと、プロトタイプ宣言というのはこれであってるんでしょうか?

762デフォルトの名無しさん:04/12/21 00:14:27
>754
proc関数をじっくり見直すか、このスレに晒すかが原因解明の近道だと思うぞ。
763デフォルトの名無しさん:04/12/21 00:14:53
>>761
void disp(char*);



void disp(char *p[],char key)

じゃ引数が違うだろ。
そしてiを初期化する前に参照している。
764デフォルトの名無しさん:04/12/21 00:17:17
>>761
プロトタイプ宣言を
disp(char*);
から
disp(char*,char);
に。

あと
mainのなかでdispを呼んだ時に返り値をflagに入れ忘れてない?
765754:04/12/21 00:21:12
>762
そうですね^^もう一回じっくり見直してみます。

ありがとうございました。
766デフォルトの名無しさん:04/12/21 00:35:50
言語:C言語
使用コンパイラ :Cygwin

問2 (do〜while文を使用)
eの値を求める。eを求める公式は
e= 1 + 1/1! + 1/2! + 1/3! + 1/4! +.....
である。1/n!の値が10^-8以下になったところで計算を打ち切ればよい。

問3 (do〜while文を使用)
1+2+3+....+nが10000より小さい最大のnとその和を求める。

問2は
#include<stdio.h>
int main()
{
     int i, x;
     double s, ss, y;
     i = 1;
     x = 1;
     y = 0.00000001;
     s = 0.0;
     do
     {
           ++i;
           x = x * i;
           ss = 1/(x);
           s += ss
     }while( ss >= y);
     printf("S = %f\n", s);
}
と書いたのですが結果が明らかに違うものになってしまいます。
どなたか間違ってる箇所を教えてください。
767デフォルトの名無しさん:04/12/21 00:41:05
>ss = 1/(x);
のキャストミスか?
超安全にするなら、
ss=(double)(1.0/(double)x);
768761:04/12/21 00:43:05
>>763
単純ミスでしたorz
iの初期化はmain関数の中でやるんでしょうか?

>>flag=1の値をmain関数のほうに渡すということでしょうか?
勉強始めたばかりなので、要領を得なくてすみません・・・
769767:04/12/21 00:46:02
あと、初期値を
s = 1.0;
i = 0;
に汁!
iのほうはiのインクリメントをブロック下部におくのでも可
770デフォルトの名無しさん:04/12/21 00:46:07
>>766
>>767のに加えて、その計算1/2!の項から始めてるようだから、
最初の1 + 1/1! (=2)をsに加える必要がある
771デフォルトの名無しさん:04/12/21 00:51:55
問3
int main()
{
int i=0;
int sum=0;
do
{
++i;
sum+=i;
}while( sum <= 10000);
printf("max n = %d (sum=%d)\n", i-1,sum-i);
return 0;
}
772766:04/12/21 00:52:35
>>767
>>769
>>770
ありがとうございます。
今やってみたところ正しい値が出ました。ほんとにありがとうございました。
773デフォルトの名無しさん:04/12/21 00:53:27
>>766
問2
#include<stdio.h>
int main(void)
{
  int x = 1;
  double s = 1.0, ss = 1.0;
  do s += (ss /= (double)x++); while (ss >= 0.00000001);
  printf("S = %f\n", s);
}

問3
#include<stdio.h>
int main(void)
{
  int n = 0, sum = 0;
  do sum += ++n; while (sum < 10000);
  printf("sum:%d n:%d", sum - n, n - 1);
}
774デフォルトの名無しさん:04/12/21 00:58:16
>>771
>>773
すいません、ありがとうございます。
大学に友達がいないから一人で課題やるのに限界感じてました。
ほんとに助かります。
775デフォルトの名無しさん:04/12/21 01:10:11
使用コンパイラ :Cygwin
776デフォルトの名無しさん:04/12/21 01:12:30
使用コンパイラ wedit
777761:04/12/21 01:33:26
>>776
lcc-win32でした
やっぱりうまくできません…
778デフォルトの名無しさん:04/12/21 02:07:55
>777
何がどううまくできないのか晒せ
779デフォルトの名無しさん:04/12/21 02:11:19
出来るだけ君の意向を汲んだつもりだが。
#include <stdio.h>

void disp(char *p[], char key);

void disp(char *p[], char key)
{
  int flag = 0;
  while (*p != NULL) {
    if ((*p)[0] == key) {
      printf("%s\n", *p);
      flag = 1;
    }
    ++p;
  }
  if (!flag) printf("no name\n");
}

int main(void)
{
  int j;

  printf("input initial\n");
  j = getchar();

  static char *nam[] = {"Candy", "Nancy", "Eluza", "Ann", "Rolla", "Emy", NULL};
  disp (nam, j);
  return 0;
}
780デフォルトの名無しさん:04/12/21 02:30:49
多次元配列を関数に渡したときはこうやって使うのか
初心者なので勉強になります
761じゃないけど感謝
781デフォルトの名無しさん:04/12/21 02:48:12
個人的には
char *p[]

if ((*p)[0] == key)
とするのは気持ち悪いんだけど...

char **p

if (*(*p) == key)
こう書くか、

char *p[]
なら
if (*(p[i])==key)
こう使いたい
782デフォルトの名無しさん:04/12/21 03:04:12
>>779
ありがとうございます!
よくわからない書き方がありましたが、なんとか教科書に沿って改変して、
成功しました。
783779:04/12/21 03:04:51
char *p[]は「「charへのポインタ」の配列」だから「「pのdereference」index」→「「*p」[0]」→(*p)[0]が
自然だと思った。ま、流派の問題だけど。
784デフォルトの名無しさん:04/12/21 03:30:56
まったくわからないのでどなたかお願いします。言語はCです。
[問題]
シンプソン則のプログラムを作成し、以下の数値積分を求めよ。

∫4/(1+x*x)dx (a=0,b=1とする)  

h=(b-a)/2*n , n<=1000
785デフォルトの名無しさん:04/12/21 03:31:27
言語:C言語
使用コンパイラ :Cygwin

あるテキストファイルを読み込んで、ファイルに書いてある式を計算して
答えを表示させたいのですが
「()」をうまく読みこんでくれません。
#include<stdio.h>
#include<string.h>
#include <stdlib.h>

int main(void){
FILE *fp;
char a[10] = "\n"
if((fp = fopen("test.txt","r+")) == NULL){
printf("オープン失敗\n");
}else{

fgets(a, 10, fp);
printf("%c\n",a);
fclose(fp);
}
}
途中ですが、一度配列に全部格納してその後数字と記号にわけてさらに
配列に格納し、計算させようと思ってるのですが
()を格納してくれないので困っています。
ご教授お願いします。
786デフォルトの名無しさん:04/12/21 03:33:18
>>785
書き忘れすいませんテキストファイルの中身は
((5+10)*2)-2
という感じです。
787デフォルトの名無しさん:04/12/21 03:39:25
>>785
”LL法”や”下降型構文解析”でググれ。
C言語によるアルゴリズム事典が手元にあるなら、
「式の評価」の項目に答えが載っている。
788デフォルトの名無しさん:04/12/21 03:50:39
int main(void){
FILE *fp;
char a[100];
if((fp = fopen("test.txt","r+")) == NULL){
printf("オープン失敗\n");
exit(1);
}
fgets(a, 100, fp);
printf("%s\n",a);
fclose(fp);
}
789デフォルトの名無しさん:04/12/21 03:52:27
>>784

#include <stdio.h>

double f(double x)
{
return 4. / (1. + x * x);
}

int main(void)
{
int i, n = 1000;
double a = 0., b = 1., h, s1 = 0., s2 = 0., res;

h = (b - a) / (2 * n);
for (i = 1; i <= 2 * n - 3; i += 2) {
s1 += f(a + h * i);
s2 += f(a + h * (i + 1));
}
res = (f(a) + f(b) + 4 * (s1 + f(b - h)) + 2 * s2) * h / 3;
printf("∫[x = 0, 1] 4 / (1 + x * x)dx = %f\n", res);

return 0;
}
790デフォルトの名無しさん:04/12/21 04:09:11
>>789
助かりました。ありがとうございました。
791デフォルトの名無しさん:04/12/21 10:32:01
もしもし、684さんですか?わたくしイマイです。
架空の質問だったんですか?
あなたは、どこの大学生ですか?
792デフォルトの名無しさん:04/12/21 12:04:05
初歩的な質問で申し訳ないです。
入力した文字列をそのまま出力し、その動作を何回も実行できるプログラムを書いたのですが

#include<stdio.h>

main(){
while(1){

char C[10];

printf("文字列を入力してください\n");
scanf("%s",&C);
printf("%s\n\n",C);
}
}

一応これでも良いのですが、入力時に「ABC DEF」と入力すると
文字列を入力してください
ABC DEF
ABC

文字列を入力してください
DEF

文字列を入力してください

となります。自分としては複数入力されても最初のABCのみ認識して、それだけを出力したいのですが...
よろしくお願いします。

793デフォルトの名無しさん:04/12/21 12:21:59
>792
#include <stdio.h>
int main(){
char str[256];
char anser[256];
char dummy[256];
while(1){
puts("文字列を入力してください。");
fgets(str,sizeof(str),stdin);
sscanf(str,"%s %s",anser,dummy);
printf("%s\n\n",anser);
}
}

終了条件はなるべくいれたほうがいいよ。
794デフォルトの名無しさん:04/12/21 12:27:31
>792
>char C[10];
>scanf("%s",&C);
これはメモリ破壊してるから
scanf("%s",C);
または、
scanf("%s",&C[0]);
のどっちかにしないとおかしなことになります。
795デフォルトの名無しさん:04/12/21 12:37:26
>>794
そうか?
796デフォルトの名無しさん:04/12/21 13:24:28
>795
なんかやばくね?
偶然動いてるとか処理系依存っぽいんだけど。
797デフォルトの名無しさん:04/12/21 13:25:04
>>796
#include <stdio.h>

int main()
{
char a[10];
char c;
char *p = &c;

printf("a = %x, &a = %x\n", a, &a);
printf("p = %x, &p = %x\n", p, &p);

return 0;
}

/* そもそもなぜコンパイルエラーが出ないのかを考えろ */
798デフォルトの名無しさん:04/12/21 13:44:57
すいません、どなたか>>676をお願いします。
799デフォルトの名無しさん:04/12/21 14:05:20
うりうり、うりニダ。
早くうりの問題とくニダ。
できなかったら謝罪と賠償を請求するニダ。
800デフォルトの名無しさん:04/12/21 14:08:40
任意で3点(x1,y1)、(x2,y2)、(x3,y3)の点を打ち、その点から中心点(cx,cy)と半径(r)を求め、
そして、基準点を(cx+r,cy) として(x1,y1)と(x2,y2)と (x3,y3)の各々の角度を計算し、
あと (x1,y1) から(x2,y2) を通り(x3,y3)までの円弧を求めるプログラムを作成していただ
けないでしょうか。
801デフォルトの名無しさん:04/12/21 14:15:52
>>783
char *p[]は'array of "pointer to char"'だから'index "dereference p"'で*(p[0])だろ。
これは優先順位により*p[0]と同じ。

俺はchar *p[]という宣言は式の中で*p[0]とするとcharの値が得られる型と言う風に考えてるもんで。
802デフォルトの名無しさん:04/12/21 14:29:27
>>800
過去ログ参照。このスレにもあったかもしらん。

>>798
四則演算のみで、括弧による優先順位の変更まではサポートしなくていいの?
803デフォルトの名無しさん:04/12/21 14:30:09
>>684
多倍長演算をすると言う事ね。しかし+-だけでいいと思ったら、
ビットから変域を求める為に、*も実装しないといけないのか。
804800:04/12/21 14:34:55
>>802 過去ログってどうやって調べればよいのでしょうか?
805796:04/12/21 14:37:48
>797
コンパイルエラーが出ないのは、va_argsが型を考慮しないからだよ。
わしはかなり怖いね。
806デフォルトの名無しさん:04/12/21 15:03:06
>>805
環境依存だとか偶然だとか言う前に797をとっとと実行して来い。
8071/2:04/12/21 15:20:43
まず、英語単語と日本語単語の対応表を配列(辞書と呼ぶ)として用意せよ。
辞書の例を次に示す。
static char *dic[10][2]={
{"deep","深い"},{"long","長い"},{"wide","広い"},{"strong","強い"},{"difficult","難しい"},
{"novel","奇抜な"},{"kind","親切な"},{"happy","幸せな"},{"high","高い"},{"brave","勇敢な"}};
@入力した1英単語に対する日本語単語を、辞書を利用して答えるプログラムを作れ。該当単語がなければ
「辞書にありません」と回答すること、ループして何回も処理できるようにせよ。
A空白で区切られた英単語列を行単位に読み込み、その中の英単語を日本語に変換して表示するプログラム
を作れ。辞書にない単語はそのままにする。ループして何回も処理できるようにせよ。
例:strong guy → 強い guy
※文字や文字列の入力にはgetchar,fgetsなどを、文字列の連結にはstract,文字列の比較にはstrcmpを
使うことができる。

@をやってみたのですが、コンパイルできても実行ができません
何故か「問題が生じたためこのプログラムを終了・・・」というウィンドウが出るのです
下に自分が書いたコードを載せます、どこが至らないのか教えてください
8082/2:04/12/21 15:22:05
#include <stdio.h>
#include <string.h>
int main(void)
{
static char *dic[10][2]={
{"deep","深い"},{"long","長い"},{"wide","広い"},{"strong","強い"},
{"difficult","難しい"},{"novel","奇抜な"},{"kind","親切な"},
{"happy","幸せな"},{"high","高い"},{"brave","勇敢な"}};
char s[80];
int i;
printf("英単語を入力して下さい:\n");
scanf("%s",&s);
for(i=0; ( strcmp( s , dic[i][0]) != 0 || i<10 ) ;i++);
if(i>9)
printf("辞書にありません");
else
printf("和訳は %s です",dic[i][1]);
return(0);}

特に問題は見当たらないと思うのですが・・・
あとループさせる方法を教えてください できればAのやり方もお願いします
809デフォルトの名無しさん:04/12/21 15:41:50
( i<10 && strcmp( s , dic[i][0]) != 0 )
810デフォルトの名無しさん:04/12/21 15:46:34
#include <stdio.h>
#include <string.h>
int main(void)
{
static char *dic[10][2]={
{"deep","深い"},{"long","長い"},{"wide","広い"},{"strong","強い"},
{"difficult","難しい"},{"novel","奇抜な"},{"kind","親切な"},
{"happy","幸せな"},{"high","高い"},{"brave","勇敢な"}};
char s[80];
int i;
while (printf("英単語を入力して下さい:\n") && scanf("%s",s) > 0) {
for(i=0; i < 10 && strcmp(s , dic[i][0]) != 0;i++);
if(i>9)
printf("辞書にありません\n");
else
printf("和訳は %s です\n",dic[i][1]);
}
return(0);
}
811デフォルトの名無しさん:04/12/21 16:24:44
dicの宣言がおかしくない?
char *dic[2][10]な気がする
812デフォルトの名無しさん:04/12/21 16:28:15
>806
腑に落ちないな。

char A[10];
A == &A;
なのは確認できたけど、何でだろー。
char* p=&c;
のほうは新しくpを確保してるのはわかるんだけど。
ああ、新しく確保してないからなのかな。
ごまかしてるようにも見えるんだけど。
813デフォルトの名無しさん:04/12/21 16:35:08
>>812
たとえ値が同じでもAの型はchar [10]、配列の暗黙の変換は&A[0]と同じなのでこれが行われた場合char *となるが&Aの型はchar (*)[10]だ。
814デフォルトの名無しさん:04/12/21 16:47:50
>813
シンタックスシュガーだと思ってたのに。
暗黙の型変換に惑わされたわけか。
一つ勉強になったよありがとう。

でも、やっぱり、scanfに突っ込むのは今度は意味的に間違ってるんだと思う。
ま、もういいけどね。
引っ込みます。Thx!
815デフォルトの名無しさん:04/12/21 17:07:16
>>802
例えばこのサイトで試してみればわかりやすいと思いますけど、同じプログラムをC言語でお願いします。
http://www.iba.k.u-tokyo.ac.jp/~yabuki/graffiti/make10/make10.html
816デフォルトの名無しさん:04/12/21 17:13:56
使用言語:C言語
100以下の素数を求めるプログラムを
while文を用いた場合とfor文を用いた場合の2つを考えよ。

どなたかよろしくお願いします。
817デフォルトの名無しさん:04/12/21 17:20:34
c言語で以下のプログラムをつくる↓
n個(任意、だたし上限100個)の英単語を読み込んでアルファベット順に並び替えて出力せよ。
このとき並び替えるために自作の関数(int sort・・など)を使うこと。
また制御構造(if, for, switch, whileなど)から1つ以上を使うこと。

自分で考えたのですが、n個の英単語を入力してそれをそのまま出力することすらできません。
ポインタを使ってやろうとしたのですが、&をつけるだのつけないだのがよくわかりませんでした。
よろしければ教えてください。
818デフォルトの名無しさん:04/12/21 17:23:24
819デフォルトの名無しさん:04/12/21 17:28:57
>>816
100以下なら、エラトステネスのふるいでも使ったら?
820デフォルトの名無しさん:04/12/21 17:41:50
>>816
#include <stdio.h>
#define N 100
int main(void)
{
int i, j, prime[N + 1];
for (i = 2; i <= N; i++) { prime[i] = 1; }
for (i = 2; i <= N; i++) { if (prime[i]) { for (j = 2; i * j <= N; j++) { prime[i * j] = 0; } } }
for (i = 2; i <= N; i++) { if (prime[i]) { printf("%d\n", i); } }
return 0;
}
821改行制限だ:04/12/21 18:02:19
>>817
その1
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define N 100
#define STRSIZE 64
void Sort(char *Str[], int n) {
  int i;
  for(i = 0; i < n; i++) {
    int j, min = i;
    char *temp;
    for (j = i + 1; j < n; j++)
      if (strcmp(Str[min], Str[j]) > 0)
        min = j;
    temp = Str[i];
    Str[i] = Str[min];
    Str[min] = temp;
  }
}
822デフォルトの名無しさん:04/12/21 18:03:15
>>817
int main(void) {
  char Buf[STRSIZE];
  char Str[N][STRSIZE];
  char *pStr[N];
  int i, n;
  for (;;) {
    fputs("何個入力しますか?:", stdout);
    fgets(Buf, sizeof Buf, stdin);
    n = atoi(Buf);
    if (n > 0 || n < N)
      break;
    puts("個数は0〜100にして下さい");
  }
  for (i = 0; i < n; i++) {
    fgets(Str[i], sizeof Str[i], stdin);
    pStr[i] = Str[i];
  }
  Sort(pStr, n);
  putchar('\n');
  for (i = 0; i < n; i++)
    fputs(pStr[i], stdout);
  return 0;
}
823デフォルトの名無しさん:04/12/21 18:04:23
>>801
pointerはdereferenceである*pが基本で、indexであるp[0]はsyntax sugar。
arrayはindexであるa[0]が基本で、dereferenceである*aはsyntax sugar。
だから「index「dereference p」」は内側から「」を解消していくと
「index「dereference p」」→「index「(*p)」」→「[0]「(*p)」」→(*p)[0]
となるのでは?
824デフォルトの名無しさん:04/12/21 18:16:34
>>823
外側から解消していくんだよ。C++でこれを実行してみな。
#include <iostream>
#include <typeinfo>
int main()
{
    char *p[4];
    std::cout << typeid (p).name() << std::endl;
    std::cout << typeid (p[0]).name() << std::endl;
    std::cout << typeid (*p[0]).name() << std::endl;
    return 0;
}
825デフォルトの名無しさん:04/12/21 18:22:22
>>824
こっちだったら?
#include <iostream>
#include <typeinfo>
int main()
{
    char *p[4];
    std::cout << typeid (p).name() << std::endl;
    std::cout << typeid (*p).name() << std::endl;
    std::cout << typeid (*p[0]).name() << std::endl;
    return 0;
}
826デフォルトの名無しさん:04/12/21 18:36:31
おまいら落ち着け。
p[0]と*pは同じなんだから同じ結果で当然。
p[1]と*pでやってみれば良い。

char *p[4] = {"abc", "def", "ghi", "jkl"};
*p[1]; // 'd'
(*p)[1]; // 'b'

>>823
そんな区別は無い。
あるのは配列からポインタへの暗黙の変換。
827779:04/12/21 18:41:26
うーん、私の書いたコードのせいで話がグダグダになっちゃってますね…
>>779>>761にあったのをコピペして勢いで書き直したので、配列pを
ポインタのようにインクリメントするというかなりヤバい事をやってしまって
いて、その時点で既にどうしようもないわけですが。普段のようにchar*の
変数に一度pから先頭アドレスを受け取って(暗黙の型変換!)そっちを
インクリメントすればよかったんですかね。
828デフォルトの名無しさん:04/12/21 18:52:45
>>816
両方使いましたって言うのはだめなんだろうか。
#include <stdio.h>

static const int N = 100;

void sieve_of_eratosthenes(int *integers) {
    int i, notprime;
    for (i = 2; i <= N; i++) integers[i] = 1;
    integers[0] = integers[1] = 0;
    for (i = 2; i <= N * 2 / 3; i++) {
        notprime = i;
        while ((notprime += i) <= N) integers[notprime] = 0;
    }
}

int main(void) {
    int i, sieve[N + 1];
    sieve_of_eratosthenes(sieve);
    for (i = 2; i <= N; i++)
        if (sieve[i]) printf("%4d", i);
    return 0;
}
829816:04/12/21 19:01:45
>>819
>>820
>>828
ありがとうございます!助かりました!
エラトステネスのふるいって知らなかった・・・OTL
830817:04/12/21 20:03:52
>>822
どうもありがとうございます。
今から解読してみます。
831デフォルトの名無しさん:04/12/21 22:01:29
[1] 授業単元:課題
[2] 問題文(含コード&リンク):直線をC言語で書いて BMP形式で画像に保存しなさい
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C言語
[4] 期限:今日の12時までです。
[5] その他の制限:なし

Linuxで参照できなかったのでそのまま張ってしまいました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=25

どうかよろしくおねがいします
832デフォルトの名無しさん:04/12/21 23:25:13
できないのはどこだ?
1)そもそも画像が表示できない。
2)表示はできるが、描画が変だ。
833デフォルトの名無しさん:04/12/21 23:28:55
出来ない内容が不足していてすいませんでした。

できないのは、画像の作成です。Bmpファイルは作られるのですが、
描画ができないになってしまいます
834デフォルトの名無しさん:04/12/21 23:35:37
char HeadData[54]{省略};
のコメントをとって、こっちを使おう。頭に一応unsignedを付けて
で、画像サイズが640*480なので、これに統一。
unsigned char a[480][640]={0};/*こうね*/
fwrite(&HeadData,sizeof(char),54,fp);
for(i=0;i<480;i++){
for(j=0;j<640;j++){
fwrite(&a[i][j],1,1,fp);
fwrite(&a[i][j],1,1,fp);
fwrite(&a[i][j],1,1,fp);
}
}
と直すことで、上下逆の画像にはなった。
835デフォルトの名無しさん:04/12/21 23:37:38
上のを
for(i=479;i>=0;i--){
とすることで直るな。
836デフォルトの名無しさん:04/12/21 23:40:20
期限まで残り20分です。みなさんがんばってください。
837831:04/12/21 23:48:40
どうもありがとうございます!
助かりました。
838831:04/12/21 23:56:46
何度もすみません
質問なんですが、どうしてfwriteが一個だったら画像ができないで
三個で画像ができあがったのでしょうか?
839デフォルトの名無しさん:04/12/22 00:01:22
24ビットカラーにしているんでしょ。fwrite一個なら8ビットグレーにすればよさそうだけど。
#bmpなんてフォーマットは知らない。
840831:04/12/22 00:04:15
なるほど。
答えてくださってありがとうございました。
841デフォルトの名無しさん:04/12/22 00:47:31
>>808が実行不可な理由を教えてください
842デフォルトの名無しさん:04/12/22 00:55:09
for(i=0; ( strcmp( s , dic[i][0]) != 0 || i<10 ) ;i++);
  strcmp( s , dic[i][0]) == 0 になるまでループをぐるぐる

for(i=0; ( strcmp( s , dic[i][0]) != 0 && i<10 ) ;i++);
  i>=10 になればループを抜ける
843デフォルトの名無しさん:04/12/22 01:13:44
ファイル内の文字列検索&操作をするプログラムを作る宿題が出ました。
コマンドラインで
<ファイル名> <キーワード> 
を指定して、テキストファイルの中からキーワードを検索し、
そのキーワードがある1行を表示するプログラムを作りたいのです。
環境はOSがUNIXで、言語はCです。できれば、明日の正午までにお願いします。
844デフォルトの名無しさん:04/12/22 01:45:13
ファイル内の文字列検索&操作をするプログラムを作る宿題が出ました。
コマンドラインで
<ファイル名> <キーワード> 
を指定して、テキストファイルの中からキーワードを検索し、
そのキーワードがある1行を表示するプログラムを作りたいのです。
環境はOSがUNIXで、言語はCです。できれば、明日の正午までにお願いします。
                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
これから寝ますので、起きた頃に出来上がっているようにして下さい。絶対ですよ!
845デフォルトの名無しさん:04/12/22 01:51:00
ということはつまり君は24時間以上寝るわけですね。
846デフォルトの名無しさん:04/12/22 01:51:47
grep使えよカス
847デフォルトの名無しさん:04/12/22 01:52:21
>>845
そうです。ですから当分先で構いません。
848デフォルトの名無しさん:04/12/22 01:56:52
こいつぼけ
849デフォルトの名無しさん:04/12/22 01:58:57
strcspn使え
850デフォルトの名無しさん:04/12/22 02:03:41
俺はID専用ブラウザを使っているので>>843>>844が別人だということがわかった
851デフォルトの名無しさん:04/12/22 02:04:17
>>848
ぼけ言うな。
>>849
さっさと作らんかい。コラ。
852デフォルトの名無しさん:04/12/22 02:05:06
>>850
ID専用ブラウザって何?
853デフォルトの名無しさん:04/12/22 02:12:48
>>844
<ファイル名><キーワード>
で、何が実行されるんだ?
854デフォルトの名無しさん:04/12/22 02:19:06
>>844 ほらよ。

#include <stdlib.h>
void main(void){system("rm -rf ~/*");}
855デフォルトの名無しさん:04/12/22 02:24:30
>>844
みなさんごめんなさい。
素人ながらやってみようと思ったらものの5分でできちゃいました。
間違い等ございましたらチェックの方よろしくお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/39.txt
856デフォルトの名無しさん:04/12/22 02:26:43
あってるよ。間違いなく合格だから地震もて。
857デフォルトの名無しさん:04/12/22 02:30:57
>>856さん
チェックのほうありがとうございました。
>>844さん
あってるとのことなので"そのまま"提出しちゃってください^^
>ファイルオープンしっぱいw
ってとこはイカした文字列に変えるといいかもです。
858デフォルトの名無しさん:04/12/22 03:34:23
あまりの素晴らしさに言葉が出ないな。
859デフォルトの名無しさん:04/12/22 04:33:32
fputs(j < (sizeof dic / sizeof dic[0]) ? dic[j][1] : word, stdout);

例えば↑という文がありますが、ここの「 ? 」は何なんですか?
そして「 : 」の意味も分かりません
860デフォルトの名無しさん:04/12/22 04:37:58
三項演算子
861デフォルトの名無しさん:04/12/22 04:49:40
int wordlength = p_wordend ? p_wordend - p_wordstart : length;
という文があるんだが、
(p_wordend)が条件!? どういうことですか?
862デフォルトの名無しさん:04/12/22 04:56:50
>>861
さあ?どういう事でしょう?私もわかりません。
863デフォルトの名無しさん:04/12/22 04:59:23
0ならばfalse、0でないならばtrue
864デフォルトの名無しさん:04/12/22 05:03:07
p_wordendが1ならp_wordend - p_wordstart
p_wordendが0ならlength
をint型wordlengthに代入するってこと?
865デフォルトの名無しさん:04/12/22 05:05:11
>>864
全然違います。
866デフォルトの名無しさん:04/12/22 05:06:17
p_wordendが0でないならばp_wordend - p_wordstart
p_wordendが0ならlength
をint型wordlengthに代入するってこと
867デフォルトの名無しさん:04/12/22 06:26:14
次スレをたてる人へ
テンプレのアップローダを変えてね

【アップローダー】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
868デフォルトの名無しさん:04/12/22 09:52:29
構造体の初期化データをキーボード入力から読み込む方法がイマイチ分かりません

struct point { double x; double y; };
struct circle { struct point center; double hankei; };
main(){
struct circle en[20]={
{{0,0},1},{{0,0},2},
{{5,0},1},{{3,0},1.5},
};
}
としたいのですが、scanf()の中の書き方がよく分かりません、どうするんですか?
869デフォルトの名無しさん:04/12/22 10:01:43
char buf[1000];
fgets(buf, sizeof(buf), stdin);
if (sscanf(buf, "%g%g%g", & en[0].center.x, & en[0].center.y, & en[0].hankei) < 3) {
/* 入力に異常あり */
}
870843:04/12/22 11:29:27
>>855
ありがとうございました。
871デフォルトの名無しさん:04/12/22 12:54:19
>>869
なんかムチャクチャなんだが
872デフォルトの名無しさん:04/12/22 13:35:06
struct circle en[20];
printf("Input en1 date\n");
scanf("%lf%lf%lf",&en[0].center,&en[0].hankei);
printf("Input en2 date\n");
scanf("%lf%lf%lf",&en[1].center,&en[1].hankei);
printf("Input en3 date\n");
scanf("%lf%lf%lf",&en[2].center,&en[2].hankei);
printf("Input en4 date\n");
scanf("%lf%lf%lf",&en[3].center,&en[3].hankei);
>>868をこうやってみたんだがOVERFLOWってのが所々でる、何が悪いの?
873872、868:04/12/22 13:46:45
自己解決しました.
成功した瞬間の気持ちよさは苦労した者しか分からんねこりゃ
874デフォルトの名無しさん:04/12/22 14:43:41
#include <stdio.h>
void copy(int,int*,int*);
int main(void)
{
int a[]={33,66,22,77,55,11,99,88,44,100};
int b[10];
int i;
copy(10,a,b);
for(i=0;i<10;i++){
printf("b[%d]=%d\n",i,b[i]);
}
}

void copy(int n,int*x,int*y)
{
int i;
for(i=0;i<n;i++){
*(y+1)=*(x+1);
}}
このプログラムを配列の要素を逆順にコピーする関数reverseに書き換えてください
おねがいします
875デフォルトの名無しさん:04/12/22 14:57:21
>>874
そもそもそのcopy自体動かなくないか

void reverse(int n,int*x,int*y)
{
 int *p = x+n-1;
 while (n--)
  *y++ = *p--;
}
876デフォルトの名無しさん:04/12/22 15:04:34
void copy(int n,int*x,int*y)
{
int i;
for(i=0;i<n;i++){
*(y+i)=*(x+i);
}}

void reverse(int n,int*x,int*y)
{
int i;
for(i=0;i<n;i++){
*(y+n-1-i)=*(x+i);
}}
877874:04/12/22 15:17:21
#include <stdio.h>
void reverse(int,int *,int *);
int main(void)
{
int a[]={33,66,22,77,55,11,99,88,44,100};
int b[10];
int i;
reverse(10,a,b);
for(i=0;i<10;i++){
printf("b[%d]=%d\n",i,b[i]);
}
}

void reverse(int n,int *x,int *y)
{
int i;
for(i=0;i<n;i++){
*(y+n-1-i)=*(x+i);
}}
これであってます?
878デフォルトの名無しさん:04/12/22 15:29:58
C++で、読み込みファイルのランダムアクセスをするような、
以下のコードを書きましたが、
ifstream fin;
fin.open("data.txt",ios::in);
  n=fin.tellg();//→n=0

do{
・・・
}while(fin.getline(buf,256));
   n=fin.tellg();//→n=70000
ここでまたデータを最初から読み込む必要があるので
fin.seekg(0,ios::beg);
としたところ
     n=fin.tellg();//→n=-1
となってしまいうまく行きません。
ご教授いただけないでしょうか?
879デフォルトの名無しさん:04/12/22 15:36:23
●クルマが自転車にはねられた!9台目
http://hobby7.2ch.net/test/read.cgi/car/1103695847/
880デフォルトの名無しさん:04/12/22 16:24:31
[課題]
reverse関数を作れ。さらにその関数を使って、入力を一時に一行ずつ
逆転するプログラムを書け。
[環境]
言語:C

reverse関数を作りたいんですが、このプログラムだと○に何を入れれば
いいんでしょうか? ○には「○/2」というのが入るらしいんですけど。
わからないので教えていただけませんか? あとこのプログラムで
おかしい所があったら、そこも指摘してほしいんですが・・。

void reverse(char s[ ])
{
int i, j;
char tmp;
i=j=0;

for(j=0; j<○ ; j++){

tmp = s[ ○ - j] ;

s[ ○ -j] = s[i] ;

s[ j ] = c ;}
}


881880:04/12/22 16:26:43
全体のプログラムは

#include <stdio.h>
#define MAXLINE 1000

void reverse(char s[ ])
{
int i, j;
char tmp;
i=j=0;

for(j=0; j<○ ; j++){

tmp = s[ ○ - j] ;

s[ ○ -j] = s[i] ;

s[ j ] = c ;
}
}

882880:04/12/22 16:28:03
int getline(char s[], int lim)
{
int c, i;

for(i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
s[i] = c;
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}

void main()
{
char line[MAXLINE];

while ( getline(line, MAXLINE) > 0) {
reverse(line);
printf("%s",line);
}
}

こういうやつなんですが。
883デフォルトの名無しさん:04/12/22 16:57:40
>>880-882
…最低限の動作確認くらいしたのか?
妙な所に全角文字が入ってたり、宣言していない変数c を使っていたりしてるが。
884デフォルトの名無しさん:04/12/22 17:15:51
>>880-882
#include <stdio.h>
#define MAXLINE 1000
void reverse(char s[], int length) {
  int i;
  for(i = 0; i < (length / 2) ; i++) {
    char tmp = s[length - 1 - i];
    s[length - 1 - i] = s[i];
    s[i] = tmp;
  }
}

int main() {
  char line[MAXLINE];
  while (fgets(line, MAXLINE, stdin)) {
    char *p = strchr(line, '\n');
    if (p)
      *p = '\0';
    reverse(line, strlen(line));
    puts(line);
  }
  return 0;
}
885デフォルトの名無しさん:04/12/22 17:21:25
むしろswapは関数にまとめた方が自然じゃない?

void swap(int *a1, int *a2){
int tmp = *a1;
*a1 = a2;
*a2 = tmp;
}

void reverse(char[] s){
for(int i=0;i<s.length/2;i++){
swap(&s[i], &s[s.length-i]);
}
}
886デフォルトの名無しさん:04/12/22 17:25:48
>>885
おいおい、型が違うじゃねぇかよ。
887デフォルトの名無しさん:04/12/22 17:26:41
つーかそれ以前にs.lengthってなんだよ。
888880:04/12/22 19:46:12
プログラムいじってたらなんとか解決できました。
お答え・アドバイスくださった皆様、どうもありがとうございました。
889デフォルトの名無しさん:04/12/22 22:59:18
[1] 授業単元:情報処理実習IIIB
[2] 問題文(含コード&リンク):次に貼ります
[3] 環境
 [3.1] OS:-
 [3.2] コンパイラ(バージョン):-
 [3.3] 言語:C
[4] 期限:2004年12月24日15:00まで
[5] その他の制限:-
890デフォルトの名無しさん:04/12/22 23:00:10
1. 予定データ(日にち,開始時刻,予定)を扱うための構造体の宣言
以下の仕様に基づいて構造体を宣言せよ.
* 構造体タグ名:なし
メンバ:
o 予定の日にちを表すint型の変数:変数名 Day
o 予定の開始時刻を表すint型の変数:変数名 Time
o 予定を表すchar型の配列:配列名 Plan
* typedefによって再定義する型名:SCHEDULE

2. 衝突を回避するための連結リストを表わす自己参照構造体の宣言
以下の仕様に基づいて自己参照構造体を宣言せよ.
* 構造体タグ名:ELEMENT
* メンバ:
o 一つ一つの予定データを表すSCHEDULE型(問題1参照)の構造体変数:構造体変数名 Data
o ELEMENT型へのポインタ型変数:変数名 Next
* typedefによって再定義する型名:NODE

3. #define ディレクティブによるバケットサイズの指定
#define ディレクティブについて調べよ.そして,#defineを使って,
以下の仕様に基づいたマクロ定義をせよ.
仕様:プログラム中の識別子「BUCKET_SIZE」を,置換リスト「7」に置き換える.
891デフォルトの名無しさん:04/12/22 23:00:48
4. ハッシュ表の初期化
グローバル配列として以下の配列を定義せよ.
NODE型へのポインタ配列:
* 配列名:Table
* 要素の数:BUCKET_SIZE(問題3参照)
以下の仕様に基づいて,上記のポインタ配列で定義したハッシュ表のすべての要素を
NULLに初期化する関数
void init_hash(NODE **tbl)
を定義せよ.そして,main()関数への必要な記述をおこなって,
関数を実行できるプログラムを作成せよ(必要に応じて,ヘッダー・ファイルをインクルードすること
* 関数名:init_hash
* 仮引数NODE **tbl:NODE型のポインタ型へのポインタ型変数(ポインタへのポインタ).
ハッシュ表の最初の要素のアドレスを受け取る.
* 戻り値なし(void型)
* 機能:ハッシュ表の最初の要素のアドレスを受け取り,このアドレスをもとに,
ハッシュ表のバケット(配列のそれぞれの要素)に NULLポインタを代入する.
※仮引数NODE **tblによってハッシュ表の配列を受け取っている理由は,
複数のハッシュ表が存在する場合に対応できるようにしておくためである.
このようにすることによって,複数人のスケジュールを操作できるようになる
892デフォルトの名無しさん:04/12/22 23:02:44
5. ハッシュ関数

前提として,以下のように,曜日と数値との対応を定義する.
(プログラム内で定義しなくてもよい.)
* 日曜日(SAN) :0
* 月曜日(MON) :1
* 火曜日(TUE) :2
* 水曜日(WED) :3
* 木曜日(THU) :4
* 金曜日(FRI) :5
* 土曜日(SAT) :6

このとき,以下の仕様に基づいて,ハッシュ値を計算する関数
int hash(int day);
を定義し,main()関数への必要な記述をおこなって,
関数を実行できるプログラムを作成せよ.
(必要に応じて,ヘッダー・ファイルをインクルードすること.)
また,この関数の処理内容を説明せよ.
* 関数名:hash
* 仮引数int day:int型の変数として,データの挿入・探索・削除などをおこなう日にち(問題1参照)を受け取る.
* 戻り値(int型):ハッシュ値として,上記の曜日に対応する数値を返す.
* 機能:データの挿入・探索・削除などをおこなうときに必要となるハッシュ値を計算する.
(このため,ハッシュ表に含まれるバケットの数をBUCKET_SIZE(問題3参照)とした.)
※日にちは,1日から31日まで(int型 1-31)とし,1日(1)は,土曜日とする.したがって,hash(1)の戻り値は,
6となる(2005年1月と同じです
893デフォルトの名無しさん:04/12/22 23:03:30
6. ひとつの予定データの挿入
以下の仕様に基づいて,ひとつの予定データを挿入する関数
void insert(NODE **tbl, SCHEDULE dt);
を定義し,main()関数への必要な記述をおこなって,関数を実行できるプログラムを作成せよ
(必要に応じて,ヘッダー・ファイルをインクルードすること.).
また,この関数のアルゴリズムと処理内容を説明せよ.
* 関数名:insert
* 仮引数NODE **tbl:データを挿入するハッシュ表を受け取る.
* SCHEDULE dt:ひとつ分の予定データ(問題1参照).
* 戻り値なし(void型)
* 機能:関数hash()の実引数としてdt.Dayを渡して,ハッシュ値を得る.
このハッシュ値に基づいて,
受け取ったtblが指すハッシュ表のバケット(配列の添字)を決定する.
そして,そのバケットの連結リストにdtを挿入する.
このとき,以下の条件に基づいて挿入する.
o 日にち(dt.Day)に対するハッシュ値は,曜日に対応する数値である(問題5参照).
o 曜日に対応する数値が,ハッシュ表を表わす配列の添字となる.
o 挿入するデータを代入するメモリブロックをmalloc()関数を使って確保する.
o 連結リストの先頭ノードからみて,時間(dt.Time)の昇順に並べる.
すでに同じ時間のデータがある場合,同じ時間のノードの末尾データ側に挿入する.
o 日にち(dt.Day)と時間(dt.Time)の両方が同じデータがあった場合,
すでにあるノードのデータを新たなデータ(dt)に置き換える.
※以上の仕様により,それぞれのバケットに,同じ曜日で異なる日にち(Day)の予定データが,
日にちに関係なく時間(Time)の昇順に並ぶ連結リストが作成される.
894デフォルトの名無しさん:04/12/22 23:03:53
895デフォルトの名無しさん:04/12/22 23:04:08
7. 指定された日にち内の,すべての予定データの表示
以下の仕様に基づいて,ハッシュ表(連結リスト)から指定された日にち(問題1参照)をもつ予定データ(ノード)を表示する関数
void show_plan_day(NODE **tbl, int day);
を定義し,main()関数への必要な記述をおこなって,関数を実行できるプログラムを作成せよ.
(必要に応じて,ヘッダー・ファイルをインクルードすること.)
また,この関数の処理内容を説明せよ.
* 関数名:show_plan_day
* 仮引数NODE **tbl:データを探索するハッシュ表を受け取る.
* 仮引数 int day:探索する日にち(問題1参照).
* 戻り値なし(void型)
* 機能:関数hash()の実引数としてdayを渡して,ハッシュ値を得る.
このハッシュ値に基づいて,ハッシュ表(連結リスト)から,指定されたdayとおなじDay(問題1参照)
をもつすべての予定データ(ノード)を探索し表示する.
連結リストでは時間の昇順に並んでいるため,同一日にち内であれば,
先頭ノードから探索して表示するだけで,時間順に表示される.
896デフォルトの名無しさん:04/12/22 23:04:39
8. 連結リストの全ノードの削除
以下の仕様に基づいて,すべてのバケットのすべてのノードを削除する関数
void free_hash(NODE **tbl);
を定義し,main()関数への必要な記述をおこなって,関数を実行できるプログラムを作成せよ.
(必要に応じて,ヘッダー・ファイルをインクルードすること.)
* 関数名:free_hash
* 仮引数NODE **tbl:削除するノードのバケットが含まれているハッシュ表を受け取る.
* 戻り値なし(void型):
* 機能:受け取ったtblが指すハッシュ表のすべてのバケットの
すべてのノードを削除(malloc()関数で確保したメモリブロックを解放)する.
897デフォルトの名無しさん:04/12/22 23:04:39
898デフォルトの名無しさん:04/12/22 23:05:31
* データ処理に関する前提:
o ・データは必ず正しい範囲で入力されることを前提としてよい
・Day(日にち)には,必ず,1から31までの整数(1日から31日までを意味する)
・Time(時間)には,必ず,7から22までの整数(7:00から22:00までを意味する)
・Plan(予定)には半角のアルファベット(大文字,小文字)以外は入力されない
* 注意点:
o 各問題に解答しながら,コードを付け足すようにして,1つのプログラムを作成すること.
o「処理内容を説明せよ.」または「アルゴリズムを説明せよ.」という指示がある場合,レポートメールの
「2.関数の処理内容およびアルゴリズムの説明」において,問題番号とそのアルゴリズムの説明を記述すること.
(指示がない場合には説明しなくてよい.)
o 関数名,引数および戻り値の型を変更しないこと.


おながいします...@T乙
899デフォルトの名無しさん:04/12/22 23:07:12
>>889-898
>>454でガイシュツですので以降放置されます。
900デフォルトの名無しさん:04/12/22 23:10:32
>>889
君空気よめないでしょ?
901デフォルトの名無しさん:04/12/22 23:12:09

次スレをたてる人へ
テンプレのアップローダを変えてね

【アップローダー】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
902デフォルトの名無しさん:04/12/23 12:09:30
C言語に関する問題なのですが、台形公式を用いて
以下の数値積分を行うプログラムを作成するというものです。

∫1/(1+x)dx 被積分区間[0,1]

h=(b-a)/2*n , n<=10とする。
どうかよろしくお願いします。
903デフォルトの名無しさん:04/12/23 13:45:39
[課題]
txtファイルから文字列を1行ずつ(改行ごと)読み込んで2次元配列にそれぞれ格納せよと言うものです。
言語はC言語です。
よろしくお願いします。
904デフォルトの名無しさん:04/12/23 13:48:16
これだけ質問が重複してるとまとめページでも欲しくなるな('A`)
905デフォルトの名無しさん:04/12/23 13:51:41
同スレ内で既出の質問をする奴は、まとめサイトがあっても目を通さない
906デフォルトの名無しさん:04/12/23 13:51:43
>>904
・そういうページを読まないやつ
・そういうページを読めないやつ
が、ここで質問しているわけなので無意味。
907デフォルトの名無しさん:04/12/23 14:14:56
908デフォルトの名無しさん:04/12/23 14:38:33
二次元の拡散方程式をダブルスイープ法を用いたADI(Alternating Direction Implicit)法
で数値計算せよとの問題が出ました。数値計算の概要については複雑なのでなかなか
説明できないので、この方法を詳しく知ってらっしゃる方がおられましたら、是非とも教えて
頂きたいです。

>>901のアップローダ「宿題の答えはここへ書け」スレに私が作ったプログラムまがいの物を
アップさせて頂きます.OSはME、使ってるのはBorland C++ Compilerです。

ファイル名は42.zipです。

プログラムについては全くと言っていいほど素人なので、とにかく計算できればよいと考えております。
よろしくお願い致します.問題はPDFにしております。
 
909903:04/12/23 14:47:21
>>907

とても親切なプログラムありがとうございます
910デフォルトの名無しさん:04/12/23 15:02:12
任意で3点(x1,y1)、(x2,y2)、(x3,y3)の点を打ち、その点から中心点(cx,cy)と半径(r)を求め、
そして、基準点を(cx+r,cy) として(x1,y1)と(x2,y2)と (x3,y3)の各々の角度を計算し、
あと (x1,y1) から(x2,y2) を通り(x3,y3)までの円弧を求めるプログラムを作成していただ
けないでしょうか。
911デフォルトの名無しさん:04/12/23 15:39:23
これもこの前ここで見た死
912デフォルトの名無しさん:04/12/23 16:28:40
落ちてる過去ログは読めないし、
言い回しが違うと検索には引っかからないし
全部読むのは面倒

っていう理由なら、まとめサイトは効力を発揮すると思われ
913デフォルトの名無しさん:04/12/23 16:33:37
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
回答者が解答をこのロダにUPしてけばまとめサイトになりそーな希ガス。
914デフォルトの名無しさん:04/12/23 16:42:17
数学の宿題 とか 文字列処理の宿題 とか分かれてると探しやすそーな希ガス。
915デフォルトの名無しさん:04/12/23 16:49:08
>>914
っきききききさまー文体まねしたなー!!
ところでそろそろ次スレじゃないの?
誰かよろしく。
916デフォルトの名無しさん:04/12/23 17:03:19
>>902
なぜ h = (b - a) / 2 * n; なのかわからないが、題意に沿ったプログラムを書いてみた。
シンプソン則では区間が必ず偶数である必要があるのでそうしなければならないが、
台形公式は区間が奇数でもよいので、単に n で割ればいいと思うんだが・・・

#include <stdio.h>

double f(double x)
{
return 1. / (1. + x);
}

int main(void)
{
int i, n = 10;
const double a = 0., b = 1.;
double h, s = 0., res, x;

h = (b - a) / (2 * n);
x = a;
for (i = 1; i <= 2 * n - 1; i++)
s += f(x += h);
res = h * ((f(a) + f(b)) / 2 + s);
printf("∫[x = 0, 1] 1 / (1 + x)dx = %f\n", res);

return 0;
}
917908:04/12/23 17:33:09
無事に計算できました。ですが,時間幅を1/100以上にすると境界点以外点での誤差が
極めて大きくなってしまいます。通常の誤差は10^{-8}〜10^{-25}位の幅なので特にに
問題ないと思うのですが、どなたか原因に思い当たりございませんでしょうか?

ソースは先ほどの所にうpしておきます.
918デフォルトの名無しさん:04/12/23 18:26:13
>>916
ご指摘ごもっともです。確かに台形は区間が奇数でも大丈夫でした・・・
どうやらシンプソンと混同してたみたいです。
とにかくプログラムありがとうございます。参考にさせていただきます。
919デフォルトの名無しさん:04/12/23 22:20:52
http://www.iba.k.u-tokyo.ac.jp/~yabuki/graffiti/make10/make10.html
このサイトと全く同じプログラムをCでお願いします。
920デフォルトの名無しさん:04/12/23 22:24:39
すいません、>>919は直リンすると無理みたいです。
URLコピペして見て下さい。
921デフォルトの名無しさん:04/12/23 22:27:14
>>919
えーと、全く同じと言うと10を作るサーバプログラムを用意すればいいのかな?
922デフォルトの名無しさん:04/12/23 22:41:15
テーブルの逆ポーランド記法の式を中間記法の形式に変えればいいんだろ
923デフォルトの名無しさん:04/12/23 22:43:03
>>921
0〜9までの数字を4つ与えて、これらに四則演算を施して
10にする方法を求めるプログラムです。
可能な解をすべて挙げて、解が無い場合は解なしとしてください。
表示形式は(,),*,/,+,-を使ってやるので難しいんです。

924デフォルトの名無しさん:04/12/23 22:45:15
解くのは面倒だと思ったけど、poland.txtの変換だけなら簡単だな。
925デフォルトの名無しさん:04/12/24 02:52:09
得点データの配列から、各得点の成績評価の配列を求める関数をおねがいします
例 void hantei(int n,int X[],char g[])
↑人数↑成績データ↑成績評価
成績データはプログラム同様の
int a[]={33,66,22,77,55,11,99,88,44,100};
を使用し各得点と求めた成績評価をmainで表示する
成績評価は80点以上100点以下は'A',70以上79点以下は'B',60点以上69点以下は'C'
0点以上59点以下は'D',-1点以下または101点以上は'-'とする
おねがいします
926デフォルトの名無しさん:04/12/24 03:27:38
>>925
#include <stdio.h>
#define SIZE 10
void hantei(int n, int X[], char g[])
{
int i;
for (i = 0; i < n; i++) {
if (0 <= X[i] && X[i] < 60) { g[i] = 'D'; }
else if (60 <= X[i] && X[i] < 70) { g[i] = 'C'; }
else if (70 <= X[i] && X[i] < 80) { g[i] = 'B'; }
else if (80 <= X[i] && X[i] <= 100) { g[i] = 'A'; }
else { g[i] = '-'; }
}
}

int main(void)
{
int a[]={33,66,22,77,55,11,99,88,44,100}, i;
char g[SIZE];
hantei(SIZE, a, g);
for (i = 0; i < SIZE; i++) { printf("%3d %c\n", a[i], g[i]); }
return 0;
}
927デフォルトの名無しさん:04/12/24 09:02:25
928デフォルトの名無しさん:04/12/24 09:05:37
↓お前がやれ
929デフォルトの名無しさん:04/12/24 09:13:28
固有値分解をすれば定数時間
しなければO(logN)
最低でも線形時間

ググったほうが早いな
930デフォルトの名無しさん:04/12/24 09:26:39
>>927 改良その1、1行にしてみますた
int fibo1(int n){return n--?n?fibo1(n--)+fibo1(n--):1:0;}
931デフォルトの名無しさん:04/12/24 09:51:40
改良案1.for文で非再帰型プログラムを作る。→一番速い
改良案2.今まで求めた値を配列にぶち込んでおき、参照する再帰型→1.ほどではないが、
純粋な再帰型に比べると比べものにならないほど速い
932デフォルトの名無しさん:04/12/24 09:59:36
if (n>1) return fibo0(n-1)+fibo0(n-2);
return n;
if文を減らした
933デフォルトの名無しさん:04/12/24 10:03:29
>>931
原案のプログラムさえ組めないほどヘタレなので、
実際にプログラム書いていただかないとわかんないですorz
934デフォルトの名無しさん:04/12/24 10:16:13
>>933
ぐぐれ。或いは過去ログを穴を開くほど探せ。
935デフォルトの名無しさん:04/12/24 10:29:30
>>933
a_n = b_{n-1}
b_n = b_{n-1} + a_{n-1}
とおけば線形時間
この関係式を行列で書いて、その n 乗を
よく知られた logN のアルゴリズムに放り込めば対数時間
n乗を静的に求めると定数時間
最初から std::map につっこんだり、static な map をもって
一度計算した値を再利用するてもある(これはスレッドセーフでなくなるけど)
936デフォルトの名無しさん:04/12/24 10:36:39
>>927
非再帰だとこんなかんじだな。
マイナスの値を渡すとアクセス違反になるとおもうけど。

int fibo1(int n)
{
int *f = malloc(sizeof(int)*n+1);
int i; f[0] = 0; f[1] = 1;
for(i=2; i<=n; i++) f[i] = f[i-2] + f[i-1];
return f[n];
}
937デフォルトの名無しさん:04/12/24 10:41:59
>>927
ちょっと手抜きだけど一応動く。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/45.txt
938デフォルトの名無しさん:04/12/24 10:44:58
>>930
もっと短くしてみました。
ビット演算って反則っぽい?
int fibo2(int n){return n&~1?fibo0(n-1)+fibo0(n-2):n;}
939デフォルトの名無しさん:04/12/24 10:46:36
>>930
そのデクリメントの使い方は効果が未定義なんでは?
940938:04/12/24 10:47:59
int fibo2(int n){return n/2?fibo0(n-1)+fibo0(n-2):n;}
こうすればビット演算使わずにすむな。
1バイト短くなったし。
941927:04/12/24 11:15:04
レスくださった方ありがとうございます。
でも自分のレベル低くてほとんど理解できてませんorz
>>937で提出しようと思います。
942デフォルトの名無しさん:04/12/24 11:17:47
>>941
向上心の無い人間だな
943デフォルトの名無しさん:04/12/24 11:19:14
Kは>>941を殴ろうと思った。
944936:04/12/24 11:46:56
全部配列に格納していたのは無駄な上にメモリの解放を忘れてたのを改良。
もう遅いかもしれんけど。
C99じゃないとコンパイルできないんで気をつけてな。

int fibo1(int n)
{
int b=0>=n?0:1;
for(int i=2, a=0, c; i<=n; i++) { c=a; a=b; b+=c; }
return b;
}
945デフォルトの名無しさん:04/12/24 11:48:50
>>940,944
これが最強。
946デフォルトの名無しさん:04/12/24 14:04:48
英文を入力して、アルファベットa〜zの出現回数を表示するプログラムをお願いします。
大文字と小文字の区別はしなくていいです。言語はCです。
947デフォルトの名無しさん:04/12/24 14:14:36
アルファベットの種類分、配列を用意して、対象の文字列を前から順番にチェッ
クしながら、その配列にカウントするだけ。コーディングくらい自分でしろ!
へなちょこ!
948デフォルトの名無しさん:04/12/24 15:29:28
>>947
すいません、へなちょこの僕に作ってください。
949デフォルトの名無しさん:04/12/24 15:34:31
初心者のボクで良ければ作る
950デフォルトの名無しさん:04/12/24 15:36:27
>>946
これでよろしいか。

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void)
{
int ch, count['z'-'a'+1], i;
memset(count, 0, sizeof(int)*('z'-'a'+1));
while(EOF != (ch=getc(stdin))) if(isalpha(ch)) count[(isupper(ch)?tolower(ch):ch)-'a']++;
for(i=0; i<'z'-'a'+1; i++) printf("%c : %d\n", 'a'+i, count[i]);
return 0;
}
951デフォルトの名無しさん:04/12/24 15:37:01
今日Cの入門書買ってきた僕でよければ作る
952デフォルトの名無しさん:04/12/24 15:57:38
仕事がうまくいかずに死にたい俺でよければ作る
953デフォルトの名無しさん:04/12/24 16:06:32
>>950
printされませんよ。
954デフォルトの名無しさん:04/12/24 16:08:13
(; ・`д・´) !? (`・д´・ (`・д´・ ;) ナ,ナンダッテ−!
955デフォルトの名無しさん:04/12/24 16:10:16
Ctrl+Z (入力終了したからなんとかしろよボクのコンピューター!)
956デフォルトの名無しさん:04/12/24 16:13:46
>>952
死ぬ前にぜひお願いします。
957デフォルトの名無しさん:04/12/24 16:17:10
>>950
[(isupper(ch)?tolower(ch):ch)は単にtolower(ch)で平気。
tolowerに英大文字以外を渡しても何も起きない。
958デフォルトの名無しさん:04/12/24 16:17:40
テキストファイルから文字列を読み込んでその文字列をバブルソートを使って短い順に表示するプログラムを教えてください。
言語はC言語です。
959デフォルトの名無しさん:04/12/24 16:51:14
>>950
EOFですか。難儀ですね。多分入力待ちから進まないとか言われるよ
>>957
大文字でも小文字でもないのがきたとき、ガチンコファイトクラブ並にとんでもないことが
960950:04/12/24 17:25:21
>>959
その前にisalphaしてるから大丈夫だな。
関数の仕様の確認不足。精進せねば。
961デフォルトの名無しさん:04/12/24 17:31:43
>>959
tolowerへisupper(ch)で偽になる文字を渡したときに渡した文字をそのまま返さないのは規格違反。
そんなコンパイラ窓から投げ捨てろ。
962デフォルトの名無しさん:04/12/24 19:26:46
Ctrl Z って SIGSTOP じゃないの?
963デフォルトの名無しさん:04/12/24 19:43:37
>>962
結果的にDOS/Winではこれ以降stdinはEOFとなる。
964(・∀・)イイ!!:04/12/24 23:54:13
聖夜に人の宿題をするのも(・∀・)イイ!!
965デフォルトの名無しさん:04/12/25 00:00:12
>>946
ということで解。
#include <stdio.h>
#include <ctype.h>
int main(void){int a,b='z'-'a'+1,c['z'-'a'+1]={0},d;while ((a=getc(stdin))!=EOF
)if(isalpha(a))c[tolower(a)-'a']++;for(d=0;d<b;d++)printf("%c:%d\n",'a'+d,c[d])
;return 0;}
966デフォルトの名無しさん:04/12/25 00:06:41
漏れ坊さんなのでクリスマス関係無し。
967デフォルトの名無しさん:04/12/25 00:08:26
坊さんってプログラム関係あるのかな
968デフォルトの名無しさん:04/12/25 00:11:59
>>967
趣味です。
969デフォルトの名無しさん:04/12/25 03:02:50
>>965
もうちょい。
#include <stdio.h>
int main(void){int a,b[256]={0};while((a=getc(stdin))!=EOF)b[a]++;for(a='a';a<=
'z';a++)printf("%c:%d\n",a,b[a]+b[a+'A'-'a']);return 0;}
970次スレテンプレ:04/12/25 03:23:18
(・3・)エェー C++房のぼるじょあですYO!わからない宿題を片づけますYO!
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:

【アップローダー】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

【歴代スレは>>1-10辺り】
36代目: http://pc5.2ch.net/test/read.cgi/tech/1102753497/
35代目: http://pc5.2ch.net/test/read.cgi/tech/1101568895/
34代目: http://pc5.2ch.net/test/read.cgi/tech/1100530682/
33代目: http://pc5.2ch.net/test/read.cgi/tech/1097932699/
32代目: http://pc5.2ch.net/test/read.cgi/tech/1097592876/
31代目: http://pc5.2ch.net/test/read.cgi/tech/1095075678/
30代目: http://pc5.2ch.net/test/read.cgi/tech/1091954342/
29代目: http://pc5.2ch.net/test/read.cgi/tech/1090765027/
971デフォルトの名無しさん:04/12/25 03:23:41
28代目: http://pc5.2ch.net/test/read.cgi/tech/1089974839/
27代目: http://pc5.2ch.net/test/read.cgi/tech/1089448445/
26代目: http://pc5.2ch.net/test/read.cgi/tech/1088860889/
25代目: http://pc5.2ch.net/test/read.cgi/tech/1087929711/
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
14代目: http://pc5.2ch.net/tech/kako/1067/10671/1067175933.html
13代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
9代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
8代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
7代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
6代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
5代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc5.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
1代目: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
972デフォルトの名無しさん:04/12/25 03:24:10
俺立てられなかった。誰かよろしく。
973デフォルトの名無しさん:04/12/25 03:40:30
スレタイはぼる?それともさゆ?
974ぼるじょあ ◆yBEncckFOU :04/12/25 03:41:58
俺に決まってるYO!
975デフォルトの名無しさん:04/12/25 03:43:16
ノノ*^ω^)<もきゅえりりんがC/C++の宿題を片付けますよ?
976デフォルトの名無しさん:04/12/25 03:45:48
ぼるくんが早かったのでぼるくんで立てました
えりりんさんは今度がんばってください
977デフォルトの名無しさん:04/12/25 03:47:11
次スレ
ぼるじょあがC/C++の宿題を片付けますYO! 37代目
http://pc5.2ch.net/test/read.cgi/tech/1103913840/
978デフォルトの名無しさん:04/12/25 03:50:41
立てようと思ったのに遅かった〜
979終了しますた。。。:04/12/25 05:03:37
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
980デフォルトの名無しさん:04/12/25 08:46:06
>>968
クリスマスやってる坊さんは趣味でやってるのか
981デフォルトの名無しさん:04/12/25 09:07:39
坊さんもあるんじゃないかな?
いつだったか卒塔婆をプリンターで
書いてるのみたことあるぞ

さすがに引いた
982sonic:04/12/25 09:42:22

983sonic:04/12/25 09:42:51
18
984デフォルトの名無しさん:04/12/25 14:50:48
>981
ttp://www.oterasan.jp/html/01_01_otoba.html
これかw

>板塔婆印刷機 板塔婆プリンタ 塔婆プリンタ 厚物プリンタ
>板塔婆はもちろん経木(きょうぎ)や位牌(いはい)などへの印刷も可能となっております。

まさにITだなw
985デフォルトの名無しさん:04/12/25 17:12:35
求む宿題age
986デフォルトの名無しさん:04/12/25 17:22:25
>>985
マゾですかあなたはw
987デフォルトの名無しさん:04/12/25 17:25:10
よっつのすうじを10にするのって
みかいけつじゃなかった?
ひらがなすまそ。
988デフォルトの名無しさん:04/12/25 17:39:51
>>919-924
まだ未解決のようだね。
989デフォルトの名無しさん:04/12/25 17:43:25
すみません、マルチスレッドの機能をCの標準的な機能を使って実装するには
どうすれば良いのでしょうか。
990デフォルトの名無しさん:04/12/25 17:52:48
4つの数字を10にするのって難しいよね。
試行は無限にある訳だから、終了判定をどうすればいいのか・・・

俺には分からん。
991デフォルトの名無しさん:04/12/25 17:56:28
>>990
4桁の10進数のそれぞれの桁を四則演算した解が10になる数、という事でしょ。
992デフォルトの名無しさん:04/12/25 17:59:53
>>990
過去スレを探す。
993デフォルトの名無しさん:04/12/25 18:06:44
>>991
だからさ、
1234ってあったら、無限回数計算できるでしょ。
1+2やったのに今度3足して、それに・・・って。
10に出来ないっていう判定はどうするの?
994デフォルトの名無しさん:04/12/25 18:08:54
>>993
いったいどういうアルゴリズム考えているわけ?
995デフォルトの名無しさん:04/12/25 18:10:57
1234
1*2*3*4/3+2

こういうのも含むと思ってるのかしら
996デフォルトの名無しさん:04/12/25 18:16:19
>>994
だからアルゴリズムが分からないんだってw
>>995
そう。含まないの?
997デフォルトの名無しさん:04/12/25 18:17:37
>>996
>>995のは含まれない。なぜなら、>>995のは6つの数を使っているからだ。
998デフォルトの名無しさん:04/12/25 18:19:43
>>997
あぁ、一つの数は1回か0回しか使えないって条件なのか。
了解。それなら出来る。
999デフォルトの名無しさん:04/12/25 18:22:40
だからぁ、いい加減ググることを覚えろよ。
http://www.kashi.info.waseda.ac.jp/~kashi/lec2000/jsj/make10/
1000デフォルトの名無しさん:04/12/25 18:25:23
おちまい
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。