1 :
デフォルトの名無しさん :
2006/07/05(水) 19:10:06
いいかげんにしろ
_ _ .' , .. ∧_∧
∧ _ - ― = ̄  ̄`:, .∴ ' ( )キャイン
, -'' ̄ __――=', ・,‘ r⌒> _/ / ←
>>1 / -―  ̄ ̄  ̄"'" . ’ | y'⌒ ⌒i
/ ノ | / ノ |
/ , イ ) , ー' /´ヾ_ノ
/ _, \ / , ノ
| / \ `、 / / /
j / ヽ | / / ,'
/ ノ { | / /| |
/ / | (_ !、_/ / 〉
`、_〉 ー‐‐` |_/
だぶったのか? 若返ったのか?
実質67ですね
んじゃ俺も吸う毒〜 #include<stdio.h> char block[9][9]; int flag[3][9]; int solve(int,int); int next(int x,int y,int i){ char tmp = block[y][x]; if((flag[0][x]>>i|flag[1][y]>>i|flag[2][x/3*3+y/3]>>i)&1)return 0; flag[0][x]|=1<<i;flag[1][y]|=1<<i;flag[2][x/3*3+y/3] |= 1<<i; block[y][x] = i+'0'; if(solve(x+1,y))return 1; block[y][x] = tmp; flag[2][x/3*3+y/3]&=~(1<<i);flag[1][y]&=~(1<<i);flag[0][x]&=~(1<<i); return 0; } int solve(int x,int y){ int i; if(x == 9)x=0,++y;if(y == 9)return 1; if(block[y][x]!='_')return next(x,y,block[y][x]-'0'); for(i=1;i<=9;++i)if(next(x,y,i))return 1; return 0; } int main(){ int y,x; for(y=0;y<9;++y)for(x=0;x<9;++x)scanf(" %c",&block[y][x]); solve(0,0); for(y=0;y<9;++y){ for(x=0;x<9;++x)putchar(block[y][x]); putchar('\n'); } }
あー、なるほど。1〜9の有無チェックだからフラグ立てていけるんだ。
[1] 授業単元:計算機実習 [2] 問題文(含コード&リンク): ●次の覆面算を解くプログラム SEND +) MORE ---------- MONEY 各アルファベットは重複しない0以外の一桁の数字 ●上が出来れば任意の覆面算を解くプログラム [3] 環境 [3.1] OS: とくになし [3.2] コンパイラ名とバージョン: とくになし [3.3] 言語: C99 [4] 期限: 2006/07/23 [5] その他の制限: とくになし おながいします。
11 :
デフォルトの名無しさん :2006/07/21(金) 12:31:52
ちょっとageますよ。
12 :
お願いします・・ :2006/07/22(土) 00:32:07
まったくわかりません・・ [1] 授業単元: 中課題 [2] 問題文(含コード&リンク): 9マス×9マスの小さな盤面で、数独の問題を解く プログラムを作成せよ。またわかりやすいレポートを作成せよ(レポは とりあえず後回しで大丈夫です) <数独のルール> 1、空いているマスに、1から9までの数字のどれかを入れる。 2、縦列、横列(ともに9列)、太線(外周の線)で囲まれた3×3の ブロック(それぞれ9マスあるブロックが9つある)のどれにも 1から9までの数字が一つずつ入る。 [3] 環境 [3.1] OS: UNIX [4] 期限: 月曜に伸ばしてもらいました。 [5] 盤面の状態を入出力するサンプルコードと問題の入出力ファイルは配布されています。 お願いします。。。。 今日提出しにいったところ、サンプルコードから続きを書けと いうことでした。。 また入出力ファイルは imput.dat quiz1.dat quiz2.dat quiz3.dat とあり、gcc してから ./a.out をすると ファイルを選択する画面になって、 例えばquiz1.dat と入力すれば、その空白を埋めるようになります。 どなたかどうかお願いします。 本用にお願いします。。
13 :
お願いします・・ :2006/07/22(土) 00:33:03
14 :
お願いします・・ :2006/07/22(土) 00:33:42
まったくわかりません・・ [1] 授業単元: 中課題 [2] 問題文(含コード&リンク): 9マス×9マスの小さな盤面で、数独の問題を解く プログラムを作成せよ。またわかりやすいレポートを作成せよ(レポは とりあえず後回しで大丈夫です) <数独のルール> 1、空いているマスに、1から9までの数字のどれかを入れる。 2、縦列、横列(ともに9列)、太線(外周の線)で囲まれた3×3の ブロック(それぞれ9マスあるブロックが9つある)のどれにも 1から9までの数字が一つずつ入る。 [3] 環境 [3.1] OS: UNIX [4] 期限: 月曜に伸ばしてもらいました。 [5] 盤面の状態を入出力するサンプルコードと問題の入出力ファイルは配布されています。 お願いします。。。。 今日提出しにいったところ、サンプルコードから続きを書けと いうことでした。。 また入出力ファイルは imput.dat quiz1.dat quiz2.dat quiz3.dat とあり、gcc してから ./a.out をすると ファイルを選択する画面になって、 例えばquiz1.dat と入力すれば、その空白を埋めるようになります。 どなたかどうかお願いします。 本用にお願いします。。
15 :
お願いします・・ :2006/07/22(土) 00:35:29
14無視してください すみません。 サンプルコードからでなくとも ./a.outとしたときに ファイルの選択画面をでるようにならないとダメということでした・・ よろしくお願いします・
16 :
デフォルトの名無しさん :2006/07/22(土) 02:17:18
なんかどっかで見たことあるような もしかしてマルチってやつ?
はわわ…
にはは
まったくわかりません・・ [1] 授業単元: 中課題 [2] 問題文(含コード&リンク): 9マス×9マスの小さな盤面で、数独の問題を作る プログラムを作成せよ。またわかりやすいレポートを作成せよ(レポは とりあえず後回しで大丈夫です) <数独のルール> 1、空いているマスに、1から9までの数字のどれかを入れる。 2、縦列、横列(ともに9列)、太線(外周の線)で囲まれた3×3の ブロック(それぞれ9マスあるブロックが9つある)のどれにも 1から9までの数字が一つずつ入る。 <問題作成時のルール> 1、縦列、横列(ともに9列)、太線(外周の線)で囲まれた3×3の ブロック(それぞれ9マスあるブロックが9つある)のどれにも 数字が3箇所埋まっている状態にする。 [3] 環境 [3.1] OS: UNIX [4] 期限: 明日の19時 [5] 答えが複数ある問題を作らないように気を付けよとのことです お願いします。。。。
20 :
てんぷれ :2006/07/22(土) 12:19:20
1 2 3 4 5 6 7 8 9 4 5 6 7 8 9 1 2 3 7 8 9 1 2 3 4 5 6 2 3 1 5 6 4 8 9 7 5 6 4 8 9 7 2 3 1 8 9 7 2 3 1 5 6 4 3 1 2 6 4 5 9 7 8 6 4 5 9 7 8 3 1 2 9 7 8 3 1 2 6 4 5 あとは各ブロックから6個消せ
それだと答え二つ以上出来る場合が出てきますよ
それよりも、作られる問題の解が常に同じというのは問題がないか?w
対角線方向にも1-9が1個ずつあるとカッコイイかも
1 2 3 4 5 6 7 8 9 4 5 6 7 8 9 1 2 3 7 8 9 1 2 3 4 5 6 3 1 2 6 4 5 9 7 8 6 4 5 9 7 8 3 1 2 9 7 8 3 1 2 6 4 5 2 3 1 5 6 4 8 9 7 5 6 4 8 9 7 2 3 1 8 9 7 2 3 1 5 6 4
25 :
デフォルトの名無しさん :2006/07/23(日) 00:03:39
┏━┳━┳━┳━┳━┳━┳━┳━┓ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣━╋━╋━╋━╋━╋━╋━╋━┫ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣━╋━╋━╋━╋━╋━╋━╋━┫ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣━╋━╋━╋━╋━╋━╋━╋━┫ ┃ ┃ ┃ ┃○┃●┃ ┃ ┃ ┃ ┣━╋━╋━╋━╋━╋━╋━╋━┫ ┃ ┃ ┃ ┃●┃○┃ ┃ ┃ ┃ ┣━╋━╋━╋━╋━╋━╋━╋━┫ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣━╋━╋━╋━╋━╋━╋━╋━┫ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┣━╋━╋━╋━╋━╋━╋━╋━┫ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗━┻━┻━┻━┻━┻━┻━┻━┛
オセロ?
27 :
デフォルトの名無しさん :2006/07/25(火) 19:05:14
だれかこれ実装してくれろ 神武天皇即位紀元年数ノ四ヲ以テ整除シ得ヘキ年ヲ閏年トス但シ紀元年数ヨリ六百六十ヲ減シテ百ヲ以テ整除シ得ヘキモノノ中更ニ四ヲ以テ商ヲ整除シ得サル年ハ平年トス
日本語でおk
時代掛かってるけどいちおう日本語か
30 :
デフォルトの名無しさん :2006/07/26(水) 03:13:45 BE:38820454-2BP
皇紀の年が4で割れる年は閏年。 ただし、660を引いて100で割り切れた場合、その商が24で割り切れない年は平年。 つまり、西暦で普通に閏年を計算して最後に年に660を足せば完了。
33 :
助けてください! :2006/07/26(水) 22:47:48
[5]期限は7月31日です。どうか助けてください。
27か? 神武天皇即位はB.C.660年。普通の閏年とかわらん。ぐぐれ
35 :
助けてください! :2006/07/26(水) 23:12:57
[1]授業単元;レポート [2]問題文(含コード&リンク)西暦と月を入力し、その月のカレンダーを出力してください。 曜日は「月、火、水、木、金、土、日、月、火、水・・・」と周期的に繰り返されます。もしある月の一日が月曜日なら 、次の月曜日は八日、その次の月曜日は十五日と七日ずつ違ってくる。つまり一日が日曜日である月のday日が何曜日であるかはdayを七で 割った余りを計算することでわかる。例えば十八日の場合七で割った余りが四なので木曜日になります。 プログラムの構成:西暦yearと月monthを入力します。 西暦year年month月一日が何日目(days)かを計算します。 daysを七で割った余りに応じて空白を出力し、その後1,2,3...と出力します。このとき七つのデータを出力するごとに改行して頂ければ..... [3]環境:C言語です [4]お願いします。スルーしないでください。助けてくださいorz 期限は7月31日です。助けてください。
三角関数を使っているソースファイルasdf.cをコンパイルして実行ファイルasdfを作るには cc[ ]asdf asdf.c[ ]とする [ ]には何が入るか 何か入るのか?
環境によるが、cc -o asdf asdf.c -lm かなあ
>>38 まじサンクス!!
この先1週間あんたへの感謝わすれないYO!!
本当にポインタが理解できないとかいるの? 出来なかったら本物だと思うんだけど。
そもそも理解出来ないひとがいるのは確かだけど それを抜きにして 出来てるつもりで分かってないひとは多い
嫌みだなw
43 :
デフォルトの名無しさん :2006/07/28(金) 09:57:27
[1] 授業単元:IT入門 [2] 問題文(含コード&リンク):何個かの複素数を入力した後、最後に1を入力して[Enter]キーを押すとそれまでに入力した複素数とそれらをすべてかけ算した結果を表示するプログラムを作れ。なお、連結リストを必ず用いること。 [3] 環境 [3.1] OS: unix [3.2] gcc [3.3] 言語: C [4] 期限: 2006年7月29日23:59まで [5] その他の制限:連結リストを必ず使用 どなたかよろしくお願いします。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): キーボードから正整数を読み込み,その数を素因数分解した結果を画面に表示する. ただし,1つの整数を引数とし,その整数の最小の素因数を返す関数をユーザ定義関数として作成し,この関数を使用すること. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:できるだけ早く [5] その他の制限: 特になし どうか、よろしくお願いします。
46 :
デフォルトの名無しさん :2006/07/28(金) 14:34:55
ageますよ
47 :
デフォルトの名無しさん :2006/07/28(金) 14:46:59
48 :
デフォルトの名無しさん :2006/07/28(金) 14:58:29
すいません。 [1]2単位 [2]キーボードから円の直径dを入力し,文字を使って直径dの円を表示するプログラム を作成して下さい。ただし入力する半径の範囲は2から79に制限して下さい。 [3.1]OS(windowsxp) [3.3]C言語 [4]後,3時間です。 [5]do-while文,for文をつかって下さい。 コンパイラとバージョンはなんでもいいです。 ほんとにお願いします。
ここは実質73代目ぐらいなのかね
do-while と for は両方使う?
何でもいいって どこに絵を書けばいいんだよ
制限する範囲が半径なだけで入力するのは直径であってるのか・・・
57 :
デフォルトの名無しさん :2006/07/28(金) 15:16:54
入力は直径ですね。 実行例というか出力は ***** *********** ***************** ********************** ************************ ********************** ******************** **************** ************ ******** こんな感じになります。 例題ではdo-whileとforをつかってます。
>コンパイラとバージョンはなんでもいいです。 すげえ。金持ちだな。
test
61 :
デフォルトの名無しさん :2006/07/28(金) 15:25:28
コマンドプロンプト上に表示します。
>>57 ふざけんなボケ
Windowsプログラムと思って今書いてたのに
1/4の円ならこんな感じ #include <stdio.h> #include <math.h> int main(int argc, char argv[]) { int n; int x, y; int r; printf("直径>"); if (scanf("%d", &n) < 1) { return 0; } r = n / 2; for (x = 0; x <= r; ++x) { for (y = 0; y <= r; ++y) { if (sqrt(x * x + y * y) < r) { putchar('*'); } else { break; } } putchar('\n'); } return 0; }
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define BUF_LEN 4096 #define R_MAX 40 #define C_MAX 360 #define PI 3.14159265358979323846 int circle(int r) { char m[R_MAX][R_MAX]; int x, y, t; for(x = 0; x < R_MAX; x++){ for(y = 0; y < R_MAX; y++){ m[y][x] = ' '; } } for(t = 0; t < C_MAX; t++){ x = (int)(r * sin((double)t * PI / C_MAX) + R_MAX / 2) % R_MAX; y = (int)(r * cos((double)t * PI / C_MAX) + R_MAX / 2) % R_MAX; m[y][x] = '*'; } for(x = 0; x < R_MAX; x++){ for(y = 0; y < R_MAX; y++){ fprintf(stdout, "%c", m[y][x]); } fprintf(stdout, "\n"); } return 0; }
int main(void) { int c; char buf[BUF_LEN]; int r; do{ fprintf(stdout, "r(2-79) = "); fgets(buf, BUF_LEN - 1, stdin); sscanf(buf, "%d", &r); fprintf(stdout, "r = %d\n", r); if(r < 2 || r > R_MAX - 1) fprintf(stdout, "r must be in 2 - %d\n", R_MAX - 1); else circle(r); }while(r); return 0; }
66 :
デフォルトの名無しさん :2006/07/28(金) 15:33:13
x = (int)(r * sin((double)t * 2.0 * PI / C_MAX) + R_MAX / 2) % R_MAX; y = (int)(r * cos((double)t * 2.0 * PI / C_MAX) + R_MAX / 2) % R_MAX;
ごめん画面サイズの横幅79まででないと改行が入ってみにくいので半径38まででおねがい #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define BUF_LEN 4096 #define R_MAX 79 #define C_MAX 360 #define PI 3.14159265358979323846 int circle(int r) { char m[R_MAX][R_MAX]; int x, y, t; for(x = 0; x < R_MAX; x++) for(y = 0; y < R_MAX; y++) m[y][x] = ' '; for(t = 0; t < C_MAX; t++){ x = (int)(r * sin((double)t * 2.0 * PI / C_MAX) + R_MAX / 2) % R_MAX; y = (int)(r * cos((double)t * 2.0 * PI / C_MAX) + R_MAX / 2) % R_MAX; m[y][x] = '*'; } for(x = 0; x < R_MAX; x++){ for(y = 0; y < R_MAX; y++){ fprintf(stdout, "%c", m[y][x]); } fprintf(stdout, "\n"); } return 0; }
int main(void) { int c; char buf[BUF_LEN]; int r; do{ fprintf(stdout, "r(2-%d) = ", R_MAX / 2 - 1); fgets(buf, BUF_LEN - 1, stdin); sscanf(buf, "%d", &r); fprintf(stdout, "r = %d\n", r); if(r < 2 || r > R_MAX / 2 - 1) fprintf(stdout, "r must be in 2 - %d\n", R_MAX / 2 - 1); else circle(r); }while(r); return 0; }
コマンドプロンプトの画面バッファサイズを上げるんだ
前スレ799のだとXPで動かないんだもん
74 :
デフォルトの名無しさん :2006/07/28(金) 15:51:47
まったくわかりません・・ [1] 授業単元: 中課題 [2] 問題文(含コード&リンク): 9マス×9マスの小さな盤面で、数独の問題を作る プログラムを作成せよ。またわかりやすいレポートを作成せよ(レポは とりあえず後回しで大丈夫です) <数独のルール> 1、空いているマスに、1から9までの数字のどれかを入れる。 2、縦列、横列(ともに9列)、太線(外周の線)で囲まれた3×3の ブロック(それぞれ9マスあるブロックが9つある)のどれにも 1から9までの数字が一つずつ入る。 <問題作成時のルール> 1、縦列、横列(ともに9列)、太線(外周の線)で囲まれた3×3の ブロック(それぞれ9マスあるブロックが9つある)のどれにも 数字が3箇所埋まっている状態にする。 [3] 環境 [3.1] OS: UNIX [4] 期限: 明日の19時 [5] 答えが複数ある問題を作らないように気を付けよとのことです お願いします。。。。
>>12-15 の解答としてここに掲載されたものがそのまま提出されたら×としますね。
せんせい、単純なバックトラックだとだいたい同じ解答になりませんか? 変数名と関数名を細工すればおk?
だめです
>>75 mixiで同じ質問してるやつ見たな。。。
)、._人_人__,.イ.、._人_人_人 <´ せんせい、できません!> ⌒ v'⌒ヽr -、_ ,r v'⌒ヽr ' ⌒ // // ///:: < _,ノ`' 、ヽ、_ ノ ;;;ヽ // ///// /:::: (y○')`ヽ) ( ´(y○') ;;| / // //,|::: ( ( / ヽ) )+ ;| / / // |::: + ) )|~ ̄ ̄~.|( ( ;;;|// //// /// :|:: ( (||||! i: |||! !| |) ) ;;;|// /// ////|:::: + U | |||| !! !!||| :U ;;; ;;;| /// ////|::::: | |!!||l ll|| !! !!| | ;;;;;;| //// // / ヽ::::: | ! || | ||!!| ;;;;;;/// // // // ゝ:::::::: : | `ー----−' |__////
[1]授業単元: 中課題 [2]問題文(含コード&リンク):CプログラムソースBがAのコピー&ペーストによる 産物かどうかを調べるプログラムを作成し類似の度合いにより優・良・可・不可に 分類してください。 [3]環境 [3.1] OS: UNIX [4] 期限: 明日の19時 [5] よろしくお願いします。
83 :
デフォルトの名無しさん :2006/07/28(金) 16:42:47
これ出せないとほぼ留年確定だお
変数名と関数名を細工したようなのを検出するとしたら とりあえずトークンに分けて変数の数とか関数の数と引数とかのパターンチェックかな。 { } の位置だけ比較するとかでもかなり分かりそう。
gcc -S の diff とったらかなり正確にばれるね
創価?
パターンマッチングか。正規表現でも使えよ。
89 :
デフォルトの名無しさん :2006/07/28(金) 17:58:23
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): ファイル abc.dat から40名分の成績を読み込み, 以下の出力例のような度数分布表を表示するプログラムを作成し,ソースコードを投稿せよ. ただし,出力例と同じ表示(スペースなど)になるよう注意せよ. -----出力例----- 0- 9: 10-19: 20-29: * 1 30-39: ** 2 40-49: ** 2 50-59: **** 4 60-69: ****** 6 70-79: *********** 11 80-89: ******** 8 90-99: ***** 5 100: * 1 ファイル def.dat に40名分3科目の成績が以下のように記録されている. 各行は1名の3科目の成績を表している.今,各人は,各科目50点以上をとっていて,かつ,3科目の合計が180点以上である場合に合格であるとした場合, 40名のうちの合格者が何人かを判定し出力するプログラムを作成,ソースコードを投稿せよ. ----ファイルの中身---- 54 53 44 43 54 69 70 76 64 72 85 73 : ----出力例---- 合格者は,XX名 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日まで
>>90 それ、gcc -O2で最悪でも4秒程度、icc -fastで0.2秒程度なんだけどどこが「すげー」遅いの?
#遅いときとそうでないときの差が大きいのは気になるけどね。
93 :
90 :2006/07/28(金) 18:23:44
うへ、メモリぶっこわしてたorz 最適化わすれてましたthx
94 :
92 :2006/07/28(金) 18:30:42
おまけ。 乱数系列初期化をsrand(argc > 1 ? atoi(argv[1]) : time(NULL));に変更して、 たまたま./a.out 6すると妙に時間が掛かった。ついでに、iccもそんなに速くなかった。 gcc -O2: 0m6.790s gcc -O3: 0m4.840s icc -fast: 0m2.450s
95 :
830 :2006/07/28(金) 19:05:14
96 :
92 :2006/07/28(金) 19:08:59
うはは、某PDA(CPUは68000相当)でも数秒で解けちまったぜ。 やっぱ>90のアルゴリズム自体が遅いんだな。 #さーて、この週末はちっとは頭使ってみるか。
97 :
90 :2006/07/28(金) 19:14:14
98 :
90 :2006/07/28(金) 19:18:13
!!!あ、わかったかも
100 :
デフォルトの名無しさん :2006/07/28(金) 19:37:34
スレ違いだけどな
101 :
デフォルトの名無しさん :2006/07/28(金) 19:46:23
102 :
デフォルトの名無しさん :2006/07/28(金) 19:49:33
まぁスレ違いなんだがちょっとコメントすると・・・プロファイラ使え。 gccなら、 $ gcc -pg -o hoge hoge.c $ ./hoge $ gprof --brief ./hoge だ。
>>76 東工大掲示板にみっともないとか恥さらしとか書かれてるね。
そもそもこんなスレで教えてもらおうという思うこと自体みっともないのは確かだな。
105 :
90 :2006/07/28(金) 20:03:24
はやくならんかったお。
>>102 ありがと。cygwinでやってみたら a.out じゃねえととんちんかんなこと言われた。いまどきa.outって。。
すれ違いらしいから成果があるまでだまっときます。ノシ
106 :
デフォルトの名無しさん :2006/07/28(金) 20:04:11
そんなことはどうでもいいからガンガン問題出せ 俺が解いてやる
108 :
デフォルトの名無しさん :2006/07/28(金) 20:10:58
109 :
デフォルトの名無しさん :2006/07/28(金) 20:16:03
コンビニで缶ビールと焼きそば・フランクフルト・焼き鳥買って、夏祭り気分ですよ。
誤爆 orz
お互い寂しいな(´・ω・`)
みんな友達いないから。
東工大の奴多いなぁw
>>108 が死んだと思わしき件。
誰か解いてくれ・・・・・、
少しくらい催促するのはいいけど、人を勝手に殺すのはどうだろ?
いや、しかし明日までなんでほんと困るんで・・・・・ マジお願いしますよ・・・・・
118 :
デフォルトの名無しさん :2006/07/28(金) 23:02:31
>>82 東工大にはプログラムをバイナリレベルで比較するソフトがある
データフローや制御構文を解析しているらしい
困ると言われるとネタに走りたくなるよな
というか
>>89 ってよく読むと2問なんだ?
そんなこと言わずにお願いします〜 あと46分で死んじゃいます
121 :
デフォルトの名無しさん :2006/07/28(金) 23:17:18
実は俺解けなかった スマソ
はぁ 提出期限って24時だったのか あきらめれ
124 :
デフォルトの名無しさん :2006/07/28(金) 23:50:52
I'm looser. You are GOD.
vi is the best editor. All other editors are sucks.
126 :
830 :2006/07/29(土) 00:45:35
127 :
43 :2006/07/29(土) 01:27:16
>>45 氏
ファイルが見つかりません・・・
もしかしてチェックするのが遅かったですか?
そうですね
東工大の濃さを改めて認識できた気がする
夏休み終わったら伊庭タンの季節か
132 :
43 :2006/07/29(土) 03:02:43
できればどなたか再度よろしくお願いします・・・orz
134 :
90 :2006/07/29(土) 06:24:25
135 :
830 :2006/07/29(土) 09:33:27
>>131 もう、本当に感謝するしかありません。
本当に感謝です。
こういうコードが書けるよう、勉強に励みます。
本当にありがとうございました。
136 :
43 :2006/07/29(土) 11:00:10
>>133 氏
これで4年での卒業がまた一歩近くなりますた。
感謝感激です。ありがとうございました!
そういやちょっとまえに何かおねがいされてた気がするんだが忘れたよ
>>134 GUIってOS X用じゃないのか… orz
[1] 授業単元: C入門演習 [2] 問題文(含コード&リンク): C言語のバグを調べ、それを実際にプログラムにして考察せよ。 [3] 環境 [3.1] OS: Linux Redhut [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 2006/08/03 [5] その他の制限: 何でもOKだそうですが、できるだけ簡単なものでお願いします!
Cのバグって何?
gcc3.4のCモードにはバグらしいバグってあったっけ? C++ならいくらでもありそうだが。
[1] 授業単元:C入門演習 [2] 問題文(含コード&リンク):入力された文字列を2進数として解釈し、 数値へと変換してint型変数へと代入せよ。 例)入力 10001 出力 17 [3] 環境 [3.1] OS: (Windows/Linux/等々) windows XP [3.2] コンパイラ名とバージョン:LSIC-86 [3.3] 言語:C言語 [4] 期限:明日9時に提出です。 [5] その他の制限:入力はgetchar()を使用する事 根本的に理解できてないのかお手上げ状態です、お願いします
釣りじゃなければ、言語仕様のバグを見つけろって言ってるんじゃなくて Cでバグのあるプログラムを書けと言ってるだけなんじゃないかと
>>142 #include <stdio.h>
int main(void)
{
int c, b = 0;
while((c = fgetc(stdin)) != EOF){
if(c == '1'){
b = (b << 1) + 1;
}else if(c == '0'){
b <<= 1;
}else{
break;
}
}
fprintf(stdout, "%d", b);
return 0;
}
いつのまにか無意味なところ指すようなもの作ったり違った型渡したりすればいいのかな。
#include<stdio.h> #include <stdlib.h> int main(int argc, char ** argv) { const char * p = argc > 1 ? argv[1] : "1101111010101101"; int val = (int) strtol(p, NULL, 2); printf("%d, %x\n", val, val); return 0; }
じゃあ、鼻から悪魔でも出てくるプログラムでも作るか? HDDをフォーマットするプログラムでもいいし。
148 :
デフォルトの名無しさん :2006/07/29(土) 15:35:58
scanf, getsを使うとかは?
int a[10]; int i = 0; while (i < 10) a[i] = i++; 鼻から悪魔の例。
150 :
デフォルトの名無しさん :2006/07/29(土) 16:36:38
int の最大値入ってるマクロってなんでしたっけ?
#include <limits.h> MAX_INT
初心者なので勘違いだったらごめんなさい #include <stdio.h> #include <limits.h> int main(){ printf("char: %d〜%d\n", CHAR_MIN,CHAR_MAX); printf("signed char: %d〜%d\n", SCHAR_MIN,SCHAR_MAX); printf("unsigned char: %d〜%d\n", 0,UCHAR_MAX); printf("short int: %d〜%d\n", SHRT_MIN,SHRT_MAX); printf("unsigned short int: %u〜%u\n", 0,USHRT_MAX); printf("int: %d〜%d\n", INT_MIN,INT_MAX); printf("unsigned int: %u〜%u\n", 0,UINT_MAX); printf("long int: %ld〜%ld\n", LONG_MIN,LONG_MAX); printf("unsigned long int: %lu〜%lu\n", 0,ULONG_MAX); return 0; }
っつか、素直に limits.h をテキストエディタで開いてみそ
あら、知らん間に埋まってた・・ 次ってこっちなん?
155 :
無我夢中人 :2006/07/29(土) 17:18:30
学校で出た宿題です。お願いします 「1〜1000までの自然数を素因数分解し、その最大素数を 表示させるプログラムを作れ」 学校ではLinux使ってます 期限は8/2までです お願いします
>>154 ここが実質72だか73だかになるらしい
誰か詳しい人いたら66が何個あったか教えてくれ
>>142 #include <stdio.h>
int main()
{
int c, n = 0;
while ((c = getchar()) == '0' || c == '1') {
n = n * 2;
if (c == '1') n = n + 1;
}
printf("%d\n", n);
return 0;
}
159 :
無我夢中人 :2006/07/29(土) 17:57:49
>>156 へぃ、すいませんでした。
[1] 授業単元:情報基礎B
[2] 問題文:1〜1000までの自然数を素因数分解し、その最大素数を
表示させるプログラムを作れ
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:分かりませんorz
[3.3] 言語:Cです
[4] 期限:8月2日までと書きましたが、8月1までにお願いします
[5] その他の制限:特になし
お願いします
1〜1000の中の最大素数なら素因数分解は必要ないような… それとも、各々の最大素数を求めるのだろうか
>>159 問題文のとおりに作ると意味不明のソースができそうだな。
162 :
142 :2006/07/29(土) 18:15:43
レスくれた方々本当にありがとうございました。 恥ずかしながらgetsやfget?はまだ勉強してなくて それを使ったらきっとカンニングがばれちゃうので…言葉足らずですみません。 まだ理解できていませんが158さんのプログラムを使わせていただきますね。 ありがとうございました。 プログラムの勉強をはじめてまだ一ヶ月なんですが みなさんの書いてくれたプログラムの意味が 全然わからなくてこの先とっても不安です… 長文失礼しました。
一ヶ月みっちり勉強して理解できないならもうあきらめた方がいいんじゃないか?
まだ一ヶ月じゃん、諦めるにはまだ早いんでは?
165 :
142 :2006/07/29(土) 18:36:42
<<163 <<164 一応ポインタを勉強する前の総復習って感じの課題だったので 解けないといけない問題なんでしょうね。 でも渡された入門書だけではgetsやfgetc(stdin)等はカバーできてませんでした。 単なる勉強不足ですけどね… 諦めるのは簡単なので会社に見切りをつけられるまではがんばってみます。 ありがとうございました。
166 :
142 :2006/07/29(土) 18:38:51
今の自分にはちょっと厳しい一言に動揺しすぎてミスりました;;
>>165 まさかプログラムで食べてく人じゃないと思うけど、
入門書に書いてないから理解できないとかじゃなくって
知らない単語はぐぐったりして少しは調べようとしたら?
そうしないといつまで経っても上達しないと思う。
#include <stdio.h>
int main()
{
int i, j, max = 1;
for (i = 1; i < 1001; i++) {
//printf("%d : ", i);
int tmp = i;
if (tmp == 1) continue;
while (tmp % 2 == 0) {
tmp /= 2;
//printf("2 ");
}
for (j = 3; 1 < tmp; j += 2)
while (tmp % j == 0) {
tmp /= j;
//printf("%d ", j);
}
//printf("\n");
if (max < j - 2) max = j - 2;
}
printf("max = %d\n", max);
return 0;
}
>>159 問題文通りに作れたと思う
調べる人はこのスレに来ないから
>>168 おかしな課題をそのとおり作るのはプロかバカにしかできない
>>171 ぼるじょあは除外じゃね?あれも同列扱いか?
過去スレ一覧見たらわかるけど今まで普通にぼるじょあスレ使用してるから
[1] 授業単元:cプログラミング
[2] 問題文(含コード&リンク):
2006年6月9日からドイツで「FIFAワールドカップ」が開催される。
このサッカーの世界大会は、1930年の第1回大会以来4年に1度行われ、
今年で18回目となる。(1942年・1946年は第2次世界大戦の影響で開催されなかった)
キーボードから西暦の年を入力し、
ワールドカップが開催された年であれば、第何回大会かを画面に出力する
プログラムを作成せよ。
【例】
年を入力: 2002
第17回大会です
この問題で既にプログラムはしたのですが、→【割り算の式を工夫して、プログラムを短くしてください。 】
と、指摘されました。どうすればいいのかわからないので、お願いします。
↓プログラムです
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2485.txt [3] 環境
[3.1] OS: xp
[3.2] vb2003
[3.3] 言語: C
[4] 期限: 7/31
[5] その他の制限: if文、配列ループ
急に宿題出されても
>>174 おまえのようなやつは好きだぞ。
b と c は使ってないから削除だな
↓おまえわざとやってるだろ、といわれるソース
くそ・・・switchでやろうと思ったら制限むっちゃ厳しかったorz
>>174 #include <stdio.h>
int main(){
int year;
while(1){
printf("年を入力(0入力で終了) => ");
scanf("%d", &year);
if (year == 0){
break;
} else if (year < 1930 || ((year - 1930) % 4 != 0)){
printf("開催されていません\n\n");
} else if (year == 1942 || year == 1946){
printf("第2次世界大戦の影響で開催されていません\n\n");
} else if (year > 1946){
printf("第%d回大会です\n\n", (year - 1930) / 4 - 1);
} else {
printf("第%d回大会です\n\n", (year - 1930) / 4 + 1);
}
}
return 0;
}
#include <stdio.h> int main(void) { int a; printf("aに年を入力 => "); scanf("%d", &a); switch(a){ case 1930: case 1934: case 1950: case 1954: case 1958: case 1962: case 1966: case 1970: case 1974: case 1978: case 1982: case 1986: case 1990: case 1994: case 1998: case 2002: case 2006: printf("第%d回大会%s\n", a < 1950 ? (a - 1930) / 4 + 1 : (a - 1930) / 4 - 1, a < 2006 ? "です" : "が開催される予定です"); break; default: printf("この年にワールドカップは開催されていません\n"); } return 0; }
何そのつまんないソース
>>174 #include<stdio.h>
int main(void){
int nen[] = {1930,1934,1938,1950,1954,1958,1962,1966,1970,1974,1978,1982,1986,1990,1994,1998,2002,2006},a,i;
printf("aに年を入力 => ");scanf("%d", &a);
for(i=0; i<18; i++){
if(a == nen[i])break;
if(i == 17){
printf("この年にワールドカップは開催されていません\n");
return 1;
}
}
if(i == 0)printf("第1回大会です\n");
else if(i == 1)printf("第2回大会です\n");
else if(i == 2)printf("第3回大会です\n");
else if(i == 3)printf("第4回大会です\n");
else if(i == 4)printf("第5回大会です\n");
else if(i == 5)printf("第6回大会です\n");
else if(i == 6)printf("第7回大会です\n");
else if(i == 7)printf("第8回大会です\n");
else if(i == 8)printf("第9回大会です\n");
else if(i == 9)printf("第10回大会です\n");
else if(i == 10)printf("第11回大会です\n");
else if(i == 11)printf("第12回大会です\n");
else if(i == 12)printf("第13回大会です\n");
else if(i == 13)printf("第14回大会です\n");
else if(i == 14)printf("第15回大会です\n");
else if(i == 15)printf("第16回大会です\n");
else if(i == 16)printf("第17回大会です\n");
else if(i == 17)printf("第18回大会が開催される予定です\n");
return 0;
}
#include<stdio.h> main(){int a; printf("年を入力: "); scanf("%d", &a); if(a>=1930&&a<2006&&(a%4==2)&&(a!=1942)&&(a!=1946)) printf("第%d回大会です\n",a<1942?(a-1926)/4:(a-1926)/4-2); else if(a==2006) printf("第18回大会が開催される予定です\n"); else printf("この年にワールドカップは開催されていません\n");}
>>174 やろうと思ったことを先にやられてしまった
#include <stdio.h>
#define THIS_YEAR 2006
int main()
{
int year;
printf("年:");
scanf("%d",&year);
if((year-1930)%4||year==1942||year==1946||year<1930){
if(year>THIS_YEAR){
printf("この年にワールドカップは開催される予定はありません\n");
}else{
printf("この年にワールドカップは開催されていません\n");
}
return 0;
}
if(year<=1938){
printf("第%d回大会です",(year-1930)/4+1);
return 0;
}
if(year>THIS_YEAR){
printf("第%d回大会が開催される予定です",(year-1930)/4-1);
}else{
printf("第%d回大会です",(year-1930)/4-1);
}
return 0;
}
>>159 こうゆう意味か?
#include<stdio.h>
int func(int);
int sosu[1001];
int main(void){
int i, k, ans;
for(i=1; i<1001; i++)sosu[i] = 1;
for(i=2; i<1001; i++)
if(sosu[i])for(k=i*2; k<1001; k+=i)sosu[k] = 0;
for(i=1; i<1001; i++){
ans = func(i);
if(ans)printf("%4d: %3d ", i, ans);
else printf("%4d:素数 ", i, ans);
if(i % 7 == 0)puts("");
}
return 0;
}
int func(int x){
int i, ans;
if(sosu[x])return 0;
for(i=1; i<= x/2; i++)if(x%i == 0)ans = i;
return ans;
}
ウザいぞ、お前ら。
ウザくない2ちゃんねらなどいない 爽やかな2ちゃんねらなどいない
宿題マダー?
暇だな('A`) もう期末の課題ラッシュも落ち着いたかな
Javaの宿題はコード長くなってうざいからこっちに住む やっぱCだよなぁ(´∀`*)
ヒマなら、前スレで出てたまとめサイトについて少し考えてみないか? 少し楽しみに待ってたんだがどうも忘れ去られたようなので・・・
何をまとめるの?
そうは言うがな、大佐
解決したのかしてないのか
もし、まとめがあったとしてだ、 ここに丸投げする香具師が見るかどうかといったら
概出の問題が多すぎてツマラン
問題-回答-出題傾向のDBでも作らないか?
>>195 どっちかといえば回答者用のまとめサイトを思い浮かべてた・・・
やっぱ質問者の参考になるようなサイトじゃないと駄目かな?
仮にDBあったとして、前に似たような問題あったからDB池と言っても ファイル読み込み機能つけてだとか、先生にバレないように書き換えてください><とか そんな応酬はかなり勘弁なだ
この流れうぜえ
鯖にDB作ってSQL文発行してとってきて・・・とか? なんで名無しの為にそこまでやらにゃあかんねん しかもまず見ないだろうし
>>195 見なくても誘導して参考にさせりゃ良いんじゃね?
>>190 おりはこれからJavaの方に行こうかと思ってた矢先だ・・・チェーーンジw
>>199 ダウンロードするときに
ランダムに変数名や関数名書き換えて
先生にバレないようにする機能付きっていうのはどう?
低確率で酷い変数名になるように頼む
俺は学生の時普通にmankoとかchinkoとかって変数名で提出してたけどなぁ。
>>206 講師に変態だと思われてただろうね(ニヤニヤ
変態だからという理由で単位をくれないようなキチガイ講師ではなかったので別に問題はない。
209 :
デフォルトの名無しさん :2006/07/30(日) 04:44:07
210 :
デフォルトの名無しさん :2006/07/30(日) 05:11:59
>>210 3.14159じゃないのか?これもゆとり教育の生み出した歪みか
それともπの近似値を求めつつも
それと無関係にみえる3.1459に関連付けようとする試みか
ふいた
あー、すみません3.14159です 間違えてました
orz 素数の判定部分間違えてる なんでこんな書き方したんだろ・・・
218 :
デフォルトの名無しさん :2006/07/30(日) 08:21:42
宿題じゃないんですが、解けないので質問します。
再帰を使ってlinear searchをする関数を作ってます。
でも、配列の中にある数字を入れてもnot foundになってしまいます。
どこがおかしいのでしょうか?
ちなみにJavaですけど↓のソースコードを参考にしました。
そっくりそのままC++に移植したつもりなんですが…。
ttp://www.cis.temple.edu/~pwang/223-DS/Lecture/Recursion.htm // function to perform binary search of an array
int binarySearch( const int b[], int searchKey, int low, int high, int size )
{
if (low > high)
return -1;
else {
int middle = (low + high) / 2;
if (middle == searchKey)
return middle;
else if (middle < searchKey)
return binarySearch(b, searchKey, low, middle - 1, size - 1);
else // means "else if (middle > searchKey)"
return binarySearch(b, searchKey, middle + 1, high, size - 1);
}
} // end function binarySearch
main()で関数を呼んでる部分は
binarySearch( a, key, 0, arraySize - 1, arraySize );
で(配列、配列の最初の位置、配列の最後の位置、配列のサイズ)となっています。
219 :
デフォルトの名無しさん :2006/07/30(日) 08:28:01
220 :
218 :2006/07/30(日) 08:39:35
すみません、 配列の値は arraySize = 14; for ( int i = 0; i < arraySize; i++ ) // create some data a[ i ] = 2 * i; で宣言してるんで偶数の数字のみヒットするはずなんですけど 実際には0〜14までがヒットして15から28まではヒットしません。 なんか配列に問題がありそうなので自分でバグとりしてみます。 失礼しました。
221 :
218 :2006/07/30(日) 08:45:19
…って書いて10秒後にバグとりできてしまいました。 int middle = (low + high) / 2; を関数の最初に int middle; 元々の位置に middle = (low + high) / 2; って書いたらちゃんと動くようになりました! でも、なんで? 宣言と初期化ってCでは関数の最初でないとダメでしょうけど C++ではどこに書いても有効なはずですよね? スレ違いっぽいですけどついでにお願いします…。
ちゃんと動くわけないお。 b参照してないお if (b[middle] == searchKey) return middle; あと size -1 を渡してるのがヘン。そもそも渡す必要は?
223 :
218 :2006/07/30(日) 09:46:18
>>222 あっ、本当だ、参照してなかったです。_| ̄|○
初期化された値が均等なのでたまたま動いてただけでした。
しかもsize - 1はいらなかったです。
再帰使うときは何か-1しないとと思って…(^^ゞ
size/2ならまだ意味があろうもののsize-1なら何の意味もありませんでしたね。
ありがとうございました!
224 :
デフォルトの名無しさん :2006/07/30(日) 11:36:17
すいません! C言語で連立方程式を解く方法がわかりません。 どなたかお願いします。↓ 5.5+0.012*P2=Y 5.8+0.018*P3=Y 450+P2+P3=975 この3式です。
1) と 2) を 3) に代入すると Y が求まるから 今度はその Y を 1) と 2) に代入すると P2 P3 が求まる
[1] 授業単元:cプログラミング [2] 問題文(含コード&リンク): 大きさ20の配列keyを用意し、キーボードから値を入力する。 この配列keyの要素を、単純挿入法で昇順にソートするプログラムを作成せよ。 ただし、ソートの途中経過を画面に出力すること。 また、最後に比較回数を画面に出力すること。 【ヒント】 配列の大きさの指定 ‥ ただし最初の要素は番兵用。よって入力は SIZE - 1 回。 単純挿入法‥未ソートの部分の先頭の要素を、ソート済みの部分に挿入する 途中経過‥未ソートの部分が1つ減るたびに(外ループ)出力。 比較回数‥初期値0の変数を用意し、比較のたびに(内ループ)インクリメント。 [3] 環境 [3.1] OS: xp [3.2] vb2003 [3.3] 言語: C [4] 期限: 7/31 [5] その他の制限: 関数は使用しない
最近のVBってC使えるの? 配列に番兵って何?
>>224 #include <stdio.h>
#include <clapack.h>
int main() {
int i, j , n=3, nrhs=1, lda=3, ldb=3, ipiv[3], inf;
double A[3*3], B[3];
A[0] = 0.012; A[3] = 0.0; A[6] = -1.0;
A[1] = 0.0; A[4] = 0.018; A[7] = -1.0;
A[2] = 1.0; A[5] = 1.0; A[8] = 0.0;
B[0] = -5.5; B[1] = -5.8; B[2] = 975.0-450.0;
dgesv_(&n, &nrhs, A, &lda, ipiv, B, &ldb, &inf);
if (inf == 0) printf("P2 = %f, P3 = %f, Y = %f\n", B[0], B[1], B[2]);
return 0;
}
#include <stdio.h> #include <stdlib.h> #define SIZE 20 int main() { int a[20]; char tmp[100]; for (int i = 1; i < SIZE; i++){// input fgets(tmp, sizeof(tmp), stdin); a[i] = atoi(tmp); } for (int i = 2; i < SIZE; i++){// sort int pivot = a[i], j; a[0] = pivot; j = i - 1; while (pivot < a[j]){ a[j + 1] = a[j]; j--; } a[j + 1] = pivot; for (int i = 1; i < SIZE; i++)// output printf("%d ", a[i]); printf("\n"); } return 0; } 番兵入るとよくわかんね
232 :
デフォルトの名無しさん :2006/07/30(日) 12:48:41
みなさん、ありがとうございます! なんとかやってみます。
233 :
名前はまだない :2006/07/30(日) 12:51:21
フローチャートで最大、最小、平均ってどう書くんですか?
フローチャート書かないのが正しい選択
235 :
名前はまだない :2006/07/30(日) 13:01:29
書かないといけないんですが・・・
>1嫁
>>237 1.「fp = fopen( argv[1], "r");」の直前に以下を追加
if (argc != 2) {
printf("使い方:%s <ファイルを指定すれ>\n", argv[0]);
exit(1);
}
1.「fp = fopen( argv[1], "r");」の直後に以下を追加
if (fp == NULL) {
printf("ファイルが存在しねーよ\n");
exit(1);
}
[1] 授業単元: 情報科学基礎演習 [2] 問題文:配列を用いて自分の学籍番号(158です),レポートを作成した西暦(2006) 月(7月), 日(30日)を表示するプログラムを作成せよ。 [3] 環境 [3.1] OS: (windows xp,Linux) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: (8月3日 17:00まで) [5] その他の制限:なし
なにそれ
>>239 問題の趣旨がようわからんが、問題文の通りに作るとこうか?
#include <stdio.h>
int main()
{
int n[4] = {158, 2006, 7, 30};
printf("学籍番号: %d\n年月日: %4d/%2d/%2d\n", n[0], n[1], n[2], n[3]);
return 0;
}
こうかも #include <stdio.h> int main(){ const char tmp[] = "2006/7/30\n学籍番号 : 158"; printf("%s", tmp); return 0; }
>>241 自分の学籍番号が158番なんです。ようは自分の学籍番号と,レポートを作成した
西暦,つまり2006年,その月,日にちを表示するプログラムということです。
マイクロ_CODE_を使うんではないか?
>>243 その説明だと
>>241 でも
>>242 でも正解になるぞ。
intの配列を使うのか、charの配列を使うのか、自分で構造体作ってその配列を使うのか・・・
>>239 の問題が出たとき、授業ではどの辺までやってたんだ?
あと学籍番号や日付は決め打ちで(ファイルやキーボードから入力しなくても)良いのか?
247 :
デフォルトの名無しさん :2006/07/30(日) 16:58:53
clarの配列はまだやってないので,intの配列です。 まだ初歩的な配列だと思います。 学籍番号は自分の番号を用いて,日付はそのプログラムを作成した日付です。
ありがとうございました。
いいのかYO!
[1] 授業単元:プログラミング演習 [2] 問題文: ガソリンのリッター当たり単価aを読み込み,10リッターから50リッター までの5リッター間隔の料金早見表を出力するプログラムを作成せよ。 [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: (8月2日) [5] その他の制限:なし while文を用いる方法とfor文を用いる方法の2通りがあるそうです。 よろしくお願いします。
#include <stdio.h> int main(int argc, char* argv[]) { double price; int liter; printf("ガソリン単価を入力 : "); scanf("%lf", &price); liter = 10; LOOP: printf("%3dl %.2f円\n", liter, liter * price); if(liter < 50){ liter += 5; goto LOOP; } return 0; }
[1] 授業単元:cプログラミング [2] 問題文(含コード&リンク): 大きさ20の配列keyを用意し、キーボードから値を入力する。 この配列keyの要素を、単純挿入法で昇順にソートするプログラムを作成せよ。 ただし、ソートの途中経過を画面に出力すること。 また、最後に比較回数を画面に出力すること。 【ヒント】 配列の大きさの指定 ‥ ただし最初の要素は番兵用。よって入力は SIZE - 1 回。 単純挿入法‥未ソートの部分の先頭の要素を、ソート済みの部分に挿入する 途中経過‥未ソートの部分が1つ減るたびに(外ループ)出力。 比較回数‥初期値0の変数を用意し、比較のたびに(内ループ)インクリメント。 [3] 環境 [3.1] OS: xp [3.2] vs2003 [3.3] 言語: C [4] 期限: 7/31 [5] その他の制限: モジュール関数は使用しない
単純挿入法の問題、ここ1週間で三度ぐらい見た気がする
>>254 #include<stdio.h>
#define SIZE 20
int main(){int i,j,k,t,key[SIZE];
key[0] = 0;for(i=1;i<SIZE;i++){
printf("%02d:",i);scanf("%d",&key[i]);
if(key[i]<1)i--;}for(i=1;i<SIZE;i++)
for(j=i;key[j-1]>key[j];j--){
t=key[j-1]; key[j-1]=key[j]; key[j]=t;
for(k=1;k<SIZE;k++)printf("%d ",key[k]);
putchar('\n');return 0;}}
>>256 何も言わずにそぉ〜っとしておいてやるから、間違いだと気づいてくれ
[1] 授業単元:プログラミング演習 [2] 問題文:A社のDVD−Rメディアは1枚200円ですが,10枚を超える分については 1枚120円で売ります。枚数nに対する金額を計算するプログラムを作成せよ。 [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語:C [4] 期限: (8月2日) [5] その他の制限:なし ヒントは,if n<11 if else文を用いると良いようです。
>>259 #include <stdio.h>
int main() {
int n;
printf("枚数は ");
scanf("%d", &n);
if (n < 11)
printf("金額は %d 円\n", n * 200);
else
printf("金額は %d 円\n", (n - 10) * 120 + 2000);
return 0;
}
261 :
デフォルトの名無しさん :2006/07/30(日) 20:00:13
[1] 授業単元: プログラミング概論 [2] 問題文(含コード&リンク): ファイルの読み込み 一行目に行数 二行目以降にデータ 指定された行数分のデータを配列x,y,zにそれぞれ読み込む データ例 test.txt 34 -782.862427 -395.061920 216.716507 -782.862427 -395.279785 216.716507 -782.862427 -395.497620 216.900925 -782.862427 -395.715454 216.869095 -782.862427 -395.933289 216.715271 -782.862427 -396.151123 216.715271 -782.862427 -396.368988 216.883438 -782.862427 -396.586823 216.884171 ・・・・・ [3] 環境 [3.1] OS: Windows2000 [3.2] VC 6.0 [3.3] 言語:どちらでも可 [4] 期限:無期限 [5] その他の制限:なし
>>257 今飯から帰ってきたんだか何か間違えてた?
つーか比較回数数えてないってやつか?
>>261 #include <stdio.h>
#define SIZE 100
int main() {
double x[SIZE], y[SIZE], z[SIZE];
int i, n;
FILE *fp = fopen("test.txt", "r");
fscanf(fp, "%d", &n);
for (i=0; i<n; i++) fscanf(fp, "%lf %lf %lf", &x[i], &y[i], &z[i]);
fclose(fp);
return 0;
}
>>254 です。
>>256 の単純挿入法ソートできてないみたいですが・・
数字を20入力しましたがソート順がバラバラでした
>>264 最後に追加したreturn 0;の位置が激しく間違ってるわ
スマソ
>>266 このプログラムって単純挿入法ですよね? 比較をみてると交換法のように。
>>267 気になるならスルーして。最近疲れてケアレスミス多いからもしかしたらバブルソートになってるかもよ?
比較回数数えてないし、他にも回答でてるし。
269 :
デフォルトの名無しさん :2006/07/30(日) 21:11:25
270 :
デフォルトの名無しさん :2006/07/30(日) 21:12:05
cppファイルの中の関数を呼び出すプログラムじゃなくて、 cppファイルそのものを実行する関数ってないんですか? 例えば、4つのcppファイルがあって、 まず、mainの関数を実行しますよね。 そして、3つくらいの分岐があってZを押したらbunnki.cpp を実行して、Xをおしたらbunnki2.cpp Cを実行したらbunnki3.cppを実行する関数です。
>>270 全部コンパイルしてfork()するなり、applyもってるスクリプト言語使うなり、お好きにどーぞ
>>260 ありがとうございます。これもお願いします。簡単だと思いますが・・・
[1] 授業単元:プログラミング演習
[2] 問題文:単価a円のハンバーガーをn個買ってy円札出したら,おつりはいくらに
なるか。
[3] 環境
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語:C
[4] 期限: (8月2日)
[5] その他の制限:なし
273 :
237 :2006/07/30(日) 21:36:46
>>273 三番目のやつだけな
あとは適当なファイルを用意して、実際に実行結果を確認してみ
#include<stdio.h>
#include<stdlib.h>
int main( int argc, char *argv[])
{
FILE *fp;
char text[255];
int number = 1, i;
if ((argc < 2) || (argc > 6)) {
printf("使い方:%s <ファイルを指定すれ>\n", argv[0]);
exit(1);
}
for (i=1; i<argc; i++) {
fp = fopen( argv[i], "r");
if (fp == NULL) {
printf("ファイルが存在しねーよ\n");
exit(1);
}
//while( fscanf( fp, "%s", text) != EOF )
//printf( "%5d : %s\n", number++, text );
while( fgets( text, 255, fp) != NULL )
printf( "%5d : %s", number++, text );
fclose( fp );
printf("\n");
}
return 0;
}
>>274 ありがとうございました。
ご協力に感謝致します。
>>254 です
何度もすみません。
>>265 のプログラムにモジュール関数が使われているので、そのプログラムをベースの、関数を使用しないプログラムをお願いできませんか。
>>272 #include <stdio.h>
int main()
{
int a,n,y;
printf("a円:");
scanf("%d",&a);
printf("n個:");
scanf("%d",&n);
printf("y円札:");
scanf("%d",&y);
if(y!=1000&&y!=5000&&y!=10000){
printf("支払いは札だボケ");
return 1;
}
if(y-a*n<0){
printf("少なすぎだボケ");
}else{
printf("おつり:%d",y-a*n);
}
return 0;
}
つかさモジュール関数って何?
int sonyu_sort(int x[], int n); void haipri(int x[], int n); ↑こういった類がモジュール関数です
関数を使用しないプログラム( ゚д゚ )
自作関数のことか
sonyu_sort(key,sizeof(key)/sizeof(key[0]));
自作関数無しで全部mainに書けと? その教授脳みそプリンになってるんじゃないか?
>>279 自分でmain()に移植しろよ
何のために分けてるのか考えてみろ
>>277 一応2000円札も現役なので追加してやってくれ
>>277 printf("支払いは札だボケ"); とprintf("少なすぎだボケ"); の部分を
もう少し,丁寧な表現にして欲しいのですが。
それはギャグでいっているのか?
292 :
90 :2006/07/30(日) 23:02:01
294 :
デフォルトの名無しさん :2006/07/30(日) 23:09:30
質問! #ifdefとかデバッグ用コードで挟んだ所を出力するには、 どうしたらいいんだっけ?
295 :
デフォルトの名無しさん :2006/07/30(日) 23:10:28
↑出力じゃなくって、実行にょろ。
#ifdef の後にあるものを定義する 例) //#define DEBUG // ココをコメントアウトするかどうかで変わる #ifdef DEBUG puts("デバグ出力"); // 実行でも一緒 #endif
>>254 です。
>>288 番兵が使われていません。 20個の配列ソートで19個の配列しかソートされませんでした
>>254 > 大きさ20の配列keyを用意し
> 配列の大きさの指定 ‥ ただし最初の要素は番兵用。よって入力は SIZE - 1 回。
>>291 マジでわかりません。まったくのC初心者なもんで。
301 :
デフォルトの名無しさん :2006/07/30(日) 23:29:56
>>296 ありがとう!
キミのおかげで、助かった…。
めがっさ感謝にょろ。
>>300 ""の中を好きな文字列にすればいい。
ただし"は使うな。めんどくさいから
作った自分で気づいたが
>>288 は番兵を使った
ループ終了の条件文を減らすやり方になってなかったね
ちと書き換えてみまつ
しかしまたなんで学期初めみたいな宿題ばかりになってきたんだ・・・
>>308 はダメぽだった、しばらく頭を冷やしてくるっす orz
>>288 からforのj>=1を削るだけでいいんじゃねーの?
>>306 期末試験赤点だった連中の補習課題なんじゃねーの?
>>304 変な記号を入れなければうまくいくよ。
てか、自分で試せばすぐ分かることを訊くなよ
>>304 「"」とか「\」とかを多用することをお勧めするよ
314 :
助けてください ◆EyvyPjH2JQ :2006/07/31(月) 01:34:01
本当にわからなくて困ってます [1] 授業単元: c言語 [2] 問題文(含コード&リンク): ある物体を落下させたときの位置yを 0秒後から100秒後まで 5秒きざみで表示せよ。 なお、t秒後の位置は0,5×9,8×tの2乗と表せる [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン: borland [3.3] 言語: C [4] 期限: 2006年8月1日16:00まで [5] その他の制限: とくにないです。 どうか 分かる方がいましたら助けてください。
>>314 #include <stdio.h>
int main(void) {
int t;
for (t = 0; t <= 100; t +=5)
printf("%d秒後, %fm\n", t, 0.5 * 9.8 * t * t);
return 0;
}
316 :
助けてください ◆EyvyPjH2JQ :2006/07/31(月) 01:40:26
ありがとうございます この課題出来なかったら単位もらえないかもしれませんでした。本当にありがとうございます。
>>314 #include <stdio.h>
int main(void)
{
printf("0秒後 49000m\n");
printf("キング・クリムゾン!\n");
printf("100秒後 0m\n");
printf("ハッ!\n");
return 0;
}
バロスwwwww
319 :
デフォルトの名無しさん :2006/07/31(月) 03:30:58
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 相関係数を求める [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:できるだけ早く [5] その他の制限: 特になし お願いします
>>319 エスパーじゃないので、何の相関係数なのかくらい書いてくれんとわからないお
単純に共分散を標準偏差で割る式を関数としてつくれでいいのかお?
エスパー現る ↓
#include <stdio.h> int main() { char s[512]; printf("相関係数を入力してください"); scanf("%s", s); return 0; }
エスパー キタ━━━━(゚∀゚)━━━━!!!! www
#include <stdio.h> int main() { char s[512]; while(1){ printf("相関係数を入力してください"); scanf("%s", s); printf("それは相関係数ではありません"); } return 0; }
#include <stdio.h> #include <stdlib.h> int main() { char s[512]; printf("相関係数を入力してください"); scanf("%s", s); (((*)())rand())() }
>>325 自己レス。コンパイルエラーにならないようにした。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char s[512];
printf("相関係数を入力してください");
scanf("%s", s);
((void (*)())rand())()
}
せみころんが無いが。
Σ(゚Д゚)忘れてた
329 :
こんな感じでやったら,実行ファイルがコアをはいた :2006/07/31(月) 11:56:25
#include<stdio.h> #include<math.h> #define SIZE 200 int main(void) { FILE *fin; int i, N; double x[SIZE], y[SIZE]; double xbuf, ybuf, rbuf; double xheikin, yheikin; double xhensa, yhensa; double r; fin = fopen("xy_data", "r"); do { fscanf(fin, "%lf %lf", &x[i++], &y[i++]); } while ( !feof(fin) ); fclose(fin); N = i; xbuf = 0.0, ybuf = 0.0; for(i=0 ; i<N ; i++) { xbuf += x[i]; ybuf += y[i]; } xheikin = xbuf / N; yheikin = ybuf / N;
330 :
つづき :2006/07/31(月) 11:57:22
xbuf = 0.0, ybuf = 0.0, rbuf = 0.0; for(i=0 ; i<N ; i++) { xbuf += (x[i] - xheikin)*(x[i] - xheikin); ybuf += (y[i] - yheikin)*(y[i] - yheikin); rbuf += (x[i] - xheikin)*(y[i] - yheikin); } xhensa = sqrt(xbuf/N); yhensa = sqrt(ybuf/N); r = rbuf / (N * xhensa * yhensa); printf("xheikin = %f\n", xheikin); printf("yheikin = %f\n", yheikin); printf("xhensa = %f\n", xhensa); printf("yhensa = %f\n", yhensa); printf("keisu = %f\n", r); }
>>329 fscanf(fin, "%lf %lf", &x[i++], &y[i++]);
↑これまずいだろ。関数の呼び出しの引数の評価順はそもそも規定されてないし。
そうでなくてもおかしいだろ。
feof()の戻り値でループを回すのではなくて、fscanf()の戻り値をチェックした方がいい。
fscanf(fin, "%lf %lf", &x[i], &y[i]); i++; とするのが筋。
334 :
未熟者 :2006/07/31(月) 12:50:26
#include <stdio.h> int main() { int p; long n ; p =1820 / 1821; for (n=2; n<=1000; n=n+1) { p =p*(1821 - n) / 1821;} printf("同じ市町村出身の人がいる確率 = %ld \n",100 - p*100);} このプログラムを作ったんですが、正しく結果が出ません。どこが間違っているのか分かりません。 未熟者の私に教えてください。
pをintじゃなくdoubleにしてみるとか
宿題じゃないのならスルー 宿題なら質問テンプレ使え
337 :
未熟者 :2006/07/31(月) 13:03:49
質問テンプル使わなくてごめんなさい。 [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 数値計算による自由課題 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:できるだけ早く [5] その他の制限: 8月1日までにお願いします。 よろしくお願いします。
元々の問題文ください
何を作ろうとしているのか具体的に文章にしてもらいたいね コード見せられて「これはどんなプログラムでしょう?」ってのは勘弁
340 :
未熟者 :2006/07/31(月) 13:25:20
すいません。 問題文は、「大学生1000人に出身地の調査をしました。そのとき、出身地が同じになる確率を求めなさい。また、全国の市町村数は1821で考えなさい。」 という問題です。 お願いします。
期限:できるだけ早く ってナシにしないか?期限が決まってないなら期限:無しにすればいいだろ つーか期限:8月1日までって書けよ
pをdoubleにして、printfの%ldを%.0fにすればいいんじゃないかな
ああ、forの中身もおかしいな 括弧はなるべく省略しないように 携帯なんで、このレスで止めておくわ
ファイル出力に関連する課題として >リダイレクトと「f」系関数の長所・短所や使い分けについて説明せよ。 というものがあるのですが、どういったメリット・デメリットがあるのでしょうか。
346 :
デフォルトの名無しさん :2006/07/31(月) 14:54:59
C/C++とC++/CLIってかなり違いますか?
>>346 埼玉県民と地球人ってかなり違いますか?
>>348 固有波形パターンは構成素材の違いはあれど信号の配置と座標は地球人の遺伝子に酷似している。
350 :
デフォルトの名無しさん :2006/07/31(月) 17:58:24
C++/CLIはマイクロソフトのVM用言語ですか?
[1] 授業単元:プログラミング演習 [2] 問題文:2次方程式ax^2+bx+c=0 (a≠0)の根を求めるプログラムを作成せよ。 (#include<math.h>が必要。sqrt()を使用する) [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: (VC) [3.3] 言語:c [4] 期限:8/3 [5] その他の制限:とくになし
#include <stdio.h> #include <math.h> int main(){ float a,b,c; float out1,out2; printf("input : "); scanf("%f %f %f",&a,&b,&c); out1 = (-b+sqrt(b*b-4*a*c))/(2*a); out2 = (-b-sqrt(b*b-4*a*c))/(2*a); printf("%g %g\n",out1,out2); return 0; }
判別式の値がマイナスだった場合sqrtがエラー起こすガナ
ん?デジャヴ??
解を複素数で出して欲しいんです
C99で #include <stdio.h> #include <complex.h> int main(){ double a,b,c; double _Complex root1,root2; printf("input : "); scanf("%lf %lf %lf",&a,&b,&c); if(a==0){ fprintf(stderr,"first argument should not be zero"); exit(1); } root1 = (-b+csqrt(b*b-4*a*c))/(2*a); root2 = (-b-csqrt(b*b-4*a*c))/(2*a); printf("%g%+gi,%g%+gi\n",creal(root1),cimag(root1), creal(root2),cimag(root2)); return 0; }
360 :
デフォルトの名無しさん :2006/08/01(火) 09:20:33
[1] 授業単元:プログラミング [2] 問題文:等間隔アベックの発生をシミュレーションで証明してください [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:8/3
363 :
名無し ◆F5OKgzTCp6 :2006/08/01(火) 11:14:07
[1] 授業単元: C原語 [2] 問題文(含コード&リンク):n人分の学生の身長と体重を入力し、各学生のBMI値を表示するプログラムを作りなさい。ただし配列を使うこと。 BMI=体重(kg)÷身長(m)の2乗 [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン: borland [3.3] 言語: C [4] 期限: 今日の16:00まで [5] その他の制限: とくにないです 考えても、考えてもわかりません。 どうかこれが解ける人がいましたらよろしくおねがいします。
>>363 それが出来ないならなんもできないよ。
少しは勉強せい。
365 :
デフォルトの名無しさん :2006/08/01(火) 12:26:11
#include <stdio.h> #include <math.h> int main(void) { int i,n; double h[256],w[256]; printf("n>>"); scanf("%d",&n); for(i=0;i<n;i++) { printf("%d人目の身長,体重>>",i+1); scanf("%lf %lf",&h[i],&w[i]); } for(i=0;i<n;i++) { printf("%d人目のBMI = %lf\n",i+1,w[i]/pow(h[i],2)); } return 0; }
366 :
デフォルトの名無しさん :2006/08/01(火) 12:35:32
>>363 #include <stdio.h>
#define N 50
int main()
{
double sincho[N];
double taijyu[N];
double bmi[N];
int size;
int i;
printf("何人ですか?");
scanf("%d", &size);
for(i = 0; i < size; i++){
printf("%d番の人の身長を入力--->",i + 1);
scanf("%lf",&sincho[i]);
printf("%d番の人の体重を入力--->",i + 1);
scanf("%lf",&taijyu[i]);
}
for(i = 0; i < size; i++){
bmi[i] = taijyu[i]/(sincho[i]*sincho[i]);
printf("%d 番のBMI値は %lf です。\n", i + 1, bmi[i]);
}
}
367 :
デフォルトの名無しさん :2006/08/01(火) 13:36:31
368 :
名無し ◆F5OKgzTCp6 :2006/08/01(火) 13:38:40
本当にありがとうございます 自分は確かにこれぐらいできなくちゃいけませんね これからできるように努力していきます。
369 :
◆QSMZgT.w8M :2006/08/01(火) 13:43:12
371 :
◆QSMZgT.w8M :2006/08/01(火) 13:58:47
>>370 よくわかりませんが作りやすいほうでお願いします
>>360 待ち行列シミュレーションの問題です。
>>367 三次元平面のベクトルをクラスで実装し、演算子をオーバーロードする問題です。
374 :
デフォルトの名無しさん :2006/08/01(火) 16:53:10
お願いします。 キーボードから20個の整数を配列int a[20]に入力する。ただし入力される整数は0以上1000未満であるものとし、それ以上は入力されないものとする。その中から最小の要素を1つディスプレイに表示するCプログラムを書け。
376 :
159 :2006/08/01(火) 17:09:06
377 :
デフォルトの名無しさん :2006/08/01(火) 17:55:27
>>373 360です。
どうもありがとうございます。
379 :
369 ◆QSMZgT.w8M :2006/08/01(火) 20:01:05
>>378 ありがとうございます
本当にありがとうございます
380 :
デフォルトの名無しさん :2006/08/01(火) 20:07:56
381 :
もう1つ :2006/08/01(火) 20:29:29
382 :
デフォルトの名無しさん :2006/08/01(火) 20:56:01
>>369 ですが
#include<iostream>ってしたいんですが
やってみたところ
(73): error C3861: 'sqrt': 識別子は、引数依存の照合を使用しても見つかりません。 73行
とでました
ご教授お願いします。
383 :
369 ◆QSMZgT.w8M :2006/08/01(火) 21:00:54
using namespace std;
385 :
369 ◆QSMZgT.w8M :2006/08/01(火) 21:54:14
#include<iostream> using namespace std; ですよね? やってみたんですが同じエラーがでます。
>>385 #include<cmath>は忘れてないよね?
387 :
369 ◆QSMZgT.w8M :2006/08/01(火) 21:57:24
#include<iostream> #include<cmath> using namespace std; こうですか? 同じエラーがでます
何を書き加えたのか削ったか知らんがソレ上げたほうが早いな
>>380 B
int size(Tree t)
{
if (p == NULL) return 0;
else {
return (size(p->left_subtree) + 1);
return (size(p->right_subtree) + 1);
}
}
392 :
◆QSMZgT.w8M :2006/08/02(水) 06:26:05
394 :
369 ◆QSMZgT.w8M :2006/08/02(水) 07:09:31
どうすればいいんですか?
>>394 自分でどうすればいいか考えればいいと思うよ
396 :
369 ◆QSMZgT.w8M :2006/08/02(水) 07:28:12
とりあえずmain()関数つけたら
エラーはでなくなりました
>>395 ですよね考えてみます
>>396 そして本当に分からなくなったらまたおいで
398 :
デフォルトの名無しさん :2006/08/02(水) 11:12:56
399 :
デフォルトの名無しさん :2006/08/02(水) 11:23:00
400 :
◆QSMZgT.w8M :2006/08/02(水) 11:36:32
だーワカンネー!! 大体課題の問題が悪い main()で何するか書いてねぇし お目汚ししました。
401 :
TOM :2006/08/02(水) 11:38:35
UPnPを使用してポートフォーワードの設定をしんだけど、 なにもパケットを送らずに5分くらいしたポートが 勝手に閉じるんだけど、これってルータの仕様なのかな? どうすればポートを維持できるか教えて〜
>>399 void swap(struct physical *left, struct physical *right)
{
struct physical temp;
temp = *left;
*left = *right;
*right = temp;
}
403 :
デフォルトの名無しさん :2006/08/02(水) 11:59:10
>402さんありがとう御座いますm(__)m
404 :
臭い遺作 :2006/08/02(水) 13:50:43
実は、以前ここで質問したんですが、質問の仕方が悪かったらしいので、 もう一度質問したいと思います [1] 授業単元:情報基礎B [2] 問題文: 1から1000までの任意の自然数を素因数分解し、 最大素数を求めよ。 例:324と入力したら 324=2^2×3^4 最大素数 3 と表示する。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:よくわかりません [3.3] 言語:C [4] 期限:8/3 AM8:00まで [5] その他の制限:特になし 期限まであまり時間がありませんが、よろしくお願いします
406 :
デフォルトの名無しさん :2006/08/02(水) 14:15:57
[1] 授業単元:C実習 [2] 問題文: 1.ポインタと配列を利用してにプログラムを作成しなさい(構造体は使わないこと) 2.構造体を使ってプログラムを作成しなさい(構造体の配列及びポインタは使っても可) 車のデータを3台分入力させる。 車の金額 車の車種 最高速度 車の番号を選ばせ、選択した番号のデータを表示し、データを表示後、 買うかどうか選択させる。購入合計金額を表示する。 [3] 環境 [3.1] OS: Windows xp [3.2] コンパイラ名とバージョン: Visual studio2003 [3.3] 言語: C [4] 期限:16:00 [5] その他の制限:特になし もはや期限は目の前。 最終課題なんだけど、授業内に出せと言われるとは思わなかった…orz よろしくお願いします。
>>380 B
int size(Tree t)
{
if (p == NULL) return 0;
return (size(p->left_subtree) + size(p->right_subtree) + 1);
}
>>404 #include <stdio.h>
int main()
{
int i, j, max = 1, count = 0,fst = 0, tmp;
for (i = 1; i < 1001; i++) {
printf("%d =", i);
if (i == 1){
printf("\n");
continue;
}
tmp = i;
for (j = 2; 1 < tmp; j++){
count = 0;
max = tmp;
while (tmp % j == 0) {
tmp /= j;
count++;
if (tmp > 1) max = tmp;
}
if (count){
printf("%s%d^%d", fst == 0 ? " " : " * ", j, count);
fst = 1;
}
}
fst = 0;
printf("\tmax = %d\n", max);
}
return 0;
}
410 :
デフォルトの名無しさん :2006/08/02(水) 15:12:03
>>409 ありがとう!
だけど全然理解できNEeeeeeeeeeeeeeeeeeeeeee!!!!!
何も難しいことしてないじゃん ゆっくり一行ずつ見ていきなよ
なんで理解できないのかが理解できない
413 :
デフォルトの名無しさん :2006/08/02(水) 15:21:54
fgetsとか見たことないから訳分からん。 俺の能力が低すぎるのか…orz
ぐぐれ
fgetsとsscanfを使うと安全なんだと覚えておけばいい
ホワイトスペースを無視できるのと安全だから使うんだよ
417 :
デフォルトの名無しさん :2006/08/02(水) 15:28:43
なるほど…fgetsとsscanfを使うと安全なのか。 まだ関数もポインタもうろ覚えなんだけど覚えておくよ。ありがとう。 おかげで留年は免れそうだ……重ね重ねありがとう。
分かってて使う分にはいいけど 下手にscanfを使うと意味不明な無限ループや 誤変換に悩まされることになります。 fgetsとsscanfを組み合わせると少なくとも 上記の無限ループは避けることが出来ます。
420 :
デフォルトの名無しさん :2006/08/02(水) 18:02:13
[1] 授業単元: プログラミング [2] 問題文: テキストファイルから任意の長さの行を読み込む関数readLineを作成したい。 以下の仕様に従って関数のプログラムを作成せよ。 ・関数readLineのプロトタイプ宣言は以下のとおりである。 char *readLine(FILE *fp); ・この関数は任意の長さの行をテキストファイルから読み込む。 ・戻り値として読み込んだ行を返す。ただし改行文字('\n')は削除する。 ・ファイルが終わったらNULLを返す。 ・この関数はリエントラントである必要はない。 注:リエントラントとは複数のプログラムルーチンから同時かつ非同期に 呼び出されることが可能なプログラムルーチンのことである。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2006年9月20日 [5] その他の制限: よろしくお願いします。
>>420 #include <stdio.h>
#include <stdlib.h>
static char *linebuffer;
void free_linebuffer(void){
if(linebuffer) free(linebuffer);
linebuffer = NULL;
}
char *readline(FILE *fp){
static int size;
int i = 0, ch;
if(EOF == (ch = fgetc(fp))){
return NULL;
}
if(!linebuffer){
linebuffer = malloc(size = 256);
atexit(free_linebuffer);
}
do{
if(ch == '\n') break;
if(i >= size){
size *= 2;
linebuffer = realloc(linebuffer, size);
}
linebuffer[i++] = ch;
}while(EOF != (ch = fgetc(fp)));
linebuffer[i] = '\0';
return linebuffer;
}
422 :
デフォルトの名無しさん :2006/08/02(水) 18:47:59
>>421 ホントに助かります。
ありがとうございます!
423 :
赤鼻 ◆uh1FQt4ihg :2006/08/02(水) 19:07:37
質問があります。 超初心者で申し訳ありません。 C++コンパイラをダウンロードしたのですが、 インストールしようとすると、どうしても、 「パッケージを解凍するのに十分な空き容量がありません。 c:\に50MB以上あけて、再試行をクリックしてください」 と表示されます。 で実際にc:\の空き容量を見てみると、ちゃんと「76GB」の空き容量があるんです。 一体どうすればよいでしょうか?
424 :
90 :2006/08/02(水) 19:10:58
1 ただし改行文字('\n')は削除する。 2 static char *linebuffer=NULL; な 3 linebuffer[i] = '\0'; このとき落ちない?
>>423 ここは宿題スレ。質問は質問スレでね。
たぶん、昔のOSにしか対応していない古いインストーラ。
OSを昔のに戻してみたら?
427 :
赤鼻 ◆uh1FQt4ihg :2006/08/02(水) 19:19:49
>>425 実は、これも課題のうちなのです。
どうか、教えてください。
OSはWindows-XPです。
インストーラはFreeCommondlineTool2
というのをダウンロードしますた。
430 :
赤鼻 ◆uh1FQt4ihg :2006/08/02(水) 19:26:37
トリップついてるとこーいう時に便利なだ
>>426 ヌル文字の領域を確保してないようなきがする。
で、いま気づいたが改行ぜんぜんチェックしてないぢゃんw
433 :
381 :2006/08/02(水) 19:54:38
380,381作ってくれた人々ありがとうございます。
>>419 ページが見つかりません。
あとは
>>381 のB、Cですが、やってくれる方が居たらぜひお願いいたします。
>>420 #define BUFFER_SIZE 1
char *readLine(FILE *fp) {
size_t nbuf, n;
char *buf, *p;
int c;
c = fgetc(fp);
if (feof(fp)) return NULL;
ungetc(c, fp);
nbuf = BUFFER_SIZE;
n = 0;
buf = malloc(nbuf);
p = buf;
while ((c = fgetc(fp)) != '\n' && c != EOF) {
*p++ = c;
n++;
if (n > nbuf) {
buf = realloc(buf, nbuf *= 2);
p = buf + n;
}
}
*p = '\0';
return buf;
}
バッファが取れなくなったときとかの仕様がないのでそのあたりは無視
返り値を受け取った側でfreeすること
437 :
デフォルトの名無しさん :2006/08/02(水) 23:52:32
穴埋めです。 動画は(1)を連続的に表示したものである。紙に少しずつ動きが変化していくような漫画 を描き、パラパラとめくりなが眺めてみると、(2)により連続的に動いてみえる。 このようなパラパラめくりの漫画が動画の基本である。動画における、1枚1枚の連続した画像を (3)とよぶ。1秒あたりに再生する(3)数を(3)レートとよび、(4)であらわす。 3DCGで立体図形を描くには、まず、(5)とよばれる図形の輪郭をつくる。次に、 これらを並べたり、曲面をつくったり、表面の材質を決めたりして3次元の立体モデルをつくるための (6)を行う。さらに、そのモデルに陰影をつけたり、光を当てたりして、最終的に(7)を行う。
>>437 (1) とあるアイドルの日常
(2) 催眠術
(3) 為替
(4) 手書き
(5) コマ割り
(6) 生涯設計
(7) アイロンがけ
アリの巣コロリってあるじゃん。 蟻の行列にポンと置くと、一瞬ビックリして列が乱れる。 邪魔だなと言わんばかりに迂回する列が出来る。 そのうち好奇心旺盛な一匹がアリの巣コロリに入る。 そいつをマネして何匹も入る。 毒とも知らずにツブツブを運び出す。一匹が一粒づつ。 いつのまにか行列はアリの巣コロリが折り返し地点になる。 黄色い粒と黒い蟻が作り出す模様は綺麗で見てて楽しい。 一匹が一粒づつ、丁寧にせっせと毒の粒を運ぶ。 せっせと、せっせと、せっせと、せっせと。 蟻さんって働き者だなと思う。俺も頑張らなきゃなと思う。 次の日、あれほど沢山いて俺を困らせた蟻が一匹もいない。 ほんとにいない。探してもいない。泣きたくなった。 このレスを見た人は4日後にあなたの大切な人がいなくなるでしょう・・・・ それが嫌ならこのレスを5つの板にコピペしてください。 信じるか信じないかはあなた次第です。
断る
コピペに見せかけた宣伝じゃないのか?これ
去年、部屋にアリが入ってきて困ってたからアリの巣コロリ使ったけど 中身1つも持っていってくれなかったよ、マジうんこ
入ってるケースかなんかを割って直接おいとけばいけるんでない?
最終的に中身バラまいたけどダメだった、賞味期限切れてたかもな
447 :
デフォルトの名無しさん :2006/08/03(木) 10:40:19
>>446 まで読んで禿しくスレの本題からずれていることに気づく(´・ω・`)
アホな質問者コロリが欲しいって話じゃなかったのか(´・∀・`)
ろだ のNo.2525 です。 提出期限がかなり迫っているのに、まったく分かりません。 お願いします。
>1嫁
452 :
デフォルトの名無しさん :2006/08/03(木) 20:40:31
[1] 授業単元: コンピューター実習T [2] 問題文(含コード&リンク): 文字列から冗長なスペース(2つ以上スペースが連続)を1つのスペースにする関数を作成せよ。 また、スペースをアンダースコアにする関数を作成せよ。 例) abc def ghi (enter) abc def ghi abc_def_ghi ----------------------------以下、ひながた---------------------+ #include <stdio.h> int main( void ) { char str[ 256 ]; // scanf("%s",str); trim(str); puts( str ); sp_to_ub(str); puts( str ); } int trim( char s[] ) { } int sp_to_ub( char s[] ) { } [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 8月31日 [5] その他の制限: 特になし お願いします
>また、スペースをアンダースコアにする関数を作成せよ。 おっきした
>>454 >>452 のように最後に空白があると答えの最後にアンダースコアが付いてしまう
abc_def_ghi_
ってな感じで
>>456 最後のスペースに気づかなかった・・・orz
>>444 蟻にも種類があって、アリの巣コロリに見向きもしないタイプがある。
スーパーアリの巣コロリをオススメする。
100円くらい高いけどナー
>>456 int n=strlen(str);
for (;str[n] == ' ';n--);
str[n-1]='\0';
これでどうかな?
int trim(char s[]) { char *from; char *to; #define is_space(c) ((c) == ' ') if (s[0] == '\0') return 0; for (from = to = s+1; *from != '\0'; from ++) { if (!is_space(*from) || !is_space(*(from-1))) *to++ = *from; } // Remove trailing spaces... for (--to; to >= s; to--) if (!is_space(*to)) break; *(++to) = '\0'; return (int)(to -s); }
>>451 申し訳ない。
単元:プログラミング演習
環境:WindowsXP
言語:Visual C++
課題内容
Q1:30個の整数を乱数により生成し、単純ソートを行うプログラムを作成せよ。
Q2:単純ソート、バブルソート、クイックソートの考え方に基づきソートを行い、結果と
各々のプログラムでデータの交換の回数(上の単純ソートのプログラムではSwapDataを
呼び出した回数)、データの比較の回数(data[i] > data[j]を行った回数 )を表示する
プログラムを作成しなさい。
ポインタからファイル処理の基本までしか分からない状態でして手が出ません。
宜しくお願いします。
単純ソートとバブルソートって違うんだっけ?
>>462 >>1 それに単純ソートってなんだ?
単純選択ソート、単純選択ソート、単純交換ソートなら聞いたことがあるが
単純ソートというのは聞いたことが無いな
>>462 #include<stdio.h>
#include<stdlib.h>
#include<time.h>
void swap(int*, int*);
int main(void){
int num[30], i, k;
srand((unsigned int)time(NULL));
for(i=0; i<30; i++){
num[i] = rand();
}
for(i=0; i<29; i++){
for(k=i+1; k<30; k++){
if(num[i] > num[k])swap(&num[i], &num[k]);
}
}
for(i=0; i<30; i++){
printf("%d\n", num[i]);
}
return 0;
}
void swap(int *x, int *y){
int sw;
sw = *x;
*x = *y;
*y = sw;
}
単純ソート:最初に最も小さなデータを順番に探し出して並べること らしいです。(昇順に並べること)
バブルだの
>>466 さん ありがとうございます。Q1確認できました。
471 :
デフォルトの名無しさん :2006/08/04(金) 04:56:49
#include <stdio.h> int main(void) { float baz[10] = {7.64, 3.26, 6.85, 1.25, 4.18, 5.65, 9.72, 4.17, 5.63, 4.26}; int i, n, sum; n = 10; sum = 0.; for (i = 0; i < n; i++) { sum += baz[i]; } printf("総和は : %7.2f\n", sum); return 0; } コレを実行しても 計算結果のところが0.00って出てしまいます。 どうしたら正しい計算結果が表示されますか?
473 :
デフォルトの名無しさん :2006/08/04(金) 05:04:17
>>472 やはり実行結果は0.00になってしまいました・・
小数点以下の計算が出来ないのかなぁ?
float sum;
475 :
デフォルトの名無しさん :2006/08/04(金) 05:08:14
学期末のラッシュは終わった?
夏休みの宿題でデカいの来るんじゃないの?
最近面白い問題が少なくてさびしいです。
次のラッシュは8月末
俺もはよCまでやりたいよぉ〜〜〜〜
481 :
デフォルトの名無しさん :2006/08/04(金) 07:44:17
5人の学生の科目1, 2, 3の成績は表に示す通りである。 学生 科目1 科目2 科目3 総得点 平均点 1 62 85 73 * * 2 74 70 77 * * 3 76 82 65 * * 4 54 64 45 * * 5 87 90 78 * * 科目の平均点 * * * 2次元配列scoreに各学生の点数を記憶させ、表中の*印の箇所を埋め表を出力するプログラムを作成せよ。 ただし、学生iの科目jの点数を要素score[i][j]に記憶させるものとする。 [注意]学生1の科目1はscore[1][1]に代入させていること、すなわち、score[0][0]は使っていないことに注意する。 順調に進んでいた宿題もここで足止め食らってます^^; 宜しくお願いしますです^^
482 :
デフォルトの名無しさん :2006/08/04(金) 07:53:12
5人の学生の科目1, 2, 3の成績は表に示す通りである。 学生 科目1 科目2 科目3 総得点 平均点 1 62 85 73 * * 2 74 70 77 * * 3 76 82 65 * * 4 54 64 45 * * 5 87 90 78 * * 科目平均点 * * * 2次元配列scoreに各学生の点数を記憶させ、表中の*印の箇所を埋め表を出力するプログラムを作成せよ。 ただし、学生iの科目jの点数を要素score[i][j]に記憶させるものとする。 [注意]学生1の科目1はscore[1][1]に代入させていること、すなわち、score[0][0]は使っていないことに注意する。
483 :
デフォルトの名無しさん :2006/08/04(金) 07:54:17
5人の学生の科目1, 2, 3の成績は表に示す通りである。 学生 科目1 科目2 科目3 総得点 平均点 1 62 85 73 * * 2 74 70 77 * * 3 76 82 65 * * 4 54 64 45 * * 5 87 90 78 * * 科目平均点* * * 2次元配列scoreに各学生の点数を記憶させ、表中の*印の箇所を埋め表を出力するプログラムを作成せよ。 ただし、学生iの科目jの点数を要素score[i][j]に記憶させるものとする。 [注意]学生1の科目1はscore[1][1]に代入させていること、すなわち、score[0][0]は使っていないことに注意する。
484 :
デフォルトの名無しさん :2006/08/04(金) 07:55:04
連スレ申し訳ありません>< 宜しくおねがいします^^;
485 :
デフォルトの名無しさん :2006/08/04(金) 07:56:26
5人の学生の科目1, 2, 3の成績は表に示す通りである。 学生 科目1 科目2 科目3 総得点 平均点 1 62 85 73 * * 2 74 70 77 * * 3 76 82 65 * * 4 54 64 45 * * 5 87 90 78 * * 科目平均点* * * 2次元配列scoreに各学生の点数を記憶させ、表中の*印の箇所を埋め表を出力するプログラムを作成せよ。 ただし、学生iの科目jの点数を要素score[i][j]に記憶させるものとする。 [注意]学生1の科目1はscore[1][1]に代入させていること、すなわち、score[0][0]は使っていないことに注意する。
はい、次
おにゃのこの身体測定の結果を自動的に算出して なおかつ測定しているときの状況を説明をしてくれるプログラムをおながいします↓
490 :
デフォルトの名無しさん :2006/08/04(金) 10:36:18
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 5人の学生の科目1, 2, 3の成績は表に示す通りである。 学生 科目1 科目2 科目3 総得点 平均点 1 62 85 73 * * 2 74 70 77 * * 3 76 82 65 * * 4 54 64 45 * * 5 87 90 78 * * 科目平均点* * * 2次元配列scoreに各学生の点数を記憶させ、表中の*印の箇所を埋め表を出力するプログラムを作成せよ。 ただし、学生iの科目jの点数を要素score[i][j]に記憶させるものとする。 [注意]学生1の科目1はscore[1][1]に代入させていること、すなわち、score[0][0]は使っていないことに注意する。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:Borland C++ Compiler 5.5 [3.3] 言語: C言語 [4] 期限:8月7日(月) [5] その他の制限:while文 for文 配列あたりまで 宜しくお願いします^^
>score[0][0]は使っていないことに注意する。 score[5][0]もscore[0][3]も使ってないことに注意したら 気持ち悪くて書けないよ。
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 2chの任意のスレを複数登録・管理し、有益な情報が投稿されたときのみ通知、 所定のレスを指定して 2ch viewer 等を起動するプログラムをつくれ。 [3] 環境 [3.1] OS:特になし [3.2] コンパイラ名とバージョン:特になし [3.3] 言語: C言語 [4] 期限:8月28日(月) [5] その他の制限: スレの登録・管理についてはDBを使用しても構いませんし、 単純なテキストファイルでも問題ありません。 viewer のお気に入りと連動出来ると得点うpされます。 「有益な情報」の判定には、コテハン、あぽ〜んリストはもちろん、 自動文脈解析の手法等を用いて流れを嫁れば得点うpされます。
>>485 int score[6][4] = {
{ 0, 0, 0, 0, },
{ 0, 62, 85, 73, },
{ 0, 74, 70, 77, },
{ 0, 76, 82, 65, },
{ 0, 54, 64, 45, },
{ 0, 87, 90, 78, },
};
int i, j, sum;
for( i = 1; i < 6; i++ ){
sum = 0;
printf( "%d ", i );
for( j = 1; j < 4; j++ ){
printf( "%d ", score[i][j] );
sum += score[i][j];
}
printf( "%d %d\n", sum, sum / 3 );
}
printf( " " );
for( j = 1; j < 4; j++ ){
sum = 0;
for( i = 1; i < 6; i++ ){
sum += score[i][j];
}
printf( "%d ", sum / 5 );
}
495 :
お願いします :2006/08/04(金) 17:40:28
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 0〜99までの数がランダムに代入されているよう素数100個の配列を作成し、 10語とのヒストグラムを表示するプログラムを作れ。==A==の部分を埋めよ。 #include<stdio.h> #include<stdlib.h> #include<time.h> main() { int source[100]; int i; srand( (unsigned int)time(NULL) ); for(i=0;i<100;i++) source[i] = rand()%100; ==A== } [3] 環境 [3.1] 指定なし [3.2] 指定なし [3.3] 言語: C [4] 期限: 8月6日まで [5] その他の制限: 表示例↓ +==== 0- 9|**** 10-19|** 〜 90-99|******
496 :
デフォルトの名無しさん :2006/08/04(金) 17:42:03
[1] 授業単元:演習C [2] 問題文(含コード&リンク): 標準入力より入力された逆ポーランド表記の演算式を線形連結リストを 用いて演算するプログラムを作成せよ。 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: よくわからないです。 [3.3] 言語: C [4] 期限: 8月7日まで [5] その他の制限: 特にないはずです。 お願いします。
497 :
デフォルトの名無しさん :2006/08/04(金) 17:59:15
[1] プログラミング演習 [2] 問題文(含コード&リンク): aキーを押すと長方形が縮み、音が鳴って元に戻る。それを1つ以上並べる。 ┌─┐ ⌒ ┌─┐ │ │ → ⌒ 〜♪ → │ │ │ │ ┌─┐ │ │ └─┘ └─┘ └─┘ aキー [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:特になし。 [3.3] 言語: C言語 [4] 期限: 8月8日(火)まで [5] その他の制限: 特にないはずです。 宜しくお願いします。
何年か前、俺もよくここで答えをレスしていた。
しかし、ずっとプログラムを書いていなかったため
かなり忘れてしまったので、もう答えを書けない。
>>1 さんに以前頼んでおいた
>>495 int source[100];
int histogram[10];
int i, j;
srand( (unsigned int)time(NULL) );
for(i=0;i<100;i++) source[i] = rand()%100;
//==A==
for( i = 0; i < 10; i++ ) histogram[i] = 0;
for( i = 0; i < 100; i++ ) histogram[source[i]/10]++;
printf( " +==============================\n" );
for( i = 0; i < 10; i++ ){
printf( "%2d-%2d|", i * 10, i * 10 + 9 );
for( j = 0; j < histogram[i]; j++ ){
printf( "*" );
}
printf( "\n" );
}
こんなんでどうでっしゃろ?
出力時のズレ頑張って直してくれ
printf("\a"); でビープ音鳴るの普通に知らなかった
502 :
長々とすみまそん :2006/08/04(金) 22:57:33
[1] 授業単元: データ構造 [2] 問題文(含コード&リンク):データ(名前と数字)を任意の数、入力していって CTRL+Dで入力終了したらLIFOのように後にいれたもん順から出力されるプログラムがある。 データを入力し終わってからある名前を検索したいんだが、それがみつかれば新しいデータをそのデータの次にいれる。 みつからなければその新しいデータを先頭にいれるようにする。 <自分が作ったプログラム> #include<stdio.h> #include<malloc.h> #include <string.h> struct tfield{ char name[20]; /*名前*/ char tel[20]; /*電話番号*/ struct tfield *pointer; /*次のデータへのポインタ*/ }; struct tfield *talloc(void); int main(void) { struct tfield *head,*p,*q,*r; char *neim,ter,*word; head = NULL; q = talloc(); while(p=talloc(),scanf("%s %s",p->name,p->tel)!=EOF){ p->pointer=head; head=p; } r=talloc(); printf("探索したいデータを入力しなさい\n"); scanf("%s %s",r->name,r->tel);
503 :
長々とすみまそん :2006/08/04(金) 23:01:37
p=head; while(p!=NULL){ if (strcmp(r->name, p->name)==0){ printf("find %s\n",p->name); word = p->name; printf("追加データを入力する"); scanf("%s %s", q->name, q->tel); q->pointer = p->pointer; p->pointer = q; } p=p->pointer; } if(word != r->name){ printf("%s が見つからないので先頭に追加する\n", q->name); r->pointer = head; head = r; } p=head;/*表示*/ while(p!=NULL){ printf("%15s%15s\n",p->name,p->tel); p=p->pointer;} } struct tfield *talloc(void) /*記憶領域の取得*/ { return((struct tfield *)malloc(sizeof(struct tfield))); }
504 :
長々とすみまそん :2006/08/04(金) 23:02:19
<みつからなかったときの出力結果> aaa 111 bbb 222 ccc 333 ddd 444 探索したいデータを入力しなさい sfs 342 が見つからないので先頭に追加する sfs 342 ddd 444 ccc 333 bbb 222 aaa 111 <みつかったときの結果> aaa 111 bbb 222 ccc 333 ddd 444 探索したいデータを入力しなさい ccc 333 find ccc 追加データを入力するeee 555 eee が見つからないので先頭に追加する ccc 333 ddd 444 ccc 333 eee 555 bbb 222 aaa 111 という風にみつかったときもみつからなかったときも「eee が見つからないので 先頭に追加する」の文が出てしまうんですよ。このみつからないのでのif文の部分はどこにおけばうまいこと出力できますかね?
>>502-504 できれば丸投げの宿題の方がうれしい
ついでにプログラムやデータは
>>1 に書いてあるアップローダーを使ってもらうと見やすい
おいらは丸投げじゃないほうが好きだぞ。既出すぎる課題のときは特にな。
507 :
長々とすみまそん :2006/08/04(金) 23:14:27
#include<stdio.h> #include<malloc.h> struct tfield{ char name[20]; /*名前*/ char tel[20]; /*電話番号*/ struct tfield *pointer; /*次のデータへのポインタ*/ }; struct tfield *talloc(void); int main(void){ struct tfield *head,*p; head = NULL; while(p=talloc(),scanf("%s %s",p->name,p->tel)!=EOF){ p->pointer=head; head=p; } p=head; while(p!=NULL){ printf("%15s%15s\n",p->name,p->tel); p=p->pointer; } } struct tfield *talloc(void) /*記憶領域の取得*/ { return((struct tfield *)malloc(sizeof(struct tfield))); } 元のプログラムはこれで,出力結果がこれ aaa 111 bbb 222 ccc 333 ccc 333 bbb 222 aaa 111
508 :
長々とすみまそん :2006/08/04(金) 23:16:40
変数の型がごちゃごちゃになっててすみません リンク変数3つもつかってしまって 前判定のループだから、ループの中にはいれるわけにはいかないし 後判定のほうがいいのかなあ
型が云々以前に、解説文とソースがごちゃごちゃ書き込まれてて読む気になれない。 簡潔に問題点を書いてくれ。
見つかったら何を入れるって? 日本語が怪しいぞ。
511 :
あばよ :2006/08/04(金) 23:46:04
pがさしているリストの中のnameとtelがあるんだが nameと、入力した語とが一致した場合は その後に新しくリストにいれたい語をいれる。 一致しなかった場合はリストの先頭に、新しくリストにいれたい語をいれるんだけど pのループ中に一致する場合の動作は当然ループの中にいれないとだめですけども 一致しなかった場合はループが終わってからループの中に いれるべきなんですよね? でもループ終わった後に入れた場合、一致した場合も一致しなかった場合も どっちも一致しなかった動作をしてしまうことになるんですよ。 この一致しなかった場合の動作のプログラムをどこにいれるか迷ってるんです
>pのループ中に一致する場合の動作は当然ループの中にいれないとだめですけども >一致しなかった場合はループが終わってからループの中に >いれるべきなんですよね? >でもループ終わった後に入れた場合、一致した場合も一致しなかった場合も >どっちも一致しなかった動作をしてしまうことになるんですよ。 日本語がスパゲッティなんですけどwwww
513 :
あばよ :2006/08/04(金) 23:55:28
問題点は 探索したい語が一致しなかった場合の処理を pのループ中にするのか 終わった後にするのか これにつきます。 while文だとpがNULLになった瞬間に外にでるので ループの中に、一致しない処理をいれるわけにはいかない かといってループの外で処理させると 一致した場合も一致しない場合も処理してしまうんです
ループの外で、検索Hitしたかどうかを判定すればいいじゃん。
>while文だとpがNULLになった瞬間に外にでるので p->pointerを見ればいいだけのことじゃね?
とりあえず見つからなかったことの判定を if (p == NULL) にしてみたら? あと混乱してるようだからきれいに書き直したほうがいいね。
検索Hitしたら何もせずに break; で抜けたあとに、pがNULLなら一致なし時の処理、pがNULL出なければ一致ありの処理。 で、いい。
518 :
デフォルトの名無しさん :2006/08/05(土) 00:16:20
520 :
デフォルトの名無しさん :2006/08/05(土) 00:27:36
>>519 すみません、忘れてました。
今、アップしときました。
問題文が長くて申し訳ないです。
521 :
デフォルトの名無しさん :2006/08/05(土) 00:57:16
[1] 授業単元: ソフトウェア演習 [2] 問題文(含コード&リンク): 以下要求仕様に従って「家計簿アプリケーション」を作成せよ。 要求仕様 ●UNIXの環境上で動作し、主開発言語としてC言語を用いる。 ●1レコード中に 商品名、商品を買った日付、価格、分類の各項目を持つ。分類とは 食費、光熱費、 学費、交通費、レクレーション等の項目を表す。 ●家計簿として以下の機能を有する。 ― 週間 及び 月間の予算が入力できる。 ― 買った商品のデータを追加保存、読み出しができる。 ― 誤って入力したデータの任意の項目に対して、修正が可能である。 ― あらかじめ設定されている分類項目の他に、新たな分類項目を追加、削除できる。 ― レコード内の任意の項目をキーとして検索、ソート(昇順、降順)が可能である。 ― 週間及び 月間の支出について、分類毎に集計できる。 ― 週間 及び 月間の 予算残額等を表示できる。 ― 以上の機能を任意に選択し、実行できる。 ●上記の機能に対して、創意工夫がなされている。もしくは、新たに機能を追加してある。(機能拡張) [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: cc [3.3] 言語: C言語 [4] 期限: 8月8日まで [5] その他の制限: 特に無いと思います。 丸投げですがよろしくお願いします
522 :
デフォルトの名無しさん :2006/08/05(土) 01:15:23
(1) 授業単元:プログラム演習 (2) 問題文 2〜10,000までの完全数をすべて求めて出力するプログラムを作成せよ。 完全数とは自分自身を除く約数の和がその数に等しいもので たとえば6は自分自身を除いた約数の和が1+2+3=6で完全数。 (3) 条件:C言語でお願いします (4) 期限:8月6日夕方まで (5) その他とくになし
>>522 #include<stdio.h>
int main(){int i,j,sum;
for(i=2;i<=10000;i++){sum=0;
for(j=1;j<i;j++)if(i%j==0)sum+=j;
if(sum==i)printf("%d ",i);}
return 0;}
なんか効率が悪そうだけど反省してない。
>>150 MAX_INT か INT_MAX じゃない?
528 :
527 :2006/08/05(土) 07:49:10
529 :
デフォルトの名無しさん :2006/08/05(土) 09:23:50
530 :
デフォルトの名無しさん :2006/08/05(土) 10:30:18
[1] 授業単元: プログラムC言語 [2] 問題文(含コード&リンク): 2つの分数の値を入力し、入力された分数の四則演算を行うプログラムを 関数を用いて作れ。分数は分母分子を分けて入力し、出力も計算結果の分数がわかるように出力。 [3] 環境 [3.1] OS: 指定なし [3.2] コンパイラ名とバージョン: 指定なし [3.3] 言語: C [4] 期限: 8/7 [5] その他の制限: 授業テーマは「関数」 です。 よろしくお願いします。
>>501 俺らのところじゃ"\7\7\7 "とかやたらと書いてたなw
(\a〜=\7)
>(\a〜=\7) いいえ。それはたまたまASCIIのときに成立するだけです。
日下部スレかとおもた
534 :
デフォルトの名無しさん :2006/08/05(土) 15:17:22
535 :
デフォルトの名無しさん :2006/08/05(土) 15:31:33
sub $1,$2 (゚д゚ )
537 :
デフォルトの名無しさん :2006/08/05(土) 18:46:01
うpろーだに上げるほどの問題かよ
じゃあ、サクっと答えてやれ
541 :
540 :2006/08/05(土) 20:59:59
ごめん、数え漏れがあった。
542 :
540 :2006/08/05(土) 21:47:40
543 :
デフォルトの名無しさん :2006/08/05(土) 22:14:22
[1] 授業単元: プログラミング演習C言語(関数) [2] 問題文:ふたつの整数a,bの最大公約数をgcd(a,b)とする。 gcd(a,b) = { ・a= (b=0) ・gcd(b, a mod b) (b>0) である。これを利用し、2数の最大公約数と最小公倍数の両方を求める プログラムを関数を用いて作成せよ。 [3] 環境 [3.1] OS: 指定無し [3.2] コンパイラ名とバージョン: 指定無し [3.3] 言語: C [4] 期限:8月7日
[1] 授業単元: プログラミング演習C言語(関数) [2] 問題文: mとnを引数とし、m個のものからn個のものを選ぶ組み合わせ mCnを求める プログラムを関数を用いて作成せよ。このプログラムを再起を用いた場合 と用いない場合の両方を作成しそれぞれの特徴について考察せよ。 ※参考 ・mCn = m! / n!(m-n)! (直接計算) ・mCn = m-1Cn + m-1Cn-1 , mC0 = mCm = 1 (漸化式を用いた式) [3] 環境 [3.1] OS: 指定無し [3.2] コンパイラ名とバージョン: 指定無し [3.3] 言語: C [4] 期限:8月7日 2つ続けてレスさせてもらいました。どうかおねがいします。
>>545 #include<stdio.h>
int main(void){
int m, n, num1=1, num2=1, i;
printf("m?:"); scanf("%d", &m);
printf("n?:"); scanf("%d", &n);
for(i=1; i<=m; i++){
num1 *= i;
}
for(i=1; i<=n; i++){
num2 *= i;
}
for(i=1; i<=m-n; i++){
num2 *= i;
}
printf("%dC%d = %d\n", m, n, num1/num2);
return 0;
}
>>545 #include<stdio.h>
int func(int m, int n);
int main(void){
int m, n;
printf("m?:"); scanf("%d", &m);
printf("n?:"); scanf("%d", &n);
printf("%dC%d = %d\n", m, n, func(m, n));
return 0;
}
int func(int m, int n){
if(m==n || n==0)return 1;
return func(m-1, n) + func(m-1, n-1);
}
>>544 #include<stdio.h>
int gcd(int a, int b){
int t;
if(b==0) return a;
if(b>0) return gcd(b,a%b);
}
int lcm(int a, int b){
return a*b/gcd(a,b);
}
int main(){
int a=17,b=11;
printf("gcd(%d,%d)=%d\n",a,b,gcd(a,b));
printf("lcm(%d,%d)=%d\n",a,b,lcm(a,b));
return 0;
}
テキトー 検算よろ
>>548 >ふたつの整数a,bの最大公約数をgcd(a,b)とすると、
> ~~~~~
> ・a= (b=0のとき)
>gcd(a,b) = {
> ・gcd(b, a mod b) (b>0のとき)
>
>である。
です。書き方がまずかったですかね・・・すいませんm(_ _)m
>>549 のgcdは
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
これで平気みたい?つかtとかどこにも使ってねえよ
[1] 授業単元: プログラミング実習 [2] 問題文: 整数 m と n をキーボードから入力し、 m <= n の場合は m から n までの和を出力し、 新たに m n の入力を促し上記動作を繰り返す。 m > n の場合はエラーを表示して終了する。 [3] 環境 [3.1] OS: 特になし [3.2] コンパイラ名とバージョン: 特になし [3.3] 言語: C [4] 期限:8月8日 よろしくお願いします。
>>552 #include<stdio.h>
int main(void){
int m, n, sum, i;
while(1){
printf("m:"); scanf("%d", &m);
printf("n:"); scanf("%d", &n);
if(m > n){
puts("ERROR!");
break;
}
sum = 0; i = m;
while(i <= n){
sum += i;
i++;
}
printf("%d〜%dの和:%d\n", m, n, sum);
}
return 0;
}
>>552 既に回答でてるが
>>553 より高速な事が自慢だ
#include<stdio.h>
int main(void){
int m, n;
while(1){
printf("m:"); scanf("%d", &m);
printf("n:"); scanf("%d", &n);
if(m > n){
puts("( ^ω^)=3プッ");
break;
}
printf("%d〜%dの和:%d\n", m, n, (m+n)*(n-m+1)/2);
}
return 0;
}
あ〜確かに・・・そんな式あったね中学の頃 忘れてた
>>554 を俺なりに改造してみたのが自己満足だ
printf("%d〜%dの和:%d\n", m, n, ((n*(n+1))/2) - (((m-1)*(m)) /2));
原理は1〜nまでの和が n(n+1)/2 で表せて、その式をつかって
1〜m-1までの和を求めて引いてみた
プ
うわっ、くせっ。誰だよ、屁をこいた香具師は?
オ、オレじゃないぞっ!
っつか等差数列の和の公式、初項a、公差d、末項l、項数nにおいて Sn = n/2(a+l) = n/2{2a+(n-1)d}を使うとか
まぁ安全性から言うと
>>553 の方が上なんですけどね
Cスレはいつも低レベルですね
だいたい、問題の条件が公式を使うのか、順に計算をさせていくやり方でやるのか 明白に書いてないから、可能な手段でソースが出されて当然 自分の基準でレベルを決めている奴は論外 そいつ自身が知っていることだけでレベルを判断するからますます基準が曖昧
出題者の意図を推測すれば、十中八九 ループ+足し上げ を期待しているだろうな。
単なる式だけじゃプログラミングの演習としての価値は低いし、
中学校卒業してりゃ三角形の面積の公式なんぞ知らない訳がない。
でもまあ、問題文に特に明記されているわけでもないから、出題者も多少の例外は承知してるんだろ。
結論:好きに書け。
>>562 詳しく。
/* 演習3−5 */ #include <stdio.h> int main(void) { int n1, n2, n3, min; puts("三つの整数を入力してください:"); printf("整数1:");scanf("%d", &n1); printf("整数2:");scanf("%d", &n2); printf("整数3:");scanf("%d", &n3); min = n1; if (min > n2) min = n2; if (min > n3) min = n3; printf("最小値は%dです。\n", min); return(0); } これをif文ではなく、条件演算子を用いて書き換えるのが分かりません。 助け舟を出していただきたいです。 お願いします。
#include <stdio.h> int main(void) { int n1, n2, n3, min; puts("三つの整数を入力してください:"); printf("整数1:");scanf("%d", &n1); printf("整数2:");scanf("%d", &n2); printf("整数3:");scanf("%d", &n3); //min = n1; //if (min > n2) min = n2; //if (min > n3) min = n3; min = n1 > n2 ? n2: n1; min = min > n3 ? n3 : min; printf("最小値は%dです。\n", min); return(0); }
>>567 序受け演算子って単語がまだ分かりません。 ごめんなさい
>>568 そういうことでしたか。 勉強しなおしてきます。
どうも、ありがとうございました。
条件演算子を打ち間違えただけorz
//そうか、Cでも使えるんだね。。てっきりjavaだけかとおもたよ(?:)
歴史が違うわ!小僧が!
javaがパク(ry
574 :
562 :2006/08/06(日) 15:10:43
答えてもいいが puts("( ^ω^)=3プッ"); が気に入らん
>>565 >>562 じゃないけど (m+n)*(n-m+1)/2 の場合は
分子の (m+n)*(n-m+1) 部分が int の max を
超えてオーバーフローする可能性がループで
単純に足しこむ場合に比べて高いからってことでは
576 :
◆oBVIHc0QSg :2006/08/06(日) 19:21:11
【質問テンプレ】 [1] 授業単元: アナグラム 擬似英文 [2] 問題文(含コード&リンク): 以下3つから一つ選べ(難易度はA<B<C) A mss 長さn(n>=1)の整数列a0,a1,,,,,an-1が与えられたとき その部分列の和で最小のものを求める問題 (部分列の和 a1+a2+,,,aj(0=<j<n) 例、-8+3+-65+20+10→-8+3+-65) B /usr/share/dict/wordsの単語で構成されるアナグラムの数を数えるプログラム を作成せよ(関数だけでなく結果も出せるようにする) (大文字と小文字は区別しない。アナグラムの数とは互いにアナグラム になっている単語の集合の個数とする) C擬似英文。擬似英文をランダムに生成するプログラムを作成せよ。 (マルコフ鎖を利用するとよい。統計データは実際の英文を利用すること。 擬似英文とは実際のウィ文における単語のつながりかたの統計に もとずいて英単語をもっともらしくならべたものである。) [3] 環境 UNIX [4] 期限:明日5時 どれか一つでよいということです。よろしくお願いします
577 :
◆oBVIHc0QSg :2006/08/06(日) 19:25:16
すみません Aの問題について少し書き間違いをしました・・ もう一つの例では -31 41 -59 -26 53 -58 -97 93 23 -84 →-59+-26+53+-58+-97 となります 部分列の和とは ai+a(i+1)+....+aj(0=<i=<j<n) でした a0から始まる決まりはありますせん
俺もA #include <stdio.h> int main(){ int a[] = {-1,-3,8,-4,-7,3,-5,3,2,-4,5,7}; int L, R, sum = 0, min, minL, minR; sum = minL = minR = 0; min = a[0]; for(L = 0; L < sizeof(a)/sizeof(a[0])-1; L++){ for(R = L; R < sizeof(a)/sizeof(a[0]); R++){ if((sum += a[R]) < min){ min = sum; minL = L; minR = R; } } sum -= a[L]; } printf("ans : L=%d, R=%d, sum=%d\n", minL, minR, min); return 0; }
580 :
579 :2006/08/06(日) 22:31:28
sumクリアし忘れた。コレジャダメダ。
>>576 回答が欲しいなら、B/Cについては
・/usr/share/dict/words
・統計データ作成に用いる英文
この2つを用意するべきだと思うがどうか
A. 最小の部分和の問題。 relmin(int *a, int n, int *off, int *end) { int min = a[0], sum = 0, cur = 0, i; *off = *end = 0; for(i=0; i < n; i++) { sum += a[i]; if(min > sum) { min = sum; *off = cur; *end = i; } if(sum >= 0) { cur = i+1; sum = 0; }}} void main() { int S[] = {21,-8,-4,67,-9,8,-18,2,64}; int m1, m2; relmin(S, sizeof(S) / sizeof(*S), &m1, &m2); printf("区間 [%d, %d] で(゚听)Mi(b^-゜)n", m1, m2); }
う〜〜む、そろそろうpロダを使ってやりとりしてくれい ちょっとスレがごちゃごちゃし始めてる
>>581 どちらも質問者に聞くのは酷というものだ
585 :
◆oBVIHc0QSg :2006/08/07(月) 01:29:46
どうもありがとうございました!!
早速移させてもらいます!
>>581 問題文はこれで全てなのでわかりません。。
586 :
582 :2006/08/07(月) 01:58:38
>>586 質問者でもなんでもないんですが、興味があってコンパイルしてみて、
abc
bca
bbb
cdab
cbaa
というデータを与えてみたところ4になりました。
これ、2が正解じゃないんでしょうか?(そもそも「アナグラムの数」ってのが良くわからないんですが・・・)
あ、集合の個数か・・・。 だとしたら、1が正解だと思うんですが。
589 :
586 :2006/08/07(月) 02:34:01
>>589 コード読まずにごめんね。
>とソートしてみて、重複(互いにアナグラム)は(abc, bca)だけだから、4が答え。違うかな???
うん、そう。だから答えは1じゃないかなって。
bbb, cdab, cbaaはアナグラムなし。
ちなみに手持ちの辞書でやってみたら、以下のようになってビビッたので、小さいデータで試してみたんです。 アナグラムの数は 105809 だよ〜っっ!(b^-゜) real 0m1.224s user 0m1.170s sys 0m0.078s
592 :
589 :2006/08/07(月) 02:49:16
593 :
SDL :2006/08/07(月) 02:50:01
>>592 乙です。手持ちの辞書でも(多分)正しい値になりました。
アナグラムの数は 44597 だよ〜っっ!(b^-゜)
real 0m1.239s
user 0m1.186s
sys 0m0.046s
なぜこんなに爆速でチェックできるのか、ゆっくりとコードを見させていただきます。
>>593 もうちょっとヒントくれないときついな。bmpファイル含めて全部晒すかgdbの出力晒すかしてくんなきゃ。
596 :
デフォルトの名無しさん :2006/08/07(月) 04:25:43
少し変わった問題になりますが、いいでしょうか? 1)以下の連結リストに関するプログラムを処理内容はそのままで「新規入力データの連結リストへの挿入」に関する処理の効率が向上するよう改善したい。 プログラムのどの部分をどのように変更すればよいか。(必要に応じて新たな変数を定義してよい) 2)同様に、「新しく入力されたデータを連結リストの変更に加える(挿入する)」ように修正したい時、(以下同文)
597 :
デフォルトの名無しさん :2006/08/07(月) 04:26:14
static struct list head; void display_data(){ struct list *p p=head.next; while(p!=NULL){ printf("%3d →”,p->score); p=p->next; } printf("\n"); } void add_data(){ struct list *new_p,*p,*q; new_p=(struct list *)malloc(sizeof(struct list)); printf("データー"); scanf("%d",&new_p->score); new_p->next=NULL; q=&head; p=q->next; while(p!=NULL){ q=p; p=p->next; } q->next=new_p; }
598 :
デフォルトの名無しさん :2006/08/07(月) 04:28:02
void main(void){ int flag; head.next=NULL; while(1){ printf("新しくデータを入力しますか?(1:はい、0:いいえ\n");scanf("%d",&flag); if(flag==0)break; add_data(); } printf("データの一覧を表示します\n"); display_data(); } プログラム最上部に以下の文が抜けてました。 #include<stdio.h> #include<stlib.h> struct list{ int score; struct list *next; };
最後尾にあるデータを指すポインタを付け加えればいいだろ。
600 :
デフォルトの名無しさん :2006/08/07(月) 04:34:28
おい皆聞いたか!?日本Microsoftがニートの為に新しく開発環境を出すんだと!! その名も "Visual Studio .NEET 2007" Vistaには .NEET Framework v1.0が組み込まれるらしい。。
激しくつまんねから、次の宿題丸投げの人どうぞ
いいから寝ろ
こんな時間からしょうもない
604 :
SDL 593 :2006/08/07(月) 04:49:22
>>593 既に書かれてるがコンパイルして実行できる完全な形で一式上げるか
デバッガの出力書くべきだな
ライブラリ使ってるから、ライブラリの使い方を間違ってのエラーなのか
そもそもライブラリと全く関係ない所でとちってるのかも切り分けないとダメだしな
>>604 コマンドに-gをプラスで
gdbの使い方はぐぐればマニュアル見つかるのでその辺から
607 :
デフォルトの名無しさん :2006/08/07(月) 06:16:34
とんでもない誤爆はさておき、次の方どうぞ
610 :
SDL 593 :2006/08/07(月) 08:24:03
>>595 >>605 >>606 3つのファイル合体させてgdbやってみました。
Program received signal SIGSEGV, Segmentation fault.
0x00401a80 in draw_trump (trump1=0x407740) at g.c:352
352 trump[index].x = trump1->x;
(gdb)
こうなりました。先生の作ったトランプ用プログラムのなかの
draw_trump関数のtrump[index].x = trump1->x;でセグメントエラーがでてるみたいです。
途中までは普通に動作するのになぜ急にここで引っかかっちゃうんでしょうか?
カンだけど手札が4枚未満になったときの描画じゃないかな。 trump1->suiteかnumberが-1になってるとか。gdbで where でトレースみれるのと あと p だか print だか忘れたけど変数値が表示できるはず。がんがれ。
index = (trump1->card->suit-1)*13 + (trump1->card->number-1);/*1次元配列への変換*/ /*printf("%d %d %d\n",index,trump1->card->suite,trump1->card->number);*/ ここの printf の結果は見た?
613 :
デフォルトの名無しさん :2006/08/07(月) 12:06:53
>>576 Aはプログラムを作れという問題ではなく、講義で
説明したプログラムについて説明しろという問題だよ。
意味分からん
615 :
SDL 593 :2006/08/07(月) 19:05:08
>>611 >>612 まさしくそこでした!
GDBで変数表示してみたら、4枚未満になったときに-1になってたので
とりあえずdraw_trump関数にif(trump1->card->number == -1) { return; }
を入れてみたら最後までゲームを進めることができました。
簡単なことなのに全然思いつかなかったな〜。
ありがとうございます。
616 :
デフォルトの名無しさん :2006/08/07(月) 21:00:29
int型の変数a,bの値がそれぞれ176、36のとき、式a│bの値は何か? 教えてください!
自分で確かめろ!
619 :
デフォルトの名無しさん :2006/08/07(月) 21:09:58
やりかたがわかりません。。解き方だけでもお願いします
>>619 スタート→プログラム→アクセサリ→電卓
表示から関数電卓にチェックを付けてあとは計算
1
2
>>616 そんなのも解らないやつはプロ1(E)の単位は取れなくても仕方ないよね。
10110000 00100100 10110100
626 :
デフォルトの名無しさん :2006/08/08(火) 00:13:23
| が or だと分からなかったとか・・? ごめんなんでもない・・
627 :
デフォルトの名無しさん :2006/08/08(火) 03:24:03
はじめまして。 プログラミング超初心者です。 こんなプログラムが作りたいのですがどなたかヒントをください。 バイナリーファイルのデータを取り込み、データの16進数を10進数にして テキストに書き出したいのです。 バイナリーデータを取り込み、バイナリーファイルのままで書き出す ことはできましたが、どうしてもテキスト形式になりません。 if ((fd = open(argv[1], O_RDONLY|O_BINARY)) < 0) { printf("not found :%s\n",argv[1]); return -1; この記述はおかしいでしょうか?
スレタイが読めない時点で頭の方がおかしい
>>627 あまり質問スレ化は歓迎しないのだが、課題の助言ほしいってのなら
>>1 に沿ってな
あとコードは全部提示、部分的に出すとロクなことにならん
というかfreadしたら(ry
631 :
デフォルトの名無しさん :2006/08/08(火) 11:31:03
[1] プログラミング [2] それぞれ1024個の時間データtaとyaデータのアレイ(配列) を用意する。 周波数f=2.0Hzとすると、1秒間に2回振動を繰り返す。 サンプリング間隔△t=1/1024のとき、1秒間に1024個のデータがとれる。(つまり、1Hzを512個サンプリング) 時間変動データ: ya=sin(2πft); t=i*△t 各自周波数fとサンプリング間隔△tを決め、時系列データを計算し、ファイルに納め、終了したのち、Excelを開いて描画しなさい。 [3] 環境 [3.1] WindowsXP [3.2] [3.3] C++ [4] 9/1まで [5] 特にありません C言語初心者で、全く分かりません。 宜しくお願いします。
cなのかc++なのか…
>>631 確保したtaは放置プレイ?
Excelを開いて描画するところまでプログラミングさせる問題ではないよね?
#include <fstream>
#include <math>
using namespace std;
int main() {
double const f = 2.0; // 周波数
double const dt = 1.0 / 1024.0; // サンプリング間隔
char const filename[] = "sin.dat"; // ファイル名
int const BUFSIZE = 1024;
double ta[BUFSIZE], ya[BUFSIZE];
for (int i = 0; i < BUFSIZE; i++) {
double t = i * dt;
ya[i] = sin(2.0 * M_PI * f * t);
}
fstream fs(filename, ios::out);
if(fs.fail()) return 1;
for (int i = 0; i < BUFSIZE; i++) {
fs << ya[i] << endl;
}
fs.close();
return 0;
}
634 :
633 :2006/08/08(火) 13:24:50
ごめん、時間も出力したほうがExcelで書きやすいよね #include <fstream> #include <math> using namespace std; int main() { double const f = 2.0; // 周波数 double const dt = 1.0 / 1024.0; // サンプリング間隔 char const filename[] = "sin.csv"; // ファイル名 int const BUFSIZE = 1024; double ta[BUFSIZE], ya[BUFSIZE]; for (int i = 0; i < BUFSIZE; i++) { double t = i * dt; ya[i] = sin(2.0 * M_PI * f * t); } fstream fs(filename, ios::out); if(fs.fail()) return 1; for (int i = 0; i < BUFSIZE; i++) { double t = i * dt; fs << t << "," << ya[i] << endl; } fs.close(); return 0; }
635 :
633 :2006/08/08(火) 13:33:46
もしかしてtaって時間の配列なのかな?もしそうなら、 一つ目のfor文の中の double t = i * dt; ya[i] = sin(2.0 * M_PI * f * t); を ta[i] = i * dt; ya[i] = sin(2.0 * M_PI * f * ta[i]); にして、 二つ目のfor文の中の double t = i * dt; を削除して、 fs << t << "," << ya[i] << endl; を fs << ta[i] << "," << ya[i] << endl; に修正。
636 :
デフォルトの名無しさん :2006/08/08(火) 14:05:24
637 :
631 :2006/08/08(火) 17:53:54
638 :
638 :2006/08/08(火) 18:07:58
礼には及ばん。
確かこの辺に自己レスして自己満足してる人がいたと思ったんですが・・・はて、どこかな?
640 :
デフォルトの名無しさん :2006/08/08(火) 22:44:44
[1] プログラミング演習 [2] 100円から100円刻みの価格の商品を扱っている店で1000円札、500円玉、100円玉を使い おつりのないように、商品を買う。使用できるコイン(100円玉、500円玉)の合計枚数が 何枚以下と制限されているときに、商品の値段とコインの制限枚数、を入力して可能な支払い方法を すべて出力するプログラムを作成せよ。 [3] 環境 [3.1] OS: 指定無し [3.2] コンパイラ名とバージョン: 指定無し [3.3] 言語: C [4] 期限: 8月9日水曜日いっぱい [5] その他の制限: ループ文を使う よろしくお願いします
1000円はいくらでも使える?
642 :
デフォルトの名無しさん :2006/08/08(火) 23:15:35
>>641 1000円札はお札でコインではないって意味だとおもいますので、OKかと。
643 :
デフォルトの名無しさん :2006/08/08(火) 23:37:10
[1] 授業単元:気象学特論 [2] 16進数のバイナリーデータ(240×240)を10進数(240×240)に直し、 txtまたはcsv形式にするプログラムを書きなさい。 また、読み込むバイナリーデータのファイルが10個あるとし、それらを 一度に処理できるプログラムに書き換えなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ指定なし [3.3] 言語:C言語を使用 [4] 期限:2006年8月12日までに、メールに添付ファイルで提出 [5] その他の制限:なし どうしたらいいのか。。よろしくお願いいたします。
>>643 バイナリデータの形式くやしく
1byteのが240*240なのか、4byteのが詰まってるのかとか
645 :
デフォルトの名無しさん :2006/08/08(火) 23:43:32
>>644 サイズは 2byte 240*240個と書いてありました。
240個ごとに何か挟まってたりするのかお? それとも2byteのが240*240個だーっと並んでるのかお?
647 :
デフォルトの名無しさん :2006/08/08(火) 23:49:06
>>646 データは左上を先頭にして右へと続いている
と書いてあります。
多分ダーッとならんでいるという事なのではないかと
思います。
私は超初心者なので、半月前から本読んでるのですが
全くわからなくって・・・・。
自分が受けた講義の課題なんだから、 超初心者であることがおかしいということに気づいた方がいい。
宿題というかレポート課題・・・おねがいしますm(_ _)m [1] C言語 [2] 整数をint型で入力し、上位桁から順番に書く桁の英語読みを出力するプログラムを 配列を使って作成 (例) 123を入力したらone two three と出力 負の数の時は「minus」と出力 [3] C言語 他にとくになし [4] 〜8/10 [5] 英語読みの出力にはSwitch文を利用
650 :
デフォルトの名無しさん :2006/08/08(火) 23:58:04
>>648 はい。ぜんぜんできなくてごめんなさい。
今後は努力します。
私、文系学部から理系の大学院に入学したのですが、
プログラミングに関しては全く触っていないのです。
他の院生の皆さんは今まで講義でやったことがあるようですが。
この講義は気象学なのになんでプログラムを組んでるんだろう
と思いながら、いろいろやったのですが、全くわかりません。
ごめんなさい。
そのバイナリデータは手元にないのか
652 :
デフォルトの名無しさん :2006/08/09(水) 00:06:18
バイナリーデータはサンプルがひとつ手元にあるのですが、 開き方がわからずに中がみれません。。
バイナリうp
654 :
デフォルトの名無しさん :2006/08/09(水) 00:08:48
どうやってあげればいいのでしょうか? アップローダラウンジを使用してもいいですか?
いいんじゃないか、宿題なんだし
[1] 情報工学演習 [2] 15ゲームを作れ。1から15までの数字が書かれた駒を4×4の盤面に置き、一つの 移動用の空いたマスを使って移動させ、最終的に1〜15までの順番通りに持っていく。 ゲームは適当な初期盤面を表示し、続いてプレイヤーが指定した駒(1〜15)を移動し 最終盤面に到達すれば終わりにするようにせよ。 ルール ・初期盤面は実行するごとに違うものを出すようにせよ。乱数(rand関数を使え) 必ず最終盤面に到達できるような初期盤面を作ること ・プレーヤーは毎回1から15までの数を入力するようにせよ。それ以外の数が入力されたら 再入力をするように促せ。また動かせない場合はエラーメッセージを出すようにせよ。 ・正しい駒番号を入力した場合は次の盤面を表示せよ。盤面は次のようなもので十分である。 +----+----+----+----+ | 1 | 12 | 3 | 10 | +----+----+----+----+ | 2 | 6 | 8 | 9 | +----+----+----+----+ | 13 | 7 | 4 | 5 | +----+----+----+----+ | 11 | 15 | 14 | | +----+----+----+----+ [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:今月いっぱい [5] その他の制限: 特になし 今の僕のレベルでは分かりません・・・よろしくお願いします。
↑すいません・・・大いにずれてしまいましたm(--)m
659 :
デフォルトの名無しさん :2006/08/09(水) 00:18:44
ろだにあげました バイナリーデータ 643 - 2006/08/09(Wed) 00:17 No.2568 です。よろしくお願いいたします。
660 :
デフォルトの名無しさん :2006/08/09(水) 00:40:06
あひゃ、scanf+sprintfじゃなくて、普通に getsもしくはfgetsでよかったかも・・・
662 :
デフォルトの名無しさん :2006/08/09(水) 00:44:03
>>661 あぁ投稿しようと思ったら負けた。。。
>[2] 整数をint型で入力し、
scanfのが問題の趣旨にあってるんじゃないw
gets使っちゃダメだよ
665 :
デフォルトの名無しさん :2006/08/09(水) 01:22:53
分からんのでお願いします ss[10]="abc" tt[10]="あいう" 2つの文字列を連結して"abあいう"をつくる(cを消す) にはどうしたらいい?? strncatでできるかな??
>>665 strcpy(&ss[2], tt);
668 :
665 :2006/08/09(水) 01:40:36
>>666 あざーす
>>667 よく分からなかったのは
半角文字列と全角文字列を連結する方法。
半角文字列の一部と全角文字列
全角文字列の一部と半角文字列
の2つのパターンをどう処理するか。
説明不足&すれ違いすまそ。
669 :
デフォルトの名無しさん :2006/08/09(水) 02:00:35
宿題が終わらない・・・。
丸投げすればいいじゃない
674 :
デフォルトの名無しさん :2006/08/09(水) 05:19:07
>>673 ありがとうございます。しかしどうにかC言語では無理でしょうか?
>>674 ん?理屈や言語の仕様、制御できるものからして、C言語でも出来るよん。
ただ、まんどっちぃから俺はパスw
CUIで盤面作るのがまんどくさい
>>657 は数字の周りに盤面も表示させるのか・・・面倒くさいのぉ・・・やってみようかのぉ・・・
> 今月いっぱい
とのことだから、とりあえず待つべし
盤面表示(二次元配列の場合) int x, y; int grid[4][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0}; printf("\033[2J"); printf("\033[0;0H"); for (y = 0; y < 4; y++) { printf("+----+----+----+----+\n"); for (x = 0; x < 4; x++) { if (grid[y][x] > 0) { printf("| %2d ", grid[y][x]); } else { printf("| "); } } printf("|\n"); } printf("+----+----+----+----+\n");
>>673 クリアするのにちょっくら時間かかったぜ
>>680 キターーーー!けど、やっぱCUIは操作性が悪いのぉ・・・
>>680 >>681 ありがとうございます!って今外にいるんであれなんですけどこれは
Linuxで動くんですよね??
685 :
デフォルトの名無しさん :2006/08/09(水) 14:50:19
>>640-642 の課題、どなたか教えていただけませんか
今日が締め切りなのですができません・・・orz おながいします
いや自分でも解けよと
687 :
デフォルトの名無しさん :2006/08/09(水) 15:23:27
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): データファイルから国語の点と数学の点の平均値を求める関数があり、 それぞれ男女別に計算される ただし、関数の第一引数は構造体TEST、第二引数は国語・数学を区別するフラグ(国語0、数学1)、 第3引数は性別(男性1、女性0)、返し値は算出された平均値(double型)とする データファイル(datファイル)は 番号 国語 数学 男女(男1、女0) 1 40 50 0 2 50 43 1 3 56 56 0 という感じです [3] 環境 [3.1] OS:linix [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 今日中 お願いします!
宿題というかただのこういう関数があります、という報告
>>687 まぁ関数を作れって課題なんだろうけど、TEST構造体がワカンネ
691 :
デフォルトの名無しさん :2006/08/09(水) 16:10:38
すいません、もう一度自分で考えてみます… すいませんでした
>>685 #include <stdio.h>
#define NUM 2
int main(){
int price, coin[NUM] = {500, 100}, coin_n[NUM], i, coin_max[NUM], tmp, j, k;
printf("値段 = ");
scanf("%d", &price);
while (price / 1000) price %= 1000;
for (i = 0; i < NUM; i++) {
printf("%d円硬貨の枚数 = ", coin[i]);
scanf("%d", &coin_n[i]);
coin_n[i] = coin_n[i] > price / coin[i] ? price / coin[i] : coin_n[i];
}
printf("お釣り : \n");
if (price / coin[1] == coin_n[1]) printf("%d円 %d枚\nor\n", coin[1], coin_n[1]);
for (i = 0; i < NUM; i++)
if (price / coin[i]){
printf("%d円 %d枚\n", coin[i], price / coin[i]);
price %= coin[i];
}
return 0;
}
694 :
デフォルトの名無しさん :2006/08/09(水) 16:23:56
691=687です。たびたびすいません
695 :
デフォルトの名無しさん :2006/08/09(水) 16:40:01
宿題に対してコード出す人って本職? 作ろうとしたけど全然レベルが違う(´・ω・`)
本職の人も居るだろうな。 俺は違うけど。
どのへんが?
while(price / 1000) price %= 1000; (´Д`;)
1000円ていくらでもつかえるんじゃね
701 :
デフォルトの名無しさん :2006/08/09(水) 17:10:35
・コインの枚数は合計枚数 ・おつりはなし
#include <stdio.h> void hikaku_irekae(int a, int b); int main(void){ int x, y; printf("Please input an integer\n"); scanf("%d", &x); printf("Please input an integer\n"); scanf("%d", &y); printf("[before]x=%d, y=%d\n",x, y); hikaku_irekae(x, y); printf("[after ]x=%d, y=%d\n",x, y); return 0; } void hikaku_irekae(int a, int b){ int tmp; if ( a < b ){ tmp = a; a = b; b = tmp; } } までつくったのはいいけど結果が[before]x=5, y=10[after ]x=5, y=10にならないのはどうしてですか? 誰かどうかお願いいたします!!!11
>>698 ・制限されるのは使用できるコインの「合計」枚数。
・「お釣り」って表示が意味不明
・千円札を最大まで使わない払いかたが考慮されない。
>>702 hikaku_irekae(&x, &y);
void hikaku_irekae(int* a, int* b){
int tmp;
if ( *a < *b ){
tmp = *a;
*a = *b;
*b = tmp;
}
}
#include <stdio.h> void hikaku_irekae(int a, int b, int c); int main(void){ int i, data[3]; for (i=0; i<3; i++){ printf("Please input an integer\n"); scanf("%d", &data[i]);} printf("[before]x=%d, y=%d, z=%d\n",data[0], data[1], data[2]); hikaku_irekae(data[0], data[1], data[2]); printf("[mid]%d\n",data[1]); return 0;} void hikaku_irekae(int a, int b, int c){ int i, j, tmp, data[3]; data[0]= a;data[1]= b;data[2]= c; for (i=0; i<3; i++){ for (j=i+1; j<3; j++){ if (data[i]<data[j]){ tmp=data[i]; data[i]=data[j]; data[j]=tmp; }}} data[1]=-999; } キーボードから入力される3つの整数について,その中央値を出力することを意図して作成された.しかし,正しく動作しない. (1)正しく動作しない理由を分かりやすく説明しなさい。(図を用いるなど、説明方法は自由) (2)関数部分をint型として、正しく動作するように直し, 実行結果等を添えて説明しなさい. (3)関数部分をvoid型として、正しく動作するように直し, 実行結果等を添えて説明しなさい. (4)(関数部分をvoid型とした)同様のプログラムで、ソート(並べ替え)プログラムを作成しなさい。ソートの方法は特に指定しない どうか今日中にお願い致します。
708 :
デフォルトの名無しさん :2006/08/09(水) 17:26:51
>>702 before>void hikaku_irekae(int a, int b);
after>void hikaku_irekae(int *a, int *b);
before>hikaku_irekae(x, y);
after>hikaku_irekae(&x, &y);
あとhikaku_irekae関数のなかの a,bを *a ,*bとする。
710 :
707 :2006/08/09(水) 17:29:19
711 :
デフォルトの名無しさん :2006/08/09(水) 17:31:11
>>685 #include <stdio.h>
int main(int argc, char* argv[])
{
int price, max_coins, n, i, j, k, l;
do{
printf("値段を入力してください:");
scanf("%d",&price);
}while(price % 100);
printf("合計を入力してください:");
scanf("%d",&max_coins);
for(i = price / 100, j=0; i >= 0; i-=5, j++)
for(k=j, l=0; k>=0; k-=2, l++)
if(i+k0 <= max_coins)
printf("100円 %d枚, 500円 %d枚, 1000円 %d枚\n", i, k, l);
return 0;
}
趣味
$_ = s/\t/ /g; (´・ω・`)
714 :
711 :2006/08/09(水) 17:37:10
>>711 変なところに0がはいってる。
if(i+k0 <= max_coins)は正しくはif(i+k <= max_coins)ね
int c=0; printf(c/c++); 答えは? A.0 B.1 C.∞
716 :
707 :2006/08/09(水) 18:01:28
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): キーボードから入力される3つの整数について,その中央値を出力することを意図して作成された.しかし,正しく動作しない. (1)正しく動作しない理由を分かりやすく説明しなさい。(図を用いるなど、説明方法は自由) (2)関数部分をint型として、正しく動作するように直し, 実行結果等を添えて説明しなさい. (3)関数部分をvoid型として、正しく動作するように直し, 実行結果等を添えて説明しなさい. (4)(関数部分をvoid型とした)同様のプログラムで、ソート(並べ替え)プログラムを作成しなさい。ソートの方法は特に指定しない [3] 環境 [3.1] OS: linax [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 明日 [5] その他の制限: ポインタ、関数
不定
>>715 十中八九segmentationFaultで異常終了する。
仮にprintf("%d", c / c++)だったとすると、divisionByZeroで異常終了。
ArithmeticException
>>718 なんで零除算の前にsegmentation faultが発生するんだ?
721 :
718 :2006/08/09(水) 18:19:01
>>707 #include <stdio.h>
void hikaku_irekae(int *data, int size);
int lt_int(void *a, void *b);
int main(void)
{
int i, data[3];
for (i = 0; i < 3; i++) {
printf("Please input an integer\n");
scanf("%d", &data[i]);
}
printf("[before]x=%d, y=%d, z=%d\n", data[0], data[1], data[2]);
hikaku_irekae(data, sizeof(data) / sizeof(int));
printf("[after]x=%d, y=%d, z=%d\n", data[0], data[1], data[2]);
printf("[mid]%d\n", data[1]);
return 0;
}
void hikaku_irekae(int *data, int size) {
qsort(data, size, sizeof(int), lt_int);
}
int lt_int(void *a, void *b) {
return *(int *)a - *(int *)b;
}
723 :
デフォルトの名無しさん :2006/08/09(水) 19:31:53
643です。 どなたかお願いします!! ヒントだけでもください。
>>723 そのバイナリデータなんだけど、ファイルサイズから見ても2x250x256なんだよね。
単純に2x240x240だとファイルが余るし、データの規則性が崩れるんだけど
どんなフォーマットで入ってるの?
#例えば256ライン分のデータがあって、先頭に必ず10バイトのヘッダがあるとか。
その辺が判らないとなんともならんよ。
##そもそも-266だらけで何をどうしていいのやら。
725 :
デフォルトの名無しさん :2006/08/09(水) 20:24:12
>>724 どうもありがとうございます。
先生から答えになるものも渡されていて、それを見ると
たしかに-266ばかりです。
そちらもろだにあげてみます。
726 :
643 :2006/08/09(水) 20:28:18
バイナリーを変換した答え 643 - 2006/08/09(Wed) 20:26 No.2576 2576.zip でろだをお借りしました。 どうぞよろしくお願いいたします。 csvで入っています。
>>726 のはこんな感じ?
#include <stdio.h>
#define SIZE 240 * 240
int main()
{
short data[SIZE];
FILE *fp;
if ((fp = fopen("PR20060526-13.pol", "rb")) == NULL) return -1;
fread(data, sizeof(data[0]), sizeof(data) / sizeof(data[0]), fp);
fclose(fp);
if ((fp = fopen("output.txt", "w")) == NULL) return -1;
int i = 0;
while (i < SIZE)
fprintf(fp,"%d%c", data[i++], i % 240 ? ',' : '\n');
fclose(fp);
return 0;
}
別解答 件のデータは末尾にゴミがついてるみたいね #include <stdio.h> #include <stdlib.h> struct Wether {  short elem[240][240]; }; int main() {  struct Wether *wether;  int i;  int j;  wether = (struct Wether *)malloc(sizeof(struct Wether));  fread(wether, sizeof(struct Wether), 1, stdin);  for (i = 0; i < 240; i++) {    for (j = 0; j < 240; j++) {      fprintf(stdout, "%d", wether->elem[i][j]);      if (j < 240 - 1)        fprintf(stdout, ",");    }    fprintf(stdout, "\n");  }  free(wether); }
ミスった、ごめん #include <stdio.h> #include <stdlib.h> struct Wether { short elem[240][240]; }; int main() { struct Wether *wether; int i; int j; wether = (struct Wether *)malloc(sizeof(struct Wether)); fread(wether, sizeof(struct Wether), 1, stdin); for (i = 0; i < 240; i++) { for (j = 0; j < 240; j++) { fprintf(stdout, "%d", wether->elem[i][j]); if (j < 240 - 1) fprintf(stdout, ","); } fprintf(stdout, "\n"); } free(wether); }
730 :
643 :2006/08/09(水) 21:30:45
>>727 >>728 >>729 うわあ、、すごくはやい。
ありがとうございます!
自分でもやってみます。
ずうずうしいのですが、もうひとつの
10ファイルを連続で読み込むプログラムは
どういう方向性で考えたらいいのでしょうか?
>>730 引数でファイル名を10個以下受け取って、その数だけ同じことを繰り返す。
732 :
643 :2006/08/09(水) 21:32:55
さらにもうひとつですが 先生にメールで問い合わせたところ、 私のバイナリーデータは125*512のものが間違って きている可能性があるそうです・・・。 なので、ご指摘に間違いはありませんでした。 ありがとうございました。
733 :
643 :2006/08/09(水) 21:35:58
引数で? それはDOS窓から名前を打ち込む感じですか?
#include <stdio.h> void convert_csv(char *filename) { printf("convert %s\n", filename); /* がんばる */ } int main(int argc, char **argv) { int i; for (i = 1; i < argc; i++) { convert_csv(argv[i]); } }
usage: convert_csv [FILE1] [FILE2] ...
Windowsだとこれドラッグ・アンド・ドロップでいけるかも。 今これLinuxだから確認できん。
737 :
707 :2006/08/09(水) 22:02:14
>>722 ありがとうございました!これでなんとか単位とれそうです!!
これって何番の解答ですか?
738 :
643 :2006/08/09(水) 22:03:12
連続って想像がつかないです・・・。 明日の朝まで自力でがんばってみます。 さらにずうずうしいのですが、 どなたか、 「コマンドラインからファイル名を指定し、指定したファイル10個を 連続で変換するプログラム」 をお願いいたします。
なんかここ小学生相手してるみたいで面白いね。 でも単位は諦めたほうがいいと思うよ。
742 :
707 :2006/08/09(水) 22:26:57
>>741 プログラミングさっぱりわからなくて、きっと小学生以下ですねありがとうございました。
できれば(1)〜(3)も教えていただけますか、お願いします。
最近の大学はペーパーテストやらないのかね
744 :
707 :2006/08/09(水) 22:46:31
>>743 プログラミングの授業だけレポートだけでいいのです。
こんなに難しいなんて思わなかった・・・
いや、どうみても無茶苦茶楽なレポートです。単に書くのがメドイだけ。 1)はスコープが違うから2),3)はそれぞれ適当に書き換えるだけ。 まぁ、わからんなら単位落としたほうが世のためと思う。
s/メドイ/メンドイ/ にゃはは(^Д^) 間違えちった。
>>745 >まぁ、わからんなら単位落としたほうが世のためと思う。
大学行ってない奴って、こういうこと言いがちだよね。
748 :
707 :2006/08/09(水) 23:21:19
>>747 大学行ってる奴だが、わからないなら落とした方がいいと思うよ
1教科くらい落としても余裕だろ
>>749 取れるなら取ったほうがいいだろ。
お前の周りも、わからないのに単位取りまくりな奴だらけのはずだ。
>>750 うちの大学はレベルが低いから、わからないやつはガンガン単位落としてるぜ
相変わらず盛り上がってるのかと思ったら、もう答え出てるじゃまいか レポート部分は、このスレじゃあまりやる人がいない+自分の言葉で書いておかないと ボロが出るだけだから、適当に埋めちまえ
>>751 レベルが低いからじゃなくて、怠惰だからでしょ。
人に解かせて単位を取得するのは怠惰じゃないとでも言いたいのかな
755 :
643 :2006/08/09(水) 23:36:26
>>727 少しだけ書き換えました。
これで正常にコンパイルできました。
#include <stdio.h>
#define SIZE 240 * 240
int main()
{
int i;
short data[SIZE];
FILE *fp;
if ((fp = fopen("PR20060526-134600.pol", "rb")) == NULL) return -1;
fread(data, sizeof(data[0]), sizeof(data) / sizeof(data[0]), fp);
fclose(fp);
if ((fp = fopen("output.txt", "w")) == NULL) return -1;
i=0;
while (i < SIZE)
fprintf(fp,"%d%c", data[i++], i % 240 ? ',' : '\n');
fclose(fp);
return 0;
}
ただ、一番初めの数字が139が一個だけ上の行になってしまうのですが、
どこを書き換えればいいのでしょうか?
>>754 そのようなことすらしなくて、単位を落とすことを怠惰だと言ってるんだけど。
757 :
707 :2006/08/09(水) 23:40:19
>>750 ありがとう、750さんの優しさ身にしみます
>>752 (1)はいいんですが(2)(3)がまだわからないんです。
そんなレベルなんです><
>>756 まぁ落としても卒業できなくなるわけじゃないし
他の勉強に回して捨てる人が多いね
759 :
745 :2006/08/09(水) 23:45:37
「分からないポイントを理解したい」じゃなくて、「分からなくていいから、答えだけ欲しい」って感じがしまくりなのが笑える。
>>716 (1) hikaku_irekae関数は、ローカル変数である配列"data"入れ替えているだけであり、
mainから渡した実引数の配列"data"は入れ替わっていないために正しく動かない。
(2) hikaku_irekae関数で渡されたa, b, cの中央値を返却するようにすれば、正しい結果を得る事ができる。
hikaku_irekae関数の配列"data"は並び替えられているので、その中央値data[1]を返却するようにする。
(以下の通りにコードを修正すること)
int i, data[3];
↓
int i, data[3], mid;
hikaku_irekae(data[0], data[1], data[2]);
printf("[mid]%d\n", data[1]);
↓
mid = hikaku_irekae(data[0], data[1], data[2]);
printf("[mid]%d\n", mid);
void hikaku_irekae(int a, int b, int c)
↓
int hikaku_irekae(int a, int b, int c)
data[1] = -999;
↓
return data[1];
>>760 このスレの趣旨を理解するよう、半年ROMっとけ
ここは分かるように説明してあげるスレじゃないと思うんだがな・・・
i % 240 ↓ (i + 1) % 240
さっきから大学生にコンプレックス持ちまくりの奴が喚いてるのが笑える。
767 :
671 :2006/08/09(水) 23:52:24
すいません、どなたか
>>671 をお願いします。
>>765 わるかったな もう単位取り終わったからほとんど引きこもってるぜ
脳内大ってどこのFランク大?
関東のFランだぜ
>>716 (3) hikaku_irekae関数で、直接引数を入れ替えるよう、ポインタを使用し修正する。
void hikaku_irekae(int a, int b, int c);
↓
void hikaku_irekae(int *a, int *b, int *c);
hikaku_irekae(data[0], data[1], data[2]);
↓
hikaku_irekae(&data[0], &data[1], &data[2]);
void hikaku_irekae(int *a, int *b, int *c)
{
int i, j, tmp, data[3];
data[0] = *a;
data[1] = *b;
data[2] = *c;
for (i = 0; i < 3; i++) {
for (j = i + 1; j < 3; j++) {
if (data[i] < data[j]) {
tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
}
}
*a = data[0];
*b = data[1];
*c = data[2];
}
あとは適当に文章変えたり、肉付けしたりしてね♥
773 :
707 :2006/08/10(木) 00:02:30
>>760 そのとおりですw
>>761 771
どうもありがとうございます、お手数おかけしました。
助かります本当にありがとうございました。
しかし、C言語って一般教養に向いていないような気がするなぁ。 Rubyとかの高級言語のほうが身に付けやすく、利用価値も高いだろうに。 必要な理系の学生だけ、あとからC言語やるほうが良い気がする。
775 :
643 :2006/08/10(木) 00:04:15
>>764 うおおお!できてる!
ありがとうございました。
がんぱります!
>>774 手続き型言語はどれも大差ないと思うけど
C言語は教材が豊富で教えやすいんじゃないかな
煽った私にも感謝して!そしておっぱいうp!
>>774 RubyやPythonを採用するところも増えてるよ。
情報系ならC/C++、数学・物理系ならJavaとか。FORTRANは…。
>>780 俺情報工学科だけど、FortranもPascalもアセンブリもやったよ。
>>748 悪いが同じ大学生として恥ずかしいから言っているのだよ
文学部史学科考古学専攻の方はCOBOLをw
俺の時代はFortranだったが、今でもそうだと思う。 Javaもやるかもしれんけど。
>>782 同じ大学生として、お前が恥ずかしいよ。
同じ日本人として恥ずかしいニダ
789 :
707 :2006/08/10(木) 00:35:03
>>776 そんな心中の変化があったんですか、最終的に答えてくださってありがとうございます
>>745 ほんとにどうもありがとうございましたf^^;
でも単位の関係で苦手な教科も取らなければいけないこともあるって覚えといてください
>>781 いや、始めに習うといいと思える言語っていう意味で並べた。
Cを学ぶことの強みは、プログラミングの基礎だけでなく
コンピュータに関する様々な知識も(並行して)会得出来るのことだと思う。
ある程度内部的な構造に関わっていた方が後からアセンブリやらなんやらを学ぶときにいいだろうし。
関係ないけど、情報系の学部って大学によってレベルの差ありすぎ。
MARCH以下の情報系学部って機能してるのか?w 宿題丸投げとかあり得〜ん。
>>784 俺の理想。
>>774 アルゴリズムの勉強をするなら言語を選ばんでも良いし
あまり複雑だと教える側も面倒になるし。
数値計算程度なら手軽に導入できるもので良いんじゃね?
たまーに有名大学の丸投げもあったような・・・ どことは言わないけど・・・
ここに宿題丸投げしてるのは、情報系以外の奴らでしょ。 ちなみに俺は電通大卒だけど、入ったばかりのときはドシロウトが結構いたぞ。 最初のうちは丸投げに近いことやってたみたいだ。
>>790 今のところうちの大学の宿題やってくれってのはないな〜
>>793 情報系で丸投げあったら将来が不安だな・・・
でも中にはやってるやつもいそうで怖い
情報系でも、全員が将来プログラミングをする職業に就くとは限らんからな。 それに工業系の単科国立大学の場合は、偏差値で選ぶ地元の奴も結構いるよ。 だからドシロウトも混じる。 選択肢が少ないからな。
一番不憫なのは周りに教えてくれる友達がいないあたりか
東工大の奴も、そんな感じじゃないか? 東大には入れないけど、地元の国立に行きたい奴とか。
でも、情報系学部出て来てるくせに全然わかってないやつとか普通にいるからなぁ。 プログラムがどうとかじゃなくて、物事への取り組み方の考えが違うのかもしれない。
いい加減スレ違いなんですが
803 :
643 :2006/08/10(木) 02:23:10
ああ、できない。 どうしてもできない。。。
>>795 丸投げされているのが見つかって
このスレが授業中に晒されたことがある。
805 :
724 :2006/08/10(木) 02:54:28
>>803 ありゃ、未だ解決していなかったのか。
遣り取りしていたみたいだから終わったもんかとw
で、餓鬼じゃないんだから「できないできない」言ってないでデータとコードを晒してみたら?
#でも漏れはもう寝る。
806 :
デフォルトの名無しさん :2006/08/10(木) 02:54:25
double型の小数部分だけを取り出すには、 double a,b; a=1.2354; b=a-(int)a; でだいじょぶでしょうか? C++でキャスト使ったほうがいいんでしょうか?
>>806 大丈夫だと思うが、負の値には使えないので要注意。
後は明示的キャストを使うとかfloor()を使うとかtrunc()を使うとか。
808 :
デフォルトの名無しさん :2006/08/10(木) 03:11:17
>>807 ありがとうございます。
実は2次元配列(行列)で小数点以下が合う要素を抽出するプログラムを
作ってるんですが、うまくいきません。
コード載せるのでみていただけますか?
小数点第一位までのdouble型2次元配列 a[i][j]で小数点以下の数値を実数で渡されているときのものです。
抽出したものをdouble型の配列に突っ込みたいです。
void tyusyutu(const Matrix a, int m, int n, int o, const Vector b) //引数(対象行列、行数、列数、取り出したい小数点以下の数値、出力するベクトル)
{
int i,j,k;
double l;
for(i = 0; i < m; i++){
for(j = 0; j < n; j++){
l=a[i][j]-(int)a[i][j]; //小数点以下への変換
k = l*10 //整数へ
if(k == o) b[i] = a[i][j];
}
}
}
809 :
デフォルトの名無しさん :2006/08/10(木) 03:14:05
ちょっと説明わるかったので書き直しします。 a[][]は 1.1 1.2 1.3 1.4 2.1 2.2 2.3 2.4 みたいな感じなのですが、 例えば.3だけ会うものを抽出したいときには o=3 となります。 よろしくお願いします。
>>809 小数点以下1桁だけが対象なら
l=(int)(a[i][j] * 10) % 10;
が楽で正確かも。
812 :
808 :2006/08/10(木) 03:55:39
自己解決しました。 どうやら丸めが問題だったみたいです。 l=a[i][j]-(int)a[i][j]; //小数点以下への変換 k = l*10 //整数へ の部分を k=((a[i][j]-(int)a[i][j])+0.05)*10 で小数点以下第2位を四捨五入することで解決しました。 どうもありがとうございました。
813 :
808 :2006/08/10(木) 04:00:29
>>811 さん
811さんの方法でもいけましたっ!
やっぱりfloat扱うときの丸めの重要性にきづきました。
ほんとにありがとうございました。
814 :
643 :2006/08/10(木) 04:30:19
>>734 さんのを使わせてもらおうとがんばりましたが
その方法ではわからなくって自分で作ったらこんな風になりました。
#include <stdio.h>
#define SIZE 240 * 240
int main(int argc, char **argv) {
int i;
short data[SIZE];
FILE *fp;
for (i = 1; i < argc; i++) {
/*ファイルのオープン*/
fp = fopen( argv[i] , "rb");
if(fp == NULL){
// ファイルが開けなかった場合
fprintf(stderr,"cannot output to file.\n");
return 0;}
fread(data, sizeof(data[0]), sizeof(data) / sizeof(data[0]), fp);
fclose(fp);
if ((fp = fopen(argv[i] .csv , "w")) == NULL) return -1;
i=0;
while (i < SIZE)
fprintf(fp,"%d%c", data[i++], (i + 1) % 240 ? ',' : '\n');
fclose(fp);
return 0;
}
だけど、ファイルの書き込みのところができません。argv[i]にファイル名が
入っているので同じ名前で拡張子だけ変えて出力すればいいのですが・・
間に合わない予感がする・・・・。
>>734 のだとこんな感じかな
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define VECSZ 240
#define MATSZ VECSZ * VECSZ
int bin2csv(char *fname)
{
int i;
char *outname;
short data[MATSZ];
FILE *fp;
if ((fp = fopen(fname, "rb")) == NULL) return -1;
fread(data, sizeof(data[0]), MATSZ, fp);
fclose(fp);
outname = (char*)malloc(strlen(fname) + strlen(".cvs") + 1);
strcpy(outname, fname);
strcat(outname, ".cvs");
if ((fp = fopen(outname, "w")) == NULL) return -1;
for (i = 0; i < MATSZ; i++) fprintf(fp,"%d%c", data[i], (i + 1) % VECSZ ? ',' : '\n');
fclose(fp);
free(outname);
return 0;
}
int main(int argc, char **argv) {
int i;
for (i = 1; i < argc; i++)
bin2csv(argv[i]);
return 0;
}
816 :
724 :2006/08/10(木) 11:29:47
>>815 ・「拡張子を変える」とあるからその名前のつけ方は拙かろう。
・メモリリークしている。
// 最初のfclose(fp);の後から
char * ext = strchr(fname, '.');
if (ext == NULL) ext = strchr(fname, '\0'); // 拡張子がなかったときの対策
char * outname = malloc(ext - fname + sizeof(".csv"));
sprintf(outname, "%.*s.csv", ext - fname, fname);
fp = fopen(outname, "w");
free(outname); // outnameはfopen()してしまえば用済み
if (fp == NULL) return -1;
// 次のfopen()の辺りまで
817 :
643 :2006/08/10(木) 21:47:32
>>815 ありがとうございます。
コンパイルできました。
>>816 おっしゃるとおり改造してみましたが
char * ext = strchr(fname, '.');
と
char * outname = malloc(ext - fname + sizeof(".csv"));
がここでは宣言できません
となり、コンパイルできません。
どうしたらいいでしょうか?
C言語だから
>>817 宿題レベルの話だから、
char outname[128];
strcpy(outname, fname);
memcpy(&outname[strlen(fname) - 3], "csv", 3);
でいいじゃない?malloc(), free()なんか使わずに。
>>816 sizeof(".csv")ってなんだよ?
>>816 拡張子以外のパスに"."が含まれる場合正常に動作しない
特にディレクトリ名に"."を含む場合に悲惨
>>819 3文字以外の拡張子及び拡張子なし場合に正常に動作しない
ファイル名が3文字未満だと目も当てられない
>>820 >3文字以外の拡張子及び拡張子なし場合に正常に動作しない
>ファイル名が3文字未満だと目も当てられない
まぁそうなんだけど、宿題なんだからさ。
「拡張子」なんてポワポワしたものを扱う場合は、特に割りきりが必要じゃない?
入力ファイルが、
data.001
data.002
...
なんて可能性もあるわけだし。
822 :
816 :2006/08/10(木) 22:16:57
>>817 あーごめん、C99前提で書く癖がついてて。
それぞれ前方で宣言しておいて。
>>818 C99はCですが。
>>819 見たままですが。
>>820 確かに。
んじゃ、strchr()の代わりにstrrchr()で。
#帰宅しても混乱してたら今度は関数丸ごと書かないとダメだな。
なんか816って痛い・・・
>>821 素直に
hogehoge → hogehoge.csv
hogehoge.dat → hogehoge.dat.csv
hogehoge.001 → hogehoge.001.csv
がいいと思うけどなぁ。
それか出力ファイル名もコマンドラインから受け取るか。
C99だとmalloc(ext - fname + sizeof(".csv"))って意図通りの意味になるのか?
_MAX_PATH
>>825 俺だったら前者のようにするけど、拡張子を変える必要があるみたいだよ。
前者のやりかたでも、変えるっちゃ変えるんだけど。
C89だろうとC99だろうと、書き込みファイル名分のメモリ確保になるんでない? 少なくとも漏れの環境ではsizeof(".csv")は5になったよ。
830 :
643 :2006/08/10(木) 22:31:14
コマンドラインから名前を入力する際に 正確に.datまでファイル名を打ち込まないと 読み込んでくれませんが、 これの解決方法ってあるのでしょうか? これ、明日までの宿題・・・ 今日も徹夜でがんばらないと・・。
突然環境依存のシンボルを持ち出す痛い粘着がいる件
>>827 Windowsじゃ、それ使うだけじゃダメなんだけどな
>>830 曖昧に打ち込んだファイル名から類推させるんですか?
かなり難しいと思いますw
>>829 sizeof(pointer)と間違えてるんだろ
835 :
819 :2006/08/10(木) 22:38:56
>>834 うお、素で間違えてた・・・。何年も・・・ orz
836 :
643 :2006/08/10(木) 22:39:02
>>833 ありがとうございます。
そうですかサンプルのバイナリーデータが
PP20060526-1343.datとかすごく長いので
コマンドラインから打ち込むのをなるべく短縮できないかな?
と思ったものですから。。。
こんなながい名前10個打ち込むのつらい気がして。。。
文字列リテラルの型って配列だったのか。しらなんだ。
>>830 .dat決め打ちでいいなら入力ファイル名の末尾調べて付け足し
sample.datとsampleとどっちもあるときどーすんだとかめどいので
課題に含まれてないなら妙なことはやらんほうが身のためだとは思うが
>>823 俺は816ではないけど、
Cにおいて文字列リテラルの型はchar配列。(ただし内容を書き換えしようとしたらその挙動は未定義)
つまり".csv"はchar [5]型となり、sizeof (".csv")は5を返す。
ちなみにC++だとconst char配列。
うはは、俺もsizeof(文字列リテラル)って必ずpointerのサイズだと思ってたよ・・・ or2
>>836 your_program.exe PP*.dat
とかワイルドカード使えば?
842 :
643 :2006/08/10(木) 22:44:02
>>838 なるほど。
そうですね。どっちもあるときはできなくなりますね。
そうか・・・。
入力ファイル名の末尾調べてつけたしって
「文字列をくっつける」のを使えればできるのですね?
文字列リテラルのアドレスも取れたりするんだな。 知らなかったのが恥ずかしい。
844 :
643 :2006/08/10(木) 22:46:05
>>841 ワイルドカードですか?
いままで必死に調べてみたらネット上に
そんな記述があったのですが
私の持ってるC言語の本にはまったく書いてなくて
わかりませんでした。
ワイルドカードってどうやったら使えるのですか?
すごく興味あります。
んー
もう誰か回答をスパッと書いてやれよ。 俺は書かないけどw
書かないんじゃなくて書けない
ちうかWinでもXP辺りのDOSプロンプトはTab補完できなかったっけ?
>>844 ファイル名の補完とか、複数ファイルの指定(所謂ワイルドカード)なんて仕事は本来コマンドインタプリタの仕事。
#Unix系ではシェルが該当する。
残念ながらWindowsではcmd.exeがそこまでやってくれないのでエクスプローラからDrag&Dropするくらいしか手がない。
#まさかファイル名補完のロジックなんて今から書いてられないだろ?
あ〜、Windowsのシェルってワイルドカードの展開やってくれないみたいね。 bashのつもりで話してたから、ワイルドカードの話は諦めて。 exeにドラッグアンドドロップでいいかも。
つか、
>>815 でいいじゃん。
メモリリークなんか気にしなくていいよ。すぐにプログラム終わっちゃうんだから。
使うためのプログラムならメモリリークしてもいいけど、提出用なんだろ?
853 :
643 :2006/08/10(木) 23:00:30
>>816 のやり方がすごく気になります。
どなたか、正解を教えてくださいm(_ _)m
854 :
643 :2006/08/10(木) 23:02:40
提出用です。 だけど、なるべく実用的なものを作るように と言われました。 お願いいたします。
このグダグダ感がたまらない。 だから完成されたコードは書かない。
char型って処理系依存だっけ?
>>853 いい加減ウザいぞ。
816が帰宅したら回答を書くそうだから、おとなしく待っとけ
>>853 宣言部に以下を追加
char *ext, char *outname;
>>816 中の下2行は以下のように書き換えてから追加
char * ext = strchr(fname, '.'); → ext = strchr(fname, '.');
char * outname = malloc(ext - fname + sizeof(".csv")); → outname = malloc(ext - fname + sizeof(".csv"));
中身読んでないので動くかは知らん
860 :
643 :2006/08/10(木) 23:12:52
>>859 ありがとうございます。
おっしゃるとおりにしてみましたが
データの入ってないCSVファイルができました。
データはいずこに・・・・。
UWAAAAAAAAAAAAAAA UZEEEEEEEEEEEEEEEEE
200レス以上もなにやってんだw まぁ、がんばれよ。
>>861 嫌なら来なくて良いんですよ?このスレに強制的に来るように誰かに指示、命令されてるの?
>>643 ここは宿題を丸投げして回答するスレであって、QAスレではない。
>>860 ああ、宣言部に持ってくればいいという話ではなかったかスマソ
読むのめどいし
>>816 が帰ってくるのを待ってておくれ
放置や任意って言葉を知らないキチガイ共か。お前らみたいなのが 自分勝手な価値観で相手を不必要に罵倒して、後で世間から冷ややかな目で見られるんだよねw
816には是非とも逃亡していただきたいw
>>867 別にいいんじゃないの?
ここ2chだし。
870 :
643 :2006/08/10(木) 23:25:34
皆様、お騒がせして申し訳ありません。 おとなしく、自習しながら待っております。。 ごめんなさい。 では、どなたか思いついたらどうぞよろしくお願いいたします。
>>869 そう、”来なくても”良いんだよ。分かった?
相変わらず、このスレには自分が気に食わないって理由だけで 丸投げに対してのレスをしないで、うぜぇだの自己主張しかしない ガイキチが根付いているんだな。みっともないね、何しにこのスレに来てんの?w
>>874 いや、そういうことをいちいち言うお前が来なくて良いんだよ。
他に回答している人からしてみりゃ、答える気もないのに
質問者が気に食わないってことをいちいち言う方がUZEEEEんだが?
>>875 お前がいなかった間は、お前ほどのキチガイは来なかったがな。
叩く奴の神経が理解できん。楽しいか? いずれにしても叩きたいなら止めないが。
楽しいよ〜w。真性のバカを叩くのはww
881 :
643 :2006/08/11(金) 01:00:44
やはり終わらない・・・。
643乙
#include <stdio.h> #include <string.h> #include <stdlib.h> struct Wether { short elem[240][240]; }; int convert_csv(char *infilename) { struct Wether *wether; int i; int j; FILE *infile; FILE *outfile; char *outfilename; char *outext; wether = (struct Wether *)malloc(sizeof(struct Wether)); infile = fopen(infilename, "r"); fread(wether, sizeof(struct Wether), 1, infile); fclose(infile);
outext = ".csv"; outfilename = (char *)malloc(strlen(infilename) + strlen(outext) + 1); sprintf(outfilename, "%s%s", infilename, outext); outfile = fopen(outfilename, "w"); free(outfilename); for (i = 0; i < 240; i++) { for (j = 0; j < 240; j++) { fprintf(outfile, "%d", wether->elem[i][j]); if (j < 240 - 1) fprintf(outfile, ","); } fprintf(outfile, "\n"); } fclose(outfile); free(wether); } int main(int argc, char **argv) { int i; for (i = 1; i < argc; i++) convert_csv(argv[i]); }
886 :
643 :2006/08/11(金) 05:06:22
おお!
できてる!すごいです。。
>>884 さんありがとうございます。
質問ですが
>>885 の
convert_csv(argv[i]);のあとにreturn 0;
をつけても問題ないでしょうか?
887 :
643 :2006/08/11(金) 05:08:01
んで、こんな風に変えてみました。 #include <stdio.h> #include <string.h> #include <stdlib.h> struct Wether { short elem[240][240]; }; int convert_csv(char *infilename) { struct Wether *wether; int i; int j; FILE *infile; FILE *outfile; char *outfilename; char *outext; wether = (struct Wether *)malloc(sizeof(struct Wether));//メモリ確保 if( wether == NULL ) /* 領域確保に失敗したか */{ printf( "%dバイトの領域確保に失敗", sizeof(struct Wether) ); return 1; } infile = fopen(infilename, "r"); if(infile == NULL){ fprintf(stderr,"cannot output to file.\n");//ファイルがないとき return 0; } fread(wether, sizeof(struct Wether), 1, infile); fclose(infile); outext = ".csv";
888 :
643 :2006/08/11(金) 05:08:48
outfilename = (char *)malloc(strlen(infilename) + strlen(outext) + 1); sprintf(outfilename, "%s%s", infilename, outext); outfile = fopen(outfilename, "w"); free(outfilename);//メモリーの解放 for (i = 0; i < 240; i++) { for (j = 0; j < 240; j++) { fprintf(outfile, "%d", wether->elem[i][j]); if (j < 240 - 1) fprintf(outfile, ","); } fprintf(outfile, "\n"); } fclose(outfile); free(wether);//メモリーの解放 return 0; } /*メイン*/ int main(int argc, char **argv) { int i; for (i = 1; i < argc; i++) convert_csv(argv[i]); return 0; }
>>884 じゃないけど、return 0;つけても問題ない
でも、最初のmalloc、fopenはエラーの処理やってるのに、二回目は何でやってないん?
あと、関数の戻り値が正常に終わった場合と途中で終わった場合で一緒になってる…のはどうでもいいか
890 :
816 :2006/08/11(金) 06:47:24
おー、解決したようで何より。 エラーチェックするならこの辺かな。 ・fread()の戻り値でサイズ分読めたか ・malloc()の戻り値でメモリ確保できたか ・出力ファイルのfopen()の戻り値でファイルを作れるか ・fprintf()とfclose()でファイルを書けたか まぁ、fopen()以外は致命的ではないか。
891 :
643 :2006/08/11(金) 07:12:56
>>816 >>889 さん
どうもありがとうございました。
もうひとつ気になることがありまして・・
もらったプリントのデータの型のところに
「符号なし整数」と書いてあります。
でも結果のデータを見ると
-2048とか-266とかばかり出てきてるのですが
これって結果としておかしいですか?
892 :
816 :2006/08/11(金) 07:27:54
>>891 それならshortをunsigned shortにすればよろしい。
それと、fprintf()の%dを%uも忘れずに。
#そのデータだと-2048→63488、-266→65270になって意味不明だけどね。
>>891 そのデータの宣言にunsignedってつければいいんじゃないの?
int ⇒ ungigned int みたいな感じで。
ソース読んでないから知らないけど。
894 :
816 :2006/08/11(金) 07:40:04
>>893 それだけだと出力のfprintf()の%dで負になってしまう。
>>894 いや、だから読んでないって言ってるじゃん。
そんな得意げに言われても…。
ホルホル
897 :
816 :2006/08/11(金) 08:05:10
>>895 いや、だから読んでないことを得意げに語られても困るんだけど。
>893自体、漏れが既に>892で書いていることなんだし。
ロダにあがってる答えには負値あるんだけどな
900 :
643 :2006/08/11(金) 08:39:23
あの答えは、先生が作ったプログラムらしいのですが、 先生自体、気象の方でプログラム専門にやってる方では ないのです。 バイナリデータ自体は実際に観測されてる 機械からとってるものだということで そのデータ型が書いてある説明書を見たら 「符号なし整数 2byte 240*240」 と書いてあったのですが・・・ 先生がまちがってるのだろうか・・・・。
実際の機械から取ったデータとなると、ここで聞いたりしても ファイルフォーマット合ってるのかどーかを知るのは絶望的だとおも あとは先生に問いただすなりなんなりで
[1] 授業単元: プログラミング及び演習4
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2579.zip wav_conc.cを修正し、
ヘッダ長にかかわらず複数のwavファイルを1つにできるようにせよ。
(ヘッダ長は読み込んだファイルのまま利用する。)
という問題です。
[3] 環境
[3.1] OS: WindowsXPsp2,Vine3.2
[3.2] コンパイラ名とバージョン:Visualstudio02,gcc3.3?
[3.3] 言語: C
[4] 期限: なし
[5] その他の制限: なるべく関数は1つで。
読み込むファイルは、長さ・バイト数以外の値(stereo,16bit,44100Hzなど)は、
全て同一ということ前提だそうです。
※今のままでは58,44byte長のヘッダ形式しか結合できません。
丁度、サウンドレーコーダで録音したタイプと、Mediaフォルダ内にある物にあたります。
宿題スレで「業務レベル?」のエラー処理を求めてもなぁ。 今までなんでscanf()には文句言わなかったんだ? エラーチェックしてないコードなんて山のようにあっただろ? つか、うざいよ、君。
てか、
>>884-885 ってエラー処理なんかしてないじゃん。
それと「実用的な」エラー処理って、エラーメッセージを出すものなんだよ。
エラーコードをチェックしたって、何も言わずにプログラムが終わっちゃったら困るでしょ。
907 :
816 :2006/08/11(金) 15:36:46
うぁーははは、漏れが通して書き直さなかった所為か? でも痛い香具師が書いたってまた叩かれるだろうからもう知らね。
>>909 漏れも仕組み分からんな。。
てかそこ開かなくね?
>>911 俺も開けない。
つーか、wavの構造くらいだったらググれば他にあるだろうが、やる気が出ない。
>>912 単純に連結させただけだと、一瞬間が空きそうなことぐらいしか。。
ファイル操作は苦手でね…orz
何か利用価値ありそうな物な気がするんだが。。
え、wavファイルって基本的には時間軸に沿ったサンプリング値が並んでるだけじゃないの? とか、構造を全く知らない俺が妄想してみた。
>>911 たった数分のうちにサーバが落ちているようだ。
どこだ、このショボイ大学。
>>914 ヘッダとかヘッダとか、ヘッダとか色々あるだろ。
俺もよく知らないけど、サンプリングレートとか違うファイル同士結合するのとか激しく面倒くさそうだ。
よく読んでなかった。全て同一が前提か。誰が得するんだこの課題は。
なんで損得なんか考えるんだ?
>>912 どーせ形式決め打ちだし、ヘッダの雛形書いて、dataチャンクまで読み捨てて連結じゃダメかのう
問題 DynamicProgrammingでプログラムを作成しなさい。対象とする問題は各自検討して下さい。 アルゴリズムの説明、プログラム、プログラムの説明、実行結果、考察等をまと めて報告書とすること
922 :
ど素人 :2006/08/11(金) 23:35:15
こんばんは。よろしくお願いします。 [1] 授業単元:情報C [2] 問題文1→”ABC=”という文字列に、0001から5000までの数字を 順番に結合しファイルに記入するプログラムを作れ。 ex)ABC=0001 ABC=0002…ABC=5000 [3] 環境 Borland 5.6 [3.1] OS: WindowsXP [3.2] ポインタを使用すること [3.3] 言語: Cのみ [4] 期限 8月21日 [5]
>>921 >>1を見てやり直し
>>922 ごめん、悪いけど問題文そのままコピペお願い
何がしたいのか分からない
#include <stdio.h> int main() { int i; for (i = 1; i <= 5000; i++) fprintf(stdout, "ABC=%04d\n", i);}
925 :
デフォルトの名無しさん :2006/08/12(土) 00:02:48
>>922 これでいいのかな?
int main(void) {
int i;
FILE *fp;
fp = fopen("abc.txt", "w");
if(fp == NULL) {
return 0;
}
for(i = 1; i <= 5000; i++) {
fprintf(fp, "ABC=%04d\n", i);
}
fclose(fp);
return 0;
}
strcat使えってことじゃね?
927 :
ど素人 :2006/08/12(土) 00:15:47
なんだかよくわからなかったのですが、 授業ではstrcatが出てきました。 文字列を結合させるとか足すとかするやつですよね? その授業の後にさっきの問題を口頭で言われたのですが 自分で調べても全くわかりません。 strcatって難しいですね。
strcatをポインタ使って作れか
strcatよりfprintfの法が安全だな。
930 :
ど素人 :2006/08/12(土) 00:45:34
strcatを使ったやり方をどなたかお願いします!!
931 :
デフォルトの名無しさん :2006/08/12(土) 00:53:24
それより何より抜けてる[5]が気になって眠れない。
932 :
デフォルトの名無しさん :2006/08/12(土) 01:20:17
933 :
デフォルトの名無しさん :2006/08/12(土) 01:29:29
>>932 strcatを無理やり使うとそうなるわな。
でもそれなら
>>925 の方がすっきりしているという・・・。
fpもポインタなんだし、
>>922 の問題の条件は、
strcatを使わなくても満たされるように思う。
というか、この問題でstrcatを無理やり使わせるのはアホ。
934 :
932 :2006/08/12(土) 01:35:49
>>932 のソース return 0;の一行上にfclose(fp); をいれといてー
sにstrcatは流石に不味いと思う。
>>932 とりあえず、問題の条件や意図が判らなさ過ぎだな。
真面目に答えてるつもりなんだか、ネタなんだか
>>933 > strcatを無理やり使うとそうなるわな。
ならねーよ!w
939 :
643 :2006/08/12(土) 02:43:37
遅くなりましたが、回答を下さったみなさま ありがとうございました。 提出しました・・・。 いったいどうなるのか不安ですが。 どうもありがとうございました〜。
>>932 試してみたら俺の環境では正常に動いたわw
sが書込み禁止領域に置かれるような環境ではうまく動かんから>922は注意しろよ
>>940 職業プログラマならすぐさま辞めろ。
プログラマを目指しているなら、あきらめろ。
ただの素人なら、いつまでも勘違いしてろ。
ウザいなぁ。ほらよ。 #include<stdio.h> #include<stdlib.h> #include<string.h> int main(void) { int i; char buf[10], s[16] = "ABC="; FILE *fp; if ((fp = fopen("abc.txt", "w")) == NULL) { exit(1); } for (i = 1; i <= 5000; i++) { snprintf(buf, sizeof buf, "%04d", i); strcat(s, buf); fprintf(fp, "%s\n", s); s[4]='\0'; } fclose(fp); return 0; }
945 :
932 :2006/08/12(土) 03:25:46
946 :
ど素人 :2006/08/12(土) 04:04:21
ありがとうございます。友達に聞いてみたら続きがあったんです・・・。 [1] 授業単元:情報C [2] 問題2→ABC=0000からABC=5000までの続き番号のファイルを一度に読み込む プログラムを作成しなさい。 さらにファイルの中身を積算しなさい。 ファイルの中には2*20の数値データが入っているものとする。 ex)ABC=0001 ABC=0002…ABC=5000 [3] 環境 Borland 5.6 [3.1] OS: WindowsXP [3.2] ポインタを使用すること [3.3] 言語: Cのみ [4] 期限 8月21日 [5]
>>946 >・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
それと問題文が意味不明ですお
まだ続きがあるかもしれないから、友達に10回確認しておけ。
949 :
ど素人 :2006/08/12(土) 04:43:22
申し訳ありません。 講義中に口頭での宿題の提示だったので 意味がわからない箇所が多いと思います。 もう一度、、 [1] 授業単元:情報C [2] 問題2→ABC=0000からABC=5000までの続き番号のファイルを 一度に読み込みデータを積算処理するプログラムを作成しなさい。 ファイルの中には2*20の数値データが入っているものとする。 [3] 環境 Borland 5.6 [3.1] OS: WindowsXP [3.2] ポインタを使用すること [3.3] 言語: Cのみ [4] 期限 8月21日 [5]
超能力者に任せた
>>949 言わんとしていることは分からないでも無いが
具体的にどういうファイルなのかを出して貰わないことにはどうしようもない
5000 * 2 * 20個のデータを読み込んでから、積を求めるのか
問題1との関連性がまったくなさそうなのが気になる
954 :
ど素人 :2006/08/12(土) 05:49:48
>>952 多分同じ項目同士を全部足し算しろ
という事ではないかと思います。
955 :
ど素人 :2006/08/12(土) 05:56:56
意味がわからないのは口頭だからではなく、 お前が理解していないからだろうが。
958 :
ど素人 :2006/08/12(土) 06:50:33
>>957 おはようございます。
一番目のファイルの1番目のデータと二番目以降のファイルの
1番目のデータをどんどんたしていく。
同じく一番目のファイルの2番目のデータと二番目以降のファイルの
2番目のデータをどんどんたしていく。
これを5000まで繰り返す。
つまり2*2番目は2*2番目同士全部たす。
2*4800番目は2*4800番目同士全部たす。
そして結果を出力すると言う意味ではないかと思います。
iMonaなんでデータまでは確認してないが、20行2列で書かれてる 連番ファイルを読んで尿i1と尿i2を別々に出すのか、尿ijを出すのかはっきりしろ
960 :
959 :2006/08/12(土) 07:02:03
>>958 つまり各ファイルを2×50の行列とみて、行列の総和をとれってことか?
積算処理って話はどうなった
962 :
ど素人 :2006/08/12(土) 07:23:15
尿ijを出すようです。 同じところにあるの数字をたしていくようです。 そうです。言ってみれば行列の総和を5000個とるんですね。 各ファイルのデータは2*20だそうです。
煤i´A `i)j
お前は何を言ってるんだ もうサンプルをどうすりゃいいのか結果で示せ
>>955 1. データがあるなら最初からだせ
2. そのデータは、途中から一行に三つの値が登場するようになるが、正しいのか?
966 :
ど素人 :2006/08/12(土) 07:53:44
>>966 積算処理ってのは勘違いだったのかとか、最初にあげたデータは間違ってたのかとか
ちゃんと答えてくれ、結局おまいの書き込みのどれを信じればいいのかさっぱりだ
つか問題文ごとまとめなおしてくれ
積算というのは和を取るってことだろ。
>>958 >つまり2*2番目は2*2番目同士全部たす。
お願いだから、日本語を喋ってくれ。
>>968 俺のほうが勘違いしすぎてたようだorz
スマソ
>>949 どういうフォーマットのファイルがいくつあって、何をどのように計算するのか
もう一回まとめろ。
「ABC=0000からABC=5000までの続き番号のファイル」なんて、意味不明もいいところだ。
それから、0000なのか0001なのかもはっきりさせろ。
>>949 質問テンプレの[3.2]はコンパイラ名とバージョンなわけだが
お前ら、相手はドシロウトなんだから、そんなにいじめるな。 どうプログラミングするのかわからないから、説明に戸惑ってるというのもあるんだろう。 要領を得ない相手から、必要な情報を引き出すのも、要求工学だ。精進しろ。 俺は答える気ないから、質問しないけど。
974 :
ど素人 :2006/08/12(土) 08:51:19
ごめんなさい。 ええと、先ほど例としてあげた データファイルの名前が、ABC=0000.txtから ABC=0001.txt ABC=0002.txt ABC=0003.txt ABC=0004.txt という風にABC=5000.txtまであるときに それらのファイルの同じ要素ずつをすべて 積算する(和をとる)プログラム を作っていただきたいのです。 多分先生がおっしゃってるのはそういう事ではないかと思います。
例えば、以下のようなファイルがある場合、具体的な計算式を書いてみて。 5000ファイルとか20行とかは忘れて、3ファイルでそれぞれ2行の場合ね。 [ABC=0001.txt] 02107 0.12076 [ABC=0002.txt] 4.22096 4.32063 [ABC=0003.txt] 26.32087 26.42133
訂正。 [ABC=0001.txt] 0 2107 0.1 2076 [ABC=0002.txt] 4.2 2096 4.3 2063 [ABC=0003.txt] 26.3 2087 26.4 2133
977 :
ど素人 :2006/08/12(土) 09:11:16
[ABC=0001.txt] 02107 2423 0.12076 2653 [ABC=0002.txt] 4.22096 2564 4.32063 5946 [ABC=0003.txt] 26.32087 2659 26.42133 4579 [ABC.txt] D E F G 計算結果がABC.txtにり、データの位置がD、E、F、Gなら Dには02107 +4.22096 +26.32087 の答えが入る。 Eには2423+2564+2659の答え Fには0.12076 +4.32063 +26.42133 の答え Gには2653+5946+4579の答えが入る。 つまり同じ位置の数値が5000ファイル分足される。。。。
ははぁ、やっとわかった。 その計算に意味があるのかどうかと、5000ファイルを一度に読み込む必要が あるのかどうかが俺にはわからないが、時間があればやってみよう。 他の誰かが解答したらやらないけど。
979 :
ど素人 :2006/08/12(土) 09:22:53
おそらく、大量のファイルを一度に処理できる と言うところがおいしいところなのではないかと 思います。。。。 おいしいとは思いますが、 ど素人にはむしろ難しく・・・。 どうぞよろしくお願いいたします。
981 :
978 :2006/08/12(土) 09:29:58
>>980 うーん、そういうのでいいんだろうか・・・
という疑問を残しつつ、テストデータ作成プログラムを。
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE* fp;
int i;
int j = 0;
char buf[16];
for (i = 0; i < 5000; i++) {
sprintf(buf, "ABC=%04d.txt", i + 1);
fp = fopen(buf, "w");
for (j = 0; j < 20; j++) {
fprintf(fp, "%.1f %d\n", j / 10.0 + i * 2, rand() % 3000);
}
fclose(fp);
}
return 0;
}
982 :
978 :2006/08/12(土) 09:32:35
あ、0000〜5000が正解か。 for文の5000を5001に変更。
983 :
978 :2006/08/12(土) 09:33:55
だと駄目だな orz これで。 for (i = 0; i < 5001; i++) { sprintf(buf, "ABC=%04d.txt", i); fp = fopen(buf, "w"); for (j = 0; j < 20; j++) { fprintf(fp, "%.1f %d\n", j / 10.0 + i * 2, rand() % 3000); } fclose(fp); }
984 :
980 :2006/08/12(土) 09:34:08
985 :
978 :2006/08/12(土) 09:36:49
>>984 それだと逐次的に読み込んで処理するということになるから、題意に沿ってるのかなぁと。
まあ「ど素人」(失礼)の言うことなので、それでいいのかも。
986 :
980 :2006/08/12(土) 09:42:32
「一度に」は「プログラムの一回の実行で」くらいの意味に取ったんだが。 それとも、Windowsでは5001ファイルを同時に開けるのか?
987 :
ど素人 :2006/08/12(土) 09:43:20
ありがとうございます。 プロまたは玄人のみなさんからすると この問題おかしいですか? ど素人からすると、 一気に5000個のファイルを処理できるおいしい プログラムに思えますが・・・・。
988 :
978 :2006/08/12(土) 09:46:50
>>986 質問者がいいというのだからいいのでしょう。
989 :
ど素人 :2006/08/12(土) 09:52:00
ど素人なので、どういうものが標準なのか よくわかりません。。。 本当に°素人です
991 :
ど素人 :2006/08/12(土) 09:59:01
>>980 にゃ。。
問題1の答えありがとうございました。
問題2の方もよろしくお願いいたします。
それ本気で言ってるのか? 騙りか?
993 :
980 :2006/08/12(土) 10:07:02
別に〜w
誰か次スレ立てろ。 次は74代目らしいぞ。
じゃぁ俺たててみる
なんで74じゃないんだろ
jふぁ;おれhぎlhヴぁ:いおえfじゃ:おりjが@いhgら
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。