C/C++の宿題を片付けます 91代目at TECH
C/C++の宿題を片付けます 91代目 - 暇つぶし2ch24: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] 授業単元:プログラミングⅡ
[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

#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;
}


>>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
期限はいつでもいいです。よろしくおねがいします。

160:デフォルトの名無しさん
07/06/25 16:21:04
[1] 授業単元: プログラミング
[2] 問題文:
数字の書かれているテキストファイルを読み込んで、その数字に1を加えた数をテキストファイルに出力するプログラムを作成しなさい.
読み込むテキストファイルには1行目に整数が書かれており、2行目以降には何も書かれていないとする.
課題実行においては以下の点に注意すること.
プログラム名は「count」とすること.
読み込むテキストファイル名はcount.txtとする.
出力するテキストファイル名はcount.txtとする.

[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
これもわかりません。よろしくおねがいします。


161:デフォルトの名無しさん
07/06/25 16:23:20
>>159
#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);
}


162:デフォルトの名無しさん
07/06/25 16:26:54
>>127
#include <iostream>
#define STACK 10
#define QUEUE 10
typedef int stack;
typedef int queue;
static int sfirst = 0, slast = 0, qfirst = 0, qlast = 0, qcount = 0;
int push(stack *s, int i){ return slast == STACK ? -1 : (s[slast++] = i);}
int pop(stack *s){ return slast == sfirst ? -1 : s[--slast];}
int enqueue(queue *q, int i){
   if(qlast == qfirst && qcount) return -1;
   q[qlast] = i, qcount++;
   qlast = (qlast + 1)%QUEUE;
   return i;
}
int dequeue(queue *q){
   int ret;
   if(qlast == qfirst && !qcount) return -1;
   ret = q[qfirst], qcount--;
   qfirst = (qfirst + 1)%QUEUE;
   return ret;
}
int main(){
   stack s[STACK];
   queue q[QUEUE];
   std::cout << "push" << std::endl; for(int i = 0; i < 13; i++) std::cout << push(s, i) << std::endl;
   std::cout << "pop" << std::endl; for(int i = 0; i < 13; i++) std::cout << pop(s) << std::endl;
   std::cout << "enqueue" << std::endl;for(int i = 0; i < 13; i++) std::cout << enqueue(q, i) << std::endl;
   std::cout << "dequeue" << std::endl;for(int i = 0; i < 13; i++) std::cout << dequeue(q) << std::endl;
   return 0;
}

163:デフォルトの名無しさん
07/06/25 16:29:50
>>126さんありがとうございます
自分自身でも理解できるように勉強してみます

164:デフォルトの名無しさん
07/06/25 16:31:20
>>162
>  [3.3] 言語: C言語のみ

165:デフォルトの名無しさん
07/06/25 16:32:25
>>160
#include <stdio.h>
int main(void)
{
    int n = 0;
    FILE *fp;
    if ((fp = fopen("count.txt", "r+")) == NULL)
        return 1;
    fscanf(fp, "%d", &n);
    rewind(fp);
    fprintf(fp, "%d\n", ++n);
    fclose(fp);
    return 0;
}

166:デフォルトの名無しさん
07/06/25 16:41:16
>>144
$ cat vitamin.c
#include <stdio.h>
int main(int argc, char **argv)
{
    if (argc < 2 || argv[1][0] == 0)
        return 0;
    putchar(argv[1][0]);
    ++argv[1];
    return main(argc, argv);
}
$ cc vitamin.c
$ ./a.out "簡単な絵"

167:デフォルトの名無しさん
07/06/25 16:50:21
>>165
ありがとうございました。

168:デフォルトの名無しさん
07/06/25 16:54:15
>>160
#include <stdio.h>

int main(void){
   FILE *fp = fopen("count.txt", "r");
   size_t len;
   int i, flag = 1;
   char buf[1023], ret[1024] = {0}, *p;
   
   if(!fp) exit(1);
   fgets(buf, sizeof(buf), fp);
   if((p = strchr(buf, '\n')) != NULL) *p = '\0';
   
   len = strlen(buf);
   for(i = 0; i < len; i++){
      if(flag && (buf[len - i - 1] == '9')) ret[len - i] = '0', flag = 1;
      else if(flag) ret[len - i] = buf[len - i - 1] + 1, flag = 0;
      else ret[len - i] = buf[len - i - 1];
   }
   
   if(flag) ret[0] = '1', p = ret;
   else p = ret + 1;
   
   if((fp = freopen("count.txt", "w", fp)) == NULL) exit(2);
   fputs(p, fp);
   fclose(fp);
   
   return 0;
}

169:デフォルトの名無しさん
07/06/25 17:42:43
>>159
#include <stdio.h>

typedef struct tag_student_t{
    double eng, math;
    int id;
}student_t;

void InputData(student_t s[], int n){
    int i;
    for(i = 0; i < n; i++){
        printf("student %d\ninput data (id, eng, math) : ", i + 1);
        scanf("%d%lf%lf", &s[i].id, &s[i].eng, &s[i].math);
    }
}

int main(void){
    student_t s[4];
    double max = -1;
    int i, i_max = 0;
   
    InputData(s, 4);
   
    for(i = 0; i < 4; i++)
        if(max < s[i].eng + s[i].math)
            i_max = i, max = s[i].eng + s[i].math;
   
    printf("id : %d eng : %.3f math : %.3f sum : %.3f\n",
    s[i_max].id, s[i_max].eng, s[i_max].math, s[i_max].eng + s[i_max].math);
   
    return 0;
}

170:デフォルトの名無しさん
07/06/25 17:48:10
>>162
#include <stdio.h>
#define STACK 10
#define QUEUE 10
// <中略>
int main(void){
    stack s[STACK];
    queue q[QUEUE];
    int i;
    puts("push");
    for(i = 0; i < 13; i++) printf("%d\n", push(s, i));
    puts("pop");
    for(i = 0; i < 13; i++) printf("%d\n", pop(s));
    puts("enqueue");
    for(i = 0; i < 13; i++) printf("%d\n", enqueue(q, i));
    puts("dequeue");
    for(i = 0; i < 13; i++) printf("%d\n", dequeue(q));
    return 0;
}

171:デフォルトの名無しさん
07/06/25 17:52:09
>>162
すいません。C言語までしか習っていないのでC言語のみでお願いします。

172:デフォルトの名無しさん
07/06/25 17:53:48
>>170
できればでいいのですが問1と問2にわけて頂けないでしょうか

173:デフォルトの名無しさん
07/06/25 18:15:22
>>172
URLリンク(kansai2channeler.hp.infoseek.co.jp)

174:デフォルトの名無しさん
07/06/25 18:29:03
>>128
URLリンク(kansai2channeler.hp.infoseek.co.jp)

175:デフォルトの名無しさん
07/06/25 19:18:34
[1] 授業単元:データ構造とアルゴリズム
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio .NET 2003
 [3.3] 言語:C
[4] 期限:2007/6/26 10:30
[5] その他の制限:入力はfopen系関数を使用したものではなく、コマンドプロンプトから入力が保存されたテキストファイルを読み込む方法で行うようにしなければならない。

どんなに考えてもわかりません。わからないまま前日になってしまいました…
よろしくお願いします。

176:デフォルトの名無しさん
07/06/25 19:24:03
まいったな……何の問題なのかも分からないや。

177:デフォルトの名無しさん
07/06/25 19:59:11
[1] 授業単元:プログラム技術
[2] 問題文:
 (2)次に引数の順番を入れ替えて逆順に表示するプログラムに直せ。
  ソースプログラムを書き込んで提出せよ。*/

main(int argc , char *argv[]){
int i;

printf("%d argument(s).\n" , argc -1);
for(i=argc-1; i>=0; i--){
printf("argv[%d] : \"%s\"\n", i , argv[i]);
}
}


引数の順番を入れ替えると(char *argv[] , int argc)入力した文字は反映されず、argument(s).の前に
意味不明の数字が表示されて動作を終了してしまいます。
C:\c>smp2 a b c
3616655 argument(s).

ちなみに、引数を入れ替えなければ、逆に表示されます。

回答、よろしくお願いします。


[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Visual Studio .NET 2003
 [3.3] 言語:C
[4] 期限:2007/6/26
[5] その他の制限:

178:デフォルトの名無しさん
07/06/25 20:02:43
>>173
ありがとうございました!
いろいろ注文多くすいませんでした。

179:デフォルトの名無しさん
07/06/25 20:05:55
>>177
argumentでスレを検索汁

180:デフォルトの名無しさん
07/06/25 20:07:42
>>177 >>14

181:デフォルトの名無しさん
07/06/25 20:11:23
>>177
> 引数の順番を入れ替えると(char *argv[] , int argc)
っつか吹いたっw

182:177
07/06/25 20:16:15
>>179>>180
検索しましたが、何の参考にもなりませんでした。
まだ習い始めたばかりでよく分からないんです・・・

>>181
なにか根本的に間違っていたりしますか?
いや、冗談抜きでこの授業分からないんです・・・


183:デフォルトの名無しさん
07/06/25 20:18:02
>>182
言葉の意味を勘違いしているだけでしょ。main関数の中の引数の変数の定義を逆にしてどーすんだと。
仕様からして不適切だし、もしそれで答えろっていうなら、そんな講師は全世界レベルで非難を浴びますw

184:デフォルトの名無しさん
07/06/25 20:22:35
[1] 授業単元:情報処理
[2] 問題文:
 3つのベクトルA=(a1,a2,a3),B=(b1,b2,b3),c=(c1,c2,c3)がある。次のベクトル三重積に関する等式を示すプログラムを条件にしたがって作成せよ。
(A×B)×C=-(B,C)A+(A,C)B ここにA×Bは外積(A,B)は内積を示す。

データの入出力はファイルを使用
ファイル入出力に関してもサブルーチン化
ベクトルはそれぞれ一次元配列化
外積、内積ともにサブルーチンを作成し、外積は左辺、内積は右辺を計算できるようにすること

[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:g77 fortran
 [3.3] 言語:fortran
[4] 期限:2007/6/26
ぜひともおねがいします><

185:177
07/06/25 20:24:28
>>183
レスどうもです。なるほどorz

>次に引数の順番を入れ替えて

↑では、これは何をしろと言っているのでしょうか・・・。
う~ん、ますます分からなくなってきたorz


186:デフォルトの名無しさん
07/06/25 20:24:50
>言語:fortran
( ^ω^)・・・


187:デフォルトの名無しさん
07/06/25 20:26:37
>>185
問題文を全て一字一句違わず書けばいいよNE☆

188:デフォルトの名無しさん
07/06/25 20:28:15
>>160
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *p;
long l;
char buff[128];
FILE *fop = fopen("count.txt","r");
fgets(buff,sizeof(buff),fop);
l =strtol(buff,&p,10);
fclose(fop);
fop =fopen("count.txt","a+");
fprintf(fop,"\n%d",l+1);
return 0;
}

189:177
07/06/25 20:29:13
>>187
/*(1)次のプログラムを実行し結果を確認せよ。
 (2)次に引数の順番を入れ替えて逆順に表示するプログラムに直せ。
  ソースプログラムを書き込んで提出せよ。*/

問題文はコレで全てですorz


190:デフォルトの名無しさん
07/06/25 20:33:31
>>189
だから、受け継いだ値を逆から表示しろって問題なんでしょ?そういうこと。
括弧の中を逆にして受け継げって問題だったら全世界レベルで爆笑もんだよw
スイスのジュネーブにあるISO団体が、んだごるぁ?てめぇんとこは俺らが決めた標準はおろか
C言語の基本も理解していないおかしな授業をしてんのかと?国際的な裁判にかけられちゃいますよ?

191:デフォルトの名無しさん
07/06/25 20:35:29
>>177
まぁ、もし 入れ替え っていうなら、例えば引数を3つ受け継いだのなら
1番目と3番目を入れ替えるコードを書けと?そして argv[1] から順に表示しろと?
そういう問題ならそうすべきだが、そんなことせずに単純に逆から表示すりゃ良いでそ。

192:177
07/06/25 20:41:53
みなさんどうもです。そうですね、main()の中を入れえ変えるってのは
いくらなんでも無さそうですね。

有難うございました。


193:デフォルトの名無しさん
07/06/25 20:41:56
>>177
mainに関して、いろいろ実験してみるといい。
例えば、こんなのも駄目だ。
#include <stdio.h>

int main(char *argv[])
{
    printf("%s\n", argv[0]);
    return 0;
}


194:デフォルトの名無しさん
07/06/25 20:42:00
>>189
ほれよ。無駄な上に君の環境で動くかどうか分からないソース
(多分大丈夫だろうけど)

#include <stdio.h>
int main(int argc, char **argv)
{
    int i, j;
    char *tmp;
    printf("%d argument(s).\n" , argc -1);
    printf("argv[0] : \"%s\"\n", argv[0]);
    for (i = 1, j = argc - 1; i < j; ++i, --j) {
        tmp = argv[i];
        argv[i] = argv[j];
        argv[j] = tmp;
    }
    for (i = 1; i < argc; ++i)
        printf("argv[%d] : \"%s\"\n", i, argv[i]);
    return 0;
}

195:デフォルトの名無しさん
07/06/25 20:49:58
乱数を発生させて、1~100までを網羅するように表示せよ。(順番は問わない)

まったく、わからんよ。見かけによらず重い

196:デフォルトの名無しさん
07/06/25 20:55:07
>>195
日本語でおk

197:デフォルトの名無しさん
07/06/25 20:59:13
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define swap(type, x, y) do{ type temp = x; x = y; y = temp;}while(0)

int main(void)
{
    int x[100], i, j, k;
    srand((unsigned int)time(NULL));
    for(i = 0; i < 100; i++) x[i] = i + 1;
    for(i = 0; i < 1000; i++){
        j = (int)(((double)rand()/(RAND_MAX + 1))*100);
        k = (int)(((double)rand()/(RAND_MAX + 1))*100);
        swap(int , x[j], x[k]);
    }
    for(i = 0; i < 100; i++) printf("%3d ", x[i]);
    return 0;
}

198:デフォルトの名無しさん
07/06/25 21:04:26
>>195
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
int a[100],i,tmp,pos;
int a_sz=sizeof(a)/sizeof(a[0]);

srand((unsigned)time(NULL));
for(i=0; i<a_sz; i++)
a[i]=i+1;

for(i=0; i<a_sz; i++) {
pos=rand()%a_sz;
tmp=a[pos];
a[pos]=a[i];
a[i]=tmp;
}
for(i=0; i<a_sz; i++)
printf("%d ",a[i]);
return 0;
}

199:デフォルトの名無しさん
07/06/25 21:07:18
[1] 授業単元:プログラミングⅠ
[2] 問題文(含コード&リンク):
・ポインタを説明せよ。(Wikipedia,Google等参照不可。また書籍の参照も不可。自分の文章で答えること)
・構造体を説明せよ。(同上)
[3] 環境
 [3.1] OS:NULL
 [3.2] コンパイラ名とバージョン:NULL
 [3.3] 言語:C
[4] 期限:2007年06月25日(本日)
[5] その他の制限:同じ文章を見つけた場合は成績評価「不可」とする。

よろしくお願いします。

200:デフォルトの名無しさん
07/06/25 21:08:14
そっか、配列の要素を一回ずつ交換してやればいいんだな。

201:デフォルトの名無しさん
07/06/25 21:09:29
>>199
同じ学校の学生が見てたら終わりじゃん

202:デフォルトの名無しさん
07/06/25 21:09:52
>>199
URLリンク(ja.wikipedia.org)
URLリンク(ja.wikipedia.org)
何も丸々言葉を写さなきゃおk。自分が理解して自分の言葉で書けばええやん。

203:デフォルトの名無しさん
07/06/25 21:10:22
OS NULLって何?

204:デフォルトの名無しさん
07/06/25 21:10:59
>>203
Oナニー Siてたら NULLヌルしちゃった、てへっ ♥

205:デフォルトの名無しさん
07/06/25 21:11:53
むずいね。

206:デフォルトの名無しさん
07/06/25 21:12:03
>>199
先生がこのスレを見ている可能性は考えなかったのか

207:199
07/06/25 21:16:56
>>206

先生、にちゃんねる大嫌いそうだったから、つい書いてしまいました。

208:デフォルトの名無しさん
07/06/25 21:19:10
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

Mission 1 で作成した「Projection1.java 」は「0 列目」と,
「引数で指定した列」をCSV 形式で出力しましたが, 今度は
「0 列目」と「引数で指定した列以外の全ての列」をCSV 形式で
取り出すプログラムに変更せよ.
それを「Quiz6.java 」というファイルとして作成し,
いつもの要領で,WebCT に添付ファイルとして提出.
「CSV.java 」または「Projection1.java 」をコピーして作
ると良い. クラス名は「Quiz6 」としてください

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: Java?
 [3.3] 言語: C
[4] 期限: 今日中に提出
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

209:デフォルトの名無しさん
07/06/25 21:20:17
class Quiz6{
public static void main(String[] args){
String[][] seiseki = {
{"名前"," 国語"," 算数"," 英語"},
{"あべ","45","56","98"},
{"いいだ","70","45","30"},
{"いしかわ","32","70","75"},
{"おがわ","90","10","42"},
{"かご","85","32","80"},
{"かめい","75","92","40"},
{"こんの","30","30","100"},
{"たかはし","85","20","50"},
{"たなか","80","38","68"},
{"つじ","20","60","75"},
{"にいがき","82","42","75"},
{"ふじもと","18","70","78"},
{"みちしげ","60","46","88"},
{"やぐち","28","99","82"},
{"よしざわ","76","45","80"}
};
int col = Integer.parseInt( args[0] );
quiz6(seiseki,col);
}

210:デフォルトの名無しさん
07/06/25 21:21:26
public static void Quiz6(String[][] table,int col){
int i,j;
for(i=0; i<table.length; i++){
System.out.println(table[i][0]+","+table[i][col]);
}
}
public static void printTable(String[][] table){
int i,j;
for(i=0; i<table.length; i++){
System.out.print(table[i][0]);
for(j=1; j < table[i].length; j++){
if( ★指定した列でなければ ){
     System.out.print(★);
}
}
System.out.print( "\n" );
}
}
}


★の箇所がわかりません。お願いします。

211:デフォルトの名無しさん
07/06/25 21:21:26
>>208
スレ違い

212:デフォルトの名無しさん
07/06/25 21:21:35
>>208
スレタイ100回読み直せ
ついでに>>1

213:128
07/06/25 21:28:26
>>157さん、>>174さんありがとうございました
参考にさせていただきます

214:デフォルトの名無しさん
07/06/25 21:29:58
こいつCとJAVAの区別ついてないんじゃないの?

215:デフォルトの名無しさん
07/06/25 21:31:07
なるほど
> [3.2] コンパイラ名とバージョン: Java?
> [3.3] 言語: C
だものな

216:デフォルトの名無しさん
07/06/25 21:32:59
[1] 授業単元:情報数理

[2] 問題文(含コード&リンク):
複素数型を扱うライブラリcomplex.cを後述するヘッダ
ファイル complex.hに基づいて作ってください。
さらにmain.cというファイルで適当な計算のサンプル
を作り#include “complex.h”として作成したライブラリ
が適切に動作するか検証してください。

typedef struct complex complex; /* complex 型の宣言 */
struct complex {
double real; /* 実部 */
double imag; /* 虚部 */
};
/* プロトタイプ宣言 */
complex cAdd(complex, complex); /* 複素数の加算 x+y */
complex cMult(complex, complex); /* 複素数の乗算 xy */
complex cDiv(complex, complex); /* 複素数の除算 x/y */
double cAbs(complex); /* 複素数の絶対値 |x| */
complex cSub(complex, complex); /* 複素数の減算 x-y */
void printComplex(complex); /* 複素数型データのstdoutへの表示出力 */

[3] 環境
 [3.1] OS:WindowsXP
 [3.2] bcc32
 [3.3] C
[4] 期限:無期限

217:デフォルトの名無しさん
07/06/25 21:37:10
sageし忘れました・・・。

218:デフォルトの名無しさん
07/06/25 22:09:55
>>134 どうかお願いしますー

219:デフォルトの名無しさん
07/06/25 22:12:28
>>216

加算と乗算と除算と表示。
あとは他の人に任せた。

complex cAdd(complex x, complex y){/* 複素数の加算 x+y */
complex ret; /*戻り値*/
ret.real = x.real + y.real;
ret.imag = x.imag + y.imag;

return(ret);
}

complex cMult(complex x, complex y){ /* 複素数の乗算 xy */
complex ret; /*戻り値*/
ret.real = (x.real * y.real) - (x.imag * y.imag);
ret.imag = (x.real * y.imag) + (x.imag * y.real);
return (ret);
}

complex cDiv(complex x, complex y){/* 複素数の除算 x/y */
complex ret;/*戻り値*/
ret.real = ((x.real * y.real) + (x.imag * y.imag)) / ((y.real)*(y.real) + (y.imag)*(y.imag));
ret.imag = ((x.imag * y.real) - (x.real * y.imag)) / ((y.real)*(y.real) + (y.imag)*(y.imag));
return (ret);

}


void printComplex(complex x){ /* 複素数型データのstdoutへの表示出力 */
printf("実部 = %lf, 虚部 = %lf", x.real, x.imag);
}

220:デフォルトの名無しさん
07/06/25 22:19:12
>>218
何ゆえ>135は無視?

221:デフォルトの名無しさん
07/06/25 22:21:23
途中までってのも気持ち悪いから、全部やるか…。

>>216
math.hは使ってもいいの?
使っていいのなら平方根の計算が楽なんだけど…。

222:デフォルトの名無しさん
07/06/25 22:25:10
216です。はい、math.hを用いていただいても大丈夫です。ありがとうございます。

223:デフォルトの名無しさん
07/06/25 22:32:24
絶対値と減算。
math.hを使っていいのなら、累乗もpow()で表現すればよかったか…。まあいいや、合ってれば。
気に入らない箇所があったら適当に直しておいて。
とりあえず、x(4,2)とy(-2,3)で検証した。
よく分からないけど、これは学部一回生レベル?

double cAbs(complex x){ /* 複素数の絶対値 |x| */
return(sqrt((x.real)*(x.real) + (x.imag)*(x.imag)));
}

complex cSub(complex x, complex y){ /* 複素数の減算 x-y */
complex ret; /*戻り値*/
ret.real = x.real - y.real;
ret.imag = x.imag - y.imag;

return(ret);
}

224:デフォルトの名無しさん
07/06/25 22:46:01
あ、もう答えのソース出たんだ。
ソース書いてて、「公式のコピーをC言語として写してるだけでちょうどだるくなったところだった」

225:デフォルトの名無しさん
07/06/25 23:03:32
どうか>>175お願いしますー。
グラフにおける深さ優先探索です。

226:デフォルトの名無しさん
07/06/26 00:22:48
>>225
問1
URLリンク(kansai2channeler.hp.infoseek.co.jp)

dfs.exe -r のようにして起動すると再帰版
引数なしだとスタック版として動作する

見ればわかると思うが
dfs_recurse()が再帰版の関数
dfs_stack()がスタック版の関数な

超適当に作ったから確認は自分でやってくれ

227:デフォルトの名無しさん
07/06/26 01:48:12
[2] 問題文(含コード&リンク):
指定されたテキスト(data.txt)から1行ずつデータを取り込んでいき、
1行のデータが300文字以上の時はその行数と共にエラーメッセージを表示し終了。
また行頭に#が付いた行をコメント行として読み飛ばす。
[3] 言語: C
[4] 期限:6.26

よろしくおねがいします

228:デフォルトの名無しさん
07/06/26 01:57:42
>>227
data.txt の中身の例を詳しく

229:デフォルトの名無しさん
07/06/26 02:07:37
>>226
ありがとうございました!

230:デフォルトの名無しさん
07/06/26 02:12:06
>>227
#include<stdio.h>
#include<string.h>
#define N 300
int main()
{
FILE *fp;
int i = 0;
char data[N+1];
fp = fopen("data.txt","r");
while(fgets(data,N+1,fp) != NULL)
{
i++;
if(strlen(data) > N)
{
printf("行数:%d エラーメッセージ\n",i);
break;
}
if(data[0] != '#')
{
;
}
}
return 0;
}
てきとー。質問がてきとーなんだから回答もてきとーでおkだよな?

231:デフォルトの名無しさん
07/06/26 02:14:28
if(strlen(data) > N)

if(strlen(data) >= N)

300より上を300以上に変えたときにミスった

232:デフォルトの名無しさん
07/06/26 03:55:32
[1] プログラミング実習
[2] 問題文(含コード&リンク):
要素数nの整数型配列からk個の要素を選んで足し合わせ
bを超えない範囲での最大数を求めるプログラムを書け

ただしnは100程度、kは3程度、配列とbの値は適当に設定すること
[3] 環境 
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: BCC5.5
 [3.3] 言語: C
[4] 期限: 7月20日
[5] その他の制限:特にありません

よろしくお願いします

233:232
07/06/26 03:57:41
すいません
>>232のkは95程度の間違いです

234:デフォルトの名無しさん
07/06/26 04:07:13
>>232
> 最大数
何の最大数?合計?範囲を超えないbの要素の個数k?

235:232
07/06/26 05:35:30
>>234
足し合わせた合計です。
kは自分で適当に設定してください。

236:デフォルトの名無しさん
07/06/26 08:07:25
>>232問題文はちゃんと書きましょう。
>要素数nの整数型配列からk個の要素を選んで足し合わせ
>bを超えない範囲での最大数を求めるプログラムを書け
>ただしnは100程度、kは3程度、配列とbの値は適当に設定すること
要素数を100として、その配列の中身は何?
どうやって設定するの?rand()で良いの?
>kは95程度の間違いです
>kは自分で適当に設定してください。
せめてお前が設定しろよ

237:デフォルトの名無しさん
07/06/26 09:59:09
[1] 授業単元: プログラミング
[2] 問題文:
テキストファイルを読み込んで、"{"の数と"}"の数を数え、テキストファイルに出力するプログラムを作成しなさい.
課題実行においては以下の点に注意すること.
プログラム名は「chkpair」とすること.
ここで指定するデータ(ファイル),は存在するものとして仮定してよい.
読み込むテキストファイル名はプログラムを実行後にキーボードから指定する.
ファイル名の長さは最大で(マクロ定数)FILENAME_MAX文字までとしてよい.
出力するテキストファイルはchkpair.outとする.すでにchkpair.outがあり書き込み権限がある場合は、出力を上書きすること.
入力ファイルによって結果が異なるので、必ずしも実行例と同じ出力になる必要はない.

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


238:デフォルトの名無しさん
07/06/26 10:01:19
[1] 授業単元: プログラミング
[2] 問題文:
商品の在庫を管理するプログラムを作成する.在庫を扱う場合,在庫の平均単価(実数),
在庫数(整数)を管理する必要がある.本問題で作成するプログラムは,4回商品を入荷した時の平均在
庫単価と在庫総数を出力するものとする.商品入荷の時は,商品の単価と入荷数を順に入力していくものとする.このとき,平均単価と在庫数をひとつの構造体で管理するものとする.
変数を管理する構造体の名前をstock_t(この名前はtypedefで定義した名前を指す)とし,構造体のメンバを,
平均単価はdouble型とし,名前をpriceとする
在庫数はint型とし,名前をquantityとする
とする.
課題実行においては以下の点に注意すること.
プログラム名は「stock」とすること.
プログラム実行開始直後の在庫数は0とする
[3] 環境
 [3.1] OS: windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
./stock
100.0 10
200.0 10
300.0 10
555.0 30
377.5 60/*←出力*/

239:デフォルトの名無しさん
07/06/26 10:21:46
>>237
#include <stdio.h>

#define FILENAME_MAX 128 // 環境によってはマズイ

int main(void)
{
    FILE *fpin, *fpout = fopen("chkpair.out", "w");
    int ch, count1 = 0, count2 = 0;
    char filename[FILENAME_MAX], buf[128];
   
    printf("filename for input : ");
    scanf("%s", filename);
   
    if((fpin = fopen(filename, "r")) == NULL)
        perror(filename), exit(1);
   
    while((ch = fgetc(fpin)) != EOF){
        if(ch == '{') count1++;
        else if(ch == '}') count2++;
    }
   
    sprintf(buf, "{ : %d\n} : %d\n", count1, count2);
    fputs(buf, fpout);
   
    fclose(fpin);
    fclose(fpout);
   
    return 0;
}

240:デフォルトの名無しさん
07/06/26 10:30:48
>>238
#include <stdio.h>

typedef struct tag_stock_t{
    double price;
    int quantity;
}stock_t;

int main(void)
{
    stock_t x[4];
    double price_sum = 0, price_ave;
    int i, num = 0;
   
    for(i = 0; i < 4; i++)
        scanf("%lf%d", &x[i].price, &x[i].quantity);
   
    for(i = 0; i < 4; i++){
        price_sum += x[i].price*x[i].quantity;
        num += x[i].quantity;
    }
   
    price_ave = price_sum/num;
   
    printf("%.1f %d\n", price_ave, num);
   
    return 0;
}

241:227
07/06/26 10:43:16
data.txtはこんなかんじです。

#正の数
133
535
846
167
335
#負の数
-647
-673
-384
-384
-373


242:デフォルトの名無しさん
07/06/26 10:47:29
>>239
> #define FILENAME_MAX 128 // 環境によってはマズイ
うむ、かなりまずい。stdio.h にマクロ定義されていると思われるんで
敢えてそこで定義しない方が良いかも

243:デフォルトの名無しさん
07/06/26 10:56:24
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
  3d^2x/dt^2+dx/dt+2x=4
x(t=0)=0
dx/dt(t=0)=0

上記の微分方程式をルンゲークッタ法を用いて解け
[3] 環境
 [3.1] OS: windowsXP
 [3.2] コンパイラ名とバージョン: bcc32
 [3.3] 言語: C言語
[4] 期限: ([2007年6月25日まで
[5] その他の制限: なし

お願いします


244:デフォルトの名無しさん
07/06/26 11:16:50
[1] 授業単元:プログラミング1
[2] 問題文(含コード&リンク):
年と月を入力すると、カレンダーを表示するプログラムの作成。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.3
 [3.3] 言語: C
[4] 期限: 6月27日
[5] その他の制限:入門者らしいつくりでお願いします。

URLリンク(kansai2channeler.hp.infoseek.co.jp)
此所まではやってみたのですが、実行したときに" 日 月 火 水 木 金 土"
の部分しか表示されないので困っています。


245:デフォルトの名無しさん
07/06/26 11:41:21
>>244
曜日を得るのは標準関数を使えばいいのに……

それはさておき、
・monthは1~12なのに[0~11]の配列をそのまま参照している。
・「土」の後に改行していない。
のは問題かな。
後はもっと細かく見ないと判らん。

246:デフォルトの名無しさん
07/06/26 11:49:09
if(month==2&&(year % 4 == 0 && year % 100 != 0 || year % 400 == 0))
return(day[2]+1);
これねぇ、本当は良くない。できればうるう年なら day[2] = 29; そうでないなら
day[2]=28; にした方が良い。ここでは問題ないけど、何回か呼び出しをした場合
これだとうるう年に該当するたびに2月の日数が1ずつ加算されていくから。

247:デフォルトの名無しさん
07/06/26 11:51:01
何を言ってるんだ

248:デフォルトの名無しさん
07/06/26 11:51:24
>>246
もしもーし、脳味噌入ってますか~?

249:デフォルトの名無しさん
07/06/26 11:59:00
>>247
>>248
理解力のない馬鹿は視ねよw

250:デフォルトの名無しさん
07/06/26 12:00:26
>>245,246返信ありがとうございます。
指摘頂いた部分やその他修正したらカレンダーらしいものは表示が出るようになりました。

あとは1月2月3月らへんが多少ずれてるのですがこれはどう直したら良いでしょうか。

251:デフォルトの名無しさん
07/06/26 12:01:34
>249
頭が腐ってるのか目が腐ってるのか知らんが、もう一度よく見直せ。

252:デフォルトの名無しさん
07/06/26 12:03:51
>>249
マジで言ってるなら医者に行くか、取り敢えず寝てきたら? 100年くらい。

>>250
エスパーじゃないからどうずれるのか判らんし、そこがデバッグの楽しみだろう。
つーか、曜日の計算と改行する条件判断はあってる?
youbiが1のときは何曜日のつもり?

253:デフォルトの名無しさん
07/06/26 12:05:23
やった!おまいら釣られてやんのっ(プ
コードを見りゃ加算されるわけねーってバレバレじゃんw

254:デフォルトの名無しさん
07/06/26 12:08:09
いや、顔真っ赤にして後釣り宣言しなくていいから。

255:デフォルトの名無しさん
07/06/26 12:12:20
プププッ、ネタでボケて書いたことをマジに受けて茶化し、煽りレス入れている
こんな時間にいる引きこもりニーツがきめぇ~~んだよ(プ
俺?俺は大学の研究室からやw

256:デフォルトの名無しさん
07/06/26 12:14:46
どこの脳内研究室なんだか。

257:デフォルトの名無しさん
07/06/26 12:15:18
都内の某ランクSの大学ですが何か?

258:デフォルトの名無しさん
07/06/26 12:16:38
それじゃ、次のボケをお願いします。もうちょっと判り難いのがいいかな。

259:デフォルトの名無しさん
07/06/26 12:19:03
>257
本当にSランクなら、そもそも釣りなんて無駄なことはしない

260:デフォルトの名無しさん
07/06/26 12:20:19
>>244 を実行してみたけど、1日の表示がおかしい、曜日がきちっと算出されていない。
もうこんなんじゃ、月(付き)合ってらんね~

261:デフォルトの名無しさん
07/06/26 12:21:39
>>259
Sランク級の釣りにビビッてんだろぉ?Sランク級の釣りにお前がチビッているのがわかるぜ?

262:デフォルトの名無しさん
07/06/26 12:25:59
ランクSAITEIのランクSだなw

263:デフォルトの名無しさん
07/06/26 12:28:03
ちっちっち、違うぜ?Sugoi、Super、SutekiのSだぜ?お前らとは質が違うよ、質が。

264:デフォルトの名無しさん
07/06/26 12:31:44
[1] プログラミング基礎
[2] 以下のプログラムは,都道府県名(ローマ字)を入力すると,各都道府県の人口(人)と面積(km2)が列挙されたファイル prefectures.dat
からデータを読み込み,指定した都道府県の人口,面積およびそれらの比である人口密度を表示するプログラムである.
このプログラムを以下の例のように,人口,面積について 日本全体の総和に対する比率(百分率) も表示されるように書き換えよ.

実行例:
nodabls?% ./a.out[Enter]
chiba[Enter]
Statistics of the Chiba
Population = 6056159 (4.7 %)
Area (km^2) = 5156.19 (1.4 %)
Density (per km^2) = 1174.54

[3.1] Unix
[3.2] gcc
[3.3] c
[4] 2007年6月29日(金)



265:デフォルトの名無しさん
07/06/26 12:33:21
続き
プログラム
/* density.c: calculate population density for the given prefecture */
#include <stdio.h>
#include <strings.h>

int main(void)
{
char name[20], query[20];
int pop;
double area, den;
FILE *fp;

fp = fopen("prefectures.dat", "r"); /* ファイルオープン */
if (fp == NULL) { /* オープンに失敗? */
fprintf(stderr, "Can't open file!\n");
return (-1);
}

scanf("%s", query); /* 都道府県名を入力 */

den = -1.0;
/* 1行分の情報を読み込みつつループをファイル末尾まで繰り返し */
while (fscanf(fp, "%s%d%lf", name, &pop, &area) != EOF) {
if (strcasecmp(name, query) == 0) { /* 都道府県名が一致? */
den = pop / area; /* 人口密度 = 人口/面積 */
printf("Statistics of the %s\n", name);
printf("Population = %10d\n", pop);
printf("Area (km^2) = %10.2f\n", area);
printf("Density (per km^2) = %10.2f\n", den);
break; /* ループから抜ける */


266:デフォルトの名無しさん
07/06/26 12:35:32
}
}
fclose(fp); /* ファイルクローズ */

if (den < 0.0) { /* 都道府県名が正しくない? */
fprintf(stderr, "No such prefecture (%s)!\n", query);
return (-1);
}
return (0);
}


267:デフォルトの名無しさん
07/06/26 12:38:46
続き
prefectures.dat ファイル

Hokkaido 5627424 83453.04
Aomori 1436628 9606.33
Iwate 1385037 15278.40
Miyagi 2359991 7285.07
Akita 1145471 11612.11
Yamagata 1216116 9323.34
Fukushima 2091223 13782.48
Ibaraki 2975023 6095.58
Tochigi 2016452 6408.28
Gumma 2024044 6363.16
Saitama 7053689 3797.30
Chiba 6056159 5156.19
Tokyo 12570904 2186.90
Kanagawa 8790900 2415.41
Niigata 2431396 12582.37
Toyama 1111602 4247.22
Ishikawa 1173994 4185.22
Fukui 821589 4188.75
Yamanashi 884531 4465.37
Nagano 2196012 13585.22
Gifu 2107293 10598.18
Shizuoka 3792457 7779.46
Aichi 7254432 5155.84
Mie 1867166 5776.40
Shiga 1380343 4017.36


268:デフォルトの名無しさん
07/06/26 12:40:30
Kyoto 2647523 4612.94
Osaka 8817010 1892.86
Hyogo 5590381 8392.03
Nara 1421367 3691.09
Wakayama 1036061 4725.55
Tottori 606947 3507.17
Shimane 742135 6707.29
Okayama 1957056 7112.13
Hiroshima 2876762 8476.95
Yamaguchi 1492575 6110.45
Tokushima 809974 4145.10
Kagawa 1012261 1875.88
Ehime 1467824 5676.22
Kochi 796211 7104.66
Fukuoka 5049126 4971.01
Saga 866402 2439.23
Nagasaki 1478630 4092.44
Kumamoto 1842140 7403.68
Oita 1209587 6337.97
Miyazaki 1152993 7734.40
Kagoshima 1753144 9186.71
Okinawa 1360830 2271.30

長くなってすみません。よろしくお願いします。

269:デフォルトの名無しさん
07/06/26 12:44:11
次のjavaのプログラムをcに直してください

public class JobShop_EDD{
static int Job=3;
static int Machine=2;
static int K=30;
static int [] duedate={0,7,9,13,14,20};
static int [] [] process={{},{0,3,3,2,},{0,2,3,2},{0,2,3,3},{0,3,2,3},{0,2,2,2}};
static int [] [] route={{},{0,1,2,3},{0,2,1,3},{0,3,1,2},{0,3,2,1},{0,2,1,3}};
static int [] weight={0,2,2,2,2,2};



270:デフォルトの名無しさん
07/06/26 12:45:02
>>252
URLリンク(kansai2channeler.hp.infoseek.co.jp)
直してみたものですが。

月曜じゃないんですか?人伝えに聞いたので曖昧ですが

271:デフォルトの名無しさん
07/06/26 12:49:23
>>270 よくわからんから俺流ツェラーの公式を使ってやんよ

int youbi(int year,int month,int day)
{
if(month<=2) { year--; month+=12; }
return ( year + year/4 - year/100 + year/400 + (13*month+8)/5 + day )%7;
}

272:デフォルトの名無しさん
07/06/26 13:04:56
>>239
>>240
ありがとうございました。またなにかありましたらよろしくおねがいします。

273:デフォルトの名無しさん
07/06/26 14:56:55
>>264
問題が長い時は、ロダにtxtでうpしてリンク貼る
長いソースは拡張子を変えずにロダにうp
複数のレスに別けられると見辛い

>>269
メソッドが無くて、変数だけか。それを構造体にすればいいのか?


274:デフォルトの名無しさん
07/06/26 15:37:20
day[2]じゃねーだろ

275:デフォルトの名無しさん
07/06/26 15:57:25
>>264
URLリンク(kansai2channeler.hp.infoseek.co.jp)

276:デフォルトの名無しさん
07/06/26 16:00:47
264をよろしくお願いします。

277:275
07/06/26 16:05:51
>>264
URLリンク(kansai2channeler.hp.infoseek.co.jp)

278:デフォルトの名無しさん
07/06/26 16:07:10
>>271
有り難うございます。この部分はすり替えておきます。


279:デフォルトの名無しさん
07/06/26 16:11:48
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): コマンドラインで指定した二つのファイルを交換しろ
[3] 環境
 [3.1] OS: (Windows/Linux/等々) XP
 [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)

なんかうまく動きません
助けてください


280:デフォルトの名無しさん
07/06/26 16:16:23
一時ファイル使っちゃ駄目なの?

281:デフォルトの名無しさん
07/06/26 16:21:31
while(fputc(*p,fp2) != EOF)
;
多分、*p++なんだろうな

282:デフォルトの名無しさん
07/06/26 16:21:49
>>232
題意に沿ってるかワカランが
URLリンク(kansai2channeler.hp.infoseek.co.jp)

283:デフォルトの名無しさん
07/06/26 16:22:45
訂正
while(fputc(*p,fp2) != EOF)
p++;
のがいいか

284:デフォルトの名無しさん
07/06/26 16:24:07
>>280
どうやって使うんですか?
ファイル入ったばかりでどうしていいのかさっぱりです・・・

>>281
ミスです・・・どうもです


285:デフォルトの名無しさん
07/06/26 16:30:42
w+ → r+

286:デフォルトの名無しさん
07/06/26 16:32:01
>>279
こんなモンでいいと思うよ
#include <stdio.h>
int main(int argc, char **argv)
{
    char *tmp;
    /* 引数の制限 */
    if (argc != 3) {
        printf("使用法:<プログラム名> <ファイル名1> <ファイル名2>\n");
        return 1;
    }
    tmp = tmpnam(0);
    if (!rename(argv[1], tmp))
        if (!rename(argv[2], argv[1]))
            if (!rename(tmp, argv[2]))
                return 0;
    perror("rename");
    return 1;
}

287:デフォルトの名無しさん
07/06/26 16:45:04
>>286
名前じゃなくて中身を交換するようにしたいんです

できれば>>279の間違ってる部分を修正してもらえるとありがたいです


288:デフォルトの名無しさん
07/06/26 16:56:08
修正は面倒臭いんだよな
一から作った方がよほど早い

289:デフォルトの名無しさん
07/06/26 16:59:28
そこをなんとか・・・

290:デフォルトの名無しさん
07/06/26 17:11:27
名前の交換も中身の交換も結果としては同じなんだから、簡単なほうがいいと思うけど。

291:デフォルトの名無しさん
07/06/26 17:16:30
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):キーボードから2つのファイル名を指定し、1つめのファイルの末尾に2つめのファイルの内容を追加するプログラムを作成せよ.
ファイル名は最大15文字とする.
ファイルの1行の最大文字数は31文字とする.
[3] 環境
 [3.1] OS: (Windows/Linux/等々) XP
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)gcc
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 無期限
[5] その他の制限: 
 

292:デフォルトの名無しさん
07/06/26 17:23:14
>>279 ほれ
#include <stdio.h>
int copy(char *from, char *to)
{
    FILE *fi, *fo;
    int c;
    if ((fi = fopen(from, "rb")) == NULL)
        return perror(from), 0;
    if ((fo = fopen(to, "wb")) == NULL)
        return perror(to), fclose(fi), 0;
    while ((c = getc(fi)) != EOF) putc(c, fo);
    return fclose(fi), fclose(fo), 1;
}
int main(int argc, char **argv)
{
    char *tmp;
    int result;
    /* 引数の制限 */
    if (argc != 3) {
        printf("使用法:<プログラム名> <ファイル名1> <ファイル名2>\n");
        return 1;
    }
    tmp = tmpnam(0);
    result = (copy(argv[1], tmp) && copy(argv[2], argv[1]) && copy(tmp, argv[2]));
    remove(tmp);
    return !result;
}


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch