C/C++の宿題を片付け ..
2:デフォルトの名無しさん
07/06/23 23:16:54
>>1
乙
3:前スレ978
07/06/23 23:26:29
前スレ>>979、>>981さんレスどうもです。無事動作しました。
[1] 授業単元:プログラム技術3
[2] 問題文(含コード&リンク):
main(int argc char , *argv[]){
int i;
printf("%d argument(s).Yn" , argc -1);
for(i=0; i<argc; i++){
printf("argv[%d] : \"%s\"\n", i , argv[i]);
}
}
引数の順序を入れ替えてた後(*argv[] , int argc char)、入力した文字を逆順に出力するようにしたいのですが、変数以外
何処を変更したらいいのでしょうか?for文あたりを弄っても上手くいきませんでした。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 6月26日
[5] その他の制限: (ポインタを習ってるレベルです)
4:デフォルトの名無しさん
07/06/23 23:48:33
>>3
文字を逆順の意味がはっきりせん。複数の文字列をそれぞれ入力した順番から逆にするのか
それぞれの文字列の文字を逆順にするのか。それから、引数間違っているから
ちゃんと覚えてくれ。 int main(int argc , char *argv[]) やで
5:デフォルトの名無しさん
07/06/23 23:55:14
URLリンク(c0x.coding-guidelines.com)
160 The function called at program startup is named main.
161 The implementation declares no prototype for this function.
162 It shall be defined with a return type of int and with no parameters:
int main(void) { /* ... */ }
163 or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
6:デフォルトの名無しさん
07/06/24 06:08:18
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):
図書カードカタログ:
1.入力
2.著者名による検索
3.書名による検索
4.終了
選択項目を入力して下さい:
ユーザーが1を選んだら書名、著者名、出版社の順に書名先頭に空白行が入力させるまで繰り返し入力させ続ける。
2,3を選んだ場合は特定の著者か書名を入力させ一致するものがあればその残りの情報も出力させる。
4.で終了
[3] 環境
[3.1] OS: (Windows/Linux/等々)WinXP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)Borland C++ Compiler 5.5
[3.3] 言語: (C/C++/どちらでも可 のいずれか)cのみ
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)無期
[5] その他の制限:ループ、if、switch、ポインタ、配列、自作関数まで習った、
使用可能なライブラリ stdio.h string.h conio.h stdlib.h ctype.h
自分で書いたコードです
URLリンク(kansai2channeler.hp.infoseek.co.jp)
なんかごちゃごちゃしてわかりにくくなってしまいました
あと、なんども検索してるとバグっておかしくなってしまいます
もっとキレイにうまく改善できませんか?
7:デフォルトの名無しさん
07/06/24 07:46:14
[1] 授業単元:アルゴリズム
[2] 問題文:10リットル、8リットル、3リットルの容器があり、10リットルの容器に水がいっぱい入っている。
この3つの容器を用い、3リットルの容器に1リットルの水を取り出す最小の手順を答えよ。ただし、水を移す時は、移す側が空になるか、移す側がいっぱいになってときとする。
幅優先探索と言うのを用いるそうです。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 5.5.1
[3.3] 言語: C
[4] 期限: 6月25日の2400まで
[5] その他の制限:バケツの水の入り方を、座標に見立て、その座標に番号をつけ、広がり優先探索を用いる。
どうしたら良いかわからず、焦っています。
似たような問題が89代目のスレッドにありましたが、制限が違っていて対処できませんでした。
急ですがよろしくお願いします
8:デフォルトの名無しさん
07/06/24 07:52:31
>>7
状態は
8L 容器に入っている水の量 0-8
3L 容器に入っている水の量 0-3
9*4=36 種の状態を取り得るってことで解くのでおk?
9:デフォルトの名無しさん
07/06/24 07:52:43
これって
10Lから3L汲み出す&捨てる×3回繰り返す、残った1Lを3Lの容器に入れる
のが最短?
10:デフォルトの名無しさん
07/06/24 08:15:03
スレリンク(tech板:1000番)
スレリンク(tech板:151番)
11:デフォルトの名無しさん
07/06/24 08:23:39
前スレ>>983 (2)
#include <stdio.h>
int foo(int input[5][5], int ii, int jj){
int i, j, total = 0;
if(input[ii][jj] == 1) return 0;
for(i = ii + 1; i < 5 && input[i][jj] == 0; i++) total++;
for(i = ii - 1; i >= 0 && input[i][jj] == 0; i--) total++;
for(j = jj + 1; j < 5 && input[ii][j] == 0; j++) total++;
for(j = jj - 1; j >= 0 && input[ii][j] == 0; j--) total++;
return total;
}
int main(void){
int input[5][5], i, j;
for(i = 0; i < 5; i++)
for(j = 0; j < 5; j++)
scanf("%1d", &input[i][j]);
for(i = 0; i < 5; i++){
for(j = 0; j < 5; j++)
printf("%d ", foo(input, i, j));
putchar('\n');
}
return 0;
}
12:デフォルトの名無しさん
07/06/24 09:15:59
>>6
とりあえず制限事項に外れる入力が無ければ大丈夫に見えるけど、
どういう風に入力したら、どうおかしくなったのか、詳しくヨロシク。
13:前スレ978
07/06/24 09:16:00
>>4
スマソ。複数の文字をそれぞれ入力した順番から逆に出力したいんです。
現状ですと、./a.out a b c と入力すると、[1]a [2]b [3]cと出力されます。
それを、./a.out a b c と入力して、[1]c [2]b [3]aと出力される
ようにしたいんです。どうしたら良いでしょうか?
それと、mainの前のintって必要なのでしょうか?
授業で習ったサンプルの文にはintは無かったのですが・・・。
main(ここでintの宣言をしてるので必要ないような気がするのですが)
お手数ですが、回答よろしくお願いします。
14:デフォルトの名無しさん
07/06/24 09:29:48
>>3 >>13
習った習わないはともかく、国際的な標準スタイルってことで
それくらい知っておくべきだと講師に言っておきんしゃい。
#include <stdio.h>
int main(int argc , char *argv[]) {
int i;
printf("%d argument(s).\n" , argc -1);
for(i=argc-1; i>=1; i--){
printf("argv[%d] : \"%s\"\n", i , argv[i]);
}
return 0;
}
15:デフォルトの名無しさん
07/06/24 09:32:14
>>5 にISO準拠におけるC言語の、プログラムの開始の関数と
mainが返す値について書かれているから。まさか、この程度の
英語も理解できんとは言わせないよん。
16:前852
07/06/24 09:37:38
前992さん
(1),(2)です
17:前スレ978
07/06/24 10:15:18
>>14
レスどうもです。上手く動きました。どうもです。
>>15
あれ、漏れへのレスだったのですね。気付きませんでしたorz
それにしてもmain関数手前にintを置くのが正しいスタイルだったんですねorz
授業ノートを見返してみましたが、書かれてるソースには一つもmain手前にintが
ありませんでした・・・。
次週の講義の際に講師に質問してみます。
18:デフォルトの名無しさん
07/06/24 10:19:24
2ch の宿題丸投げスレで宿題解いて貰ったんですが、
main の前に int がついています。どういう意味でしょうか?
もしこんなことも分からないようなら
勉強不足な講師だな ププッ って言ってました
19:デフォルトの名無しさん
07/06/24 10:29:51
前スレで修正後プログラムがまだでして、再書き込みさせてもらいます。
[1] 授業単元:C++研究
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)(問題文)
URLリンク(kansai2channeler.hp.infoseek.co.jp)(修正前プログラム)
上記のプログラムと、その上記のプログラムを修正した、↓(修正プログラムの問題文)
値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して、
ある値が出た場合のみポイントが復活する機能を追加しなさい
(ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。
自分とは男を指します。キーボードから自分1〜20の値を任意に決めれるようにします。
ある値が出た場合、そのある値が15の場合、15がでたときに、その勝負が行われた直後に
1〜20ポイントランダムでポイントが自分の持ちポイントに加算される。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年6月26日12:00まで]
[5] その他の制限:特になし
内容がややこしいですが、どうかよろしくお願いします
20:デフォルトの名無しさん
07/06/24 10:30:52
>>17
くどいようだが、あくまでも 標準スタイル、ANSI、ISO準拠によるものであって
そのスタイルを無視しても問題ない環境では本当に問題はないぞな。
あくまでも幅広い環境で通用する標準スタイル。
21:前852
07/06/24 10:43:05
URLリンク(kansai2channeler.hp.infoseek.co.jp)
表示もうまく出るようになったのですが
出力結果を見るとソートがうまくいっていないような感じです。
(ちゃんと合計点降順になっていません)
もともとクイックソートは昇順で作っていたので、
条件分岐を逆にしただけなのですが、
これが原因でしょうか?(コメント行は書き換えてないです。)
22:デフォルトの名無しさん
07/06/24 12:11:26
>>7
やってみたが解なしになってしまった。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
なんか間違ってんのかな。
23:デフォルトの名無しさん
07/06/24 12:46:15
>>7
幅優先むずいな
24:984
07/06/24 13:01:15
>>21
quick()の再帰呼出しを、whileブロックの外に出す。
quick_sub()もそうだな。
input()の
while(fgets(buf,sizeof(buf),fin) > 0){ を
while(fgets(buf,sizeof(buf),fin) != NULL){ に訂正してくれ
25:デフォルトの名無しさん
07/06/24 13:22:29
[1] 授業単元:
[2] 問題文(含コード&リンク):
2次方程式
ax^2 + bx + c = 0
は,判別式
Δ^2 = b^2 - 4ac
により,(a)2つの実数解をもつ,(b)1つの実数解(重解)をもつ,(c)2つの虚数解をもつ,の3つの場合に分けられる.
3つの正整数a,b,cを引数とし,実数値sqrt(b2-4ac)を戻り値とし,b2-4acが負の場合はエラーを示す値を戻り値とするユーザ定義関数delta()を作成せよ.
作成したユーザ定義関数を用いて,3つの正整数a,b,cをキーボードから入力し,2つの実数解を表示するプログラムを作成せよ.
ただし,重解をもつ場合と虚数解をもつ場合はその旨表示したうえで,再度a,b,cの入力を促すようにし,2つの実数解をもつ方程式が入力されるまで繰り返すようにすること.
[実行結果]
3つの係数を入力して: 1 2 1
重解を持つよ!入力し直して。
3つの係数を入力して: 1 1 1
虚数解を持つよ!入力し直して。
3つの係数を入力して: 2 9 3
2x^2 + 9x + 3 = 0 の2つの実数解は
x = -0.362541 と x = -4.137459
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC
[3.3] 言語: C
[4] 期限: 2007年6月29日まで
[5] その他の制限: ポインタは禁止。制御構文はfor・while・ifのみ。break・continueは禁止。キーボードからの入力はscanfで拾うこと。
26:22
07/06/24 13:55:53
>>7
うーん。条件もう一度確認してみて。
> 移す側がいっぱいになってとき
じゃなくて、「移される側がいっぱいになるとき」
と読みかえると、解が出るんだが。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
canmove() の中の
#if 0 を #if 1 に変更すると、>>7 に書いてある通りの動作になるが、
解なしになる。
main() の中の #if を同様に変更すると、探索の途中経過を表示する。
27:デフォルトの名無しさん
07/06/24 14:48:59
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):”rand1000.dat”というデータの個数nとその個数分の整数データが保存されているファイルがある
(URLリンク(kansai2channeler.hp.infoseek.co.jp))
次の手順で動作するプログラムheapsort.cを作成し,その動作を確認せよ.
まずファイルから保存されているデータ数nを読み込む.
データを1つ読み込み,ヒープを構成する.
これをn回繰り返し,その度にヒープを構成する.
すべてのデータを挿入し終ったらヒープが完成するので,データを木構造がわかるようにディスプレイ上に表示する.
次に,deletemax()関数をn回呼び出し,ソート処理を進める.
最後に,整列されたデータをディスプレイ上に表示しプログラムを終了する.
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
[3.3] 言語: C
[4] 期限: 6月26日 夜まで
[5] その他の制限:木構造のディスプレイ表示方法は各自に任せる.
結果がソートされていることをそれぞれのデータについて毎回確認すること.
どなたか解る方、解いていただけるとありがたいです。
28:デフォルトの名無しさん
07/06/24 14:49:25
>>25
それ前スレに同じ問題あったぞ
回答は954かな
29:前852
07/06/24 14:54:02
>>24
コンパイルが通らなくなりました。
In file included from /usr/include/stdlib.h:33,
from seiseki.c:19:
/UNIONFS/usr/bin/../lib/gcc/i486-linux-gnu/4.0.4/include/stddef.h:214: error: syntax error before 'typedef'
30:デフォルトの名無しさん
07/06/24 15:10:00
>>6
斜め読みしただけだが。
search1()
> while(p[i] != ' '){
→ while(1) { に。
search2()も同様の変更。
31:前852
07/06/24 15:16:17
quickの再起をwhileの外にした時点で実行すると
処理中 を表示する前に[SegmentationFault]
!= NULLにしても同上
です。
32:デフォルトの名無しさん
07/06/24 15:33:46
>>26
多分>>7のタイプミスと思われ
33:984
07/06/24 15:34:52
>>31
>条件分岐を逆にしただけなのですが
この修正が怪しい。
quick()内の判定条件を見直せ。
3,4件の小さなデータを使い、
処理を追いかけてみるといい。
これは自力でできると思う。
34:前852
07/06/24 15:44:08
>>33
> < を逆にして < > にすべきところを <= >= にしていたのが原因だったみたいです。
無事完成しました。
今までご協力してくださったみなさま、
本当にありがとうございます!
35:984
07/06/24 15:59:27
ソートのロジックは何か変だなと思います。
何かを参考にしたのでしょうか。
一度見直した方が良いようです。
36:前852
07/06/24 15:59:48
//データを構造体配列に取り込んでいく
while(fgets(buf,sizeof(buf),fin)>0){
p = buf;
field[0] = buf;
j = 1;
if(buf[strlen(buf)-1] == '\n'){
buf[strlen(buf)-1] = 0;
}
while(*p != 0){
if(*p == ','){
*p = 0;
field[j++] = p+1;
}
p++;
}
ここの流れ(挙動?)がよく分からないのですがどういう感じでよみこんでいってるんでしょうか?
37:前852
07/06/24 16:01:01
ソートですが、書籍に載っていた物をそのまま使い昇順ソートを作った物を
大小の判別っぽいところを逆にして降順ソートにしました。
38:デフォルトの名無しさん
07/06/24 16:06:14
あんた甘えすぎ
39:前852
07/06/24 16:08:36
>>38
うっせーよ、カス
40:デフォルトの名無しさん
07/06/24 16:21:08
甘えん坊にカスと言われた>>38、可哀想っす
>>36 きっとね、いい感じに読み込んでると思うよ、テヘ
41:前852
07/06/24 16:35:51
39は偽物ですよ
42:デフォルトの名無しさん
07/06/24 16:42:36
以下のプログラムを書いたんですが
データ数が多いせいかSystem.StackOverflowException'のハンドルされていない例外
となってしまいます。 解決方法を教えてください。 お願いします。
/*畳み込み和を求めるプログラム*/
#include <stdio.h>
#define FMAX 1000000 /*関数f(τ)のデータ数 「100万個」 */
#define GMAX 1000000
main()
{
int f[FMAX]; /*関数f(τ)*/
int g[GMAX]; /*関数g(τ)*/
int sum[FMAX+GMAX-1] = {0}; /*畳み込みの結果を入れる変数*/
int i,t;
/*関数f,gの初期値の代入(全て1)*/
for (i=0;i<FMAX;i++ )
f[i]=1;
for (i=0;i<GMAX;i++ )
g[i]=1;
/*畳み込み和の計算*/
for (t=0; t< FMAX+GMAX-1; t++){
for( i=0 ; i<GMAX; i++){
if ( t-i >= 0 && t-i < FMAX)
sum[t] += f[t-i]*g[i];
}
}
/*計算結果の表示*/
for (t=0 ; t<FMAX+GMAX-1; t++)
printf("%d,",sum[t]);
}
43:デフォルトの名無しさん
07/06/24 16:46:33
>>42
一気にやろうとしないで小分けにすれば?
44:デフォルトの名無しさん
07/06/24 16:46:55
配列宣言の頭に static をつける
45:ぴっころ
07/06/24 16:48:52
初めまして。これから度々お世話になるかもしれませんが宜しくお願いします。
今はC言語で0をある数で割るとどうなるのかが分かりません。
ある数を0で割るとエラーになる事は調べて分かったのですが。
46:デフォルトの名無しさん
07/06/24 16:50:57
>>45
いや、0だと思うんだが・・・
47:デフォルトの名無しさん
07/06/24 16:52:05
c言語に限らず0だろ
48:デフォルトの名無しさん
07/06/24 16:54:17
>>45は0ではなく'0'を割ったんだろ
49:デフォルトの名無しさん
07/06/24 17:00:21
>>45
グダグダ言ってないで、無料のCコンパイラ拾ってきてやってみろ
頭で考えたり、誰かに聞くよりより、実際にやってみた方が身に付く
少数点に','使う奴がいたり、0をある数字で割るとどうなりますかと
聞く奴がいたり、この国の教育はどうなってるんだよ。
50:デフォルトの名無しさん
07/06/24 17:04:21
小数点にカンマを使うのは、ヨーロッパのどこかだったような
51:ぴっころ
07/06/24 17:05:24
>>49
どんなコードを書けば、y = x / 0; のyの値を確認できますか?
エラーで終わってしまうんです。すみませんが教えてくださいお願いします。
52:デフォルトの名無しさん
07/06/24 17:08:12
自動配線ツールをCで書こうと思ってるんですけど。
アルゴリズムはmazeをベースで。
書くときに参考になるソースコードとかってどっかに落ちてるものなんでしょうか?
アルゴリズム分かっても、書くのが素人なので、どれ位の規模(行数)になるかとか、必要な関数が予想つきません。
サンプルなどがあればと思って質問させていただきました。
誘導していただければ幸いです。
53:デフォルトの名無しさん
07/06/24 17:09:53
>>51
その処理は未定義。どうしても確認したければ
int x = 3;
int y;
x -= 3;
y = 3 / x;
printf( "%d", y );
ちなみに、VC++6.0では実行時エラー。
54:デフォルトの名無しさん
07/06/24 17:12:57
>>52
スレ違い
55:ぴっころ
07/06/24 17:14:14
確かに。
次に来た時にはもう少しマシな質問をしたいと思いますので、よろしく
お願いします。
ありがとうございました。
56:ぴっころ
07/06/24 17:19:42
>>53
確認有難うございます。やっぱりエラーでますか
>>49 の
>グダグダ言ってないで、無料のCコンパイラ拾ってきてやってみろ
から、確認する方法がある(少なくとも>>49サンは知ってる)と思ったのですが..
57:デフォルトの名無しさん
07/06/24 17:26:34
もうくんな
58:984
07/06/24 17:28:17
>>36
fgetsはファイルから1行ずつ読み込む。読めなくなったらNULLを返す。
if...でしていることは、行末の改行コードを取り除く事。
内側のwhileでは、行の先頭から','を見つけ、文字列の分割をしている。
処理を終わると、bufの中はNULLで区切られた複数の文字列となり、
ポインタ配列には各文字列の先頭が格納される。
59:デフォルトの名無しさん
07/06/24 17:28:34
>>56
エラーが出るって事で確認した事にはならんのか?
60:42
07/06/24 17:33:36
>>44
教えていただいたように
static int sum[FMAX+GMAX-1] ;
としてみたら、動作しました。(よく分かってませんがw)
ありがとうございましたー
61:デフォルトの名無しさん
07/06/24 17:36:37
>>56
0除算時の動作は未定義。よって、どんな動作をしても規格上問題ない。
プログラムがランタイムエラーになっても、演算結果が0になっても、そこで無限ループに陥ってもOK。
URLリンク(www.st.rim.or.jp)
宿題スレよりこっちのほうがいいと思う。
C言語なら俺に聞け(入門篇) Part 14
スレリンク(tech板)
くだすれC言語(初心者用) Part.2
スレリンク(tech板)
62:前852
07/06/24 17:38:03
>>58
ということは、fgetsのところで処理をすれば、
1行がどれくらいの文字数あるかとかも判別できると言うことですか?
63:ぴっころ
07/06/24 17:41:08
printf("%d\n",data) でdata=-600の場合に-600と出力されるのでしょうか?
実際にやってみろと言われそうですが、コンパイラのダウンロードの仕方
とかが良く分からないもので
64:デフォルトの名無しさん
07/06/24 17:42:02
帰れ
65:984
07/06/24 17:42:47
>>62
そういう処理を加えれば出来るでしょうが。
文字数が想定以上に長いときの事も考慮する必要がありますね。
66:デフォルトの名無しさん
07/06/24 17:43:41
>>63
コンパイラのダウンロードがわからないならまずはそこから試したほうがいい。
ネットでちょっと検索すれば導入をわかりやすく解説しているサイトなんて山ほどある。
手コーディングが悪いとは言わんが、時代にあってないと思う。
あ、あと質問の答えはそのとおり。-600って表示される。
けどココは宿題スレだからすれ違い。
67:ぴっころ
07/06/24 17:43:58
>>59
エラーだよっていうのは >>45で聞く前から確認済みです。
>>45の調べた=>自分でコードを書いて調べてみたということです。
それを踏まえてココで聞いたのでが..そしたら>>49のレスです
68:デフォルトの名無しさん
07/06/24 17:50:26
手コーディングって、コードの自動生成と比べて、手作業でソースを書いていく作業という意味でOK?
69:デフォルトの名無しさん
07/06/24 17:51:06
>>63 ぴっころ ココは宿題回答スレだから
C言語については、こっちで聞け!
スレリンク(tech板)l50
70:デフォルトの名無しさん
07/06/24 17:52:29
>>68
ごめん、そういうつもりで手コーディングって言ったんじゃないw
紙とペンでコーディング、デバッグとかをするって意味で使った。
わかりづらい上に時代遅れでスマソ
71:デフォルトの名無しさん
07/06/24 17:53:22
あえて言うなら、机上コーディングか
72:ぴっころ
07/06/24 17:55:30
スレ住民の方々お騒がせしてすみません。
紹介して貰ったスレに移ります。
応えてくれた方々ありがとうございました。
失礼します。
73:デフォルトの名無しさん
07/06/24 17:58:01
個人的には「ペーパーコーディング」と「机上デバッグ」
74:デフォルトの名無しさん
07/06/24 18:10:57
手コーディングの“手”が紛らわしいな
75:デフォルトの名無しさん
07/06/24 18:14:23
若い人はハンドアセンブルなんて知らないだろな〜
76:デフォルトの名無しさん
07/06/24 18:32:29
知らないけど、聞くだけでもめんどくさそうだなw
77:デフォルトの名無しさん
07/06/24 18:38:28
簡単だよ、ニモニック表が頭に入っていれば。
多少の暗算も必要になったりはするけどね。
78:デフォルトの名無しさん
07/06/24 18:41:52
>>27
表示が超手抜きだが(配列をそのままベタで表示するだけ)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
79:デフォルトの名無しさん
07/06/24 18:56:25
[1] 授業単元:C言語
[2] 問題文:次の計算を行うプログラムを作成せよ。
C=B/X
Bは三行三列の行列
B 5 -2 2
2 3 1
1 2 2
X=3
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 2007年6月24日pm:11:00
です。よろしくおねがいします。
80:デフォルトの名無しさん
07/06/24 19:02:56
初めて1ヶ月少々なのですが自分で数当てゲームを作ってみました
一応動作し、正解の数もランダムで取得できるようにはなっていますが
ここはこうしたらよい、とかあったらありがたいな、と思い
カキコしてみました。不具合、というか汚い書き方だとは思いますがヨロシクお願いします。
長いので次のレスで書きます
81:デフォルトの名無しさん
07/06/24 19:10:24
>>1を読め。
82:デフォルトの名無しさん
07/06/24 19:10:35
>>80
ロダにUp汁
83:デフォルトの名無しさん
07/06/24 19:20:44
>>80
次のレスまだ〜〜〜?もしかして、次の スレ ってオチ?w
84:依頼者
07/06/24 19:31:12
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
変数xのyビット目の値を返す関数int bit_test(int x,int y)の作成。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio.net
[3.3] 言語:C++
[4] 期限: 07年6月25日まで
[5] その他の制限:特になし
演算子の問題ですがまったくわかりません。どなたかお願いします。
85:デフォルトの名無しさん
07/06/24 19:34:22
前スレにも他のスレにもあったな。
>>84
int bit_clear(int x,int y){return x&~(1<<y);}
int bit_test(int x,int y){return (x&(1<<y))>>y;}
86:42
07/06/24 19:46:42
>>44さんに教えて頂いたとおりで、動いたのですが。
配列宣言の頭にstaticをつける意味が分からなかったので、教えていただきたいです。
そもそも、なんでエラーになってるのかも分からない始末ですorz
少し調べたんですが、malloc というのを使えば領域確保?できるんでしょうか?
87:デフォルトの名無しさん
07/06/24 19:49:45
[1] 授業単元: 2年プログラミング実習
[2] 問題文(含コード&リンク): 電卓計算のための、数式変換プログラムを作成せよ。
逆ポーランド法へと変換し、それを要素ごと配列へと格納せよ。
[3] 環境
[3.1] OS: Windows xp
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 6.25
[5] その他の制限:
最終的に、配列に文字型で式が格納されていること。
演算子の判別にはswitchを用いて、関数を作成する事。
switchの部分がわからんのだが、多分+なら1、-なら2と返す関数を作れって事だとおも。
最初の数式はargvは使わず、プロンプトメッセージの後にfgetsで読み込んでます。
88:デフォルトの名無しさん
07/06/24 20:08:35
>>79
#include <stdio.h>
int main(void)
{
int i,j,X=3,c[3][3]={0};
int b[3][3]={{5,-2,2},
{2, 3,1},
{1, 2,2}};
for(i=0;i<3;i++){
for(j=0;j<3;j++){
c[i][j]=b[i][j];
}
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%3d/%d",c[i][j],X);
}
printf("\n");
}
return 0;
}
私も初心者なんですが、書いてみました。
問題の意図にそくして無いかも。
それに配列cは用意する必要は無い気がするんだけどね…。
89:デフォルトの名無しさん
07/06/24 20:18:49
[1] 授業単元:プログラミング技術3
[2] 問題文(含コード&リンク):
/*(1)date.txtというファイルを用意し、次のプログラムを実行せよ。
(2)このプログラムを書き換え、ファイル名をコマンドラインから指定出来るようにせよ。*/
#include<stdio.h>
#include<stdlib.h>
int main(void){
char c;
char filename[] = "date.txt";//ファイル名
FILE *fp; //ファイルポインタ
//ファイル「読み込み」で開く
if ((fp == fopen(filename "r")) == NULL){
printf("File dose not exist. \n");
exit(1);
}
//ここからファイルを読み込んで処理
//例 一文字入力し表示
wile((c=getc(fp))!=EOF){
printf("%d\n" , c);
}
//開いたファイルを閉じる
fclose(fp);
}
[EOF]
↑
全くと言って分かりません。完全にお手上げです。
少々の解説も付加してくださると助かります。
よろしくお願いします。
90:デフォルトの名無しさん
07/06/24 20:20:25
>>87
switchの部分は↓的なことだと思う。
switch( ope ) {
case '+':
iAns += iNum;
break;
case '-':
iAns -= iNum;
break;
(以下略)
91:89
07/06/24 20:20:27
続きです。
[3] 環境
[3.1] OS:LINUX
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C++
[4] 期限: 07年6月26日まで
[5] その他の制限:ポインタを少々習った程度です。
92:デフォルトの名無しさん
07/06/24 20:20:29
>>87
前スレの回答ではお気に召さなかったということかな?
それっぽく直したよ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
93:デフォルトの名無しさん
07/06/24 20:25:42
>>86
配列は領域を連続で確保できなければいけない。
mallocを使ったところで、確保できる保証は無い。
staticをつけた場合は、確保するために使用する領域が異なるため上手く行っているだけ。
(staticウンヌン部分について自信なし。詳しい人補足plz)
94:デフォルトの名無しさん
07/06/24 20:28:17
>>93
取り敢えず間違ってはいないよ。
95:デフォルトの名無しさん
07/06/24 20:29:14
>>89 変更部分だけ
int main(int argc, char *argv[]) {
char c;
FILE *fp;
if(argc<2) {
printf("ファイル名の指定がねぇ〜ぞゴルァ!\n");
return 1;
}
if((fp=fopen(argv[1],"r"))==NULL){
96:デフォルトの名無しさん
07/06/24 20:52:01
>>97
・・・?前スレ?重複質問だったのか?
とりあえず見てみた。マジ有難い。
提出用に少し変更してみて、不明な所があれば聞くかも知れないが、大丈夫かな。
97:デフォルトの名無しさん
07/06/24 20:52:16
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
以下のコマンドを実行可能な名簿管理システムを作成せよ。
1. メンバの追加
2. メンバの削除
3. メンバリストを名前順(アルファベット昇順)で表示
4. メンバリストのファイル出力
5. 引数として"-f ファイルパス"を指定することによるメンバ初期データの読込
メンバ情報としては、最低限、名前と学生番号を持つこと。システムの拡張は自由に行ってよい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限:無期限
[5] その他の制限:構造体、ポインタがつかえるとよい
どうかよろしくおねがいします
98:デフォルトの名無しさん
07/06/24 20:52:40
>>96
>>92で
99:89
07/06/24 20:54:06
>>95
レスどうもです。
え〜と、main関数内の変更とファイルポインタの下にif(argc<2) { を
printfの下にリターン文を、書けって事でいいんですか?
また、if((fp=fopen(argv[1],"r"))==NULL){ は
return1
exit(1);
}
if((fp=fopen(argv[1],"r"))==NULL){
のようにすればいいのでしょうか?
100: ◆sJh8mwqDUo
07/06/24 20:58:03
[1] 授業単元: C言語入門(配列・関数)
[2] 問題文:
1. 0からN-1の間の擬似乱数整数を返す関数(myrandと名前をつける)を作成しなさい。
2. myrandでm×N個の擬似乱数を発生させて、出現しなかった整数の個数を、N個発生させる毎に求めなさい。
ただし、Nは1000以上に#defineし、mは実行時にキー入力するものとする。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 6月27日夜
[5] その他の制限:
main関数にすべての処理を書くこともできるが、そうしないで関数に分割すること。
乱数発生関数の初期化を忘れないこと。
上記の通りです。どなたかできる方、よろしくお願いします。
101:デフォルトの名無しさん
07/06/24 21:03:10
101
102:デフォルトの名無しさん
07/06/24 21:11:30
>>100
関数に分割するって、どこをすればいい?
無理矢理関数にしたほうがいいか?
URLリンク(kansai2channeler.hp.infoseek.co.jp)
103: ◆sJh8mwqDUo
07/06/24 21:15:24
>>102
レスありがとうございます。
用はmyrandの関数をちゃんと作れって事ですかね。
実行結果がよければOKなのでどう解釈してもいいと思います。
104:デフォルトの名無しさん
07/06/24 21:26:37
>>96
うん重複だけど、注文のつきかたで、てっきし同じ人かと思った
質問は別にいいけど、あんまりしつこくはしないでね
めんどくさいからw
105:デフォルトの名無しさん
07/06/24 22:02:39
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):
右利きの奴が左曲がりであることを検証するプログラムを作成せよ。
[3] 環境
[3.1] OS: (Windows/Linux/等々)WinXP
[3.2] コンパイラ名とバージョン: gcc 3.4 or VC5以降
[3.3] 言語: C/C++/どちらでも可
[4] 期限: 6/24中
[5] その他の制限:使用可能なライブラリ stdio.h string.h stdlib.h memory.h
106:デフォルトの名無しさん
07/06/24 22:12:08
[1] 授業単元: 複雑学
[2] 問題文(含コード&リンク):
次のH´enon 写像(エノン写像) のボックスカウンティング次元を考える.
(Xn,Yn)→(Xn+1,Yn+1)=(Yn+1-a*X^2*n, b*Xn) :a = 1.4, b = 0.3 に固定する.
10×10分割したマス目内にアトラクタの点が入っているかどうか調べる.点が入っているマス目の数を数えよ
サンプルプログラム URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 25日正午
[5] その他の制限: 特にナシ
107:デフォルトの名無しさん
07/06/24 22:14:34
> ところどころ■で隠してあります
どうでもいいけど
ちょっとエロいな
108:デフォルトの名無しさん
07/06/24 22:17:13
[1] 授業単元: 複雑学
[2] 問題文(含コード&リンク):
次のH´enon 写像(エノン写像) のボックスカウンティング次元を考える.
(Xn,Yn)→(Xn+1,Yn+1)=(Yn+1-a*X^2*n, b*Xn) :a = 1.4, b = 0.3 に固定する.
10×10分割したマス目内にアトラクタの点が入っているかどうか調べる.点が入っているマス目の数を数えよ
サンプルプログラム URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 25日正午
[5] その他の制限: 特にナシ
よろしくお願いします。
109:デフォルトの名無しさん
07/06/24 22:21:36
>>107 でしょww お願いします。
110:デフォルトの名無しさん
07/06/24 22:35:17
#include <stdio.h>
main()
{
FILE *fpin,*fpout;
char c;
int i,j;
int B[3][3];
fpin = fopen("in-1.txt","r");
fpout = fopen("out-1.txt","w");
while(fscanf(fpin,"%c",&c)!=EOF)
if(c == 'B')
{for(i=0;i<3;i++)
{for(j=0;j<3;j++)
{fscanf(fpin, "%d", &B[i][j]);
}}}
for (i=0; i<3; i++) {
for (j=0; j<3; j++)
fprintf(fpout,"%3d",B[i][j]/3);
fprintf(fpout,"\n");
}
fclose(fpin);
fclose(fpout);
return(0);
}
三行三列行列を3で割るというものなんですが、上のソースでやってもint型なんで
少数点以下がでません。float型にしてみても、うまく答えがでません。どこを直せば
いいでしょうか。
B 5 -2 2
2 3 1
1 2 2
です。
111:89
07/06/24 22:44:22
89です。
>>95氏のアドバイスを参考にやってみましたが、上手く動作しません。
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]){
char c;
char filename[] = "date.txt";//ファイル名
FILE *fp; //ファイルポインタ
if(argc<2) {
//ファイル「読み込み」で開く
if((fp=fopen(argv[1],"r"))==NULL){
printf("File dose not exist. \n");
return 1;
exit(1);
}
}
//ここからファイルを読み込んで処理
//例 一文字入力し表示
wile((c=getc(fp))!=EOF){
printf("%d\n" , c);
}
//開いたファイルを閉じる
fclose(fp);
}
[EOF]
何処が違うのでしょうか?
112:デフォルトの名無しさん
07/06/24 22:45:51
なんでおまえら、「うまくいきません」とか「うまく答えが出ません」とか、
糞の役にも立たない報告しかできないの? 無能なの?
113:89
07/06/24 22:49:58
smp3.c(17) : error C3872: '0x3000': この文字を識別子で使用することはできません
smp3.c(17) : error C3872: '0x3000': この文字を識別子で使用することはできません
smp3.c(17) : error C2065: ' ' : 定義されていない識別子です。
smp3.c(17) : error C2143: 構文エラー : ';' が '}' の前にありません。
smp3.c(21) : error C2143: 構文エラー : ';' が '{' の前にありません。
smp3.c(27) : error C3409: 空の属性ブロックは認められません。
smp3.c(27) : error C2143: 構文エラー : ']' が '(' の前にありません。
smp3.c(27) : error C2059: 構文エラー : '-'
smp3.c(27) : error C2059: 構文エラー : ')'
↑そまそ。こんな感じにエラーが出ます。
因みに、この確認はコマンドプロンプトで出したものです。
114:デフォルトの名無しさん
07/06/24 22:51:34
>>113
ソースに全角のスペース含まれてないか?
115:デフォルトの名無しさん
07/06/24 22:54:34
typo多過ぎだし、人間やめるといいよ。
116:デフォルトの名無しさん
07/06/24 22:55:12
wile → while
あとはわからん。
そもそもこのプログラム22行しかないのに、なんで27行目のエラーが出てるんだ?
117:89
07/06/24 22:58:15
>>114
全角のエラー修復できました。
smp3.c(21) : error C2143: 構文エラー : ';' が '{' の前にありません。
smp3.c(27) : error C3409: 空の属性ブロックは認められません。
smp3.c(27) : error C2143: 構文エラー : ']' が '(' の前にありません。
smp3.c(27) : error C2059: 構文エラー : '-'
smp3.c(27) : error C2059: 構文エラー : ')'
118:デフォルトの名無しさん
07/06/24 23:01:09
>>89
ほれ。
#include <stdio.h>
int main(int argc, char **argv)
{
int c;
if (argc > 1 && !freopen(argv[1], "r", stdin))
return perror(argv[1]), 1;
while ((c = getchar()) != EOF)
printf("%d\n", c);
return 0;
}
119:89
07/06/24 23:01:55
>>116
レスどうもです。
smp3.c(17) : error C2143: 構文エラー : ';' が '{' の前にありません。
smp3.c(23) : error C3409: 空の属性ブロックは認められません。
smp3.c(23) : error C2143: 構文エラー : ']' が '(' の前にありません。
smp3.c(23) : error C2059: 構文エラー : '-'
smp3.c(23) : error C2059: 構文エラー : ')'
また一つエラーが減りました。
問題文も含めた場合の最終行が27行目です。
今回は問題文を消しました。
120:デフォルトの名無しさん
07/06/24 23:03:39
まさかとはおもうが
[EOF] ← これもソースにタイプしてるのか?
121:デフォルトの名無しさん
07/06/24 23:06:24
>100
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000
int myrand(void)
{
return (int)(rand() / (RAND_MAX + 1.0) * N);
}
int main(void)
{
int i, j, m;
char check[N] = {0};
srand(time(NULL));
scanf("%d", &m);
for(i=0; i<m; i++) {
int cnt = 0;
for(j=0; j<N; j++) check[myrand()] = 1;
for(j=0; j<N; j++) if(!check[j]) cnt++;
printf("出現しなかった整数の個数:%d\n", cnt);
}
return 0;
}
122:デフォルトの名無しさん
07/06/24 23:13:23
>>110
- int B[3][3];
+ double B[3][3];
- fscanf(fpin, "%d", &B[i][j]);
+ fscanf(fpin, "%lf", &B[i][j]);
- fprintf(fpout, "%3d", B[i][j] / 3);
+ fprintf(fpout, "%g", B[i][j]/3);
とりあえずこんなところでどうよ。
123:デフォルトの名無しさん
07/06/24 23:27:56
>>122さん!
計算できました!ありがとうございます!
そこでまた質問で申しわけないんですが答えが
1.66667-0.6666670.666667
0.66666710.333333
0.3333330.6666670.666667
のように表示されてしまうんですが、1.66667と1とかの間にスペースを設けたいん
ですが何か手はありませんか?無知ですいません。
124:デフォルトの名無しさん
07/06/24 23:32:44
[1] 授業単元:プログラミング C
[2] 問題文(含コード&リンク): 以下のPADとプログラムを作成しなさい≪面白いプログラム≫
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語:C
[4] 期限: 6/25の9時まで
[5] その他の制限: switch文を習った後の課題です。
他の課題は終わらせましたが、どうしても面白いと思えるものを作ることが出来ませんorz
力を貸してください。お願いします。
125:デフォルトの名無しさん
07/06/24 23:50:54
>>123
- fprintf(fpout, "%g", B[i][j]/3);
+ fprintf(fpout, "%g ", B[i][j]/3);
これでおk
126:デフォルトの名無しさん
07/06/25 00:04:04
>>97
URLリンク(kansai2channeler.hp.infoseek.co.jp)
127:デフォルトの名無しさん
07/06/25 00:30:14
[1] 授業単元:プログラミングU
[2] 問題文リンク:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C言語のみ
[4] 期限: 2007年06月26日AM01:00まで
[5] その他の制限: 特にないです。
自力ではどうしてもできませんでした。
どうかよろしくお願いします。
128:デフォルトの名無しさん
07/06/25 00:30:57
【質問テンプレ】
[1] 授業単元: プログラミング言語
[2] 問題文:
数値の列を入力し,それをリスト構造にデータを
格納せよ.その際,数値が大きさの順に並ぶよう
にせよ.
- 入力する数値の数を限定してもよい
- たとえば5個
• リストの内容を先頭から出力せよ.
- 結果として入力された数値の列が,大きさ順
に並び替えられて表示されることになる.
• リスト構成する要素(セル)はmalloc関数でヒー
プ領域から確保するものとする.
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio2005
[3.3] 言語:C++
[4] 期限:6月28日まで
[5] その他の制限:ポインタの練習です。一応、こんな感じらしいです。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
どなたかご教授お願いします
129:デフォルトの名無しさん
07/06/25 00:46:17
|
| ∧ ∧
|/ ヽ ./ .∧
| `、 / ∧
|  ̄ ̄ ̄ ヽ
| ̄ ̄月曜日 ̄ ̄ ̄ ̄)
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄.\
|ヽ-=・=-′ ヽ-=・=- /
|:: \___/ / やぁ・・・・
|::::::: \/ /
130:デフォルトの名無しさん
07/06/25 00:52:10
鬱入った。
寝る。
131:デフォルトの名無しさん
07/06/25 00:57:49
>>19
適当。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
132:デフォルトの名無しさん
07/06/25 01:33:09
>>125さん
できました!ありがとうございました!
133:デフォルトの名無しさん
07/06/25 02:53:58
>>131 ありがとうございました
134:デフォルトの名無しさん
07/06/25 03:06:59
[1] 授業単元:C++研究
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)(プログラム1)
URLリンク(kansai2channeler.hp.infoseek.co.jp)(プログラム2)
URLリンク(kansai2channeler.hp.infoseek.co.jp)(プログラム3)
URLリンク(kansai2channeler.hp.infoseek.co.jp)(プログラム4)
上記1〜4のプログラムを下記のように修正します。
クラス(設計図)部分を概要部分(ヘッダファイル)と実装部分(ソースファイルに分け)
そしてメイン部分も分け、4つのプログラムを新しく作り直しなさい。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年6月26日12:00まで]
[5] その他の制限:特になし
どうかよろしくお願いします
135:デフォルトの名無しさん
07/06/25 03:17:42
>>134
単にソースをclass.cpp class.h main.cppとかってファイル作って
にコピペしまくるだけで終了しない?
136:デフォルトの名無しさん
07/06/25 03:51:42
>>124
これは難問だ
何をもって面白いとするかがわからんことには作りようがない
技術的には>>124は全然問題なさそうだから、こんなのはどうだ?
怪しいswitch文だが、ちゃんとコンパイルは通る
実行結果が予想できるかい?
プログラムの挙動的には面白いと思うんだが
int main(){
switch(1){
while(1){
case 0:
printf("0");
break;
default :
printf("default");
case 1:
printf("1");
}
}
return 0;
}
良い子はマネしないようにな
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4768日前に更新/213 KB
担当:undef