10/11/24 20:06:55
>>351
1) #define N 100 と#define で記述して、コンパイル時に簡単に変えることができるようにしています。
2) 個数が仮に N より少ないデータだったとしても、正常に動くようにしています。
すなわち #define N 100 とした場合に対して、実際にはデータの個数が 5 であってもOKです。
100 を無視することも可能ではありましたが、平均を求める関数を準備する、という点を優先し、
一次近似として「データ数が100」を尊重いたしました。
>>348
問題があればコメントを下さい。随時変更いたします。
353:デフォルトの名無しさん
10/11/24 20:08:27
いいから出てくるなって
354:デフォルトの名無しさん
10/11/24 20:17:34
こんな入門レベルのものはやりたくないみたいなこと言ってたのになw
355:デフォルトの名無しさん
10/11/24 20:21:13
>>352 ◆QZaw55cn4c
いや、ここのスレでやり取りするなよ、自分のスレでやれ
スレチガイならともかく他所のスレのを無理やり横取りするなよ
お前、道徳的に最低ことしていると認識ないだろ
356:デフォルトの名無しさん
10/11/24 20:32:06
>>355
にちゃんねるで「道徳的」といわれても。
357: ◆EkRIf9bJPo
10/11/24 20:32:07
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
-------------------
/*hogehoge*/
int main(){/*ggg*/
printf("xxxxxx");
}
int a=c;
-------------------
上記のソース総ステップ数5ステップ、実ステップ数3ステップ、
コメント率40%が求められるステップカウンターを作製せよ。
また、以下の条件を提示する。
1.ディレクトリ単位で読み込めるようにする。
2.Cファイルのみのステップ数を求めるようにする。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc 4.3.4
[3.3] 言語: C
[4] 期限: 2010年11月25日9:00
[5] その他の制限: なし
よろしくお願いします。
358:デフォルトの名無しさん
10/11/24 20:37:13
◆QZaw55cn4c
当然、>>357も横取りするんだろ
359:デフォルトの名無しさん
10/11/24 20:42:46
>>358
お客様としてお待ちしようかと。
でも期限が厳しいですね。
360:デフォルトの名無しさん
10/11/24 21:11:48
>>357
ディレクトリ指定も可能って事はサブディレクトリも再帰的に捜査するんだよね
まぁ500円くらいなら払う価値は有る問題だと思うよ
総ステップは行数だと思うけど実ステップってのは?
if( x ) {
i = a + b
+ c + d;
}
これは何ステップ?
コメント率は ( "/*", "*/", "//" を含むコメント文字数 ) / (総文字数) の事?
その場合は改行コードは計算に入れるの?
この辺は詰める必要があるね
361:デフォルトの名無しさん
10/11/24 21:21:56
>>357
カンマ演算子の扱いとか、do while とかどうする?
362:デフォルトの名無しさん
10/11/24 21:28:43
>>357
実ステップは4行になりそうだけど。
363: ◆EkRIf9bJPo
10/11/24 21:40:11
>>360
そうです。サブディレクトリを読み込みます。
実ステップは、コメントのみの行、行区切りだけの行をはずした行数です。
なので、例に出されたソースの実ステップは、3ステップになります。
コメント率に関しては、特に条件が記載されてないです…
コメントが記載されている行/全行のことだと解釈しています。
改行コードについても記載がないので、計算には入れることは、考えてないです。
364: ◆EkRIf9bJPo
10/11/24 21:48:48
>>361
すみません。どうするってどういう意味ですか?
>>362
問題文がそうだったので…
365:デフォルトの名無しさん
10/11/24 22:57:27
>>356
2chを楯に自分の糞さから逃げてないか?
366:デフォルトの名無しさん
10/11/24 23:06:24
>>363
判定条件はこうかな
コメント外部にアルファベット、数字、記号({}を除く)が出現したら実ステップ行(*1)
コメントが入っている業はコメント行(*2)
当然、*1 でかつ *2 の行も存在する
例えば#if 0 ~ #endif の間は無効な行だけどこれも実ステップ行扱いで良いんだろうな、さもないと判定が難しすぎる
367:デフォルトの名無しさん
10/11/24 23:07:06
反論してる人もこっちでやってくれんかな。
スレリンク(tech板)
◆QZaw55cn4cもこのスレでそういう論議しなければ俺はかまわん。
このスレのそういうレスは双方無視の方向で。
368:デフォルトの名無しさん
10/11/24 23:18:41
>>364
たとえば
a++,b++;
は1ステップか、それとも2ステップか
式は一つだから1ステップでいいとはおもうけど
do{
func();
}while();
は2ステップなのか3ステップなのか
doがなんかするわけじゃないから2ステップでいいのか?
あと、;だけの行はステップとして数えるのか?
369: ◆QZaw55cn4c
10/11/24 23:31:10
>>357
>>363
途中ですが、コードを示します。使い方は、
./a.out Cプログラムファイル
です。
>>357 に例示されたコード例が指定どおりの数字を出す、という点だけで仕様を勝手にきめました。
大方は、>>366 にしたがっています。
これにいろいろ食わせてみて問題があるようであれば指摘ください。
途中ゆえデバッグコードを多数含みますことご容赦を。
URLリンク(codepad.org)
xmalloc() -> malloc()
xfree() -> free()
xrealloc() -> realloc()
に読み替えてください。
370: ◆1reJfOTbE.
10/11/24 23:35:18
URLリンク(www.icsd3.tj.chiba-u.jp)
[1] 授業単元:プログラミング実験
[2] URLリンク(www.icsd3.tj.chiba-u.jp)
ここの第2回の課題です。
[3] 環境
[3.1] OS:WindowsXPでコマンドプロンプトやMeadowなどを使っています。
[3.2] gcc
[3.3] C
[4] 期限:11/26の18:00
[5] その他の制限:特にないと思います。
第1回に比べて急に難しくなったように思え、困っています。
とりあえず課題が何をどうすればよいかわかりません。
手順を教えていただきたいです。よろしくお願いします。
371: ◆EkRIf9bJPo
10/11/24 23:36:00
>>363
その判定条件で大丈夫です。
#if0~#endifも実ステップ行扱いで良いと思います。
>>368
特にカンマ演算子と、do whileについて何も条件が出されてないので、>>663さんが提示した判断条件でお願いします。
372:デフォルトの名無しさん
10/11/24 23:40:32
>>369
printf("xxx/*nocomment*/xxx");
373:デフォルトの名無しさん
10/11/24 23:54:48
>>357
>>372
URLリンク(codepad.org)
これ以上複雑になれば、今のコードは捨てて状態遷移(オートマトン)で書き直すことを検討します。限界です。
374:デフォルトの名無しさん
10/11/24 23:58:24
>>373
問題が結構いい加減だから、都合のいいように解釈すればよいと思う。
375: ◆EkRIf9bJPo
10/11/24 23:58:29
>>369
ありがとうございます!
早速、デバッグを行なったところ、以下のエラーが表示されました。
1.c:8: error: conflicting types for ‘getline’
/usr/include/sys/stdio.h:37: error: previous declaration of ‘getline’ was here
よろしくお願いします。
376:デフォルトの名無しさん
10/11/25 00:00:43
getlineって◆QZaw55cn4cじゃないかw
377:デフォルトの名無しさん
10/11/25 00:08:00
>>373
/* "A" */
今のロジックだと /* と " のどちらかを優先しなければならないから限界みたいだね
378: ◆QZaw55cn4c
10/11/25 00:08:29
>>357
>>375
URLリンク(codepad.org)
>>376
じゃあトリップつけときますか。
379:デフォルトの名無しさん
10/11/25 00:09:38
つけなくていいよ
380:デフォルトの名無しさん
10/11/25 00:14:07
>>377
そのようですね。
このコード>>378 は捨てましょう。
>>375
このロジックでよければ、ディレクトリを掘るコードをつけます、といっても明日があるので今日はおしまい。
期限を見直してください。あと >>2 をよろしく。
381:377
10/11/25 00:15:40
>>373
間違えた、駄目なのはこんなケース
printf( "/* a */" );
/* "a */
printf( "/* a */" );
改行で終わらない行は無視してるみたいだけどそんな必要有るのかな
382:デフォルトの名無しさん
10/11/25 00:24:35
ありゃ、テレビ見てたら盛り上がってるな。
乗り遅れたし、明日早いし。寝るくぁ。
383:デフォルトの名無しさん
10/11/25 01:07:35
>>370
非常に丁寧な教材ですね。
難しいところを素直に先生に聞いてみるのはいかが?
このスレは回答を提示することで若い芽を摘み取る非情な場所であることをお忘れなく。
384:デフォルトの名無しさん
10/11/25 01:12:23
>>383
ワロスw
確かにその通りかもw
385:デフォルトの名無しさん
10/11/25 01:48:20
>>370
dequeだけ作っといた
フィルタは気が向いたらやるかも
URLリンク(codepad.org)
386:デフォルトの名無しさん
10/11/25 01:52:12
>>370の講義資料より引用
『インターネット上に匿名で書かれた情報は信じるな!!』
387:デフォルトの名無しさん
10/11/25 01:56:29
信じるな!とは言い過ぎだが利用は自己責任で、って位が落としどころかな
388:デフォルトの名無しさん
10/11/25 02:21:45
>>370
多分デジタルディレイの実装ではないかと思われる
queue.c はFifoリングバッファだろう
Fir_p.c のメインループ内では以下を行うんだろうな
for( ディレイ時間分ループ )
enqueue( 0 );
while(入力ファイルから short 一つを x に読み込む) {
enqueue( x );
y = dequeue()
x に y を重み付き加算
出力ファイルに x を書き込む
}
これでシングルディレイが付加された音声データ(wavファイル)が作成できるだろう
Fifo リングバッファをマルチインスタンスに修正し複数のリングバッファを使用すれば多段ディレイも作成できる
また enqueue( x ); の位置を加算後に持っていけば減衰率によっては自然な残響を得られるかも知れない
389:デフォルトの名無しさん
10/11/25 03:32:08
>>385
修正
URLリンク(codepad.org)
390:デフォルトの名無しさん
10/11/25 05:03:09
話が繋がっていかない課題やレポートはつまらないけど
各論へのイントロになってる課題は面白いと思う
391:デフォルトの名無しさん
10/11/25 11:59:14
[1] 授業単元:プログラミング実験
[2]1~30の整数の範囲で、3辺a, b, c(cを斜辺)の三角形のうち、直角三角形が成立する場合のa,b,c辺をすべて見つけて配列
に入れる。その後、配列をもとにプログラムを作成しなさい。
ただし、a, b, c辺を見つけて配列に入れる機能は関数にすること。
[3] 環境
[3.1] OS:linux
[3.2] gcc
[3.3] C
[4] 期限:11/25
[5] その他の制限:
よろしくお願いします。
392:デフォルトの名無しさん
10/11/25 12:01:44
>>391ですが、このプログラムをもとにして作っていただけますか
#include<stdio.h>
#define N 30
int main(void)
{
int a,b,c;
int p[N][3];
int n;
n = 0;
for(a=1;a<=N;a++){
for(b=a;b<=N;b++){
for(c=b;c<=N;c++){
if(a*a + b*b == c*c){
p[n][0] = a;
p[n][1] = b;
p[n][2] = c;
n = n + 1;
}
}
}
393:デフォルトの名無しさん
10/11/25 12:33:21
>>391
問題読むと直角三角形が成立する辺を配列に入れた後何かするようだけど
配列に入れて表示するプログラム?
394:デフォルトの名無しさん
10/11/25 13:13:35
>>393
多分そうだと思います
395:デフォルトの名無しさん
10/11/25 13:18:29
すみません>>391の問題文に追加です;
a <= b <= cを仮定してください。
396:デフォルトの名無しさん
10/11/25 13:26:39
for(a=1;a<=N;a++){
for(b=a;b<=N;b++){
for(c=b;c<=N;c++){
の時点でa <= b <= cを満たしてるはずなのに更に仮定するの?
397:デフォルトの名無しさん
10/11/25 13:31:59
>>396
その部分をいじるなってことだろ
398:デフォルトの名無しさん
10/11/25 13:36:13
>>391
#include <stdio.h>
#define N 30
int f(int p[][3], int size) {
int a, b, c, n = 0;
for(a = 1; a <= size; a++) {
for(b = a; b <= size; b++) {
for(c = b; c <= size; c++) {
if(a * a + b * b == c * c) {
p[n][0] = a;
p[n][1] = b;
p[n][2] = c;
n = n + 1;
}}}}
return n;
}
int main(void)
{
int p[N][3], i, n;
n = f(p, N);
for(i = 0; i < n; i++) printf("%d %d %d\n", p[i][0], p[i][1], p[i][2]);
return 0;
}
399:デフォルトの名無しさん
10/11/25 13:36:48
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):整数型1次元配列に対して平均値を計算する関数を書き、
{1, 4, 2, 8, 1, 5} の平均値 3.5 を求めよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:cygwin
[3.3] 言語: C++
[4] 期限:2010 11/27
[5] その他の制限:int型からdouble型に書き換えるとのこと、すいません。ここからしてあまり理解できていません。
400:デフォルトの名無しさん
10/11/25 13:45:06
>>399
URLリンク(codepad.org)
401:デフォルトの名無しさん
10/11/25 14:06:24
>>399
こんなんしたらさすがに怒られるかな?
#include <iostream>
#include <numeric>
int main()
{
int a[] = {1, 4, 2, 8, 1, 5};
size_t SIZE = sizeof(a) / sizeof(a[0]);
double ave = std::accumulate(a, a + SIZE, 0.0) / SIZE;
std::cout << ave << std::endl;
}
402:370 ◆1reJfOTbE.
10/11/25 16:05:56
>>385-389
課題3-1ですが、作っていただいたコードで、コマンドプロンプトで
gcc -Wall -c queue.c
とやって、queue.oが作られました。
この課題は後、
gcc -Wall -o FIR_P FIR_P.c queue.o
とやれば完了でよいのでしょうか?
そして>>388の中身がわかる方いませんか?
分割コンパイルというものは理解できたと思うのですが、
最初の式の説明のところからやっていることがまだ理解できていなく、
どうすればいいかわかりません。
それと関連プログラム4種類をダウンロードと書いてありますが、
Makefileに関しては講義資料22ページの説明が出てきますが、
ダウンロードができません。コピーしてテキストファイルとして
保存ということでしょうか?
403:デフォルトの名無しさん
10/11/25 16:30:35
Makefileは拡張子の部分消して
関連ファイルと同じところに保存して
% makeかな?でまとめてコンパイルしてくれる
追加したファイルもMakefileに追加すればそれもコンパイルできる
404:デフォルトの名無しさん
10/11/25 16:43:08
>>402 が解らないのは
C言語
実験のデジタルフィルタ
の両方なの?
デジタルフィルタは理解できるがC言語は駄目とか?
405: ◆L.eSCJEwZk
10/11/25 16:48:34
>>404
デジタルフィルタは、講義資料を見ていますがまだ理解できていません。
C言語はできるつもりでしたが、>>388の日本語で書いた部分をやろうと
思ったのですがどうすればよいかわかりませんでした。
基礎はできると思うのですが、ファイルのオープンなどでてくると
危ないです。
406: ◆1reJfOTbE.
10/11/25 16:49:17
↑トリップ間違いました、自分で間違いないです。
407:デフォルトの名無しさん
10/11/25 17:28:53
1回目の課題もファイル操作でてるけど
そっちがわかったならこっちもたぶんコードわかると思うんだけど
>>388の日本語で書いてある部分のどこがわからないのかな?
408:388
10/11/25 18:09:56
>>405
変数名を直して一部加筆
short int y;
for( ディレイ時間分ループ ) ←*1
enqueue( 0 );
while(入力ファイルから short 一つを data に読み込む) { ←現行のソースに有る
enqueue( data );
y = dequeue()
data に y を重み付き加算 ← *2
出力ファイルに data を書き込む ←現行のソースに有る
}
つまり君が書くべきは *1 と *2 だけなんだけどな
ディレイ時間は argv[1] で与えられる delay だ、これがどんな単位で与えられるか又、サンプリングレートが幾らか不明なので
必要なループ回数が判らない
例えば delay の単位がmsecでサンプリングレートが20msec なら必要なループ回数はdelay / 20 という事になる
重みは argv[2] で与えられる weight だ、これも%で与えられるのか小数で与えられるのか判らないけど小数で与えられるなら *2 は
data += (short int)( (double)y * weight );
となる
>>383 が書いた様に、若い芽を摘み取りたくなかったので抽象的な表現を行ったのだけど伝わらないなら仕方がないだろう
409:デフォルトの名無しさん
10/11/25 18:25:20
[1] 授業単元: プログラミングおよび演習
[2] 問題文(含コード&リンク):
1.解答例のカレンダー(下にリンクはってます)について、dayofweek()を再帰で書き直せ。
◦ある月の1日の曜日は、前の月の日数と1日の曜日から計算できる
◦ある年の1月1日の曜日は、前の年の日数と前の年の1月1日の曜日から、あるいは、その年の日数と次の年の1月1日の曜日から計算できる
◦2000年1月1日は土曜日である
2.このプログラムについて、任意の年月についてdayofweek() の呼び出し回数が何回になるかを理論的に考察せよ。また、呼び出し回数を計測し、結果が実際に理論と合致しているかを確認せよ。
2.ヒント:呼出し回数を数えるためにグローバル変数を使用する
[3] 環境
[3.1] OS: Windows
[3.2] gcc
[3.3] C
[4][2010年12月1日08:45まで]
[5]現在再起を習ったばかりで複雑なものは習っていません。
解答例のカレンダー↓
URLリンク(codepad.org)
410:389
10/11/25 19:02:18
>>405
ファイルのオープンなんかより生ポインタのが千倍危ないんだけどね
URLリンク(codepad.org)
411:デフォルトの名無しさん
10/11/25 19:48:02
>>410
元データを weight 分減少させる必要は無いと思うよ
412:デフォルトの名無しさん
10/11/25 20:46:57
>>409
再帰?謎過ぎる問題だな
413: ◆EkRIf9bJPo
10/11/25 20:47:26
>>375です。
期限直しました。
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
-------------------
/*hogehoge*/
int main(){/*ggg*/
printf("xxxxxx");
}
int a=c;
-------------------
上記のソース総ステップ数5ステップ、実ステップ数3ステップ、
コメント率40%が求められるステップカウンターを作製せよ。
また、以下の条件を提示する。
1.ディレクトリ単位で読み込めるようにする。
2.Cファイルのみのステップ数を求めるようにする。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc 4.3.4
[3.3] 言語: C
[4] 期限: 2010年11月27日9:00
[5] その他の制限: なし
414:デフォルトの名無しさん
10/11/25 20:49:02
>>408
波形データ a[123]={~~~~~~~~~~~};
波形データ b[123];
今が、1から123の間、くりかえし
{
b[今] =
a[今] ・ 係数今用 +
a[1こ過去] ・ 係数過去用1 +
a[2こ過去] ・ 係数過去用2 +
a[3こ過去] ・ 係数過去用3 +
.
.
.
今++;
}
ってやると、できあがる波形データ b が、
もんもんした音になったり、キラキラした音になったり、シャリシャリした音になったり、音質が変わっておもしろい。ってことじゃないかしら? ようするに。 はて?
すごい単純だけど、たとえば単純に
b[今] = a[今] + a[1こ過去]
ってやるだけでも、波形が、こもった感じの音に変化したりして、おもしろいですよね。ふしぎ~♪
415:デフォルトの名無しさん
10/11/25 20:52:33
>>414
そう。単に過去のデータを足しこむだけで、いろんな特性を持つ回路(フィルタなど)になるのです。
z 変換またはラプラス変換でググッてくだしゃあ。
416:デフォルトの名無しさん
10/11/25 20:59:12
>>409
何か汚いけど・・まあいいや
URLリンク(codepad.org)
URLリンク(www5a.biglobe.ne.jp)
417:デフォルトの名無しさん
10/11/25 21:00:50
>>416
表示直した
URLリンク(codepad.org)
418: ◆EkRIf9bJPo
10/11/25 21:02:30
>>380
大変申し訳ないのですが、読んでもロジックがわからなかったので自分で作りました。
URLリンク(codepad.org)
URLリンク(www.play21.jp)
上記のサイトを参考にしました。
方法3 コメントを削除したファイルを中間ファイルとして保存し、再度読み込み、行数を数える方法を行いました。
残っている課題が二つあります。
・ディレクトリ指定してCファイルを求める。
・コメント率を算出する。
大変、勝手なことだと思いますがこのソースをベースに作製お願いします。
419:409
10/11/25 21:15:23
>>412
なんかしたに張り付けてあるリンクのものを再起を使用して書き直すみたいです。
もうすこしコンパクトになるとか・・・
課題2はよくわかりません。
>>416
>>417
すみません。
再起はどこでどういう風に使用したらいいのでしょう?
420:409
10/11/25 21:18:32
>>409
for のところを再起にやればいいとかなんたら・・・・。
421:416
10/11/25 21:36:54
>>409
自分の定義に自分と同じ構造を持つ構造は再帰的に定義できる
さっきの例なら、ある月の一日の曜日は前の月の一日の曜日で求められる
前の月の一日はそのまた前の一日の曜日で
そのまた前も・・・ってな感じでずっと続く
ある状況で特殊化すればそこで再帰は終了する
さっきのなら2000年の1月で特殊化した
422:416
10/11/25 21:42:00
>>409
ついでにちょっと整理しといた
URLリンク(codepad.org)
423:デフォルトの名無しさん
10/11/25 22:04:51
カレンダー(カレンダー)C言語のソースが
2ちゃんのスレに書き込まれるぅ~♪
カレンダー(カレンダー)過ぎ行く時の中で
俺はソースを書いて彷徨うんだろう♪
424:409
10/11/25 22:12:19
みなさんありがとうございます。
recurse
みたいなコード?は使わないのでしょうか?
あと漸か式を考えたりなど・・・
よくわからない質問をしてしまってばっかりですみません><
425:デフォルトの名無しさん
10/11/25 22:35:14
recurse って再び呪うのか?
426:370 ◆1reJfOTbE.
10/11/25 22:54:27
ご解答いただいている方、本当にありがとうございます。
今日学校でレポートをすこしずつ進めていたのですが、
学校のパソコンや携帯では書き込みができなく、自宅のパソコンでは
環境が整っていなく実験ができないので、今のうちにやることを
把握しておいて明日学校に行ったらレポートを一気にやりたいと思って
います。なので、残りやるべきことを把握したいと思います。
課題3-1は、FIR_P.cとqueue.cを作っていただいたのでおkですが、
課題3-1(続)に、queue.c, FIR_P.c, FIR_N.c, IIR_P.c, IIR_N.cを実装せよ
とのことですが、これは3-1で作ったので終わりではないということですよね。
それに、FIR_N, IIR_P, IIR_Nという名前は初めて出てきたのですが、
これはFIR_P.cを書き換えてそれぞれの名前で保存しろということでしょうか?
プラスMakefileの修正ができれば、課題3-2以降はその作ったプログラムを
使って実行→聞いてみて考察~などでできると思いますので
よろしくお願いします。
427:デフォルトの名無しさん
10/11/25 23:14:03
[1] 授業単元:アルゴリズムとデータ構造
[2] 問題文(含コード&リンク):入力された2分木を中央順で走査するプログラムを
再帰を使わずに書け。
自分で書いたプログラム
main.c URLリンク(codepad.org)
STACK1.c URLリンク(codepad.org)
STACK2.c URLリンク(codepad.org)
Item1.h URLリンク(codepad.org)
Item2.h URLリンク(codepad.org)
STACK1.h URLリンク(codepad.org)
STACK2.h URLリンク(codepad.org)
上三つをコンパイルして実行します。
コンパイルは通りますが、実行でsegmentation fault がでてしまいます。
main.cの最後のwhile文のところを修正していただけないでしょうか。
お願いします。
[3] 環境
[3.1] OS: macosX
[3.2] gcc
[3.3] 言語: C
[4] 期限: 明日の午後一時まで。
[5] その他の制限:とくになし。
428:デフォルトの名無しさん
10/11/25 23:15:49
>>426
FIRが遅延時間前の入力信号を加算するのに対し、IIRは遅延時間前の出力信号を加算するものの様だ
ならば、FIRの encueue() するタイミングを加算後に移動させれば IIR になるのではと思う
PとNはポジとネガの意味かな?ならばNは重み付け加算を重み付け減算にすれば良いのだろうか?
429: ◆QZaw55cn4c
10/11/25 23:17:17
>>357
>>413
とりあえず動くものをあげときます。
URLリンク(codepad.org)
430:デフォルトの名無しさん
10/11/25 23:29:39
>>418
字句解析は作った人以外には理解が極めて困難、という面があります。
>>378 や >>429 も人に理解していただくような努力を微塵もしなかったことは申し訳ない。
本当に正確なものを作るのなら(そして人に理解していただくようにするのなら)、全然別のアプローチ(たとえば状態遷移でとらえるなど)をとらなければならないことは自覚しておりましたが、手が先に動いてしまいました。
(なお、>>429 は >>378 よりもちょっとだけ精度がよくなっております。)
というわけで >>418 を追いかける余裕がありません。すみません。
431:デフォルトの名無しさん
10/11/25 23:42:02
>>427
嫌がらせみたいに汚いコードだな、無意味な typedef とか控えろよ
問題なのは while() 内で1回pop()、3回push() を行っている事にあるんじゃないかな
必然的にスタックは2つづつ増えるから最初に確保した領域をはみ出して segmentation fault となる
そもそも push() には確保した領域をはみ出さないかのチェックが必要だが実装されていないし
何をしたいのか不明なコードだけど、毎ループで pop() されるのは head と 1 で head と 1 が3回push() される
当然、無限ループとなり segmentation fault で終わるプログラムだな
432:デフォルトの名無しさん
10/11/25 23:59:54
[1] 授業単元: 情報処理概論Ⅰ
[2] 問題文(含コード&リンク):
大、中、小の3 個のさいころを同時にふった時、出た目の和がm になるような目の出方をすべて求めるプログラムを作りなさい。
ただし、m の値はキーボードから入力するものとする。表示を工夫して見やすい出力にすること。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [無期限]
[5] その他の制限: if、while、for、配列、多重ループ、関数まで既習です。
よろしくお願いします!
433:デフォルトの名無しさん
10/11/26 00:07:30
>>432
さいころは6面でいい?
負数の扱いは?
434:デフォルトの名無しさん
10/11/26 00:09:08
こまけぇこたぁ~良いんだよ、それなりのものが出来れば
435:デフォルトの名無しさん
10/11/26 00:16:21
>>431
適切なアドバイスどうもありがとうございます。
間違っていいたところも直せ、理解も深まりました。
ほんとうにありがとうございますm(_ _)m
436:デフォルトの名無しさん
10/11/26 00:18:52
>>432
#include<stdio.h>
#define MAX(a, b) ((a)>(b)?(a):(b))
#define MIN(a, b) ((a)<(b)?(a):(b))
int main(void)
{
int i_min, i_max, j_min, j_max, i, j, k;
int m=0;
printf("m を入力してください : ");
scanf("%d", &m);
i_min=MAX(1, m-12);
i_max=MIN(6, m-2);
for(i=i_min;i<=i_max;i++)
{
j_min=MAX(1, m-i-6);
j_max=MIN(6, m-i-1);
for(j=j_min;j<=j_max;j++)
{
k=m-i-j;
printf("大:%d 中:%d 小:%d\n", i, j, k);
}
}
return 0;
}
437:デフォルトの名無しさん
10/11/26 01:11:03
>>432
>表示を工夫して見やすい出力にすること。
ということで>>436みたいな効率化は図っていない
URLリンク(ideone.com)
438:デフォルトの名無しさん
10/11/26 02:05:41
>>432
URLリンク(codepad.org)
いちまん回さいころふって、なにがでるかしらべてみて、しらべる☆ ためしてガッテンたいぷ♪
たまにまちがえちゃうけど、気にスンナ!