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/
477 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:47:53 ] >>456 ありがとうございます! 面倒だったようで申しわけないです
478 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:48:32 ] >>476 #include <stdio.h> main(){ printf("%d\n", 1000/13); }
479 名前:学生 [2008/11/09(日) 16:48:35 ] 訂正 マイクロソフトビジュアルベーシックC++で作成
480 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 16:50:17 ] >>479 >>476 #include <stdio.h> int main(){ printf("%d\n", 1000/13); return 0; }
481 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 18:01:36 ] >>472 C++です。VS2008で確認。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7982.txt
482 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 18:51:28 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7983xt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] C [4] 期限:11月10 [5] その他の制限:出来るだけ簡単に よろしくおねがいします!!!
483 名前:482 mailto:sage [2008/11/09(日) 18:52:44 ] URL訂正します kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7983.txt
484 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 19:11:25 ] >>483 #include <stdio.h> int main(int argc, char *argv[]) { unsigned int i, n; char str[21]; puts("符号なし32ビット整数を入力してください。"); scanf("%u", &n); printf("%u が格納されている先頭アドレスは 0x%p です。\n", n, &n); puts("20文字以内の文字列を入力してください。"); scanf("%s", str); printf("%s が格納されている先頭アドレスは 0x%p です。\n", str, str); for (i = 0; str[i] != '\0'; i++) { printf("%c が格納されているアドレスは 0x%p です。\n", str[i], &str[i]); } return 0; }
485 名前:457 ◆zeyvxEAaZQ mailto:sage [2008/11/09(日) 21:08:03 ] 期限を11月9日23:30までにするので>>457 をどうかお願いします。
486 名前:デフォルトの名無しさん [2008/11/09(日) 22:53:54 ] 1] 授業単元:プログラム [2] 問題文(含コード&リンク):遺伝的プログラムで木構造に新しいノードを追加しなさい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月11日まで [5] その他の制限: お願いします。
487 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 22:59:03 ] >>486 遺伝的プログラムってだけ言われても困るぞwwwwwwww 他になんか情報はないのか
488 名前:デフォルトの名無しさん [2008/11/09(日) 23:17:23 ] >>487 例えばどういう情報があればいいですか?
489 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 23:22:37 ] >>485 cで書けと?
490 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 23:23:59 ] >>475 ありがとうございました。助かりました。
491 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 00:34:44 ] [1] 授業単元:C [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7984.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:11/11 [5] その他の制限:特になし よろしくお願いします
492 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 00:43:01 ] 宿題丸投げするつもりはないんだが質問させてくれないか bccコンパイラを使っているんだ。 プログラムの実行時間測定に #include <sys/time.h> を参照したいんだがtime.hがどうも入ってないみたいなんだ。 標準搭載されてる関数で少数点以下まで実行時間を計れるものってないかな?
493 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 00:52:26 ] #include <time.h> じゃねーの?
494 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 00:59:37 ] #include <sys/timeb.h> だと思うが、Linux使いなので詳しくはしらないが struct timeb now; int millisec; ftime(&now); millisec = now.millitm; /* これがミリ秒らしい */ こんな感じだと思う。 詳しくは、ググるかヘッダファイル読め。
495 名前:493 mailto:sage [2008/11/10(月) 01:01:04 ] 俺がいってたのは #include <time.h> のclock()ね
496 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:02:14 ] >>493 俺の探し方がアホなだけかもしれんが、#include <time.h>だと少数点以下まで測れる方法が見つからなかったんだorz >>494 ありがとう 参考にする
497 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:04:32 ] >>495 ΣΣclock!! 見落してた マジサンキュ やってみる
498 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:26:15 ] >>489 C++でお願いします。 10日の18:00まででいいのでどうかお願いします!
499 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:27:58 ] >>498 クラスを使うなと書いてあるが? そこだけ関数?
500 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:33:51 ] [1] 授業単元:C言語 [2] 問題文 初期設定された任意の文字列の順序を,逆に並べ換えるプログラムをつくりなさ い。ただし,並べ換える部分を関数にして,関数には文字列を引数として渡しなさい。 文字列の例としては, char str[] = "My name is Tarou Tanaka"; のように自分の名前を用いてみなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2008年11月12日 24:00 [5] その他の制限: ・次のようなプロトタイプ宣言をもつ関数reverse を定義すること。 void reverse(char *); ・引数で渡された文字列自身が逆順になること。 C言語の基本関数のみでよろしくお願いします。
501 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:37:34 ] >>499 構造体はつかっていいらしいかららクラスと差し替えちゃえばいいんじゃね
502 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 01:57:40 ] >>499 クラスは使わず、構造体でお願いします。
503 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:10:50 ] >>502 ほんとうにいいんだな 構造体にコンストラクタとデストラクタとメンバ関数つけられるぞ?
504 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:11:50 ] >>500 void reverse(char * s) { size_t len = strlen(s); /* 文字列の長さ */ size_t half_len = len / 2; /* 文字列の半分の長さ */ size_t i; for ( i = 0; i < half_len; ++i ) { char tmp = *((s + len - 1) - i); *((s + len - 1) - i) = *(s + i); *(s + i) = tmp; } } こんなのでいいかな。
505 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:21:28 ] [1] 授業単元:Cプログラミング [2] 問題文: #include <stdio.h> #define SIZE 10 int main(void) { FILE *infile; int i, data[SIZE]; infile = fopen("sample61a.txt", "r"); if(infile == NULL) { printf("入力ファイルを開くことができません\n"); return 0; } for(i = 0; i < SIZE; i ++ ) { fscanf(infile, "%d", &data[i]); } for(i = 0; i < SIZE; i ++ ) { printf(" %3d", data[i]); } printf("\n"); return 0; }
506 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:21:58 ] 505の続きです。 このプログラムを改造し、データの値を奇数と偶数に分けそれぞれ合計値・個数・平均値を出力せよ。 その際奇数データの数、偶数データの数がそれぞれゼロの場合は平均値を求めないようにせよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:Microsoft Visual C++ 6.0 [3.3] 言語:C [4] 期限:11月11日 締め切りが急ですみません。 さっぱりわからなくなってしまったので、良ければよろしくお願いします。
507 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:39:50 ] >>504 ありがとう!
508 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:45:05 ] >>505 #include <stdio.h> #define SIZE 10 int main(void) { FILE *infile; int i, data[SIZE], sum[2]={0}, num[2]={0}; char *str[2] = {"奇数", "偶数"}; infile = fopen("sample61a.txt", "r"); if(infile == NULL) { printf("入力ファイルを開くことができません\n"); return 0; } for(i = 0; i < SIZE; i ++ ) { fscanf(infile, "%d", &data[i]); sum[data[i]%2] += data[i]; num[data[i]%2]++; } for(i = 0; i < SIZE; i ++ ) { printf(" %3d", data[i]); } printf("\n"); for(i=1; i>=0; i--){ printf("%s:合計値%d, 個数%d個", str[i], sum[i], num[i]); if(num[i] > 0) printf(", 平均値:%f", (float)sum[i] / (float)num[i]); printf("\n"); } return 0; }
509 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:46:41 ] あ、奇数と偶数の表示が逆
510 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:52:08 ] [1] 授業単元: OS [2] 問題文(含コード&リンク): ITIMER_REAL, ITIMER_VIRTUAL, ITIMER_PROF タイマーを用いて、プロセスのプロセッサ利用状況を測定するソフトウェアを実装する。 出力には、実行の経過時間、プロセッサ時間、ユーザ空間時間、カーネル空間時間が含むこと。 詳細 (1)すべての時間はミリ秒の分解精度を持つこと (2)1秒毎にsignalを発生させ、経過した秒数をカウントする (3)再帰を用いたFibbonacci数を計算するプログラムを子プロセスとした実行結果をしめすこと [3] 環境 [3.1] OS: Linux Kernel 2.6.x [3.2] コンパイラ名とバージョン: gcc4.x [3.3] 言語: C言語 [4] 期限: 2008年11月12日12:00 [5] その他の制限: sigactionやitimervalを用いて実装するのが今回の目的です。時間を計るものはできたのですが、ミリ秒単位の分解精度をどうやって出すのかがわかりません。よろしくお願いします。
511 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:54:37 ] 510です。 稚拙ながらもソースコードを示します。 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <signal.h> #include <unistd.h> #include <sys/time.h> #include <sys/types.h> #include <sys/wait.h> int realSec = 0; int profSec = 0; int virtualSec = 0; static void myHandler(int s) { int errSave; if (s == SIGALRM) realSec++; else if (s == SIGVTALRM) virtualSec++; else if (s == SIGPROF) profSec++; } static int setupInterrupt(void) { struct sigaction act; act.sa_handler = myHandler; act.sa_flags = 0; return (sigemptyset(&act.sa_mask) == sigaction(SIGALRM,&act, NULL) == sigaction(SIGVTALRM,&act, NULL) == sigaction(SIGPROF, &act, NULL) == 0) ? 1 : 0; } static int setupitimer(void) { struct itimerval value; value.it_interval.tv_sec = 1; value.it_interval.tv_usec = 0; value.it_value = value.it_interval; return (setitimer(ITIMER_PROF,&value, NULL) == setitimer(ITIMER_VIRTUAL,&value, NULL) == setitimer(ITIMER_REAL,&value, NULL) == 0)? 0: -1 ; }
512 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 02:56:23 ] 510です。続きです。 int main(int argc, char** argv) { pid_t child, retVal; struct itimerval real, virtual, profile; int status; if (setupInterrupt()) { perror("Failed to set up handler for SIGPROF"); return 1; } if (setupitimer() == -1) { perror("Failed to set up the ITIMER_PROF intervaltimer");return 1; } if (argc < 2){ fprintf (stderr, "Usage:%s command\n", argv[0]);return 1; } if ((child = fork()) == -1) { perror("Failed to fork"); return 1; } if (child == 0) { // child code execvp(argv[1], &argv[1]); perror("Child failed to execvp the command"); return 1; } else { // parent code while((retVal = waitpid(-1, &status, WNOHANG)) != child); getitimer(ITIMER_REAL, &real);getitimer(ITIMER_PROF, &profile);getitimer(ITIMER_VIRTUAL, &virtual); //ここも要修正 printf("real = %d.%ld", realSec, 1000000 - real.it_value.tv_usec); printf(" virtual = %d.%ld", virtualSec, 1000000 - virtual.it_value.tv_usec); printf(" profile = %d.%ld\n", profSec, 1000000 - profile.it_value.tv_usec); } } よろしくお願いします。
513 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 03:19:23 ] [1]授業単元:C言語 [2] 問題文:次のことを行うプログラムを,for文を用いて作成しなさい。 10個の要素をもつ整数配列dataを初期化して宣言する。 配列要素の中の最大値と最小値を出力しなさい。 なお,配列要素の値として,すべて負のものがあるデータも試してみること。 [3] 環境 [3.1] OS:Win [3.2] コンパイラ名とバージョン:VC++ 6.0 [3.3] 言語:C言語 [4]期限:なし 初歩的な問題で申し訳ないですが、よろしくお願いします。
514 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 03:30:10 ] >>513 #include <stdio.h> #define SIZE 10 int main() { //int data[SIZE] = {83,28,35,84,43,21,8,51,2,12}; int data[SIZE] = {-83,-28,-35,-84,-43,-21,-8,-51,-2,-12}; int min, max; int i; min = max = data[0]; for (i = 1; i < SIZE; i++) { if (data[i] > max) { max = data[i]; } else if (data[i] < min) { min = data[i]; } } printf("min = %d, max = %d\n", min, max); }
515 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 05:45:39 ] >>503 はい、お願いします。
516 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 05:47:28 ] 追記 >>503 クラス使わないで、構造体で作って動けば問題ないのでお願いします。
517 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 08:36:06 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7985.txt [3] 環境: [3.1] WindowsVista [3.2] Borland C++Compiler [3.3] C言語 [4] 期限: 2008年11月10日23:59まで
518 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 09:02:31 ] >>514 ありがとうございます!
519 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 09:12:11 ] >>517 #include <stdio.h> void main(void){ int i,t;t=0; for(i=1; i<=100; i++){if(i %3 == 0){printf("%d \n" ,i);t++;}} printf("\n total %d\n",t);}
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; }