- 1 名前:デフォルトの名無しさん [2008/10/30(木) 07:49:39 BE:113605834-PLT(24065)]
- あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】 回答者の便宜のため、質問の際は以下を行うことを推奨します。 ・質問は【質問テンプレ】を利用してください。 ・問題文は、出題されたまま全文を書いてください。 ・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。 ・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。 ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。 ・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。 ・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。 【質問テンプレ】 [1] 授業単元: [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html 【過去ログ検索】 chomework.sakura.ne.jp/ 【wiki】 www23.atwiki.jp/homework/ 前スレ C/C++の宿題を片付けます 116代目 pc11.2ch.net/test/read.cgi/tech/1222813731/
- 520 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 11:43:48 ]
- >>511
どうでもいいところかもしれんが return (sigemptyset(&act.sa_mask) == sigaction(SIGALRM,&act, NULL) == sigaction(SIGVTALRM,&act, NULL) == sigaction(SIGPROF, &act, NULL) == 0) ? 1 : 0; これ、意図したとおりに動くの? A == B は A と B が等しかったら 1 を返すよ 一つでも 0 以外のを返したら、とやりたいんだったら && とか使うべし
- 521 名前:デフォルトの名無しさん [2008/11/10(月) 13:44:10 ]
- [1] 授業単元:データ構造とアルゴリズム
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7986.txt [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月12日 [5] その他の制限: 特になし よろしくお願いします。
- 522 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:06:25 ]
- >>521 該当箇所だけ。push, pop はもうできてるんでしょ?
while(!isempty()) { y = pop(); x = pop(); if (map[y][x] == ' ') { map[y][x] = '*'; /*ここを適切に埋める(3) */ // up push(x); push(y - 1); // down push(x); push(y + 1); // left push(x - 1); push(y); // right push(x + 1); push(y); /*塗るたびにマップを表示する */ for(y = 0; y < 7; y++) printf("%s\n", map[y]); printf("\n"); } }
- 523 名前:374 mailto:sage [2008/11/10(月) 14:22:12 ]
- すいません誰か>>374をお願いします。もう締め切りも近いのでどうか頼みます
- 524 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:28:40 ]
- >>508
ありがとうございます!助かりました!
- 525 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 14:37:57 ]
- >>523
1年分ってのは、入力した年の1月から12月を表示すればよいのか 入力した月から翌年の同月-1 を表示すればよいのか 入力した月を含む前後6か月を表示すればよいのか
- 526 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 15:02:16 ]
- >>523
カレンダーは >> 525 の返答次第 フィボナッチその1 #include <stdio.h> int main() { int i, f0 = 0, f1 = 1, f2 = 1, num; printf("num:"); scanf("%d", &num); for(i = 0; i < num; i++){ printf("f[%d]:%d\n", i, f0); f2 = f1 + f0; f0 = f1; f1 = f2; } return 0; }
- 527 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 15:02:58 ]
- >>523
フィボナッチその2 #include <stdio.h> int main() { int i, f0 = 0, f1 = 1, f2 = 1, num; printf("num:"); scanf("%d", &num); i = 0; while(i < num){ printf("f[%d]:%d\n", i, f0); f2 = f1 + f0; f0 = f1; f1 = f2; i++; } return 0; }
- 528 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 15:03:33 ]
- >>523
フィボナッチその3 #include <stdio.h> int main() { int i, f0 = 0, f1 = 1, f2 = 1, num; printf("num:"); scanf("%d", &num); i = 0; do{ printf("f[%d]:%d\n", i, f0); f2 = f1 + f0; f0 = f1; f1 = f2; i++; } while(i < num); return 0; }
- 529 名前:初心者 [2008/11/10(月) 15:59:23 ]
- [1] 授業単元:
[2] 問題文(含コード&リンク): ★下記の仕様を満たすプログラムをC言語で作成しなさい. 【仕様】日数計算プログラム ▼今日の日付と生年月日を入力すると,今日が生年月日から数えて何日目にあたるかを表示する.西暦・月・日をスペースで区切って入力する. ▼この場合,「うるう年」を考慮しなければならない.「うるう年」の条件は, @西暦が4で割り切れる. Aただし,西暦が100で割り切れる年は除く. Bただし,西暦が400で割り切れる年は含める. ▼「今日は、あなたが生まれた日から数えて〜日目です。」と表示する. ▼計算式は,(西暦1年1月1日から今日までの日数)−(西暦1年1月1日から生年月日までの日数)を使えばよい. ▼生年月日が今日の日付より後になっているときは,「生年月日が今日の日付より後になっています!」とエラーメッセージを表示する. ▼最低限,次の関数を使うこと. @main関数(これは当たり前ですが) A入力された値が計算に適切な値かをチェックする関数(4月31日などありえない日付を入れると,「年月日が正しい範囲にありません」と表示する) B日付を計算する関数 ▼日付の入力やメッセージの表示はmain関数で行うこと(ポインタに関する課題なので参照渡しを使うこと). [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン: 分からないです。 [3.3] 言語: C言語 [4] 期限: 今週中ぐらい [5] その他の制限: 繰り返し文、条件判断文、ポインタを使ってお願いします。 初心者なので、初心者にも分かるようなプログラムをお願いします。
- 530 名前:デフォルトの名無しさん [2008/11/10(月) 16:09:07 ]
- 課題が出たんですが、まったく手に負えません、、、、、
ぜひ、教えてください! 今、XPでvisualを使ってます。 『課題』 円周率πの値を近似式 π≒4Σ(←n=0から100で)(ー1)^n×(2n+1)^(−1)×{(0.5)^(2n+1)+(3)^(ー2nー1)} を用いて、小数第8位まで正しい値(3.14159265)を出力し、 そのπの値を用いて入力された数値εに大して、次の不等式を満たす最小の自然数Nを求めるプログラムを作れ。 |(π^2/6)-Σ(←k=1からN)k^(-2)|<ε
- 531 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 16:32:39 ]
- viの正式名称なんて久しぶりに見たな
- 532 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 16:45:16 ]
- >>530
こんなんでいい? #include <stdio.h> #include <math.h> int main (void) { int i; double pi, sum, eps; sum = 0.0; for(i=0; i<=100; i++){ pi = 4.0 * (sum += pow(-1, i) / (2*i + 1) * (pow(0.5, 2*i+1) + pow(3, -2*i-1))); } printf("π≒%.8f\n", pi); printf("ε:"); scanf("%lf", &eps); i = 1; sum = 0.0; while(fabs(pi*pi/6 - (sum += pow(i, -2))) >= eps) i++; printf("N = %d\n", i); return(0); }
- 533 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 17:06:14 ]
- 誰か>>457をお願いします。
期限は今日中で良いのでお願いします!
- 534 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 17:48:20 ]
- printf("ε:");
かわいいな
- 535 名前: ◆25LbU5YSxg mailto:sage [2008/11/10(月) 18:09:49 ]
- [1] 授業単元:プログラミング演習
[2] 問題文: プログラム1を改良し、データをファイルから読み込みつつ小さい順にソートして格納するプログラムを作成せよ、。 手順を以下に示す。 1.cell構造体へのポインタとして、struct cell *new、*start、*p1、*p2;の4つを準備し、それぞれNULLで初期化する。 2.データファイルからデータ数を読み込む。 3.データを1つ読み込み、cell構造体を作成してnewにセットした後、その構造体に格納。 ・はじめてのデータであれば、ポインタstartとp1をnewにセット。 ・2つ目のデータであれば、p2をnewにセットし、p1が示すリスト要素(構造体)の次に追加接続する。 ただし、2つ目のデータが1つ目のデータよりも小さい場合には、p1とp2の指す構造体内のデータを入れ替える。 もしくはリスト要素(構造体)自体の位置を入れ替えポインタをセットし直す必要があることに注意。 ・3つ目以降のデータであればリスト先頭から順に走査を行う。この際、p1、及びp2をそれぞれ1つずつリスト内の次の要素に進めてゆく。 。読み込まれたデータが、リスト先頭要素(構造体)の持つ値より小さい場合には、新規作成された構造体newをリスト先頭に追加し、ポインタstartをnewにセットする。 。リスト途中で、p1には読み込まれたデータより小さい値、p2には読み込まれたデータより大きい値となる場所が見つかれば、この間に新規作成された構造体newを挿入する。 。リスト最後尾まで読み込まれたデータより大きい値が見つからなければ、新規作成された構造体newを最後尾に追加する。 4.3をデータ入力数だけ繰り返す。 5.全てのデータを読み込み終えたら、リスト先頭から順にデータを出力する。 num-data.txt 5 23 43 67 14 9
- 536 名前: ◆25LbU5YSxg mailto:sage [2008/11/10(月) 18:15:43 ]
- プログラム1
#include<stdio.h> struct cell{ int data; struct cell *next; }; int main(void){ int num; struct cell *new, *start, *ptr; new = NULL; start = NULL; ptr = NULL; while(1){ scanf("%d",&num); if(num == -1){ break; } new= (struct cell *)malloc(sizeof(start)); if(new == NULL){ fprintf(stderr,"Error!:malloc short(struct cell).\n"); } new->data = num; new->next = NULL; if(ptr == NULL){ start = new; ptr = new; }else{ ptr->next=new; ptr = new; } } ptr = start; while(ptr != NULL){ printf("%d\n",ptr->data); ptr=ptr->next; } return 0;} [3] 環境 [3.1] OS: Linux[3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:2008年11月21日17:00まで
- 537 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 18:18:32 ]
- >>529
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7988.txt 参照渡しをする合理的理由がみあたらないので抜きで作った。 どっか適当に変えてくれ
- 538 名前:374 mailto:sage [2008/11/10(月) 19:36:44 ]
- >>525>>526
カレンダーは入力した年の1月から12月を表示するものでよかったです。 >>526-528 助かります。本当にありがとうございます
- 539 名前:525 mailto:sage [2008/11/10(月) 20:03:17 ]
- >>538
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7989.txt
- 540 名前:374 mailto:sage [2008/11/10(月) 20:27:03 ]
- >>539
もうなんとお礼を言えばよいのかわかりません。本当にありがとうございました。
- 541 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 21:12:16 ]
- >>535
#include<stdio.h> #include<stdlib.h> struct cell { int data; struct cell *next; }; int main(void){ int num; struct cell *new, *start, *p1, *p2; new = start = p1 = p2 = NULL; while (1) { scanf("%d", &num); if (num == -1) break; new = (struct cell *) malloc(sizeof(start)); if (new == NULL) { return 1; } new->data = num; new->next = NULL; for(p1=start,p2=NULL; (p1) && new->data > p1->data; p2=p1, p1=p1->next); if(p2){ p2->next = new; new->next = p1; }else{ new->next = start; start = new; } } for (p1=start; (p1); p1=p1->next) { printf("%d\n", p1->data); } return 0; }
- 542 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 22:01:28 ]
- [1] 授業単元:プログラミングC演習
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7991.txt [3] 環境 [3.1] OS: Unix [3.2] コンパイラ名とバージョン: gcc(versionは不明 [3.3] 言語: C [4] 期限: 2008年11月13日(木曜日)12:00まで [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) ・ポインタをメインに使用してください よろしくお願いします
- 543 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:11:51 ]
- [1] 授業単元:プログラミング
[2] 問題文(含コード&リンク) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7992.txt [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年11月12日 [5] その他の制限: よろしくお願いいたします。
- 544 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:14:37 ]
- >>542
malloc は ok なの? 最大長とか単語数は別プログラムで調べるんだったらいいけど、 一度にやるんだったら必ず必要だよ
- 545 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:22:34 ]
- >>543
printf("学籍番号:%d 氏名:%s\n", p->id, p->name); ○○○ //pに次の構造体のポインタを代入 ↑↑↑ ここを p = p->next とやるだけでとりあえず動くものはできるけど・・・ List3 は点数を取り込んでないよね。点数を取り込むようにしたいの? 読み込むデータのサンプルはないの?
- 546 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:25:53 ]
- >>542
ツッコミどころが多すぎるんだが・・・ とりあえず - char *dict[999], *input[50] + char dict[999][100], input[50][100] として、適当に文字列を格納する領域を確保しておくこと。 勘違いだと思うけど - for(i = 0; scanf("%s",input[i]) != '\n'; i++); + for(i = 0; scanf("%s",input[i]) == 1; i++); 添字が逆 - judge = compare( dict[j], input[k]); + judge = compare( dict[k], input[j]); それから、そもそも input[j] に入っているのは標準入力から得た一行だから、単語ごとに分割する処理が必要
- 547 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:36:49 ]
- [1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク): 10 個の要素をもつ整数配列data を初期化して宣言する。 配列の隣り合った添え字のデータ同士の差(data[i] – data[i-1])を調べる。 その値が,最も大きなものを探し,データの差がい くつなのか,添え字の何番と何番との間の差なのか出力しなさい。 最大のものが複数あったときには,添え字の最も大きなものを出力すること。 例えば,data[10]={-6,4,7,-3,-1,9,5,-5,4,6} で初期化したときには,4 と5 の間の10 が最大となる。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC++ 6.0 [3.3] 言語:C言語 [4] 期限:11/14 [5] その他の制限:特になし よろしくお願い致します。
- 548 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:45:02 ]
- >>547
6,7番目の間の10が最大値になる?
- 549 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:46:40 ]
- >>547
素直に書いてみた 差の絶対値じゃなくて差の比較だけでいいんだよね? #include<stdio.h> #define N 10 int main(){ int data[N]={-6,4,7,-3,-1,9,5,-5,4,6}; int*max_diff = data; int*it; for(it=data+1;it!=data+N-1;++it) if(1[max_diff]-0[max_diff] <= 1[it]-0[it]) max_diff = it; printf("%dと%dの間の差%dが最大\n", max_diff-data,max_diff-data+1,1[max_diff]-0[max_diff]); return 0; }
- 550 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 00:50:44 ]
- [1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 一次元配列を用いて5人分の得点を100点満点で入力し、平均値を画面およびファイルに書き出すプログラムを作成しなさい。 書き出し用ファイル名はave.txtとする。 [3] 環境: [3.1] Windows Vista [3.2] Borland C++ [3.3] C言語 [4] 期限: 11月11日12:00 昼すぎ提出なので時間があまりないですが、どなたかお願いします。
- 551 名前: ◆8w4FYxc7TQ [2008/11/11(火) 00:52:24 ]
- [1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): 三つの数字a,b,cを入力したとき、大きい順に出力するプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC++ 9.0 [3.3] 言語:C++ [4] 期限:11/12 [5] その他の制限: この問題で使えそうなものは、if、もしくはswitchしか習っていないので、それでお願いします。 自分でif文を使って組み立てると、どうしても思い通りに並べてくれません… どうかよろしくお願いします。
- 552 名前:デフォルトの名無しさん [2008/11/11(火) 01:11:20 ]
- [1] 授業単元: C言語演習
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7993.txt [3] 環境 [3.1] OS: (Windows vista) [3.2] コンパイラ VisualStudio2005 [3.3] 言語: C言語 [4] 期限: 2008年11月13日15:00まで [5] その他の制限: (C言語検定2級程度の途中まで習ってます) すいません、お願いします
- 553 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:17:33 ]
- >>491お願いできませんか?
- 554 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:25:42 ]
- >>549
はい、差の比較のみです。 言葉が足りなくてすみません。 ありがとうございました!
- 555 名前:521 [2008/11/11(火) 01:34:59 ]
- >>522
ありがとうございます。 誰か、もう一つの課題のほうもお願いいたします。
- 556 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:46:23 ]
- >>550
#include <stdio.h> int main(void) { int i, score, sum=0; FILE *fp; for(i=1; i<=5; i++){ printf("%d人目:", i); scanf("%d", &score); sum += score; } printf("平均値:%f\n", (double)sum / 5.0); if((fp = fopen("ave.txt", "w")) == NULL){ printf("ファイルが開けません\n"); return 1; } fprintf(fp, "平均値:%f\n", (double)sum / 5.0); fclose(fp); return 0; }
- 557 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:48:54 ]
- ああ、配列使うのか
#include <stdio.h> int main(void) { int i, score[5], sum=0; FILE *fp; for(i=0; i<5; i++){ printf("%d人目:", i+1); scanf("%d", &score[i]); sum += score[i]; } printf("平均値:%f\n", (double)sum / 5.0); if((fp = fopen("ave.txt", "w")) == NULL){ printf("ファイルが開けません\n"); return 1; } fprintf(fp, "平均値:%f\n", (double)sum / 5.0); fclose(fp); return 0; }
- 558 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 01:57:47 ]
- >>551
if(a < b){ tmp = a; a = b; b = tmp; } if(a < c){ tmp = a; a = c; c = tmp; } if(b < c){ tmp = b; b = c; c = tmp; }
- 559 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:18:50 ]
- >>481
お礼おくれて申し訳ありません。 助かりました。ありがとうございます。
- 560 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:33:03 ]
- >>556-557
ありがとうございます助かりました! 一次元配列使うんです、まぎらわしくてすいません。 二度もありがとうございました。
- 561 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:39:30 ]
- >>552
2番はちょっと余計なこともしてるけど ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7994.c
- 562 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 03:37:42 ]
- >>561
rewind(stdin)なんて標準以外の使い方すんなカス
- 563 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 03:49:35 ]
- [1] 授業単元:
[2] 問題文 0〜9の数字のみからなる文字列を引数として受け取り、 同じ数字並びの整数を返す関数ascii2int()を作り、動作を 確認せよ。ただし、非負の整数のみ考える。 [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: c [4] 期限: 11月15日
- 564 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 03:56:49 ]
- [1] 授業単元:スタック
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7996.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC 6.0 [3.3] 言語:C [4] 期限:2008/11/12 [5] その他の制限:なし すいませんが、よろしくお願いします!
- 565 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 06:51:39 ]
- >>562
これで許してくださいorz scanf("%*[^\n]\n");
- 566 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 06:59:11 ]
- >>563
#include<stdio.h> int ascii2int(const char* str){ int r=0; while(*str){ r*=10; r+=*str-'0'; str++; } return r; } int main(){ char* a = "12345"; printf("%d\n",ascii2int(a)); }
- 567 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 07:36:20 ]
- >>564
なんかへたくそでごめん。。 #include<stdio.h> #define N 100 int n,cnt=0,c[N],b[N]; void solve(int a_top,int b_top,int c_top){ if(a_top>n && b_top==0){ int i; for(i=0;i<n;i++)printf("%d",c[i]); printf("\n"); cnt++; } if(a_top<=n){ b[b_top++] = a_top++;//a->b solve(a_top,b_top,c_top); b[--b_top] = --a_top;//b->a } if(b_top>0){ c[c_top++]=b[--b_top];//b->c solve(a_top,b_top,c_top); b[b_top++]=c[--c_top];//c->b } } int main(){ printf("n:"); scanf("%d",&n); if(n>0) solve(1,0,0); printf("%d\n",cnt); }
- 568 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 07:40:51 ]
- >>558
ありがとうございます! やってみます!
- 569 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:52:57 ]
- >>555
2回に分けて。 #include<stdio.h> #define STACKSIZE 100 typedef struct _Point{ int x,y; }point; static int sp = 0; static point stack[STACKSIZE]; void push(point p){ [sp++] = p; } point pop(void){ return stack[--sp]; } int isempty(void){ return sp == 0; }
- 570 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:54:32 ]
- //上の[sp++] = p;はstack[sp++] = p;のミス!!
int main(void){ char map[7][11] = { "**********", "* * *", "* *****", "* ** * *", "* * *", "* * * *", "**********", }; point p; int x,y; p.x=2; p.y=1; push(p); while(!isempty()){ p=pop(); x=p.x; y=p.y; if (map[y][x] == ' '){ map[y][x] = '*'; p.x=x; p.y=y-1; push(p); // up p.x=x; p.y=y+1; push(p); // down p.x=x-1; p.y=y; push(p); // left p.x=x+1; p.y=y; push(p); // right for(y = 0; y < 7; y++) printf("%s\n", map[y]); printf("\n"); } } return 0; }
- 571 名前:564 mailto:sage [2008/11/11(火) 09:00:54 ]
- >>567
こんなに早く対応していただけて助かります。 ありがとうございます!
- 572 名前:デフォルトの名無しさん mailto:age [2008/11/11(火) 10:08:37 ]
-
[2] 1. define文を使ってN以下の素数を全て求めよ 2. 関数 f(t)=t^5-t の区間 [0,2] での値を 0.1 刻みで表示するプログラムを作れ [3] [3.1] OS : Linux [3.2] ? [3.3] 言語 : C [4] 期限: 11/12 [5] その他の制限:初歩の初歩です。難しすぎるのはよく分かりません どなたかよろしくお願いします
- 573 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 11:06:09 ]
- 1こめ
#include<stdio.h> #define N 100 int main(){ int s[N],i,j; for(i=0;i<N;i++) s[i]=1; s[0] = s[1] = 0; for(i=2;i<N;i++){ if(!s[i]) continue; for(j=i+i;j<N;j+=i){ s[j]=0; } } for(i=0;i<N;i++){ if(s[i]) printf("%d\n",i); } }
- 574 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 11:14:17 ]
- >>573
define文を使うって、#define N 100 ← これだけでいいのかww
- 575 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 11:15:35 ]
- えっ?だめ??勘違い?(´・ω・`)
- 576 名前:デフォルトの名無しさん [2008/11/11(火) 11:58:52 ]
- >>521じゃないけど分からないので質問。>>522の通りにやっても何も表示されないので
たぶん確実に違うisemptyのどこが駄目でしょうか?あとpush,popもおかしかったら教えてください。 void push(int x){ if(sp == 100){ printf("stack is fill.\n"); } else{ stack[sp]=x; sp++; } } int pop(void){ if(sp == 0){ printf("stack is empty.\n"); } else{ sp--; return(stack[sp]); } } int isempty(void) { if(sp ==100) printf("1"); if(sp ==0) printf ("0"); }
- 577 名前:522 mailto:sage [2008/11/11(火) 12:03:42 ]
- >>576
void push(int val) { stack[sp++] = val; } int pop(void) { return stack[sp-- - 1]; } int isempty(void) { /*スタックが空なら1、空でないなら0を返す関数 */ return sp == 0 ? 1 : 0; }
- 578 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 12:08:04 ]
- stack[sp++] = val;
は普通だけど、 return stack[sp-- - 1]; って書き方がすごくきもく見えるw
- 579 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 12:13:05 ]
- return stack[--sp];
だよなぁ常考
- 580 名前:522 mailto:sage [2008/11/11(火) 12:37:34 ]
- >>578>>579
貼ってから自分でもそうオモタ
- 581 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 12:59:00 ]
- 個人的に
論理式?1:0;とかif(論理式!=0)とかif(論理式==0) って書き方が好きじゃない。冗長な感じがして。
- 582 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 13:01:58 ]
- 真の時に1を返すと保障されている処理系ならば return sp == 0; でもいいんだけどね
- 583 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 13:03:56 ]
- C言語は保証されてる
- 584 名前:デフォルトの名無しさん [2008/11/11(火) 14:01:00 ]
- [1] 授業単元:C言語
[2] 問題文(含コード&リンク): 以下のプログラムを英文清書プログラムに書き換えよ。 元のプログラム kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7997.c 条件 ・文の先頭は大文字、それ以外は小文字。 ・アルファベット以外の文字は変換しなくてよい。 ・改行、スペース、タブにより単語の区切りとする。また文末は改行コードではなくピリオド"."で判定する。 ・\endまたは\ENDを挿入するとそのプログラムを終わるようにする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008/11/12 23:59まで [5] その他の制限: 特にないです。 すみませんが、よろしくお願いします。
- 585 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 14:34:13 ]
- INExp.hって??
- 586 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 15:28:24 ]
- isalphaとtoupper使えればいいのかな
ピリオド検索はstrstrで ポインタアドレスの差を文字列長にもしてげへへへ
- 587 名前:デフォルトの名無しさん [2008/11/11(火) 16:00:13 ]
- [1] 授業単元:単方向線形
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8000.c [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 11/18 [5] その他の制限: 特になし 全く分かりません。宜しくお願いします
- 588 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 16:12:52 ]
- >>587
うそつけw 考える気がないだろw
- 589 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:34:32 ]
- それを言ったらこのスレの存在意義がなくなるわけだが
- 590 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:36:25 ]
- どこのスレにだって黙ってればいいのに野暮ったい突っ込みする奴居るじゃん。
- 591 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:18:38 ]
- >>573
ありがとうございます
- 592 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:19:28 ]
- >>587
超めんどくさい!cの単方向リスト嫌い! kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8001.txt
- 593 名前:576 mailto:sage [2008/11/11(火) 18:22:40 ]
- >>577
ありがとうございます。>>522と合わせてプログラムにしてみたんだが何もマップされないんです。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8002.txt 自宅のubuntuのgcc(おそらくでやってるんですが環境のせいですか?変なところあったら指摘お願いします。
- 594 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:24:58 ]
- printf("%s\n", map[y]);
- 595 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:25:43 ]
- ごめんかんちがい
- 596 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:28:38 ]
- あ!コピペミスってるだけじゃん〜
- 597 名前:デフォルトの名無しさん [2008/11/11(火) 18:49:43 ]
- a
- 598 名前: ◆25LbU5YSxg mailto:sage [2008/11/11(火) 18:52:30 ]
- >>541
遅れましたが、解答ありがとうございました。
- 599 名前:577 mailto:sage [2008/11/11(火) 19:21:30 ]
- >>593
map データがなんだかやせ細ってるよ
- 600 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:20:46 ]
- 1] 授業単元: C言語
[2] 問題文(含コード&リンク): (1) 単項式を入力された順に出力されるように変更する (2)入力した単項式を次数の大きい順にするに出力されるように変更する ソースは以下を参考にしてください、たらない変数は任意で増やしてけっこうです kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8003.txt (1)と(2)は別解答 [3] 環境 [3.1] OS: Win [3.2] コンパイラ名とバージョン: 任意 [3.3] 言語: C [4] 期限: 2008年11月14日13:30まで 期限が迫ってるのでお願いします
- 601 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:28:18 ]
- この問題昔見たなw
- 602 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:32:57 ]
- すいません
前スレあたりで載せたんですがスルーだったようで自力でやろうとしたけど無理だったので再度^^; 最終期限がすぐであせってます
- 603 名前:576 mailto:sage [2008/11/11(火) 20:35:35 ]
- なんというミス(^o^)
みなさまありがとうございました。明日も生きていけそうです。
- 604 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:37:29 ]
- [1] 授業単元: 文字列操作
[2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8004.txt [3] 環境 [3.1] OS:Linux [3.2] cc [3.3] C [4] 期限:2008年11月12日15:00まで [5] その他の制限:問題文中に出てくる、frequency.c を利用せよ、とありますので、 なるべくそれを基盤にするようにお願いします。 ↓途中まで考えてみたものです。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8005.txt
- 605 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:45:38 ]
- >>604
1問目 freqency.c の出力部分を以下のように修正 for(i = 0; i < 26; i++) { /* 結果出力 */ while(alpha[i]-- > 0) printf("*"); printf("\n"); }
- 606 名前:605 mailto:sage [2008/11/11(火) 20:54:39 ]
- >>604 2問目 main の中身だけ
char c; int i, j, alpha[26], max = 0; for(i = 0; i < 26; i++) /* 配列のクリア */ alpha[i] = 0; c = getchar(); while(c != '\n') { if (c >= 'a' && c <= 'z') { /* 英小文字の処理 */ alpha[c - 'a'] += 1; if (alpha[c - 'a'] > max) max = alpha[c - 'a']; } else { if (c >= 'A' && c <= 'Z') { /* 英大文字の処理 */ alpha[c - 'A'] += 1; if (alpha[c - 'A'] > max) max = alpha[c - 'A']; } } c = getchar(); } for(i = 0; i < max; i++) { for(j = 0; j < 26; j++) { /* 結果出力 */ if (alpha[j] >= max - i) printf("* "); else printf(" "); } printf("\n"); } for(j = 0; j < 26; j++) /* 結果出力 */ printf("%c ", j + 'a'); printf("\n");
- 607 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 20:59:53 ]
- すいません・・>>491をお願いします・・
- 608 名前:デフォルトの名無しさん [2008/11/11(火) 21:09:56 ]
-
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 問1、ユークリッドの法則を使ってn(n≦100)個の正整数の最大公約数を求めるプログラムを作れ なお、最終的にはgcd(最大公約数を求める整数の羅列)=結果と画面上に表示するようにすること 問2、n個(n≦100以下)の正整数の最小公倍数を求めよ。 表示方法は先ほどの問いと一緒 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11/13 [5] その他の制限: int gcd(int x, int y)の関数を使用してください あと、なるべく2つずつ比べるようにして、必ず大きい正数が変数xに入るようにしてください
- 609 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:15:18 ]
- >>607
ボールの初速とか角度は風の影響が全く無いときに当たるようにすればいいの? それとも投げたら絶対当たるように作るの?
- 610 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:18:17 ]
- [1] 授業単元:C
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8006.txt @2次元平面上の点を表す構造体 Point 型を定義して,その点に関する計算を行うプログラムを作成したい. 以下のプログラムを基にして完成せよ. 構造体 Point型は,double型の X座標と Y座標のメンバをもつ. 構造体 Point型を使用して,原点からの距離を求める関数 length_vector_pを作成する. ただし,「構造体ポインタ変数」を利用すること. 構造体 Point型を使用して,平面の点を表示する関数 print_v_pを作成する. ただし,「構造体ポインタ変数」を利用すること. A2次元平面上の点を表す構造体 Point 型を定義して,その点に関する計算を行うプログラムを作成したい. 以下のプログラムを基にして完成せよ. 構造体 Point型は,double型の X座標と Y座標のメンバをもつ. 構造体 Point型を使用して,平面の点を表示する関数 print_v_p2を作成する. ただし,「構造体ポインタ変数」を利用すること. 構造体 Point型を使用して,平面の点を代入する関数 input_point_pを作成する. ただし,「構造体ポインタ変数」を利用すること. 構造体ポインタ変数に対して,動的にメモリ領域を確保する. malloc を利用する. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: visual stadio2008 [3.3] 言語: C [4] 期限: 2008年11月13日
- 611 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:21:25 ]
- >>607
前者でお願いします
- 612 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:25:52 ]
- >>600
とりあえず(1) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8007.txt
- 613 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:52:31 ]
- >>608
n 個の正数は a[] に入力されているとして。 #include <stdio.h> int gcd(int x, int y) { int r; if (x < y) { int t = x; x = y; y = t; } do { r = x % y; x = y; y = r; } while (r != 0); return x; } int main(int argc, char *argv[]) { int a[] = { 121, 11, 14641, 1331}; int n = 4; int i, g; g = a[0]; printf("gcd(%d", a[0]); for (i = 1; i < n; i++) { printf(", %d", a[i]); g = gcd(g, a[i]); } printf(") = %d\n", g); return 0; }
- 614 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:57:28 ]
- [1] 授業単元: 自作関数
[2] 問題文(含コード&リンク): 5つの数値を入力し(繰り返し入力)し、最大値を表示する。 [3] 環境 [3.1] OS: Windowsvista [3.2] VC 6.0等 [3.3] 言語: C [4] 期限: 今日までなのでよろしくお願いします [5] その他の制限:繰り返し文しかならってないです。
- 615 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 21:59:13 ]
- >>614
>>614 #include<stdio.h> int sori(int x, int y) { if( x>=y ) return(x); return(y); } int main(void) { int a,b,c,d,e,max; while ( scanf("%d%d%d%d%d",&a,&b,&c,&d,&e)==5) { max=a; max=sori(max,b); max=b; max=sori(max,c); max=c; max=sori(max,d); max=d; max=sori(max,e); printf("%d %d %d %d %d",a,b,c,d,e); printf("max=%d\n",max); } return (0); }
- 616 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:00:00 ]
- >>614
>>615 エラーメッセージ エラー E2209 kadai6-1.cpp 1: インクルードファイル 'stdio.h' をオープンできない エラー E2268 kadai6-1.cpp 9: 未定義の関数 'scanf' を呼び出した(関数 main() ) エラー E2268 kadai6-1.cpp 18: 未定義の関数 'printf' を呼び出した(関数 main() 上記のようなプログラムを自分で作ったのですが、 上に記したようなエラーメッセージが表示されてしまいました。 これ以上わかりません。どうかよろしくお願いします。
- 617 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:09:48 ]
- >>616
Linux だとちゃんとコンパイルできるから、ワークスペース作ってないとかの問題じゃないの? 以下の行を削除すれば、一応目的は達成できるぞ max=b; max=c; max=d;
- 618 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:17:17 ]
- >>617
試してみます。どうもありがとうございました。
- 619 名前:デフォルトの名無しさん [2008/11/11(火) 22:23:31 ]
- コンパイルしたら
「配列または、ポインタでない変数に添字が使われました」って怒られたんですが どう直せばいいでしょうか?
- 620 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:24:07 ]
- あきらめてください
|

|