- 1 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:40:55 ]
- あなたが解けない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++の宿題を片付けます 109代目 pc11.2ch.net/test/read.cgi/tech/1212895856/
- 560 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 04:15:24 ]
- >>558
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7039.c
- 561 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 04:30:18 ]
- >>559
>>560 両方、ありがとうございます。 どちらもせっかく作ってもらったので、両方使いたいところですが 今回は>>560さんのコードを使わせていただきます。 コード中の説明やコードの作りが分かりやすかったので >>559さんのコードもアスキーコード使用が基本的で良かったのですが、 文字列の並び替え部分が若干難しかったので、今回はごめんなさい。
- 562 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 05:40:13 ]
- 文字列を並び替える関数であって、並び替えた文字列を表示する関数じゃないと思うんだが。
- 563 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 05:43:49 ]
- それなら、順番に表示する部分を配列に格納すりゃ良い
- 564 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 05:49:39 ]
- n個の文字列って指定からガン無視してるソースに突っ込むなんてw
- 565 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 05:58:18 ]
- でたよ、ソースを書きもせず、自分のアイデアも提示せずに
批判しかしない基地外。
- 566 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 05:59:34 ]
- >>561 本人?が良しとした時点で後からいちゃもんつけてもなぁ・・・
後は本人が出来るなら、適当にやるだろうし。
- 567 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 06:11:23 ]
- 並び替えならバブルソートだ!
void swap(char *a, char *b) { char temp = *a; *a = *b; *b = temp; } void sort(char *str) { int i, j, len = strlen(str); for(i=len-1; i>0; i--) { for(j=0; j<i; j++) { if(tolower(str[j]) > tolower(str[j+1])) swap(str + j, str + j + 1); else if(tolower(str[j])==tolower(str[j+1])) { if(isupper(str[j]) && islower(str[j+1])) swap(str + j, str + j + 1); } } }
- 568 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 06:13:02 ]
- ソースを書かずに口出しする奴の方がどうかとw
- 569 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 06:14:08 ]
- >>561
が>>567のコードを使ったら、>>559,>>560両方から殴られることを 覚悟したほうがいい。w
- 570 名前:質問者のマナー遵守のお願い mailto:sage [2008/06/24(火) 06:40:52 ]
- 宿題を片付けるという趣旨とは言えども、回答テンプレに沿っていない
すなわち、コードの品質に対する明示が無かったり、コメントが一切 無くコードそのものやコードへのリンクだけの場合は、参考に留める だけに留め、あくまでも独力でトライすることをおすすめします。 多くのコードは良心的で真面目ですが、中には>>438のような悪辣 なコードもありますので、参考以上の扱いをすると災難に合う場合も あります。 なお、小さなプログラムコードの場合、簡単にその優劣は判断出来ま せん。コードは数学の問題と異なり、一度解いてしまえばおしまい というわけではなく、何度も実行されて書き直されて真価が評価され るものです。 宿題を自力で解けないレベルの人がその優劣の判断を出来ると は到底思えません。 複数の回答が出た場合でも、それに優劣を付けていると取られかね ない言動を取ることは質問者は絶対に避けて下さい。
- 571 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 06:44:23 ]
- 自分のソースにミスがあった場合、ソース書かなくても突っ込んでくれると有難いがな。
- 572 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 08:56:20 ]
- [1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6983.txt ヒント:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7040.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:CPad for Borland C++Compiler [3.3] 言語:C言語 [4] 期限:水曜まで [5] その他の制限:ポインタまで習いました ヒントをくれました。それでもわからないのでよろしくお願いします
- 573 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 09:41:26 ]
- [1] 授業単元:プログラミング
[2] 問題文 3×3の行列の掛け算を行う関数を作り、標準入力から入力した行列を掛け算するプログラムを書け (ヒント 2重配列が必要。 double matrix[3][3];を使用) [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 6月26日まで [5] その他の制限: おねがいします><
- 574 名前:491 mailto:sage [2008/06/24(火) 10:00:41 ]
- 自己解決しますた
いないかもしれないけど、協力して下さった方々 どうもです
- 575 名前:456 mailto:sage [2008/06/24(火) 10:54:36 ]
- >>486
わかりやすい回答ありがとうございます! 次からは自分でもできるよう参考してがんばります。
- 576 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 12:08:56 ]
- >>573 環境: 2005 Express + SDK
#include <stdio.h> int main() { int i, j, k; double matrix1[3][3], matrix2[3][3],matrix3[3][3]; for(i=0;i<3;i++) { printf("INPUT 3 numbers. (%d of 3):", (i%3)+1 ); scanf("%lf%lf%lf", &(matrix1[i][0]), &(matrix1[i][1]), &(matrix1[i][2])); } for(i=0;i<3;i++) { printf("INPUT 3 numbers. (%d of 3):", (i%3)+1 ); scanf("%lf%lf%lf", &matrix2[i][0], &matrix2[i][1], &matrix2[i][2]); } for(i=0;i<3;i++) printf("%lf\t%lf\t%lf\n", matrix1[i][0], matrix1[i][1], matrix1[i][2]); putchar('\n'); for(i=0;i<3;i++) printf("%lf\t%lf\t%lf\n", matrix2[i][0], matrix2[i][1], matrix2[i][2]); puts(""); // A(i,k) * B(k,j) = C(i,j) for(i=0;i<3;i++) for(j=0;j<3;j++) { matrix3[i][j] = 0.0f; for(k=0;k<3;k++) matrix3[i][j] += matrix1[i][k] * matrix2[k][j]; } for(i=0;i<3;i++) printf("%lf\t%lf\t%lf\n", matrix3[i][0], matrix3[i][1], matrix3[i][2]); }
- 577 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 12:16:06 ]
- >>408
いろいろ試してみたが、AMDのプロセッサ(AthlonX2)はL1 Data Cacheが2Way-Set AssosiativeのためにCore 2 Duoのような 8Way-Set Assosiativeのマシンに特定の場面で大幅に負ける事がある。 データ・テーブルも今回は2個だがこれが10個〜20個と増えてくると AMDとIntelではあまり差がなくなってくるだろう。
- 578 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 12:41:06 ]
- [1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7041.txt [3] 環境 [3.1] OS:Win [3.2] コンパイラ名とバージョン:Borland C++Compiler [3.3] 言語:C [4] 期限:今日中 [5] その他の制限:特になし お願いします!
- 579 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 13:12:49 ]
- >>578
#include <stdio.h> float interest(float r, int n) { float ret = 1.0; int i; for(i=0; i<n; i++) ret *= (1 + r / 100); return ret; } int main(void) { float r; int y, n; printf("利率(r):"); scanf("%f", &r); printf("金額(y):"); scanf("%d", &y); printf("期間(n):"); scanf("%d", &n); printf("返済金額は%d円です", (int)(y * interest(r, n))); return 0; }
- 580 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 13:16:30 ]
- >>577
ちょっとスレ違いになるかも知れないが、何故L1Chacheの構造が 原因であると断定できるのか教えて欲しいと思います。
- 581 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 13:17:30 ]
- 1] 授業単元:
[2] 問題文(含コード&リンク): 次々に入力される値を合計する処理である。 変数dtにデータを入力する処理を繰り返し行い、 入力終了後その合計sumと平均aveを出力する。 なお、入力データは正の整数とし、 入力するデータがなくなったら、 終わりの印として負の値を入力する。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: [5] その他の制限:
- 582 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 13:18:58 ]
- 1] 授業単元:
[2] 問題文(含コード&リンク): 次の説明を読んで、プログラムを作成しなさい。 小数で入力される気温のデータを5℃単位の整数に丸めたい。 キーボードからdouble型変数kに気温を入力し、 丸めた数値はint型変数gに求め、gを画面に出力する。 ただし入力データに負の気温はないものとする。 また必要なら、 計算途中の中間結果を格納するint型変数wなど、 適宜変数を用意すること。 【実行例】 温度を入力 22.4 約20度です 温度を入力 22.5 約25度です [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: [5] その他の制限:なし 2問ありますが、よろしくお願いします
- 583 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 13:46:07 ]
- >>581
#include <iostream> int main() { int dt, i = 0, sum = 0, ave; while(1) { std::cin >> dt; if(dt<0) break; sum += dt; i++; } if(i!=0) { ave = sum / i; std::cout << "合計:" << sum << "平均:" << ave << std::endl; } }
- 584 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 13:54:48 ]
- >>582
#include <iostream> int main() { int g, w; double k; std::cout << "温度を入力"; std::cin >> k; for(g=0; g<k; g+=5); if(g - k > 2.5) g -= 5; std::cout << "約" << g << "度です" << std::endl; }
- 585 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 14:27:16 ]
- >>581
[1]コード品質:未チェック [2]コード:直接記入 #include <stdio.h> #include <stdlib.h> int main(void){ int sum,count=0,current; char s[32],*ss; do{ if (ss==fgets(s,32,stdin)) continue; while(*ss){ if( (*ss=13)||(*ss=10) )*ss=0;ss++;} if(( current=atoi(s) )<0)continue; count++;sum+=sum+current; printf("%6d:value=%6d sum=%6d average=%lf¥n",count,current,sum, (double)sum/(double)count); }while(0); retrun(0); } [3] 環境:Linux/Gcc/C++ [4]コメント:上記コードはC++でもコンパイルできる筈です。 C++はCのほぼスーパーセットです。ループの中で、stdinから文字列 を読み込み、atoi関数で整数に変換しています。平均の計算はdoubleで 行っています。駄コードですがご参考にどうぞ。
- 586 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 14:35:16 ]
- 駄コードってレベルじゃねーぞ
- 587 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 14:48:46 ]
- >>585みたいな明らかにおかしい、見てるだけで頭が痛くなるようなコードにも
ソースを書かなきゃ文句言っちゃいかんのか?
- 588 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 14:53:10 ]
- チラシの裏にでも書いてろ
- 589 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 15:25:15 ]
- >>541
できました!ありがとうございます。 ところで、資料に書いてあったようにbitree.hを作ってインクルードする意味ってなんなんでしょうか? また、bitree.hを作る場合は、bitree.hに一応 int main(int args, char **argv); BITREE_TYPE sumValue(BITREE_NODE *p); なども書き加えておいたほうがよいのでしょうか?意味はない気がしますが・・
- 590 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 16:18:17 ]
- かなり考えましたが、綺麗な形の木じゃない場合の計算がわからなかったのでお願いします。
[1] 授業単元:プログラミング [2]問題リンク:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7042.txt [3]期限:2008年6月27日
- 591 名前:デフォルトの名無しさん [2008/06/24(火) 16:19:08 ]
- このスレをいろんな大学に通報すればいいんですねわかります
- 592 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 16:53:51 ]
- 通報なんかしなくてもこんな所で丸投げする奴はどうせ卒業できん
- 593 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 17:28:14 ]
- >>585 点○虫か。コード品質なんて項目要らない。
>>581 #include <stdio.h> #include <stdlib.h> int main(void){ // int sum, count=0, current; int sum=0, count=0, current; char s[32], *ss; do{ // if (ss == fgets(s, 32, stdin)) if (!(ss = fgets(s, 32, stdin))) continue; while(*ss){ // if( (*ss=13) || (*ss=10) ) if( (*ss==13) || (*ss==10) ) *ss = 0; ss++; } if(( current = atoi(s) ) < 0) continue; count++; // sum += sum + current; sum += current; printf("%6d:value=%6d sum=%6d average=%lf\n", count, current, sum, (double)sum/(double)count); // }while(0); }while(current >= 0); // retrun(0); return(0); }
- 594 名前:お願いします [2008/06/24(火) 19:20:36 ]
- C++言語を使ってスタックを実現するクラスを定義し,その実行を確認するプログラム(main関数)を書く.
クラス名はstackとする. 要素のデータの型はintとする. 格納できる要素の最大数は10とする. 公開されているインターフェースは下記のものとする. void push(int data); int pop(); 初期設定は,以下のいずれかにより行う. (1) クラスのコンストラクタ(constructor)の機能を用いる. (2) 初期設定用のインターフェース(init)を定義し,スタックを使用する前に,initを呼び出す. 機能確認のためのインターフェース(たとえばスタック内のデータを表示させる)を追加してもよい. 上記の仕様を満たさない(インターフェース名が上記と一致しない等)プログラムは対象としない.
- 595 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 19:50:28 ]
- #include <iostream>
#include <vector> using namespace std; int main() { vector<int> stack; stack.push(1); stack.push(2); cout << stack.pop() << endl; cout << stack.pop() << endl; } じゃ駄目ですか(><;
- 596 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 19:53:19 ]
- >>594
#include<iostream> #include<vector> class stack{ public: void push(int data){ if(m_data.size()<m_datanummax) m_data.push_back(data); } int pop(){ int ret=-1; if(m_data.size()>0){ ret=m_data[m_data.size()-1]; m_data.pop_back(); } return ret; } void display(){ for(unsigned i=0;i<m_data.size();i++) std::cout << m_data[i] << std::endl; } stack(){m_datanummax=10;} stack(int datanummax):m_datanummax(datanummax){}; private: std::vector<int> m_data; unsigned m_datanummax; }; int main(void){ stack a, b(5); for(int i=0;i<20;i++){ a.push(i); b.push(i); } a.display(); std::cout<<"-----"<<std::endl; b.display(); return 0; }
- 597 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 20:02:32 ]
- 添削屋が虫作ってどーすんだよw
- 598 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 21:23:54 ]
- 麻呂のクソースはいらんかえぇ〜
- 599 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 21:32:00 ]
- >>589
main関数はヘッダで宣言したらダメ sumValue関数はヘッダで宣言してもいい bitree.hを作ってincludeさせてるのは勉強のためじゃない? main関数と同じファイルに関数を定義してるなら普通はわざわざ宣言部をヘッダに分けない main関数以外をbitree.cとかいうファイルにでも定義するならbitree.hを作る必要がある 分割コンパイルについて知りたいなら、ググるか他のC言語質問スレに質問しましょう
- 600 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 21:40:24 ]
- >>590
完全2分木って書いてあるけど、綺麗な形の木じゃない場合ってことは 完全2分木ではない場合を考えろってこと?
- 601 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 21:40:44 ]
- >>599
わかりました、ありがとうございました!
- 602 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 22:06:29 ]
- [1] 授業単元:情報処理
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7043.txt [3] 環境 [3.1] OS:XP [3.3] 言語: C++ [4] 期限: 08年06月30日 [5] その他の制限:もしやっていただけるなら出来るだけ簡単に、分かりやすく(初心者でも理解できる構成)
- 603 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 22:10:31 ]
- 問1
A : [] B : 0 C : * D : * E : * F : 0 G : vc
- 604 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 22:21:00 ]
- >>603
エスパーいないなー
- 605 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 22:21:45 ]
- 問3
A : d B : d C : s
- 606 名前:デフォルトの名無しさん [2008/06/24(火) 22:50:35 ]
- 1
- 607 名前:デフォルトの名無しさん [2008/06/24(火) 22:53:53 ]
- [1] 授業単元:Cプログラミング
[2] 問題文(リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7044.txt [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2008年06月25日いっぱい
- 608 名前:デフォルトの名無しさん [2008/06/24(火) 23:03:35 ]
- [1] 授業単元:数学演習3
[2] 問題文(含コード&リンク): 3a-2b+ - d= 7 . 2b+2c+ d= 5 .a-2b-3c-2d=-1 . b+2c+ d= 6 上の行列をピポット選択を使い前進消去法で解くプログラムを作る。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VisualStudio2005 [3.3] 言語:C [4] 期限:2008年06月25日07:00まで [5] その他の制限:特に制限はありません 以下が作っては見たもののアルゴリズムエラーでどこが悪いのかもわからない自作プログラム。 nijibox.ohflip.com/futabafiles/001/src/sa26951.txt
- 609 名前:608 ◆k4INPBPZ3E [2008/06/24(火) 23:04:30 ]
- トリップ忘れてた
- 610 名前:デフォルトの名無しさん [2008/06/24(火) 23:11:40 ]
- 1] 授業単元:基礎プログラミング
[2] 問題文 (1)標準入力からint 型引数に文字コード (ASCII) を読み込むと, その文字が小文字 (a〜z) であれば大文字のコードを返し そうでないならば受け取ったコードをそのまま返す関数を設計し, その関数を利用するプログラムを作成しなさい (2)char 型の配列の名前を引数として受け取ると, その配列に記憶されている文字列の逆順に 並べか替えた文字列を表示し 何も返さない関数を設計し, その関数を利用するプログラムを作成しなさい. (3)char 型の配列の名前を2つ引数 P, R に受け取ると, P に記憶されている文字列を逆順に並べか替えた文字列を R に記憶して 何も返さない関数を設計し, その関数を利用するプログラムを作成しなさい. (4)char 型の配列の名前を引数として受け取ると, その配列に記憶されている文字列が回文ならば 1 を, そうでなければ 0 を返す関数を設計し その関数を利用するプログラムを作成しなさい. ただし,前問の関数を利用すること. (5)char 型の配列の名前を引数として受け取ると, その配列に記憶されている文字列が回文ならば 1 を, そうでなければ 0 を返す関数を設計し その関数を利用するプログラムを作成しなさい. ただし,前々問の関数を利用せず, 直接,文字列中の文字を先頭と末尾から比較する方針を用いること. [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン:(cygwin) [3.3] 言語:C [4] 期限:(明日の15時まで) [5] その他の制限:
- 611 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:12:48 ]
- >>607
#include <stdio.h> int main(void) { int i, j, sum; for(i=1, sum=0; i<=100; i++) sum += i; printf("1から100までの整数の和は%d\n", sum); for(i=1, sum=0; i<=100; i+=2) sum += i; printf("1から100までの奇数の和は%d\n", sum); for(i=1; i<=20; i++) { if(i<10) for(j=0; j<i; j++) putchar(' '); else for(j=20; j>i; j--) putchar(' '); printf("%d\n", i); } return 0; }
- 612 名前:607 mailto:sage [2008/06/24(火) 23:26:48 ]
- >>611
ありがとうございます
- 613 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:34:49 ]
- 2進数変換の問題を出されました。。。基本的な部分は作ってみたのですが、完璧にできません…小数変換の工程などは手ではできるのですが…
どなたかご助力宜しくお願いします。 [1] 授業単元:実験 [2] 問題文(含コード&リンク): 10進数を2進数に変換するプログラムを作成せよ。 その際、入力する10進数が小数点ありの数値(例:2.56)でも変換可能なものとする。 [3] 環境 [3.1] OS:XP [3.3] 言語: C [4] 期限: 08年06月27日 [5] その他の制限: 基本的に習ったことの利用がメインなので、特殊な関数などは使えません。原始的なアルゴリズムでないとだめなようです。 もちろん、構造体、配列、ポインタなどの基本は習いました。
- 614 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:35:34 ]
- 作ってみたプログラムです。(また、どうしてもMSBに0が羅列してしまって…変換した数値のみを表示させたいのですが…。つまり、000000000000000000010110とかではなく10110と。)
#include <stdio.h> const int BitSize = sizeof(int) * 8; // 整数型のビットサイズを算出 void dtob(int x) { int bit = 1, i; char c[BitSize]; for (i = 0; i < BitSize; i++) { if (x & bit) c[i] = '1'; else c[i] = '0'; bit <<= 1; } // 計算結果の表示 printf("2進数: "); for ( i = BitSize - 1; i >= 0; i-- ) { putchar(c[i]); } printf("\n"); } int main(){ int x = 0; do { printf("10進数を2進数に変換します(0で終了)\n"); printf("xの値: "); scanf("%d", &x); dtob(x); } while (x != 0); return 0;}
- 615 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:36:38 ]
- あ、すみません、
>613 = >614 です。
- 616 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:44:06 ]
- for(i=BitSize-1; c[i]=='0'; i--); //最初に1が出るまでスルー
for( ; i>=0; i--) putchar(c[i]); //後は普通に表示
- 617 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:55:50 ]
- >616
レスありがとうございます! なるほど〜ちょっと改良してみます。 あとは小数点が問題ですね。。。 やっぱりとりあえず、整数部分と小数点以下をわけてスキャンしなきゃだめですよね
- 618 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:01:46 ]
- >>604
ん?>>603間違えてる?
- 619 名前:デフォルトの名無しさん [2008/06/25(水) 00:05:49 ]
- [1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク): 登録番号(int no)と名前(char *name)と年齢(int age)を含む構造体person型のポインタ変数を宣言し、登録人数分だけの動的メモリ確保をせよ。そして、データをファイルから入力せよ。 ファイルの形式は、先頭に登録する人数とし、そのあとに人数分のデータを登録番号、名前、年齢の順に書いていく(下の例を参照。登録番号は入力順に1,2,3,4,5,・・・とする。そして、入力した全員データを表示せよ。) (ファイルの例) 3 1 田中 20 2 太田 40 3 井上 35 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VisualStudio2005 [3.3] 言語:C [4] 期限: できるだけ早くお願いします。 [5]問題文でわかりにくいところがありましたら、聞いてください。
- 620 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:14:27 ]
- >>614
んー?その課題ってそういう解き方を期待してるのかな。 それでもいいんだけど、初歩的な段階ということを考慮すると 整数部なら2で割ったあまりをせっせと詰めていくように思えた。 小数部は2倍したものの整数部を詰める、みたいな。 その段階でビット演算でできるという発想をしたなら優秀な 生徒さん(もしくは経験者)なんだなあって思う。 // 皮肉じゃないです。念のため
- 621 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:20:03 ]
- 何を習ったのかお前知ってるのかよw
- 622 名前:デフォルトの名無しさん [2008/06/25(水) 00:25:57 ]
- [1] 授業単元:基礎プログラミング
[2] 問題文 キーボードから2つの自然数を入力し、入力した値が10以下で2の倍数なら足し算 それ以外はかけ算させた結果を表示させるプログラムを作成せよ。 但し、if文を用いて自然数以外を入力したらエラー文を表示させる。 [3] 環境 [3.1] OS: Windows/linux [3.2] コンパイラ名とバージョン:VC++ 6.0/gcc [3.3] 言語: C [4] 期限:6/27 [5] その他の制限:入力はscanf、出力はprintf stdio.h よろしくお願いしますorz
- 623 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:26:37 ]
- >>621
あーもーそういう煽りが欲しいわけじゃなくてな。 関数、ポインタ習いました。とか原始的なアルゴリズムで、とか前置きしなきゃならない段階でしょ? その段階でビット演算を直感的に理解できる子は少ないでしょ。 わかんないかなー。 学生の頃周りがどうだったか、自分がどうだったか思い出しなよ。 学校では習ってません独学です、ならビット演算をスムーズに理解できたのはいつのことだった?
- 624 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:29:33 ]
- >基本的に習ったことの利用がメイン
って書いてあるのに、ビット演算を習ってないと思うほうがおかしいだろ。
- 625 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:37:27 ]
- ってか>>613にアドバイスしたらどうなん?
>>622 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7047.txt
- 626 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:38:02 ]
- >623 >624 さん方
お二人ともすみません(汗) 自分の書き方がまぎらわしかったです・・・ ビット演算は習っていません。 柴田先生の本を読みまして、 内部表現とビット などの説明あたりを読んでいるときに 先生が以前ビット演算でやればサマートなんだけどな・・・ブツブツと ボソっといってたのを思い出して、 それから少し自分で勉強してみました。 ですが、挫折しかけてこのサイトに、、です。(汗) というか途中で疑問に思ったのですが、なんでC言語には2進数で表示する機能がないのでしょうか・・・?
- 627 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:40:40 ]
- >>623
相手するだけ無駄 >>624 宿題解いてもらえなくて涙目なんですよね、わかります。 催促していいよw
- 628 名前:613 mailto:sage [2008/06/25(水) 00:41:18 ]
- あ、ちなみに
原始的なアルゴリズム とはありますが、 たぶんビット演算くらいはOKかと思います。 先生は期待してはいないと思いますが…。 その、手計算でやるときのアルゴリズムと まったくそのままのほうが、わかりやすいのだとは思うのですが、 違う方向性でやりはじめてしまったので…。 最終的にダメそうなら、ホントに原始的な方向でいくつもりですが。
- 629 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:51:30 ]
- [1] 授業単元:プログラミング実験
[2] 問題文(含コード&リンク): 2題あります。 片方でも構いません。 上については、ソースに記載されてるpartitionって関数を使って、再帰でクイックソートです。 下については、ソースに記載されているmergeって関数を使って、再帰でマージソートです。 それぞれ、作成する部分にコメントがあるので、大体それと同じ行数でできるらしいです。 でも長くなっても構いません。 ifとforかwhileでできるみたいなことも言ってました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7048.txt kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7049.txt [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: CPad for Borland C++Compiler Version 2.31 [3.3] 言語:C [4] 期限: 2008年6月25日17:00まで できるだけ早く完成させたいです。提出は明日の夕方です。 [5] その他の制限: ポインタは使わない感じで授業やってます。再帰必須です。あとは上に書いた通りです。 よろしくお願いします。
- 630 名前:608 ◆k4INPBPZ3E [2008/06/25(水) 01:03:52 ]
- ヘルプ!ヘールプ!!!
- 631 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 01:06:35 ]
- >>629
void quicksort(int left, int right) { int i=0; if(left >= right) return; i = partition(left, right); quicksort(left, i-1); quicksort(i+1, right); } void mergesort(int l, int r) { int m; if(l>=r) return; m = (l + r) / 2; mergesort(l, m); mergesort(m+1, r); merge(l, m, r); }
- 632 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 01:11:17 ]
- >>628
→>>316
- 633 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 01:20:45 ]
- >>631
あなたが神か ありがとうございます! 超絶感謝!!!
- 634 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 01:20:49 ]
- [1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク): (1)1つの整数を2進数に変換表示する関数convert(a)を作成せよ。そして、キーボードより任意の正の整数を入力し、 その整数の2進数が表示されるプログラムを作れ。 (2)1つの正の整数を素因数分解し表示する関数bunkai(a)を作成せよ。そして、キーボードから任意の正の整数を入力し、 その整数の素因数分解を表示するプログラムを作れ。 ------表示例------ 整数を入力: 50 50=2x25 25=5x5 5=5 5*5*2 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Borland C++ Compiler 5.5 [3.3] 言語: C [4] 期限: 明日 [5] その他の制限:関数についての演習です。実は(1)に関しては十分な実行結果は得られました。 蛇足があれば指摘していただきたいです。
- 635 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 01:21:56 ]
- (1)の作成したプログラムです。(2)の参考になればよいのですが。
#include <stdio.h> void convert(int n) { if(n>1) convert(n/2); if(n==1) printf("1"); else printf("%d",n%2); } void main() { int n; printf("10進数を入力してください:"); scanf("%d",&n); printf("2進数に変換すると\n"); convert(n); }
- 636 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 01:45:23 ]
- [1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク): アスキーコードにより文字操作を行い、暗号化された文字列を解読するプログラム kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7050.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: cyagwin gcc [3.3] 言語: C [4] 期限: 6/26 午後3時まで 暗号文(アスキーコードをずらしただけ)を解読するプログラムを作成する課題です。 よく見る課題ですが、プログラム仕様が特殊で過去ログに該当するものがなかったので どなたかお願いします。
- 637 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 01:54:37 ]
- >>628
手作業で小数を2進数に変換することができることに加え、浮動小数点のビット列が どのように構成されてるかを理解する必要があるよ それでもビット演算しますか?(y/n)
- 638 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 02:12:06 ]
- 前回教えてくださったありがとうございます!!
以下のようなプログラミングはどのようにすればよいのでしょうか? 「組み合わせ」を求める数学の公式にコンビネーションがあります。このコンビネーションのプログラミングを教えてください! nとrをscanf()で読み、nCrの値を計算して表示させます。 条件として、nとrの値はマイナスでなく、またゼロでなく、さらにここではn<=10であることを確認させて、正しい数値を入力させる。もし誤った数値を入力したら「入力ミスです」と表示させる。 0!=1も扱えるようにすることを忘れない。 これもよろしくお願いします
- 639 名前:613 mailto:sage [2008/06/25(水) 02:12:31 ]
- >637
はい…そこなんですよ…。 それが頭いっぱいになって、ここにたどり着きました。。。 1年間アセンブリ言語をやっていたことがあって、 そのとき浮動小数点に苦労しました。。。 でも原始的なアルゴリズムよりもスマートに、短くできるんだったら 大変興味があります。なのでとりあえずやりたいと考えます。
- 640 名前:613 mailto:sage [2008/06/25(水) 02:23:50 ]
- ちなみに
丸め誤差については特にいわれてないのですが、 4ビット程度表示できればいいかなぁと考えています。
- 641 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 02:24:42 ]
- [1] 授業単元:数値解析
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7053.txt [3] 環境 [3.1] OS: WindowsXP SP2 [3.2] コンパイラ名とバージョン: visual Studio NEt2003 [3.3] 言語: C/C++/どちらでも可 [4] 期限:今週土曜まで [5] その他の制限: 大域変数(グローバル変数)を使う。 今あるプログラムを改善した形で書き換えてくれるとありがたい。 (プログラムの授業ではなく数値解析なので変な形にはなっていると思うが なるべくこのような形にしてもらいたい。)自分が理解しやすいのもあるが
- 642 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 02:32:20 ]
- 前スレの人?
- 643 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 02:36:55 ]
- >>641
yを求めた時のiの値とxn[i],xn[i+1]とxの関係を考えてみろ。 っていうか前スレのヤツならなんできちんと写さない?
- 644 名前:613 mailto:sage [2008/06/25(水) 02:37:40 ]
- >642
え、自分でしょうか?? 自分はこのスレ、はじめてです。(検索で見つけました)
- 645 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 02:38:14 ]
- いや641のこと。
- 646 名前:613 mailto:sage [2008/06/25(水) 02:38:42 ]
- あ、すみません m()m
- 647 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 02:41:48 ]
- 東京高価万歳
凄いぞ東京高価
- 648 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 03:28:21 ]
- >>611
(・∀・)ニヤニヤ
- 649 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 03:32:55 ]
- ニヤニヤするぐらいならどこがおかしいか指摘ぐらいしたら?
- 650 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 03:38:15 ]
- おかしくなんかないよ、ただ、おそらく等差数列の差を使うとか
一番最後は工夫すりゃif else 不要
- 651 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 03:41:48 ]
- ループの中にムダな分岐つっこんで効率と可読性下げるより、あのままで十分だと思うけど。
- 652 名前:デフォルトの名無しさん [2008/06/25(水) 04:12:17 ]
- >>619 お願いします。
- 653 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 05:17:34 ]
- >>650
これでいいですか><? for(i=1;i<=20;i++) printf("%*s%d\n",i<=10?i:20-i,"",i);
- 654 名前:590 mailto:sage [2008/06/25(水) 06:42:59 ]
- >>600
えっと・・・完全2分木っていうのは葉以外の全てのノードが枝を2つ持っている事が必要十分条件ではないのですか? それならば一部のパスだけが長いという場合も考えられますよね。 それとも左右対称の三角形みたいな形の木になることを意味しているんでしょうか。
- 655 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 06:49:09 ]
- 完全二分木は、「すべての葉の深さが等しい二分木」という定義が普通だと思う
- 656 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 06:51:23 ]
- AVL木とか赤黒木なら回転を伴うが常にバランスした二分木が作れる
何も考えずに昇順に挿入したりするとリスト構造の高価なシミュレーションになる
- 657 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 06:54:56 ]
- あ、質問の意図を誤解してたかも
NlogNじゃねーの?
- 658 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 07:01:24 ]
- >親ノードから左右の
>子ノードの中身を比較することで、完全2分木中の任意のノードの探索が行えるとする この意味が分からん 「左右の子ノードの中身を比較」ってどういうことだろう 普通の二分探索木なら簡単に解ける 完全二分木の高さをhとすると、N=2^h-1だから、h=log2(N+1) 比較回数の最大値は高さと同じだから、log2(N+1)回
- 659 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 08:39:21 ]
- >>619
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7055.txt
- 660 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 08:45:17 ]
- >fscanf(fp, "%s", p->name);
|

|