1 名前:デフォルトの名無しさん [2008/10/01(水) 07:28:51 BE:151474728-PLT(18888)] あなたが解けない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++の宿題を片付けます 115代目 pc11.2ch.net/test/read.cgi/tech/1217741118/
664 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 22:44:49 ] [1] 授業単元:if文 [2] 問題文:3つの整数を入力し,それらを比較して,大,中,小を判定しなさい. 3つの整数が同じ値の場合,あるいは2つの整数が同じ値の場合でも 正確に判定ができるように対応すること. 全ての条件を場合分けするプログラムは不可とする. できるだけ少ない条件分けで対応できるよう工夫すること。 例 9 5 2 → 大:9 中:5 小:2 例 6 6 6 → 大:6,6,6 3つの数は等しい 例 6 6 3 → 大:6,6 小:3 例 6 6 9 → 大:9 小:6,6 [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 10/30 13時 [5] その他の制限: 特になし よろしくお願いします
665 名前: ◆O2tO.pRmks mailto:sage [2008/10/25(土) 00:55:24 ] [1] 授業単元:配列 [2] 問題文:配列a[10] = {53,68,9,55,42,70,43,66,97,84}の要素の最大値・最小値・平均値を調べ、結果を表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows XP [3.2] gcc [3.3] 言語:C [4] 期限:2008年10月25日まで [5] その他の制限:特になし
666 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:05:55 ] >>665 #include <stdio.h> int main(){ int a[10] = {53, 68, 9, 55, 42, 70, 43, 66, 97, 84}; int max, min, i; float ave = 0.0; max = a[0]; min = a[0]; for(i = 1; i < 10; i++){ if(max < a[i]) max = a[i]; if(min > a[i]) min = a[i]; ave += (float)a[i]; } ave /= 10.0; printf("最大値: %d\n", max); printf("最小値: %d\n", min); printf("平均値: %.1f\n", ave); }
667 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:24:51 ] >>664 #include<stdio.h> #include<stdlib.h> void main(void) { int num[3],w,cnt,i; for(cnt=0;cnt<3;cnt++) scanf("%d",&num[cnt]); for(cnt=0;cnt<2;cnt++) { for(i=cnt+1;i<3;i++) { if(num[cnt]<num[i]) { w=num[cnt]; num[cnt]=num[i]; num[i]=w; } } }
668 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:25:26 ] >>664 printf("大:%d",num[0]); if(num[0]==num[1]) printf(",%d",num[1]); else { if(num[1]==num[2]) { printf(" 小:%d,%d",num[1],num[2]); exit(0); } else printf(" 中:%d",num[1]); } if(num[0]==num[2]) printf(",%d 3つの数は等しい",num[2]); else printf(" 小:%d",num[2]); } gcc知らない…
669 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:37:48 ] >>664 #include <stdio.h> int main(){ int i, j, tmp; int count = 0; int a[3]; scanf("%d%d%d", &a[0], &a[1], &a[2]); /* 降順にソート */ for(i = 0; i < 3; i++){ for(j = i + 1; j < 3; j++){ if(a[i] < a[j]){ tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } }
670 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:38:17 ] >>664 続き /* 1個目と2個目を比較して値が違ったら「大」が決定 */ if(a[0] != a[1]){ printf("大: %d ", a[0]); /* 2個目と3個目を比較して「中・小」を決定 */ if(a[1] != a[2]) printf("中: %d 小: %d\n", a[1], a[2]); else printf("小: %d, %d\n", a[1], a[2]); } /* 1個目と2個目が一緒なら2個目と3個目を比較して「大・小」を決定 */ else{ if(a[1] != a[2]) printf("大: %d, %d 小: %d\n", a[0], a[1], a[2]); else printf("大: %d, %d, %d 3つの数は等しい\n", a[0], a[1], a[2]); } return 0; }
671 名前:669-670 mailto:sage [2008/10/25(土) 01:40:07 ] >>667-668 で既に回答出てたな・・
672 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:45:44 ] >>671 俺のは手抜きです^^;
673 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:52:31 ] >>672 結局同じようなことやってるからあまり変わらないっしょー
674 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 02:09:28 ] >>663 結局1番と2番は日本語の意味が理解できなかった。 2番は1番の意味がわかればできるけど1番は何回読んでもわからない・・・ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #define isOuter(val,ave,sd) ((val)> (ave) + 5*(var)) int main(){ FILE *fp,*fout; char buf[1024],*cp; double data[1024],ave,sum=0,sum2=0,var,sd; int cnt=0,i,k=0; if((fp = fopen("data.txt", "r")) == NULL) return 1; if((fout = fopen("peak.txt", "w")) == NULL) return 1; while((cp = fgets(buf,sizeof(buf),fp)) != NULL){ while((cp = strtok(cp," \t\r\n")) != NULL){ data[cnt] = atof(cp); sum += data[cnt]; sum2 += data[cnt]*data[cnt]; if(++cnt == 1024){ ave = sum / 1024.0; var = sum2 / 1024.0 - ave*ave; sd = sqrt(var); for(i=0;i<1024;i++) if(isOuter(data[i] , ave, sd)) fprintf(fout,"[%d]%f ", i+1,data[i]); fprintf(fout,"\n"); cnt = sum = sum2 = 0; } cp = NULL; } } fclose(fp); fclose(fout); }
675 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 04:36:38 ] >>620 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7845.txt
676 名前:675 mailto:sage [2008/10/25(土) 04:44:02 ] >>620 >>675 ミスった、スマン 一つ前の古いのをUPしてしまった… ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7846.txt
677 名前:デフォルトの名無しさん [2008/10/25(土) 05:36:07 ] [1] 授業単元:趣味プログラム [2] 問題文(含コード&リンク): sony.squares.net/dat.txt [3] 環境 [3.1] OS:WindowsVista [3.2] コンパイラ名とバージョン:最新版Cygwinのgcc [3.3] 言語:C [4] 期限: [無期限] [5] その他の制限:リンク先に記載。 重複を取り除きながらの挿入ソートでは10分経っても終わりませんでした。O(n^2) = O(366051^2) 重複を取り除きながらでも早いソートを実現したいです。お願いします。
678 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 06:28:59 ] >>677 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7847.c 条件Xってのがいまいち不明だったので手抜きで、最後に入ってる場所だけ分かる。
679 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 06:43:50 ] >>677 あれ、条件2ってどういうこと? 最大値が分かれば1から順に並べればいいってこと、、、なのか? ソートっていってるからそうじゃないような気がするんだが。
680 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 09:50:58 ] 値の範囲がわかってるなら、nが現れた行番号をその配列のn番目に入れればいいから、ソートする必要ない気がする
681 名前:デフォルトの名無しさん [2008/10/25(土) 13:10:37 ] >>678 ありがとうございます。参考にさせて貰います。 >>679-680 すいません、本来のプログラムでは未ソート時点では最大値や点の数が分かっていませんでした。
682 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 14:21:22 ] それが分かってないなら>>678 は使えないな、まさしく>>680 の手法だから 一旦二分木に移していく感じでならO(nlogn)でソートできるんじゃないかな c++のsetで試したからcのソース無いけど
683 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 15:00:23 ] Quickソートでいいんじゃない?
684 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 15:25:56 ] クイックソートしてから重複除いても>>677 でやったのよりそっちのほうが速いよね
685 名前:初心者 [2008/10/25(土) 15:26:11 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): ★下記の仕様を満たすプログラムをC言語で作成しなさい 【仕様】 表計算ソフト簡易プログラム ▽ Excelのように2次元配列で10人分の3教科の素点表示する。なお、素点は100点満点でランダムに作るものとする。 ▽ その右の列に個人別の3教科の合計・平均・順位(合計点の高い学生から順に)を表示する。なお平均は少数第1位までの表示とする。 ▽ 10人分の得点データの下の行に、合計・平均・最高点・最低点の行を作り、各行についてそれぞれ求めて表示する。 (表示例:空欄にはそれぞれ計算結果が入ることになる) 番号| 国語 数学 英語 |合計 |平均 |順位 1 | 75 35 40 | | | 2 | 69 75 82 | | | (中 略) 10 | 57 48 36 | | | --------------------------------------------------- 合計 | 平均 | 最高 | 最低 | [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン: 分かりません [3.3] 言語: C言語 [4] 期限: 来週中ぐらい [5] その他の制限: 繰り返し、条件処理、配列を勉強しました。 これらを使ってお願いします。 初心者なので初心者でも分かるようなプログラムを お願いします。
686 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 22:03:03 ] >>685 こんな感じでいいのか? ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7849.txt
687 名前:686 mailto:sage [2008/10/25(土) 22:07:11 ] あ、変な改行いれちまった。 79行目の最後の「\」と改行を消して80行目とつなげてくれ
688 名前:611 [2008/10/25(土) 22:32:12 ] 提示したプラグラムを補う感じで、>>611 お願いいたします。。
689 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 22:43:40 ] やだ
690 名前:デフォルトの名無しさん [2008/10/25(土) 22:49:55 ] [1]C [2]kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7850.txt [3]C言語 [4]来週の水曜 [5](2)はライブラリ関数のqsortを使うようお願いします よろしくお願いします。
691 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 01:50:39 ] C言語で長門がやってたみたいにゲームの改造とかできますか?
692 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 02:23:02 ] >>690 答え合ってるか分からん。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7852.txt
693 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 02:36:10 ] >>674 まず@番目の問題は、二次元配列で出力されている値のファイルを読み込むこと。 その値を1024個を一つのくくりとする。つまり1個目[0][1],2個目[0][2],・・・1024個目[205][3]とする。 この1024個の値の平均値と平均値から飛び出している値=最大値(極大値)を求める。 最初の1024個の最大値(極大値)を求めたら、次の1024個の最大値(極大値)を求める。 次の1024個とは1個目[206][0],2個目[206],[1],・・・,1024個目[411][3]とする。これをファイルの最後の値まで繰り返し行う。 こんな感じです。わかりやすく説明したつもりなんですけど・・・どうでしょうか? プログラムよろしくお願いします。
694 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 02:59:59 ] >>693 >1個目[0][1],2個目[0][2],・・・1024個目[205][3]とする。 なんで1024が[205][3]なの? 1024個ごとに平均値と最大値を出力すればいいのか?
695 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:00:12 ] >>691 長門裕之がゲームの改造をしていたのは知らなかったがプログラミング言語Cを用いてゲームの改造ならできるよ
696 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:02:33 ] >>694 209921行だからじゃない?
697 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:04:49 ] だけど「209921行5列」なのに「2097152個」ってなんかへんじゃね?
698 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:14:14 ] やっぱ理解できんわ
699 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:36:28 ] 実際にデータを見ると209920行なわけだが。。。
700 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:38:18 ] >>694 > 1024個ごとに平均値と最大値を出力すればいいのか? そう書いてある
701 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 03:43:30 ] >>693 は出題者だったか。 であれば、array[206][5]という2次元配列に読ませる必要があるのかどうかを知りたい。 別に1024個区切りで平均なり飛び出してる値なりが分かればいいんでしょ? それと、「(平均値+5*ρ)以上の値を最大値(極大値)とするように変更」という課題があるけれど、 じゃあ最初の課題では極大値の判定はどうやってやればいい?
702 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 05:09:52 ] >>611 >>688 簡易ボイヤームーア法で良ければこれで ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7853.txt 完全版はアルゴリズムが理解できん
703 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 05:18:45 ] ja.wikipedia.org/wiki/%E3%83%9C%E3%82%A4%E3%83%A4%E3%83%BC-%E3%83%A0%E3%83%BC%E3%82%A2%E6%96%87%E5%AD%97%E5%88%97%E6%A4%9C%E7%B4%A2%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0 ボイヤームーア
704 名前:デフォルトの名無しさん [2008/10/26(日) 08:49:35 ] 友達からC++のプログラムもらって家でコンパイルしたら strcpy_s()関数が使えません、という警告が出て、コンパイルが成功しませんでした。 調べてみたらstrcpy_sはstrcpyの拡張版らしくて、うちのコンパイラが若干古いので、strcpy_sは使えないみたいなんです。 それでプログラムのstrcpy_sをすべてstrcpyに置き換えたら、またエラーが出ました。 strcpy_sは引数の数が三個で、strcpyは二個なんで、その警告が出ました。 strcpy_sを、strcpyと同様の動作をさせる関数として定義すればうまくいくと思ったのですが、どのような関数を定義すればよいでしょうか。
705 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 08:53:42 ] >>704 例えば void strcpy_s(char *strDestination, size_t numberOfElements, const char *strSource) { strcpy(strDestination, strSource); } マクロでもいいと思うけど、というか、他にもいろいろ問題出てこないの?って気がしなくもない。
706 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 08:55:15 ] >>704 って糞マルチかよ。スレチだけどいいかと思って答えた俺のバカー
707 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 08:58:18 ] >>706 マルチだからといって無碍に切り捨てるのも問題かと。
708 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 09:02:56 ] マルチだと分かっていて回答するならふさわしいスレで回答できるじゃん。 今回はここかな。 pc11.2ch.net/test/read.cgi/tech/1224057986/499 宿題スレおよび以下はスレチでしょ pc11.2ch.net/test/read.cgi/tech/1224000127/681
709 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 09:53:26 ] >>708 御意
710 名前:デフォルトの名無しさん [2008/10/26(日) 11:48:59 ] コンソールからファイルを引数として渡すと、そのファイルのパーミッションと ディレクトリ種別などを取得するようにしたいです。→(例drwxr-xr-x) 以下のコードで、st_modeを8進数で表示してみたところ #include <stdio.h> #include <sys/stat.h> #include <stdlib.h> int main(int argc, char *argv[]){ struct stat abc; if(stat(argv[1], &abc)==-1){ perror("stat"); exit(EXIT_SUCCESS); } printf("%o\n", abc.st_mode); } パーミッション644のファイルが「100644」と表示されます。 これを100644の代わりに-rw-r--r--と表示するように実装するにはどのように 書けばよいか教えて下さい。宜しくお願いします。
711 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:07:41 ] abc.st_mode | 0777 って文字列にすんのかよ。 printf("%c" (abc.st_mode & S_ISVTX) ? 's' : '-'); printf("%c" (abc.st_mode & S_IRUSR) ? 's' : 'r'); printf("%c" (abc.st_mode & S_IWUSR) ? 's' : 'r'); printf("%c" (abc.st_mode & S_IXUSR) ? 's' : 'r'); 以下略
712 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:08:33 ] なんかひどいコピペミスをしたようだ。。。 printf("%c" (abc.st_mode & S_ISVTX) ? 's' : '-'); printf("%c" (abc.st_mode & S_IRUSR) ? 'r' : '-'); printf("%c" (abc.st_mode & S_IWUSR) ? 'w' : '-'); printf("%c" (abc.st_mode & S_IXUSR) ? 'x' : '-'); 以下略
713 名前:デフォルトの名無しさん [2008/10/26(日) 12:17:48 ] printfよりもputcharがよくね?
714 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:31:30 ] そだね。putcharの方がよかた。 っていうかカンマも抜けてるし何このグダグダ感orz
715 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:32:45 ] ('ー')
716 名前:デフォルトの名無しさん [2008/10/26(日) 12:41:28 ] >>712 出来ました。ありがとうございます。 ちなみにディレクトリがdでなく-になってしまうのですがまだ他に 何か必要でしょうか?
717 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:52:23 ] 横から口だし失礼 ボイヤームーアってどのくらい速いんですか? ソートの種類で例えるとどのソートに匹敵する実用的なアルゴリズムなんでしょうか?
718 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:54:30 ] >>717 つ www.google.co.jp/
719 名前:デフォルトの名無しさん [2008/10/26(日) 12:59:00 ] setuidbit, setgidbit, stickybitなどを考慮するともっとひどいコードに。
720 名前:デフォルトの名無しさん [2008/10/26(日) 13:10:37 ] Visual Studio使ってる人ってVisual C++ Express Edition ?
721 名前:デフォルトの名無しさん [2008/10/26(日) 13:10:49 ] >>719 なるほど。あんまし大変になりそうであればとりあえずこんな感じで十分 なのでいいです。ありがとうございました。
722 名前:デフォルトの名無しさん [2008/10/26(日) 14:02:41 ] [1] 授業単元:構造体 [2] 問題文:1,名簿ファイルを読み込み、生年月日の順に並べる、苗字の順に並べる、名前の順に並べる、mail addressの順に並べるプログラムを作れ。ただし、文字列の大小を比較する関数として、strcmpを用いよ。 #include <string.h> int strcmp(char str1, char str2); ------------------------ str1>str2 → 0より小さな整数 ,str1==str2 → 0 ,str1<str2 → 0より大きい整数 関数 void SortData1(struct person *person, int *index, int n); /* 生年月日の順番に並べる */ 関数 void SortData2(struct person *person, int *index, int n); /* 名の順番に並べる */ 関数 void SortData3(struct person *person, int *index, int n); /* 姓の順番に並べる */ 関数 void SortData4(struct person *person, int *index, int n); /* mail-addressの順番に並べる */ をそれぞれ作り、 結果を表示せよ。 2,県の郵便番号のリスト(メンバーの数約5000個)を配列の大きさだけを変えて、これを郵便番号順、読み仮名順に並べ替えるプログラムを作れ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年10月27日16:00まで [5] その他の制限:1の関数の宣言は以下のようにする。 関数 void ReadData(struct person *person, int *index, int *n); 関数 void PrintData(struct person *person, int *index, int n); 関数ReadData、PrintDataでは、 while(scanf(“%d %s %s %s %s”,&person[i].birth, person[i].first_name, person[i],last_name, person[i].mail_addr, person[i].thema)!=EOF){ index[i]=i; i++; } ------------------------------------------------------------- for(i=0;i<n;i++){ printf(“%d %s %s %s %s\n”,person[index[i]].birth, person[index[i]].first_name, person[index[i]].last_name, person[index[i]].mail_addr,person[index[i]].thema); } とりあえず、問題1の並び替えがうまく出来ませんorz お願いします。
723 名前:デフォルトの名無しさん [2008/10/26(日) 14:09:02 ] [1] 授業単元:プログラミング [2] 問題文: Newton--Raphson法を用いて X*X*X-7X*X+16X-10=0 の解を求めよ。 [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:10/24 [5] その他の制限:初心者です。なるべく基本的な構造でお願いします。 >>474 以前お願いしたのですがうまくいきません。どなたか問題点を指摘 していただきたいです。また初歩的な30行程度のプログラムにしたいと 思っています。
724 名前: ◆1xFXRhO/iQ mailto:sage [2008/10/26(日) 14:26:39 ] [1] 授業単元:離散数学 [2] 問題文(含コード&リンク): 重みつき無向グラフを隣接行列で表現し、縮約を行うプログラムを実装せよ。 [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月30日まで [5] その他の制限: 期限が近めですが、なんとか、宜しくお願いします。
725 名前:デフォルトの名無しさん [2008/10/26(日) 14:29:14 ] >>723 #include <stdio.h> #include <math.h> #define EPS0 1.0e-5 double fnc(double x); double dfnc(double x); main() { double x0, x1; x0 = 0; x1 = 10; while(fabs(x1 - x0) > EPS0) { x0 = x1; x1 = x0 - fnc(x0)/dfnc(x0); } printf("x = %lf\n", x1); } double fnc(double x) { return x*x*x - 7*x*x + 16*x - 10; } double dfnc(double x) { return 3*x*x - 14*x + 16; }
726 名前:デフォルトの名無しさん [2008/10/26(日) 14:36:19 ] >>725 ありがとうございます。ものすごく早い回答がいただけて とてもうれしいです。早速じっこうしてみましたが「関数の 値を返すべき」という警告がでるのでぜひ解除して いただきたいです。本当にお願いします。
727 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:38:31 ] >>726 main()の最後に return 0; を付ければいい
728 名前:デフォルトの名無しさん [2008/10/26(日) 14:42:17 ] CodeGear C++ 5.92 for Win32 Copyright (c) 1993, 2007 Code kadai5z.c: 警告 W8070 kadai5z.c 20: 関数は値を返すべき(関数 main ) 警告 W8066 kadai5z.c 30: 実行されないコード(関数 dfnc ) エラー E2378 kadai5z.c 31: Return文に ; がない(関数 dfnc *** コンパイル中に 1 個のエラーが発生しました *** このような表示になります。
729 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:49:47 ] 縮約のアルゴリズムってこんな感じ?面倒だから実装はしないけど 縮約関数: func(G, v, w) 意味: グラフGに於ける点(v,w)で結ばれる辺を縮約する 仕様: グラフGに於ける点wを削除し、点wに接続する全有向辺を点vに接続し直す(有向辺を追加する) ただし、重複している場合は追加しない (点wを削除するためには、新規にグラフG’を作成?)
730 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:51:18 ] 辺v,wの削除も
731 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:51:36 ] hairanai
732 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:52:48 ] 無向グラフだ
733 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 15:29:11 ] [1] 授業単元:プログラミング [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7855.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:10/27 [5] その他の制限:途中まで作成はしたのですが上手くいきません。 よろしくお願いします。
734 名前:デフォルトの名無しさん [2008/10/26(日) 15:40:32 ] >>733 #include<stdio.h> #define N 100 main() { int t; double a, x[N+1]; printf("成長パラメーターの入力"); scanf("%lf", &a); x[0] = 0.5; for (t=0;t<=N-1;t++) { x[t+1] = a * x[t] * (1.0 - x[t]); } for (t=0;t<=N;t++) printf("t=%dのとき人口は%lgです。\n",t,x[t]); return 0; }
735 名前:724 ◆1xFXRhO/iQ mailto:sage [2008/10/26(日) 15:42:27 ] >>729 はい、ただ重複している場合は追加しないのではなく、 重みを足す事になっています。 なんとか、実装して頂けると嬉しいです。。
736 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:07:21 ] >>735 やってみる
737 名前:724 ◆1xFXRhO/iQ mailto:sage [2008/10/26(日) 16:21:56 ] >>736 ありがとうございます!
738 名前:デフォルトの名無しさん [2008/10/26(日) 16:38:30 ] [1] 授業単元:プログラミング [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7856.txt [3] 環境 [3.1] OS:MacOSX→Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:10/28 [5] その他の制限: 初心者ながらいろんなところでヘルプを得ながら必死に 書き上げたのですが、実はMacOSX上でしか動作しないことがわかりました。 Linux上でコンパイルするとエラーになってしまいもはやデバッグのしようが わかりません。Linux上での動作が条件なので書き直したいのですが、どなたか 助けてください。
739 名前:デフォルトの名無しさん [2008/10/26(日) 16:47:47 ] >>738 NetBSDでも動作するよ。
740 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:48:10 ] >>738 linuxでも動いた。 コンパイルするシステムのヘッダファイルとかそういうの次第。
741 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:56:58 ] [1] 授業単元: アルゴリズムとデータ構造 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7857.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年10月27日10:00
742 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:59:28 ] [1] 授業単元:C言語 「分野:ポインタ演習」 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=7744 の7858.txtです。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:08年10月27日24:00まで [5] その他の制限:お手数ですが、C言語の基本的な関数のみでお願いします。
743 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 16:59:33 ] >>737 出来た。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7860.txt
744 名前:デフォルトの名無しさん [2008/10/26(日) 17:10:49 ] >>742 #include <stdlib.h> #include <stdio.h> #include <memory.h> double horner(double x, double *a, int n); main() { int i, n; double x, *a; printf("Horner の方法で多項式を計算します!\n"); printf("次数n を入力して下さい:"); scanf("%d", &n); a = (double*)malloc(sizeof(double) * (n + 1)); printf("実数係数を順に入力して下さい:\n"); for(i = n; i >= 0; i--){ printf("a[%d] = ", i); scanf("%lf", &a[i]); } printf("x の値を入力して下さい:"); scanf("%lf", &x); printf("多項式の値 = %lg\n", horner(x, a, n)); free(a); return 0; } double horner(double x, double *a, int n) { if (n == 0) return a[0]; return x * horner(x, a + 1, n - 1) + a[0]; }
745 名前:724 ◆1xFXRhO/iQ mailto:sage [2008/10/26(日) 17:27:55 ] >>743 こんなに早く出来るなんて、思ってませんでした。。 本当にありがとうございました!
746 名前:デフォルトの名無しさん [2008/10/26(日) 17:45:25 ] >>739 >>740 そうですか。確認有り難うございました。ある特定のLinuxの環境での実行が条件 なので、とにかくそこの環境でコンパイルしたいのですが、以下のエラーって どう変えればいいかとかわかったりしますでしょうか?エラーになる環境がないと 難しいかも知れませんが。。(エラーになるLinuxの環境が何のディストリビューション かもわからず、すみません。Linuxクラスタだとか聞きましたが) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7861.txt
747 名前:デフォルトの名無しさん [2008/10/26(日) 17:49:18 ] >>746 #include <unistd.h>
748 名前:デフォルトの名無しさん [2008/10/26(日) 17:54:21 ] 鼻血が止まらん
749 名前:デフォルトの名無しさん [2008/10/26(日) 17:54:44 ] すまん。誤爆だ。
750 名前:デフォルトの名無しさん [2008/10/26(日) 17:57:50 ] >>747 ありがとうございます。追加しましたが、どうやらエラーは変わらないようです
751 名前:デフォルトの名無しさん [2008/10/26(日) 18:11:45 ] >>750 ディストロがわからないのはつらいね。 #include <sys/types.h> では?
752 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 18:15:28 ] 自分が今使ってるOSがなんだか分からんの?
753 名前:デフォルトの名無しさん [2008/10/26(日) 18:27:04 ] >>751 有り難うございました。半分くらい減りました。残るエラーはこちらです↓ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7862.txt >>752 すみません、自分の管理している環境じゃないもので、テルネットして実行しています。 uname -aは打てますが、これが有益な情報かどうか不明です。。 (ちなみに打ったところ最後がi686 GNU/Linuxとなってました。)
754 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 18:55:06 ] >>753 その uname -a 結果ください。
755 名前:デフォルトの名無しさん [2008/10/26(日) 19:04:56 ] >>754 Linux XXXX 2.6.18-6-686-bigmem #1 SMP MM DD hh:mm:ss 2008 i686 GNU/Linux と出ました。 それとぐぐって出て来たヘッダファイル(fcntl.hとか)を適当に追加しましたが駄目でした。 S_IFMT, S_IFBLKとかって何に定義されてるんでしょうか
756 名前:デフォルトの名無しさん [2008/10/26(日) 19:06:19 ] すみません。Debian。ですかね。
757 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:09:50 ] >>734 ありがとうございました!
758 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:17:16 ] [1] 授業単元:プログラミング [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7863.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:10/27 [5] その他の制限:式の部分が上手くいきません。 よろしくお願いします。
759 名前:デフォルトの名無しさん [2008/10/26(日) 19:38:23 ] こうやって見ると数式のプログラムばかりだね 理学部やならいいけど、工学部情報学科ならば実務とはかけ離れてるのも大概にしろと
760 名前:デフォルトの名無しさん [2008/10/26(日) 19:38:56 ] プログラム演習は数式遊びの場じゃない
761 名前:デフォルトの名無しさん [2008/10/26(日) 19:40:09 ] 東大のプログラムの授業なんかは ユニックスのパイプコマンドを作成しろとか サーバー通信なんちゃらの実務的なのが多い
762 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:03:15 ] >>761 東大じゃありませんが、1990年ごろの情報系学部演習ですでに、 ごく簡単なシェル/パイプを実装, (fork() +exec*()+pipe()) をやっていました。シグナルとかセマフォとかも。無論、当時の私には極悪・試行錯誤の連続で泊り込む勢いでした。 バークレーソケットは3年次後半でしました。 それはそうと、ロジスティック方程式を解いて(がんばれば高校数学でできます。)解析解に代入する、とかはどうでしょう。やっぱりだめですか。 つja.wikipedia.org/wiki/%E3%83%AD%E3%82%B8%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E6%96%B9%E7%A8%8B%E5%BC%8F 数値解析部門は、それはそれで習得しなければならないと思います。
763 名前:デフォルトの名無しさん [2008/10/26(日) 20:17:24 ] MATLBAでやったら全部一発
764 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:34:52 ] >>755 私の環境は WindowsXP/cygwin なんですが、エラーはでませんでした。(警告によるとキャストが必要なものはありましたが、まあ問題ない) さて、S_* などは、私の環境では sys/stat.h にあるのですが、(実体は /usr/include/sys/stat.h) >>755 さんの環境でも、 インクルードファイルをみつけているようですね。(インクルードパスがちがっておれば、みつけられない、ってでてくると思います。) すると、暗黙の #define が unix(posix) 用になっていないのかもしれません。 gcc -v ソース.c 2> mes.txt として、mes.txt の内容をください。 2> がうまくいかないのであれば、その旨書き込んでください。
765 名前:デフォルトの名無しさん [2008/10/26(日) 20:56:37 ] >>764 レス有り難うございます。mes.txtをアップ致しました。 thread modelというのはposixになっているようですが。。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7864.txt
766 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:27:10 ] >>765 では、 gcc -Dunix -v ソース.c 2> mes2.txt の結果をください。 /usr/include/sys/stat.h の内容もください。 そ れ と、 このソースファイルをコンパイルしたいな、と思った動機を教えてください。というか白状してください。(笑) もし演習の課題ならば、コンパイルできない、という事態に陥らないよう、教官がいろいろ陰で配慮してくださるはず。 うまくいかないのは、課題を出した教官が怠慢だったのか、ということもあるかもしれませんが、 私の見るところ、自主的に今ある環境で自分のやりたいことをやってみた、という気がします。 その意気やよし! 最後まで付き合います。ただし今日は徹夜を覚悟してください。
767 名前:デフォルトの名無しさん [2008/10/26(日) 21:40:07 ] [1] 授業単元:データ構造とアルゴリズム演習 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7865.txt [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 10月28日まで [5] その他の制限: 特になし よろしくお願いします
768 名前:デフォルトの名無しさん [2008/10/26(日) 21:50:29 ] >>766 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7866.txt kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7867.txt アップ致しました。本当に課題です。文系なのに間違って海外の理系の学校に 来てしまい毎日半端ない宿題に追われているところです。なので、自主的に、 といいたいところですが今はとにかくコンパイルすることしか頭にありません。。 助けばかり乞うのは自分のためによくないのですが最近はあまりに半端ない分量の ため依存率が高くなってきました。
769 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:06:22 ] >>768 なんだか、教官が手抜きなんですねぇ。それは大変。 では、 gcc -v -D__USE_BSD -v ソース.c 2> mes3.txt として mes3.txt の内容をください。 あと、コンパイルできたかどうか、コンパイルできたのなら実行結果 (おそらくは ./a.out . > mes4.txt として mes4.txt に結果が入ると思います。) を教えて下さい。 あるいは教官に「コンパイルできないよ!」と主張してください。(そちらは昼ですか?) 30分後にのぞきます。
770 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:11:05 ] >>767 1-1: struct cell *cell2 = cell1->next; struct cell *cell3 = cell2->next; printf("%d\n%d\n%d\n", cell1->element, cell2->element, cell3->element); 1-2: struct cell *c; for (c = cell1; c != NULL; c = c->next) { printf("%d\n", c->element); }
771 名前:デフォルトの名無しさん [2008/10/26(日) 22:18:55 ] >>769 原因が判明しました。怒らないで下さい。いつもメイクファイルを使用しているのですが、 常にgccのオプションは-Wall -std=c99としています。先程たまたま-std=c99を取ったらコンパイル 出来てしまいました!(なんでMacの環境だと同じメイクファイルでエラーにならないんだろう。。) なぜかの原因究明はもう辞めて寝ます。徹夜したところなので。。ちなみに教官にMac OSXの環境で つくったからこれで勘弁して!って言ったら駄目だと言われました。厳しい世の中ですね。 色々とサポート有り難うございました。 以上
772 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:19:20 ] 2-1: void append(struct cell **cell1, int e) { struct cell *cell2 = (*cell1)->next; (*cell1)->next = malloc(sizeof(struct cell)); (*cell1)->next->element = e; (*cell1)->next->next = cell2; } 2-2: void prepend(struct cell **cell1, int e) { struct cell *cell0 = malloc(sizeof(struct cell)); cell0->element = e; cell0->next = *cell1; *cell1 = cell0; } 使い方: append(&cell1, /* 新しい element */) prepend(&cell1, /* 新しい element */)
773 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:45:12 ] >>771 んー、それはそれで謎なんですが‥‥‥。 -std=c99 は、直近のCの規格でコンパイルする、ということでしかないので、今回は特に影響がないはず。 c99とすると、でインクルードするヘッダがかわるのでしょうか?c++ 風に <iostream> と.h がない書き方にしないといけないのでしょうか?よくわかりません。 このあたりは識者からのコメントをお待ちいたします。 実行結果を教えてくださるとありがたいです。ともあれ、おやすみなさい。
774 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:03:46 ] gccの場合、-std使うとたしかそれに合わせて標準のヘッダの中身も 変化する(#ifdefなどを使って)から、その影響はあると思う。
775 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:06:18 ] [1] 授業単元:Cプロギラミング [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:inux [3.2] コンパイラ名とバージョン:gc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
776 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:10:01 ] >>666 遅れましたが、ありがとうございました。
777 名前: ◆ojvIN3PEqY [2008/10/26(日) 23:31:37 ] [1] 授業単元:プログラミング [2] 問題文:ビットマップディスプレイの原理を用いて、入力した整数(0〜1000000)を、ビットマップ式に表示するプログラムをつくれ。 例 357111 *** *** *** * * * * * * * * * *** *** * * * * * * * * * * *** *** * * * * [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年10月27日まで [5] その他の制限:配列の基礎まで習いました。 お願いいたします
778 名前: ◆ojvIN3PEqY [2008/10/26(日) 23:33:36 ] 例がおかしくなってしまったので無視してください(*_*)
779 名前:デフォルトの名無しさん [2008/10/26(日) 23:40:11 ] [1] 授業単元:ハードウェア設計 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7844.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C++ [4] 期限: 10月28日まで [5] その他の制限: 特になし よろしくお願いします。
780 名前:775 mailto:sage [2008/10/26(日) 23:43:32 ] 問題文に間違いがあったので修正します。 [1] 授業単元:Cプロギラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:inux [3.2] コンパイラ名とバージョン:gc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
781 名前:デフォルトの名無しさん [2008/10/26(日) 23:44:21 ] >>777 #include <stdio.h> #include <stdlib.h> int main() { char s[81]; int i = 357111; sprintf(s, "banner %d", i); return system(s); }
782 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:48:42 ] >>774 んー、では 64bit がらみですか?それとも <sys/stat.h> の内容が変わったのか? ちょっと調べてみましたが、最近は stat(2) 返り値の st_mode の判別方法として、 if (S_ISBLK(infobuf.st_mode)) printf("block device.\n"); というマクロが定義されているようですね。 私は、 if ((infobuf.st_mode & S_IFMT) == S_IFBLK) printf("block device.\n"); しかしらなかったのですが。 ひきつづき識者のコメントをいただけたら、と思います。
783 名前:デフォルトの名無しさん [2008/10/27(月) 00:09:30 ] 基本情報スレからきました
784 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:17:26 ] >>777 #include<stdio.h> #include<string.h> // memset #define WIDTH (4*7) #define HEIGHT (5) void numset(char screen[HEIGHT][WIDTH], int x, int y, int num){ static const char font[][4*10+1]={ // 0123456789 の順に 3x5 で文字+数字間と末尾に一文字空白入れる "*** * *** *** * * *** *** *** *** *** ", "* * * * * * * * * * * * * * ", "* * * *** *** *** *** *** * *** *** ", "* * * * * * * * * * * * * ", "*** * *** *** * *** *** * *** *** ", }; int ix, iy; for(iy=0;iy<5;iy++) for(ix=0;ix<4;ix++) screen[y+iy][x+ix]=font[iy][num*4+ix]; } void display_number(long value){ char screen[HEIGHT][WIDTH]; long div, x, y=0; if(value<0 || value>1000000) return; memset(screen, '\0', sizeof(screen)); for(div=1;value/div>=10;div*=10); for(x=0;div>0;div/=10,x+=4) numset(screen, x, y, (value/div)%10); for(y=0;y<HEIGHT;y++) printf("%s\n", screen[y]); } int main(int argc, char *argv[]){ int num=123456; if(argc==2) sscanf(argv[1], "%d", &num); display_number(num); return 0; }
785 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:37:21 ] >>782 ヘッダ見ればいいんじゃ、とおもうんだけど。。。
786 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:50:25 ] 円周率3より悲惨な事実w 572 名前:名無し検定1級さん 投稿日:2008/10/27(月) 00:48:29 と思ったけど、今の大学3年以下のゆとり教育課程では 方程式を高校で初めて学ぶんだったねw ありえんwww 複素数無くなったしw
787 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:53:46 ] 二次方程式 / 複素数平面 じゃないかね
788 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:54:39 ] >>779 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7869.txt 問題2についてはなんか違う気もするけど仕様を満たせばいいかな。 gccでコンパイルできるかなぁ
789 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:58:40 ] 1, 1,2, 3,2,1, 1,2,3,4, 5,4,3,2,1, . . . これらの規則的な数字を配列のvd[1〜100]に順番に入れていきたいんですけどどうしたらいいでしょう。 あとその反対の 1, 2,1, 1,2,3, 4,3,2,1, 1,2,3,4,5, . . . をvm[1〜100]に順番に入れたいのですが、 ループさせてうまく配列に入れられないでしょうか。 わかるかた教えてください。 お願いします。
790 名前:デフォルトの名無しさん [2008/10/27(月) 01:07:17 ] [1] 授業単元:構造体 [2] 問題文:1,名簿ファイルを読み込み、生年月日の順に並べる、苗字の順に並べる、名前の順に並べる、mail addressの順に並べるプログラムを作れ。ただし、文字列の大小を比較する関数として、strcmpを用いよ。 #include <string.h> int strcmp(char str1, char str2); ------------------------ str1>str2 → 0より小さな整数 ,str1==str2 → 0 ,str1<str2 → 0より大きい整数 関数 void SortData1(struct person *person, int *index, int n); /* 生年月日の順番に並べる */ 関数 void SortData2(struct person *person, int *index, int n); /* 名の順番に並べる */ 関数 void SortData3(struct person *person, int *index, int n); /* 姓の順番に並べる */ 関数 void SortData4(struct person *person, int *index, int n); /* mail-addressの順番に並べる */ をそれぞれ作り、 結果を表示せよ。 2,県の郵便番号のリスト(メンバーの数約5000個)を配列の大きさだけを変えて、これを郵便番号順、読み仮名順に並べ替えるプログラムを作れ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年10月27日16:00まで [5] その他の制限:1の関数の宣言は以下のようにする。 関数 void ReadData(struct person *person, int *index, int *n); 関数 void PrintData(struct person *person, int *index, int n); 関数ReadData、PrintDataでは、 while(scanf(“%d %s %s %s %s”,&person[i].birth, person[i].first_name, person[i],last_name, person[i].mail_addr, person[i].thema)!=EOF){ index[i]=i; i++; } ------------------------------------------------------------- for(i=0;i<n;i++){ printf(“%d %s %s %s %s\n”,person[index[i]].birth, person[index[i]].first_name, person[index[i]].last_name, person[index[i]].mail_addr,person[index[i]].thema); } とりあえず、問題1の並び替えがうまく出来ませんorz お願いします。
791 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:08:57 ] >>787 もちろん一次のこと さらに複素数も無限級数もやらなくなった
792 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:09:34 ] IT業界だけじゃないけど、これから日本のエンジニアは大変なことになる 大量に採用するなら今年までにしとけ 再来年からはヤバイ奴らが入社してくるぞww
793 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:10:28 ] >>790 名簿ファイル下さい
794 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:13:49 ] >>791 んじゃ中学で何習うのorz
795 名前:デフォルトの名無しさん [2008/10/27(月) 01:24:26 ] >>793 名簿ファイルはリアルに教授の名前載ってるから、あげるの無理なんです すみません
796 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:25:49 ] >>795 せめて構造体の中身教えてな themaには何が入ってるんだ? 研究テーマか何かか?
797 名前:775 mailto:sage [2008/10/27(月) 01:26:48 ] >>780 をお願いします。
798 名前:デフォルトの名無しさん [2008/10/27(月) 01:37:20 ] >>796 名簿はこんな感じ 19670712 namae a aaaaaa@xxx.aaaaaa.ac.jp Uchu 19790102 namae b bbbbbb@xxx.bbbbbb.ac.jp Kotaidenshi 19300303 namae c cccccc@xxx.cccccc.ac.jp Uchu ---------------------------------------------------- themaには研究テーマが入ってます 宜しくお願いします
799 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 02:27:33 ] [1] 授業単元:プログラミング [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7863.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:10/27 [5] その他の制限:何度もすいません・・・ 式がやはりネックです
800 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 02:38:23 ] >>701 >別に1024個区切りで平均なり飛び出してる値なりが分かればいいんでしょ? そういうことです。 >「(平均値+5*ρ)以上の値を最大値(極大値)とするように変更」という課題があるけれど、 じゃあ最初の課題では極大値の判定はどうやってやればいい? 平均値以上の値を最大値(極大値)としなきゃいけないんですOTL
801 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 03:00:37 ] >>790 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7870.txt とりあえず、1番だけ。 2番は問題の意味がよくわからない。 もっと詳しく書いてくれ。 必要なデータとかあればそれもよろしく。 今日はもう寝る。
802 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 03:17:59 ] >>663 問題修正 [1] 授業単元: 信号処理 [2] 問題文(含コード&リンク): @ 5行209921列の2次元配列のファイルを読み込みなさい。ファイルの値を1024個で区切り1024個中の値の平均値と(平均値+5*ρ)以上の値を最大値(極大値)を求めなさい。ρを標準偏差とする。 最大値をmax1、max2、max3、・・・・として最大値は1個とは限らないこととする。 また1024個の最大値を求め終わったら、次の1024個の最大値を求めなさい。この作業をファイルの最後の値までやりなさい。 ただし、ファイルのサイズは17.2MBととし十分なメモリ領域を確保すること。 ヒント:malloc関数 ※ファイル↓(17MBもあるのでDLするのに時間がかかるかもしれません。お手数かけます。) kissho6.xii.jp/14/src/1yon14506.zip.html DLKey:data A 求めた最大値をpeak.txtに出力しなさい。1行目を最初の1024個中で求めた最大値を表示させ、2行目からは次の1024個中から求めた最大値を表示させなさい。 B @で読み込んだファイルの数値は周波数1,2,3,…,1024の時の値である。1024個で区切ったのはそのためである。 @で求めた各々の最大値の周波数を [周波数]最大値 となるようにAで出力したpeak.txtに出力できるように変更させなさい。 例:peak.txt→ [67]3.214283 [84]2.4930390 [148]5.3485704 ・・・・ [38]3.4255342 [72]3.214283 [98]2.434924390・・・・ ・ ・ ・ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月27日午後5時 [5] その他の制限: 特になし よろしくお願いします。
803 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 03:20:10 ] >>802 補足説明 まず@番目の問題は、二次元配列で出力されている値のファイルを読み込むこと。 その値を1024個を一つのくくりとする。つまり1個目[0][0],2個目[0][1],・・・,5個目[0][4],6個目[1][0],・・・,1024個目[205][3]とする。このとき個数=周波数の値でもある。 この1024個の値の平均値と最大値(極大値)を求める。 最初の1024個の最大値(極大値)を求めたら、次の1024個の最大値(極大値)を求める。 次の1024個とは1個目[206][0],2個目[206],[1],・・・,1024個目[411][3]とする。これをファイルの最後の値まで繰り返し行う。 よろしくお願いします。
804 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 03:57:31 ] [1] 授業単元:配列 [2] 問題文:10人分の2科目の試験得点(100点満点)を2次元配列に初期化しておく。2次元配列vの宣言と初期化は以下のとおり int v[2][10]={{55,67,45,78,89,91,73,50,80,69} {44,59,87,92,60,51,77,89,64,53}}; この10人分の科目別得点の平均を求めなさい。ただし、2科目の科目別平均は次の1次元配列に格納する。 double mean[2] doubleという型名で配列の名前がmean 《実行結果》 科目1の平均=69.700000 科目2の平均=67.600000 [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン:bcc [3.3] 言語:C [4] 期限:10/27 午後1時 [5] その他の制限:出来るだけ短く どうかよろしくお願いします
805 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 03:57:47 ] >>785 そう、だから >>768 で sys/stat.h を貼ってもらって、それをみたんですが、 くだんの#define は #if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN の下で定義されていました。 mac osx = darwin ≒ FreeBSD+mach? であっても、 -std=c99 とすると、この上のどれも #define されず、 それでいて-std= を指定しなければ、この上のどれかが #define される ということ、かつ >>774 より-std で#define の内容がかわる、ということですから、そんなことがあっても不思議でない、ということです。 単にそれだけですが。
806 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 04:19:58 ] >>805 失礼。認識間違いしていました。 >>768 の環境では__USE_BSD も __USE_MISC も __USE_XOPEN もどれも #define されないようですね。 でも手元のVine Linux 4.2 では __USE_BSD と __USE_MISC が #define されています。(#error で確認) したがって >>768 の環境に問題があるのでしょうか。debian な人にお願いするしかないですね。
807 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 04:24:18 ] >>806 手元の Vine Linux 4.2 で -std=c99 をコンパイルすると、>>768 と同じ現象が再現しました。 じゃ、いったいなにが #define されているのでしょうか‥‥‥。
808 名前:デフォルトの名無しさん [2008/10/27(月) 08:13:30 ] 【質問テンプレ】 [1] 構造体: [2] 英文なので翻訳します。 この宿題の中で、僕はFieldとScreenという2つのクラスを持っています。 Screen というクラスはField というクラスを80個持ちます。 で、問題はここからなのですが 教授は「Screenが無制限にFieldを持つようにプログラムを作れば、ボーナス点をやる」 とか言いだしたのでどうやるか教えてください。 [3] 環境 [3.1] うぃんどーず [3.2] ぼーらんど [3.3] C++ [4] 一週間後 [5] 制限:new とか使う感じです。
809 名前:デフォルトの名無しさん [2008/10/27(月) 08:13:42 ] >>801 ありがとうございます 問題2は 郵便番号 区(漢字で) 町(カタカナで) 町(漢字で) の順に並んだ名簿のファイルを読み込んで並び変えます
810 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 08:21:13 ] >>808 [3] 環境 [3.1] うぃんどーず [3.2] ぼーらんど Windowsもborlandも読めないだろうと馬鹿にしてるんだな
811 名前:デフォルトの名無しさん [2008/10/27(月) 08:28:46 ] >>810 いやwwwwwそういうわけじゃないです。。。 教えてくださいお願いします!
812 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 08:56:43 ] >>808 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7871.txt std::vectorを使ったがnew/deleteでも同じようにいけるはず 誰かに任せた
813 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 08:57:50 ] #include <iterator> #include <functional> は不要なので削除して下さい
814 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 08:59:31 ] >>789 int i, j, k, flag, vm[100]; for(i=1,k=0,flag=1; flag; i++) { for(j=1; j<2*i-1 && flag; j++) { vm[k++] = j; if(k==100) flag = 0; } for(; j>0 && flag; j--) { vm[k++] = j; if(k==100) flag = 0; } } 下の場合は for(j=1; j<2*i&& flag ; j++) {
815 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 09:07:36 ] >>812 ありがとうございます。 でもnew/delete使う感じでお願いしたいんです。 vectorが何のこっちゃ分かりません。すみません・・・
816 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 09:09:19 ] [1] 授業単元: 配列 [2] 問題文(含コード&リンク) 身長について処理をするプログラムの作成 最大20とする整数nをキーボードから入力する。 次に、n人分の実数(身長)をキーボードから入力しその平均身長をもとめ、 さらにそのそれぞれの人の身長と、平均身長との差を一人一行ずつ出力しなさい。 小数点以下は無視していい。 例) n=3の場合 170.0 0.0 165.0 -5.0 175.0 5.0 [3] Windows VC 6.0 言語:C++ [4] 期限:今日中 [5] その他の制限:特になし c言語を侮っていてさぼり気味だったつけがまわり、気がついたら全くわからなくなってました。 ヒントだけでもいいのでどうかお願いします。
817 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 09:20:11 ] >>815 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7872.txt わかるかな?これ以上簡単に書けんよ
818 名前:デフォルトの名無しさん [2008/10/27(月) 09:24:37 ] >>817 ありがとうございます!
819 名前:デフォルトの名無しさん [2008/10/27(月) 09:49:54 ] [1] 授業単元: プログラミング基礎 [2] 問題文: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7873.txt [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Visual Studio 2005 [3.3] 言語: C [4] 期限: 10月27日 21:00まで よろしくお願いします
820 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 10:20:56 ] pc11.2ch.net/test/read.cgi/gamedev/1217601153/ Syntax Error. しかしらないキチガイが現れました
821 名前:デフォルトの名無しさん [2008/10/27(月) 10:26:09 ] >>816 #include <stdio.h> int main(void) { int i, n; int sincho[20]; int sum, heikin; printf("n? "); scanf("%d", &n); if (n >= 20) { printf("nが大きすぎます。\n"); return 1; } for(i = 0; i < n; i++) { printf("%d人目の身長: ", i+1); scanf("%d", &sincho[i]); } sum = sincho[0]; for(i = 1; i < n; i++) { sum += sincho[i]; } heikin = sum / n; for(i = 0; i < n; i++) { printf("%d %d\n", sincho[i], sincho[i] - heikin); } return 0; }
822 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 10:31:06 ] >>816 #include <stdio.h> int main(int argc, char *argv[]) { double height[20], sum, avg; int n, i; printf("n の値を入力してください: "); scanf("%d%*[^\n]", &n); if (n > 20) { puts("大きすぎます"); return 1; } sum = 0.0; for (i = 0; i < n; i++) { printf("身長を入力してください: "); scanf("%lf%*[^\n]", &height[i]); sum += height[i]; } avg = sum / n; for (i = 0; i < n; i++) { printf("%.1f %.1f\n", height[i], height[i] - avg); } return 0; }
823 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 10:32:36 ] >>819 #include<stdio.h> int main(void){ char str[100],big[100]; int i,k; printf("文字列を入力して下さい:"); scanf("%s",str); k=0; for(i=0; str[i]!='\0'; i++){ switch(str[i]){ case 'a': case 'i': case 'u': case 'e': case 'o':continue; default:{big[k]=str[i]-32; k++; } } } big[k]='\0'; printf("入力:%s\n",str); printf("出力:%s\n",big); }
824 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 10:34:06 ] 忘れた return 0;
825 名前:デフォルトの名無しさん [2008/10/27(月) 10:35:03 ] #include <stdio.h> int main(void){ char str[100],big[100]; int i, j; printf("文字列を入力して下さい:"); scanf("%s",str); for(i=0, j=0; str[i]!='\0'; i++){ if (str[i]>='a' && str[i]<='z'){ big[j]=str[i]-('a'-'A'); if (big[j] == 'A' || big[j] == 'I' || big[j] == 'U' || big[j] == 'E' || big[j] == 'O') { ; }else j++; }else if (str[i] == 'A' || str[i] == 'I' || str[i] == 'U' || str[i] == 'E' || str[i] == 'O') { ; }else { big[j] = str[i]; j++; } } big[j]='\0'; printf("入力:%s\n",str); printf("出力:%s\n",big); return 0; }
826 名前:デフォルトの名無しさん [2008/10/27(月) 11:38:02 ] >>788 さん ありがとうございます! 大変助かりました!
827 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 12:27:23 ] >>820 = ID:FJ+86jwr ? 数字も読めないのか
828 名前:デフォルトの名無しさん [2008/10/27(月) 12:30:57 ] [1] 授業単元:プログラミング [2] 問題文:な簡単な単語検索を行うプログラムを作成 せよ. 1. 3 つの単語を入力し,これを検索対象のデータと する. 2. 検索したい単語を入力すると,それが覚えた単語 の中に含まれていれば“YES!”,含まれていなけ れば“NO!”と出力する. 3. −1 が入力されるまで,繰り返し検索できるように する. 条件 3 つの単語は,2 次元配列str1[3][100] に格納する. (str1 には99 文字までの単語を3 つ格納できる) 実行例 $ ./q2-4 Input 3 words: <-- "aaa" <-- "bbbb" <-- "ccccc" Search word: <-- "aaa" YES! Search word: <-- "dd" NO! Search word: <-- "-1" $ (終了) [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:10月30日 木曜日 [5] その他の制限: 標準関数strcmp(str *, str *) を使うということです よろしくお願いします
829 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 12:50:45 ] >>828 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7874.txt
830 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 13:20:59 ] >>820 どう見てもキチガイはID:FJ+86jwrだな
831 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 13:54:18 ] >>790 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7875.c 2番も1番と同じ要領でやってみた。
832 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 14:15:40 ] >>802 問題文修正しました。 >>663 問題修正 [1] 授業単元: 信号処理 [2] 問題文(含コード&リンク): @ 209921行5列の2次元配列のファイルを読み込みなさい。ファイルの値を1024個で区切り1024個中の値の平均値と(平均値+5*ρ)以上の値を最大値(極大値)を求めなさい。ρを標準偏差とする。 最大値をmax1、max2、max3、・・・・として最大値は1個とは限らないこととする。 また1024個の最大値を求め終わったら、次の1024個の最大値を求めなさい。この作業をファイルの最後の値までやりなさい。 ただし、ファイルのサイズは17.2MBととし十分なメモリ領域を確保すること。 ヒント:malloc関数 ※ファイル↓(17MBもあるのでDLするのに時間がかかるかもしれません。お手数かけます。) kissho6.xii.jp/14/src/1yon14506.zip.html DLKey:data A 求めた最大値をpeak.txtに出力しなさい。1行目を最初の1024個中で求めた最大値を表示させ、2行目からは次の1024個中から求めた最大値を表示させなさい。 B @で読み込んだファイルの数値は周波数1,2,3,…,1024の時の値である。1024個で区切ったのはそのためである。 @で求めた各々の最大値の周波数を [周波数]最大値 となるようにAで出力したpeak.txtに出力できるように変更させなさい。 例:peak.txt→ [67]3.214283 [84]2.4930390 [148]5.3485704 ・・・・ [38]3.4255342 [72]3.214283 [98]2.434924390・・・・ ・ ・ ・ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2008年10月28日午後1時 [5] その他の制限: 特になし よろしくお願いします。
833 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:17:14 ] >>744 ありがとうございました!
834 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:17:14 ] >>832 @とAまでは↓もうプログラムはあります。 kissho1.xii.jp/7/src/7jyou16183.zip.html DLkey : foo あとはB番目の問題をやるだけです。 プログラムよろしくお願いします。
835 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:54:45 ] >>832 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7877.c peak.txtが例の通りにならないんだが、これでいいのだろうか。 >>834 を読んでなかった…。
836 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:08:27 ] 3と4はもう答え書いたのに(´・ω・`)
837 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:09:06 ] [1] 授業単元:プログラミング [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7863.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:10/27 [5] その他の制限:
838 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:12:59 ] >>835 ありがとうございます。 しかし、peak.txtが出力されませんでした。どうしてなんだろう? コンパイルはgccですよね?
839 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:17:46 ] >>836 コンパイルはとおったのですが、peak.txtが出力できませんでした。 かなり格闘したのですが、手に負えなくて・・・OTL
840 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:20:25 ] >>835 fprintf(fpout, "[%d]%lf ", j + 1, a[j]); は正しくは fprintf(fpout, "[%d]%f ", j + 1, a[j]); ね
841 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:22:01 ] >>840 そうだった^^;
842 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:28:46 ] >>836 というか、旧Bが現@なんだよねたぶん。
843 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:41:51 ] >>842 はい、そうです。なんか旧@と旧Bの問題が重複(分かりにくい)ということだったので 旧Bの問題文を現@の問題文に含みました。 よろしくお願いします。
844 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 16:52:32 ] >>838 peak.txtのファイルすらできないってこと??
845 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:05:02 ] >>844 はい、そうです。ファイルができませんOTL gccのオプションは -o だけでいいのですか?
846 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:09:16 ] まさかコンパイルしただけでファイルが出来るとか思ってないよな
847 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:10:11 ] >>845 gcc hoge.c -o hoge.exe ってな感じにコンパイルして実行すれば良いと思うけど。。。 コンパイルは通るんだよね?
848 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:20:14 ] >>846 あ・・・できると思ってました>< どうすればファイルを作成することが出来るのでしょうか? >>847 コンパイルは通ります。フォルダの中にpeak.txtが出来てないだけです。
849 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:23:00 ] >>848 実行しろよ Linuxなら ./a.out で
850 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:23:06 ] >>848 コンパイルしてできた実行ファイルを実行する。 同じフォルダにdata.txtを置いておくこと。
851 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:24:26 ] ひどいな・・・ 赤ちゃんかよ・・
852 名前:デフォルトの名無しさん [2008/10/27(月) 17:40:17 ] [1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): f(x)=1/(2+sinx+cosx) の積分を[π,-π]の範囲でSimpsonの1/3公式で求め、分割数と誤差を表示させよ。 [3] 環境 [3.1] OS:Windows [3.2] 言語:C言語 [4] 期限: 2008.10.29 お願いします。
853 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:40:26 ] 目が点になるっていうのはこういう事か
854 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 17:48:32 ] >>852 誤差って、真値は?
855 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 18:02:09 ] >>549 −>>551 すみませんでした。ちと、ボケてましたwww うまく出力できました。 ありがとうございました。
856 名前:デフォルトの名無しさん [2008/10/27(月) 18:06:50 ] >>854 あっ、すいません √2×πです。
857 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 18:12:03 ] [1] 授業単元:C [2] 問題文(含コード&リンク):課題1:2次元平面上の点を表す構造体 Point 型を定義して,その点に関する計算を行うプログラムを作成したい. 構造体 Point型は,double型の X座標と Y座標のメンバをもつ. 構造体 Point型を使用して,原点からの距離を求める関数 length_vectorを作成する. 構造体 Point型を使用して,平面の点を表示する関数 print_vを作成する. 2:2次元平面上の点を表す構造体 Point 型と構造体配列を定義して,座標平面上の2点に関する計算を行うプログラムを作成したい. 構造体 Point型は,double型の X座標と Y座標のメンバをもつ. 構造体 Point型を使用して,要素2つの構造体配列 arrayを定義する. 構造体配列 arrayに,平面の点を代入する関数 input_pointを作成する. 構造体配列 arrayに格納されている2点の長さを求める関数 length_vector2を作成する. 二乗の計算には pow ,ルートの計算には sqrtを使用 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7879.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: 任意 [3.3] 言語: C [4] 期限: ([2008年10月28日17:00まで] ??????の部分を問題文に従ってうめていただけると助かります
858 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 18:19:44 ] >>856 #include <stdio.h> #include <math.h> double f(double x) { return 1. / (2. + sin(x) + cos(x)); } int main(void) { int k, n; double h, a = -M_PI, b = M_PI, fo, fe, sum; while (1) { printf("分割数 N (0 = END) = "); scanf("%d", &n); if (n == 0) break; h = (b - a) / (2. * n); fo = fe = 0.; for (k = 1; k <= 2 * n - 3; k += 2) { fo += f(a + h * k); fe += f(a + h * (k + 1)); } sum = (f(a) + f(b) + 4. * (fo + f(b - h)) + 2 * fe) * h / 3.; printf("分割数 = %d, 誤差 = %.10g\n", n, sum - sqrt(2.) * M_PI); } return 0; }
859 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 18:20:47 ] うーん積み残し誤差も考慮しないといけんかな・・・・
860 名前:775 mailto:sage [2008/10/27(月) 19:16:14 ] お願いします。 [1] 授業単元:Cプロギラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:inux [3.2] コンパイラ名とバージョン:gc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
861 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 21:35:39 ] >>549 二つ目のですが整数を入力すると入力した逆の単項式が出てしまうので入力した順に出力されるようにして欲しいのですがそれだと変化しないのですが・・・
862 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 21:49:46 ] >>861 双方向リストにするか、再帰を使うか。
863 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:00:12 ] >>821 >>822 お二人とも丁寧に有り難う御座います。ホントに助かりました。
864 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:09:35 ] [1] プログラミング入門言語 [2] 五人分の点数(0〜100点まで)を入力し、点数の高い順に並べ替えさせるプログラム [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] C [4] 期限:制限なし 初心者なので困ってます><お願いします!!
865 名前:デフォルトの名無しさん [2008/10/27(月) 22:19:29 ] #include<stdio.h> int main(void){ int score[5], temp, i, j; for(i=0;i<5;i++){ //点数入力 printf("%d人目の点数: ", i+1); scanf("%d", &score[i]); } for(i=0;i<5;i++){ //並べ替え for(j=4;j>i;j--) if(score[i] < score[j]){ temp = score[j]; score[j] = score[i]; score[i] = temp; } } for(i=0;i<5;i++) printf("%d ", score[i]); putchar('\n'); return 0; }
866 名前:865 [2008/10/27(月) 22:22:22 ] 馬鹿みたいにタブ使ったから空白作れてないな。しくじった。 #include<stdio.h> int main(void){ int score[5], temp, i, j; for(i=0;i<5;i++){ //点数入力 printf("%d人目の点数: ", i+1); scanf("%d", &score[i]); } for(i=0;i<5;i++){ //並べ替え for(j=4;j>i;j--) if(score[i] < score[j]){ temp = score[j]; score[j] = score[i]; score[i] = temp; } } for(i=0;i<5;i++) printf("%d ", score[i]); putchar('\n'); return 0; }
867 名前:デフォルトの名無しさん [2008/10/27(月) 22:47:26 ] >>831 有難う御座います
868 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:53:22 ] >>866 早速の回答ありがとうございます!! もう一問わからないのが>< どなたかお願いします>< [1] プログラミング入門言語 [2] 3人分の3教科の素点を表示する。素点は100点満点でランダムに作る。 またその時、 ・3教科の合計・平均点を計算し、それぞれ素点の右の列に表示する。 ・合計点の高い学生から順に表示する。 ・平均点は小数第一までの表示とする。 [3] 環境 [3.1] OS: Windows [3.2] gcc [3.3] C [4] 期限:なし。
869 名前:デフォルトの名無しさん [2008/10/27(月) 23:36:38 ] OSはlinux 期限はとくになし 素数を数えて落ち着くプログラム おながいします。
870 名前:デフォルトの名無しさん [2008/10/28(火) 00:49:26 ] >>858 ありがとうございます。 すいませんが、積分範囲は自分で入力するようにしたいんですよ・・・言葉足らずで申し訳ありません。 一応自分で考えたんですけどうまく出力されません・・・間違っている場所の指摘お願いします。
871 名前:デフォルトの名無しさん [2008/10/28(火) 00:50:16 ] >>858 #include <stdio.h> #include <stdlib.h> #include <math.h> void main(void) { FILE *fo; double a, b; int n, i; double h, s, x; double fa, fb, fx; double sinx, cosx, sina, cosa, sinb, cosb; if((fo = fopen("ans7.txt", "w")) == NULL){ printf("Do not open file\n"); exit(1); }
872 名前:デフォルトの名無しさん [2008/10/28(火) 00:50:53 ] つづき・・・ printf("積分区間a,bを入力してください.\n"); scanf("%lf%lf",&a, &b); printf("分割数nを入力してください.\n"); scanf("%d",&n); fx = 1/(2+sinx+cosx); fa = 1/(2+sina+cosa); fb = 1/(2+sinb+cosb); h = (b-a)/n; s = fa+fb; x=a; i=1; x=x+h; if(i%2 == 0){ s = s+2*fx;} else{ s = s+4*fx;} i = i+1; while(i>n){ s = h/3*s;} printf("分割数nは%d回です。\n", n); printf("誤差は%lfです。\n", s); fprintf(fo, "分割数nは%d回です。\n", n); fprintf(fo, "誤差は%lfです。\n",s); fclose(fo); } お願いします。
873 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 01:14:31 ] >>870 修正点が多すぎるので>>858 を修正しました。 あとは適当にいじって下さい。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7880.txt
874 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 01:26:51 ] >>868 構造体使わないようにと思って。。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7882.c
875 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 02:27:04 ] フィボナッチ数列を・・・43024項まで求めるプログラムが出来た。 この調子で、8月に発見されたメルセンヌ素数をはじき出す プログラムを作るぜ。戯言すまそ。
876 名前:しろうと [2008/10/28(火) 10:04:34 ] 初心者です。シグナルハンドリングについて勉強しているとこです。 kill -9 [pid] ってkillがpidを殺すコマンドで-9は深く考えた事無かったけどこれって 実はkill自体はシグナルを単に送るだけで、-9にkillみたいな意味があるって 認識を改めた。ここまで正しいですか?
877 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 10:12:36 ] [1] 授業単元:C言語入門 [2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7883.txt [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10月29日まで よろしくお願いします。
878 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 10:15:54 ] どなたか857の解答期限迫ってきてるんでお願いします 問題が見づらいようなら言ってください
879 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 11:04:05 ] >>857 課題1 #include <stdio.h> #include <stdlib.h> #include <math.h> /* (x,y)-平面の点を座標で表す構造体 */ struct Point{ double x, y; }; /* 原点からの長さを求める関数 */ double length_vector(struct Point *p){ return sqrt(pow(p->x, 2) + pow(p->y, 2)); } /* 平面の点を表示する関数 */ void print_v(struct Point *p){ printf("(%f, %f)\n", p->x, p->y); }
880 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 11:04:38 ] >>857 続き int main(void) { struct Point p; printf("Input Point X: "); scanf("%lf", &p.x); printf("Input Point Y: "); scanf("%lf", &p.y); print_v(&p); /* print_vを使用して,座標の表示 */ printf("The length of vector: %f\n", length_vector(&p) ); return 0; }
881 名前:デフォルトの名無しさん [2008/10/28(火) 11:16:47 ] [1] 授業単元:データの可視化 [2] 問題文: 1: 三角関数 sin x、cos xは、テイラー展開により、 xの多項式に展開できる。2m+1次までの展開を計算する関数、 を作れ、関数の宣言は、 float MySin(float x, int m)とせよ。 2:上記MySinを使って、次数を増やすにつれて、三角関数に近づくこと示せ。 xの範囲を-πからπまでとし、π/100毎にm=0, 1, 2, 3に対して計算せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2008年11月3日16:00まで お願いします
882 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 11:17:04 ] >>857 課題2 #include <stdio.h> #include <stdlib.h> #include <math.h> /* (x,y)-平面の点を座標で表す構造体 */ struct Point{ double x, y; }; /* 要素を代入する関数 */ void input_point(struct Point data[], int i) { printf("Input Point p[%d].x: ", i); scanf("%lf", &data[i].x); printf("Input Point p[%d].y: ", i); scanf("%lf", &data[i].y); } /* 長さを求める関数 */ double length_vector2(struct Point data[]){ return sqrt(pow(data[0].x - data[1].x, 2.0) + pow(data[0].y - data[1].y, 2.0)); }
883 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 11:17:47 ] >>857 続き int main(void) { struct Point p[2]; /* 構造体配列の定義 */ int i; for (i = 0; i < 2; i++) { input_point(p, i); /* 座標点の入力 */ } printf("The length of vector: %lf \n", length_vector2(p) ); return 0; }
884 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 12:00:28 ] >>881 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7884.c こゆこと?
885 名前:デフォルトの名無しさん [2008/10/28(火) 13:12:20 ] >>873 ありがとうございました♪ もっと勉強します。。。
886 名前:しろうと [2008/10/28(火) 13:20:49 ] signal(SIGINT, func1); でコンパイルするとpassing argument 2 of 'signal' from incompatible pointer type という警告が出ます。どう書けばいいですか?(gcc)
887 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 14:02:49 ] >>886 void func1(int sig) { //処理 }
888 名前:しろうと [2008/10/28(火) 14:13:08 ] >>887 有り難うございました。void func1(void)で定義してました。sigという整数 型の引数が渡って来てるんですね。
889 名前:しろうと [2008/10/28(火) 14:14:58 ] 訂正 sigという整数型の引数が渡って来てるんですね。 →整数型の引数が渡って来てるんですね。
890 名前:デフォルトの名無しさん [2008/10/28(火) 15:07:15 ] C言語をやっている人はアルゴリズムも学習しているイメージがあるので ここで聞かせて頂きます。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7885.txt 上記は疑似コードで書かれていますが、アルゴリズム1もアルゴリズム2も 配列の中から最小値を探し出す処理をしているそうですが、アルゴリズム1の 02行目では配列をどうやってtempにぶちこめるのでしょうか?
891 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 15:58:48 ] アルゴリズムスレか擬似コードスレへ行ってください
892 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 16:00:44 ] >>889 signal( )に渡した第1引数がそのまま渡される。
893 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 16:01:55 ] >>890 関数を再帰呼び出ししている 1 #include <stdio.h> 2 3 int algo1(int ary[], int x) 4 { 5 if ( x == 0 ) return ary[0]; 6 else { 7 int temp = algo1(ary, x-1); 8 if ( temp <= ary[x] ) return temp; 9 else return ary[x]; 10 } 11 } 12 13 14 int main(void) 15 { 16 int a[] = {4, 3, 2, 1, 5, 7, 8, 9, 6, }; 17 18 printf("min == %d\n", algo1(a, sizeof(a)/sizeof(a[0])-1)); ここの要素数引く1するのが糞だけど 19 20 return 0; 21 } アルゴリズム2は、たぶん2分検索とかじゃないか
894 名前:892 mailto:sage [2008/10/28(火) 16:03:11 ] いや言い方が変だな まあシグナルが引数に渡されるということで
895 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 16:31:56 ] [1] 授業単元:C [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7823.txt これを実行して整数を入力すると入力した逆の単項式が出力されるので入力した順番に出力させよ ちなみに係数も乗も0にするとプログラムは終了されます [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: お任せ [3.3] 言語: C
896 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:05:12 ] 問題: ・普通の日付をユリウス日に変換して ユリウスに○日後を足し算して ・ユリウス日から日付を求める 言語:C/C++ 期限:今日中 制限:無し おねがいしまう
897 名前:775 mailto:sage [2008/10/28(火) 17:08:19 ] お願いします。本当にさっぱりわからないので… 誤字修正しました [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
898 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:37:04 ] [1] 授業単元: C言語 [2] 問題文: 1変数関数 f(x)=0.5*(x-2)*(x-2) の値が最小となる点を求めるプログラムを作成せよ。 [3] 環境 [3.1] OS: mac [3.2] コンパイラ:gcc [3.3] 言語: C [4] 期限: 10月30日まで [5] その他の制限:基本的な関数のみでお願いします
899 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:49:21 ] どれもレベル高いなぁ('`A) もう一回勉強しなおそう
900 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:16:48 ] >>896 自己解決しました
901 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 21:05:38 ] >>893 くそみそ?
902 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:46:59 ] >>898 それx=2のときのf(2)=0が最小値なんだけど
903 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:48:50 ] >>898 すごい馬鹿みたいな総当りでいいか?
904 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:51:09 ] >>898 f(x)を微分したf'(x)の変曲点を求めるとかな
905 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 23:52:23 ] いやf'(x)=0をニュートン法か二分法で解いた方がいいな
906 名前:デフォルトの名無しさん [2008/10/29(水) 00:39:08 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): ある文字列を入力、その後また文字列を入力し、最初に入力した文字列に後で入力した文字列が含まれていれば1、含まれていなければ0と表示するプログラムを作成。 [3] 環境 [3.1] OS: Linux [3.2] gcc [3.3] C [4] 期限: 2008/10/29 12:00まで [5] その他の制限: 自作の関数を使うかstrcmp関数を使う。ポインタ変数を使う。#include<stdio.h>・#include<string.h>のみ使用。
907 名前:デフォルトの名無しさん [2008/10/29(水) 00:42:26 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 大文字の文字列を小文字に変換するプログラム。文字列を入力する際に1文字でも大文字以外の文字が入っていれば、エラーを表示しもう1度入力を促すようにする(continue文で) [3.1] OS: Linux [3.2] gcc [3.3] C [4] 期限: 2008/10/29 12:00まで [5] その他の制限: 自作の関数を使う。ポインタ変数を使う。#include<stdio.h>のみ使用。 905・906ともどもよろしくおねがいします。
908 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 00:53:58 ] [1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク):正または負の八桁以内の整数を入力し、次の変換法則にしたがって 文字列に変換して、結果を出力するプログラム *変換規則 各桁の数を半角の数字に変換し、文字型配列に右詰め(最下位桁の数字を配列要素[11]) で格納し、3桁ごとに","を挿入して、最上位桁の文字の前に'+'または'-'の符号を付加する。 符号を格納した配列要素より左の要素には空白が格納されている。また、配列要素[11]には ヌル文字が格納されている。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: bcc55 [3.3] 言語: C [5]ポインタはまだ習っていないです どうやるかさっぱり分かりません・・・ 特に3桁ごとに、を挿入したり最後に+や-を付ける所で思考が止まりました 長くて読みにくいと思いますがどうかよろしくお願いします。
909 名前:775 mailto:sage [2008/10/29(水) 01:01:47 ] お願いします。本当にさっぱりわからないので… 誤字修正しました [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
910 名前:デフォルトの名無しさん [2008/10/29(水) 01:29:16 ] >>898 は、多少一般化して、任意の一変数多項式関数の最小値にしたらいいだろう
911 名前:デフォルトの名無しさん [2008/10/29(水) 01:42:04 ] [1] 授業単元: プログラミング基礎 [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7886.txt [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10月30日 23:59まで よろしくおねがいします
912 名前:デフォルトの名無しさん [2008/10/29(水) 02:10:44 ] >>911 割れるだけ割る。 素因数分解。 ユークリッドの互除法。 などがある。 ソースはユークリッドの互除法。 3つの数の最大公約数は、2つずつの最大公約数を求めて、2つの最大公約数を求めればいいだろう
913 名前:デフォルトの名無しさん [2008/10/29(水) 02:14:38 ] 3つのはこれでいいのでは? int gcd3(x, y, z){ return gcd( gcd(x,y), gcd(y,z)); }
914 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 02:50:51 ] int gcd3(x, y, z){ return gcd( gcd(x,y), z); } で十分じゃない?
915 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 13:35:50 ] >>906 ,907 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7887.txt と思ったらタイムオーバー
916 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:34:52 ] 「入力された任意桁数(30桁以下)の整数に対し、各位の値を、配列を用意してそれに1つづつ格納する」のはどのようにするとスマートでしょうか・・・??
917 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:48:03 ] >>916 スマートとか考えると後で意味不明のコーディングになる forループでいいだろ
918 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 14:56:40 ] 自分でやってみましたが、powを使うとよく分からないことに・・・(泣) 言い方を変えて、<math.h>を極力使わないようにしたいです・・・
919 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:05:09 ] for(i=0; i<30; i++){ arr[i] = n%10; n /= 10; }
920 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:17:13 ] こんなに小さいプログラムでいいんですね(^^; 3時間かけて諦めた自分は何なんだろうorz
921 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:21:05 ] 30桁だから文字列だろ #include <stdio.h> int main(void) { char num[] = "123456789012345678901234567890"; int arr[30]; int i; int c = strlen(num); for (i = 0; i < c; i++) { arr[c - i - 1] = num[i] - '0'; } for (i = 0; i < c; i++) { printf("%d ", arr[i]); } return 0; }
922 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:23:21 ] >>921 はいエラー
923 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:26:07 ] いちいちstring.h使わんでも forで0になるまで回せばいいじゃん。 >>919 だと任意桁数ってのに合わないからね
924 名前:916 mailto:sage [2008/10/29(水) 16:01:52 ] >>921 やはり>>916 の書き方が悪かったです…。 任意桁数の整数は、入力されたものを使うことになります。
925 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:08:16 ] >>908 www.jitec.jp/1_04hanni_sukiru/mondai_kaitou_2008h20_2/2008h20a_fe_pm_qs.pdf これの問6とほぼ一緒な感じか? a,b,cに入るのは a: /= 10 b: i % 3 c: i < j; i++, j-- 正の整数に+をつけるなら、 if(minus != 0){ str[j++] = '-'; } この付近に少しコードを付け足せばできると思う。
926 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:21:20 ] >>925 すまん、勘違いした。 右詰めにするのか…。
927 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:41:54 ] [1] 授業単元: プログラミング演習 [2] 問題文:1から50までの整数のうち,素数であるものを全て書き出すプログラムを,for文を用いて作成. 出力結果は次のように横に並ぶようにする. 1 3 5 7 11 13 17 19 23 29 ・・・・ [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月4日 16:00まで [5] その他の制限:2重ループを用いる。nの素数判断は,2〜n-1までの数で順にわり算して,全ての数で割り切れなければnは素数。 for文までしか習ってないのでそのあたりを考慮して頂けたらありがたいです。よろしくお願いします。
928 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 18:47:04 ] >>927 #include <stdio.h> int main() { int i, j; for (i = 1; i <= 50; ++i) { for (j = 2; j <= i; ++j) { if (j == i) { printf("%d ", i); } else if (i % j == 0) { break; } } } putchar('\n'); return 0; }
929 名前:928 mailto:sage [2008/10/29(水) 18:49:28 ] int main() { int i, j; for (i = 1; i <= 50; ++i) { for (j = 2; j <= i - 1; ++j) { if (i % j == 0) { break; } } if (j == i) { printf("%d ", i); } } putchar('\n'); return 0; } すいませんこっちのほうがま真っ当です
930 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 19:09:55 ] [1] 授業単元: プログラミング基礎 [2] 問題文: (以下の問題は、 算数にチャレンジ!! の中の 第559回問題 からの引用。) 1〜10の数が書かれたカードが1枚ずつ、全部で10枚あります。 今、これらのカードを並べ、隣り合った数の差を左から次々に加えていくことにします。例えば、 2,5,6,8,1,4,3,9,7,10 と並べたならば、 3+1+2+7+3+1+6+2+3=28 ということになります。 では、この計算結果が最も大きくなるようにカードを並べると、結果はいくらになるでしょうか。(問題終) 元の問題は算数の問題なので論理で答えを出すものだが、ここではプログラムを書いてその最大値を求めて欲しい。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 10月14日まで よろしくおねがいします
931 名前:デフォルトの名無しさん [2008/10/29(水) 19:15:13 ] 大きい数字が中心で1や2は端がいいな
932 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 19:53:24 ] 一般化して100個でも出来るのがいいな
933 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 20:12:11 ] プログラムって総当たりってこと? 結構時間かかりそうとおもったけど、10桁くらいなら余裕か…。
934 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 20:19:50 ] >>933 おそらく総当りだと思います
935 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:09:12 ] >>930 100個は無理。 #include<stdio.h> #include<string.h> #define M 10 unsigned int kaijyo(int k){unsigned int s=1; for(;k>0;k--)s*=k; return s;} void retuprt(unsigned int *x){for(int n=0;n<M;n++)printf("%d ",x[n]);} unsigned int sanowa(unsigned int *x){unsigned int s=0,n; for(n=0;n<M-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]>x[n+1];return s;} main(){ unsigned int i,j,k; unsigned int orgnum[M],num[M],jretu[M]; for(i=0; i<M; i++) orgnum[i]=i+1; int max=0; unsigned int maxretu[M]; for(k=0;k<kaijyo(M);k++){ memcpy(num,orgnum,4*M); int N=k; for(i=M;i>=1;i--) { int n=N % i; jretu[i-1]=num[n]; for(j=n;j<i-1;j++) num[j]=num[j+1]; N/=i;} i=sanowa(jretu); if(max<i){max=i;memcpy(maxretu,jretu,4*M);} } retuprt(maxretu); printf(" max=%d\n",max); }
936 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:14:43 ] 最大値を与える列を求める #include<stdio.h> #include<string.h> #define M 10 void retuprt(unsigned int *x){for(int n=0;n<M;n++)printf("%d ",x[n]);} unsigned int sanowa(unsigned int *x){unsigned int s=0,n; for(n=0;n<M-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]>x[n+1];return s;} main(){ unsigned int i,j,k; unsigned int orgnum[M],num[M],jretu[M]; for(i=0; i<M; i++) orgnum[i]=i+1; for(k=0;k<3628800;k++){ memcpy(num,orgnum,4*M); int N=k; for(i=M;i>=1;i--) { int n=N % i; jretu[i-1]=num[n]; for(j=n;j<i-1;j++) num[j]=num[j+1]; N/=i;} if(sanowa(jretu)==29){retuprt(jretu);printf("\n");} }}
937 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:18:07 ] プ [4] 期限: 10月14日まで
938 名前:935 mailto:sage [2008/10/29(水) 21:21:55 ] 間違えた
939 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:23:28 ] 改めて>>877 の問2)からどなたかお願いします。 問2)連結リストの先頭の次に、セルを一つ追加する関数を作成する。セルのelement メンバの値は0 でよい。 つまり、cell1 → cell2 → cell3 → NULL であるときに、この関数を1 回呼ぶと、 cell1 → (新しいセル) → cell2 → cell3 → NULL となるようにすればいい。 問3)連結リストの先頭の前に、セルを一つ追加する関数を作成せよ。セルのelement メンバの値は0 でよい。 つまり、cell1 → cell2 → cell3 → NULL であるときに、この関数を1 回呼ぶと、 (新しいセル) → cell1 → cell2 → cell3 → NULL となるようにすればいい。 自分なりに問2を進めてみたのですがvoid add_cell_secondをどう書いたらいいのでしょうか? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7888.txt
940 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:24:28 ] これって解が214176個もあるぞ。 問題として解答するなら30にならないことも示す必要あるな。
941 名前:940 mailto:sage [2008/10/29(水) 21:37:08 ] まちがえた
942 名前:940 mailto:sage [2008/10/29(水) 21:40:22 ] 11まではなんとかもとまるが #include<stdio.h> #include<string.h> #include<vector> using namespace std; unsigned int kaijyo(int k){unsigned int s=1; for(;k>0;k--)s*=k; return s;} void retuprt(vector<unsigned char> &x){for(int n=0;n<x.size();n++)printf("%d ",x[n]);} unsigned int sanowa(vector<unsigned char> &x){unsigned int s=0,n; for(n=0;n<x.size()-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]-x[n+1];return s;} main(){ unsigned int M,K; unsigned int i,j,k; vector<unsigned char> orgnum,num,jretu; for(M=2; M<20; M++) { orgnum.resize(M),num.resize(M),jretu.resize(M); for(i=0; i<M; i++) orgnum[i]=i+1; int max=0;K=kaijyo(M); for(k=0;k<K;k++){ memcpy(&num[0],&orgnum[0],M); int N=k; for(i=M;i>=1;i--) { int n=N % i; jretu[i-1]=num[n]; for(j=n;j<i-1;j++) num[j]=num[j+1]; N/=i;} i=sanowa(jretu); if(max<i)max=i; } printf("M=%d max=%d\n",M,max); }}
943 名前:930 mailto:sage [2008/10/29(水) 21:42:17 ] >>935-936 ありがとうございました
944 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:42:45 ] >>939 func(cell1)で次と前に新しいのを挿入する。 それぞれ先頭が帰ってくるが、こういうのでいいんだろうか。 struct cell *insert_next(struct cell *target) { struct cell *c1; c1=(struct cell *) calloc(1, sizeof(struct cell)); c1->next=target->next; target->next=c1; return target; } struct cell *insert_prev(struct cell *target) { struct cell *c1; c1=(struct cell *) calloc(1, sizeof(struct cell)); c1->next=target; return c1; }
945 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:46:33 ] >>775 です。 さっぱりわからないので少しだけでもお願いします。 [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
946 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:47:57 ] #include<stdio.h> #include<string.h> #include<vector> using namespace std; unsigned int kaijyo(int k){unsigned int s=1; for(;k>0;k--)s*=k; return s;} void retuprt(vector<unsigned char> &x){printf("( ");for(int n=0;n<x.size();n++)printf("%d ",x[n]);printf(")");} unsigned int sanowa(vector<unsigned char> &x){unsigned int s=0,n; for(n=0;n<x.size()-1;n++)s+=x[n+1]>x[n]?x[n+1]-x[n]:x[n]-x[n+1];return s;} main(){ unsigned int M,K; unsigned int i,j,k; vector<unsigned char> orgnum,num,jretu,maxretu; for(M=2; M<20; M++) { orgnum.resize(M);num.resize(M);jretu.resize(M);maxretu.resize(M); for(i=0; i<M; i++) orgnum[i]=i+1; int max=0;K=kaijyo(M); for(k=0;k<K;k++){ memcpy(&num[0],&orgnum[0],M); int N=k; for(i=M;i>=1;i--) { int n=N % i; jretu[i-1]=num[n]; for(j=n;j<i-1;j++) num[j]=num[j+1]; N/=i;} i=sanowa(jretu); if(max<i){max=i;memcpy(&maxretu[0],&jretu[0],M);} } printf("\nM=%d max=%d ",M,max); retuprt(maxretu); }}
947 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:49:43 ] >>943 >>935 は間違えているので、このように変更するように x[n+1]>x[n]?x[n+1]-x[n]:x[n]-x[n+1];
948 名前:775 ◆00BY157eo6 mailto:sage [2008/10/29(水) 22:06:50 ] >>775 です。 さっぱりわからないので少しだけでもお願いします。 [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイルを参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_auxに含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2008年11月6日まで] トリップつけました。
949 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:08:19 ] >>929 ありがとうございました
950 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:09:28 ] >>948 まずはテキストでうp
951 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:10:10 ] >>944 ありがとう。そのinsert_nextとprevとfunc(cell1)を>>939 のどこに入れたらいいんでしょうか?
952 名前:775 ◆00BY157eo6 mailto:sage [2008/10/29(水) 22:17:02 ] >>950 テキストでファイル内容をうpしました。 ただ、できれば直接ファイルを参照して欲しいのですが… [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイル(内容は) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7890.txt を参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_aux(内容は) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7889.txt に含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
953 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:34:57 ] >>952 もう一度行列を復習してから書き込んでくれ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7890.txt の行列って正方行列じゃないだろ
954 名前:775 ◆00BY157eo6 mailto:sage [2008/10/29(水) 22:42:52 ] >>953 あ、そうですね… すいませんでした 一度ひっこみます
955 名前:775 ◆00BY157eo6 mailto:sage [2008/10/29(水) 22:50:53 ] 修正しました。 [1] 授業単元:Cプログラミング [2] 問題文(含コード&リンク): LU分解法を用いて、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip のmatrix2.datファイル(内容は下のtxtにまとめました) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7892.txt を参照して、 その係数行列Aの逆行行列X=A^-1を求めるプログラムを作成してください。 AX=I(Iは単位行列)となることをしめしてください、 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7868.zip に含まれるmat_aux(内容は) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7889.txt に含まれる補助関数を使ってください。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: ([2008年11月6日まで]
956 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:08:44 ] >>930 面白い問題なので俺もやってみた。コマンドライン引数で要素数指定。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7894.txt N=10 Max=49( 1152件) time 0:00.62 N=11 Max=59(11520件) time 0:06.03 N=12 Max=71(28800件) time 1:13.19 N=13 おわらねぇ……てか落ちた! CPU Q6600 2.4GHz OS Win Vista Ulti 32bit
957 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:11:19 ] なんか atexit する場所がへんだった。
958 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:40:43 ] N=2n+1のときの解はたぶん、 n+2, n, 2n+1, n-1, 2n, n-2, 2n-1, n-3,…,n+3, 1, n+1 だな。 N=2nのときも似たようなもん。証明は知らない。
959 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 00:44:30 ] N=2n+3とすると n+3, n+1, N, n, N-1, n-1, N-2, n-2,…,n+4, 1, n+2 となり簡明か
960 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 01:01:09 ] N=2nのときmaxは、2*n*n-1 N=2n+1のときmaxは、2*n*n+2n-1 だな。証明は知らない。
961 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 01:36:04 ] >>930 面白い問題なのでオレも考えてみた。 で、解くためのアルゴリズムを見つけた。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7895.txt 是非とも等角フォントで。 差の表を用いて考えれば 全部の数列の差を試さなくてすむし、一発で出来る
962 名前:930 mailto:sage [2008/10/30(木) 01:44:42 ] >>961 絵はどうでもいいからCで書けよカス
963 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 01:56:47 ] >>962 偽者だというのは分かるが、お前がキモイ・・・