C/C++の宿題を片付けます 91代目at TECH
C/C++の宿題を片付けます 91代目 - 暇つぶし2ch1:デフォルトの名無しさん
07/06/23 23:03:25 BE:255611693-2BP(12)
あなたが解けない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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
【C 関数検索 man on WWW】 URLリンク(www.linux.or.jp)
【過去ログ検索】        URLリンク(chomework.sakura.ne.jp)
【wiki】               URLリンク(www23.atwiki.jp)

【前スレ】
C/C++の宿題を片付けます 90代目
スレリンク(tech板)

2:デフォルトの名無しさん
07/06/23 23:16:54
>>1


3:前スレ978
07/06/23 23:26:29
前スレ>>979>>981さんレスどうもです。無事動作しました。

[1] 授業単元:プログラム技術3
[2] 問題文(含コード&リンク):
main(int argc char , *argv[]){
int i;

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


引数の順序を入れ替えてた後(*argv[] , int argc char)、入力した文字を逆順に出力するようにしたいのですが、変数以外
何処を変更したらいいのでしょうか?for文あたりを弄っても上手くいきませんでした。


[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 6月26日
[5] その他の制限: (ポインタを習ってるレベルです)



4:デフォルトの名無しさん
07/06/23 23:48:33
>>3
文字を逆順の意味がはっきりせん。複数の文字列をそれぞれ入力した順番から逆にするのか
それぞれの文字列の文字を逆順にするのか。それから、引数間違っているから
ちゃんと覚えてくれ。 int main(int argc , char *argv[]) やで

5:デフォルトの名無しさん
07/06/23 23:55:14
URLリンク(c0x.coding-guidelines.com)
160 The function called at program startup is named main.
161 The implementation declares no prototype for this function.
162 It shall be defined with a return type of int and with no parameters:
int main(void) { /* ... */ }
163 or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }

6:デフォルトの名無しさん
07/06/24 06:08:18
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):

  図書カードカタログ:
  1.入力
  2.著者名による検索
  3.書名による検索
  4.終了
  選択項目を入力して下さい:

  ユーザーが1を選んだら書名、著者名、出版社の順に書名先頭に空白行が入力させるまで繰り返し入力させ続ける。
  2,3を選んだ場合は特定の著者か書名を入力させ一致するものがあればその残りの情報も出力させる。
  4.で終了

[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] その他の制限:ループ、if、switch、ポインタ、配列、自作関数まで習った、
            使用可能なライブラリ stdio.h string.h conio.h stdlib.h ctype.h


自分で書いたコードです
URLリンク(kansai2channeler.hp.infoseek.co.jp)
なんかごちゃごちゃしてわかりにくくなってしまいました
あと、なんども検索してるとバグっておかしくなってしまいます
もっとキレイにうまく改善できませんか?


7:デフォルトの名無しさん
07/06/24 07:46:14
[1] 授業単元:アルゴリズム
[2] 問題文:10リットル、8リットル、3リットルの容器があり、10リットルの容器に水がいっぱい入っている。
この3つの容器を用い、3リットルの容器に1リットルの水を取り出す最小の手順を答えよ。ただし、水を移す時は、移す側が空になるか、移す側がいっぱいになってときとする。

幅優先探索と言うのを用いるそうです。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 5.5.1
 [3.3] 言語: C
[4] 期限: 6月25日の2400まで
[5] その他の制限:バケツの水の入り方を、座標に見立て、その座標に番号をつけ、広がり優先探索を用いる。

どうしたら良いかわからず、焦っています。
似たような問題が89代目のスレッドにありましたが、制限が違っていて対処できませんでした。
急ですがよろしくお願いします

8:デフォルトの名無しさん
07/06/24 07:52:31
>>7
状態は
8L 容器に入っている水の量 0-8
3L 容器に入っている水の量 0-3

9*4=36 種の状態を取り得るってことで解くのでおk?

9:デフォルトの名無しさん
07/06/24 07:52:43
これって
10Lから3L汲み出す&捨てる×3回繰り返す、残った1Lを3Lの容器に入れる
のが最短?

10:デフォルトの名無しさん
07/06/24 08:15:03
スレリンク(tech板:1000番)
スレリンク(tech板:151番)

11:デフォルトの名無しさん
07/06/24 08:23:39
前スレ>>983 (2)
#include <stdio.h>

int foo(int input[5][5], int ii, int jj){
   int i, j, total = 0;
   if(input[ii][jj] == 1) return 0;
   for(i = ii + 1; i < 5 && input[i][jj] == 0; i++) total++;
   for(i = ii - 1; i >= 0 && input[i][jj] == 0; i--) total++;
   for(j = jj + 1; j < 5 && input[ii][j] == 0; j++) total++;
   for(j = jj - 1; j >= 0 && input[ii][j] == 0; j--) total++;
   return total;
}

int main(void){
   int input[5][5], i, j;
   
   for(i = 0; i < 5; i++)
      for(j = 0; j < 5; j++)
         scanf("%1d", &input[i][j]);
   
   for(i = 0; i < 5; i++){
      for(j = 0; j < 5; j++)
         printf("%d ", foo(input, i, j));
      putchar('\n');
   }
   
   return 0;
}

12:デフォルトの名無しさん
07/06/24 09:15:59
>>6
とりあえず制限事項に外れる入力が無ければ大丈夫に見えるけど、
どういう風に入力したら、どうおかしくなったのか、詳しくヨロシク。

13:前スレ978
07/06/24 09:16:00
>>4
スマソ。複数の文字をそれぞれ入力した順番から逆に出力したいんです。
現状ですと、./a.out a b c と入力すると、[1]a [2]b [3]cと出力されます。
それを、./a.out a b c と入力して、[1]c [2]b [3]aと出力される
ようにしたいんです。どうしたら良いでしょうか?

それと、mainの前のintって必要なのでしょうか?
授業で習ったサンプルの文にはintは無かったのですが・・・。
main(ここでintの宣言をしてるので必要ないような気がするのですが)

お手数ですが、回答よろしくお願いします。

14:デフォルトの名無しさん
07/06/24 09:29:48
>>3 >>13 
習った習わないはともかく、国際的な標準スタイルってことで
それくらい知っておくべきだと講師に言っておきんしゃい。

#include <stdio.h>

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

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

15:デフォルトの名無しさん
07/06/24 09:32:14
>>5 にISO準拠におけるC言語の、プログラムの開始の関数と
mainが返す値について書かれているから。まさか、この程度の
英語も理解できんとは言わせないよん。

16:前852
07/06/24 09:37:38
前992さん
(1),(2)です

17:前スレ978
07/06/24 10:15:18
>>14
レスどうもです。上手く動きました。どうもです。

>>15
あれ、漏れへのレスだったのですね。気付きませんでしたorz

それにしてもmain関数手前にintを置くのが正しいスタイルだったんですねorz
授業ノートを見返してみましたが、書かれてるソースには一つもmain手前にintが
ありませんでした・・・。
次週の講義の際に講師に質問してみます。

18:デフォルトの名無しさん
07/06/24 10:19:24
2ch の宿題丸投げスレで宿題解いて貰ったんですが、
main の前に int がついています。どういう意味でしょうか?

もしこんなことも分からないようなら
勉強不足な講師だな ププッ って言ってました

19:デフォルトの名無しさん
07/06/24 10:29:51
前スレで修正後プログラムがまだでして、再書き込みさせてもらいます。

[1] 授業単元:C++研究
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)(問題文)
URLリンク(kansai2channeler.hp.infoseek.co.jp)(修正前プログラム)
上記のプログラムと、その上記のプログラムを修正した、↓(修正プログラムの問題文)
値の決定を自分だけランダム値からキーボードからの入力値になるようプログラムを修正して、
ある値が出た場合のみポイントが復活する機能を追加しなさい
(ある値は,初期段階で設定できるものとする)。なお復活するポイント値はランダムとする。

自分とは男を指します。キーボードから自分1~20の値を任意に決めれるようにします。
ある値が出た場合、そのある値が15の場合、15がでたときに、その勝負が行われた直後に
1~20ポイントランダムでポイントが自分の持ちポイントに加算される。

[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:Visual studio.2005
 [3.3] 言語: C++
[4] 期限: ([2007年6月26日12:00まで]
[5] その他の制限:特になし
内容がややこしいですが、どうかよろしくお願いします

20:デフォルトの名無しさん
07/06/24 10:30:52
>>17
くどいようだが、あくまでも 標準スタイル、ANSI、ISO準拠によるものであって
そのスタイルを無視しても問題ない環境では本当に問題はないぞな。
あくまでも幅広い環境で通用する標準スタイル。

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] 授業単元:プログラミングⅡ
[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


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