C/C++の宿題を片付けます 97代目at TECH
C/C++の宿題を片付けます 97代目 - 暇つぶし2ch96:デフォルトの名無しさん
07/10/24 23:04:06
#include<stdio.h>

main(){
int a=3,b=5,n;
for(n=1;n<101;n++){
if(n!=a && n!=b)printf(" %d,",n);
else {if(n==a){a+=3;printf(" Fizz");}
if(n==b){b+=5;printf(" Buzz");}
if(n<100)printf(",");
}}}

97:デフォルトの名無しさん
07/10/24 23:08:51
[1] 授業単元:コンピューターグラフィックス
[2] 問題文CGを作れ(自由課題)
ただし以下の評価項目に関して採点を行うのでこれを満たすようなCGを作成すること
1.CGアニメーションになっていること
2.マウスによってなんらかの操作ができる
3.ホップアップメニューが使用できること
4.シェーディングが適切に行われていること
5.テクスチャマッピングが使用されていること
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:11月6日
[5] その他の制限:あまりにも難しすぎる表現はNG
いきなり自由課題しろとか言われても俺にはイミフ
誰か助けてクレヨン

98:デフォルトの名無しさん
07/10/24 23:11:59
ナンセンス?

#include<stdio.h>

char * fizzBuzz( int n )
{
static char buffer[BUFSIZ];
return n % 15 == 0 ? "FizzBuzz" :
n % 5 == 0 ? "Fizz" :
n % 3 == 0 ? "Buzz" :
(sprintf( buffer, "%d", n ),
buffer);
}

int main()
{
int m = 0;
while( m != 100 )
{
++m;
printf("%s\n", fizzBuzz( m ) );
}
return 0;
}


99:デフォルトの名無しさん
07/10/24 23:12:31
>>97
それほんとにいきなり出されたのか?w

100:デフォルトの名無しさん
07/10/24 23:15:18
printf同様って・・・
300行くらいいるんじゃね?

101:デフォルトの名無しさん
07/10/24 23:15:38
剰余を使わず文字数が少なくてこう出力して
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, Fizz, 19,

最後は , をつけないプログラム

102:デフォルトの名無しさん
07/10/24 23:16:19
>>80
strDate, strTimeをどう扱うかによって回答が変わるけど、
こんなのを期待されてそう。

DateTimeClass &operator = (DateTimeClass &a, const DateTimeClass &b)
{
(DateClass &)a = (const DateClass &)b;
(TimeClass &)a = (const TimeClass &)b;
strcpy(a.strDate, b.strDate);
strcpy(a.strTime, b.strTime);
return a;
}


103:デフォルトの名無しさん
07/10/24 23:16:43
>>97
どう考えてもOpenGLとかDirectXとかが必要になりそう気がする……
どう考えてもcだけじゃコンピュータグラフィックは作れなさそうな気がする……

104:デフォルトの名無しさん
07/10/24 23:18:49
>>99
今まではただ惑星とかロボット作ってそれをキーボード入力で動かしてたしてただけだった
だけど授業でシェーディングとかの話し始めて出た課題がこれ
参考にできるサイトなどなんでもいいので参考になるものを教えてください

105:デフォルトの名無しさん
07/10/24 23:20:32
>>97
OpenGLいるな。。。じゃあここはスレ違いか
失礼しました

106:デフォルトの名無しさん
07/10/24 23:20:48
>>104
wisdomsoft OpenGLでググれ
もしくは単位をあきらめる

107:デフォルトの名無しさん
07/10/24 23:22:14
>>100
7行スレで7行printfがあったとか何とかって言ってた。

108:デフォルトの名無しさん
07/10/24 23:22:26
>>104
てっきりプログラミングの授業の第一回目とかで出されたのかと思った>いきなり

109:デフォルトの名無しさん
07/10/24 23:23:04
>>102
ありがとうございます。
そのように解答します。

110:デフォルトの名無しさん
07/10/24 23:23:25
>>104
少なくともCでCGできる時点でこのスレの住人の3分の2くらいよりレベル上だろうな

111:デフォルトの名無しさん
07/10/24 23:23:32
[1] 授業単元:Fizz Buzz問題
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上記のプログラムは、1製品にのみ対応したものであるが、複数製品に対応したものに
書き換えなさい。また製品数の目安は100製品程度とする。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C++
[4] 期限: 10月25日18時
[5] その他の制限:

よろしくお願いします


112:デフォルトの名無しさん
07/10/24 23:26:27
>>63
だれか、お願いします。
現在作成中でしたら、おとなしく待ってます。

113:デフォルトの名無しさん
07/10/24 23:28:43
>>106
ググって来るわ
OpenGLの課題片付けてくれるスレってある?

114:デフォルトの名無しさん
07/10/24 23:29:11
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
class BaseClass {
char* name;
public:
BaseClass(const char* p) {name = strdup(p);}
~BaseClass() {free(name);}
};

class MyClass : public BaseClass
{
int count;
public:
MyClass(const char* p, int n = 0) : BaseClass(p), count(n)
{
// ...
}
};

ソースコードを参考にして派生クラスでの生成と消滅の順序を画面に
表示するプログラムを作成してください。
プログラムを実行し、派生クラスと基本クラスのコンストラクタ、
デストラクタが呼ばれる順序を確認してください。
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C++
[4] 期限: 10/26まで
[5] その他の制限:なし

お願いします。

115:デフォルトの名無しさん
07/10/24 23:44:55
>>101
とりあえず剰余有版はこれでOK?
剰余無し版はfizzBuzz関数の実装を変更すればいいし。
就職活動がんばってな

#include<stdio.h>

char * fizzBuzz( int n )
{
static char buffer[BUFSIZ];
return n % 15 == 0 ? "FizzBuzz" :
n % 5 == 0 ? "Fizz" :
n % 3 == 0 ? "Buzz" :
(sprintf( buffer, "%d", n ), buffer);
}

int main()
{
int m;
for( m = 1; m <= 100; ++m )
{
printf( (m == 100 ? "%s\n" : "%s,"), fizzBuzz(m));
}
return 0;
}


116:デフォルトの名無しさん
07/10/24 23:50:14
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
上記のプログラムは、1製品にのみ対応したものであるが、複数製品に対応したものに
書き換えなさい。また製品数の目安は100製品程度とする。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語: C++
[4] 期限: 10月25日18時
[5] その他の制限:

よろしくお願いします



117:デフォルトの名無しさん
07/10/24 23:50:19
>>111

>>86と同じ人?Fizz Buzz問題でも今回は内容Fizz Buzzじゃないんだ。

>>86はもういいの?

とりあえず1問答えてるし、先客が終わるまで待てて。

118:デフォルトの名無しさん
07/10/24 23:50:55
>>110
CGがなんぼのもんじゃい!

119:デフォルトの名無しさん
07/10/24 23:51:16
>>112
一応作ったけどそのテンプレおかしい気がする。
入力文字列の最後に空白付けないと止まらないかも。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

120:デフォルトの名無しさん
07/10/24 23:53:36
>>84
HP-UXかHI-UXな人だな?

121:111
07/10/24 23:54:12
>>117
すいません。同一人物じゃないです。
>>86の人のテンプレコピペしたんで授業単元変えるの忘れました

122:デフォルトの名無しさん
07/10/24 23:55:50
>>101はもういないのか?

剰余無し版

#include<stdio.h>
#include<stdbool.h>

bool isMultipleOf( int n, int m )
{
int idx;
for( idx = 1; idx != 100; ++idx )
{
if( m == idx * n )
return true;
}
return false;
}
char * ff( int n )
{
static char buffer[BUFSIZ];
return isMultipleOf( 15, n) ? "FizzBuzz":
isMultipleOf( 5, n) ? "Fizz":
isMultipleOf( 3, n) ? "Buzz":
(sprintf(buffer,"%d", n ), buffer);
}


123:デフォルトの名無しさん
07/10/24 23:58:53
>>114
URLリンク(kansai2channeler.hp.infoseek.co.jp)

124:デフォルトの名無しさん
07/10/24 23:58:56
>>119
テンプレの
/* コンマかピリオドならstr2の位置を1つ左 */

}

}

/* str2(単語)に終端文字を追加 */
-------------------------------------------------------
上記の部分が
/* コンマかピリオドならstr2の位置を1つ左へ */

}
/* str1を1文字右に移動 */
}

/* str2(単語)に終端文字を追加 */
でした。
真ん中の/* str1を1文字右に移動 */を追加お願いします。

125:デフォルトの名無しさん
07/10/24 23:59:42
>>111

if(num<=300+0*10 && day>=inc_day)

の部分がヘン

というかこのプログラム、何をするプログラムなのかが一見してわからない

126:デフォルトの名無しさん
07/10/25 00:02:22
>>121
そなの?変なこと言ってすまん。

いまチャレンジしてるから、ちっと待って。

127:デフォルトの名無しさん
07/10/25 00:04:37
>>124
i++;
を追加してくれ。忘れてた。
まあ、それでも入力の最後に空白付けないといけないのは
変わらない気がするんだが。テンプレがそれならいいのかな。

128:デフォルトの名無しさん
07/10/25 00:05:46
>>125
日にちと商品の在庫不足数を数字のみで表示してるんじゃない?
商品のほうはランダムで数字作成してるみたいだし。
~日 在庫不足~個みたいな。でも、
>>複数製品に対応したものに
ってのがわからない。


129:デフォルトの名無しさん
07/10/25 00:08:09
>>128

>>111
if(num<=300+0*10 && day>=inc_day) inc_day=day+3;
で、あきらかに 0*10 という意味不明な演算をしている件について

130:93
07/10/25 00:08:40
>>85
正規分布を使いアルゴリズムに通して正解率を出すプログラムなんだけど
|Σ|を行列の値(対角成分の積)として計算すると全然正解率がでない。
どこがおかしいのかを見るために
試しに|Σ|に対角成分の和をいれてみて計算すると正解率98%だった。
ただ計算方法が違うのであっているかわからない。

正規分布について調べると|Σ|はΣの固有値とあるんです。

どうなんでしょうかね。

131:111
07/10/25 00:09:32
>>125
簡単に書くと、はじめ300個あった物が毎日80~120ずつ減っていき、
在庫が300+0*10以下になったら、その3日後に、350個プラスされるって感じです。
ちなみに、300+0*10の0の部分は1でも2でもなんでもよいです

132:デフォルトの名無しさん
07/10/25 00:15:22
>>125
別に変じゃなくないか?
numが一定値以下で、かつ現在発注中(到着待ち)じゃなけりゃ発注すんだろ?
inc_dayには発注日+3が入っているから、到着待ち中はday<inc_dayになる

133:デフォルトの名無しさん
07/10/25 00:16:59
>>127
「i++;」を付ける位置は以下で良いですか?

付けてみたのですが分割後に出力される最後の単語が文字化けしてしまいます。

後、テンプレ見直してみましたが、タイプミスや書き残しはもうないので仕様はこれでいいと思います。

/* コンマかピリオドならstr2の位置を1つ左へ */

}
/* str1を1文字右に移動 */
i++;
}

/* str2(単語)に終端文字を追加 */

134:デフォルトの名無しさん
07/10/25 00:17:32
プログラマは数学が苦手なんです。
プログラマはコーヒーとタバコが好きなんです。

135:デフォルトの名無しさん
07/10/25 00:18:36
>>131
納得したその計算してたのね。

136:86
07/10/25 00:19:18
>>86>>89>>91>>96>>98>>101>>>>115>>122
本当にありがとうございます
大変助かりげぶき



137:デフォルトの名無しさん
07/10/25 00:20:34
>>134
英語も苦手だよ。後、眠気覚まし+暇つぶしにガムもスキだよ。

138:デフォルトの名無しさん
07/10/25 00:30:39
>>133
i++はそこでいいよ。

テンプレどおりにやると入力の最後に空白入れないとバグる。
str1[i] != ' ' のとこを str1[i] != ' ' && str1[i] != '\0'
にすればたぶんOK.

139:86
07/10/25 00:30:55
ミス……
本当に助かりました
ありがとうございます

140:22
07/10/25 00:34:15
自分の問題に対してレスしてくれたり、といてくれた人達、
本当にありがとう!!
助かりました!!!!

141:デフォルトの名無しさん
07/10/25 00:37:59
>>138
提出の際に聞いてみます。

期限ぎりぎりで半ば諦めていたので、本当に感謝ありがとうです。

手直しも直ぐにやっていただき助かりました。

142:デフォルトの名無しさん
07/10/25 00:51:09
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク):
1:y=sin(x) x=0から4πまで、512分割して、yの値を求め、ファイルに書き込む。
2:y=sin(x-π/2) x=0から4πまで、512分割して、yの値を求め、ファイルに書き込む。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: bcc
 [3.3] 言語:C
[4] 期限:なるべく早めに
[5] その他の制限: 特にないです。

よろしくお願いします。

143:デフォルトの名無しさん
07/10/25 01:00:46
#include<stdio.h>
#include<math.h>

main(){
int n;
FILE *fp=fopen("sin.txt", "w");
for(n=0;n<=512;n++)fprintf(fp,"sin(π×%d/512) = %f\n",n,sin(4*M_PI*(n+0.0)/512));
}

144:デフォルトの名無しさん
07/10/25 01:07:18
こっち訂正汁

for(n=0;n<=512;n++)fprintf(fp,"sin(4π×%d/512) = %f\n",n,sin(4*M_PI*(n+0.0)/512));
for(n=0;n<=512;n++)fprintf(fp,"sin(4π×%d/512 - π/2) = %f\n",n,sin(4*M_PI*(n+0.0)/512-M_PI/2));

145:デフォルトの名無しさん
07/10/25 01:13:41
#include<stdio.h>
#include<math.h>

main(){
FILE *fp=fopen("sin.txt", "w");
for(int n=0;n<=512;n++)fprintf(fp,"sin(4π×%d/512 - π/2) = %f\n",n,sin(4*M_PI*(n+0.0)/512-M_PI/2));
fclose(fp);
}

146:デフォルトの名無しさん
07/10/25 01:15:03
>>63
テンプレがおかしい。指示通りにやるとセグメントエラーを起こす。

147:デフォルトの名無しさん
07/10/25 01:17:10
>>111
まずはこんなので
URLリンク(kansai2channeler.hp.infoseek.co.jp)

148:デフォルトの名無しさん
07/10/25 01:32:23
>>147
ありがとうございます。
残念ながら、今はプログラミングができる環境じゃないので、明日試して見ます。

149:142
07/10/25 01:32:29
>>143>>144>>145
早速答えていただき、本当にありがとうございます!
助かりました!

150:デフォルトの名無しさん
07/10/25 01:47:38
>>146
一応、>>127のi++;の付け加えでちゃんと動いてくれるので、OKです。
コンパイル通って、動作も「,.」削除+空白削除+分割表示できてるので。

151:デフォルトの名無しさん
07/10/25 01:48:52
i++;じゃなくてstr1[i] != ' ' && str1[i] != '\0'の変更ですね。

152:147
07/10/25 02:07:00
>>111
念のため、

#define DAYS 10 // 販売期間
#define ITEMS 10 // 製品の種類数

の部分を

#define DAYS 1000 // 販売期間
#define ITEMS 100 // 製品の種類数

と書き換えると題意に沿った回答になる。
ただし、このとき、出力が最悪200000行になるので注意。

153:デフォルトの名無しさん
07/10/25 06:10:11
>>82
課題にはそのとおり書いてあったんですが・・。
自分には問題の①~③の意味がさっぱりで・・・。

>>83
それが答えってことになるのですか?

154:デフォルトの名無しさん
07/10/25 06:30:23
こたえだね。

155:デフォルトの名無しさん
07/10/25 07:17:13
答えかどうかもわからないって…

156:デフォルトの名無しさん
07/10/25 09:26:14
[1] 授業単元:情報システム基礎
[2] 問題文(含コード&リンク):このC言語で作られたプログラムをC++に変えて下さい
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: すいません、よくわかりません。
                     講義では「Microsoft Visual Studio .NET 2003」を使用しています
 [3.3] 言語: CからC++へ
[4] 期限: 明日が終わるまで
[5] その他の制限: 特になし

明日までと急なことで申し訳ありませんがお願いします。

157:デフォルトの名無しさん
07/10/25 09:59:01
>>156
本当にそんな問題が……?

158:デフォルトの名無しさん
07/10/25 10:04:20
>>156
すでにC++ですっていって提出しちゃえば?
問題が曖昧すぎ

159:デフォルトの名無しさん
07/10/25 10:18:09
プログラムは配布されたプリントから打ち込みましたが、
問題文は文章でなく口頭で出題されました。全くこの通りです。

すでにC++になっているんでしょうか?

160:156 ◆B5khfT.h4o
07/10/25 10:19:39
すいません、今更ですがトリップをつけるのを忘れていました

161:デフォルトの名無しさん
07/10/25 10:56:23
>>159
拡張子cppでコンパイルしてみな

162:デフォルトの名無しさん
07/10/25 11:03:08
class Helonを作ってコンストラクタで三辺の長さで初期化して
get()で返すとか、そういう風にすればどう?

あとprintfをcoutに無理矢理直すとそれらしく見える。別にprintfでも
C++の範囲内なのだが。

163:デフォルトの名無しさん
07/10/25 11:31:04
>>156
無理矢理C++にしてみた。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

164:デフォルトの名無しさん
07/10/25 13:40:38
>>147
一つ目の製品はちゃんと発注するんですけど、二つ目以降は発注が行われないんですけど
どうすればいいんですか?

165:147
07/10/25 14:00:28
>>111 >>164

// 製品情報初期化
int ADD_NUM = (rand()%81)+FIRST_NUM;
int ADD_NUM_LOWER = (rand()%31)+50;
int ADD_DAYS = (rand()%5)+1;

の部分に

// 製品情報初期化
int ADD_NUM = (rand()%81)+FIRST_NUM;
int ADD_NUM_LOWER = (rand()%31)+50;
int ADD_DAYS = (rand()%5)+1;
inc_day = 0;

を書き足せばよかったみたい。

ということでソースは下記に。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

>>152も参考に。

166:デフォルトの名無しさん
07/10/25 14:06:31
>>165
できました。本当にありがとうございました。


167:65です
07/10/25 14:48:32
遅くなりました。すいません。
変数を州ごとに集計して平均を出す部分がよくわかりません。

>67
ファンクションについてはまだ授業で習っていないので、先生に避けたほうがいいと言われました。
でも、Voidとか変数のReferenceとか基本的なことは本で読んだので、使ってくださってもけっこうです。
提出するコードは、ファンクションを使わないように書き換えます。

>70
はい。州の略はその通りで大丈夫です。

168:デフォルトの名無しさん
07/10/25 15:30:40
>>147さん
URLリンク(kansai2channeler.hp.infoseek.co.jp)
っていう課題が新たに出されたので、やっていただけませんか?
以前のプログラムがとても見やすかったので、よろしくお願いします。

169:デフォルトの名無しさん
07/10/25 16:52:28
>>65 >>167
URLリンク(kansai2channeler.hp.infoseek.co.jp)

・しっかりとgetlineを使っている。
・line.substr(13, 2)とline.substr(23, 4)を使って読み込んでいるので、gasprices.txtの配置がずれたら限りなくアウト。

170:デフォルトの名無しさん
07/10/25 16:54:31
>>14
まだ、待っています。出来る方お願いします。

アドバイスはいくつか貰ったのですが、関数から関数への受け渡しがうまく行きません。

171:169
07/10/25 17:00:34
>>65 >>167 続き
・1行目にある #include <algorithm> は削除。
・出力は一応CSV のはず。
・アメリカの略号に誤入力があるかもしれない。
・アメリカの州って50だったっけ?

172:コンパイルは出来たがあってないぞ
07/10/25 17:06:21
#include<stdio.h>
#include<string.h>
void d_word(char st[], int pos, int len){
int l=strlen(st);
int i;
for(i=pos; i<=l-len; i++) {
st[i] = st[i+len]; }}

void search_del(char st1[], char st2[]){
int i, j;
int m1=strlen(st1);
int m2=strlen(st2);
for(i=0; i<=m1-m2; i++) {
for(j=0; j<m2; j++) {
if(st1[i+j] != st2[j])
break; }
if(j=m2) {
d_word(st1, i, m2);
m1 -= m2;
}}}

int main(){
char str1[256], str2[256];
printf("string? : ");
gets(str1);
printf("deleted word? : ");
gets(str2);
search_del(str1, str2);
puts(str1);
return 0;}

173:デフォルトの名無しさん
07/10/25 17:22:18
お願いします

問題【0からa-1までの整数の乱数をn個発生させ、発生した整数のヒストグラムを表示しなさい。
ただし。a<21とし、aとnはキーボードから入力する】
______________________________________________とりあえずいままで作成したコードです__________________________________
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
main(void)
{
int n,a,b,i,val;
int c[21];
printf("0からa-1までの整数の乱数をn個発生させ、\n");
printf("発生した整数のヒストグラムを表示させます\n");
printf("1から21までの任意の整数aを入力してください。\n");
scanf("%d",&a);
printf("任意の正の整数nを入力してください。\n");
scanf("%d",&n);
if(a<=0||a>=22)
{printf("aの値を入力しなおしてください。\n");}
else{
val=(double)rand()/(RAND_MAX+1)*a;
if(n<=0) {printf("nの値を入力しなおしてください。\n");}
else { for (i=0; i<=(a-1); i++)
{printf("aが%dのとき、%d回\n",i,c[val]);
c[val]=c[val]+1;}
}
}
}___________________________________________________________________________________________________________________________

174:173
07/10/25 17:24:12
結果表示はヒストグラムというか
~は~回という形式にします

volとかそのへんの扱いかたがよく分からずに参っております
よろしくお願いいたします。

175:156 ◆B5khfT.h4o
07/10/25 17:26:49
レスしてくれた方やプログラムを作ってくれた>>163さん、ありがとうございました。
とりあえず課題を出したうえで、C++にするのはどういうことか詳しく聞いてみます。

176:65です
07/10/25 17:31:19
>169さん
丁寧にありがとうございます。
はい、アメリカの州は50です。
ところで、私は途中まで以下のようにコードを組み立てたのですが、以下のようなやり方でも、プログラムを完成させることはできますか?

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main (int argc, char **argv)
{
char peek;
ifstream myFile;
string cityName,
stateName;
float gasPrice;
myFile.open("gasprice_file.txt");
while((peek = myFile.peek () ) ! = EOF) {
myFile >> cityName;
myFile >> stateName;
myFile >> gasPrice;
If(! myFile) {
myFile.clear();
cityName = cityName + " " + stateName;
myFile >> sateName;
myFile >> gasPrice;
{
myFile.close();
return 0;
}


177:デフォルトの名無しさん
07/10/25 17:53:30
>>173
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main(void)
{
int n=-1,a=0,b,i,val,c[21];
for(i=0;i<21;i++) c[i]=0;
srand((unsigned int)time(NULL));// 乱数の初期化
printf("0からa-1までの整数の乱数をn個発生させ\n");
printf("発生した整数のヒストグラムを表示します。\n");
printf("1から21までの任意の整数aを入力してください。\n");
while(!(a>0&&a<22)){
scanf("%d",&a);
if(a<1||a>21)
printf("aの値を入力しなおしてください。\n");
}
printf("任意の正の整数nを入力してください。\n");
while(n<0){
scanf("%d",&n);
if(n<0)
printf("nの値を入力しなおしてください。\n");
}
for(i=0;i<n;i++){
val=(double)rand()/(RAND_MAX+1)*a;
c[val]++;
}
for (i=0; i<=(a-1); i++)
printf("%d = %d回\n",i,c[i]);
}
表示はヒストグラムでなくてもいいのかな。

178:デフォルトの名無しさん
07/10/25 17:58:47
>>170
アドバイスって言うか>>20で回答もらってるじゃない。
・if(j=m2)をif(j==m2)
・printf("%d\n", st1);をprintf("%s\n", st1);
この2点の変更だけで動くはず。変更の仕方が間違ってるんだと思う。

179:デフォルトの名無しさん
07/10/25 18:06:46
>>177
whileの条件とループの中のifで2回判定するのはムダ

180:デフォルトの名無しさん
07/10/25 18:22:58
>>177の訂正。入力部分。

while(scanf("%d",&a),!(a>0&&a<22))
printf("aの値を入力しなおしてください。\n");
printf("任意の正の整数nを入力してください。\n");
while(scanf("%d",&n),n<0)
printf("nの値を入力しなおしてください。\n");

>>179の指摘したムダを省くと多分こうなると思います。

181:デフォルトの名無しさん
07/10/25 18:26:06
ってやっちまった。>>180だと文字入力したら無限ループしてしまう。
while(scanf("%d",&a),!(a>0&&a<22)){
printf("aの値を入力しなおしてください。\n");
fflush(stdin);
}
printf("任意の正の整数nを入力してください。\n");
while(scanf("%d",&n),n<0){
printf("nの値を入力しなおしてください。\n");
fflush(stdin);
}
こうでした。

182:デフォルトの名無しさん
07/10/25 18:34:53
>>178
この様にコード書いたけどコンパイラが通らないです。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

183:デフォルトの名無しさん
07/10/25 18:38:11
>>182
見ずにコメント。1.改行コード 2.全角スペース
そろそろコンパイラが吐いたエラー貼ったらどうだ?

184:デフォルトの名無しさん
07/10/25 18:42:43
>>182
#include<string.h>を追加。もしかしてstr~の関数習ってない?

185:デフォルトの名無しさん
07/10/25 18:45:55
>>177
ありがとうございます

実行してみたところ、
0以外の数字が何度やっても0回になってしまいますが
これはどうすればよろしいのでしょうか?

186:デフォルトの名無しさん
07/10/25 18:50:01
>>183
エラーが無いので下に張りました。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

>>184
追加しても効果なかったです。関数str~習ってます。

187:デフォルトの名無しさん
07/10/25 18:52:46
>>186
「エラーが無いので」×
「エラーが長いので」○



188:デフォルトの名無しさん
07/10/25 18:54:50
1] 授業単元:C言語
[2] 問題文:ファイルの内容を読み込んで、下記の例のように読み込んだ内容を
ディスプレイに表示させよ。

ファイルの内容
誕生年:2000
誕生月:1
誕生日:2
身長:120.0
体重:21.0
名字:Kouno
名前:Hiro

実行例
氏名 Kouno Hiroです。
生年月日は2000年1月2日です
身長120,0cm 体重21,0kgです
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年10月26日
[5] その他の制限: ライブラリ関数は使っても大丈夫です。

読み込むことはできたのですが、fgetsを使うと「誕生年:2000」と読み込んで
しまって2000だけ表示させることができません。

よろしくお願いします。

189:デフォルトの名無しさん
07/10/25 18:57:41
>>185
valにちゃんと値が入ってないのかな。
val=(double)rand()/(RAND_MAX+1)*a;

val=rand()%a;
に変えてみてください。

>>186
インデントを全角スペースでやってない?

190:デフォルトの名無しさん
07/10/25 19:04:06
>>189
盲点、スペースを全角でやっていました。

スペースを全て消したらコンパイルが通って、ちょんと動きました。

全角スペースでエラー返されるんですね、勉強になりました。

次からはスペースの全角/半角に気をつけます。

191:デフォルトの名無しさん
07/10/25 19:09:39
>>189
ありがとうございます!ちゃんとできました
助かりました

192:デフォルトの名無しさん
07/10/25 19:57:16
>>188
URLリンク(kansai2channeler.hp.infoseek.co.jp)

193:169
07/10/25 20:16:30
>>176
できます。あなたらならできます。

194:デフォルトの名無しさん
07/10/25 20:39:32
[1] 授業単元:プログラミング実験
[2] 問題文(含コード&リンク):
URLリンク(case.f7.ems.okayama-u.ac.jp)
にならって以下のデータ平均分散を用いて確率を出せ。10次元です。
データ
-18.858 1.046 -1.616 4.023 1.857 4.207 6.451 0.989
-3.807 0.744
平均 
-6.388222e+00 -1.383500e+01 -1.249702e+01 -3.617623e+00 2.185494e-01
3.840833e+00 6.477101e+00 -1.552781e+01 4.537848e+00 -2.995257e+00  
分散
1.504899e+01 2.376009e+01 2.176429e+01 2.650845e+01 2.850247e+01
5.442906e+01 3.594814e+01 7.991224e+01 2.946554e+01 3.397208e+01
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2007年10月26日まで
[5] その他の制限: なし


195:78&153
07/10/25 20:56:27
すいません、問題③に間違い&追加がありました。
実装仕様もあって、書いてたことが違ってました。
以下が訂正問題です。

[1] 授業単元:文字列操作プログラム
[2] 問題文(含コード&リンク):
配列とポインタを使用し、文字列操作を行うプログラムを作成せよ。
①独自のstrlen関数mystrlen関数を自作する。
  文字列のポインタを受け取り、文字列の長さを返す関数を作成する。

②独自のstrcpy関数mystrcpy関数を自作する。
  文字列のポインタ2つを受け取り、文字列のコピーを行う関数を作成する。

③独自のatoi関数myatoi関数を自作する。
  数値文字列のポインタを受け取り、数値を返す関数を作成する。

④独自のitoa関数myitoa関数を自作する。
  数値を受け取り、指定された基数で文字列変換を行う関数を作成する。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語:C言語
[4] 期限:2007年10月26日朝5:00まで

>>196に続く

196:78&153
07/10/25 20:56:58
>>195の続き

[5] その他の制限:実装仕様として、
①int mystrlen(const char*s)
第一引数:文字列のポインタ
 戻り値:文字列の長さを返す

②char*mystrcpy(char*s1,const char*s2);
第一引数:コピー先バッファのポインタ
 第二引数:コピー元文字列のポインタ
 戻り値:第一引数の文字列へのポインタを返す

③int myatoi(const char*nptr);
第一引数:変換元の数値文字列
 戻り値:変換された値を返す

④char*myioa(int value,char*buff,int radix);
第一引数:変換元の整数
 第二引数:変換後の数値文字列を格納するバッファのアドレス
 第三引数:基数(何進数で変換するか。2~36の範囲内で指定可能)
 戻り値:第二引数の文字列へのポインタを返す

と、なっております。
すいませんが回答の方をよろしくお願いします

197:デフォルトの名無しさん
07/10/25 21:03:26
>>66 = >>71 = >>93 = >>130 = >>194

198:デフォルトの名無しさん
07/10/25 21:28:40
>>195 >>196
いまさら?これから変更するの面倒だし
期限:2007年10月26日朝5:00
ってことは残り7時間、無理。
がんばれノシ

199:デフォルトの名無しさん
07/10/25 21:31:16
標準ライブラリ使っちゃダメって書いてないんだからそのまま引数渡せばいいだろ。

200:デフォルトの名無しさん
07/10/25 21:31:22
>>123
ありがとうございます!
感謝します!

201:デフォルトの名無しさん
07/10/25 21:36:03
よろしくお願いします。
[1] 授業単元:C++プログラミング
[2] 問題文(含コード&リンク):
次のクラス定義を参照して、関数 func 内の処理を記述してください。
関数 func 内では p が派生クラス MagazineMotorcycle のインスタンスを指すかどうかを調べて、
もしそうならメンバー関数 Reserve を呼び出してください。そうでなければ false を返してください。

class Magazine
{
public:
virtual bool Order(int amount = 1) = 0;
};
class MagazineMotorcycle : public Magazine
{
public:
bool Order(int amount = 1) {}
bool Reserve() {}
};
bool func(Magazine* p)
{
// 可能ならば MagazineMotorcycle::Reserve() を呼び出す処理
}

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C++
[4] 期限: 10/26 12:00
[5] その他の制限:なし


202:78&153
07/10/25 21:45:03
>>198
昨日書き込んで、今日間違い気づいたんですよorz
できればお願いします。自分にとっては、これってホントに初級編!?って
いうぐらい難しい

203:デフォルトの名無しさん
07/10/25 21:46:42
>>201
bool func(Magazine* p)
{
    // 可能ならば MagazineMotorcycle::Reserve() を呼び出す処理
    if (MagazineMotorcycle* mm = dynamic_cast<MagazineMotorcycle*>(p))
        mm->Reserve();
    return false;
}

これでおk?

204:デフォルトの名無しさん
07/10/25 22:03:47
[1] 授業単元:データ構造とアルゴリズム1
[2] 問題文(含コード&リンク):stack.cpp 中のpushとpop関数を完成せよ。
stack.cpp:URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS:win xp
 [3.2] Microsoft Visual Studio .NET 2003
 [3.3] 言語:c++
[4] 期限:2007年10月26日9:30まで
[5] その他の制限:(どこまで習っているか)構造体、ファイル処理まで

どうかよろしくお願いします。

205:デフォルトの名無しさん
07/10/25 22:10:08
>>203
ありがとうございます。
こちらを提出してみます。

206:デフォルトの名無しさん
07/10/25 22:12:28
>>201
bool func(Magazine* p)
{
    // 可能ならば MagazineMotorcycle::Reserve() を呼び出す処理
    if (MagazineMotorcycle* mm = dynamic_cast<MagazineMotorcycle*>(p))
        return mm->Reserve();
    return false;
}

こんどこそおk?

207:デフォルトの名無しさん
07/10/25 22:26:15
>>204

// データvalをスタック x に積む
void push(int *x,int val)
{
    // (1) スタックがオーバフローかどうかをチェック
    if (stack_pointer < stack_size) {
        // (2) オーバフローでなければデータ val をスタック x につむ
        x[stack_pointer++] = val;
    }
}

// データをスタック x からおろす
void pop(int *x)
{
    // (1) スタックがアンダーフローかどうかをチェック
    if (stack_pointer > 0) {
        // (2) アンダーフローでなければスタックxからデータをおろして、
        // スタックポインターを調整    
        stack_pointer--;
    }
}

これでおk?

208:デフォルトの名無しさん
07/10/25 22:41:25
>>207おkです。感謝です。
本当にありがとうございます。
助かりました。

209:57
07/10/25 22:54:44
>>60
レスありがとうございます。
今日の朝、main関数を作って動かしてみたのですが、
おかしいです。
例えば、連結リストのaの値を10、11、12とすると、
11、10、56787
と、一番最後が変な数値になってしまいます。
並び替える前に表示すると、10、11、12となってちゃんと動作するので、
表示する関数は間違ってないと思います。
一応補足として、自分が扱っている連結リストは一番最初に、aに値が
含まれていない要素があり、その後からaに値が含まれる要素が並びます。

210:デフォルトの名無しさん
07/10/25 23:10:52
>>202
#include<stdio.h>
int mystrlen(const char *s)
{
int len=0;
while(*s++!='\0') len++;
return len;
}
int myatoi(const char *nptr)
{
int i,n=0,sign=0,len=0;
const char *s=nptr;
while(*s++!='\0') len++;
if(*nptr=='-'){
sign++; len--; *nptr++;
}
for(i=0;i<len;i++)
n=10*n+*nptr++-'0';
return sign ? -n : n;
}
mystrcpy,myitoaは>>83のままで仕様満たしてるのでそれ以外を。

211:デフォルトの名無しさん
07/10/25 23:11:09
>>147さん
URLリンク(kansai2channeler.hp.infoseek.co.jp)
っていう課題が新たに出されたので、やっていただけませんか?
以前のプログラムがとても見やすかったので、よろしくお願いします。


212:デフォルトの名無しさん
07/10/25 23:19:38
>>168さん、この生産管理プログラムの期限はいつまででしょうか。

213:78&153
07/10/25 23:21:11
>>83>>210
遅い時間に本当にありがとうございます。
お手数おかけ致しました。(TT)

214:デフォルトの名無しさん
07/10/25 23:21:23
>>209
糞リストの仕様を書かなかったほうが悪い。

215:デフォルトの名無しさん
07/10/25 23:22:42
お願いします!!

[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
 1:int型整数をchar型配列の文字列に変換するitoa関数を作れ
 2:long型整数をchar型配列の文字列に変換するltoa関数を作れ
 3:float型小数をchar型配列の文字列に変換するftoa関数を作れ
[3] 環境
 [3.1] OS: XP sp2
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語: C
[4] 期限: 明日26日(金)の16時まで

216:デフォルトの名無しさん
07/10/25 23:33:35
>>215
1.
char* itoa(int n){static char c[16];sprintf(c,"%d",n);return c;}
2.
char* ltoa(long n){static char c[16];sprintf(c,"%ld",n);return c;}
3.
char* ftoa(float n){static char c[16];sprintf(c,"%f",n);return c;}

217:デフォルトの名無しさん
07/10/25 23:34:03
>>215
itoaは >>83 にあるよ。ltoaはitoaとほとんど変わらん。
ftoaも小数点以下あるだけであんま変わらないな。

218:57
07/10/25 23:37:20
>>214
申し訳ないです。

リストの仕様は以下の様になります。
・リストは連結リストで片方向リストです。
・次の要素がない場合(リストの一番最後)は、次の要素へのポインタをNULLとします。
・リストの一番最初には、aに値が含まれていない要素があります。

よろしくお願いします。

219:デフォルトの名無しさん
07/10/25 23:42:13
木曜日の15時までです。

220:デフォルトの名無しさん
07/10/25 23:45:52
>>218
static struct c *re_internal(struct c *l)
{
struct c *p;
if(l->n==NULL) return l;
p = re(l->n);
l->n->n = l;
l->n = NULL;
return p;
}
struct c *re(struct c *l)
{
if(l->n) l->n = re_internal(l->n);
return l;
}

221:デフォルトの名無しさん
07/10/25 23:49:08
再帰は?

222:215
07/10/26 00:03:01
>>216
さすがにsprintfは使うわけにはいかないかと・・・w

>>217
ありがとうございます。
>>83を参考にしてやってみようと思います。

223:57
07/10/26 00:03:47
>>219
減点はするけど、出さないよりは、ましだから今週の課題と一緒に来週に
出しなさいと言われました。

>>220
ありがとうございます。
リストの仕様は>>218に書いた通りですが、
問題自体は>>57に書いた通り、再帰を使わないと…

224:デフォルトの名無しさん
07/10/26 00:08:57
>>220
re_internalの中でre呼び出してる

225:57
07/10/26 00:23:54
>>224
再帰って自分自身の関数を呼び出すんじゃないですっけ?
これだと、他の関数を呼び出してるだけな気がするのですが…
一つの関数で作ることって出来ないのですかね?


226:デフォルトの名無しさん
07/10/26 00:24:24
>>218 直した
static struct c *re_internal(struct c *l)
{
struct c *p;
if(l->n==NULL) return l;
p = re_internal(l->n); // <- この行
l->n->n = l;
l->n = NULL;
return p;
}
struct c *re(struct c *l)
{
if(l->n) l->n = re_internal(l->n);
return l;
}

>>224 thx

227:57
07/10/26 00:50:35
>>226
ありがとうございます。

228:デフォルトの名無しさん
07/10/26 00:58:09
リストの先頭にデータを入れないことによってどんな利点があるの?

229:168
07/10/26 00:58:45
>>147・212
28日までにお願いしたいんですけど・・・
よろしくお願いします。

230:デフォルトの名無しさん
07/10/26 07:29:15
1] 授業単元: C言語
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 2007年10月26日
[5] その他の制限: ライブラリ関数は使ってもおkです

徹夜で考えたんですが分からなかったのでお願いします

URLリンク(kansai2channeler.hp.infoseek.co.jp)のよに書いたのですが
セグメントエラーが出てしまいます。
ダメなところとかがあったら直して教えてください。

231:デフォルトの名無しさん
07/10/26 07:51:19
>>230
比較用演算子 == を使うこと.
if(fop=NULL)
if(fout=NULL)

あと、終盤で下記不要
> heikin=goukei/NUM;
> fprintf(fout,"番号\t平均点との差\n");
> for(i=0;i<NUM;i++)
> {
> fscanf(fop,"%d%d",&gakusei[i].bangou,&gakusei[i].seiseki);
> goukei=+gakusei[i].seiseki;
> }

最後は goukeiもNUMも整数なのでgoukei/NUMは整数となるのを防ぐ
heikin=(double)goukei/NUM;

232:デフォルトの名無しさん
07/10/26 08:09:19
>>230
14~21行目: 使わない変数 (fairu, cp, sirusi1, sirusi2) の宣言は外しましょう

21行目: heikin は int 型でいいんじゃない?
double 型で行きたい場合、int型変数 (seiseki, goukei等) との計算をするときにキャストとか考えた方が良い

24,26行目: scanf("%s", &open); → scanf("%s", open);
ポインタを習っているかは知りませんが、配列名は単独で使用するとポインタ型になります

30,42行目: if (fop=NULL) → if (fop == NULL)
C言語での比較演算子は == です

56行目: goukei=+gakusei[i].seiseki; → goukei += gakusei[i].seiseki;
演算子を見直しましょう

63~70行目: 平均2回計算してるから消そう

74行目: "%d\t%dn" → "%d\t%d\n"
改行文字は "\n" で表します

233:デフォルトの名無しさん
07/10/26 08:16:51
>>231さん
>>231さん
朝早くだったのにレスありがとうございます。

おかげ様でセグメントエラーも出ないで実行できました
来週中間試験があるので
もっと勉強しなきゃいけないなと思いました。

ホントにお世話様でした

234:デフォルトの名無しさん
07/10/26 08:46:17
中間試験って紙にコード書くの?

235:課題お願いします
07/10/26 09:05:21
[1] 授業単元:プログラミング演習
[2] 問題文:n個からr個を選ぶ組み合わせは、nCr = n!/r!(n-r)! ただし、n! = 1*2*3*…*(n-1)*nで求められる。そこで、n!を求める関数functorial(n)を定義し、それを3度呼び出す形で、組み合わせnCrをもおめるプログラムを作成せよ。
[3] 環境
 [3.1] OS: (WindowsXP)
 [3.2] コンパイラ名とバージョン:Visual C++
 [3.3] 言語: C
[4] 期限: 今日の昼までに。
[5] その他の制限: 授業で配列とポインタは習いました。この問題は「関数」というセクションの問題です。大学の授業なのであまり難しくなり過ぎないようにお願いします。


236:235
07/10/26 09:07:30
書き間違いorz
[2] 問題文:n個からr個を選ぶ組み合わせは、nCr = n!/r!(n-r)! ただし、n! = 1*2*3*…*(n-1)*nで求められる。そこで、n!を求める関数functorial(n)を定義し、それを3度呼び出す形で、組み合わせnCr を求めるプログラムを作成せよ。

237:デフォルトの名無しさん
07/10/26 09:09:55
int function(int n)
{
return n<2 ? 1 : n * function(n-1);
}

int nCr(int n, int r)
{
return function(n) / function(r) / function(n-r);
}


238:デフォルトの名無しさん
07/10/26 09:11:28
一瞬で片付くというのもある意味爽快だ

239:デフォルトの名無しさん
07/10/26 09:20:03
>>234
中間試験は筆記と実技があって
実技は端末からサーバーにアクセスして書きます。

実技は今のままじゃ、受かる気がしません…
ファイル処理、ポインタがかなりヤバイです

240:デフォルトの名無しさん
07/10/26 09:23:34
関数名functorialだw
階乗ならfactorialだし、関数ならfunctionだからfuncだけみて間違っちまった。

241:デフォルトの名無しさん
07/10/26 10:59:15
1] 授業単元: プログラミング
[2] 問題文:3人の昼食代を入力し、その平均を関数aveにて計算し、
「割り勘で△円」と表示するプログラム
(定義例:double ave(double c1,double c2,double c3))
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: ([2007年10月26日まで] できれば早いほうがうれしいです。
[5] その他の制限:定義例を使ってください
if,while,switch,forは習いました

お願いします

242:デフォルトの名無しさん
07/10/26 11:01:22
なんで金額がdoubleなんだよ・・・

243:デフォルトの名無しさん
07/10/26 11:05:00
>>234
別人だけど、フロッピーでソース提出とか、メールで添付とかもあるけど、一番多いのは紙。

正直、このご時勢で紙でやるのは馬鹿だと思う。

244:デフォルトの名無しさん
07/10/26 11:14:18
>>242
小数点出てもいいらしいです。要はaveを使って計算したいのだと思います。

245:デフォルトの名無しさん
07/10/26 11:18:40
俺の高校は紙にVBA書かされたぜ

246:デフォルトの名無しさん
07/10/26 11:19:06
>>243
国がやってる情報処理系の資格試験は、全部紙だぞ?

247:デフォルトの名無しさん
07/10/26 11:24:49
先日はありがとうござました。

[1] 授業単元: C言語演習Ⅱ
[2] 問題文(含コード&リンク):
前回の授業で"姓/名"という形式の文字列を入力すると、これを姓と名を表す2つの文字列に分割するプログラムを作成した。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

このプログラムを関数を用いた形に書き換えようと思い、次のプログラムを作成した。

このプログラムを実行すると、おかしな出力になってしまった。

問題1:このプログラムのどこが間違っているのか、その理由を答えよ。
    (ヒント:pt_s,pt_mはローカル変数)
問題2:プログラムを書き直せ。
    (配列を渡す方法、ポインタのアドレスを渡す方法などある)

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: cygwin gcc
 [3.3] 言語: C言語
[4] 期限:29日(月)

248:デフォルトの名無しさん
07/10/26 11:34:38
>>239
うちも紙~

さすがにプログラムを卓上で作りコード全部書けは無いけど、
5~6行くらいの穴埋めでプログラムを完成させよとか。

249:デフォルトの名無しさん
07/10/26 11:59:09
流石に資格試験でソース全部書けは無いだろ。
あったら死ねるけどw
普段書かない記号とか書かなきゃならんし、
インデント一つ追加しようと思ったらその間書き直しだし、
書いてる事がタイプ以上に考えてる事に追いつかないし、
変数名チェックも全部自分でしなけりゃならんから面倒だし。

250:デフォルトの名無しさん
07/10/26 12:01:52
>>239
うちは進んでるよ。
テストプログラムを当日教室で下してきて実行すると、P検みたいなプログラムが走って画面左半分が問題書いてあって、右半分の上がコマンドプロンプト?で下がテキストパッドになってる。

問題にある仕様のプログラムをテキストパッドで作って、「実行」ボタンがその下にあるから押すとコマンドプロンプトで自動的にコンパイル+実行してくれる。

作ってる途中のものを試しでコンパイルする度、実行はうざかった。

問題全部作ったら問題1番最後の回答終了を押すと自動で結果をサーバーに送信して、プログラム終了。

ファイヤーウォールに引っ掛かって提出できないとか、提出時に回線が込んでて提出できないとかで、良悪あるけどね。

251:デフォルトの名無しさん
07/10/26 13:04:09
>>250
なんだかすごい環境だな。

252:デフォルトの名無しさん
07/10/26 13:09:33
>>239
高専電気科の情報の授業では
ごく普通にPCでやってるぞ
しかも、授業で書いたコードを参照してもいいというオマケ付きで。

授業理解度を確かめるのならこういう方式でもよさげな気がする。

253:デフォルトの名無しさん
07/10/26 13:12:10
>>241
これは……一見するととても簡単そうなプログラムに見える……
そう見えるのはオレだけか……?

254:デフォルトの名無しさん
07/10/26 14:03:27
strcpyの使い方で質問があるんですが、
strcpy(a+(変数),b+(変数));
これはどういう意味でしょうか?+が特に分からないんですが…
a、bは配列です

255:デフォルトの名無しさん
07/10/26 14:06:41
>>250
せっかくプログラミングやってんだから、
講師の側でもそんな感じでテスト用プログラム作って欲しいもんだな

>>252
そういう方式もいいよなあ
実際のプログラミングだとソース参照し放題、ネットで調べ放題なわけで
それでもできない人がいるんだから、十分実力測れるだろう
プログラミングは暗記じゃない

256:デフォルトの名無しさん
07/10/26 14:38:19
>>254
その配列a, bの +変数分以降のみの文字列をコピーするという意味。
変数が 2 だったらaの先頭 2 文字は変化しない。

257:デフォルトの名無しさん
07/10/26 15:04:04
>>256
分かり易い解説ありがとうございました

258:235
07/10/26 15:23:52
>>237
ありがとうございました!!

259:デフォルトの名無しさん
07/10/26 16:17:50
>>247
元のプログラムではポインタ変数は仮引数なので呼び出し元に結果が反映されない
#include <stdio.h>

void namesplit(char [], char **, char **);

int main(void){
char full[200];
char *pt_sei, *pt_mei;

printf ("姓/名で入力せよ:");
scanf("%s", full);

namesplit(full, &pt_sei, &pt_mei);

printf("姓:%s\n 名:%s\n", pt_sei, pt_mei);
return 0;
}

void namesplit(char f[], char **pt_s, char **pt_m)
{
/*pt_sとpt_mをfの先頭アドレスにセット*/
*pt_s = f; *pt_m = f;
/*スラッシュまでpt_mを移動*/
while (**pt_m != '/')
(*pt_m)++;
**pt_m = '\0';
(*pt_m)++;

/*これで、pt_seiとpt_meiはそれぞれ姓と名を指す場所に移動した?*/
}

260:デフォルトの名無しさん
07/10/26 17:08:00
>>253
わかる人は簡単だよ
でも、習ったばっかりなんだろ
最初はみんなわからないもんだよ

261:デフォルトの名無しさん
07/10/26 17:32:12
一分で書けるけど書かない

262:デフォルトの名無しさん
07/10/26 18:04:04
なぜ書かない?

263:デフォルトの名無しさん
07/10/26 18:17:14
単純に3つの引数とって平均を求める関数て言えばいいのに、なんで割り勘とか余計な設定つけてんだよ。
一人一人の代金がわかってるなら、割り勘になんてしないだろ。

264:デフォルトの名無しさん
07/10/26 18:43:15
>>263
「相乗平均じゃなくて相加平均だよ^^ お前ら間違えんなよ^^」て言いたかったんだよ
気の回る良い先生じゃないか

265:デフォルトの名無しさん
07/10/26 19:40:50
宿題マダァ?(・∀・ )っ/凵⌒☆チンチン

266:デフォルトの名無しさん
07/10/26 22:09:36
ひつまぶしキボンヌ

267:デフォルトの名無しさん
07/10/26 22:12:45
質問テンプレ】
[1] プログラミング
[2] 自然対数の底eを求めるプログラムをSRT除算を用いて求めよ。
exp(x)=Σ(n=0,∞){1/n!}=1/0!+1/2!+1/3!+…+1/n!
   =1+(1+1/2(1+1/3(1+…+1/n)))
固定小数点で、整数部を16ビット、小数部を48ビットとする(n≧17)
[3] 環境
 [3.1] Vine Linux
 [3.2] gcc
 [3.3] C言語
[4] 2007年10月29日8:40まで でも早い方がいいです。
[5] ループを使用してお願いします。

268:デフォルトの名無しさん
07/10/26 22:12:55
全ディレクトリのファイルを調べてサイズが一致するファイルをプルパスで出力せよ

269:デフォルトの名無しさん
07/10/26 22:19:18
URLリンク(journal.mycom.co.jp)

270:デフォルトの名無しさん
07/10/26 22:22:06
>>265
自分で要求するほど、宿題を回答してやりたいのか。

この掲示板の鏡だな、解けない問題は無いってか?

271:デフォルトの名無しさん
07/10/26 22:25:20
SRT除算は簡単ではないな

272:デフォルトの名無しさん
07/10/26 22:43:03

[1] プログラミング
[2] URLリンク(doiob.net)
シンプソンの公式を用いて定積分を求めるプログラムを作成し、
以下2つの定積分を計算せよ。ただし刻み幅 h=0.1 とする。
[3] 環境
 [3.1] Linux
 [3.2] gcc
 [3.3] C言語
[4] 2007年10月29日

お願いします

273:デフォルトの名無しさん
07/10/26 22:46:03
>>269
これはむずい
もう少し前のページから見ないと単語がわからなすぎる

274:デフォルトの名無しさん
07/10/26 22:54:36
シンプソンは簡単 関数をf(x)とし、 区間(a,b)を一分割で積分するとする
m=(a+b)/2 、d=(b-a)とするとき積分値は d/6 * (f(a)+f(b)+4f(m))だ
N分割のときはこの値を使えばいい

275:デフォルトの名無しさん
07/10/26 22:57:47
>>274
なぜコードで示さないんだ

276:デフォルトの名無しさん
07/10/26 22:59:44
具体的には、区間(a,b)をN分割するならば、

F(s,t)= (t-s)/6 * (f(s)+f(t)+4f(s+t /2)) 、 d = (b-a)/Nとおくとき

n=0,・・・,N-1に対しF(a+nd, a+(n+1)d)の和を計算すればよい

277:デフォルトの名無しさん
07/10/26 23:02:42
>>276
擬似コードだけなら単位はやれないな

278:デフォルトの名無しさん
07/10/26 23:03:56
>>275
プログラム自体は計算と結果の出力だけの簡単なものだからチャレンジしてみなってことじゃない?

計算内容自体は>>274が解説してくれてるし。
もしくは作成中か。

279:デフォルトの名無しさん
07/10/26 23:08:01
>>259
ありがとうございます。ポインタ変数が問題だったんですね。

仮引数だったのをポインタのポインタで呼び出しが出来るようにしたと。

なるほど納得しました。

280:デフォルトの名無しさん
07/10/26 23:09:01
#include <stdio.h>
#include <math.h>

double f(double x){return exp(-x*x);}
double g(double x){return exp(1/sqrt(1+x*x*x*x));}

#define F(a,b) (f(a)+f(b)+4*f((a+b)/2))*(b-a)/6
#define G(a,b) (g(a)+g(b)+4*g((a+b)/2))*(b-a)/6


int main(){
double x,d=0.1,sum;
sum=0;
for(x=0;x<1;x+=d)sum+=F(x,x+d);
printf("%f\n",sum);

sum=0;
for(x=0;x<1;x+=d)sum+=G(x,x+d);
printf("%f\n",sum);
}

281:デフォルトの名無しさん
07/10/26 23:10:31
訂正
double g(double x){return 1/sqrt(1+x*x*x*x);}

282:デフォルトの名無しさん
07/10/26 23:12:03
値があっているか確認したいが数値計算ソフトだれか持っている?

283:デフォルトの名無しさん
07/10/26 23:12:09
何にせよ動作するリストを出すのがこのスレってもん

284:デフォルトの名無しさん
07/10/26 23:12:15
>>274 >>276
で組み込む計算式作ってくれてるから、もう課題出来てるも同然な気がする。

だって、その式を表示するだけで完成でしょ。

285:デフォルトの名無しさん
07/10/26 23:17:30
>>272 カウンタは整数のが良いと思うので便乗
#include <stdio.h>
#include <math.h>

double func1(double x)
{
    return sqrt(pow(x, 4) + 1);
}

double func2(double x)
{
    return exp(-pow(x, 2));
}

int main(void)
{
    double l = 0.0, r = 1.0, h = 0.1, s = 0;
    int i;

    for(i = 0; i < (r - l)/h; i += 2)
        s += h/3*(func1(l + i*h) + 4*func1(l + (i + 1)*h) + func1(l + (i + 2)*h));
    printf("%g\n", s);

    for(i = 0; i < (r - l)/h; i += 2)
        s += h/3*(func2(l + i*h) + 4*func2(l + (i + 1)*h) + func2(l + (i + 2)*h));
    printf("%g\n", s);

    return 0;
}

286:デフォルトの名無しさん
07/10/27 00:03:16
[1] 授業単元: コンピューター
[2] 問題文(含コード&リンク):整数演算と浮動小数点演算で自分のプロセッサのスピードをテストするプログラムと結果を示しなさい。 テストするのは整数、浮動小数点ともに、加減乗除の4つづ、計8つです。
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:
[5] その他の制限: 結果はcygwinのtimeを使えってばっちゃが言ってました。
お願いします。


287:デフォルトの名無しさん
07/10/27 00:07:31
ふざけてんの

288:デフォルトの名無しさん
07/10/27 00:13:39
>>280
副作用乙

289:デフォルトの名無しさん
07/10/27 00:18:05
なんで6で割っているんだぜ?

290:デフォルトの名無しさん
07/10/27 00:34:16
>>289
#include <stdio.h>
#include <math.h>

double f(double x){return exp(-x*x);}
double g(double x){return exp(1/sqrt(1+x*x*x*x));}

#define F(a,b) (f(a)+f(b)+4*f((a+b)/2))*(b-a)/6
#define G(a,b) (g(a)+g(b)+4*g((a+b)/2))*(b-a)/6

int main(){
double x,d=0.001,sum;
sum=0;for(x=0;x<1;x+=d)sum+=F(x,x+d);
printf("%f\n",sum);

sum=0;for(x=0;x<1;x+=d)sum+=G(x,x+d);
printf("%f\n\n",sum);

//単純な定積分
int n,N=1/d;
sum=0;for(n=0;n<N;n++)sum+=d*g(n*d);
printf("%f\n",sum);}

291:デフォルトの名無しさん
07/10/27 00:47:03
Integral(f,a,b,d)って出来るの? 関数わたし

292:デフォルトの名無しさん
07/10/27 00:55:29
スマソ全然見てなかったわ

293:272
07/10/27 01:03:57
ありがとうございました
解説で分かってきたので色々と試してみます

294:291
07/10/27 01:09:38
できた
#include <stdio.h>
#include <math.h>

double f(double x){return exp(-x*x);}
double g(double x){return 1/sqrt(1+x*x*x*x);}
#define F(a,b) (f(a)+f(b)+4*f((a+b)/2))*(b-a)/6

typedef double (*func)(double);
double Integral(func f,int a,int b, double d){
int n,N=(int)1/d;double s=0;
for(n=0;n<N;n++)s+=F(n*d,n*d+d);
return s;}

int main(){
double d=0.001;
printf("%f\n",Integral(f,0,1,d));
printf("%f\n",Integral(g,0,1,d));}

295:デフォルトの名無しさん
07/10/27 01:19:55
先こされた。
#include<stdio.h>
#include<math.h>
double quadInterpol( double (*fun)( double ), double begin, double end )
{
return ((*fun)(begin) + 4*(*fun)( (begin+end)/2 )
+ (*fun)(end)) * (end-begin)/3;
}
double integral( double (*fun)( double ), double begin, double end, double h )
{
double result = 0.0;
double pos = begin;
while( pos <= end )
{
result += quadInterpol( (*fun), pos, pos+h );
pos += h;
}
return result;
}
double f(double x)
{
return exp(-x*x);
}
int main(void)
{
const double diff = 0.1;
printf("result=%f\n",integral(f,0.0,1.0,diff));
return 0;
}


296:デフォルトの名無しさん
07/10/27 01:26:36
>>294
出題者じゃないんだが。

typedef double (*func)(double);
これってなにやってるの?

297:57
07/10/27 01:29:04
>>228
自分も詳しい理由は分かりませんが、この再帰の問題以前にも、リストで
色々な動作をする関数を作ったので、その関数を作る時、関数に引数を
渡したりするのに、リストの先頭にデータを入れない方が都合が
良いんじゃないですかね?
リストは先頭にデータを入れないとばかり思ってたので、よく分かりませんが。

298:291
07/10/27 01:30:26
>>296
たとえばDLLを使うとき次のように書く 型の定義

typedef int (__stdcall *FNC)(const HWND , LPCSTR , LPSTR , const DWORD);

main(){
HINSTANCE hd = LoadLibrary("UNZIP32.DLL");
FNC p = (FNC)GetProcAddress(hd,"UnZip");
}

299:デフォルトの名無しさん
07/10/27 01:30:41
>>290
すいませんd=0.001となってるのが良く分からないんですが

300:291
07/10/27 01:31:39
>>299 細かくした方が値が正確になるって事だけだ d=0.1でいい

301:コッチェビン
07/10/27 01:32:28
なんかすごいシコシコしたい・・・

302:デフォルトの名無しさん
07/10/27 01:33:37
>>300
どうもです

303:デフォルトの名無しさん
07/10/27 01:34:19
>>298
つまりfuncという関数型ができたということ?
そうしたらIntegral(func funcName,...)
とすべきでは?
それと
#define F(a,b) (f(a)+f(b)+4*f((a+b)/2))*(b-a)/6
ここでfつかっちゃったらマクロFでは常に関数fが呼び出されることにならない?


304:デフォルトの名無しさん
07/10/27 01:35:47
ちなみに追い詰めてるわけじゃないです。数値あわせがしたいだけです。
計算結果に自信がないので。

305:291
07/10/27 01:36:19
>>303
呼び出すのはfでいいんだよ 引数でfとかgを指定するから

306:291
07/10/27 01:37:56
>>304
単純な定積分の値と比較したから正解だろう >>290で求めている
あと>>290はgが間違えていて
正しくは
double g(double x){return 1/sqrt(1+x*x*x*x);}

307:デフォルトの名無しさん
07/10/27 01:38:07
>そうしたらIntegral(func funcName,...)
スマソ。そうなってた。

308:デフォルトの名無しさん
07/10/27 01:40:16
>>305

double Integral(func f,int a,int b, double d){
int n,N=(int)1/d;double s=0;
for(n=0;n<N;n++)s+=F(n*d,n*d+d);
return s;}

引数でfという関数を取っているのは確かなんだけど
関数内で一回も使ってない。

309:291
07/10/27 01:41:38
>>308
Fがマクロだから使っている
あと使っていないのはaとbだ 勝手に(0,1)だとおもって書いてしまった

310:デフォルトの名無しさん
07/10/27 01:41:57
>>308
マクロ展開してみればいい
でも名前が被っているのは気持ち悪いな

#include<stdio.h>

void a(void){printf("func a\n");}
void b(void){printf("func b\n");}
void c(void (*a)(void)){a();}

int main(void){
c(a);
c(b);
return 0;
}

311:デフォルトの名無しさん
07/10/27 01:43:31
>>309
なるほどね。理解できました。
exp(-x*x)の関数名をfにしないでくれたらよかった。


312:デフォルトの名無しさん
07/10/27 01:53:03
>>294
粘着すまん。
6じゃなくて3で割らないといけなくないか?
h=0.1で指定されているし。

313:修正版
07/10/27 02:00:49
#include <stdio.h>
#include <math.h>

double exp_x2(double x){return exp(-x*x);}
double ichiwaru_root_1tasu_x4(double x){return 1/sqrt(1+x*x*x*x);}
#define F(a,b) (f((a))+f((b))+4*f(((a)+(b))/2))*((b)-(a))/6

typedef double (*func)(double);

double Integral(func f,double a,double b, double d){
int n,N;double s=0;
N=(int)(b-a)/d;
for(n=0;n<N;n++)
s+=F(a+n*d,a+(n+1)*d);
s+=F(N*d,b);return s;}

int main(){
double d=0.1;
printf("%f\n",Integral(exp_x2,0,1,d));
printf("%f\n",Integral(ichiwaru_root_1tasu_x4,0,1,d));}

314:修正版
07/10/27 02:03:09
>>312
そもそも2hの幅で積分しろってことか それならそうだな

315:デフォルトの名無しさん
07/10/27 02:04:51
うがあぁ数値が合わない。
何が違うんだ。。。。。

316:修正版
07/10/27 02:07:29
>>312
でも最小の区間を与えた方が標準的だと思う
Integral(f, 0, 1, 0.2))と呼び出せば正解と一致する値が出るはずだ

317:デフォルトの名無しさん
07/10/27 02:11:03
>>316
考えてみる。
正解はちなみにいくつなんだ
俺は
result=1.560123
result=1.988458

そっちは
1.493648
1.854075

他の検証方法ってある?Excelあたりでできるもんかね?

318:デフォルトの名無しさん
07/10/27 02:12:30
あ。6->3にした値ね。

319:修正版
07/10/27 02:17:43
正解は0.746825と0.927040じゃないか

単純な積分値とほぼ一致する
#include <stdio.h>
#include <math.h>

double f(double x){return exp(-x*x);}
double g(double x){return 1/sqrt(1+x*x*x*x);}

int main(){
double x,s,d=0.001;

s=0;for(x=0;x<1;x+=d)s+=d*f(x);
printf("%f\n",s);

s=0;for(x=0;x<1;x+=d)s+=d*g(x);
printf("%f\n",s);
}

320:デフォルトの名無しさん
07/10/27 02:25:04
Excelで確認したところ俺もexp(-x*x)の単純な積分の値は
0.747508011
ぐらいになった。
では6で割るべきなのか。

321:デフォルトの名無しさん
07/10/27 02:28:04
6->3にした結果

result=0.780061
result=0.994229
そちら
0.746825
0.927040

そっちの勝ちだ.orz
ノシ

322:デフォルトの名無しさん
07/10/27 02:28:58
間違えた
3->6

323:修正版
07/10/27 02:31:52
URLリンク(doiob.net)
この式よく見てみろ
hを算出するときに既に2で割っている 分割数nに対して2nで割っているからややこしいだけ

324:デフォルトの名無しさん
07/10/27 02:34:34
そういうことか・・・ややこしい。

325:デフォルトの名無しさん
07/10/27 02:40:23
便乗質問なんだけど
h=0.1で与えられてるから式の通りに3で割るんじゃないの?
の辺りがイマイチ理解できんので教えてくれ…

326:修正版
07/10/27 02:46:21
>>325
問題どおりにやるとひとつひとつの積分区間は2hなので
6で割る部分と打ち消しあって3になる

幅hの積分を求めるのではなく x とx+hとx+2hの三点を2次関数で近似したいと言うことなんだろう
だから2h幅になっている

327:修正版
07/10/27 02:48:01
>>325
原理、近似の方法はここに書いてある
URLリンク(ja.wikipedia.org)

328:デフォルトの名無しさん
07/10/27 02:54:49
ありがとうございます

329:デフォルトの名無しさん
07/10/27 03:05:21
>>287
ふざけてないです。
おおマジです。

330:デフォルトの名無しさん
07/10/27 03:57:35
引用しますが、計算式を
#define F(a,b,h) (f(a)+f(b)+4*f((a+b)/2))*h/3
#define G(a,b,h) (g(a)+g(b)+4*g((a+b)/2))*h/3
というようにhを用いた式で表すなら 図のように
d=0.1
for(x=0;x<1;x+=d*2)
とすればいいのか

331:修正版
07/10/27 04:06:02
>>330
#include <stdio.h>
#include <math.h>

double f(double x){return exp(-x*x);}
double g(double x){return 1/sqrt(1+x*x*x*x);}
#define F(x,h) (f(x) + 4*f(x+h) + f(x+2*h)) * h/3
#define G(x,h) (g(x) + 4*g(x+h) + g(x+2*h)) * h/3

int main(){
double x,sum,h=0.1;
sum=0;
for(x=0;x<1;x+=2*h)sum+=F(x,h);
printf("%f\n",sum);
sum=0;
for(x=0;x<1;x+=2*h)sum+=G(x,h);
printf("%f\n",sum);}

332:デフォルトの名無しさん
07/10/27 04:12:10
何か邪魔臭くなっていましたね さんくすこ

333:デフォルトの名無しさん
07/10/27 08:27:42
まだやってたのか。俺は寝てしまって今起きた

#define F(x,h) (f(x) + 4*f(x+h) + f(x+2*h)) * h/3
#define G(x,h) (g(x) + 4*g(x+h) + g(x+2*h)) * h/3
じゃなくて
#define F(x,h) (f(x) + 4*f(x+h/2) + f(x+h)) * h/6
#define G(x,h) (g(x) + 4*g(x+h/2) + g(x+h)) * h/6
にするかもしくはh=0.05にしないといけない。

334:デフォルトの名無しさん
07/10/27 08:35:59
すまん。寝ぼけて間違えた。
>>331でOK。

335:デフォルトの名無しさん
07/10/27 08:37:39
やっと数値のずれが直ったので貼る
#include<stdio.h>
#include<math.h>

double quadInterpol( double (*fun)( double ), double begin, double h )
{
return ((*fun)( begin ) + 4.0*(*fun)( begin + h ) + (*fun)( begin + 2.0*h )) * h/3.0;
}

double integral( double (*fun)( double ), double begin, double end, double h )
{
double result = 0.0;
double pos = begin;
do
{
result += quadInterpol( (*fun), pos, h );
pos += 2.0*h;
} while( pos < end );
return result;
}

double f(double x) { return exp(-x*x); }
double g(double x) { return 1.0/sqrt(1 + x*x*x*x); }

int main(void)
{
const double diff = 0.1;
printf("result=%f\n",integral(f,0.0,1.0,diff));
printf("result=%f\n",integral(g,0.0,1.0,diff));
return 0;
}

336:デフォルトの名無しさん
07/10/27 08:55:22
ひゃっほう。

337:デフォルトの名無しさん
07/10/27 10:08:16
なんでシンプソン公式だけでこんなにスレ進むんだよw

338:デフォルトの名無しさん
07/10/27 10:59:46
[1] 授業単元: プログラミング
[2] 問題文:整数nをscanfで入力後"factorial"という関数を呼び出して、n!を
求めるプログラム(結果はmainにて表示)
(定義例:int factorial(int num))
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: ([2007年10月28日まで]
[5] その他の制限:定義例を使ってください
if,while,switch,forは習いました

お願いします

339:デフォルトの名無しさん
07/10/27 11:06:51
#include <stdio.h>
int factorial(int num)
{
int i, ret = 1;
for(i=2; i<=num; i++) ret *= i;
return ret;
}

int main(void)
{
int n;

printf("nを入力:");
scanf("%d", &n);

printf("%dの階乗は%d\n", n, factorial(n));

return 0;
}

340:デフォルトの名無しさん
07/10/27 11:17:19
>>339
全くわかんなかったのに数分で解いてるよ(>_<)
ありがとうございました。

341:デフォルトの名無しさん
07/10/27 11:27:20
て言うか既出ネタだろ
>>235-237で

342:デフォルトの名無しさん
07/10/27 11:29:23
階乗は頻出の基本問題だし、このスレで答えてる人なら数分とかじゃなくて、問題見た瞬間に即答だろ。

343:デフォルトの名無しさん
07/10/27 11:49:08
テンプレレベルだよな・・・と思ったらwikiにも書いてないな
今から編集してくる

344:デフォルトの名無しさん
07/10/27 11:51:23
>>342さすがですね
勉強不足ですいません

345:デフォルトの名無しさん
07/10/27 12:09:39
×勉強不足
○勉強する気がない

346:デフォルトの名無しさん
07/10/27 12:13:00
LU分解とか死ねwwwwww
京大電電でつけど、プログラムの課題がイミフwwwwwwww

347:デフォルトの名無しさん
07/10/27 12:15:15
それ、プログラム以前の問題だろ
Fランの大学ですらやる基本的な問題だし

348:デフォルトの名無しさん
07/10/27 13:38:28
【質問テンプレ】
[1] 授業単元: 画像工学
[2] 問題文(含コード&リンク):ある特定の画像を自動的に判別する
フォルダ内の画像を自動的に判別し,緑の画像があればhighlightのフォルダに
なければotherのフォルダに分別する 
[3] 環境
 [3.1] OS: (Windows/Linux/等々) Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) よくわかりません
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) Visual C++ 2005
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 来週水曜日まで
[5] その他の制限: 特にありません
URLリンク(kansai2channeler.hp.infoseek.co.jp)

349:デフォルトの名無しさん
07/10/27 13:47:53
>>347
池沼でサーセンwwwww

350:デフォルトの名無しさん
07/10/27 14:08:07
348
こんなの面倒 授業でていたやつのほうが関数にくわしいだろ

351:デフォルトの名無しさん
07/10/27 15:52:58
[1] 授業単元: C言語
[2] 問題文:2×2の行列A,Bの積(cのij成分=Σaのij成分bのij成分)を表示する

a[i][j]=[0 4] b[i][j]=[5 0]
[-5 -1] [0 -5]
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: ([2007年10月28日まで]
[5] その他の制限:for文を用いてください

352:デフォルトの名無しさん
07/10/27 16:02:13
#include <stdio.h>

main(){
int i,j,x=0,a[2][2]={0,4,-5,-1},b[2][2]={5,0,0,-5};
for(i=0;i<2;i++)for(j=0;j<2;j++)x+=a[i][j]*b[j][i];
printf("%d\n",x);
}

353:デフォルトの名無しさん
07/10/27 16:12:53
2次元配列のサイズを調べる方法ありますか?

354:デフォルトの名無しさん
07/10/27 16:16:09
#include <stdio.h>

main(){
int x[70][6],m,n;
m=sizeof(x)/sizeof(x[0]);
n=sizeof(x[0])/sizeof(x[0][0]);
printf("%d %d",m,n);
}

355:デフォルトの名無しさん
07/10/27 16:27:45
#include <stdio.h>

main(){
int i,j,k;
int a[2][2]={0,4,-5,-1},b[2][2]={5,0,0,-5},c[2][2];
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
c[i][j]=a[i][k]*b[k][j];

for(i=0;i<2;i++){
for(j=0;j<2;j++)printf("%d ",c[i][j]);
printf("\n");}
}

356:デフォルトの名無しさん
07/10/27 16:34:11
[1] 授業単元: C言語
[2] 問題文:キーボードから5点の座標を二次元配列に入力し、
原点から最も離れた点の座標を出力するプログラムを作成せよ
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: ([2007年10月28日まで]
[5] その他の制限:多次元配列まで習ってます


357:147
07/10/27 16:35:47
機械に仕事を割り当てるところまでやった

すなわち、問題文の
>5種類の性能の異なる加工機械が各1台ある工場で、100種類の製品を作っている。
>各製品がその日に受注した場合、LT(完成までにかかる日数)を表示するスケジューリングプログラムを作成せよ。
>また、ランダムに発注があり、発注があった場合にのみ実際に機械は使用される。
>すなわち、発注が一度もなければ100日間ずっと同じLTが表示され、発注があれば、
>その日以降は機械が使用されているので、LTが長くなる可能性があるということ。
ところまで。

// 生産計画・生産管理
// 97th-res: >>168 (>>111, >>211, >>229)
// 2007/10/27

URLリンク(kansai2channeler.hp.infoseek.co.jp)

358:デフォルトの名無しさん
07/10/27 16:46:34
>>356
#include<stdio.h>
#include<math.h>

int main(void)
{
double maximum_distance=0.0, distance;
double x, y, point[5][2], (*maximum_point)[2];
int i;

for(i=0;i<5;i++)
{
printf("Input x :");
scanf("%lf", &x);
printf("Input y :");
scanf("%lf", &y);
point[i][0]=x;
point[i][1]=y;

distance=sqrt(x*x+y*y);
if(distance>maximum_distance || !i)
{
maximum_distance=distance;
maximum_point=&point[i];
}
}
printf("\n( %lf , %lf )\n", (*maximum_point)[0], (*maximum_point)[1]);

return 0;
}

359:入力うまくいかない
07/10/27 16:48:36
#include <stdio.h>

main(){
int x[6],y[6],i,ban;
double max=0,d;
for(i=1;i<6;i++){
printf("\n%d 番目のx座標を入力して下さい ",i);
x[i]=getchar();
printf("\n%d 番目のy座標を入力して下さい ",i);
y[i]=getchar();}

for(i=1;i<6;i++){
d=x[i]*x[i]+y[i]*y[i];
if(d>max){max=d;ban=i;}}
printf("原点からもっとも遠い座標は(%d,%d)です ",x[ban],y[ban]);
}

360:scanfにしたら良くなったよ
07/10/27 16:54:18
#include <stdio.h>
main(){
int x[6],y[6],i,ban;
double max=0,d;
for(i=1;i<6;i++){
printf("\n%d 番目のx座標を入力して下さい ",i);
scanf("%d",&x[i]);
printf("\n%d 番目のy座標を入力して下さい ",i);
scanf("%d",&y[i]);}

for(i=1;i<6;i++){
d=x[i]*x[i]+y[i]*y[i];
if(d>max){max=d;ban=i;}}
printf("\n原点からもっとも遠い座標は(%d,%d)です ",x[ban],y[ban]);}

361:356
07/10/27 16:54:35
>>358さん
>>359さん
早い回答ありがとうございました!

362:デフォルトの名無しさん
07/10/27 17:00:45
// >>356 ソート付き
#include <iostream>
#include <math.h>
#define NUM 5
using namespace std;

int main (void){
double p[NUM][2], absolute[NUM];

for (int i=0; i<NUM; i++){
cout << i+1 << "番目の点の" << endl;
cout << "\tx座標を入力してください : "; cin >> p[i][0];
cout << "\ty座標を入力してください : "; cin >> p[i][1];
}

for (int i=0; i<NUM; i++) absolute[i] = sqrt(p[i][0] * p[i][0] + p[i][1] * p[i][1]);

double tempabs, tempx, tempy;
for (int i=0; i<NUM-1; i++) {
for (int j=NUM-1; j>i; j--) {
if (absolute[j-1] > absolute[j]) {
tempabs = absolute[j]; tempx = p[j][0]; tempy = p[j][1];
absolute[j] = absolute[j-1]; p[j][0] = p[j-1][0]; p[j][1] = p[j-1][1];
absolute[j-1] = tempabs; p[j-1][0] = tempx;
p[j-1][1] = tempy;
}}}

cout << "(" << p[NUM-1][0] << ", " << p[NUM-1][1] << ")" << endl;
return (0);
}


363:デフォルトの名無しさん
07/10/27 17:05:37
>>356
既に何人も回答してるけど参考までに
#include <stdio.h>
int main(int argc, char* argv[])
{
int i, p[5][2], r2[5], r2max = 0;

printf("input points\n");
for(i=0;i<5;i++) {
printf("point[%d] : ", i);
scanf("%d %d", p[i], p[i]+1);
r2[i] = p[i][0] * p[i][0] + p[i][1] * p[i][1];
if(r2max < r2[i]) {
r2max = r2[i];
}
}
printf("maximum range points\n");
for(i=0;i<5;i++)
if(r2[i] == r2max)
printf("point[%d] : %d %d\n", i, p[i][0], p[i][1]);
return 0;
}

364:デフォルトの名無しさん
07/10/27 17:29:58
すいません!このJAVAコードをCに直せって言われました!
直してください!!!!
public static int[] invoke(int[] input){
//WARNING: This will destroy the contents of the input array
//This function assumes input.length=2^n, n>1
int[] output = new int[input.length];

for(int length = input.length >> 1; ; length >>= 1){
//length=2^n, WITH DECREASING n
for(int i = 0; i < length; i++) {
int sum = input[i*2]+input[i*2+1];
int difference = input[i*2]-input[i*2+1];
output[i] = sum;
output[length+i] = difference;
}
if (length == 1)
return output;

//Swap arrays to do next iteration
System.arraycopy(output, 0, input, 0, length<<1);
}
}


365:デフォルトの名無しさん
07/10/27 18:03:32
>>364
>>1読んでから書き直し

366:デフォルトの名無しさん
07/10/27 18:07:30
>>365
つまりテンプレ通りに書けってこった
とりあえずこのコードが何をするかぐらいは書いたほうがいい

367:デフォルトの名無しさん
07/10/27 18:20:27
>>357
根本的に考え方が間違ってるよ。
これは生産計画立案の問題。

368:デフォルトの名無しさん
07/10/27 18:20:53
(int[] input)これをcで引数一個で実現するのは無理では?
最後尾にNULL入れた配列が欲しくなったり、
サイズを持った構造体へのポインタにしたくなったり、
int *input, int sizeみたいに素直になりたかったり。

369:デフォルトの名無しさん
07/10/27 18:37:29
突っ込むところはinput.lengthこっちだろ

370:aho
07/10/27 19:02:35
>>364
今書いてて思ったけど何がしたいのかいまいち分からない。
sumとdifferenceを計算した後何でoutputを上書きするの?
どんどん足し込む仕様じゃないの?
とりあえず、今ので書いてみるよーん

371:aho
07/10/27 19:08:59
どうもごめんちゃーい。
最後の行のarrayCopyみてませんでした。


372:デフォルトの名無しさん
07/10/27 19:09:34
>>370
ものすごい助かります(;;

離散ウェーブレット変換
URLリンク(ja.wikipedia.org)
のHaarWavletというものです。


373:aho
07/10/27 19:24:07
/*
メモリの確保は呼び出し元で行う。
この関数内でメモリを確保して配列を返すと、メモリの解放ができない。
\param input 入力配列
\param output 出力配列
\param size 入力配列の大きさ
*/
void invoke(int* input, int* output, int size){
// 1/2
for(int length = size >> 1; ; length >>= 1){
for(int i=0; i<length; i++){
int sum = input[i*2] + input[i*2 + 1];
int difference = input[i*2] - input[i*2+1];
output[i] = sum;
output[length+i] = difference;
}
if(length == 1)
return;
//array copy
for(int i=0; i<length<<1; i++){
output[i] = input[i];
}
}
}
一応作ってみた。
確認お願い!

374:デフォルトの名無しさん
07/10/27 21:27:54
>>373
ああ…ありがたい
今確認します!!!どうもありがとう!!!!涙出てきた

375:デフォルトの名無しさん
07/10/27 22:51:52
[1] 授業単元: C言語入門
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.3] 言語: C言語
[4] 期限: 10月28日午前12時30分まで
よろしくおねがいします

376:aho
07/10/27 23:01:10
課題1
int sqr(int x){
return x * x;
}

int pow4(int x){
return sqr(x) * sqr(x);
}


377:デフォルトの名無しさん
07/10/27 23:01:24
>>375 最後のだけやってもいいよ 任意サイズでやってやるぜ

378:デフォルトの名無しさん
07/10/27 23:01:32
関数sqrってなんだ?sqrtの間違い?
でもなんで四乗値求めるのに平方根必要?

379:aho
07/10/27 23:02:37
課題2
void hello(void){
printf("こんにちは。\n");

return;
}


380:デフォルトの名無しさん
07/10/27 23:02:42
squareって事ね。

381:デフォルトの名無しさん
07/10/27 23:12:34
任意サイズの2次配列を引数にするにはどうすればいい?

382:aho
07/10/27 23:14:56
課題3
void rev_intary(int vc[], int no){
int i;
int* tmp = (int*)malloc(sizeof(int) * no);
/* noをコピーしておく */
for(i=0; i<no; i++)
tmp[i] = vc[i];
for(i=0; i<no; i++)
vc[i] = tmp[no-1-i];
free(tmp);

return;
}

stdlib.hをインクルードするように!

383:デフォルトの名無しさん
07/10/27 23:15:02
配列のポインタかポインタのポインタを使う

384:デフォルトの名無しさん
07/10/27 23:20:08
>>383
サイズをどうやって保存するの?

385:デフォルトの名無しさん
07/10/27 23:22:02
パンチで

386:デフォルトの名無しさん
07/10/27 23:22:17
保存はできない。引数でサイズ指定するしかない。

387:168
07/10/28 00:20:59
>>357
ありがとうございます。
続きはやっていただけませんか?

388:デフォルトの名無しさん
07/10/28 00:21:53
これうまくいかないけどなぜでしょうか?サイズがちゃんと求まりません

#include <iostream>
#include <vector>
using namespace std;

void sizehyoji(vector< vector<int> > x){
int m,n;
m=sizeof(x)/sizeof(x[0]);
n=sizeof(x[0])/sizeof(x[0][0]);
printf("%d %d",m,n);}

main(){
int i,j,M=200,N=100;
vector< vector<int> > x;
x.resize(M);
for(i=0;i<M;i++)x[i].resize(N);
for(i=0;i<M;i++)for(j=0;j<N;j++)x[i][j]=0;
sizehyoji(x);}

389:デフォルトの名無しさん
07/10/28 00:24:21
>>388
vectorはsize()を使え

390:デフォルトの名無しさん
07/10/28 00:26:59
>>375
課題3
void rev_intary(int vc[], int no)
{
int temp, i, n = no / 2;

for(i=0; i<n; i++) {
temp = vc[i];
vc[i] = vc[no-1-i];
vc[no-1-i] = temp;
}
}

391:デフォルトの名無しさん
07/10/28 00:27:20
>>389
できました vectorでやればサイズ渡せますね

#include <iostream>
#include <vector>
using namespace std;

void sizehyoji(vector< vector<int> > x){
printf("%d %d",x.size(),x[0].size());}

main(){
int i,j,M=200,N=100;
vector< vector<int> > x;
x.resize(M);
for(i=0;i<M;i++)x[i].resize(N);
sizehyoji(x);}

392:デフォルトの名無しさん
07/10/28 00:32:19
>>375
課題4
void mul(const int ma[2][3], const int mb[3][2], int mc[2][2])
{
int i, j, k;

for(i=0; i<2; i++) {
for(j=0; j<2; j++) {
for(k=0; k<3; k++) mc[i][j] += ma[i][k] * mb[k][j];
}
}
}


393:デフォルトの名無しさん
07/10/28 01:01:51
任意サイズのやつやろうとしたけど面倒になった あとでやるかもしれない 書き込んでおく
 
#include <iostream>
#include <vector>
using namespace std;

class Gyouretu {
vector< vector<int> > x;
public:

Gyouretu(){Gyouretu(1,1);}
Gyouretu(int M,int N){int i,j;x.resize(M);for(i=0;i<M;i++)x[i].resize(N);
for(i=0;i<M;i++)for(j=0;j<N;j++)x[i][j]=0;}
resize(int M,int N){Gyouretu(M,N);}

Gyouretu& Gyouretu::operator=(Gyouretu& y){
if(&x!=this){} return *this;}

};


main(){
Gyouretu x;
x.resize(6,5);}

394:デフォルトの名無しさん
07/10/28 04:31:04
全ディレクトリのファイルでサイズが一致するものをプルパスで出力せよ

395:デフォルトの名無しさん
07/10/28 04:38:32
プルパスについてkwsk

396:デフォルトの名無しさん
07/10/28 04:42:58
植田佳奈 さんってこんな人だったの・・・?
相手の人、可哀想;;

URLリンク(www.nicovideo.jp)
25分14秒付近より

●植田佳奈、最近人生を丸投げしたくなることは?というフリに、「こないだー、悪口を絶賛喋ってた
ら、後ろに本人いて(笑)あんなことほんとにあるんだ!って思って、超びっくりしちゃった(笑)
実名って言うかその人しかあり得ないような悪口をバンバン言ってたの。そしたら、”そんな風に思っ
てたんだ、ごめんね”って逆に謝られちゃって…(笑)」

397:デフォルトの名無しさん
07/10/28 10:19:24
[2] 問題文(含コード&リンク):携帯の文字入力をコマンドプロンプトから行うプログラムをつくれ
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] VisualStudio 2008
 [3.3] 言語: C
[4] 期限: はやめに

途中までは作っているのですが、シンボルが重複しているみたいなエラーがでてしまいます
デバッグと、濁点等の変換処理を手伝ってもらえませんか?
Shift-jisでやろうと思うのですがこれでいいのかよくわかりません・・・
テンプレのうpろだに何故かうpできなかったので、別のうpろだを使いました
URLリンク(www.uploda.org)
よろしくお願いします

398:デフォルトの名無しさん
07/10/28 11:59:19
>>397
[1]が抜けてる
期限が曖昧
その上マルチ

そしてVisualStudio2008ってまだβ版だろ、そんなもん宿題に使うな

399:397
07/10/28 12:41:20
すいません。あせってて・・・
[1] 授業単元: C言語
期限:今日中になりました

VisualStudio2005でも同じエラーでした


400:デフォルトの名無しさん
07/10/28 14:14:11
>>352さん
>>355さん
お礼の返事送るのが遅れて申し訳ありませんでした
>>351の問題に答えていただきありがとうございました



401:デフォルトの名無しさん
07/10/28 15:58:29
1] 授業単元: c言語
[2] 問題文:1.文字列の先頭のアドレスを引数とし、
その文字列の中にある文字’A’を探してそれが何番目かを計算し、
‘A’があればその値を、なければ0を返値とする関数を作成せよ。

2.1.で作成した関数を用いて、自分の学籍番号をポインタに代入し、
その中で文字'A'を探してそれを先頭に持ってくるプログラムを作成せよ。


[3] 環境
 [3.1] OS:windows
 [3.2] VisualStudio2005
 [3.3] 言語:c
[4] 期限:10月31日まで
[5] その他の制限:特になし
問題が2個ありますが、よろしくお願いします


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