ぼるじょあが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]に入力するプログラムを書いているのですが、エラーが出てプログラムが強制終了してしまいます。
何が悪いのか皆目検討つきません。
どうかご教授いただけますでしょうか?
以下、汚いですがソースです。
908907:04/01/27 11:58
#include <stdio.h>
#include <stdlib.h>

main ()
{

char disk[100000] , file[100000] , ref[100000];
int filesize[100] , refsize[100] , result[100];
int i ;

909907:04/01/27 11:59
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;
910907:04/01/27 12:00
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]);
}
}
911907:04/01/27 12:12
ちなみにエラーとは、.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のときの処理もしといたほうが
いいよ。
914907:04/01/27 12:36
>>912
早速のお返事ありがとうございます。

初期化というのは、配列自体の初期化のことですよね?
途中で書き出してみたのですが、初期値が0になっていたので、そのままにしていたのですが・・・。

試しに、1つ目のファイルサイズに50と100を、
2つめの被参照量に100と800を入れたのですが止まります。
結果として、100/50=2 , 800/100=8で、
配列[result]に[2,8]と格納させたいんですよね・・・。

考え方が根本的に間違っているのでしょうか?
1 / 0 = 0じゃないぞ。
916907:04/01/27 12:55
すみません、解決いたしましたOTL
理由はわからないのですが、計算用配列の[a][b]の初期値を全部1にしたら、
問題なく終了できました。

あとは、格納配列の[c]を大きい順にソートするだけになりました。
自分でがんがってみて、またダメなら質問することにいたします。

スレ汚し、スミマセンでした。
精進いたします。
>>916
だから元のだと0で割ってるからだって。
918907:04/01/27 13:49
>>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
>>918
負の場合は考えないことにした。
コメントを//割る数は0以上を想定→割られる数は0以上を想定に訂正。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1074774948&res=3
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
どのくらいかかりますか?
>>926
再帰だな。詳細は >>931 が教えてくれる。
幅優先探索です。
再帰は使いません。
明日の昼間ごろ教えてしんぜよう
933907:04/01/27 18:08
>>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から組みなおさなければならない気が・・・。
出来が悪くてスミマセン(汗)
934922:04/01/27 18:09
>>922です
当方も期限は明日までなのです....

わかった方よろしくおねがいしまつ(;´Д`)
>>934
ネタじゃなかったのか…
936880:04/01/27 18:13
誰か教えてください…。
>880
「・アップされたファイルの賞味期限が切れました。」
>>936
>>920
ってか、手間かけさせるなよ。
>>933
一応できたが、その場しのぎのバカプログラム。
本当ならデータを構造体なんかにするべきだろう。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1074774948&res=4
しまったしまった島倉千代子。
思考じゃなくてゲームの方を作ってしまった。_ト ̄|○
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;
}
947945:04/01/27 23:35
ありがとうございます。
助かりました。
948946
long intが32bitじゃなかったら~nとn^0xFFFFFFFFUの結果は変わるな。
後者が適切だけど、まあいいか。