[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 07/01 22:51 / Filesize : 375 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C/C++の宿題片付けます 128代目



1 名前:デフォルトの名無しさん [2009/06/24(水) 23:28:21 BE:454421568-DIA(282072)]
あなたが解けない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++の宿題片付けます 127代目
pc12.2ch.net/test/read.cgi/tech/1244449887/

666 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 23:08:32 ]
>>234で、>>251さんに
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9608.txt
というプログラムを書いて頂いたのですが、RAND_MAXがrand関数の利用に当たるとして
再提出になってしまいました。

rand_maxはrandのとる最大値とのことですが、これを使わないで同様の趣旨を実現するにはどうしたらよいのでしょうか?

667 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 23:14:25 ]
RAND_MAXをINT_MAXに変える

668 名前:デフォルトの名無しさん [2009/07/05(日) 23:53:23 ]
2つの整数をキーボードから入力して、最初の数の方が小さい場合には、『最初の数の方が小さいか等しいです』と表示させて、大きい場合には、『後の数の方が小さいです』と表示させるプログラムを作成せよ

#include<iostream>
using namespace std;
int main(){


return 0;
}


の中に入る文を作るんですが、どうすればいいですか。使うのはifとcoutとelseくらいだと思うんですが


669 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 23:54:46 ]
>RAND_MAXがrand関数の利用に当たるとして

何ソレ
ただの定数マクロでしょ?

670 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 00:24:57 ]
>>666
関数の利用に当たる・・・だと・・・
数学科で出された問題?
だったらそのトンチンカンな主張も納得できるけど工学科だったら・・・

671 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 00:28:29 ]
>>668 例はいらない。
// ↑C++テンプレート
int a1, a2;

cout << "2つの数を入力してください:";
cin >> a1 >> a2;
if(a1<=a2) cout << "最初の数の方が小さいか等しいです\n";
else cout << "後の数の方が小さいです\n";
// ↓C++テンプレート

672 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 00:49:54 ]
>>671
// ↑C++テンプレート
// ↓C++テンプレート

なんだよ、このコメントは。w
まぁ、>>671の予想通り、minを使うのが速いよってことですね。

673 名前: ◆jmI6IAV7WI [2009/07/06(月) 05:28:45 ]
[1] 授業単元: 構造体
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9688.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 7月10日
[5] その他の制限:

よろしくお願いします


674 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 06:48:27 ]
書くとこ入力部だけじゃねーかw



675 名前: ◆jmI6IAV7WI [2009/07/06(月) 07:43:14 ]
>>674
入力部だけでもお願いできないでしょうか
難しくて何がなんだかさっぱりわからないので
すみません

676 名前: ◆/91kCCQXBo mailto:sage [2009/07/06(月) 14:11:15 ]
>>673
1.
  printf("1番目のX Y座標をスペースを開けて入力して下さい:");
  scanf("%lf%lf", &my_line.p1.x, &my_line.p1.y);
  printf("2番目のX Y座標をスペースを開けて入力して下さい:");
  scanf("%lf%lf", &my_line.p2.x, &my_line.p2.y);
  printf("2点間の直線距離は:");
2. 三角形の面積 area = fabs(t.p2.x * t.p3.y - t.p3.x * t.p2.y)/2;
  printf("1番目のX Y座標をスペースを開けて入力して下さい:");
  scanf("%lf%lf", &my_triangle.p1.x, &my_triangle.p1.y);
  printf("2番目のX Y座標をスペースを開けて入力して下さい:");
  scanf("%lf%lf", &my_triangle.p2.x, &my_triangle.p2.y);
  printf("3番目のX Y座標をスペースを開けて入力して下さい:");
  scanf("%lf%lf", &my_triangle.p3.x, &my_triangle.p3.y);
  printf("3点で囲まれた三角形の面積は:");

677 名前: ◆/91kCCQXBo mailto:sage [2009/07/06(月) 14:25:27 ]
>>624 ガウス・ザイデル法の計算方法 山本昌志 2005年12月16日
akita-nct.jp/yamamoto/lecture/2005/5E/Linear_eauations/ex_GaussSeidel_html/node2.html

必要なら以下にコメントも付けとく。仮にエクセルのPADでもいい?
#if 0
for( j=1; j<=N; j++ ){
  temp += a[i][j] * x[j];
}
/* a[i][i] * newx + (temp - a[i][i] * x[i]) = b[i]; */
/* a[i][i] * newx = b[i] - (temp - a[i][i] * x[i]); */
newx = 1.0 / a[i][i] * (b[i] - (temp - a[i][i] * x[i]));
#else
for( j=1; j<=N; j++ ){
  if( i==j ) continue;
  temp += a[i][j] * x[j];
}
/* Xi(k+1) = 1/Aii * ( Bi - (Ai,1*X1(k) + Ai,2*X2(k) + ... + Ai,i-1*Xi-1(k) + Ai,i+1*Xi+1 + ... + Ai,n*Xn )) */
newx = (b[i] - temp)/a[i][i];
#endif

678 名前:デフォルトの名無しさん [2009/07/06(月) 17:30:17 ]
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9689.txt

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C/C++
[4] 期限: [2009年7月7日10:00まで]
[5] その他の制限: 特にありません。 

よろしくおねがいします。

679 名前:デフォルトの名無しさん [2009/07/06(月) 18:07:23 ]
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク):
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9690.zip

[3] 環境
 [3.1] OS: VineLinux4.2
 [3.2] コンパイラ名とバージョン: GCC 4.3
 [3.3] 言語: C/C++
[4] 期限: [2009年7月8日10:00まで]
[5] その他の制限: 特にありません。

C言語なら俺に聞け(入門篇) Part 50
pc12.2ch.net/test/read.cgi/tech/1246342847/
>>221で質問しましたが結局分からなかったので
ここに投げさせて頂きました。よろしくお願いします。

よろしくおねがいします。

680 名前:デフォルトの名無しさん [2009/07/06(月) 18:25:28 ]
>>493で質問し、一題目を当スレで解答していただいたものです。
その際二題目は問題の意味が解らないということで保留にしていたんですが、
二題目もしなければ駄目ということで再度質問願います。
[1] 授業単元:Cプログラミング入門編
[2] 問題文(含コード&リンク):www-it.sci.waseda.ac.jp/CPR1/class08/kadai2.htm
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ: gcc
 [3.3] 言語: C

二題目の問題の意味ですが、outputでV1〜Vnが表示される度にそれぞれの行列の要素の中で
『V1二乗+V2二乗−V3二乗』を画面Printするという意味と思います。
教授曰くピタゴラスのなにやらと言うらしいのですが、、、。

よろしくお願いします。

681 名前: ◆jvdNOCQgZU mailto:sage [2009/07/06(月) 18:31:14 ]
[1] 授業単元:windows開発
[2] 問題文(含コード&リンク): down11.ddo.jp/uploader/download/1246872574.zip/attatch
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual Studio 2008
[3.3] 言語:C++
[4] 期限: [2009年7月9日まで]
[5] その他の制限:DirectX SDK N2008を使用します。
ファイルが大きかったので別のロダ借りました。パス「111」

682 名前:デフォルトの名無しさん [2009/07/06(月) 18:49:24 ]
>>680
最初に解答いただいたプログラムです
codepad.org/xBj760YT

よろしくお願いします。

683 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 19:01:54 ]
>>679
問題 >>前930(9532)>>093(9559)>>172(9532)
このプログラムに、リダイレクション、パイプ機能を実装してください。
>>265(9607)

684 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 19:23:17 ]
>>679
もう上で答えられてるけど作っちゃったので俺も
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9691.c



685 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 19:35:09 ]
>>680
#include <stdio.h>
#include <stdlib.h>
void multiply(int *mat, int *vec, int *out, int N) {
int i, j;
for (i = 0; i < N; i++) {
out[i] = 0;
for (j = 0; j < N; j++) {
out[i] += mat[i*N+j] * vec[j];
}
}
}
int main(void) {
int i, k, N = 3, n = 10;
int *v = (int *)malloc(N * sizeof(int));
int *t = (int *)malloc(N * sizeof(int));
int *P = (int *)malloc(N * N * sizeof(int));
v[0] = 3; v[1] = 4; v[2] = 5;
P[0] = 1; P[1] = -2; P[2] = 2;
P[3] = 2; P[4] = -1; P[5] = 2;
P[6] = 2; P[7] = -2; P[8] = 3;
for (k = 1; k <= n; k++) {
multiply(P, v, t, N);
for (i = 0; i < N; i++) {
v[i] = t[i];
}
printf("v_%d = (%d, %d, %d), ", k, v[0], v[1], v[2]);
printf("v1^2 + v2^2 - v3^2 = %d\n", v[0]*v[0]+v[1]*v[1]-v[2]*v[2]);
}
free(v); free(t); free(P);
return 0;
}

686 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 20:04:06 ]
>>678
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9692.txt

687 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 21:00:23 ]
>>685
ありがとうございます。
本当に助かります。
こんなにサッと出来るなんて尊敬します。

688 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 21:30:15 ]
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
多数のファイルをクローズせずに何個もオープンするとどうなるか実験せよ.
実験用プログラム fopen.c のソースと実験結果と考察をレポートすること.

% ./fopen
入力ファイル:fopen.c
オープン 1 回目
オープン 2 回目
オープン 3 回目
...
オープン ??? 回目
これ以上オープンできません!

注意:「○○回までオープンできた」とかでは,現象・結果の説明にすぎず,考察とは言えない. その結果から何が理解できるのか?推理せよ. 換言:実験結果(具体例)から一般規則を導き出せ.

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:09/07/08
[5] その他の制限: 特になし

689 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 21:36:20 ]
>>688
追記
その他の制限:ファイル名は決め打ち(ソースファイルなど)でよい.
自分なりに作ったソースは
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9693.c
考察がわかりません.
セグメンテーションエラーが出るのはわかるのですが…

690 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 21:47:23 ]
>>689
セゲメンテーションフォルトは fclose(NULL) が悪いだけで考察とは関係ないよ

691 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 21:55:34 ]
>>690
fclose(NULL)がエラーになる理由を考察に書けばいいと思うんですが、具体的にどう書けばいいのでしょうか


692 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 21:55:34 ]
>>680
ピタゴラスのなにやらって、三平方の定理じゃねーかw

693 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 22:11:23 ]
>>691
ストリームをクローズします。

fclose は,引数 stream で指定されたストリームをクローズします。
そのストリームに対応付けられているすべてのバッファは,クローズする前に
フラッシュされます。システムが割り当てたバッファは,クローズすると解放されます。
setbuf または setvbuf を使って割り当てられたバッファは,自動的に解放される
わけではありません(ただし,setvbuf にバッファポインタとして NULL が渡されると,
クローズするときに解放されます)。

とあるから、NULLを無理矢理クローズしようとしてエラーが生じるんじゃない?
規格票には何か書いてあるかな

694 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 22:16:47 ]
>>691
perror()かなにかでエラー原因表示させてみ

[略)
perror("fopen"); ←ここらへんでperrorを呼んでみる
printf("これ以上オープンできません. \n");
[略)



695 名前:デフォルトの名無しさん [2009/07/06(月) 22:23:45 ]
[1] 授業単元:プログラミング入門
[2] 問題文(含コード&リンク):
リスト構造で接続された構造体に含まれる名前を比較し、辞書順にリスト構造の接続を再構成せよ。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2009年07月7日8:00まで
[5] その他:自分で書いたのですが、セグメントエラーになってしまいます。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9694.c
なお、これは一番若い名前を見つけたら一旦保持して、最後まで探し終えたら、先頭と保持したものを入れ替えるという動作を
最後までループさせるつもりで書きました。


696 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 22:36:25 ]
>>693ご教示ありがとうございます.
ファイルをオープンできなかった場合に,そのファイルをクローズしようとするとどうなるかと言う課題もあるのですが,
これも同じ原因でエラーが発生するのでしょうか.
ソースは
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9695.c
です.

>>694
1回オープンしました.

46回オープンしました.
47回オープンしました.
fopen: Error 0
これ以上オープンできません.

となりました

697 名前:デフォルトの名無しさん [2009/07/06(月) 23:01:33 ]
>>684>>685
ありがとうございます。
ちゃんと動作しました。

698 名前:デフォルトの名無しさん [2009/07/06(月) 23:06:42 ]
整数2つをキーボードから入力し、(最初にキーボードから入力させる数値を
入れる変数をa、2番目にキーボードから入力させる数値を入れる変数をbとする。)、
最初の数の方が大きい場合には、『最初の数の方が大きいです』、等しい場合には、『両方は等しいです』、2番目の数の方が大きい場合には、『2番目の数の方が大きいです』と表示するプログラムを作成せよ

ある整数変数をキーボードから入力し、その数値が9以下なら『入力した値は1桁です』と表示させて、10以上、99以下の場合は、『入力した値は2桁です』と表示させ、
100以上なら『入力した値は3桁以上です』と表示するプログラムを作成せよ
#include<iostream>
using namespace std;
int main(){

return 0;
}
の中に入る文を作るんです。else とか else if とか ifとか使うはずなんですが誰か教えてくれませんか

699 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 23:12:55 ]
>>695
ちょっと見ただけだが、
↓これはまずくない?
>struct data* str,str1,str2,tmp,target;

>struct data *str,*str1,*str2,*tmp,*target;

後、動作可能な形で全体をさらす方がアドバイスを受けやすいと思うよ。

700 名前:デフォルトの名無しさん [2009/07/06(月) 23:15:40 ]
int first,second;

printf("first: ");
scanf("%d",&first);
if(first>=100)
printf("入力した値は3桁以上\n");
else if(first>=10)
printf("入力した値は2桁以上\n");
else if(first<=9)
printf("入力した値は1桁\n");

printf("second: ");
scanf("%d",&second);
if(second>=100)
printf("入力した値は3桁以上\n");
else if(second>=10)
printf("入力した値は2桁以上\n");
else if(second<=9)
printf("入力した値は1桁\n");

if(first>second)
printf("firstが大きい\n");
else if(first==second)
printf("同じ\n");
else
printf("secondが大きい\n");

701 名前:デフォルトの名無しさん [2009/07/06(月) 23:28:11 ]
>>700
あれ?C++なんですけど
coutとかなのですが

702 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 23:30:28 ]
>>701
C++もCコードかけるからねえ
最初にそういうのは注文で出しておいた方がいいかも

703 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 23:32:19 ]
using〜を見落としてたわ
もう寝るから別の人やって

ところで、テンプレ使えと逆ギレOK?

704 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 23:45:35 ]
だから、今まで何度もC言語とC++は別言語だからスレッドを分けてくれと言ってきたじゃないか



705 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 23:54:07 ]
初耳だ

706 名前:デフォルトの名無しさん [2009/07/07(火) 00:09:40 ]
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
www.dotup.org/uploda/www.dotup.org209303.txt
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:c
[4] 期限: 7月7日23:59
[5] 特になし

よろしくお願いします

707 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 00:54:21 ]
>>701
なにがcoutなのですか?
printfはC++じゃないとおっしゃる?

708 名前: ◆/91kCCQXBo mailto:sage [2009/07/07(火) 00:56:04 ]
>>698
// ここまではC++テンプレート
cout<<"1番目の整数: ";
cin>>first;
cout<<"2番目の整数: ";
cin>>second;
if(first>second)
  cout<<"最初の数のほうが大きいです"<<endl;
else if(first<second)
  cout<<"2番目の数のほうが大きいです"<<endl;
else
  cout<<"両者は等しいです"<<endl;

cout<<"3番目の整数: ";
cin>>first;
if(first>=100 || first<=-100)
  cout<<"入力した値は3桁以上です"<<endl;
else if(first>=10 || first<=-10)
  cout<<"入力した値は2桁です"<<endl;
else
  cout<<"入力した値は1桁です"<<endl;
// ここからはC++テンプレート

709 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:02:07 ]
>>689
多数のファイルをだからこんな感じじゃないの
うちの環境だとエラーすら出ずに29ファイル目で終わった
コンパイラはbcc,OSはXP SP3
原因はリソース不足?
#include <stdio.h>
#define N 1000
int main(){
int i;
char fname[256];
FILE* in[N];
FILE* out;
for(i = 0;i < N;i++){
sprintf(fname,"hoge%u",i);
out = fopen(fname,"w");
fclose(out);
if((in[i] = fopen(fname,"r")) == NULL){
perror("error");
for(i--;i >= 0;i--){
fclose(in[i]);
}
exit -1;
}
}
for(i = 0;i < N;i++){
fclose(in[i]);
}
return 0;
}

710 名前:512 mailto:sage [2009/07/07(火) 01:07:49 ]
>>680
>>685で解答済みみたいだけど、一応>>512のコードで求めてみた
codepad.org/4TnvGRE5
「ElementOf(mat,row,clm)」と「PrintPythagoreanTheorem(int v1, int v2, int v3)」を追加して
main関数に1行追加しただけ
#こっそりMltMatrixをMulMatrixに修正してたりw

711 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:09:23 ]
>>709
1020ファイル作ってsegmentation faultだった。
CentOS5.3(仮想マシン) gcc4.1.2

712 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:11:50 ]
>>711
丁度 out==NULL になったんじゃないかな

713 名前:711 mailto:sage [2009/07/07(火) 01:12:41 ]
流れをなんにも見てなくてとりあえず動かしただけだったすまん。

>>691
ええと、fclose(NULL)がなぜダメなのかを考察するのはちょっとズレてる
その前にfopenがNULLを返したことに対して考察をすべきよー

714 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:14:45 ]
>>712
大抵out==NULLになって終わるんじゃないかな



715 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:15:34 ]
>>714
in[i]==NULL になることもあるさ

716 名前:711 mailto:sage [2009/07/07(火) 01:22:12 ]
#include <stdio.h>
#include <stdlib.h>
#define N 10000
int main(){
int i;
char fname[256];
FILE* in[N];
FILE* out;
for(i = 0;i < N;i++){
sprintf(fname,"file/hoge%04u",i);
out = fopen(fname,"w");
if(out == NULL){
perror("error[out]");
for(i--;i >= 0;i--){ fclose(in[i]); }
exit(-1);
}
fclose(out);
if((in[i] = fopen(fname,"r")) == NULL){
perror("error[in]");
for(i--;i >= 0;i--){ fclose(in[i]); }
exit(-1);
}
}
for(i = 0;i < N;i++){ fclose(in[i]); }
return 0;
}

とりあえずちょっと変えてみた。
まあ、他の要因で落ちることを考慮すればin[i]==NULLになることもあるのだろうけれど、
ファイルの開きすぎで落ちるという観点で行けばoutのみじゃない?

717 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:35:43 ]
>>695
いろいろ間違ってる。
nextを使うべきでないところで使っている(このためstr->next・str2->nextでstrやstr2がNULLになることがある)。
最小値がstr1でない場合に、次のループではstr1を跳ばしている(このためstr1がNULLになることがある)。
どうしてもtop入れ換えでやりたいなら、図でも書いて落ち着いて考えること。

top入れ換えではなく、最小値を1個ずつ抜いて別のツリーをつくる方がややこしくなくてお勧め。

struct data *sort(struct data *top){
  struct data work, *d, *target = top, *current = &work;
  for(target = top; target != NULL; target = top){ //元のツリーがなくなるまで
    for(d = target->next; d != NULL; d = d->next){ //最小値探索
      if(strcmp(target->name, d->name) > 0) target = d;
    }
    if(top == target){
      top = target->next; //最小値がtopならtopにnextを保持
    }else{
      for(d = top; d->next != target; d = d->next) ; // 最小値がtop以外なら最小値の親と最小値の子をつなげる
      d->next = target->next;
    }
    current->next = target; // 新しいツリーの末尾に最小値を追加
    current = target;
    current->next = NULL;
  }
  return work.next;
}

718 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:42:03 ]
1] 授業単元:C言語
[2] 問題文(含コード&リンク):n個の整数データを入力し,最後に平均を出力,nは最初に入力する(nは自然数),平均は小数部まで求める実行例として
[3] 環境
 [3.1] OS:Windows
 [3.2] gcc 3.4
 [3.3] 言語:C
[4] 期限:7/7 18時まで
#include<stdio.h>
void main(void)
{
int x,y,z,sum;
double ave;
y=1;
sum=0;
printf("入力するデータ数は? ");
scanf(" %d", &x);
if(x>1){
for(y=1; y=x; y++){
printf("No .%d",y);
y++;
scanf("%d", &z);
sum=sum+z;
}
ave=sum/x;
printf("以上%d個の平均は:%.6f",x,ave);
}
}
とりあえず自分でここまでやってみましたけどわかりません><

719 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:52:24 ]
>>716
横レスだけどファイルを開きすぎて落ちるってどういうこと?
outはきちんとfcloseしてるから再利用してよさそうなんだけどやっちゃダメなの?
後学のためにご教示願います。

720 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:57:27 ]
outはちゃんと閉じてるけどinは増える一方でしょ

0
1 out open
0 out close
1 in open
2 out open
1 out close
2 in open

というながれで、ファイルカウントが最初に最大になるのはoutをopenしたときでしょ

721 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 02:06:14 ]
なるほどそういうことか。サンクス。

722 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 02:26:49 ]
>>718
#include<stdio.h>
void main(void)
{
int x,y,z,sum;
double ave;
sum = 0;
printf("入力するデータ数は? ");
scanf("%d", &x);
if(x>=1){
for(y=1; y <= x; y++){
printf("No.%d ",y);
scanf("%d", &z);
sum=sum+z;
}
ave=(double)sum/x;
printf("以上%d個の平均は:%.6f",x,ave);
}
}

723 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 02:48:35 ]
>>722
ありがとうございます

724 名前: ◆jmI6IAV7WI [2009/07/07(火) 05:34:13 ]
>>676
ありがとうございました
助かりました



725 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 12:44:06 ]
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 整数 nissu をキー入力して、1 月1 日から数えて nissu 日目が何月何日かを表示
したい。 main() 関数を以下のように作った。ここで呼ばれている関数 tuki_hi () を作成せよ。
#include <stdio.h>
int main(){
int nissu, tuki, hi;
void tuki_hi(int, int *, int *);
printf("日数を月日に変換\n");
printf("日数は? "); scanf("%d", &nissu);
tuki_hi(nissu, &tuki, &hi);
printf("%d 日目は%d 月%d 日です", nissu, tuki, hi);
return 0;
}
[3] 環境
[3.1] OS: Windows/vista
[3.2] コンパイラ名とバージョン: borland c++
[3.3] 言語:C
[4] 期限: ([2009年07月7日2:30まで]
[5] よろしくお願いします

726 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 12:55:20 ]
>>725
void tuki_hi(int nissu, int *tuki, int *hi)
{
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; /* days[0]は使わない */
int i;
for (i=1; i<=12 && nissu>days[i]; ++i) { nissu -= days[i]; }
*tuki = i;
*hi = nissu;
}

727 名前:デフォルトの名無しさん [2009/07/07(火) 14:09:24 ]
>>686 ありがとうございました。

ただ、それぞれの問題につき1つのプログラムという形にしていただけないでしょうか?
自分なりにやってみたんですが、どうも上手くいきませんでした。

お手数ですが、よろしくお願いしますm(_ _)m

728 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 14:48:07 ]
>>726
ありがとうございましたm(__)m

729 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 14:56:29 ]
>>727
何も理解できてないな
>>686動かしてみた?

730 名前:デフォルトの名無しさん [2009/07/07(火) 16:35:47 ]
>729 すみません… 本当に何も理解しておりません。
>実行結果です。
t23.c: In function `insert_node':
t23.c:130: error: `new' undeclared (first use in this function)
t23.c:130: error: (Each undeclared identifier is reported only once
t23.c:130: error: for each function it appears in.)
t23.c:130: error: parse error before "node_t"
t23.c: In function `remove_node':
t23.c:139: error: `delete' undeclared (first use in this function)
t23.c:139: error: parse error before "del"
t23.c: In function `random_list':
t23.c:149: error: 'for' loop initial declaration used outside C99 mode
t23.c: In function `get_node':
t23.c:155: error: 'for' loop initial declaration used outside C99 mode

731 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 16:53:30 ]
それ実行じゃなくてビルド時のエラーだろう。
とりあえず C++ でやってみては。

732 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 17:03:29 ]
[1] 授業単元: プログラミングC
[2] 問題文(含コード&リンク):
キーボードから半角英数で文字列を入力し、英字については大文字を小文字に、小文字を大文字にするプログラムを作成せよ。

実行例 文字列入力 :AbCdEfG123
    変換文字列 :aBcDeFg123
[3] 環境 windows
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 2009/7/9
[5] その他の制限:全くの初心者なのでよろしくお願いします。

733 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 17:32:46 ]
すいません>>732のものなんですがもう一問あったのでこちらもよろしくお願いします
[1] 授業単元: プログラミングC
[2] 問題文(含コード&リンク):
キーボードから半角英数で文字列を入力し、これを数字(0→9)、大文字(A→Z)、
小文字(a→z)の順に並べ替えるプログラムを作成せよ。
ヒント:並べ替えアルゴリズムは、バブルソート(隣接交換法)を使うと簡単だろう。
    文字列長はstrlen命令を使うとよい。みたいです。
[3] 環境 windows
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 2009/7/9
[5] その他の制限:

734 名前:デフォルトの名無しさん [2009/07/07(火) 17:36:08 ]
>>731 提出先のコンパイラーでg++がインストールされてないようです…

cに書き換えるにはどうしたら良いでしょうか?



735 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 17:37:38 ]
>>730
コンパイルすらできていないのに>>727のコメントが出てくるのがおかしいんだよ。
自分なりに何をやったんだ?って思うんだよなぁ。
てっきりmainがありませんぐらいまではたどり着いてるものだと思っていたが。。

736 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 17:40:05 ]
>>734
new deleteをmalloc/calloc freeにする
変数の宣言をブロックの先頭で行うようにする

737 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 17:57:20 ]
Cに書き換えるのも書こうかと思ったんだけど
元々の条件にC/C++って書いてあったからなー

738 名前:デフォルトの名無しさん [2009/07/07(火) 18:00:05 ]
>>736 ありがとうございます。

739 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 18:02:11 ]
>>732
#include <stdio.h>
#include <ctype.h>

int main(void)
{
char str[128];
int i;
scanf("%s", str);
for (i = 0; str[i]; ++i)
if (isupper(str[i])) str[i] = tolower(str[i]);
else if (islower(str[i])) str[i] = toupper(str[i]);
puts(str);
return 0;
}

740 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 18:31:32 ]
>>733
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int compare(char x, char y)
{
if (isdigit(x)) return isdigit(y)? y - x: 1;
if (isupper(x)) return isdigit(y)? -1: isupper(y)? y - x: 1;
if (islower(x)) return isdigit(y) || isupper(y)? -1: islower(y)? y - x: 1;
return 0;
}
void bsort(char *str)
{
int i, j;
for (i = 0; i < strlen(str) - 1; ++i) {
for (j = 1; j < strlen(str) - i; ++j) {
if (compare(str[j], str[j - 1]) > 0) {
char t; t = str[j]; str[j] = str[j - 1]; str[j - 1] = t;
}
}
}
}
int main(void)
{
char str[128];
scanf("%s", str);
bsort(str);
puts(str);
return 0;
}

741 名前:デフォルトの名無しさん [2009/07/07(火) 18:57:59 ]
>>737 そうですね、迂濶でした。
今度こそ自分なりにやってみますが、ダメだったときはお願いしてもよろしいでしょうか…

742 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 19:02:25 ]
>>734
> 提出先のコンパイラーでg++がインストールされてないようです…
何のエラーメッセージでそう思った? 

とりあえず int main(void){return 0;} の一行を追加して、g++でコンパイルみてはどうだろう。

743 名前:デフォルトの名無しさん [2009/07/07(火) 19:52:53 ]
>>742 g++: p11.cpp: No such file or directory
>g++: no input files   です。
>

744 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 19:56:43 ]
>>743
ばっちりインストールされてるじゃねーかw



745 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 19:57:03 ]
>>743
which g++
とでもしてろよwwwww

746 名前:デフォルトの名無しさん [2009/07/07(火) 19:57:41 ]
↑間違えました。

747 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 20:01:47 ]
[1] 授業単元:
コンパイラの構成
[2] 問題文(含コード&リンク):
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9696.txt
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
C(yacc、lex)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
7月14日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
前回も>>204で助けていただいたのですが、yaccとlexの問題です。
スレ違いかもしれませんがどなたかよろしくお願いします。

748 名前:デフォルトの名無しさん [2009/07/07(火) 20:13:40 ]
>>744 >>745 そうなんですか?W

とりあえず>>686を参考にどうにかしてみます。
どうにもならなかったらまた来させて下さい…

長々とお付き合いありがとうございました!

749 名前:デフォルトの名無しさん [2009/07/07(火) 21:07:31 ]

[1] 授業単元:C言語
[2] 問題文:配列を用いた計算機のプログラムを作成してください。
計算は前から順に行われていく。
入力される数値の個数は最大でも20個としてください。

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Visual Studio 2008
 [3.3] 言語:C言語

[4] 期限:2009年7月12日
[5] その他:特になし
よろしくおねがいします

750 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 21:09:52 ]
>>706
/*Q1*/
#include <stdio.h>
int main() {
FILE *fp_in, *fp_out; char fname[256], key, buf;
printf("ファイルを暗号化します!\n\n");
printf("入力ファイル名は:"); scanf("%s", fname); fflush(stdin);
if ((fp_in = fopen(fname, "rb")) == NULL) return 1;
printf("出力ファイル名は:"); scanf("%s", fname); fflush(stdin);
if ((fp_out = fopen(fname, "wb")) == NULL) return 1;
printf("暗号化のキー文字は:"); key = fgetc(stdin);
while (fread(&buf, sizeof(char), 1, fp_in) == 1) {
buf = buf ^ key; fwrite(&buf, sizeof(char), 1, fp_out);
}
printf("暗号化が完了しました!\n");
fclose(fp_in); fclose(fp_out);
return 0;
}
/*Q2*/
#include <stdio.h>
void rotate(unsigned char *a) {*a = (*a) << 1 | (*a) >> 7;}
int main() {
int i, k, x; unsigned char a;
printf("1〜255の整数を入力 : "); scanf("%d", &x);
a = x;
for (i = 1; i <= 16; i++) {
rotate(&a);
printf("%2d-th shift: %3d ", i, a);
for (k = 7; k >= 0; k--) {printf("%d", (a & (1<<k)) >> k);} printf("\n");
}
return 0;
}

751 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 21:15:24 ]
>>706
/*Q3*/
#include <stdio.h>
#include <stdlib.h>
void itoa_r(int n, char *str);
enum {MAX = 100};
main() {
int n;
char str[MAX];
while (1) {
int i;
for (i = 0; i < MAX; i++) str[i] = '\0'; // 追加
printf("\n整数を入力して下さい(終了 = 0):");
scanf("%d", &n);
if (n == 0) break;
itoa_r(n, str);
printf("文字列に変換すると %s です\n", str);
}
}
void itoa_r(int n, char *str)
{
if (n < 0) {
*str = '-';
itoa_r(-n, str + 1);
} else if (n != 0) {
int m = n, d = 1;
while (m /= 10) d++;
*(str + d - 1) = '0' + (n % 10);
itoa_r(n / 10, str);
}
}

752 名前:デフォルトの名無しさん [2009/07/07(火) 21:58:55 ]
[1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):


C++言語を使ってスタックを実現するクラスを定義して,その実行を確認するプログラム(main関数)を書く。

クラス名はstackとする。

要素のデータの型はintとする。
格納できる要素の最大数は10とする。
公開されているインターフェースは下記のものとする。

void push(int data);
int pop();

初期設定は,以下のいずれかによって行う。
(1) クラスのコンストラクタ(constructor)の機能を用いる。
(2) 初期設定用のインターフェース(init)を定義し,スタックを使用する前に,initを呼び出す。

機能確認のためのインターフェース(たとえばスタック内のデータを表示させる)を追加してもよい。

上記の仕様を満たさない(インターフェース名が上記と一致しない等)プログラムは評価の対象としない。

#入出力はprintfを用いること。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio 2008
 [3.3] 言語: C++
[4] 期限: 2009年7月10日まで
よろしくおねがいします

753 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 22:44:39 ]
>>752
>#入出力はprintfを用いること。
入力もprintfを使わなきゃダメなの?

754 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 22:54:15 ]
>>752
#include <cstdio>
const int MAX = 10;

class stack {
int *data_;
int n;
public:
stack() { data_ = new int[MAX]; }
~stack() { delete data_; }
void init() { n = 0; }
void push(int data) { if (0 <= n && n < MAX) data_[n++] = data; }
int pop() { if (0 <= n && n < MAX) return data_[n--]; }
void print() { for (int i = 0; i < n; ++i) printf("%d\n", data_[i]); }
};

int main()
{
stack s;
s.init();
s.push(5); s.push(-8); s.push(2); s.print();
s.pop(); s.print();
return 0;
}



755 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:04:34 ]
>>753
とつっこむあなたはprintfで入力ができるんですか?

756 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:25:39 ]
>>752
チェック用の関数と例外処理でcoutを使ってる。
だめそうなら、そこをprintfに書き換えて。

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9699.txt

757 名前:デフォルトの名無しさん [2009/07/07(火) 23:28:24 ]
【質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク): 二次元配列を使って以下のファイルを読み込み、同じように表示しなさい。
 【test.dat】
  ** ** **
  ** ** **
  ** ** **

ポインタを宣言;
データを宣言;
ポインタ=fopen("test.dat",r);

if(ポインタ == NULL) return;

for(i=0; i<3; i++){
for(j=0; j<3; j++){
fscanf(ポインタ,"%d"&sub[i][j]); }}

/* 此処の printf() がどうしてもできません。ご協力お願い致します。 */

fclose(ポインタ);

[3] 環境
 [3.1] Windows
 [3.2] Visual Studio
 [3.3] 言語: C++
[4] 期限:2009年7月8日 09:00まで
[5] その他の制限:特にありませんが、理解したいので比較的簡単なものでお願い致します。

758 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:33:26 ]
>>757
test.datの内容それであってる?整数が3行3列=9個あるんじゃないのか?

759 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:37:20 ]
>>757
"**"は整数なんじゃないかとエスパー

#include <stdio.h>

int main(void)
{
FILE *fp = fopen("test.dat", "r");
int sub[3][3];
int i, j;

if (fp == NULL) return 1;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
fscanf(fp, "%d", &sub[i][j]);

for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++)
printf(" %d", sub[i][j]);
printf("\n");
}
fclose(fp);
return 0;
}

760 名前:757 [2009/07/07(火) 23:39:56 ]
>>758さま

すみません間違えていました;;
指摘していただいて確認したところ、
【test.dat】
** ** **
** ** **
** ** **
** ** **
でした。
そうなると、
for(i=0; i<4; i++){
for(j=0; j<3; j++){
fscanf(ポインタ,"%d"&sub[i][j]); }
}
になると思います・・・すみませんでした><



761 名前:757 [2009/07/07(火) 23:43:19 ]
>>759さま
あ!そういう意味でしたか・・・すみません、おっしゃるとおりです!
しかも早急にご回答ありがとうございます!!
printf()は普通に書けばよかったんですね・・・なるほど。

>>758さま
>>759さま
お二方、ありがとうございました。

762 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 00:19:10 ]
[1] 授業単元: 情報処理T
[2] 問題文: 乗算合同法で整数乱数を生成.。
区間(0.1)の一様にして、1以上、ある特定の整数の乱数を生成する。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: TurboC
[3.3] 言語: C
[4] 期限: 2009年7月20日00:00まで
[5] その他の制限: #include <stdio.h>で始まるようにお願いいたします。

よろしくお願いします。

763 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 02:15:09 ]
>>624で質問し、>>677で答えていただいた者ですが、
プログラムにコメント文も付けていただけますでしょうか?

764 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 03:19:26 ]
[1] 授業単元:プログラミング入門
[2] 問題文(含コード&リンク):
問1:フィボナッチ数列を23番目まで計算して配列fibに格納した後、キーボードから何番目かを指定して表示するプログラムを作成せよ。
  要素を表示する処理は何回も繰り返し行えるようにし、キーボードから1〜23以外の数値が入力されたら終了する。
  実行例 数の入力:2
        fib[2]:1
        数の入力:23
        fib[23]:28657
        数の入力:24
        終了

問2:(1)キーボードから半角英数で文字列を2つ入力し、これを比較して同じか否かを判定するプログラムを作成せよ。
   実行例 文字列1:ABC               文字列1:ABc
      文字列2:ABC               文字列2:ABC
      2つの文字列は同じです         2つの文字列は違います  
   
(2)(1)のプログラムを、strcmpを使って書き換えなさい。

問3:1週間の売り上げ一覧を表示するプログラムを作成せよ。
   実行例  野菜の1週間の売り上げた合計数量と合計金額 
                                  合計  合計
        種類 単価 月 火 水 木 金 土 日 数量  金額
        レタス 150 50 55 60 65 70 75 80 455  68250
        トマト  50 20 25 30 35 40 45 50 245  12250
        もやし  20 10 15 20 25 30 35 40 175  3500
        ナスビ  40 5  10 15 20 25 30 35 140  5600 
[3] 環境
 [3.1] OS:(Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2009/7/9
[5] その他の制限: C言語の基本くらいしかやっていません。



765 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 08:50:32 ]
[1] 授業単元: 数値計算プログラミング
[2] 問題文(含コード&リンク): (1)√57を求めよ (2)三乗根の7を求めよ
               (3)f(x)=3x^3+2x^2+5x-15=0の解を求める
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C++
[4] 期限: ([2009年07月10日まで]
[5] その他の制限:ニュートン法を用いる 初期値 x0=1
お願いします



766 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 09:24:58 ]
>>764
問1
#include <stdio.h>

#define N 23

int main()
{
    int fib[N + 1], i, n;

    fib[0] = 0, fib[1] = 1;
    for(i = 2; i <= N; i++)
        fib[i] = fib[i - 2] + fib[i - 1];

    while(1){
        printf("数の入力:");
        scanf("%d", &n);
        if(n < 1 || n > N) break;
        printf("fib[%d]:%d\n", n, fib[n]);
    }
    printf("終了\n");
    return 0;
}






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<375KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef