C/C++の宿題を片付け ..
21:前852
07/06/24 10:43:05
URLリンク(kansai2channeler.hp.infoseek.co.jp)
表示もうまく出るようになったのですが
出力結果を見るとソートがうまくいっていないような感じです。
(ちゃんと合計点降順になっていません)
もともとクイックソートは昇順で作っていたので、
条件分岐を逆にしただけなのですが、
これが原因でしょうか?(コメント行は書き換えてないです。)
22:デフォルトの名無しさん
07/06/24 12:11:26
>>7
やってみたが解なしになってしまった。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
なんか間違ってんのかな。
23:デフォルトの名無しさん
07/06/24 12:46:15
>>7
幅優先むずいな
24:984
07/06/24 13:01:15
>>21
quick()の再帰呼出しを、whileブロックの外に出す。
quick_sub()もそうだな。
input()の
while(fgets(buf,sizeof(buf),fin) > 0){ を
while(fgets(buf,sizeof(buf),fin) != NULL){ に訂正してくれ
25:デフォルトの名無しさん
07/06/24 13:22:29
[1] 授業単元:
[2] 問題文(含コード&リンク):
2次方程式
ax^2 + bx + c = 0
は,判別式
Δ^2 = b^2 - 4ac
により,(a)2つの実数解をもつ,(b)1つの実数解(重解)をもつ,(c)2つの虚数解をもつ,の3つの場合に分けられる.
3つの正整数a,b,cを引数とし,実数値sqrt(b2-4ac)を戻り値とし,b2-4acが負の場合はエラーを示す値を戻り値とするユーザ定義関数delta()を作成せよ.
作成したユーザ定義関数を用いて,3つの正整数a,b,cをキーボードから入力し,2つの実数解を表示するプログラムを作成せよ.
ただし,重解をもつ場合と虚数解をもつ場合はその旨表示したうえで,再度a,b,cの入力を促すようにし,2つの実数解をもつ方程式が入力されるまで繰り返すようにすること.
[実行結果]
3つの係数を入力して: 1 2 1
重解を持つよ!入力し直して。
3つの係数を入力して: 1 1 1
虚数解を持つよ!入力し直して。
3つの係数を入力して: 2 9 3
2x^2 + 9x + 3 = 0 の2つの実数解は
x = -0.362541 と x = -4.137459
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC
[3.3] 言語: C
[4] 期限: 2007年6月29日まで
[5] その他の制限: ポインタは禁止。制御構文はfor・while・ifのみ。break・continueは禁止。キーボードからの入力はscanfで拾うこと。
26:22
07/06/24 13:55:53
>>7
うーん。条件もう一度確認してみて。
> 移す側がいっぱいになってとき
じゃなくて、「移される側がいっぱいになるとき」
と読みかえると、解が出るんだが。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
canmove() の中の
#if 0 を #if 1 に変更すると、>>7 に書いてある通りの動作になるが、
解なしになる。
main() の中の #if を同様に変更すると、探索の途中経過を表示する。
27:デフォルトの名無しさん
07/06/24 14:48:59
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):”rand1000.dat”というデータの個数nとその個数分の整数データが保存されているファイルがある
(URLリンク(kansai2channeler.hp.infoseek.co.jp))
次の手順で動作するプログラムheapsort.cを作成し,その動作を確認せよ.
まずファイルから保存されているデータ数nを読み込む.
データを1つ読み込み,ヒープを構成する.
これをn回繰り返し,その度にヒープを構成する.
すべてのデータを挿入し終ったらヒープが完成するので,データを木構造がわかるようにディスプレイ上に表示する.
次に,deletemax()関数をn回呼び出し,ソート処理を進める.
最後に,整列されたデータをディスプレイ上に表示しプログラムを終了する.
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio 2005
[3.3] 言語: C
[4] 期限: 6月26日 夜まで
[5] その他の制限:木構造のディスプレイ表示方法は各自に任せる.
結果がソートされていることをそれぞれのデータについて毎回確認すること.
どなたか解る方、解いていただけるとありがたいです。
28:デフォルトの名無しさん
07/06/24 14:49:25
>>25
それ前スレに同じ問題あったぞ
回答は954かな
29:前852
07/06/24 14:54:02
>>24
コンパイルが通らなくなりました。
In file included from /usr/include/stdlib.h:33,
from seiseki.c:19:
/UNIONFS/usr/bin/../lib/gcc/i486-linux-gnu/4.0.4/include/stddef.h:214: error: syntax error before 'typedef'
30:デフォルトの名無しさん
07/06/24 15:10:00
>>6
斜め読みしただけだが。
search1()
> while(p[i] != ' '){
→ while(1) { に。
search2()も同様の変更。
31:前852
07/06/24 15:16:17
quickの再起をwhileの外にした時点で実行すると
処理中 を表示する前に[SegmentationFault]
!= NULLにしても同上
です。
32:デフォルトの名無しさん
07/06/24 15:33:46
>>26
多分>>7のタイプミスと思われ
33:984
07/06/24 15:34:52
>>31
>条件分岐を逆にしただけなのですが
この修正が怪しい。
quick()内の判定条件を見直せ。
3,4件の小さなデータを使い、
処理を追いかけてみるといい。
これは自力でできると思う。
34:前852
07/06/24 15:44:08
>>33
> < を逆にして < > にすべきところを <= >= にしていたのが原因だったみたいです。
無事完成しました。
今までご協力してくださったみなさま、
本当にありがとうございます!
35:984
07/06/24 15:59:27
ソートのロジックは何か変だなと思います。
何かを参考にしたのでしょうか。
一度見直した方が良いようです。
36:前852
07/06/24 15:59:48
//データを構造体配列に取り込んでいく
while(fgets(buf,sizeof(buf),fin)>0){
p = buf;
field[0] = buf;
j = 1;
if(buf[strlen(buf)-1] == '\n'){
buf[strlen(buf)-1] = 0;
}
while(*p != 0){
if(*p == ','){
*p = 0;
field[j++] = p+1;
}
p++;
}
ここの流れ(挙動?)がよく分からないのですがどういう感じでよみこんでいってるんでしょうか?
37:前852
07/06/24 16:01:01
ソートですが、書籍に載っていた物をそのまま使い昇順ソートを作った物を
大小の判別っぽいところを逆にして降順ソートにしました。
38:デフォルトの名無しさん
07/06/24 16:06:14
あんた甘えすぎ
39:前852
07/06/24 16:08:36
>>38
うっせーよ、カス
40:デフォルトの名無しさん
07/06/24 16:21:08
甘えん坊にカスと言われた>>38、可哀想っす
>>36 きっとね、いい感じに読み込んでると思うよ、テヘ
41:前852
07/06/24 16:35:51
39は偽物ですよ
42:デフォルトの名無しさん
07/06/24 16:42:36
以下のプログラムを書いたんですが
データ数が多いせいかSystem.StackOverflowException'のハンドルされていない例外
となってしまいます。 解決方法を教えてください。 お願いします。
/*畳み込み和を求めるプログラム*/
#include <stdio.h>
#define FMAX 1000000 /*関数f(τ)のデータ数 「100万個」 */
#define GMAX 1000000
main()
{
int f[FMAX]; /*関数f(τ)*/
int g[GMAX]; /*関数g(τ)*/
int sum[FMAX+GMAX-1] = {0}; /*畳み込みの結果を入れる変数*/
int i,t;
/*関数f,gの初期値の代入(全て1)*/
for (i=0;i<FMAX;i++ )
f[i]=1;
for (i=0;i<GMAX;i++ )
g[i]=1;
/*畳み込み和の計算*/
for (t=0; t< FMAX+GMAX-1; t++){
for( i=0 ; i<GMAX; i++){
if ( t-i >= 0 && t-i < FMAX)
sum[t] += f[t-i]*g[i];
}
}
/*計算結果の表示*/
for (t=0 ; t<FMAX+GMAX-1; t++)
printf("%d,",sum[t]);
}
43:デフォルトの名無しさん
07/06/24 16:46:33
>>42
一気にやろうとしないで小分けにすれば?
44:デフォルトの名無しさん
07/06/24 16:46:55
配列宣言の頭に static をつける
45:ぴっころ
07/06/24 16:48:52
初めまして。これから度々お世話になるかもしれませんが宜しくお願いします。
今はC言語で0をある数で割るとどうなるのかが分かりません。
ある数を0で割るとエラーになる事は調べて分かったのですが。
46:デフォルトの名無しさん
07/06/24 16:50:57
>>45
いや、0だと思うんだが・・・
47:デフォルトの名無しさん
07/06/24 16:52:05
c言語に限らず0だろ
48:デフォルトの名無しさん
07/06/24 16:54:17
>>45は0ではなく'0'を割ったんだろ
49:デフォルトの名無しさん
07/06/24 17:00:21
>>45
グダグダ言ってないで、無料のCコンパイラ拾ってきてやってみろ
頭で考えたり、誰かに聞くよりより、実際にやってみた方が身に付く
少数点に','使う奴がいたり、0をある数字で割るとどうなりますかと
聞く奴がいたり、この国の教育はどうなってるんだよ。
50:デフォルトの名無しさん
07/06/24 17:04:21
小数点にカンマを使うのは、ヨーロッパのどこかだったような
51:ぴっころ
07/06/24 17:05:24
>>49
どんなコードを書けば、y = x / 0; のyの値を確認できますか?
エラーで終わってしまうんです。すみませんが教えてくださいお願いします。
52:デフォルトの名無しさん
07/06/24 17:08:12
自動配線ツールをCで書こうと思ってるんですけど。
アルゴリズムはmazeをベースで。
書くときに参考になるソースコードとかってどっかに落ちてるものなんでしょうか?
アルゴリズム分かっても、書くのが素人なので、どれ位の規模(行数)になるかとか、必要な関数が予想つきません。
サンプルなどがあればと思って質問させていただきました。
誘導していただければ幸いです。
53:デフォルトの名無しさん
07/06/24 17:09:53
>>51
その処理は未定義。どうしても確認したければ
int x = 3;
int y;
x -= 3;
y = 3 / x;
printf( "%d", y );
ちなみに、VC++6.0では実行時エラー。
54:デフォルトの名無しさん
07/06/24 17:12:57
>>52
スレ違い
55:ぴっころ
07/06/24 17:14:14
確かに。
次に来た時にはもう少しマシな質問をしたいと思いますので、よろしく
お願いします。
ありがとうございました。
56:ぴっころ
07/06/24 17:19:42
>>53
確認有難うございます。やっぱりエラーでますか
>>49 の
>グダグダ言ってないで、無料のCコンパイラ拾ってきてやってみろ
から、確認する方法がある(少なくとも>>49サンは知ってる)と思ったのですが..
57:デフォルトの名無しさん
07/06/24 17:26:34
もうくんな
58:984
07/06/24 17:28:17
>>36
fgetsはファイルから1行ずつ読み込む。読めなくなったらNULLを返す。
if...でしていることは、行末の改行コードを取り除く事。
内側のwhileでは、行の先頭から','を見つけ、文字列の分割をしている。
処理を終わると、bufの中はNULLで区切られた複数の文字列となり、
ポインタ配列には各文字列の先頭が格納される。
59:デフォルトの名無しさん
07/06/24 17:28:34
>>56
エラーが出るって事で確認した事にはならんのか?
60:42
07/06/24 17:33:36
>>44
教えていただいたように
static int sum[FMAX+GMAX-1] ;
としてみたら、動作しました。(よく分かってませんがw)
ありがとうございましたー
61:デフォルトの名無しさん
07/06/24 17:36:37
>>56
0除算時の動作は未定義。よって、どんな動作をしても規格上問題ない。
プログラムがランタイムエラーになっても、演算結果が0になっても、そこで無限ループに陥ってもOK。
URLリンク(www.st.rim.or.jp)
宿題スレよりこっちのほうがいいと思う。
C言語なら俺に聞け(入門篇) Part 14
スレリンク(tech板)
くだすれC言語(初心者用) Part.2
スレリンク(tech板)
62:前852
07/06/24 17:38:03
>>58
ということは、fgetsのところで処理をすれば、
1行がどれくらいの文字数あるかとかも判別できると言うことですか?
63:ぴっころ
07/06/24 17:41:08
printf("%d\n",data) でdata=-600の場合に-600と出力されるのでしょうか?
実際にやってみろと言われそうですが、コンパイラのダウンロードの仕方
とかが良く分からないもので
64:デフォルトの名無しさん
07/06/24 17:42:02
帰れ
65:984
07/06/24 17:42:47
>>62
そういう処理を加えれば出来るでしょうが。
文字数が想定以上に長いときの事も考慮する必要がありますね。
66:デフォルトの名無しさん
07/06/24 17:43:41
>>63
コンパイラのダウンロードがわからないならまずはそこから試したほうがいい。
ネットでちょっと検索すれば導入をわかりやすく解説しているサイトなんて山ほどある。
手コーディングが悪いとは言わんが、時代にあってないと思う。
あ、あと質問の答えはそのとおり。-600って表示される。
けどココは宿題スレだからすれ違い。
67:ぴっころ
07/06/24 17:43:58
>>59
エラーだよっていうのは >>45で聞く前から確認済みです。
>>45の調べた=>自分でコードを書いて調べてみたということです。
それを踏まえてココで聞いたのでが..そしたら>>49のレスです
68:デフォルトの名無しさん
07/06/24 17:50:26
手コーディングって、コードの自動生成と比べて、手作業でソースを書いていく作業という意味でOK?
69:デフォルトの名無しさん
07/06/24 17:51:06
>>63 ぴっころ ココは宿題回答スレだから
C言語については、こっちで聞け!
スレリンク(tech板)l50
70:デフォルトの名無しさん
07/06/24 17:52:29
>>68
ごめん、そういうつもりで手コーディングって言ったんじゃないw
紙とペンでコーディング、デバッグとかをするって意味で使った。
わかりづらい上に時代遅れでスマソ
71:デフォルトの名無しさん
07/06/24 17:53:22
あえて言うなら、机上コーディングか
72:ぴっころ
07/06/24 17:55:30
スレ住民の方々お騒がせしてすみません。
紹介して貰ったスレに移ります。
応えてくれた方々ありがとうございました。
失礼します。
73:デフォルトの名無しさん
07/06/24 17:58:01
個人的には「ペーパーコーディング」と「机上デバッグ」
74:デフォルトの名無しさん
07/06/24 18:10:57
手コーディングの“手”が紛らわしいな
75:デフォルトの名無しさん
07/06/24 18:14:23
若い人はハンドアセンブルなんて知らないだろな〜
76:デフォルトの名無しさん
07/06/24 18:32:29
知らないけど、聞くだけでもめんどくさそうだなw
77:デフォルトの名無しさん
07/06/24 18:38:28
簡単だよ、ニモニック表が頭に入っていれば。
多少の暗算も必要になったりはするけどね。
78:デフォルトの名無しさん
07/06/24 18:41:52
>>27
表示が超手抜きだが(配列をそのままベタで表示するだけ)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
79:デフォルトの名無しさん
07/06/24 18:56:25
[1] 授業単元:C言語
[2] 問題文:次の計算を行うプログラムを作成せよ。
C=B/X
Bは三行三列の行列
B 5 -2 2
2 3 1
1 2 2
X=3
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 2007年6月24日pm:11:00
です。よろしくおねがいします。
80:デフォルトの名無しさん
07/06/24 19:02:56
初めて1ヶ月少々なのですが自分で数当てゲームを作ってみました
一応動作し、正解の数もランダムで取得できるようにはなっていますが
ここはこうしたらよい、とかあったらありがたいな、と思い
カキコしてみました。不具合、というか汚い書き方だとは思いますがヨロシクお願いします。
長いので次のレスで書きます
81:デフォルトの名無しさん
07/06/24 19:10:24
>>1を読め。
82:デフォルトの名無しさん
07/06/24 19:10:35
>>80
ロダにUp汁
83:デフォルトの名無しさん
07/06/24 19:20:44
>>80
次のレスまだ〜〜〜?もしかして、次の スレ ってオチ?w
84:依頼者
07/06/24 19:31:12
[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
変数xのyビット目の値を返す関数int bit_test(int x,int y)の作成。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio.net
[3.3] 言語:C++
[4] 期限: 07年6月25日まで
[5] その他の制限:特になし
演算子の問題ですがまったくわかりません。どなたかお願いします。
85:デフォルトの名無しさん
07/06/24 19:34:22
前スレにも他のスレにもあったな。
>>84
int bit_clear(int x,int y){return x&~(1<<y);}
int bit_test(int x,int y){return (x&(1<<y))>>y;}
86:42
07/06/24 19:46:42
>>44さんに教えて頂いたとおりで、動いたのですが。
配列宣言の頭にstaticをつける意味が分からなかったので、教えていただきたいです。
そもそも、なんでエラーになってるのかも分からない始末ですorz
少し調べたんですが、malloc というのを使えば領域確保?できるんでしょうか?
87:デフォルトの名無しさん
07/06/24 19:49:45
[1] 授業単元: 2年プログラミング実習
[2] 問題文(含コード&リンク): 電卓計算のための、数式変換プログラムを作成せよ。
逆ポーランド法へと変換し、それを要素ごと配列へと格納せよ。
[3] 環境
[3.1] OS: Windows xp
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 6.25
[5] その他の制限:
最終的に、配列に文字型で式が格納されていること。
演算子の判別にはswitchを用いて、関数を作成する事。
switchの部分がわからんのだが、多分+なら1、-なら2と返す関数を作れって事だとおも。
最初の数式はargvは使わず、プロンプトメッセージの後にfgetsで読み込んでます。
88:デフォルトの名無しさん
07/06/24 20:08:35
>>79
#include <stdio.h>
int main(void)
{
int i,j,X=3,c[3][3]={0};
int b[3][3]={{5,-2,2},
{2, 3,1},
{1, 2,2}};
for(i=0;i<3;i++){
for(j=0;j<3;j++){
c[i][j]=b[i][j];
}
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%3d/%d",c[i][j],X);
}
printf("\n");
}
return 0;
}
私も初心者なんですが、書いてみました。
問題の意図にそくして無いかも。
それに配列cは用意する必要は無い気がするんだけどね…。
89:デフォルトの名無しさん
07/06/24 20:18:49
[1] 授業単元:プログラミング技術3
[2] 問題文(含コード&リンク):
/*(1)date.txtというファイルを用意し、次のプログラムを実行せよ。
(2)このプログラムを書き換え、ファイル名をコマンドラインから指定出来るようにせよ。*/
#include<stdio.h>
#include<stdlib.h>
int main(void){
char c;
char filename[] = "date.txt";//ファイル名
FILE *fp; //ファイルポインタ
//ファイル「読み込み」で開く
if ((fp == fopen(filename "r")) == NULL){
printf("File dose not exist. \n");
exit(1);
}
//ここからファイルを読み込んで処理
//例 一文字入力し表示
wile((c=getc(fp))!=EOF){
printf("%d\n" , c);
}
//開いたファイルを閉じる
fclose(fp);
}
[EOF]
↑
全くと言って分かりません。完全にお手上げです。
少々の解説も付加してくださると助かります。
よろしくお願いします。
90:デフォルトの名無しさん
07/06/24 20:20:25
>>87
switchの部分は↓的なことだと思う。
switch( ope ) {
case '+':
iAns += iNum;
break;
case '-':
iAns -= iNum;
break;
(以下略)
91:89
07/06/24 20:20:27
続きです。
[3] 環境
[3.1] OS:LINUX
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C++
[4] 期限: 07年6月26日まで
[5] その他の制限:ポインタを少々習った程度です。
92:デフォルトの名無しさん
07/06/24 20:20:29
>>87
前スレの回答ではお気に召さなかったということかな?
それっぽく直したよ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
93:デフォルトの名無しさん
07/06/24 20:25:42
>>86
配列は領域を連続で確保できなければいけない。
mallocを使ったところで、確保できる保証は無い。
staticをつけた場合は、確保するために使用する領域が異なるため上手く行っているだけ。
(staticウンヌン部分について自信なし。詳しい人補足plz)
94:デフォルトの名無しさん
07/06/24 20:28:17
>>93
取り敢えず間違ってはいないよ。
95:デフォルトの名無しさん
07/06/24 20:29:14
>>89 変更部分だけ
int main(int argc, char *argv[]) {
char c;
FILE *fp;
if(argc<2) {
printf("ファイル名の指定がねぇ〜ぞゴルァ!\n");
return 1;
}
if((fp=fopen(argv[1],"r"))==NULL){
96:デフォルトの名無しさん
07/06/24 20:52:01
>>97
・・・?前スレ?重複質問だったのか?
とりあえず見てみた。マジ有難い。
提出用に少し変更してみて、不明な所があれば聞くかも知れないが、大丈夫かな。
97:デフォルトの名無しさん
07/06/24 20:52:16
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
以下のコマンドを実行可能な名簿管理システムを作成せよ。
1. メンバの追加
2. メンバの削除
3. メンバリストを名前順(アルファベット昇順)で表示
4. メンバリストのファイル出力
5. 引数として"-f ファイルパス"を指定することによるメンバ初期データの読込
メンバ情報としては、最低限、名前と学生番号を持つこと。システムの拡張は自由に行ってよい。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限:無期限
[5] その他の制限:構造体、ポインタがつかえるとよい
どうかよろしくおねがいします
98:デフォルトの名無しさん
07/06/24 20:52:40
>>96
>>92で
99:89
07/06/24 20:54:06
>>95
レスどうもです。
え〜と、main関数内の変更とファイルポインタの下にif(argc<2) { を
printfの下にリターン文を、書けって事でいいんですか?
また、if((fp=fopen(argv[1],"r"))==NULL){ は
return1
exit(1);
}
if((fp=fopen(argv[1],"r"))==NULL){
のようにすればいいのでしょうか?
100: ◆sJh8mwqDUo
07/06/24 20:58:03
[1] 授業単元: C言語入門(配列・関数)
[2] 問題文:
1. 0からN-1の間の擬似乱数整数を返す関数(myrandと名前をつける)を作成しなさい。
2. myrandでm×N個の擬似乱数を発生させて、出現しなかった整数の個数を、N個発生させる毎に求めなさい。
ただし、Nは1000以上に#defineし、mは実行時にキー入力するものとする。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 6月27日夜
[5] その他の制限:
main関数にすべての処理を書くこともできるが、そうしないで関数に分割すること。
乱数発生関数の初期化を忘れないこと。
上記の通りです。どなたかできる方、よろしくお願いします。
101:デフォルトの名無しさん
07/06/24 21:03:10
101
102:デフォルトの名無しさん
07/06/24 21:11:30
>>100
関数に分割するって、どこをすればいい?
無理矢理関数にしたほうがいいか?
URLリンク(kansai2channeler.hp.infoseek.co.jp)
103: ◆sJh8mwqDUo
07/06/24 21:15:24
>>102
レスありがとうございます。
用はmyrandの関数をちゃんと作れって事ですかね。
実行結果がよければOKなのでどう解釈してもいいと思います。
104:デフォルトの名無しさん
07/06/24 21:26:37
>>96
うん重複だけど、注文のつきかたで、てっきし同じ人かと思った
質問は別にいいけど、あんまりしつこくはしないでね
めんどくさいからw
105:デフォルトの名無しさん
07/06/24 22:02:39
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):
右利きの奴が左曲がりであることを検証するプログラムを作成せよ。
[3] 環境
[3.1] OS: (Windows/Linux/等々)WinXP
[3.2] コンパイラ名とバージョン: gcc 3.4 or VC5以降
[3.3] 言語: C/C++/どちらでも可
[4] 期限: 6/24中
[5] その他の制限:使用可能なライブラリ stdio.h string.h stdlib.h memory.h
106:デフォルトの名無しさん
07/06/24 22:12:08
[1] 授業単元: 複雑学
[2] 問題文(含コード&リンク):
次のH´enon 写像(エノン写像) のボックスカウンティング次元を考える.
(Xn,Yn)→(Xn+1,Yn+1)=(Yn+1-a*X^2*n, b*Xn) :a = 1.4, b = 0.3 に固定する.
10×10分割したマス目内にアトラクタの点が入っているかどうか調べる.点が入っているマス目の数を数えよ
サンプルプログラム URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 25日正午
[5] その他の制限: 特にナシ
107:デフォルトの名無しさん
07/06/24 22:14:34
> ところどころ■で隠してあります
どうでもいいけど
ちょっとエロいな
108:デフォルトの名無しさん
07/06/24 22:17:13
[1] 授業単元: 複雑学
[2] 問題文(含コード&リンク):
次のH´enon 写像(エノン写像) のボックスカウンティング次元を考える.
(Xn,Yn)→(Xn+1,Yn+1)=(Yn+1-a*X^2*n, b*Xn) :a = 1.4, b = 0.3 に固定する.
10×10分割したマス目内にアトラクタの点が入っているかどうか調べる.点が入っているマス目の数を数えよ
サンプルプログラム URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 25日正午
[5] その他の制限: 特にナシ
よろしくお願いします。
109:デフォルトの名無しさん
07/06/24 22:21:36
>>107 でしょww お願いします。
110:デフォルトの名無しさん
07/06/24 22:35:17
#include <stdio.h>
main()
{
FILE *fpin,*fpout;
char c;
int i,j;
int B[3][3];
fpin = fopen("in-1.txt","r");
fpout = fopen("out-1.txt","w");
while(fscanf(fpin,"%c",&c)!=EOF)
if(c == 'B')
{for(i=0;i<3;i++)
{for(j=0;j<3;j++)
{fscanf(fpin, "%d", &B[i][j]);
}}}
for (i=0; i<3; i++) {
for (j=0; j<3; j++)
fprintf(fpout,"%3d",B[i][j]/3);
fprintf(fpout,"\n");
}
fclose(fpin);
fclose(fpout);
return(0);
}
三行三列行列を3で割るというものなんですが、上のソースでやってもint型なんで
少数点以下がでません。float型にしてみても、うまく答えがでません。どこを直せば
いいでしょうか。
B 5 -2 2
2 3 1
1 2 2
です。
111:89
07/06/24 22:44:22
89です。
>>95氏のアドバイスを参考にやってみましたが、上手く動作しません。
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]){
char c;
char filename[] = "date.txt";//ファイル名
FILE *fp; //ファイルポインタ
if(argc<2) {
//ファイル「読み込み」で開く
if((fp=fopen(argv[1],"r"))==NULL){
printf("File dose not exist. \n");
return 1;
exit(1);
}
}
//ここからファイルを読み込んで処理
//例 一文字入力し表示
wile((c=getc(fp))!=EOF){
printf("%d\n" , c);
}
//開いたファイルを閉じる
fclose(fp);
}
[EOF]
何処が違うのでしょうか?
112:デフォルトの名無しさん
07/06/24 22:45:51
なんでおまえら、「うまくいきません」とか「うまく答えが出ません」とか、
糞の役にも立たない報告しかできないの? 無能なの?
113:89
07/06/24 22:49:58
smp3.c(17) : error C3872: '0x3000': この文字を識別子で使用することはできません
smp3.c(17) : error C3872: '0x3000': この文字を識別子で使用することはできません
smp3.c(17) : error C2065: ' ' : 定義されていない識別子です。
smp3.c(17) : error C2143: 構文エラー : ';' が '}' の前にありません。
smp3.c(21) : error C2143: 構文エラー : ';' が '{' の前にありません。
smp3.c(27) : error C3409: 空の属性ブロックは認められません。
smp3.c(27) : error C2143: 構文エラー : ']' が '(' の前にありません。
smp3.c(27) : error C2059: 構文エラー : '-'
smp3.c(27) : error C2059: 構文エラー : ')'
↑そまそ。こんな感じにエラーが出ます。
因みに、この確認はコマンドプロンプトで出したものです。
114:デフォルトの名無しさん
07/06/24 22:51:34
>>113
ソースに全角のスペース含まれてないか?
115:デフォルトの名無しさん
07/06/24 22:54:34
typo多過ぎだし、人間やめるといいよ。
116:デフォルトの名無しさん
07/06/24 22:55:12
wile → while
あとはわからん。
そもそもこのプログラム22行しかないのに、なんで27行目のエラーが出てるんだ?
117:89
07/06/24 22:58:15
>>114
全角のエラー修復できました。
smp3.c(21) : error C2143: 構文エラー : ';' が '{' の前にありません。
smp3.c(27) : error C3409: 空の属性ブロックは認められません。
smp3.c(27) : error C2143: 構文エラー : ']' が '(' の前にありません。
smp3.c(27) : error C2059: 構文エラー : '-'
smp3.c(27) : error C2059: 構文エラー : ')'
118:デフォルトの名無しさん
07/06/24 23:01:09
>>89
ほれ。
#include <stdio.h>
int main(int argc, char **argv)
{
int c;
if (argc > 1 && !freopen(argv[1], "r", stdin))
return perror(argv[1]), 1;
while ((c = getchar()) != EOF)
printf("%d\n", c);
return 0;
}
119:89
07/06/24 23:01:55
>>116
レスどうもです。
smp3.c(17) : error C2143: 構文エラー : ';' が '{' の前にありません。
smp3.c(23) : error C3409: 空の属性ブロックは認められません。
smp3.c(23) : error C2143: 構文エラー : ']' が '(' の前にありません。
smp3.c(23) : error C2059: 構文エラー : '-'
smp3.c(23) : error C2059: 構文エラー : ')'
また一つエラーが減りました。
問題文も含めた場合の最終行が27行目です。
今回は問題文を消しました。
120:デフォルトの名無しさん
07/06/24 23:03:39
まさかとはおもうが
[EOF] ← これもソースにタイプしてるのか?
121:デフォルトの名無しさん
07/06/24 23:06:24
>100
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000
int myrand(void)
{
return (int)(rand() / (RAND_MAX + 1.0) * N);
}
int main(void)
{
int i, j, m;
char check[N] = {0};
srand(time(NULL));
scanf("%d", &m);
for(i=0; i<m; i++) {
int cnt = 0;
for(j=0; j<N; j++) check[myrand()] = 1;
for(j=0; j<N; j++) if(!check[j]) cnt++;
printf("出現しなかった整数の個数:%d\n", cnt);
}
return 0;
}
122:デフォルトの名無しさん
07/06/24 23:13:23
>>110
- int B[3][3];
+ double B[3][3];
- fscanf(fpin, "%d", &B[i][j]);
+ fscanf(fpin, "%lf", &B[i][j]);
- fprintf(fpout, "%3d", B[i][j] / 3);
+ fprintf(fpout, "%g", B[i][j]/3);
とりあえずこんなところでどうよ。
123:デフォルトの名無しさん
07/06/24 23:27:56
>>122さん!
計算できました!ありがとうございます!
そこでまた質問で申しわけないんですが答えが
1.66667-0.6666670.666667
0.66666710.333333
0.3333330.6666670.666667
のように表示されてしまうんですが、1.66667と1とかの間にスペースを設けたいん
ですが何か手はありませんか?無知ですいません。
124:デフォルトの名無しさん
07/06/24 23:32:44
[1] 授業単元:プログラミング C
[2] 問題文(含コード&リンク): 以下のPADとプログラムを作成しなさい≪面白いプログラム≫
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語:C
[4] 期限: 6/25の9時まで
[5] その他の制限: switch文を習った後の課題です。
他の課題は終わらせましたが、どうしても面白いと思えるものを作ることが出来ませんorz
力を貸してください。お願いします。
125:デフォルトの名無しさん
07/06/24 23:50:54
>>123
- fprintf(fpout, "%g", B[i][j]/3);
+ fprintf(fpout, "%g ", B[i][j]/3);
これでおk
126:デフォルトの名無しさん
07/06/25 00:04:04
>>97
URLリンク(kansai2channeler.hp.infoseek.co.jp)
127:デフォルトの名無しさん
07/06/25 00:30:14
[1] 授業単元:プログラミングU
[2] 問題文リンク:URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C言語のみ
[4] 期限: 2007年06月26日AM01:00まで
[5] その他の制限: 特にないです。
自力ではどうしてもできませんでした。
どうかよろしくお願いします。
128:デフォルトの名無しさん
07/06/25 00:30:57
【質問テンプレ】
[1] 授業単元: プログラミング言語
[2] 問題文:
数値の列を入力し,それをリスト構造にデータを
格納せよ.その際,数値が大きさの順に並ぶよう
にせよ.
- 入力する数値の数を限定してもよい
- たとえば5個
• リストの内容を先頭から出力せよ.
- 結果として入力された数値の列が,大きさ順
に並び替えられて表示されることになる.
• リスト構成する要素(セル)はmalloc関数でヒー
プ領域から確保するものとする.
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio2005
[3.3] 言語:C++
[4] 期限:6月28日まで
[5] その他の制限:ポインタの練習です。一応、こんな感じらしいです。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
どなたかご教授お願いします
129:デフォルトの名無しさん
07/06/25 00:46:17
|
| ∧ ∧
|/ ヽ ./ .∧
| `、 / ∧
|  ̄ ̄ ̄ ヽ
| ̄ ̄月曜日 ̄ ̄ ̄ ̄)
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄.\
|ヽ-=・=-′ ヽ-=・=- /
|:: \___/ / やぁ・・・・
|::::::: \/ /
130:デフォルトの名無しさん
07/06/25 00:52:10
鬱入った。
寝る。
131:デフォルトの名無しさん
07/06/25 00:57:49
>>19
適当。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
132:デフォルトの名無しさん
07/06/25 01:33:09
>>125さん
できました!ありがとうございました!
133:デフォルトの名無しさん
07/06/25 02:53:58
>>131 ありがとうございました
134:デフォルトの名無しさん
07/06/25 03:06:59
[1] 授業単元:C++研究
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)(プログラム1)
URLリンク(kansai2channeler.hp.infoseek.co.jp)(プログラム2)
URLリンク(kansai2channeler.hp.infoseek.co.jp)(プログラム3)
URLリンク(kansai2channeler.hp.infoseek.co.jp)(プログラム4)
上記1〜4のプログラムを下記のように修正します。
クラス(設計図)部分を概要部分(ヘッダファイル)と実装部分(ソースファイルに分け)
そしてメイン部分も分け、4つのプログラムを新しく作り直しなさい。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:Visual studio.2005
[3.3] 言語: C++
[4] 期限: ([2007年6月26日12:00まで]
[5] その他の制限:特になし
どうかよろしくお願いします
135:デフォルトの名無しさん
07/06/25 03:17:42
>>134
単にソースをclass.cpp class.h main.cppとかってファイル作って
にコピペしまくるだけで終了しない?
136:デフォルトの名無しさん
07/06/25 03:51:42
>>124
これは難問だ
何をもって面白いとするかがわからんことには作りようがない
技術的には>>124は全然問題なさそうだから、こんなのはどうだ?
怪しいswitch文だが、ちゃんとコンパイルは通る
実行結果が予想できるかい?
プログラムの挙動的には面白いと思うんだが
int main(){
switch(1){
while(1){
case 0:
printf("0");
break;
default :
printf("default");
case 1:
printf("1");
}
}
return 0;
}
良い子はマネしないようにな
137:デフォルトの名無しさん
07/06/25 04:06:16
もう一つ怪しいswitch文
01default って出力されそうだけど、実行結果は case 1: のところで無限ループになる
int main(){
int i = 0;
switch(i){
while(1){
case 1:
printf("1");
i++;
continue;
case 0:
printf("0");
i++;
continue;
default :
printf("default");
break;
}
}
return 0;
}
138:デフォルトの名無しさん
07/06/25 04:10:19
[1] 授業単元: プログラミング基礎A
[2] 問題文(含コード&リンク):
n乗の数を求める関数を、作成しなさい。
◎以下を参考の事
・n乗値を求める関数
n乗値
数字iのn乗値を返す関数
関数定義 double myPow(double i, int n)
例1:i=1.2,n=3の場合,1.728になる
例2:i=1.2,n=-3の場合,0.5787[037]になる
例3:i=1.2,n=0の場合,1.0になる
正,0,負の3つの場合があることに注意
[3]
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual Studio .NET 2003
[3.3] 言語:C++
[4] 期限:2007年6月25日10時30分
[5] その他の制限:出来るだけ複雑ではなく簡単(初歩的)なものにすること。
よろしくおねがいします。
139:デフォルトの名無しさん
07/06/25 04:27:21
>>137
コンパイラ何?
もしかしてBCCじゃね?w
140:デフォルトの名無しさん
07/06/25 04:35:55
BCCでもよく見たら01111…ってなってた
てっきり11111…と怪しい動作するもんだと思った
BCCを疑ってごめんなさい。
141:デフォルトの名無しさん
07/06/25 05:37:21
>>137
こんなコードは出来ればごめん被りたいが、
「switchはラベルに飛ぶだけ」てのが良く分かる例かもね。
142:デフォルトの名無しさん
07/06/25 05:43:33
[1] 授業単元: 複雑学
[2] 問題文(含コード&リンク):
次のH´enon 写像(エノン写像) のボックスカウンティング次元を考える.
(Xn,Yn)→(Xn+1,Yn+1)=(Yn+1-a*X^2*n, b*Xn) :a = 1.4, b = 0.3 に固定する.
10×10分割したマス目内にアトラクタの点が入っているかどうか調べる.点が入っているマス目の数を数えよ
サンプルプログラム URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 25日正午
[5] その他の制限: プログラムをリザイレクションしてdatファイルにしてGNUPLOTでグラフを表示させる。
グラフ URLリンク(vista.jeez.jp)
よろしくお願いします。
143:デフォルトの名無しさん
07/06/25 07:23:55
>>138
double myPow(double i, int n)
{
double a=1.0;
if(n<0){
n=n*-1;
i=1/i;
}
if(n != 0){
while(n-->0) a*=i;
}
return a;
}
144:デフォルトの名無しさん
07/06/25 09:24:55
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 簡単な絵を書いて画面に出力しろ
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 無し
[5] その他の制限: printf();などの出力関数のみを使った場合はNGとする
145:124
07/06/25 10:02:36
>>136
2つもレスしていただいて、本当にありがとうございます。
早速試してみます。
教授の面白いというのはどうもお笑い系のようです。
関西出身のようで、講義に使うプログラムもがんばって笑いを誘おうとしていますので。
146:デフォルトの名無しさん
07/06/25 10:34:26
>>142
nS
hist[i][j]
printf("%f %f\n", x, y), hist[px][py]++;
147:デフォルトの名無しさん
07/06/25 10:56:51
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): テキストファイルを読み込み、A〜Zまでの文字がそれぞれ何個現れたかを数えろ。大文字と小文字は区別しないもとする。
[3] 環境
[3.1] OS: (Windows/Linux/等々) WinXP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Borland C++ Compiler 5.5
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 無期限
[5] その他の制限:
自分で書いたコード
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上記のコードの中の
/* ファイルに含まれているアルファベットの個数をカウント */
この部分がうまく働きません
何がいけないんでしょうか?
148:デフォルトの名無しさん
07/06/25 11:01:39
>>147
なんだこれ。
--
if('a' <= ch && ch >= 'z')
--
やりたいことは、if (ch >= 'a' && ch <= 'z')かif ('a' <= ch && ch <= 'z')じゃないのか?
149:デフォルトの名無しさん
07/06/25 11:03:11
if('a' <= ch && ch >= 'z')
else if('A' <= ch && ch >= 'Z')
if('a' <= ch && ch <= 'z')
else if('A' <= ch && ch <= 'Z')
chと文字の位置を変えるから(略
150:デフォルトの名無しさん
07/06/25 11:04:41
>>148
ああああああああああ、、、
アホみたいなミスしてました・・・
恥ずかしい
151:デフォルトの名無しさん
07/06/25 11:07:42
[1] 授業単元: プログラミング
[2] 問題文:
1、英大文字は小文字に英小文字は大文字に変えて出力するプログラムを作りなさい
2、テキストの中に現れる0から9までの数字の頻度を調べるプログラムを作りなさい
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C
[4] 期限: ([2007年06月25日14:20まで
[5] その他の制限:特にありません
時間があまりありませんが、できるところまででも
よろしくお願いします
152:デフォルトの名無しさん
07/06/25 11:15:41
>>151
1
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
int main(void)
{
char ch;
ch = getche();
if('a' <= ch && ch <= 'z') printf(" -> %c\n",toupper(ch));
else if('A' <= ch && ch <= 'Z') printf(" -> %c\n",tolower(ch));
return 0;
}
2
>>147のアルファベットのとこを数字に変える
153:デフォルトの名無しさん
07/06/25 11:21:14
is関数使っとけ
154:デフォルトの名無しさん
07/06/25 11:34:14
<ctype.h>使ってるんならis関数使わないほうが不自然だよな。
155:デフォルトの名無しさん
07/06/25 11:39:39
isalpha( ) か
存在を忘れてた
156:デフォルトの名無しさん
07/06/25 11:41:20
>>151
1.
#include <stdio.h>
#include <ctype.h>
int main(void){
int ch;
while((ch = getchar()) != EOF){
if(islower(ch)) putchar(toupper(ch));
else if(isupper(ch)) putchar(tolower(ch));
else putchar(ch);
}
return 0;
}
2.
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void){
int i, count[10] = {0};
char buf[2] = {0}, *p = buf;
while((*p = getchar()) != EOF)
if(isdigit(*p))
count[atoi(buf)]++;
for(i = 0; i < 10; i++) printf("%d : %d\n", i, count[i]);
return 0;
}
157:デフォルトの名無しさん
07/06/25 12:26:34
>>128
URLリンク(kansai2channeler.hp.infoseek.co.jp)
悪い。元のがちょっとアレだったんでコマンドライン引数から入力拾うように勝手に仕様変えちった
要点を掴んでほしい
158:デフォルトの名無しさん
07/06/25 12:47:34
152ー156の方々非常に迅速な解答ありがとうございました
159:デフォルトの名無しさん
07/06/25 16:15:49
[1] 授業単元: プログラミング
[2] 問題文:
成績を管理するプログラムを作成する.一人一人の学生には,学籍番号(整数)がつけられているの
で,学籍番号と成績(実数)の組みで管理することとする.本問題で作成するプログラムは,4人の学生について,
英語と数学の成績を入力すると,英語と数学の合計点で最高点を取った学生を出力するものとする.
成績を管理する構造体の名前をstudent_t(この名前はtypedefで定義した名前を指す)とし,構造体のメンバを,
学籍番号はint型とし,名前をidとする
英語の成績はdouble型とし,名前をengとする
数学の成績はdouble型とし,名前をmathとする
とする.また,以下の関数を作成し,それを利用すること.
n人のデータを入力する関数:void InputData(student_t s[], int n)
第一引数は学生の配列
第二引数は学生の人数
関数自体は,何人でも扱えるように作成すること
課題実行においては以下の点に注意すること.
プログラム名は「score」とすること.
結果の表示は小数点以下3桁で表示すること.
各教科の得点は,正の数に限定してよい.
最高点が複数人いた場合は,最高点を取った中で最初に入力された人を表示すること.
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
期限はいつでもいいです。よろしくおねがいします。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4775日前に更新/213 KB
担当:undef