C言語なら俺に聞け( ..
263:ぴっころ
07/06/28 22:47:09
>>254
なるほど。
6 00 00001 10
12 00 00011 00
18 00 00100 10
24 00 00110 00
30 00 00111 10
36 00 01001 00
42 00 01010 10
48 00 01100 00
54 00 01101 10
60 00 01111 00
66 00 10000 10
72 00 10010 00
78 00 10011 10
84 00 10101 00
90 00 10110 10
96 00 11000 00
下二桁 00→10の繰り返し、
下二桁より上 1ずつ増えているのは分かりました。
ですが、これで1000000001の間に11を入れて1011000001も3の倍数だ。
が何故言えるのでしょう?あと、3の倍数に偶数が入ってくる理由も・・・。
264:デフォルトの名無しさん
07/06/28 22:47:21
+= (*b - '0'); < 私を置いていくにゃ〜
265:デフォルトの名無しさん
07/06/28 22:48:53
>>263
それは3の倍数じゃなくて6の倍数でわ?
3の倍数 かつ 偶数 = 6の倍数ですよ
266:デフォルトの名無しさん
07/06/28 22:49:05
ファイルを指定した場所へ移動するにはどうしたらいいですか?
267:デフォルトの名無しさん
07/06/28 22:49:48
>>256
BCCをインストールしたディレクトリのBinディレクトリとかのフルパスをPATHとかに追記する(セミコロンでつなげる)
268:デフォルトの名無しさん
07/06/28 22:51:18
>>263
それ6の倍数並べてるだけじゃん
269:デフォルトの名無しさん
07/06/28 22:53:36
>>263
単にそれは、例えば10進法で、15の倍数を並べたら一の位に0と5が交互に現れる、
ってことを言ってるのと同じだよ
270:デフォルトの名無しさん
07/06/28 22:54:11
>>267
どもです。
やってみます。
271:デフォルトの名無しさん
07/06/28 22:57:07
3の倍数、偶数抜き。何か法則がある?
3 000011
9 001001
15 001111
21 010101
27 011011
33 100001
39 100111
272:デフォルトの名無しさん
07/06/28 22:59:31
A(n) = A(n-1) + 6
273:デフォルトの名無しさん
07/06/28 23:13:28
>>235
3の倍数は、奇数ビット目の1の数と、偶数ビット目の1の数の差が、3の倍数になる。
ただし、差が3の倍数といっても数が小さいうちはずっと0。
例:39
100111、奇数ビット目=2、偶数ビット目=2、差=0
274:デフォルトの名無しさん
07/06/28 23:25:45
分からないなら、10進数で同じコトを考えてみればいいよ
10進数だと、10の倍数は1の位が0だということが分かりました。
では11の倍数は、何か特徴があるのですか?
11
22
33
…
1の位が1ずつ増えていくことが分かりました!
…この結果で何か得られることはあると思うか?
275:デフォルトの名無しさん
07/06/28 23:49:23
unsigned char型の配列にbmpの画素の値を読みます。
これをソートするんですが、
ソートする関数の引数のところを
void quicksort(char *array,int lower, int upper)
とするとソートが正しくないことがあります。
void quicksort(unsigned char *array,int lower, int upper)にするとうまくいくようなきがするんですが、
あってますか?
276:デフォルトの名無しさん
07/06/28 23:51:59
とりあえず関数のシグネチャをプロトタイプにちゃんとあわせなさい
277:デフォルトの名無しさん
07/06/28 23:54:41
すいません。よくわからないです。
学校の課題なんですが、unsigned char型は問題ですでにつくられていて、
それを改造してるんです
278:デフォルトの名無しさん
07/06/28 23:59:43
それはきっとcharが符号付だからということなのだろう。
279:デフォルトの名無しさん
07/06/29 00:03:08
なるほど。
void quicksort(unsigned char *array,int lower, int upper)にすれば
ソートはちゃんとうごいてますか?
一応実際の画像のソート状況を確認したら平気っぽかったですが
280:ぴっころ
07/06/29 00:40:39
ぴっころです。答えて下さった方々ありがとうございました。
失礼します。
281:デフォルトの名無しさん
07/06/29 00:44:19
3の倍数は1が常に偶数個
282:デフォルトの名無しさん
07/06/29 01:02:45
定数はdefine, const, enumのどれで指定するのが定跡でしょうか?
283:デフォルトの名無しさん
07/06/29 01:08:23
定数じゃないのばっかじゃん
284:デフォルトの名無しさん
07/06/29 01:09:18
?
285:デフォルトの名無しさん
07/06/29 01:12:54
て・・・定石なんてないのさ
286:デフォルトの名無しさん
07/06/29 01:23:21
テキストファイルをよみこんでたとえばファイルに
cccchaa
というのがかいてあったら下のような感じで画面に表示したいんですけど
どんなソースコードですかね?アルゴリズムがピンとこないのでお願いします。
c→4 h→1 a→2
#include <stdio.h>
int main(void){
FILE *fp,*fut;
char sfn[80];
char yomi[256],mawasi[256];
int i;
scanf("%s",sfn);
if((fin=fopen(sfn,"r"))==NULL)return -1;
fout=fopen("comp","w");
i=0;
while((yomi[i]=fgetc(sfn))!='\0'){
i++;
}
fclose(fp);
fclose(fut);
return 0;
}
287:デフォルトの名無しさん
07/06/29 01:29:15
・読んだ文字が前回と異なっていたら
カウンタをリセット(0にする)。読んだ文字を覚えておき、カウンタをインクリメント
・読んだ文字が前回と同じならそのままカウンタをインクリメント
288:デフォルトの名無しさん
07/06/29 02:33:50
>>281
10101 (10進数で21)の時点で既に違うんだが。
一般的には、>>273が正解
もうこの話題終わってるけどね
289:デフォルトの名無しさん
07/06/29 03:16:46
構造体のint型の要素と、構造体外のchar型の変数とstrcmpで比較したいのですが
int型の要素をどうchar型に変換するのかわかりません。
何か良い方法はありますか?変換は逆でも構いません。
290:デフォルトの名無しさん
07/06/29 03:18:17
atoi とか sprintf とか
291:デフォルトの名無しさん
07/06/29 03:24:59
先日C言語の勉強をしていたら以下のプログラムがありました。
なんで、プログラムを実行して、この結果が出てくるのか全く
わかりません。プログラムの結果がなぜそうなるのか内容を出
来るだけ詳しく教えてください。初心者なのでなるべく丁寧に
お願いします。もし、プログラムのタイプミスがあったらすい
ません。
#include<stdio.h>
#include<string.h>
main(){
char c[3];
char s1[]="abcdefghijklmnopqrstuvwxyz"
char s2 [100];
s2[0]='\0';
printf("s1 inital value:\"%s\"\n",s1)
printf("s2 inital value:\"%s\"\n",s2)
if cstrcmp(s1,s2)==0){
printf("s1==s2\n");}
else{printf("s!=s2\n");}
printf("Push ENTER to proceed.");
fgets(c,2,stdin);
strcpy(s2,s1);
printf("s1 current value:\"%s\"\n",s1);
printf("s2 current value:\"%s\"\n",s2);
if(strcmp(s1,s2)==0)
{
printf("s1==s2\n");}
else{prinf("s1!=s2\n");}
}
292:デフォルトの名無しさん
07/06/29 03:48:27
この結果ってどの結果
293:デフォルトの名無しさん
07/06/29 05:51:18
「この」結果
294:デフォルトの名無しさん
07/06/29 06:07:23
sayonara
295:デフォルトの名無しさん
07/06/29 07:43:16
さよならbyebye〜元気でいてね
年に二回くらいのクソレスならキャッチするよ〜
296:デフォルトの名無しさん
07/06/29 09:46:49
2の倍数はある数を2倍したもの
2倍するとは、2進数だと左に1ビットシフトしたもの
ゆえに、一番下のビットは必ず0になる。
3の倍数もこれに習ってやってみ。
297:デフォルトの名無しさん
07/06/29 10:40:10
291です
なんでENTERを押すと次の実行結果が表示されるのな何でですか?
↑のも質問ですがこのような感じの内容を教えてください
298:デフォルトの名無しさん
07/06/29 10:56:41
>>297
s1 inital value:"abcdefghijklmnopqrstuvwxyz"
s2 inital value:""
s!=s2
Push ENTER to proceed.
s1 current value:"abcdefghijklmnopqrstuvwxyz"
s2 current value:"abcdefghijklmnopqrstuvwxyz"
s1==s2
これのどこがわからないの
299:デフォルトの名無しさん
07/06/29 11:56:31
>>291
stdio.h には、C標準ライブラリのコンソール出力関数のプロトタイプ宣言があり、
そこで宣言されているprintfを使っているから、結果が出力されるんです。
300:デフォルトの名無しさん
07/06/29 12:32:32
>>291
学生?俺もだけど
何の関数を使うためにstring.hをインクルードしているか?
strcmp(),strcpy関数はどういう関数か?
fgetsはどういう関数か?
を調べればたぶんわかると思うよ。
if構文とか'\0'とかprintf()とかエスケープ文字とか
文の終わりに;をつけるとか(付け忘れが多すぎたからあえて指摘)
くらいは知っているだろうし、人にきくほど難しいものではないとおもう。
301:デフォルトの名無しさん
07/06/29 12:43:42
>>291
>char c[3];
>fgets(c,2,stdin);
こんな阿呆なコード、誰が書いたんだ?
302:デフォルトの名無しさん
07/06/29 12:46:17
本質的じゃないトコにつっこむのもなんだかなー
303:デフォルトの名無しさん
07/06/29 13:11:38
だって、阿呆なんですもの
304:デフォルトの名無しさん
07/06/29 14:09:38
その程度のことを見つけてアホアホ得意気になる香具師は痛々しい。
305:デフォルトの名無しさん
07/06/29 14:21:40
まあ、fgets のサイズ指定は
ヌルターミネータ込みのバッファサイズを指定することくらいは
ちゃんと知っておいた方がいいとは思う。
306:デフォルトの名無しさん
07/06/29 14:32:10
しぜおf使おうぜ?
307:デフォルトの名無しさん
07/06/29 17:55:27
#include <stdio.h>
int main(void)
{
int x,y,z,s;
printf("何cmから:"); scanf("%d",&x);
printf("何cmまで:"); scanf("%d",&y);
printf("何cmごと:"); scanf("%d",&z);
s = (x - 100)*0.9;
x = x + z;
for (; x <= y; s)
printf("%dcm %.2fkg\n",x ,(double)s);
return 0;
}
これだと x+5 についての場合のみ永久にブァーッと出てきます。
x〜yの範囲内にするにはどうしたらいいですか?
308:デフォルトの名無しさん
07/06/29 18:02:10
for (; x <= y; x += z) {
double s = (x - 100) * 0.9;
printf("%d cm %.2f kg\n", x, s);
}
309:デフォルトの名無しさん
07/06/29 18:12:13
>>308
ありがとうございました。
この場合繰り返しが行われてる式は
x += z と double s =(x - 100)*0.9 と printf("%dcm %.2fkg\n",x,s)
の3つですよね?繰り返したい式が2つ以上あるときは
forの()の中に1つ書いて、()を閉じてから残りの繰り返したい式を書くということでいいんですか?
310:デフォルトの名無しさん
07/06/29 18:14:42
procedure a: Integer
var
int C;
beigin
a := 0;
end;
がうまくイカなんだがなんだろ
311:デフォルトの名無しさん
07/06/29 18:22:01
beigin → begin
つーかこれPASCAL・・・
312:デフォルトの名無しさん
07/06/29 18:44:38
Pascal って人間は考える葦とかいっていた人か?
313:デフォルトの名無しさん
07/06/29 18:47:07
さつま芋とか水で洗って食う動物じゃね?
314:デフォルトの名無しさん
07/06/29 18:52:22
int* p; /*ポインタのデータ*/
int a = b/*p; /*b÷(pの先のデータ)→a*/;
割り算ができね
315:デフォルトの名無しさん
07/06/29 18:53:22
アライグマパスカル、うが
316:デフォルトの名無しさん
07/06/29 18:53:39
/ と * の間に空白開ければいいじゃん。
317:デフォルトの名無しさん
07/06/29 18:55:18
今でも、糞つまんないCPUのロジックは大方割り算なのは確かだw
318:デフォルトの名無しさん
07/06/29 19:24:53
今までで、プログラムって訳に起つよな(^^って思えたのは
perlとrubyとMLとエクセルで使うVBAくらい。
C++とかJavaは嫌な思いしかさせてくれない。
319:デフォルトの名無しさん
07/06/29 19:32:41
で、Cはどこ?
320:デフォルトの名無しさん
07/06/29 19:34:11
here
321:デフォルトの名無しさん
07/06/29 19:38:48
Cは昔のアセンブラみたいなもん。
良いも悪いもない
322:デフォルトの名無しさん
07/06/29 20:28:23
ガウシアンフィルタを作りたいんですが、質問させてください
フィルタをかけたい画素を中心に3×3のマスクをつくるとします。
URLリンク(teo.sourceforge.jp)
みたいなガウシアンフィルタを作って、この行列の各要素の数値を
マスクの行列の同じ場所の画素値にかけて、
その合計で中心画素の値を割ればいいんですか?
マスクがとしたら
1 3 3
4 6 2
1 2 3
1×0.07 + 3×0.12+・・・+3×0.07=SUM
6/SUMがフィルタをかけた後の値ですか?
323:デフォルトの名無しさん
07/06/29 20:32:30
>>321
アセンブラに昔も今もあるのかよ
324:デフォルトの名無しさん
07/06/29 20:38:06
>>323
Cの話でしょ?w
325:デフォルトの名無しさん
07/06/29 21:52:45
>>322
そうだと思うけど、まずはやってみればいいんでね?
326:デフォルトの名無しさん
07/06/29 22:33:26
>>322
そのコーディング方法が分からないんで無ければ
画像処理スレかどっかで聞いた方がいいんでね?
327:デフォルトの名無しさん
07/06/30 00:14:23
最近ちょっとさわり始めたのですが、
memcpyのように引数にvoid*をとるとき、どうやってvoid*の中の物を
取り出すんですか?普通に配列のように[0]とかってやってもエラーになるし…
328:デフォルトの名無しさん
07/06/30 00:14:47
適当なポインタ型にキャストすればいい。
329:デフォルトの名無しさん
07/06/30 00:48:34
>>328
その場合、中身が構造体などの場合にはどうしたらいいんでしょうか?
char*などにキャストした後から戻せるのでしょうか?
330:デフォルトの名無しさん
07/06/30 00:54:00
構造体でキャストすればいいんじゃ
331:デフォルトの名無しさん
07/06/30 00:57:58
>>330
該当する構造体でキャストすればいいのはわかるのですが、
memcpyのようになんでもコピーできるようにするにはどうしたら
いいのかなと思ったのですが、これはあまりmemcpyを
使わない方がいいと言われるのと何か関係があるのでしょうか?
332:デフォルトの名無しさん
07/06/30 01:01:30
そんなもんchar*にキャストして1バイトずつ読み書きしているだけと思っていればいい。
実際には高速化するため複数バイトずつ読み書きするなど工夫しているいるけど。
333:デフォルトの名無しさん
07/06/30 01:51:53
>>332
参考になりました!
ありがとうございます。
334:デフォルトの名無しさん
07/06/30 02:08:51
まぁ、間違っても構造体のコピーにmemcpy()なんて使うなよ。
335:デフォルトの名無しさん
07/06/30 02:09:15
表示した画像を消すときはどんな関数を使いますか?
336:デフォルトの名無しさん
07/06/30 02:11:56
CLS 3
337:デフォルトの名無しさん
07/06/30 02:15:50
>>336
それってBASICじゃないですかw
338:デフォルトの名無しさん
07/06/30 02:18:01
あ、Cで表示した画像を消すときはどんな関数を使いますか?
339:デフォルトの名無しさん
07/06/30 02:20:43
画像を表示するのにどんな関数使ってますか?
340:デフォルトの名無しさん
07/06/30 02:21:15
>>338
真っ白な画像を用意して、消したい画像の代わりに表示してはいかがでしょう。
341:デフォルトの名無しさん
07/06/30 02:35:45
もはやCのスレではなくなったな
342:デフォルトの名無しさん
07/06/30 03:05:44
exit(1);
343:デフォルトの名無しさん
07/06/30 03:36:59
goto >>343;
344:デフォルトの名無しさん
07/06/30 07:38:21
教えてください。
main関数から、ある関数に引数を渡す場合は、次のような
感じで渡してもOKですか?ダメみたいなんすが、その理由が
わからないです。
もちろん、実行する場合は引数を指定します。 a.out A.txt のように。
extern int p(char *filename)
int main(int argc, char*argv[])
{
p(argv[1]);
}
345:デフォルトの名無しさん
07/06/30 07:41:09
&argv[1]
argv
346:デフォルトの名無しさん
07/06/30 07:51:38
>>344
どうダメなの? それでいけると思うのだけど。
>>345
プロトタイプ宣言と型が合いません。
347:デフォルトの名無しさん
07/06/30 07:52:44
単にダメって言うんじゃなくて具体的にどんなエラーがでたとかさ・・・
348:デフォルトの名無しさん
07/06/30 07:58:13
パス指定なしのファイル名だけ書いていて、起動ディレクトリと違うところにあって見つからないとか。
349:デフォルトの名無しさん
07/06/30 08:04:09
申し訳ないです。
セグメンテンションフォルトです。
350:デフォルトの名無しさん
07/06/30 08:09:50
問題があるのはp()の方だろ
351:デフォルトの名無しさん
07/06/30 08:13:32
>>350
なるほど、呼び出す先のp関数がわるのかなぁ。
引数でわたってきたファイル名をfopen()を呼んでいるだけなんですが。
352:デフォルトの名無しさん
07/06/30 08:19:35
微妙に日本語がおかしいのが気になる
353:デフォルトの名無しさん
07/06/30 08:21:27
どうもあがとうございました。
呼び出す先のp関数が悪いみたいです。
if (f=fopen(filename,"f"))
"f" -> "r" ですね。すいませんでした。
このようなif文で代入はOKなのかなぁ?
354:デフォルトの名無しさん
07/06/30 09:05:16
>>353
間違ってはいないがお勧めしない。
Cのエキスパートを自称するロートルは、しばしば「代入と比較を一行で書けるのがCらしさだ」とのたまうが、
バグの混入の原因になりかねないし、第一必ずしも読み易くない。
355:デフォルトの名無しさん
07/06/30 10:55:48
ifの中で代入すると大抵警告が表示されるしな。
if ((f = fopen()) != NULL)とするやつもいるが俺は好きになれない。
356:デフォルトの名無しさん
07/06/30 11:02:07
80カラムに収まるならついやっちゃうな・・・
f=NULL;
f=fopen("ようじょ", "w");
if(f==NULL){
puts("ひゃぅん?");
}
ここまでするとクドイ感じもするが・・・
357:デフォルトの名無しさん
07/06/30 11:03:31
fopenって失敗したらNULL返すんだからf=NULL;は要らなくね?
358:デフォルトの名無しさん
07/06/30 11:14:05
我が家ではこうしてますね・・・
基本的に使う前と使った後はクドクドと初期化
359:デフォルトの名無しさん
07/06/30 11:17:27
よくこういうふうにやる
FILE* fp = fopen();
if (f)
360:デフォルトの名無しさん
07/06/30 11:20:07
FILE* fp;
FILE *fp;
この二つの違いって何かあるの?
単なるコーディング流儀の違い?
361:デフォルトの名無しさん
07/06/30 11:22:46
流儀の違い
362:デフォルトの名無しさん
07/06/30 11:22:50
そう、流儀の違い。
構文上は、FILE*fp;もFILE * fp;も可能。
363:デフォルトの名無しさん
07/06/30 11:23:41
FILE
*
fp
;
だっていいZE
364:デフォルトの名無しさん
07/06/30 11:23:58
>>360
前者はC++使いに多く、後者はC使いに多い。
両方使う私は、だからと言うわけではないがFILE * fp = fopen(...);と書く。
365:デフォルトの名無しさん
07/06/30 11:33:59
for文とwhile文の明確な違いって何ですか?
たとえばfor文ではできるけどwhile文ではできないこととか・・・。
366:デフォルトの名無しさん
07/06/30 11:38:13
continue 時にも for(A;B;C) の C が実行されるってのが
while だと実現が面倒。
367:デフォルトの名無しさん
07/06/30 11:41:46
バッファの割当の数とか数字を#defineしてしまうのは、なぜですか?マジックナンバーを使いたくないのはわかるのですが、
その都度malloc、もしくはreallocしてはいけないのですか?
または、そのバッファの割当の数はどうやって決まるのですか?
どうもCを書いていると全部mallocしたくなるのですが、C言語のハッカーさん教えてください。
368:デフォルトの名無しさん
07/06/30 11:41:58
for文の括弧内の式はどれも省略可能。
while文の括弧内の式は省略不可能。
369:デフォルトの名無しさん
07/06/30 11:42:12
forは式を省略できるがwhileは省略できない。
なので、無限ループはwhile (1) {...;}ではなくfor (;;) {...;}を使う。
370:デフォルトの名無しさん
07/06/30 11:47:09
もうしわけないです、コーディングは以下の理解でよいでしょうか。
だめ:×
if (f=fopen(filename,"r"))
よい:○
f=fopen(filename,"r");
if(f!=NULL)
371:デフォルトの名無しさん
07/06/30 11:47:14
>>367
malloc したら free しないとダメじゃん。
管理の手間が増えるからなるべくやりたくない。
必要な時はするがね。
ガベコレのある言語と一緒に考えない方がいいよ。
372:デフォルトの名無しさん
07/06/30 11:48:39
>>370
「だめ」ではなくて、「好ましくない」程度で。
他人が書いたものを読むときに、「だめ」と思わずに許容してあげましょう。
373:デフォルトの名無しさん
07/06/30 11:48:56
>>370
文法上の問題はないが推奨されない:△
if (f=fopen(filename,"r"))
よい:○
f=fopen(filename,"r");
if(f!=NULL)
374:デフォルトの名無しさん
07/06/30 11:50:26
whileでは無限ループはできないんですか?
375:367
07/06/30 11:54:14
>371
どもです。なるほど。確かにガベコレある言語でしかマジメに開発したことがないので、納得できていませんでした。
別物ですね。別物。
でも、その際に使用するMAX_BUF_NUMとかは一般的に1024とか使用されているのですが、何ゆえその数字が決まるのですか?
質問ばかりですいません。
376:デフォルトの名無しさん
07/06/30 12:07:15
1KB程度でいいんじゃねって感じじゃね?
377:367
07/06/30 12:15:56
> 376
サンクス
しかし、1KBにするか4KBにするかといったことに悩むんですよね。
作りたいアプリの仕様が1KB程度だから、ここは1KBにするか、と考えるのは普通のような気もするのですが、
アプリを作りたいのではなくて、自分用の便利ライブラリを作成する際にどの数字を採用するか、
と考えるのが非常につらい。
つか、こんな考え方の俺ってガベコレ言語を使いすぎですか。
378:デフォルトの名無しさん
07/06/30 12:20:37
ライブラリならバッファの大きさなんてユーザから指定を受け付けるものに決まっているだろ。
379:デフォルトの名無しさん
07/06/30 12:23:07
C が嫌なら C++ で string とか vector とか使えばいいよ。
380:デフォルトの名無しさん
07/06/30 12:23:59
>>369
for(;;) は可読性が乏しいから while(1) の方が好きだな。
381:デフォルトの名無しさん
07/06/30 12:25:18
>>372 373
ありがとうございました。
382:デフォルトの名無しさん
07/06/30 12:33:22
>>377
Cでライブラリ作るときは内部でバッファを抱えない。
(char *buf, size_t bufsize)
で受けるのがお約束。
高級にやりたいならmalloc, freeでやってバッファがあふれたらreallocで拡張。
手を抜きたいなら#defineで固定バッファであふれたらASSERTでとめるか放置してバッファオーバーフロー。
大体この三種類だな。重要度とパフォーマンスを秤にかけて好きにしとけ。
1kbと4kbのどっちが妥当かなんて答えようがない。
383:367
07/06/30 12:45:56
>> 382, 379, 378
どうもありがとうございました。
後は、自分で考えることができそうです。
ついでにもう一つ聞いてもいいですか?
文字列の配列を作るときに、
ダブルポインタを採用するのがいいか、リンクリストを採用するのがいいか迷っています。
どちらがお勧めですか?
384:デフォルトの名無しさん
07/06/30 12:48:35
それは定数か? それとも実行中に作りたいのか?
385:デフォルトの名無しさん
07/06/30 12:50:49
>>383
使い方によるだろ
よくわからないならダブルポインタの方が扱いやすいかな?
386:デフォルトの名無しさん
07/06/30 12:55:20
リストなんて糞なもん使わずにchar**な配列作っとけ
387:367
07/06/30 13:02:55
>>385, 384
ありがとうございます。
構造体でどちらで定義しようかな、と考えていました。
typedef struct {
char *dstr;
int dlen;
} DATUM;
typedef struct {
DATUM *ptr;
int size;
} DATUMLIST;
とするか、
typedef struct _DATUMLIST {
char *dstr;
char dlen;
struct _DATUMLIST *next;
} DATUMLIST;
とするか迷っていたのです。まぁ、迷わずに実装してしまえば、どちらでもいいような気がしますが。
388:367
07/06/30 13:06:07
>>386
それも考えました。
無駄に考えるのがよくないのですかね。
この際、char**な配列の方が楽のような気がしてきた。
389:デフォルトの名無しさん
07/06/30 14:08:33
int型を指すポインタ int* p;
一次元ポインタ配列 int** p;
二次元ポインタ配列 int*** p;
三次元ポインタ配列 int**** p;
って風にスターを増やしていってもいいの?
390:デフォルトの名無しさん
07/06/30 14:09:42
#include <stdio.h>
int multiple(int, int);
main()
{
}
int multiple(int x, int y)
{
if(y%x == 0)
return 1;
else
return 0;
}
multiple関数を使って二つの整数を比較し
二つ目の整数が一つ目の整数なら1(真)、
それ以外なら2(偽)を返すというプログラムを作りたいのですが
main関数をどうすればいいのかわかりません
391:デフォルトの名無しさん
07/06/30 14:11:44
>>389
int** p; は int* 型を指すポインタだ。
それが必要になれば使う。普通に使う。
392:デフォルトの名無しさん
07/06/30 14:12:34
>>390
main 関数で何がしたいのか分からないので
こちらにもどうすればいいのか分かりません。
393:デフォルトの名無しさん
07/06/30 14:14:28
>>389
スターじゃなくてアスタリスクじゃね?
394:デフォルトの名無しさん
07/06/30 14:16:08
普通にどちらも使う。
フォントによっては実際に星型なってることもあるし。
395:デフォルトの名無しさん
07/06/30 14:16:22
>>391
ありがとう
>>390
if(y%x == 0)
ってyに0が入ってきたらy%xは必ず0になって比較にならないんじゃね?
396:デフォルトの名無しさん
07/06/30 14:20:45
>>395
0 はあらゆる数の倍数(0 倍)だから動作的に問題ない。
397:デフォルトの名無しさん
07/06/30 14:23:12
xが0の時のほうがまずいよな。
398:デフォルトの名無しさん
07/06/30 14:30:47
まあ、どこまでエラー処理するかは状況次第だな。
assert するだけにしておくか、
それともエラー時に何か特別な処理をしてエラー復帰するか。
399:390
07/06/30 15:24:33
main関数では、変数を二つスキャンして
それをmultiple関数に渡し、multipleでの結果を
main関数に返してプリント
というふうにしたいです
400:デフォルトの名無しさん
07/06/30 15:27:56
そう書けばいいんじゃないかな。
401:390
07/06/30 16:26:43
その書き方がわからなくて困ってます
402:デフォルトの名無しさん
07/06/30 16:30:21
そうですか。
403:デフォルトの名無しさん
07/06/30 16:30:50
エラー出てもいいからとりあえず書いてみれ。
それでも分からなければ、
自分でどうやってみたかをここにコピペしてみれ。
404:390
07/06/30 17:12:58
どうしてこんなにお願いしているのに教えてくれないんですか。
もったいぶらないで今すぐに教えてください。
405:デフォルトの名無しさん
07/06/30 17:20:13
#include <stdio.h>
int multiple(int, int);
int main(void)
{
int x, y;
scanf("%d %d",&x,&y);
if(x == 0) return 1;
printf("%d\n",multiple(x,y));
return 0;
}
int multiple(int x, int y)
{
return (y%x!=0)+1;
}
二つ目の整数が一つ目の倍数なら1 と解釈してやってみた
つかここ宿題スレだっけ?
406:デフォルトの名無しさん
07/06/30 17:20:22
うわ・・・
407:390
07/06/30 17:21:03
#include <stdio.h>
int multiple(int, int);
main()
{
int a,b;
scanf("%d%d\n", &a, &b);
printf("%d\n", multiple(a,b));
return 0;
}
int multiple(int x, int y)
{
if(y%x == 0)
return 1;
else
return 0;
}
このプログラムだと一応実行できるのですが
整数を二つ入力しても動かず、もう一つてきとうに整数を入れると
最初の二つの整数について判断します。
例えば
2
4←ここで4は2の倍数なので1が返ってくる
はずなのですがそこでは処理がされず
5←さらに適当に整数を入力する
1←すると結果が返ってくる
と、こんな感じです
整数を二つ入力した時点で処理結果を返したいのですが
いいでしょうか?
408:デフォルトの名無しさん
07/06/30 17:22:14
>>404
>main関数をどうすればいいのかわかりません
>というふうにしたいです
>その書き方がわからなくて困ってます
一度もお願いなんかされてないんだが。
409:デフォルトの名無しさん
07/06/30 17:25:25
>>408
行間も読めないんですか? とか言われそうだなw
>>407
scanf()とprintf()のフォーマット文字列は互換性がないと思ったほうがいい。
あんたのコードは明らかにscanf()のフォーマット文字列が間違っているぞ。
410:デフォルトの名無しさん
07/06/30 17:26:28
>>409
お前こそ行間が読めてないなw
411:409
07/06/30 17:30:06
>>410
大丈夫、初めから読もうとしてないから。
412:デフォルトの名無しさん
07/06/30 17:37:36
これはひどい
413:390
07/06/30 17:43:19
>>409
助言ありがとうございます
それと404は私ではないのであしからず
414:390
07/06/30 17:57:37
main()
{
int a,b;
printf("整数1:"); scanf("%d", &a);
printf("整数2:"); scanf("%d", &b);
printf("%d\n", multiple(a,b));
return 0;
}
407のmain部分を上のようにしたら理想通りに実行されたのですが
なぜ上手くいったのかがよくわかりません。
誰かその理由を説明してください。
415:デフォルトの名無しさん
07/06/30 17:59:15
>>414
>>409の最後の行
416:390
07/06/30 18:02:29
間違っていることはわかりましたが
407のscanf()はどういけないんですか?
417:デフォルトの名無しさん
07/06/30 18:02:51
\n
418:デフォルトの名無しさん
07/06/30 18:03:23
>>416
\n
419:デフォルトの名無しさん
07/06/30 21:07:21
もし A、B、C、Dのいずれかを満たしたら、、、と出力
それ以外なら。。。と出力
とするにはどうやればいいですかね?
420:デフォルトの名無しさん
07/06/30 21:20:02
>>419ですけど自己解決しますたー
421:デフォルトの名無しさん
07/06/30 23:23:30
#include<stdio.h>
#include<string.h>
main(){
char c[3];
char s1[]="abcdefghijklmnopqrstuvwxyz"
char s2 [100];
s2[0]='\0';
printf("s1 inital value:\"%s\"\n",s1)
printf("s2 inital value:\"%s\"\n",s2)
if cstrcmp(s1,s2)==0){
printf("s1==s2\n");}
else{printf("s!=s2\n");}
printf("Push ENTER to proceed.");
fgets(c,2,stdin);
strcpy(s2,s1);
printf("s1 current value:\"%s\"\n",s1);
printf("s2 current value:\"%s\"\n",s2);
if(strcmp(s1,s2)==0)
{
printf("s1==s2\n");}
else{prinf("s1!=s2\n");}
}
のプログラムのfgets(c,2,stdin); ってなんですか?なんの役割ですか?
422:デフォルトの名無しさん
07/06/30 23:29:26
>>421
どうでもいいけどそれ、そろそろtypo直そうな
× if cstrcmp(s1,s2)==0){
○ if (strcmp(s1,s2)==0){
423:デフォルトの名無しさん
07/06/30 23:29:57
スレリンク(tech板:607-644番)
解決したんじゃなかったのか
424:デフォルトの名無しさん
07/06/30 23:34:01
fgets(c,2,stdin); がわかないんですよ
タイプミスはすいません
425:デフォルトの名無しさん
07/06/30 23:37:27
>>421
stdinからcに1文字読み込む。
426:デフォルトの名無しさん
07/06/30 23:38:03
流れも他スレも読まずに回答。
>>421
>のプログラムのfgets(c,2,stdin); ってなんですか?なんの役割ですか?
入力処理。改行を入力させるために使っているわけだ。
427:デフォルトの名無しさん
07/06/30 23:41:15
>>424
Push ENTER to proceed を表示したところで止まるだろう
エンターキーを押すと次に進む
ようはポーズさせているんだろう
428:デフォルトの名無しさん
07/06/30 23:42:16
>>428
なんでENTERを押すと次が表示されるんでしょうか?
429:デフォルトの名無しさん
07/06/30 23:44:23
>>428
自己レスかよ
fgets(c,2,stdin);
で標準入力からの入力待ちで止まっている
エンターキーで入力されたので次に進むだけ
cのデータ自体はいらないもの
430:デフォルトの名無しさん
07/06/30 23:51:30
わかりました。ありがとうございます
431:デフォルトの名無しさん
07/07/01 00:54:39
プログラムとか全くなんにもやった事ないんですけど、最初になにを用意したらいいものなんでしょう?
ここのサイトをまず読めとか入門にいい本とかってありませんかね?
仕事では2D/3Dのデザイン系やってるんですけど、プログラムにもちょっと興味があるんで、
まずはCから勉強していこうと思っているんですが。
432:デフォルトの名無しさん
07/07/01 00:55:43
まず、コンパイラとリンカを用意します
433:デフォルトの名無しさん
07/07/01 00:57:21
最初に用意すべきものは、
何を用意すればいいかを自力で探せる能力だな
とマジレス
いや、マジでプログラマにとって最重要な能力は、情報収集力だよ
434:デフォルトの名無しさん
07/07/01 01:00:07
もうちょい広範囲に言うと「自己解決能力」
435:デフォルトの名無しさん
07/07/01 01:02:58
応用力。>>428なんかは将来心配
436:デフォルトの名無しさん
07/07/01 01:10:50
俺も>>431に何かレスしようと思ったが
>>433-434に全て持っていかれた
437:デフォルトの名無しさん
07/07/01 01:11:17
やる気。
438:デフォルトの名無しさん
07/07/01 01:12:20
やる気は大切だが、やる気だけの子も困ったり。
439:デフォルトの名無しさん
07/07/01 01:13:12
叩かれても泣かない。むしろ悦ぶ方向で。
440:デフォルトの名無しさん
07/07/01 01:15:15
四大欲求をフルに使いこなせる体力。
441:431
07/07/01 01:16:58
そうっすねぇまずは色々情報探してみます。
入門出来たらまた相手にしてください。
442:デフォルトの名無しさん
07/07/01 01:56:16
#include <stdio.h>
int main(void)
{
int min,max,x,y,i,j;
puts("長方形を作りましょう");
printf("一辺(その1)"); scanf("%d",x);
printf("一辺(その2)"); scanf("%d",y);
min = x;
if (y < x)
min = y;
max = y;
if (y < x)
max = x;
for (i=1; i<=max; i++) {
for (j=1; j<=min; j++)
putchar('*');
putchar('\n');
}
return 0;
}
何がおかしいスかねぇ
*が表示されないんですよねぇ
443:デフォルトの名無しさん
07/07/01 01:59:59
>>442
printf("一辺(その1)"); scanf("%d",&x); < & が抜けてるよ
printf("一辺(その2)"); scanf("%d",&y);
444:デフォルトの名無しさん
07/07/01 02:04:09
あ
なんということ…ありがとうございます
445:デフォルトの名無しさん
07/07/01 02:08:54
ちなみにこのプログラムは順番的には
for (i=1; i<=min; i++)→for (j=1; j<=max; j++)→putchar('*')
→for (j=1; j<=max; j++)→putchar('*')→for (j=1; j<=max; j++)→putchar('*')
…→putchar('\n')→for (i=1; i<=min; i++)→…
みたいな感じで実行されてるのですか?
446:デフォルトの名無しさん
07/07/01 02:20:10
>>445
それであってるよ。実行して確認してみればいい。
447:デフォルトの名無しさん
07/07/01 13:00:50
>>446
ありがとうございました
448:デフォルトの名無しさん
07/07/01 14:37:35
四大欲求とは三大欲求に知的探究心を加えたものか
449:デフォルトの名無しさん
07/07/01 14:45:08
ノッてくれ〜Ha〜Ha〜♪
450:449
07/07/01 14:45:40
素で誤爆しました
すみません
451:デフォルトの名無しさん
07/07/01 14:51:42
Gnuplotを扱うC言語用のライブラリとか無いでしょうか?
popen()関数を使って自分で作る事は出来るのですが
もし優れたライブラリがあるならそっちを使いたいです
C++では駄目でCでおながいします
452:デフォルトの名無しさん
07/07/01 19:06:59
例えば
foo(cahr*p)
{
char *my_ptr = MyGetInnerParameter("内部パラメータを文字列で返す関数");
strcpy(p,my_ptr);
}
var()
{
char *ptr;
foo(ptr);
}
こうすると、落ちるんだけど、どうして?
453:デフォルトの名無しさん
07/07/01 19:09:22
foo(char** p)
にしないと
454:デフォルトの名無しさん
07/07/01 19:15:07
いやそれ以前のはなしか
455:デフォルトの名無しさん
07/07/01 19:21:54
どこ指してるかわからないpにstrcpyしちゃだめだろ
456:デフォルトの名無しさん
07/07/01 19:23:24
char* a[8]をlongに直すにはどうしたらいいでしょうか?
>>で1つずつやっていくしかないですかね?
457:デフォルトの名無しさん
07/07/01 19:25:03
じゃあ
foo(cahr*p)
{
char *my_ptr = MyGetInnerParameter("内部パラメータを文字列で返す関数");
strcpy(p,my_ptr);
}
var()
{
char ptr[8];
foo(ptr);
}
こうしてみたんだけど、やっぱりダメだった。
どうして?
458:デフォルトの名無しさん
07/07/01 19:25:29
cahr
459:デフォルトの名無しさん
07/07/01 19:28:38
>>458
そういうケアレスミスは置いといて^^
460:デフォルトの名無しさん
07/07/01 19:30:00
コードを見る限り問題はなさそうな気がする。
MyGet(ryの戻り値がおかしいんじゃないのか。
戻り値になるバッファをスタックに取ってるとか。
461:デフォルトの名無しさん
07/07/01 19:31:06
コピーされる文字数が1024バイトだったとかってオチだろ。
462:デフォルトの名無しさん
07/07/01 19:37:26
デバッグとしてmy_ptr表示させてみたりとか、自分でしないの?
463:デフォルトの名無しさん
07/07/01 19:41:43
そもそも、呼ぶ側で領域確保が必要な関数の場合、
最初に用意する容量を問い合わせてから領域を確保して初めて呼び出せるんだろうに。
領域サイズの確認関数が無いなら、十分なサイズを用意してあげないとダメ。
そして、サイズに満たない領域にコピーしちゃダメ。
464:デフォルトの名無しさん
07/07/01 21:38:52
bregexp.dllのラッパーライブラリ内ですか?
465:デフォルトの名無しさん
07/07/01 22:45:56
サブ関数内でmalloc()でメモリ確保した領域ってメイン関数に帰るときに解放されないの?
466:デフォルトの名無しさん
07/07/01 22:46:46
>>465
free()かrealloc()で解放しない限り、されません。
467:デフォルトの名無しさん
07/07/01 22:50:23
>>465
解放されると困らないかい?
malloc() 〜 free() の作法としては、使う人が確保と解放の責任を持つって暗黙のルールなんだけど、サービス関数の中には、確保だけして解放は使う側でやってね。なんてローカルルールもあるしな。
解放されると思い込むくらいなら、仕様確認をした方がいいよ。
468:デフォルトの名無しさん
07/07/01 22:56:05
>>465
自動変数とごっちゃになってない?
469:デフォルトの名無しさん
07/07/01 23:14:22
alloca なら開放されるな。
環境依存だが。
470:465
07/07/01 23:22:00
あざーす
471:デフォルトの名無しさん
07/07/01 23:25:21
>>464
たいした手間じゃないから自分で書いたらいいよ
472:デフォルトの名無しさん
07/07/01 23:37:38
木構造の二分探索木において
ルートの下にノードがあるとします。
その2つのノードからそれぞれ2本ずつ枝がでていて、
1本は別々のノードにつながっている。もう一本は同じノードにつながっている。
これをあらわすには数字の割り当て方はどうすべきですかね?
0
1 2
3 4 5 6
とあれば、2のleftが4をさすようにする。
5は捨てるって感じですかね?
473:デフォルトの名無しさん
07/07/01 23:43:04
よく意味が分からない。
474:デフォルトの名無しさん
07/07/01 23:47:29
データ数400の二次元配列でかつ小数点
それと木構造と組み合わせて計算とか地獄だな。。。
475:デフォルトの名無しさん
07/07/01 23:58:36
0
/\
1 2
/\ /\
3 4 5
みたいな感じにしたいのか?
476:デフォルトの名無しさん
07/07/02 00:09:47
>>475
はい、そうです。
各枝に確率をつけて、0のところを1.0と設定して
0から1、2への枝の確率をかけて1と2のノードにおいての確率をだす。
その次に1と2の下の3、4、5への枝に確率をつけて
3、4、5のノードにおいての確率を出す感じにしたいんですけど。
1つのノードに3つの確率がはいるようにしないといけないなーとは思ってます。
この計算を木でやるか配列でやるか迷ってます。
477:デフォルトの名無しさん
07/07/02 00:58:38
0
/\
1 2
/\ /\
3 4 5
/\ /\ /\
6 7 8 9
となっていくんだったら、別に配列でもいい気がするな。
配列というか、三角行列?
478:デフォルトの名無しさん
07/07/02 01:14:04
#include <stdio.h>
int main(void)
{ /*左上*/
int a,b,c;
printf("何段ですか:");
scanf("%d",&a);
for (b = 1; b <= a; b++) {
for (c = a; c >= 1; c--)
putchar('*');
putchar('\n');
}
return 0;
}
左上が直角になる三角形を作りたいのですが・・・何か四角形になります
479:デフォルトの名無しさん
07/07/02 01:18:38
>>478
for (c = a; c >= 1; c--)
↓
for (c = a; c >= b; c--)
480:デフォルトの名無しさん
07/07/02 01:25:48
>>479
できました!ありがとうございました!
481:デフォルトの名無しさん
07/07/02 03:05:47
>>456
8つのchar*が指し示している内容が分からないと何とも。
482:デフォルトの名無しさん
07/07/02 11:56:07
数人でCでプログラム開発しているのだけれど、
ソースコード中の各関数の前に、
// 関数名:
// 作者:
// 機能:
//
みたいな説明を付けたいのだけれど、どこかにカッチョいいサンプルないですか?
483:デフォルトの名無しさん
07/07/02 12:07:11
>>482
つ[doxygen]
484:デフォルトの名無しさん
07/07/02 12:53:35
>483
ありがとうございます。でも、
そういう高度なのは使いこなせそいうにないので、
具体的なサンプルを探しています。よろしく。
485:デフォルトの名無しさん
07/07/02 12:58:04
#include <stdio.h>
int main(void)
{
int a,b,c;
printf("ピラミッドを作りましょう");
printf("何段ですか:"); scanf("%d",&a);
for (b = 1; b <= a; b++) {
for (c = a; c > 1; c--)
putchar(' ');
for (c = 1; c < 2b; c++)
putchar('*');
putchar('\n');
}
return 0;
}
何が変なんですかね
486:デフォルトの名無しさん
07/07/02 12:59:39
使いこなさなくてもいいから、Doxygenスタイルで書いて置いたらいいんでね?
もし>484がロートル、コボラの気に入りそうな「枠に填まった」コメントが好きならサンプル出してもいいけど。
#コメントを書くのに手間が掛かるのなんて論外だと思うんだがね。
487:デフォルトの名無しさん
07/07/02 13:00:23
>>485
エラーメッセージくらい読め
488:2b
07/07/02 13:00:50
>>485
あんたの頭。コンパイルエラーが出たのなら、その内容くらい書くのが当然だ。
489:デフォルトの名無しさん
07/07/02 13:01:36
2b
490:デフォルトの名無しさん
07/07/02 13:03:19
>>488
これは間違いなくツンデレ
491:デフォルトの名無しさん
07/07/02 13:04:29
ついでにピラミッドにするためには c > 1 じゃなくて c > b だと思われる
492:デフォルトの名無しさん
07/07/02 13:06:36
エラー E2378 4-18.cpp 10: For文に ; がない(関数 main() )
エラー E2379 4-18.cpp 10: ステートメントにセミコロン(;)がない(関数 main() )
493:デフォルトの名無しさん
07/07/02 13:11:00
>>489
できました。
ありがとうございました
494:デフォルトの名無しさん
07/07/02 13:22:53
488をスルーするとは酷い奴だ
495:488
07/07/02 13:34:56
べ、べつに気づいてもらいたくて名前に仕込んだわけじゃないからね。
「意味のないレスするな」って言われないための予防策なんだから。
496:デフォルトの名無しさん
07/07/02 17:03:31
死ねよ
497:デフォルトの名無しさん
07/07/02 17:13:50
山岡来た
498:デフォルトの名無しさん
07/07/02 19:37:41
2から5までとか指定するのってどう書けばよかったっけ?
499:デフォルトの名無しさん
07/07/02 19:39:44
日本語を正しく書いてください
500:デフォルトの名無しさん
07/07/02 19:40:37
さすがにこれはエスパーじゃないと解読不能だな
501:デフォルトの名無しさん
07/07/02 19:42:14
for(i=2; i<=5; i++) printf("%d")
switch(n)
{
case 2:
case 3:
case 4:
case 5:
printf("2..5");
}
if(2 <= n && n <= 5) printf("2..5");
502:デフォルトの名無しさん
07/07/02 19:42:33
変数iにおいて iが2から5という条件 文書くときに
if(???)
の中身はどう書けばよいですか?
503:デフォルトの名無しさん
07/07/02 19:43:47
if (i >= 2 && i <= 5) ...
504:デフォルトの名無しさん
07/07/02 19:56:35
>>482
こういうのってめっちゃ素人くさいな。
505:デフォルトの名無しさん
07/07/02 19:58:12
しかるべきところで職につけばお前も目にすることがあるかもしれないよ
506:デフォルトの名無しさん
07/07/02 20:00:14
関数ヘッダクラスヘッダはあったほうがソース見やすい。
どうせ引数説明とか入れるんだし。
もちろブロックコメントでな。ラインコメントをいくつも並べるのはカッコワル。
507:デフォルトの名無しさん
07/07/02 20:01:54
あと、関数ヘッダコメントに、その関数名をいちいち入れてるのってカコワルイ
おまえ、それ何の意味があるんだと。
508:デフォルトの名無しさん
07/07/02 20:23:01
質問があるので宜しくお願い致します。
どうして、128バイトは1,024ビットになるのかわかりません
どういう計算をすれば、そうなるのでしょうか?
509:デフォルトの名無しさん
07/07/02 20:31:06
>>508
ほとんどの環境で1バイト=8ビット
510:デフォルトの名無しさん
07/07/02 20:36:25
>>482
そういうのがある時点でかっこ悪いよ…
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5385日前に更新/185 KB
担当:undef