ぼるじょあがC/C++の宿題を片づけますYO! 19代目
>>896 ちょっと試してみたYO!
とりあえず、テーブルサイズ固定してやってみたよ。
19ビットで10秒、20ビットで20秒かかりました。
32ビットだと22時間かかりそうだYO!
>>899 やっぱそうでしたか。もつかれさま〜。
かつての素数スレの猛者の方のアドバイスがほしいですね。
今、妄想の中で書くとこんなかんじ。
range = 0xffffffff;
count=1; // 2を素数とみなす
for(i=3 to range){
if(i % 2 == 0) continue; // sqrtを実行しないため
for(j=3 to sqrt(i) step 2){
if(i % j == 0) continue; // 割り切れた=素数でない
}
count++; // √n以下の整数で割り切れなかった=素数
}
result(count);
整数を入力してその値を3桁ごとにコンマで区切って出力するプログラムを書け
例えば4576の時4,576と出力されればよい
助けてクダサイ
C言語です
test
>>889 #include <stdio.h>
#include <string.h>
int main(void)
{
int i,l;
const char num[]="98776543210";
const char tani[4][3]={"万","億","兆","京"};
for(i=0,l=strlen(num);i<l;i++)
{
if(i&&(l-i)%4==0)printf("%s",tani[(l-i)/4]);
printf("%c",num[i]);
}
puts("");
return 0;
}
>>902 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
int i,l;
char num[BUFSIZ];
puts("自然を入力してください");
if(fgets(num,sizeof(num),stdin)==NULL){puts("入力エラー");exit(1);}
l=strlen(num)-1;
if(l==0){puts("何か入力しろ");exit(1);}
for(i=0;i<l;i++)if(!isdigit(num[i])){puts("自然数と言ったろ");exit(1);}
if(num[0]=='0'&&l>=2){puts("いきなり0があるぜ");exit(1);}
for(i=0;i<l;i++)
{
if(i&&(l-i)%3==0)printf(",");
printf("%c",num[i]);
}
puts("");
return 0;
}
いろんなやり方があるなあ、俺の書いたの恥ずかしいから
ださんとこ、、、
初心者が同じ題材にチャレンジして、恥ずかしいコードを
はりまくって 採点したり指導するすれほしい。
ユーザーに配列[a]と配列[b]を入力させ、
配列[a]÷[b]を配列[c]に入力するプログラムを書いているのですが、エラーが出てプログラムが強制終了してしまいます。
何が悪いのか皆目検討つきません。
どうかご教授いただけますでしょうか?
以下、汚いですがソースです。
#include <stdio.h>
#include <stdlib.h>
main ()
{
char disk[100000] , file[100000] , ref[100000];
int filesize[100] , refsize[100] , result[100];
int i ;
for (i=0; i<=99; i++)
{
printf("%d 番目のファイルサイズを入力してください。(単位:[MB])\n",i+1);
printf("入力を終了するには、999999を入力してください。\n");
gets(file);
filesize[i]=atoi(file);
if (filesize[i]==999999)
{
break;
}
}
filesize[i]=0;
for (i=0; i<=99; i++)
{
printf("%d 番目のファイルの被参照量を入力してください。(単位:[MB])\n",i+1);
printf("入力を終了するには、999999を入力してください。\n");
gets(ref);
refsize[i]=atoi(ref);
if (refsize[i]==999999)
{
break;
}
}
refsize[i]=0;
for (i=0; i<=99; i++)
{
result[i] = refsize[i] / filesize[i] ;
if (refsize[i]==0)
{
break;
}
}
for (i=0; i<=10; i++)
{
printf("%d 番目は、%dです。\n" ,i+1,result[i]);
}
}
ちなみにエラーとは、.exeを実行すると、計算部分でプログラムの強制終了のダイアログで出てしまうと言うものです。
Windowsの窓でダイアログは現れます。
>>907 初期化をしてないので不定値を
不定値でわってるからそうなる。
for (i=0; i<=99; i++)
{
printf("%d 番目のファイルサイズを入力してください。(単位:[MB])\n",i+1);
printf("入力を終了するには、999999を入力してください。\n");
gets(file);
filesize[i]=atoi(file);
if (filesize[i]==999999)
{
break;
}
count++;
}
countでも入れて、次からのfor文の条件をfor (i=0; i<count; i++)
に直したらどうか。あとchar disk[100000]とこんなにとっても意味ないよ。
あと割る数が0のときの処理もしといたほうが
いいよ。
>>912 早速のお返事ありがとうございます。
初期化というのは、配列自体の初期化のことですよね?
途中で書き出してみたのですが、初期値が0になっていたので、そのままにしていたのですが・・・。
試しに、1つ目のファイルサイズに50と100を、
2つめの被参照量に100と800を入れたのですが止まります。
結果として、100/50=2 , 800/100=8で、
配列[result]に[2,8]と格納させたいんですよね・・・。
考え方が根本的に間違っているのでしょうか?
1 / 0 = 0じゃないぞ。
すみません、解決いたしましたOTL
理由はわからないのですが、計算用配列の[a][b]の初期値を全部1にしたら、
問題なく終了できました。
あとは、格納配列の[c]を大きい順にソートするだけになりました。
自分でがんがってみて、またダメなら質問することにいたします。
スレ汚し、スミマセンでした。
精進いたします。
>>916 だから元のだと0で割ってるからだって。
>>917 なるほど・・・。ようやく理解しました(汗)
それから、配列[result]を大きい順にソートしたいのですが、構造体もポインタもわかっていません(汗)
ググってみたら、クイックソートやバブルソートを使用すれば良いというのは理解できましたが、
自分のソースの中で、どう使用すればよいかがわかりません・・・。
お教えいただけないでしょうか?
880 名前:デフォルトの名無しさん 投稿日:2004/01/26(月) 16:40
学校の課題で以下のプログラムを提出したんですが、全部間違ってる、と言われてしまいました。
kijun02は14行目、kijun03は16,18行目、kijun04は15,25行目が間違っているのだろうとは思うんですが、
どう修正すればいいのか皆目見当が付きません。
ぜひご教授ください。
お願いします、単位がやばいんです。
881 名前:880 投稿日:2004/01/26(月) 16:41
プログラムです。
ttp://up.isp.2ch.net/up/44167125a93e.zip スイマセン、上のに貼りわすれました。よろしくお願いします。
883 名前:880 投稿日:2004/01/26(月) 16:59
>>882 内容はプログラムの中に書いてあるので書かなかったんですが、
kijun01がラプラス基準、kijun02がフルビッツ基準、kijun03がマキシミン基準、kijun04がミニマックス基準を求める
プログラムです。入力されている数値は4×4で16個です。
886 名前:880 投稿日:2004/01/26(月) 18:14
ちなみに、先生が配ったプログラム(途中何箇所か空白にしてある)はこれです。
ttp://up.isp.2ch.net/up/0f3883bb03fd.zip お願いします。
今の時間帯は鯖が生きてますので。
見るのもじゃまくさいんだよな。
>>1のところにまとめて書いた方が良かったんじゃない?
921 :
デフォルトの名無しさん:04/01/27 14:57
0でない正の実数rに対してlogx-r=0.0の根を求めるプログラムを作成せよ(底はe)
Cです。おながいします(;´Д`)
923 :
デフォルトの名無しさん:04/01/27 17:04
8パズルをC言語でプログラム書いてください
283 123
164→ 804
705 765
にするプログラム。ほんと助けて
924 :
デフォルトの名無しさん:04/01/27 17:11
僕ぼるじょあ。こまってそうだね
925 :
デフォルトの名無しさん:04/01/27 17:16
期限は?
926 :
デフォルトの名無しさん:04/01/27 17:18
1から8までの数字が書いてある8つの正方形のこまが3×3の空間に下図左の
ように置いてあります。0の所に駒を滑らせて入れる操作を繰り返して下図
右の終了状態を作りたい。これを解くプログラムをC言語で作成してください。
また、内容説明、考察も書いてください。
初期状態 終了状態
283 123
164 804
705 765
これが、できなくて困ってます。
助けてください。
927 :
デフォルトの名無しさん:04/01/27 17:19
期限は明日の昼間です。
928 :
デフォルトの名無しさん:04/01/27 17:27
時間がかかるYO
929 :
デフォルトの名無しさん:04/01/27 17:30
どのくらいかかりますか?
幅優先探索です。
再帰は使いません。
明日の昼間ごろ教えてしんぜよう
>>921 ありがとうございます。
見事に配列[result]がソートされました。
この配列[result]のソートされた順番に、配列[filesize]もソートさせたいのですが、それは可能なのでしょうか?
具体的に言うと、
配列[filesize]=[100,200,500]
配列[refsize]=[20000,70000,8000]
配列[result]=[200,350,16]
ソート後の配列[result]=[350,200,16]
ですよね?
ソート後の配列[result]の元の順番が[2番目,1番目,3番目]
なので、その通りに配列[filesize]も[200,100,500]
のように並べ替えたいんです。
なんか、1から組みなおさなければならない気が・・・。
出来が悪くてスミマセン(汗)
>>922です
当方も期限は明日までなのです....
わかった方よろしくおねがいしまつ(;´Д`)
誰か教えてください…。
>880
「・アップされたファイルの賞味期限が切れました。」
しまったしまった島倉千代子。
思考じゃなくてゲームの方を作ってしまった。_ト ̄|○
941 :
デフォルトの名無しさん:04/01/27 20:03
Cなんですけど、
CSVファイルを読み込んで、データ項が数値かそうでないか判別する方法が分かりません。
商品1,1200,商品2,4200,商品3,1500
こんな構造してます。
数値のぶぶんだけとりだしたいんですけど。
>>941 あぁ・・・んーと、CSVのライブラリで行を読み、フィールドまで区切ってるなら、こんなんでどう?
/* 文字列は数字だけから構成される? */
int is_suuti(char *s)
{
while (*s)
if (!isdigit(*s++))
return 0;
return 1;
}
CSVライブラリは↓あたりでも使ってくれ。
ttp://cm.bell-labs.com/cm/cs/tpop/code.html それと、だれかぼるじょあ以外で次スレたのむ。
sscanfでも使えば。
>>943 sscanf()だと、空の項に対応できないんだよね。
#楽でいいんだけどなぁ。
945 :
デフォルトの名無しさん:04/01/27 23:21
C言語の問題です。
ある16進数のデータを反転させた値と、下位4ビットをオール1にした値、
上位4ビットをオール0にした値を16進数で表示する。(入力値は8桁固定)
実行結果例
16進数>ff000000(入力)
反転 = ffffff(システム表示)
下位4ビット「1」=ff00000f(システム表示)
上位4ビット「0」=f000000
よろしくお願いします。
946 :
デフォルトの名無しさん:04/01/27 23:31
>>945 #include <stdio.h>
int main()
{
unsigned long n;
printf("16進数>");
scanf("%lx",&n);
printf("反転=%lx\n",~n); /* もしくはn^0xFFFFFFFFU */
printf("下位4ビット「1」=%lx\n",n|0xFU);
printf("上位4ビット「0」=%lx\n",n&0xFFFFFFFU);
return 0;
}
ありがとうございます。
助かりました。
long intが32bitじゃなかったら~nとn^0xFFFFFFFFUの結果は変わるな。
後者が適切だけど、まあいいか。