C/C++の宿題を片付け ..
[2ch|▼Menu]
480:デフォルトの名無しさん
07/07/20 20:35:13
>>478
いやゴメン、使い方はオンラインマニュアルなりで確認しようね
とりあえず
fgets(buf, sizeof(buf), stdin);
にすればおk

あと>>458

481:480
07/07/20 20:35:50
bufじゃなかった、strだった

482:デフォルトの名無しさん
07/07/20 20:49:02
finを思い出した。

483:電通女 ◆v1Uy5WkQ7k
07/07/20 20:57:35
スイマセンこれは宿題なんでこっちで教えてください。
1+2+3+…+nをつくるんですが、

#include <stdio.h>

int sum(int n)
{
int ans,i;
ans=i;
for(i=0;i<=n;i++) ans+=i;
return ans;
}

int main(void)
{
int n,s;
printf("n="); scanf("%d",&n);
s=sum(n);
printf("1から%dまでの和は%dです。\n",n,s);
return 1;
}

こうしたら実行結果が

n=5
1から5までの和は16です。

となってしまったんですが、どこで1増えてしまってるんでしょうか?

484:デフォルトの名無しさん
07/07/20 20:59:16
>>483
よく見てないけど、sum()の中の
ans=i;



485:デフォルトの名無しさん
07/07/20 20:59:42
ans=i;をans=0;に変えると幸せになれる

486:デフォルトの名無しさん
07/07/20 20:59:44
>>483
>ans=i;
何を代入してるんだ。

487:電通女 ◆v1Uy5WkQ7k
07/07/20 21:00:39
ああ!
ans=0;
ですね!ありがとうございました!

488:デフォルトの名無しさん
07/07/20 21:11:04
上に書いてあったのに読んでないんだな


489:デフォルトの名無しさん
07/07/20 21:19:48
宿題を人に投げる人間なんてそんなもん。


490:デフォルトの名無しさん
07/07/20 21:20:35
ans=iはans=1の写し間違いだとesp

491:電通女 ◆v1Uy5WkQ7k
07/07/20 21:38:53
おお、なるほど。

492:デフォルトの名無しさん
07/07/20 21:44:31
コピペに移し間違いなんt

493:デフォルトの名無しさん
07/07/20 22:48:16
>>479
C言語にprintf関数やputs関数など、多数の関数群(標準ライブラリ関数)があるように

よく読んだか?

494:デフォルトの名無しさん
07/07/20 22:49:58
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
次のようにプログラムを作成せよ。以下のプログラムのmainとnumber大域変数は変更しないで、
intのスタックを2つ作る(大域変数)。1つのスタックは数値をいれる。もう1つには演算子を表す数をいれる

#include<stdio.h>
#include<ctype.h>
char *p;char c[100];
int expression(void);
int term(void);
int number(void);
main(){
int ans;
while(1){
printf("Enter expression : ");
fgets(c,90,stdin);
p=&c;

if(*p == '\n')
{break;}
ans=expression();
printf("Answer:%d\n" , ans);
}
}

495:デフォルトの名無しさん
07/07/20 22:50:48
int expression(){
int ans;
ans = term();
while(1){
if(*p == '+'){
*p++;
ans = ans + term();
}
else if(*p == '-'){
*p++;
ans = ans - term();
}
else
break;
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2007年07月21日
[5] その他の制限:特になし

496:デフォルトの名無しさん
07/07/20 22:55:05
>>494
翻訳ソフトにかけた日本語みたいだな。さっぱりわからん。

497:デフォルトの名無しさん
07/07/20 22:56:27
>>494
こんな問題出す糞教官は死んだ方がいいな

498:デフォルトの名無しさん
07/07/20 22:58:10
>>493
読み飛ばして勘違いしていました
すみません

>>470は標準ライブラリではなく
C++標準ライブラリです

499:デフォルトの名無しさん
07/07/20 23:01:05
>>494
問題文は?

500:デフォルトの名無しさん
07/07/20 23:02:02
>>498
std::coutとかも標準ライブラリじゃねぇの?

501:デフォルトの名無しさん
07/07/20 23:23:13
必要なものはアセンブラで組めと

502:デフォルトの名無しさん
07/07/20 23:24:09
>>494です
書いたプログラムのmainとnumber大域変数は変更しないで、
intが2つのに変えます。1つにはスタックは数値をいれて、もう1つには演算子を表す数をいれます。
それで、+−*/を出来るようにします。
例えば
+の時は0
-の時は1
*の時は2
/の時は3 を入れるそうです。


503:デフォルトの名無しさん
07/07/20 23:24:54
日本語でおk

504:デフォルトの名無しさん
07/07/20 23:29:52
>>1
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

ってあるから標準ライブラリ使うなって言うトチ狂った事が多発するんじゃね?
ここで
[5] その他の制限: (どこまで習っているか、ある特定の標準ライブラリ関数は使ってはいけない等々)

って書いとけばちょっとはマシになるのでは?

505:デフォルトの名無しさん
07/07/20 23:30:58
別にどうでも良い。
スルーするなり、非標準の関数を用いるなり、好きにすれば良いじゃん。

506:デフォルトの名無しさん
07/07/20 23:31:08
[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 7/23
[5] その他の制限: 特になし

よろしくお願いします

507:デフォルトの名無しさん
07/07/20 23:34:06
[5] その他の制限:(#include<stdio.h>は使ってはいけない等々)
[6] どこまで習っているか (for文を習いました等々)

もっと具体的に、そして分けたほうがいいんじゃないか?

508:デフォルトの名無しさん
07/07/20 23:39:25
>>494
括弧は使うの?

509:デフォルトの名無しさん
07/07/20 23:41:46
>>507
んなコマいこと言ってたらキリが無い

510:デフォルトの名無しさん
07/07/20 23:44:49
>>508
括弧はどこの括弧ですか?大域変数なら、その大域変数を用いて
プログラムを作成するみたいです

511:デフォルトの名無しさん
07/07/20 23:45:05
>>506
再帰

int fib(int n) {
if (n == 0) return 0;
else if (n == 1) return 1;
else return fib(n-1) + fib(n-2);
}

非再帰

int fib(int n) {
int a = 0;
int b = 1;
while (n > 0) {
int t = a+b;
a = b;
b = t;
n = n-1;
}
return a;
}

512:508
07/07/20 23:48:54
>>494, 510
入力する式で括弧を使うかってこと

513:デフォルトの名無しさん
07/07/20 23:52:35
>>506
そのフィボナッチ数列あってる?
初項と第2項は共に1じゃなかったっけ?

514:デフォルトの名無しさん
07/07/20 23:55:37
>>513
fib(1)とfib(2)を1にしたいんじゃないかな
そうすっと、fib(0)を0にしてfib(1)を1にするとちょうどよくなる

515:デフォルトの名無しさん
07/07/21 00:03:37
>>512
括弧は使っても使わなくても大丈夫です。
とにかく、問題文の内容を使い動けばいいみたいです

516:デフォルトの名無しさん
07/07/21 00:04:58
>>506

#include <stdio.h>
int fib1(int n) { //再帰
if (n == 0) return 0;
else if (n == 1) return 1;
else return fib1(n-1) + fib1(n-2);
}
int fib2(int n) { //非再帰
int a = 0;
int b = 1;
while (n > 0) {
int t = a+b;
a = b;
b = t;
n = n-1;
}
return a;
}
int main(void) {
int n[] = {10, 20, 30, 40, 45};
int i;
for (i=0;i<5;i++) printf("%d ", fib1(n[i]));
putchar('\n');
for (i=0;i<5;i++) printf("%d ", fib2(n[i]));
putchar('\n');
return 0;
}

517:デフォルトの名無しさん
07/07/21 00:20:07
>>515
>以下のプログラムのmainとnumber大域変数
mainとnumberは大域変数なのか?

>とにかく、問題文の内容を使い動けばいいみたいです
前スレで回答があったんだがな。気がつかなかった?


518:デフォルトの名無しさん
07/07/21 00:51:20
>>511 >>516
ありがとうございました
参考にさせてもらいます

519:デフォルトの名無しさん
07/07/21 02:36:41

3目並べのプログラムです。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

何度も対戦できるようにするために列の判定の配列を初期化するようにしたらコンパイルエラーが出るようになってしまいました。
頭の中がぐちゃぐちゃになってきたので、アドバイス等いただければと思います。

正常にプログラムを実行したとき、先攻or後攻を決めることになりますが
また実装はしていませんのでお飾り状態です。

520:デフォルトの名無しさん
07/07/21 02:39:33
>>517
以下のプログラムのmainとnumber大域変数は変更しないで、
1つのスタックは数値ともう1つには演算子を表す数を大域変数にすればいいと
思います



521:デフォルトの名無しさん
07/07/21 02:50:35
>>520
mainは大域変数なのか?

522:デフォルトの名無しさん
07/07/21 02:58:09
>>519
酔っぱらっているので、ロジックはチェックできないがw

まず、変数と関数に同じcheckを割り当てることを止めろ。
配列={0}とできるのは、配列変数の宣言をする時。
それ以外の箇所で初期化したいなら、
ループで各要素に0を代入するか、
>memset(area,sizeof(area),0);
とかするといいぞ。

523:デフォルトの名無しさん
07/07/21 03:18:49
>>520
宿題の回答を依頼したいなら、
使う用語は理解してからにしてくれ。

大域をpublicと言う意味で使うにしても、
mainやnumberは変数ではないよ。
スタックと言う言葉の意味は分かっているのか?
依頼したい内容が、そもそも通じてないから、
回答が無いのじゃないかな?

524:デフォルトの名無しさん
07/07/21 03:27:57
>>521>>523
あやふやな言い方ですいません。mainとnumber大域変数は変更しないで、
intのスタックを2つ作りたいです。
1つのスタックは数値をいれる。
もう1つには演算子を表す数をいれる。です。

よろしくお願いします

525:デフォルトの名無しさん
07/07/21 03:36:44
>>519
battle→put→battleって流れがあるからずっと対戦続けてるとばぐるよ。
int check[8]がグローバルである必要が無い。check関数内のみでOK。
もちろん名前は>522の言うように別でw

あと、do-whileですっきりしそうなところがいっぱいある。
別に直さなくても動くから無視してくれていいけど。

526:デフォルトの名無しさん
07/07/21 03:36:51
だから、そもそもmainは変数じゃないって。
変数じゃない物を、変更できる訳はないよ。
あなたが言う「スタック」とは何なのか
説明してくれないと、意味が分からない。

527:526
07/07/21 03:39:36
振り先は>>524です。orz

528:デフォルトの名無しさん
07/07/21 03:41:46
>>524
あやふやな言い方を直したつもりなのか同じことを繰り返しているぞw
元のプログラムに「number大域変数」というものが存在しない。
よって変更するしないとかいう意味がわからない。
提示したプログラムだが途中までしかコピペしていないんじゃないか?
break;なんかで終わってるしterm関数が見当たらない。

529:デフォルトの名無しさん
07/07/21 03:44:40
>>526
スタックはおそらくそのままスタックでいいかと。
2つってのが引っかかるが演算子と数値で2つ作るんだろう。
「1+2-3」って入力ならスタックA「1 2 3」スタックB「+ -」になって
popA popB popAの演算をスタックがなくなるまで行う。
って感じでエスパーしてみた。

乗除に対応しようとした時点で破綻する設計だなw

530:526
07/07/21 03:54:08
この問題、奇特な人が回答しているんだが。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
依頼者はこれが気に入らないのかな。
もちろん、この時の依頼者は別人かも試練。
だが、「スタックで実装しろ」の言う意味は
理解してからにして欲しい。


531:519
07/07/21 03:55:30
URLリンク(kansai2channeler.hp.infoseek.co.jp)

checkをローカルに戻してareaの再初期化をforに変更しました。
プログラムを実行すると、途中でうまく配置できていない感じになってしまいます。

先攻後攻は先ほどと同じく未実装です。

532:デフォルトの名無しさん
07/07/21 03:57:18
すいませんでした。
プログラムが途中でした。
}
return(ans);
}
int number(void){ //数値データ
int i=0;
while (isdigit(*p)){
i = i*10+(*p++)-48;
}
return(i);
}

533:デフォルトの名無しさん
07/07/21 03:58:33
とりあいずmainとnumberは変更しないで、
intのスタックを2つ作る。
1つのスタックは数値をいれる。
もう1つには演算子を表す数をいれる。です。

534:デフォルトの名無しさん
07/07/21 04:00:58
>>530さん
書き込みが食い違いになってしまいすいません。

535:526
07/07/21 04:02:18
だから、スタックって何?

536:デフォルトの名無しさん
07/07/21 04:05:17
whileをintだけで書けってことをいいたいのか?

537:526
07/07/21 04:07:07
>>533
「演算子を表す数」を定義してくれ

538:デフォルトの名無しさん
07/07/21 04:07:33
あれか?それともint使ってとにかく数値をいれるのと
演算子を表す数のを作ればいいのか?

539:526
07/07/21 04:13:19
要件定義ができないなら、それでも良いが、
どういう物を作って欲しいのか、理解可能な表現にして下さい。
少なくとも宿題をそのまんま書いてくれないと、espの領域になる。

540:デフォルトの名無しさん
07/07/21 04:17:12
演算子を表す数ですか?
一応黒板に書いてあったのを書き込みました

541:デフォルトの名無しさん
07/07/21 04:19:48
確か+が一番弱く/が一番強くなるように作ると言っていました

542:デフォルトの名無しさん
07/07/21 04:20:14
>>531
print関数がおかしい。
ループ部分を以下みたいにしてみ。
for(i=0;i<9;i++){
if(area[i] == 0)
printf(" ");
else if(area[i] == 1)
printf("○");
else if(area[i] == 4)
printf("×");
else
printf("as");
printf("|");
if ( i % 3 == 2 )
printf("\n");
}
とりあえずは動くよ。

543:526
07/07/21 04:21:36
>>531で示した回答にどういう不満があるのか、
せめてそれだけども答えてくれ。

>演算子を表す数ですか?
>一応黒板に書いてあったのを書き込みました
見落としたかも知れないから、
演算子と定数の対応表を再掲してくれ。


544:526
07/07/21 04:23:51
スタックの定義も提示してくれ。

545:519
07/07/21 04:31:10
URLリンク(kansai2channeler.hp.infoseek.co.jp)

>>542
挙動は正常になったようなのですが
2度目以降の対戦がうまく動作しません・・・(´・ω・`)
area[]の初期化は出来ていると思うのですが・・・


>>543
レスアン間違ってないですか?

546:519
07/07/21 04:33:00
初期化できてなかったですね・・・^^;
すいません、みすってました

547:526
07/07/21 04:35:27
>>541
宿題の意味が分からないなら、>>531で宿題の回答にしたらいい。
この回答に不満があるなら、
この回答のどこが設問と違うか、提示すればいいだけだと思うが。

548:519
07/07/21 04:41:21
526さんは何を言ってるんでしょうか?

私ともう一人質問をされてる方がいるんだとおもんですが・・・?

私は3目並べの話をしてるんですが?

549:526
07/07/21 04:46:50
>>548 気にしないで下さい。あなたの推察通りです。

済まん、酔っぱらいだ
>>547で書いた>>541>>540の間違いだ。訂正する。

550:519
07/07/21 05:08:59
URLリンク(kansai2channeler.hp.infoseek.co.jp)

先攻or後攻も考慮してみました。

課題の指示としては
1,二人対戦・com対戦可能
2,毎回com/man対戦・終了を選ぶ

というものです。

このプログラムでみたせてるでしょうか?

私の中ではOKだとは思うのですが

できてねーぞごるぁ! とかあればおねがいします

551:デフォルトの名無しさん
07/07/21 05:14:31
【即会い!!】

私自身が使用してみて、即出会えた出会い系サイトを紹介するブログ始めました。
2chと併用して使える良質な即日系サイトのみを厳選して薦めております。
↓↓↓
【ブログ 〜即出会えるサイト】URLリンク(deaigets.blog97.fc2.com)

552:519
07/07/21 05:18:33

もう一つ指示があったのを忘れていました。

・戦歴の表示

というのがあったので、追加しました
URLリンク(kansai2channeler.hp.infoseek.co.jp)

評価お願いします。

553:519
07/07/21 05:22:51
何度もすみません、凡ミスがあったので修正しました。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

554:デフォルトの名無しさん
07/07/21 07:22:22
とても丁寧な読みやすいコーディングだね。
ソース流し読みしただけだけど敢えて問題があるとするなら
ループでscanfを使ってるくらい?

555:デフォルトの名無しさん
07/07/21 09:35:31
>>519
良くできてると思いますよ。

556:519
07/07/21 10:06:42
ありがとうございました。

557: ◆yb5ufjhaCo
07/07/21 11:21:02
すいません、あんまりわからないので、教えてください。
ほんとに初歩の質問ですいません

1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):
<次のプログラムの断片は誤りを含んでいるところがある。
その誤りの理由を述べ、正しい動作をするようにその箇所を修正した
プログラム断片全てを書け。ただし無関係のところまで変えないこと。

[3] 環境
 [3.1] OS: Linuxです
 [3.2] コンパイラ名とバージョン: gcc です
 [3.3] 言語: Cでお願いします。
[4] 期限: 25日いっぱいまでです。


558: ◆yb5ufjhaCo
07/07/21 11:22:35
すいません。問題忘れてました…
(1)
if(c = '\0')
n++;

(2)
while(c = getchar() !=EOF)
putchar(c);

(3)
for(i = 0; i < 10; j++){
total += i;
}

(4)
switch(c){
case 'y':
state = 1;
case 'n':
state = 0;
default:
state = -1;
}

お願いします…

559: ◆yb5ufjhaCo
07/07/21 11:23:13
(5)
if(k = 0)
1++;
else
1--;


(6)
for (i = 0; i < 8; j++){
b[i] -= a[i+j];
}

(7)
switch(c){
case 'y':
count--;
case 'n':
count++;
default:
break;
}


560:デフォルトの名無しさん
07/07/21 11:28:31
1:=
2:(c=getchar())
3:無限るーっぷって怖くね?
4:break;
5:=, 1++, 1--
6:3に同じ
7:break;

違うかも

561:519
07/07/21 13:07:12
comが1Pのリーチを阻止できるようにしたいのですが、
どういうコードを書けばいいでしょうか?

562: ◆M2clACoxQA
07/07/21 13:28:04
[1] 授業単元: プログラミング 基礎
[2] 問題文(含コード&リンク):
#include <stdio.h>

int main(void)
{
int i = 1;
int j = 0;

do{
j = j + i;
i += 2;
}while(i<=99);

printf("1から99までの奇数の総数は%dです。\n", j);

return 0;
}

以上の「奇数の総和」を求めるプログラムを関数化して作成しなさい。
開始値と終了値を引数として使用し、main関数で確認する。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: visual studio2005
 [3.3] 言語: C言語
[4] 期限: 2007年7月21日15:00まで
[5] その他の制限:
習ったのは、if-else文 do-while文 for文。
sum関数を使うと言っていました。
まだ習いたてなので、あまり難しいのはわかりません。
よろしくお願いします・・・

563:デフォルトの名無しさん
07/07/21 13:32:20
>>562
お前さんのところで作ったsum関数とやらは知らんがそれ見ながらdo{}whileの処理を
sum関数の要領でmain文の外に追い出せばいいだけ。

564: ◆M2clACoxQA
07/07/21 13:40:18
>>563
なるほど・・・そういうことだったんですね。
変に難しいことを考えてしまいました^^;
親切に教えてくださり、ありがとう御座いました!!

565:デフォルトの名無しさん
07/07/21 14:13:55
>>547
エラーで書けなくなった為遅くなりました。
checkはまだ習っていません。何通りかやり方があると
言っていたので他にも実行するプログラムはありますか?
何度もあやふやな言い方だと迷惑だと思うので、友達に確認してから
もう一度書き込みします。
よろしくお願いします


566:デフォルトの名無しさん
07/07/21 14:31:37
習ってないも糞もおまいさんの作った関数だろうから習ってないとか意味不明。
授業中に提示された関数をただ使ってるだけだならちゃんと話聞いとけ馬鹿で終了だし。

他に実行できるプログラムはあると言えるけど、
>>519の要件満たせばいいだけならプログラマの数だけやり方はあると言えるから、
質問自体の意味がない。

何がしたいのかはっきりすればどうすればいいのか言えるけど、
何がしたいのかを言わないようじゃエスパーに頼るしかないし。

567:519
07/07/21 14:37:48
>>566

私は565じゃないですよ!!!!!

568:デフォルトの名無しさん
07/07/21 14:42:14
>>565
お前さんが>>494なら、>>547>>594にあるとおり、ただの勘違いのようだから
スルー汁
>>530のレスは読んだのか?

569:568
07/07/21 14:43:13
×>>547>>594にあるとおり
>>547>>549にあるとおり

570:デフォルトの名無しさん
07/07/21 14:48:50
なんかここんとこgdgd説教したりそんなんじゃ相手に伝わらないよ俺はわからんよって
だったらgdgdレスしてないで答えなきゃ良いじょのいこっ(えなり君風に)

571:デフォルトの名無しさん
07/07/21 15:04:37
>>568
>>530は読みました。>>530自体が問題のプログラムで。

問題は、/*-+の順に計算できるようにする。そのためにint2つ作る。
1つは数字、1つは記号(/*-+)

572:デフォルトの名無しさん
07/07/21 15:11:11
>>420をお願いします

573:519
07/07/21 15:17:54
私が質問している3目並べは
>>561をおねがいします!

574:デフォルトの名無しさん
07/07/21 15:48:08
>>573
check関数内で、check変数の値が2になっているラインに置けばいい。
ってか、checkの名前がかぶってるのをやめたほうがいいって言われてなかった?

575:デフォルトの名無しさん
07/07/21 16:01:30
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
整数n、rを入力し全組み合わせを配列に配置するプログラムを作成しなさい。
例えばn=4,r=2の場合
{{1,2},{1,3},{1,4},{2,3},{2,4},{3,4}}
となる。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 7/25
[5] その他の制限: 特に無し

画面に出力するだけなら何とかなりそうなんですが配列に入れるとなると
もう何がなんだか…

576:デフォルトの名無しさん
07/07/21 16:06:56
>>575
配列なんて出てくるか?
2重ループで一発だと思うんだが?違う?

577:デフォルトの名無しさん
07/07/21 16:08:30
お前は何を言ってるんだ

578:デフォルトの名無しさん
07/07/21 16:16:34
適当に大きめの2次配列に入れるなり、
動的確保するなりして入れればいいだけじゃないか。
表示できるなら配置もできるだろ。

579:デフォルトの名無しさん
07/07/21 16:20:31
【即会い!!】

私自身が使用してみて、即出会えた出会い系サイトを紹介するブログ始めました。
2chと併用して使える良質な即日系サイトのみを厳選して薦めております。

フリメ登録OKなサイトを拡充しました!
↓↓↓
【ブログ 〜即出会えるサイト】URLリンク(deaigets.blog97.fc2.com)

580:デフォルトの名無しさん
07/07/21 16:34:05
>>494
最小限の実装.変な式を入れたときにどうなるかは知らない.
<変更点>
・以下のグローバル変数を追加
int ops[100], vals[100], optop, valtop;

・term()は使わないので消していい

・expression() の内容を以下に変更
int expression() {
valtop = optop = -1;
vals[++valtop] = number();
while (1) {
int opcode;
if (*p == '+') opcode = 1;
else if (*p == '-') opcode = 2;
else if (*p == '*') opcode = 3;
else if (*p == '/') opcode = 4;
else opcode = 0;
while (optop >= 0 && ops[optop] >= opcode) {
if (ops[optop] == 1) vals[valtop-1] += vals[valtop];
if (ops[optop] == 2) vals[valtop-1] -= vals[valtop];
if (ops[optop] == 3) vals[valtop-1] *= vals[valtop];
if (ops[optop] == 4) vals[valtop-1] /= vals[valtop];
valtop--; optop--;}
if (opcode == 0) break;
ops[++optop] = opcode;
*p++;
vals[++valtop] = number();}
if (valtop != 0) printf("some error\n");
return vals[0];}

581:デフォルトの名無しさん
07/07/21 16:40:46
>>578
なんで2次配列なのか小一時間問い詰めたい

582:デフォルトの名無しさん
07/07/21 16:44:54
>>576
なんで2重ループなのか小一時間問い詰めたい

583:デフォルトの名無しさん
07/07/21 16:55:27
>>578
表示できるといっても再帰で表示させてるんで
うまいこと添字があわなくて…
配列に配置させるのに利用できないんです

584:デフォルトの名無しさん
07/07/21 17:16:20
>>453 俺もやってみた。クソースだがw
URLリンク(kansai2channeler.hp.infoseek.co.jp)

585:519
07/07/21 17:31:19
>>574
名前が被ってるというと?

586:デフォルトの名無しさん
07/07/21 17:43:21
>>575
URLリンク(kansai2channeler.hp.infoseek.co.jp)
2次元配列ではなくポインタ配列だが。

587:デフォルトの名無しさん
07/07/21 17:44:29
>>585
関数と変数が同じ名前ってこと。
問題ないけどソース読みづらい。

588:デフォルトの名無しさん
07/07/21 18:28:35
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク):
ゼータ関数は次式で定義される。

   ζ(s) = (1/n^s)

s=6のとき、π^6/945に収束する。これを確認するプログラムを作製せよ。
ただし、級数の和を無限個とるのではなく、有限の範囲内で(n=100)で計算せよ。

条件1:倍精度型で計算し、6パターン以上は比較できるようにすること。
条件2:二重ループを使うこと。そのため、外側ループでは初期値をmとして,
nまでm刻みで値を変更し、内側ループでは該当する値に応じたゼータ関数値を算定できるようにコーティングせよ。(例えば、n=1000と、m=100に設定した場合、nの値を10パターン変化させることができる。)

[3] 環境
 [3.1] OS:MAC OS X
 [3.2] コンパイラ名 gcc
 [3.3] 言語:C
[4] 期限:来週の月曜日まで
[5] その他の制限: とくに無し

条件が多いですが、よろしくお願いします。



589:デフォルトの名無しさん
07/07/21 18:43:31
それ7/18までじゃなかったっけ?

590:デフォルトの名無しさん
07/07/21 19:03:58
>>587
同じ名前で変数と関数があったら、
普通、再定義エラーにならないか?

591:デフォルトの名無しさん
07/07/21 19:14:43
グローバルとローカルの違いってCの基礎じゃないの?

592:デフォルトの名無しさん
07/07/21 19:20:33
グローバル変数と関数が同じ名前だったんだが。

593:デフォルトの名無しさん
07/07/21 19:22:03
ローカルでも普通にエラーでるんじゃね?

594:デフォルトの名無しさん
07/07/21 19:23:01
っていうか>>519の最新が553?

595:593
07/07/21 19:25:33
さっき>>553で名前被りエラー出なかったからあのレス忘れてくれ。

596:デフォルトの名無しさん
07/07/21 19:29:31
最新にしてはエラーや警告出まくるんだけどw
で、comに考える力を与えてみた。

int com_put(){

int input;

do{
input = rand()%9;
}while(area[input] != 0);

if (area[0] + area[1] + area[2] == 8) input = (area[0] == 0)*0 + (area[1] == 0)*1 + (area[2] == 0)*2;
else if(area[3] + area[4] + area[5] == 8) input = (area[3] == 0)*3 + (area[4] == 0)*4 + (area[5] == 0)*5;
else if(area[6] + area[7] + area[8] == 8) input = (area[6] == 0)*6 + (area[7] == 0)*7 + (area[8] == 0)*8;
else if(area[0] + area[3] + area[6] == 8) input = (area[0] == 0)*0 + (area[3] == 0)*3 + (area[6] == 0)*6;
else if(area[1] + area[4] + area[7] == 8) input = (area[1] == 0)*1 + (area[4] == 0)*4 + (area[7] == 0)*7;
else if(area[2] + area[5] + area[8] == 8) input = (area[2] == 0)*2 + (area[5] == 0)*5 + (area[8] == 0)*8;
else if(area[0] + area[4] + area[8] == 8) input = (area[0] == 0)*0 + (area[4] == 0)*4 + (area[8] == 0)*8;
else if(area[2] + area[4] + area[6] == 8) input = (area[2] == 0)*2 + (area[4] == 0)*4 + (area[6] == 0)*6;
else if(area[0] + area[1] + area[2] == 2) input = (area[0] == 0)*0 + (area[1] == 0)*1 + (area[2] == 0)*2;
else if(area[3] + area[4] + area[5] == 2) input = (area[3] == 0)*3 + (area[4] == 0)*4 + (area[5] == 0)*5;
else if(area[6] + area[7] + area[8] == 2) input = (area[6] == 0)*6 + (area[7] == 0)*7 + (area[8] == 0)*8;
else if(area[0] + area[3] + area[6] == 2) input = (area[0] == 0)*0 + (area[3] == 0)*3 + (area[6] == 0)*6;
else if(area[1] + area[4] + area[7] == 2) input = (area[1] == 0)*1 + (area[4] == 0)*4 + (area[7] == 0)*7;
else if(area[2] + area[5] + area[8] == 2) input = (area[2] == 0)*2 + (area[5] == 0)*5 + (area[8] == 0)*8;
else if(area[0] + area[4] + area[8] == 2) input = (area[0] == 0)*0 + (area[4] == 0)*4 + (area[8] == 0)*8;
else if(area[2] + area[4] + area[6] == 2) input = (area[2] == 0)*2 + (area[4] == 0)*4 + (area[6] == 0)*6;

area[input] = 4;

}

597:デフォルトの名無しさん
07/07/21 21:56:05
>>586
どうもありがとうございます。
なんか今更情報科にきたことを後悔…
複雑になると頭がこんがらがる

598:デフォルトの名無しさん
07/07/21 22:32:47
[1]単元:プログラミング
[2]問題:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3]環境
  OS:リナックス
  コンパイラ:gcc
言語:C
[4]7月23日
 よろしくお願いします。

599:デフォルトの名無しさん
07/07/21 22:41:33
>>588 MinGWで。Macで動くか知りません
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
int i, j, s = 6, n = 100, m = 10;
double d = 0;
for(i = m; i <= n; i += m) {
for(j = i-m+1; j < i; j++) d += 1/pow(j,s);
printf("n = %i\t:\t%.15f\n", i, d);
}
printf("π^6/945:\t%.15f\n", pow(M_PI,s)/945);
return 0;
}

600:デフォルトの名無しさん
07/07/21 22:55:00
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):以下のプログラムのmainとnumberは変更しないで、
intのスタックを2つ作る。1つは数値をいれる。もう1つには演算子を表す数をいれる
#include <stdio.h> #include <stdlib.h> #include <ctype.h>
char *p; char c[100]; int expression(void);int term(void);
int number(void);main(){ int ans;while(1){
printf("Enter expression : ");fgets(c,90,stdin);
p=c;if(*p == '\n') break;ans = expression();
printf("Answer:%d\n", ans);}}int expression(){
int ans;ans = term();while(1){if(*p == '+'){
p++;ans = ans + term();}else if(*p == '-'){
p++;ans = ans - term();}else break;}
return(ans);}int term(){int ans,x;ans = number();
while(1){if(*p == '*'){p++;ans = ans * number();}
else if(*p == '/'){p++;x = number();
if(x == 0){printf("Division by 0\n");
exit(1);}ans = ans / x;}
else break;}return(ans);}
int number(){int i=0;while (isdigit(*p)){i=i*10+(*p++)-48;}
return(i);}
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 年07月23日
[5] その他の制限: 特になし


601:デフォルトの名無しさん
07/07/21 23:04:37
いい加減にしろよカス

602:デフォルトの名無しさん
07/07/21 23:09:04
>>600
インクルードくらいは改行しなよ、ナス!

603:デフォルトの名無しさん
07/07/21 23:26:13
>>602
600です。すいません。改行が多いと言われてしまったので。
確かに読みずらいですよね。でも、お願いします。

604:デフォルトの名無しさん
07/07/21 23:27:08
>>603
上のほう見ろ、答えあるから

605:デフォルトの名無しさん
07/07/21 23:33:42
>>603
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利
URLリンク(kansai2channeler.hp.infoseek.co.jp)


606:519
07/07/21 23:34:53
>>553で、私の環境では特にエラー出ませんでした^^;

>>596さんのやつはどういう挙動になるんですか?


607:デフォルトの名無しさん
07/07/21 23:38:59
>>598
URLリンク(kansai2channeler.hp.infoseek.co.jp)

608:デフォルトの名無しさん
07/07/21 23:42:11
>>606
エラーはカンマとピリオドを打ち間違ってるところ、
警告は戻り地が無い関数なのにintで宣言してるところ。

609:デフォルトの名無しさん
07/07/21 23:47:36
>>604>>605
同じ書き込みがあったんですね。
ありがとうございます

610:デフォルトの名無しさん
07/07/21 23:54:29
>>606
あれで動くってどんな環境だよwww

611:デフォルトの名無しさん
07/07/22 00:02:17
>>607
助かりました☆

612:デフォルトの名無しさん
07/07/22 00:02:55
>>607
ここ> animal=(animal+direction+road_size)%road_size;
と、ここ> fp=fileopen("data");
仕様と違うと思う

613:デフォルトの名無しさん
07/07/22 00:06:51
>>598
道の右端と左端はつながってないの?

>>612
ファイル名の data1.txt data2.txt data3.txt ... になるんだけどどの辺が違う?

614:デフォルトの名無しさん
07/07/22 00:19:46
>>612 プログラムの冒頭に「系列ファイル文字列」をキーボードから入力するってあるので

同じだけど一応オレも。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

615:デフォルトの名無しさん
07/07/22 00:28:05
>>614
thx
見落としてた

>>598
>>607 はキーボードからの入力になってないので >>614 をどうぞ

616:デフォルトの名無しさん
07/07/22 00:33:28
>>607 は他にも間違いがある…orz

関数 fileopen 中の
fclose(fp);

else fclose(fp);

617:デフォルトの名無しさん
07/07/22 00:49:50
UPする前に質問します
C言語の筆記問題はスレ違いになるのでしょうか?


618:デフォルトの名無しさん
07/07/22 00:50:34
スレ違いではないとおもうけど、食指が動かない

619:デフォルトの名無しさん
07/07/22 00:51:12
別にいいんでね?質問する前にUPして欲しい。
すれ違いなら優しいおじさんが誘導してくれるかもしれない。

620:617
07/07/22 00:58:38
レスありがとうございます
食指は動かないかもしれませんが、後でUPしてみます

621:デフォルトの名無しさん
07/07/22 01:10:02
後でって、さっさとうpしろよw
みんな寝ちゃうぞ

622:デフォルトの名無しさん
07/07/22 01:23:50
2 4 6 30 32 34 36 40 42 44 46 50 52 54 56 60 62 64 66

この数列の、20項以降を表示させる関数を作れといわれたのですが
分かりませんでした

623:デフォルトの名無しさん
07/07/22 01:28:07
>>622
0は入らないのか?10台、20台は入らないのか?
数列の並びがよくわからん。

624:617
07/07/22 01:30:15
筆記問題なので、注意してくださいませ

[1] 授業単元: C言語 基礎&応用
[2] 問題文(含コード&リンク):
URLリンク(www-2ch.net:8080)
※jpegファイルが6つ入ってます(No1〜No6)
 No3〜No6までが、今回やってもらいたいファイルです
 No1とNo2は自分でも問題無かったので入れる必要は無かったのですが
 テスト形式なので(100点満点)、中途半端に抜かすのもどうかと思い入れました
 
[3] 環境
 [3.1] OS:windowsXP
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語:C言語
[4] 期限:23日のAM1時くらいまでが好ましいですが、25日くらいまで大丈夫です
[5] その他の制限:


625:デフォルトの名無しさん
07/07/22 01:56:58
>>622
それ英語のなぞなぞ (答えTwo thousands)

626:デフォルトの名無しさん
07/07/22 02:06:35
1時なんかもう過ぎてるだろボケ
・・・ボケは私です。
4-1 for(i=0;i<N;i++)b[i]=a[i]; 4-2 1
5-1 t1.a+t1.b; 5-2 5
6-1 4 6-2 7
7-1 return y; 7-2 (a)5 (b)20
8-1 (a) i=0; (b) (i<10) (c) += 8-2 84 8-3 6.800000 + 11.200000 i
8-4 (a) NULL (b)cellp->next 8-5 (a) b==0 (b) gcd( b, a%b )
9-1 変数 9-2 型 9-3 typedef 9-4 定義 9-5 桁オチ 9-6 情報欠落

かなりテキトー。特に用語のあたりとか。

627:デフォルトの名無しさん
07/07/22 02:10:56
>>622
答えは >>625 の言葉でググったら出てきたけど
プログラムで書こうとすると難しいよ

628:デフォルトの名無しさん
07/07/22 02:16:26
>>624
No.3
[4]
(1) : (a) 0 (b) N (c) b[i] = a[i]
(2) : (a) 1
[5]
(a) t1.a + t1.b (b) 5
[6]
(a) 4 (b) 7
[7]
・・・・・・・もうめんどくせ

629:デフォルトの名無しさん
07/07/22 03:17:14
>>622
#include <stdio.h>
int main(){int *a,*b,*c,*d,i=0,val;
int n[]={0,2,4,6,-1};int m[]={0,3,4,5,6,-1};
for(a=m;*a>=0;a++)for(b=n;*b>=0;b++)
for(c=m;*c>=0;c++)for(d=n;*d>=0;d++){
val=((*a*10+*b)*100+*c)*10+*d;i++;
if((i>20)&&(i<=320)) printf("%d\n", val);}return 0;}


630:デフォルトの名無しさん
07/07/22 04:37:34
設問者がなぞなぞ好きならそれはそれで良いのかもしれないが。
それで単位を取れるかどうかとなると、学生がちょと河合祖。

631:519
07/07/22 11:12:25
戻り値が無い関数はvoidがいいんですか?

632:デフォルトの名無しさん
07/07/22 11:16:21
そうだよ☆
でもmainだけは戻り値がいらなくてもintにするのが習慣みたいね

633:デフォルトの名無しさん
07/07/22 11:19:41
>なぞなぞ
また1つ賢くなった、ありがとう

634:デフォルトの名無しさん
07/07/22 11:23:57
>>632
お前は要らないかもしれないけど、システムにとって必要だよ。

635:519
07/07/22 11:35:30
あと . と , は直してアップしたつもりでした

636:デフォルトの名無しさん
07/07/22 11:37:10
>>622
#include <stdio.h>

int main(void)
{
    int i;
    for(i = 1; i < 100; i++)
        printf("%ld\t", i%4*2 + i/4*10 + (i < 4 ? 0 : 20));
    return 0;
}

英語のなぞなぞって何?

637:617
07/07/22 13:34:20
解答ありがとうございました
参考にさせていただきます!

638:デフォルトの名無しさん
07/07/22 15:14:48
>>632
習慣じゃなく規格で決まっている。

639:デフォルトの名無しさん
07/07/22 15:50:54
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
行列のサイズ n, m, l と,それに応じた n×m, m×l の行列が記録されたファイルを食べて,結果を別のファイルに書き出そう.

%cat testfile

3
2
3

3.2 4.8
8.2 6.5
4.3 -2.2

-5.0 6.2 8.9
3.5 -0.2 -5.8

であるとする.3×2, 2×3の行列の積をとり,3×3の行列を得る事になる.そこでプログラムを開発して、

% ./prog0 testfile ANSWER

とすれば,積が ANSWER というファイルに書き込まれるようにせよ.argv[], argc, fscanf(), fprintf() を総動員する.
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Linux
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 7/25まで

よろしくおねがいしますm(_ _)m

640:デフォルトの名無しさん
07/07/22 15:51:45
argv[], argc, fscanf(), fprintf() を総動員する.
ワロタ

641:デフォルトの名無しさん
07/07/22 16:07:42
>>639
もうマジで日本語でおk

642:デフォルトの名無しさん
07/07/22 16:11:50
入力テキストは
n
m
l

行列1

行列2
って形式なんだろう

643:デフォルトの名無しさん
07/07/22 16:31:25
>結果を別のファイルに書き出そう.

>そこでプログラムを開発して、

出題者はどういうノリなんだ。

644:デフォルトの名無しさん
07/07/22 16:35:10
>>639
#include <stdio.h>
#define N 128
int main(int argc, char *argv[])
{
    FILE *fpin, *fpout;
    int n, m, l, i, j, k;
    double mat1[N][N], mat2[N][N], mat3[N][N];
   
    if(argc < 3 || (fpin = fopen(argv[1], "r")) == NULL || (fpout = fopen(argv[2], "w")) == NULL) return 1;
   
    fscanf(fpin, "%d%d%d", &n, &m, &l);
    for(i = 0; i < n; i++)
        for(j = 0; j < m; j++)
            fscanf(fpin, "%lf", &mat1[i][j]);
    for(i = 0; i < m; i++)
        for(j = 0; j < l; j++)
            fscanf(fpin, "%lf", &mat2[i][j]);
   
    for(i = 0; i < n; i++){
        for(j = 0; j < l; j++){
            mat3[i][j] = 0;
            for(k = 0, mat3[i][j] = 0; k < m; k++)
                mat3[i][j] += mat1[i][k]*mat2[k][j];
            fprintf(fpout, "%f ", mat3[i][j]);
        }
        fprintf(fpout, "\n");
    }
   
    fclose(fpin), fclose(fpout);
    return 0;
}

645:デフォルトの名無しさん
07/07/22 16:36:27
学校行けよ

646:デフォルトの名無しさん
07/07/22 16:45:22
今時期は夏休み返上で赤点補習かな

647:デフォルトの名無しさん
07/07/22 16:53:38
>>644
出来ました。ありがとうございますm(_ _)m


648:デフォルトの名無しさん
07/07/22 17:39:10
はしかのせいで補習のやつが多そうだな

649:デフォルトの名無しさん
07/07/22 17:46:05
なるほど、失速しないのはその影響か。

650:デフォルトの名無しさん
07/07/22 18:52:14
行列matの転置行列を求めて次のように出力するプログラムを完成させよ。

| 1 6 11 16 21 |
| 2 7 12 17 22 |
| 3 8 13 18 23 |
| 4 9 14 19 24 |
| 5 10 15 20 25 |


651:デフォルトの名無しさん
07/07/22 18:52:45
#include <stdio.h>
#define MSIZE 5
void swap(int *a, int *b) {
int c;
(a) = *a;
*a = *b;
*b = (a) ;
}
void main(void) {
int i, j, mat[MSIZE][MSIZE] = { { 1, 2, 3, 4, 5},
{ 6, 7, 8, 9,10},
{11,12,13,14,15},
{16,17,18,19,20},
{21,22,23,24,25} };
for(i = 0; i < MSIZE - 1; i++) {
for(j = (b) ; j < (c) ; j ++) {
swap( (d) , (e) );
}
}
for(i = 0; i < MSIZE; i ++) {
printf("|");/25小計
for(j = 0; j < MSIZE; j ++) {
printf("%3d ", mat[i][j]);
}
printf(" |\n");
}
}

さっぱりわかりません
よろしくお願いします

652:デフォルトの名無しさん
07/07/22 18:53:43
あるカップラーメンの値段を店ごとに調べた.それを配列に
入れて,下の出力のように10円刻みに分布をとることを考える.
そのためのプログラムを下に示す.空白を補え.

80- 89円: 2
90- 99円: 2
100-109円: 1
110-119円: 2
120-129円: 1
130-139円: 2


653:デフォルトの名無しさん
07/07/22 18:55:33
#include <stdio.h>
#define C_NUM 6

void makedist(int a[10], int b[C_NUM]) {
int i;

for(i = 0; i < 10; i ++) {
b[ (a) ] += 1;
}
}

void main(void) {
int price[10] = {80, 120, 111, 130, 139, 95, 98, 89, 105, 119};
int dist[C_NUM], i;

for(i = 0; i < C_NUM; i++) {
dist[i] = (b) ;
}
makedist( (c) , dist);
for(i = 0; i < C_NUM; i++) {
printf("%3d-%3d円: %3d\n", (d) ,
(e) , dist[i]);
}
}

これもさっぱりです・・・
教えてください



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5384日前に更新/328 KB
担当:undef