したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

ぷろぐらみんぐ

1まてりん:2007/05/24(木) 03:17:39 ID:???
俺の課題を鈴木さんが手伝うスレ。常時さげで

13まてりん:2007/05/29(火) 03:53:58 ID:AwZo9W86
ここまでは自己解決

14あんだ〜:2007/05/29(火) 14:04:23 ID:CUqg93Jc
↓こんなんでもおkだが・・・

int nTotal;

printf("金額を入力してください:");
scanf("%d",&nTotal);

printf("500円:%d\n",nTotal/500);
nTotal=nTotal%500;

printf("100円:%d\n",nTotal/100);
nTotal=nTotal%100;

printf("50円:%d\n",nTotal/50);
nTotal=nTotal%50;

printf("10円:%d\n",nTotal/10);
nTotal=nTotal%10;

printf("5円:%d\n",nTotal/5);
nTotal=nTotal%5;

printf("1円:%d\n",nTotal/1);
nTotal=nTotal%1;

↓どっちが見やすいかだ
printf("金額を入力してください:");
scanf("%d",&nTotal);

//必要なコインの枚数をn***にセットする
n500=nTotal/500;nTotal=nTotal%500;
n100=nTotal/100;nTotal=nTotal%100;
n50=nTotal/50;nTotal=nTotal%50;
n10=nTotal/10;nTotal=nTotal%10;
n5=nTotal/5;nTotal=nTotal%5;
n1=nTotal/1;nTotal=nTotal%1;

//出力
printf("500円:%d\n",n500);
printf("100円:%d\n",n100);
printf("50円:%d\n",n50);
printf("10円:%d\n",n10);
printf("5円:%d\n",n5);
printf("1円:%d\n",n1);

15あんだ〜:2007/05/29(火) 14:08:12 ID:CUqg93Jc
↑の下のぶん

int nTotal,n500,n100,n50,n10,n5,n1;

printf("金額を入力してください:");
scanf("%d",&nTotal);

//必要なコインの枚数をn***にセットする
n500=nTotal/500;nTotal=nTotal%500;
n100=nTotal/100;nTotal=nTotal%100;
n50=nTotal/50;nTotal=nTotal%50;
n10=nTotal/10;nTotal=nTotal%10;
n5=nTotal/5;nTotal=nTotal%5;
n1=nTotal/1;nTotal=nTotal%1;

//必要コイン数出力
printf("500円:%d\n100円:%d\n50円:%d\n10円:%d\n5円:%d\n1円:%d\n",n500,n100,n50,n10,n5,n1);

return 0;

16まてりん:2007/05/29(火) 15:26:30 ID:AwZo9W86
上のだと500yenとか100yenって表記がまずかったらしくてinteger1とかにしたけど
それならいける?後学校のやつ日本語うちこめない・・・たぶんおれがやり方知らないだけっぽいけどどうやんだろ
シフト+スペースでもだめぽ

17あんだ〜:2007/05/29(火) 17:41:37 ID:CUqg93Jc
>500yen→integer1
いける。

>日本語
atokはいってる?はいってたら半角/全角かCtrl+space
もしくはそのコンパイラによるが、日本語対応してなかったら入力できん。

18まてりん:2007/05/29(火) 21:03:37 ID:AwZo9W86
入力した任意の整数の平均値とその整数の2乗の平均値を計算するプログラム

#include <stdio.h>

main()
{
float average, average2;
int counter, integer, total, total2;

total = 0;
counter = 0;
total2 = 0;

printf("正の整数を入力してください。(-1で終了):");
scanf("%d", &integer);

while (integer != -1){
total = total + integer;
counter = counter + 1;
printf("正の整数を入力してください。(-1で終了):");
scanf("%d", &integer);

}

if (counter != 0){
average = (float) total / counter;
printf("整数の平均は %.2f", average);
}

while (integer != -1){
total2 = total2 + integer * integer;
counter = counter + 1;
printf("正の整数を入力してください。(-1で終了):");
scanf("%d", &integer);

}

if (counter != 0){
average = (float) total2 / counter2;
printf("整数の平均は %.2f", average2);
}


else
printf("整数が入力されませんでした\n");

return 0;
}

19まてりん:2007/05/29(火) 21:07:07 ID:AwZo9W86
・キーボードから入力された正の整数が偶数であれば「XX is even」と表示する。
・番兵値が入力するまで繰り返す
・上記反復処理中に入力された全データ中の偶数の回数をカウントし、出力

2つ目まではいけてるとおもうんだけど3つ目がわかんね。

whileでif (integer % 2 = 0) counter = counter +1 みたいなかんじ?
とりあえず途中まで


#include <stdio.h>
main()
{

int integer, counter, even;

while (integer != -1){
if (integer % 2 = 1)
printf("%d is not even\n", integer);

if (integer % 2 = 0)
printf("%d is even\n", integer);
}

20まてりん:2007/05/29(火) 21:12:20 ID:AwZo9W86
とりあえず適当だけど付け足してみた

#include <stdio.h>
main()
{

int integer, counter, even;

counter = 0;


while (integer != -1){
if (integer % 2 = 1)
printf("%d is not even\n", integer);

if (integer % 2 = 0)
printf("%d is even\n", integer);
}

while (integer != =1){
if (integer % 2 = 0)
counter = counter + 1
}

if (counter != 0) {
printf("偶数の回数は %d\n", counter);

}

return 0;
}

21まてりん:2007/05/29(火) 21:58:43 ID:AwZo9W86
九々出力

#include <stdio.h>
main()
{

int integer i;

printf("Enter an integer(1-9):");
scanf("%d", &integer);

for (i = 0; i < 9; i++)
printf("%d\n", i*integer);

return 0;
}

22あんだ〜:2007/05/30(水) 10:07:33 ID:CUqg93Jc
九九のほうは
i=0じゃなくてi=1かな
あとint integer,i;

問題の偶数奇数だが上の処理だとスキャンをwhileの中にいれるつもりだよね?
としたら、一番最初に実行するwhileが全く無駄な処理になるってのは分かる?
つまりこの文はwhileではなくdo whileにしないと無駄な計算をしてまう。

23あんだ〜:2007/05/30(水) 10:30:24 ID:CUqg93Jc
int nCount,nEven,nInput;

nCount=0; //何回まわしかのカウント
nEven=0; //偶数の回数

do
{
scanf("%d",&nInput);
if(nInput%2==0)
{
printf("偶数%dが入力された。\n",nInput);
nEven++;
};

nCount++;
}while(nInput!=-1);
nCount--;

printf("偶数は%d回中%d回入力されました。",nCount,nEven);

return 0;

24まてりん:2007/05/30(水) 12:02:49 ID:AwZo9W86
まだあんまりわかってないんだよね。
最初のwhileで偶数かどうかの確認を繰り返すみたいなつもりだったw
nInputってのはなに?

25あんだ〜:2007/05/30(水) 13:18:30 ID:CUqg93Jc
だいたいnのつく変数名は数値、整数(number,numeric)integer(int)型で何らかの数値が入りますよって言う宣言
に良く使われる(dblInputとかだとダブル型だし文字だとstrInputとか)
命名規則はプログラマー次第だが、暗黙の了解というか、読む早さをあげるために
いろいろな工夫がされてる。

早い人が読むと単にinteger(整数)って変数名よりnInput(何らかの整数インプット値)と
みてわかるようにしたらはやくなるやろ?

26あんだ〜:2007/05/30(水) 13:23:30 ID:CUqg93Jc
まぁ〜stdio(Standard Input Output)勉強してるうちは気にすることないし
InputとうつならscnInputの方がわかりやすいかもね(scn=scanfで使用する変数)。

27まてりん:2007/05/30(水) 13:43:56 ID:Fr2CZ.06
>>18
なんだけど普通の平均はでるのに2乗のほうがでない。ちなみにcounter2ってのはみすw

28まてりん:2007/05/30(水) 13:45:55 ID:Fr2CZ.06
Inputってのは俺がいままで使ってたのでいうintegereみたいなもん?深く考えんでいいってことかねr

29まてりん:2007/05/30(水) 13:56:36 ID:Fr2CZ.06
>>23
nEven++とかnCount++ってのはここではどういう意味?

30まてりん:2007/05/30(水) 14:14:02 ID:Fr2CZ.06
標準入力から正の整数nを読み込み、1からnまで順に出力するぷろぐらむを書け、
ただし、各数は空白文字でくぎり、重のくらいが増える毎に改行を入れて見やすくすること

int integer, i;

printf("Enter an integer:");
scanf("%d", &integer);

for (i = 1; i <= integer; i++)
printf(" %d", i);

return 0;
}


これだと 1 2 3 4 5 6 7 8 9 10って感じになるだけで改行されんよね。ifでいちいち桁変わったらなんちゃらってしてくん?

31まてりん:2007/05/30(水) 14:28:13 ID:Fr2CZ.06
EOFってー1とかのこと?質問しまくりですまねw

32まてりん:2007/05/30(水) 14:36:16 ID:Fr2CZ.06
EOF自己解決

33あんだ〜:2007/05/30(水) 15:06:43 ID:CUqg93Jc
>>18
int nCount=0,nInput;
float fAve=0;

do
{
printf("正の整数を入力してください。(-1で終了):");
scanf("%d",&nInput);

if(nInput!=-1)
{
fAve+=nInput;
nCount++;
}
}while(nInput!=-1);

fAve/=nCount;
printf("平均:%.2f\n2乗:%.2f\n",fAve,fAve*fAve);

>>28
そう。ただの名前。

>>29
(nCount++) = (nCount=nCount+1)
++nCountとnCount++では意味合いが変わるので注意。
例えば

int a;
a=1;
a=++a;
printf("%d",a);//結果は 2

a=1;
a=a++;
printf("%d",a);//結果は 1

++aは+してから代入 a++は+する前に代入

34あんだ〜:2007/05/30(水) 15:12:16 ID:CUqg93Jc
>>30-32
マテリのことだからできてると思うけど
if(n%10==0)
printf("\n");

35まてりん:2007/05/31(木) 01:32:26 ID:AwZo9W86
>>33
18へのレスのほうがちょっとよくわからん。最後それで結果平均出る?
18の俺の2乗のほうが0とかになってまうのは何がいかんのかな?
他はおkwてかまじ助かる。ありがとw

36まてりん:2007/05/31(木) 01:58:20 ID:AwZo9W86
>>34
ifのほうの意味がよくわからないっす・・・

37あんだ〜:2007/05/31(木) 09:41:12 ID:CUqg93Jc
>>35
>>18は2回目の下whileのときinteger!=-1で抜けるなら
即抜けていくから計算してない。integer初期化等の処理をいれないとけない。

上のwhileはinteger=-1でぬけるから、下のwhileはそのまま1回も処理せず抜けるということ

>>36
if(n%10==0)は10,20,30,40・・・の時に真になり11,12,13・・・は偽になる

38まてりん:2007/05/31(木) 18:16:43 ID:AwZo9W86
>>37
なんという盲点・・・/(^o^)\

39まてりん:2007/05/31(木) 18:28:27 ID:AwZo9W86
>>37
たぶん
1 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31

ってかんじのをnまでつくれってことだとおもうんだけどそれでいける?

40まてりん:2007/05/31(木) 18:54:50 ID:AwZo9W86
ブラックジャック
カジノで有名なトランプゲームであるブラックジャックヲコンピュータと対戦するゲームプログラムを作成する。
実際にはトランプを使用して行われるが、ここでは1〜10の目を持つサイコロをカードの数字として扱う簡易版のブラックジャックを考える。
このゲームはディーラーとプレイヤーの対戦ゲームであり、配られたカードの合計が21日開放が勝ちとなる。

ゲーム手順

1、カードを配る

プレイヤー、ディーラーとも2枚のカードを配る。プレイヤーのカードは2枚とも表向き、ディーラーノカードの1枚は見えないように伏せる

2、プレイヤーの番

プレイヤーはヒット(カードをもう1枚引く)かスタンド(カードを引かずその辞典のポイントで勝負)を選択する。
21を超えない限り何回でもヒットすることができる。ただし、21をこえると直ちにプレイヤーのまけとなる。

3、ディーラーの番

プレイヤーがスタンドすれば次にディーラーがカードを引く。ディーラーの場合、ディーラーの意志でカードで引くかどうか決めるのではなく、
ポイントが17以上になるまでカードを引かなければならない。また、17以上になったら、その後カードを引くことができない。

4、勝敗の決定

ディーラーが21をこえた場合、プレイヤーが21をこえていなければプレイヤーの勝ち

ディーラーが21をこえていなければ21に近いほうが勝ち。同じポイントであれば引き分け。

41まてりん:2007/05/31(木) 19:03:31 ID:AwZo9W86


ゲームを開始します。

カードを配ります。
ディーラー>カードは1と??
プレイヤー>カードは3と8.ポイントは11.

プレイヤーの番です。
ヒットorスタンド?[ヒット=1 スタンド=0]:1
プレイヤー>カードは5.ポイントは16.
ヒットorスタンド?[ヒット=1スタンド=0]:0

ディーラーの番です。
ディーラー>1と9.ポイントは10.
ディーラー>カードは5.ポイントは15.
ディーラー>カードは4.ポイントは19.

プレイヤーのポイントは16、ディーラーのポイントは19.
ディーラーの勝ちです。

ゲームを続けますか?[続行=1 終了=0]:0

ゲームを終了しました

42あんだ〜:2007/06/01(金) 16:53:41 ID:CUqg93Jc
>>41 相当きたないけどながれてきなものは↓のでつかめる
つか、i=(i<j?a:b);とかの条件とswitch,pointerってならった?
つか関数わかる?int randam() の部分がそうなんだけど。
あと、勝利条件分岐とかしてないから書かんといかん

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "TIME.H"

int randam()// 数値0〜9を返す
{
char Buffer[32],Card[1];

sprintf(Buffer,"%d",rand());
strcpy(Card,strchr(Buffer,'\0')-1);

return atoi(Card);
}

int main(int argc, char* argv[])
{
//nPlayer=プレイヤーのカード値で-1なら終了
//nDealer=ディーラーのカード値
//nwP=プレイヤーのテンポラリーカード
//nwD=ディーラーのテンポラリーカード
//nInput=ユーザー入力

unsigned int nPlayer,nDealer,nwP,nwD,nInput;

srand((unsigned)time(NULL));

while(nPlayer!=-1)
{
nPlayer=0;nDealer=0;
printf("ゲームを開始します。\n");
printf("カードを配ります。\n");

nDealer=randam()+1;
nwD=randam()+1;

printf("ディーラー:%d、%d\n",nDealer,nwD);
nDealer+=nwD;

nPlayer=randam()+1;
nwP=randam()+1;

printf("プレイヤー:%d、%d\n",nPlayer,nwP);
nPlayer+=nwP;

while(nwP!=-1)
{
printf("プレイヤーの番です。\n");
printf("現在:%d ヒットorスタンド?[ヒット=1 スタンド=0]:",nPlayer);

scanf("%d",&nInput);

if(nInput==0)
{
nwP=-1;
}else{
nwP=randam()+1;
nPlayer+=nwP;
printf("取得:%d 合計:%d\n",nwP,nPlayer);
}

//21超えはここで負けをするならGOTOになる
if(21<=nPlayer)
break;
else
printf("\n");
}

printf("ディーラーの番です。\n");

while(nDealer<17)
{
nwD=randam()+1;
nDealer+=nwD;
printf("取得:%d 合計:%d\n",nwD,nDealer);
}

printf("ディーラー:%d プレイヤー:%d\n",nDealer,nPlayer);

//引き分け、21超え等の判定はここで
if(nDealer<nPlayer)
printf("あなたの勝ちです。\n");
else
printf("あなたの負けです。\n");

printf("もう一度しますか?[1.する 0.やめる]:");

scanf("%d",&nInput);
if(1==nInput)
nPlayer=0;
else
nPlayer=-1;
}

43まてりん:2007/06/01(金) 21:38:54 ID:7q1G.Ee6
マジで作ってくれるとは思わなかった・・・
習ってるかもしれんから教科書見て確認してみる。まじでありがとw

44あんだ〜:2007/06/04(月) 08:07:23 ID:lP1EgRn6
>>43
unsigned int ってなってるけど、intでおk

45まてりん:2007/06/10(日) 14:31:30 ID:AwZo9W86
次の条件にしたがって景品とポイントを交換するプログラムを作成したい。
番号  ポイント
1   50
2   100
3   120
4   180

景品番号に必要なポイントとこれまでに景品と交換したポイントの合計を出力


#include <stdio.h>

main()
{
int number, usedpoint;
int Acount = 0, Bcount = 0, Ccount = 0, Dcount = 0;

printf("景品番号を入力してください(1,2,3,4,EOF):\n");

usedpoint = Acount * 50 + Bcount * 100 + Ccount * 120 + Dcount * 180;

while ( ( number = getchar() ) != EOF){

switch (number){

case '1':
++Acount;
printf("必要なポイント:50\n");
printf("これまでの使用ポイント:%d\n",usedpoint);
break;
case '2':
++Bcount;
printf("必要なポイント:100\n");
printf("これまでの使用ポイント:%d\n",usedpoint);
break;
case '3':
++Ccount;
printf("必要なポイント:120\n");
printf("これまでの使用ポイント:%d\n",usedpoint);
break;
case '4':
++Dcount;
printf("必要なポイント:180\n");
printf("これまでの使用ポイント:%d\n",usedpoint);
break;
case '\n': case ' ':
break;

default:
break;

}
}

printf("\n合計%dポイント使用しました。\n", usedpoint);

return 0;

}

46まてりん:2007/06/10(日) 15:44:41 ID:AwZo9W86
標準入力から実数xを読み込み、その2乗を出力するプログラムを作成せよ


#include <stdio.h>

int square(int);

main()
{
int x;

scanf("%d", x);
printf("%d ", square(x));

printf("\n");
return 0;
}

int square(int y)
{
return y * y;
}

47まてりん:2007/06/10(日) 15:51:48 ID:AwZo9W86
サイコロを6000回ふって出目の頻度を出力するプログラムはできるんだけど
これを実行のたびに乱数を初期かしろって言われたんだけどどういう意味かわからん・・・

48あんだ〜:2007/06/11(月) 01:48:46 ID:bfaeLVRs
>>42 のsrand((unsigned)time(NULL));
みたいにrandの前に初期化しないとだめ。

49まてりん:2007/06/11(月) 10:24:02 ID:Fr2CZ.06
45と46はおk?

50まてりん:2007/06/11(月) 10:44:09 ID:Fr2CZ.06
整数ならべるのこれでいけてるとおもうんだけどなぜか10ごとに改行されない・・・


int integer, i;

printf("Enter an integer:");
scanf("%d", &integer);

for (i = 1; i <= integer; i++)
printf(" %d", i);

if (i % 10 == 0)
printf("\n");

return 0;
}

51まてりん:2007/06/11(月) 12:08:01 ID:Fr2CZ.06
45だと今までに使ったぽいんとが0からふえなかった。

52まてりん:2007/06/11(月) 12:28:05 ID:Fr2CZ.06
46は数字入力してもめちゃめちゃな値にしかならん・・・

53まてりん:2007/06/11(月) 14:52:20 ID:Fr2CZ.06
52は自己解決。scanfのなかに&ないだけだったw

54あんだ〜:2007/06/11(月) 15:44:14 ID:CUqg93Jc
>>50

↓のまんまだと
for (i = 1; i <= integer; i++)
printf(" %d", i);//ここしかForで実行してない

if (i % 10 == 0)
printf("\n");

こうせんといかん
for (i = 1; i <= integer; i++)
{
printf(" %d", i);

if (i % 10 == 0)
printf("\n");
}


>>45
問題ないと思うけど・・しいて言うならdo while文のほうがよくて↓のように括弧をつけるくせつけとくといい
usedpoint = (Acount * 50) + (Bcount * 100) + (Ccount * 120) + (Dcount * 180);

55あんだ〜:2007/06/11(月) 15:53:57 ID:CUqg93Jc
>>45
あんまよくみてないが、↓じゃね?
つまりwhileのなかに+をいれただけ

int main(int argc, char* argv[])
{

int number, usedpoint;
int Acount = 0, Bcount = 0, Ccount = 0, Dcount = 0;

printf("景品番号を入力してください(1,2,3,4,EOF):\n");

while ( ( number = getchar() ) != EOF){

usedpoint = Acount * 50 + Bcount * 100 + Ccount * 120 + Dcount * 180;

switch (number)
{

case '1':
++Acount;
printf("必要なポイント:50\n");
printf("これまでの使用ポイント:%d\n",usedpoint);
break;
case '2':
++Bcount;
printf("必要なポイント:100\n");
printf("これまでの使用ポイント:%d\n",usedpoint);
break;
case '3':
++Ccount;
printf("必要なポイント:120\n");
printf("これまでの使用ポイント:%d\n",usedpoint);
break;
case '4':
++Dcount;
printf("必要なポイント:180\n");
printf("これまでの使用ポイント:%d\n",usedpoint);
break;
case '\n': case ' ':
break;

default:
break;

}
}
printf("\n合計%dポイント使用しました。\n", usedpoint);

return 0;

}

56まてりん:2007/06/14(木) 15:08:57 ID:Fr2CZ.06
ブラックジャックなんだけど21ごえとか引き分けの判定のとこで
if (nDealer < nPlayer <= 21)
printf("あなたの勝ちです。"\n);
else if (nPlayer > 21 >= nDealer)

って延々とかいてったんだけど何も変わらず21こえても勝ち判定になってまう。

57まてりん:2007/06/14(木) 15:16:52 ID:Fr2CZ.06
GOTOつかったらいかんらしい

58すずき:2007/06/14(木) 17:04:12 ID:CUqg93Jc
>>56
そのif文はnDealer<nPlayerとの比較が行われ、真か偽(1,0)がはいってその結果を
21と比べてるから条件は真になる。この真か偽は通常0,1だがコンパイラによって変わる。

if( (nDealer<nPlayer) /*先に←これが行われコンパイラは0か1を返す*/ <=21)
0,1と比べたら真になるから意味が分からん

if (nDealer<nPlayer)
{
if(21>=nPlayer)
printf("かち");
else if(21>=nDealer)
printf("まけ");
else
printf("どろー");
}else{
// ここにはディーラーがプレイヤー以下の時の条件がはいる
  // ただし、二人とも21超でもはいってくる
}

59名も無きマテリアル:2007/06/28(木) 10:07:59 ID:???
>>56
文法がおかしい
if ( nDealer < nPlayer && nPlayer <= 21 )
printf("あなたの勝ちです。"\n);

60名も無きマテリアル:2007/07/08(日) 04:42:41 ID:yY40YP9M
つぅか掲示板だとインデントは付かないのか?
お題も参考書レベルだし
これを人に手伝ってもらわないとダメなら業界入るのヤメたほうがいい。
信じられないかも知れないけど
社会でたら研修開始で2日目には理解できてないとダメなレベル。
やるのは勝手だけどもう少し隔離されたところでやった方が身のため。

61すずき:2007/07/10(火) 09:24:44 ID:CUqg93Jc
>>60
インデント空白無効(めちゃみずらいw)。まぁ〜まだ学習しだして2ヶ月だしねw
常時さげの隔離空間。つかメッセでいろいろやってたけどメッセのほうが説明しにくい・・・

62ちうりっぷの鼻:2007/08/21(火) 19:24:27 ID:2pR5Hbu6
http://www.yourfilehost.com/media.php?cat=video&amp;file=070523p669_02.wmv

ここもねwww


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板