C/C++の宿題を片付けます 117代目at TECH
C/C++の宿題を片付けます 117代目 - 暇つぶし2ch116:115
08/11/03 12:47:39
>>115
すいません間違えました。
.TXTではなくて.Tです。

117:デフォルトの名無しさん
08/11/03 12:52:06
半角を全角にするのもやればいいのか?

118:デフォルトの名無しさん
08/11/03 12:55:34
>>117
すいません。
数値は半角です。

119:デフォルトの名無しさん
08/11/03 13:13:29
>>113さん
遅くなってごめんなさい。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
修正箇所は申し訳ないのですがDIFFツールなどで調べてください。

120:119
08/11/03 13:15:53
アンカーミス
>>111さんでした
釣ってきます

121:デフォルトの名無しさん
08/11/03 15:28:51
>>115
URLリンク(kansai2channeler.hp.infoseek.co.jp)
ファイル名が 数字のみ.txt であるかのチェックはあり、
中身が数字のみか、5行1列かのチェックはないんで
そうなっているファイルを用意しておくこと。

122:help me
08/11/03 15:37:36
>>65 お礼遅れましたすみません。 とても助かりました! 
ありがとうございました。(^0^)

123:デフォルトの名無しさん
08/11/03 16:11:32
[1] 授業単元:C++
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:VS2008
 [3.3] 言語:C++
[4] 期限:[2008年11月08日まで]

よろしくお願いします。


124:デフォルトの名無しさん
08/11/03 16:20:08
[1] 授業単元: 画像処理プログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 11月4日

よろしくお願いします。
期限が近いのにまったく手が出ません。

125:デフォルトの名無しさん
08/11/03 16:28:13
>>124
久々にめんどくさそうなの来たなwwww

126:デフォルトの名無しさん
08/11/03 16:30:47
何をwwwwで笑っているのか知らんが、面倒臭いと思うのも個人の主観。
ぜんぜん面倒臭くない、単なるバイナリーデータの操作だろ、そんなの。
むしろ、オラッ、強敵が現れてなんだかwktkしてきた、ってゴクウみたいな
奴もいるかもしれんぞ?

127:デフォルトの名無しさん
08/11/03 16:35:43
>>126
もちろん>>124を明日までに一から作れる暇とスキルがあっての書き込みだよな?

128:デフォルトの名無しさん
08/11/03 16:44:45
>>126
多分おれのこと言ってるんだと思うけど今回はお前に宿題ゆずってやるよ

129:100 ◆7777.bQf6c
08/11/03 16:45:49
返信遅れてすいません

txtに書かれたプログラムは私の打ち間違いです、失礼しました
それと>>105さん>>107さん、ありがとうございました

130:60=71=77=111
08/11/03 16:56:46
>>119さん
ありがとうございます。正常に動きました。
その他助けてくださった方々、本当にありがとうございました!

131:デフォルトの名無しさん
08/11/03 16:58:01
>>126さんが明日までにコンバータ作ってくれるそうです。良かったですね>>124

とりあえず両手を空に挙げてやるから元気玉でも集めて作ってみろよ。面倒じゃないんだろ?>>126

132:デフォルトの名無しさん
08/11/03 17:05:49
>>1 読める?読めない?聖徳太子(ry
要するに、個人を指定、特定して答えてもらうスレじゃないんだよ、ここ?
やってくれるよ、良かったね?お前がやれよw

133:デフォルトの名無しさん
08/11/03 17:13:25
>>124はスルーする流れなのか?

134:デフォルトの名無しさん
08/11/03 17:26:35
>>66
レス遅れてすみません><

1.出力は
・縦ではなく、横にならべる。つまり行。縦は1024列(絶対)。
・各行は、data.txtのデータ(data[i])が(ave) + 5*(sd)以上の時だけ出力する
 しかし、[0][0],[0][1],[0][2],・・・,[205][3]をひとつの区切りとする。
 この1024個中の標準偏差(ave) + 5*(sd)以上の値を出力する。
 次に[206][0],[206],[1],・・・,[411][2],[411][3]の1024個中の標準偏差以上の
 値を出力する。このとき、peak.txtに改行して出力する。
 このようにdata.txtの値を1024個で区切る。

2.十分なメモリを確保のところ
 ソースは1次元に見えるけど、出力ファイルには2次元で!!
 mallocでメモリを確保したいのは、data.txtが約16Mもあるから!!

3.文章に間違えありました!!!!
  5行209921列のデータではなく、209921行5列のデータです。
  なので
  [0][0],[0][1],[0][2],・・・,[205][3]
[206][0],[206][1],・・・,[211][3]
[211][0],[211][1],・・・,[216][3]
[217][0],[217][1],・・・,[222][3]
  ・
  ・
  ・
 と1024個で区切れる。

どうでしょうか? プログラムよろしくお願いします。

135:デフォルトの名無しさん
08/11/03 17:27:45
>>132
必死なのは分かるが、とりあえず聖徳太子(ryのテンプレ教えてくれ。

あと>>124は最近傍法での拡大くらいまでは、と思ってるが、さすがに(4)はなんとかいうフォーマットから調べないかんなあ。

136:デフォルトの名無しさん
08/11/03 17:40:44
フォーマットはぐぐれば一発だよ
だからさっさと作っておくれー

137:デフォルトの名無しさん
08/11/03 17:57:05
>>124 URLリンク(kansai2channeler.hp.infoseek.co.jp)
こんな感じか?
コンパイルすらしてないコードなんで動かなかったら適宜修正してくれ。

138:137
08/11/03 18:04:34
flee... orz

139:デフォルトの名無しさん
08/11/03 18:16:38
>>135
> 必死なのは
誰とも分からない見えない人に答えさせようとしているお前。

140:デフォルトの名無しさん
08/11/03 18:42:00
日本語かc/c++でおk。

141:デフォルトの名無しさん
08/11/03 18:50:01
C言語で数字を小数第一位まで表示させるにはどうすればようでしょうか。

142:デフォルトの名無しさん
08/11/03 18:51:23
%.1f

143:=92
08/11/03 19:43:57
久しぶりに夕方まで寝てしまった。。。

>>101
問題読み違ってた?
ま、あとはがんばれw


144:=92
08/11/03 20:02:13
>>90
URLリンク(kansai2channeler.hp.infoseek.co.jp)
計算する所までは実装。計算結果は①:dataout1.csv、②:dataout1.csvに出力。
グラフ化の部分は、環境がわからんのでパス。3次元のグラフを*で書く気にならなかった。

csv内のデータは、横方向:x(-20~20)、縦方向:z(-40~40)、値:φ(x,z)
電荷ごとに、0除算のオーバーフローをdoubleの最大値として処理しているので、
②の結果が上下対象になっていません(斜めにdoubleの最大値が入る)。
計算結果の検算と②の式のチェックは、がんばれ。

②の処理はコメントアウトしてあります。
②を使う時は①の処理をコメントアウトしてから、
②の処理のコメントアウトを解除します。

②は、せめて式とdの値を書かないと。
ここは電磁気学の板じゃないので。
適当に調べてかいといたけど・・


145:=92
08/11/03 20:11:49
>>134
っ計算機
5も209921も奇数。よって、5x209921も奇数。
1024は偶数。
従って割り切れることはありません。
+[0]~[3]なら、要素数は4。

問題を解く前に、概算するくせをつけましょう。


146:=92
08/11/03 20:22:21
>>134
連投すまん。
1024個単位なら、256x4。
従って、
[0][0]~[0][3]
・・・
[255][0]~[255][3]
[256][0]~[256][3]
・・・
[511][0]~[511][3]
という感じになるはず。

あと、メモリのところ。
[0][0]~[0][3]
・・・
[255][0]~[255][3]
だけ確保して、1024個分を順次読み込み、1024個単位で処理すれば、
17.2MB分をmallocする必要はないと思うのだが、なぜ確保するのか?
(全体をメモリに格納しないと処理できない計算が発生するのか?)
これが知りたい。


147:デフォルトの名無しさん
08/11/03 20:28:02
y=cos(x)の座標を表示させようとしているんですけど、次のプログラムって何が変なんですか。
int main(){
double x, y, pai=3.14, cos;

for(y=1; y>=-1; y++){

for(x=1; x<=4*pai; x++){

if(y==cos(pai/x)){
putchar('*');
}

else{
putchar(' ');
}
putchar('\n');
}


}
return 0;
}

148:デフォルトの名無しさん
08/11/03 20:47:07
1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
無限級数
(1)Σx^(i-1)の極限が1/(x-1)になる過程を示す。
(2)f(x)=0の解を数値的に求めるアルゴリズム。
プリントにこんだけしか書いてないけど大学のパソコンからじゃないとhpが開けないのですいません。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: GNU C Compiler(独習cにふぞくしてるやつ)
 [3.3] 言語: C
[4] 期限: 明日の五時迄
[5] その他の制限:scanf関数でxとnに入力する形でfor文を使ったものでdouble型でお願いします 。

149:148
08/11/03 20:48:27
一応自分で作ったんですけどコンパイルできなくて何がなんだか・・・

#include <stdio.h>
int main (void)
{

int n, i, f ,x;

printf ("xに代入する値を入力してください。\n");
scanf ("%lf",&x);

printf ("nに代入する値を入力してください。\n");
scanf ("%ld",&n);

for (1=0;i<=n;i++)
{x*=(i-1);
f+=x;}
printf("求める値は %dです。\n",f);

return 0;
}

150:=92
08/11/03 20:53:50
>>147
・x, yはintにする必要がある。(詳細は、forを調べましょう)
・cos(pai/x)としているが、pai/xの部分を考え直しましょう


151:デフォルトの名無しさん
08/11/03 20:58:37
>>149
・fが初期化されていない
・1=0ってなに?
・intなのに%lf

152:=92
08/11/03 20:59:42
>>149
エラーの出る場所:
for (1=0;i<=n;i++)
1=0(定数に定数を代入しています): iと1の打ち間違い


153:148
08/11/03 21:06:21
>>151
>>149
double型にするのをわすれてました
これを実行すると何を代入しても答えが0になるんですけど
どこを直せばいいでしょうか?
#include <stdio.h>
int main (void)
{

double n, i, f ,x;
f=0;
printf ("xに代入する値を入力してください。\n");
scanf ("%lf",&x);

printf ("nに代入する値を入力してください。\n");
scanf ("%ld",&n);

for (i=0;i<=n;i++)
{x*=(i-1);
f+=x;}
printf("求める値は %dです。\n",f);

return 0;
}


154:デフォルトの名無しさん
08/11/03 21:07:06
>>149

#include <stdio.h>
#include <math.h>

int main(void)
{
int n, i;
double x, f = 0.0;

printf ("xに代入する値を入力してください。\n");
scanf("%lf", &x);

printf ("nに代入する値を入力してください。\n");
scanf("%d", &n);

for (i = 1; i <= n; i++) {
f += pow(x, i-1);
}
printf("求める値は %f です。\n", f);

return 0;
}

それと極限は 1/(1-x) な

155:デフォルトの名無しさん
08/11/03 21:09:37
nについて良く見直せ。

156:=92
08/11/03 21:10:48
>>149
うは、かぶった><;
ついでに、doubleの値がどこかに必要だと思うのだが・・
あと、問題文に、i->nの時の極限と書かないと分からない。


157:デフォルトの名無しさん
08/11/03 21:16:07
[1] 配列:
[2] 問題文:

10個のデータがランダムに格納されている一次元配列を用意して、その中から偶数のみを表示させるプログラムを作る


158:148
08/11/03 21:17:12
直して少し改変したらめちゃくちゃな結果がでました

#include <stdio.h>
int main (void)
{

double n, i, f ,x;
f=0;
printf ("xに代入する値を入力してください。\n");
scanf ("%lf",&x);

printf ("nに代入する値を入力してください。\n");
scanf ("%lf",&n);

for (i=0;i<=n;i++)
{x*=(i-1);
f+=x;
printf("n= %d の時、求める値は %d です。\n",i,f);
}
return 0;
}

159:=92
08/11/03 21:22:14
>>158
結果表示のfは%d?
あと、極限と1/(x-1)の差も表示しないと、どれくらい近づいたかわからない。
ただし、もとのxが保存されていないことに注意。

160:=92
08/11/03 21:24:56
食事してくる。あとはまかせた!


161:デフォルトの名無しさん
08/11/03 21:27:03
>>158
i, n は int でいい。
それにあわせて n の入力時も scanf("%d", &n)

それから for 文の中がおかしい。
x のベキ乗を求めるなら f += pow(x, i-1)

>>154

162:148
08/11/03 21:30:56
>>160
ありがとうございました。

>>161
mathはまだ習ってないのでできればstdioのみでやれるようにしたいのですがどうすればいいのやら・・・

163:デフォルトの名無しさん
08/11/03 21:42:19
>>162

ちゃんと確認してないからミスがあればすまん。
for (i = 1;i < n; i++){
temp = x;
for (j = 0;j < i-1; j++) {
temp *= x;
}
f += temp;
}


164:148
08/11/03 22:12:59
>>163
ありがとうございます。

165:=92
08/11/03 22:19:32
>>148
ふと思った事。
lim Σx^(i-1) -> 無限大。収束しない。
極限とか1 / (x-1) とでてきたあたりで、log(x)の微分が1/xとか思い出すのだが・・


166:デフォルトの名無しさん
08/11/03 22:22:02
この条件分は可能ですか。
if(4<=x<=10)

167:=92
08/11/03 22:29:15
>>166
if ((4 <= x) && (x <= 10))


168:148
08/11/03 22:29:54
まだ格闘してます
>>165
すいません1/(1-x)でさらに0<x<1って条件付でした

169:デフォルトの名無しさん
08/11/03 22:33:03
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。
範囲は[0, 4π]です。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[5] その他の制限:ループと条件分岐、putcharを使う




170:デフォルトの名無しさん
08/11/03 22:35:28
>>164
>>163だが
x^0のことを忘れてた。

for (i = 1;i < n; i++){
temp = 1;
for (j = 0;j < i-1; j++) {
temp *= x;
}
f += temp;
}

171:112
08/11/03 22:38:23
>>114
ありがとうございます。ただ、どんな原理で動いているのかサッパリなので、
もしよろしければ解説していただけないでしょうか・・・?

172:デフォルトの名無しさん
08/11/03 22:45:02
いうまでも無かろう、汎用電子計算機の基本的な仕組み
0と1の組み合わせで、実装されている仕様に応じて
動作しているのさ、フフンッ

173:=92
08/11/03 22:53:47
>>112
ヒント。

外ループが回るごとのfの値:
f=1 (jは0から-1まで。内ループの実行回数は、0)
f=1 + 1*x (jは0から0まで。内ループの実行回数は、1)
f=1 + 1*x + 1*x*x (jは0から1まで。内ループの実行回数は、2)
f=1 + 1*x + 1*x*x + 1*x*x*x (jは0から2まで。内ループの実行回数は、3)
・・・
f=1 + 1*x + ・・・ + 1*x^(n - 1) (jは0からn-2まで。内ループの実行回数は、n-1)


174:デフォルトの名無しさん
08/11/03 22:58:42
単純に、double型の変数を1バイトごとに分けて
さらに1ビットずつチェキしていると。

175:=92
08/11/03 23:01:28
>>112
問題文(1)は、
lim (i = 0 -> n-1) Σx^i = 1/(x-1)
に書き直すと分かりやすかったかも。
元が、lim (i = 1 -> n) Σx^(i - 1) になってると、ちょっと混乱w

連投ごめんなさい。


176:デフォルトの名無しさん
08/11/03 23:06:12
>>174
double型って、
符号(1bit) | 指数(11bit) | 仮数(52bit) の64ビットで構成される数の事言ってる?


177:デフォルトの名無しさん
08/11/03 23:11:28
>>165
ベキ級数ですから、収束条件は |x| < 1 ですしね。どうなんでしょうね。

178:デフォルトの名無しさん
08/11/03 23:14:45
>>112くらいのプログラムなら初心者にとっては勉強になるモンなんだろな
規格が出来る前は浮動小数点型が>>176の構成だとは限らなくて
機種依存だったわけだし。
これからも128bit機とかがでたらdoubleの構成が変わるかも?しれん

179:クソースでおじゃっ
08/11/03 23:20:18
>>112
#include <stdio.h>
#define BPB 8 // 1byte / 8bit
void hoge(double x) {
int i,j;
char *p;
for(i=sizeof(x)-1,p=(char*)&x; i>=0; i--) {
for(j=BPB-1; j>=0; j--) {
printf("%d",(p[i]>>j)&1);
}
printf(" ");
}
}
int main(void) {
double a[]={1.0, 0.1, 0.0/0.0, -1.0/0.0, 1.0/0.0, -3.14};
int i;
for(i=0; i<sizeof(a)/sizeof(a[0]); i++) {
printf("a = %lf \n",a[i]);
hoge(a[i]);
puts("");
}
return 0;
}


180:デフォルトの名無しさん
08/11/03 23:20:21
double のデータ構造がどうこうよりビット操作やビットマスクの
勉強としての意義のほうが大きいと思う。

181:デフォルトの名無しさん
08/11/04 00:14:43
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。
範囲は[0, 4π]です。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] できるだけ早く
[5] その他の制限:ループと条件分岐、putcharを使う

よろしくお願いします。


182:デフォルトの名無しさん
08/11/04 00:19:07
>>146
う~~~ん・・・・伝わらないよ><

205×5-1で1024個になるって意味なんですけど。。。
つまり205行5列で1024個ってことなんですけど。

どうでしょうか? 伝われば幸いです。

malloc

183:デフォルトの名無しさん
08/11/04 00:33:06
>>178
double(MSDNだとreal*8で引くと良い?)よりもlong doubleが変わりそう。
real*10はFPUが80bitで・・とかのあたりだろうし。

というか、>>172>>174
もとの質問番号書いといてくれ。
間に割り込み多すぎて、どれに対する反応かわからんw

>>180
だね。

printf("%s", (MSDNの浮動小数点のページの内容));
してもしかたないしw

>>182
君の気持ちを受信した。
[204][4]をどうするかの問題は残るが、適当に処理しよう。


184:183
08/11/04 00:57:50
data.txtを確認しなおしました。
整理すると、

1行目~205行目 -> [0][0]~[204][4] (ただし[204][4] にあたる部分はデータなし)
206行目~410行目 -> [205][0]~[409][4] (ただし[409][4] にあたる部分はデータなし)
・・・
という感じですね。

で、最後が、
~209920行目 -> [209715][0]~[209919][4] (ただし[204][4] にあたる部分はデータなし)
で、209920 / 205 = 1024と。
(最後の209921行目はEOFしか入っていないので、データの最後はその前の行)

で、mallocは、[0][0]~[204][4]と同じサイズx1024を確保したいと。
(2次元配列の1箇所だけ空けるわけにいかないので、確保するのは1025 x 1024)

だいぶ見えてきたね。


185:183
08/11/04 03:38:21
>>182
途中経過。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
平均、標準偏差などの計算周りを実装。ファイルへの出力部が未実装。
ごめん、原型はなくなった。


186:183
08/11/04 04:16:29
>>182
あ、一個忘れてた。問題どれが正しいのかわからん。

出力は、
(>>134 によると)
・出力は、縦方向は1024行。横はデータ次第。
・data.txtのデータ(data[i])が(ave) + 5*(sd)以上の時だけ出力する(画面に?ファイルか?)
・[206][0],[206],[1],・・・,[411][2],[411][3]だけ、
 標準偏差(== sd)以上の値をpeak.txtに出力する。
 (->とりあえず、[206][0],[206],[1],・・・,[411][2],[411][3]だけでなく、
 1024個全部出力しとく。標準偏差1個だけ出力したいわけではなさそうなので。)

(>>63 によると)
・data.txtのデータ(data[cnt]) < ave(== 平均値)以下のとき、
 標準偏差をpeek.txtに出力する。(分散も?ファイル名あってる?)

(もとの問題文(7914.txt)によると)
③が最終的に欲しいものとして、
・データ1024個ごとのブロック内の最大値と、周波数(そのブロック内の何番目のデータか)を、
 peek.txtに出力。
 ->これはどうがんばっても、各ブロックごとに1個しか最大値がないので、
 縦1列になる。これを横5個とかに並べなおして出力?(横にいくつ並べるかは書いてないが)
あと、①の
・各ブロックの、平均値と、最大値と、(ave + 5*sd)以上のデータを、それぞれ
 計算する(画面に表示する??)、最大値だけは③でpeek.txtに出力する
 (かなりがんばって解釈したが、これで良いのか?)
①は今回は関係なし?


187:183
08/11/04 04:17:42
>>182
続き。
とりあえず、(63の条件の) powを使って分散を計算、そこから標準偏差の計算までは実装済み。

以下、すべて予定。

こんな時間に見てなさそうだから、出力は全部画面に向けとく。
ファイルへの出力は、134を信じて、peek.txtに標準偏差が出るようにしておく。
あとは、好きなのをファイル出力に向けなおして。

途中で寝てなければ、そのうちアップする。


188:183
08/11/04 05:56:00
>>182

いかん、ぼけとった。

>>186の内容を一部修正。
(>>134 によると) のところ。3個目。
・出力するのは、標準偏差でなく、個別データだった。(最終行で間違った。)
ということは、[206][0],[206],[1],・・・,[411][2],[411][3]だけで良いのか?
(今書きかけのプログラムのは、全部出してるが。)
・標準偏差(== sd)以上の値 -> これは、平均値+標準偏差だと思うので、ave + sdにしておいた。

あと、>>185で貼ったソース。
分散を求めるところでj=0でクリアしているが、ループの他のところでも使っているので、アウト。
分散の計算は、ループから分離した。

そろそろ時間が近いな。。


189:183
08/11/04 06:07:37
>>182
もう一個発見。

>>183
(>>63 によると) のところ。
(data[cnt]) < ave(== 平均値)以下のとき標準偏差を出力、 は意味を成さない。
(data[cnt]) < ave(== 平均値)以下のdata[cnt]を出力、が正しそうだ。

それから、不明点。
・各ブロック([0][0]~[204][4])とかの何番目にあるか == 周波数
・何ブロック目か == 周波数 // ([0][0]~[204][4])が1、([205][0]~)が2
これのどちらが正しい?
問題文で1024個のそれぞれが周波数に対応としているが、
どっちの1024個かわからんとです。

とりあえず、各ブロック([0][0]~[204][4])とかの何番目にあるか == 周波数
としたが。。

。。。書いてるうちに、もう一個発見。
[206][0],[206],[1],・・・,[411][2],[411][3]は、区切りがずれとるな。。


190:デフォルトの名無しさん
08/11/04 06:09:01
落ち着け

191:デフォルトの名無しさん
08/11/04 06:20:04
無駄に複雑化した気が。
てかはじめのままで何でだめなの

192:183
08/11/04 07:29:45
>>182
URLリンク(kansai2channeler.hp.infoseek.co.jp)

とりあえずこんな感じか?
出力の条件がいろいろあったので、それぞれ出しておいた。
出力条件ごとに別ループにしてあるので、
いらないのは、コメントアウトする事。

あと、ファイルに出力したのは、
[205][0],[205],[1],・・・,[409][2],[409][3]の中で、
data > aveを満たすデータ。
横5個で改行。


193:183
08/11/04 07:31:43
>>191
答え:出力条件が違う。出力フォーマットが違う。出力するものが違う。


194:183
08/11/04 07:35:31
>>191
その前に、問題文がちがう・・・のが大きかった
あと、もう一個理由追加。
無駄にmallocしてるから。(問題の条件にあるから)


195:183
08/11/04 07:45:24
入力ファイルは2次元(205x5)でも、
1次元(1024)の配列で処理すれば、本来はいける。
(というか、その方が処理が格段に楽。)
205x5が1024にならない、という突っ込みは、どこか上の方を参照。
最後の1個が欠けたデータなんだ。

今回の問題は、
・入力データ(17.2MB)を丸ごと配列に押し込む、
・配列は、double[205 * 1024][5]
の制約付き。
これも、どこか参照。

簡単な版作る?


196:183
08/11/04 08:10:37
始めの方を元に作り直そうと思ったけど、strtokの使い方があやしいのと、
varの計算が間違ってるのと・・を直さないといけないんだった。

分散を(1/n) * sum(val)^2 - ave^2で求めようとしてるところ。(実際は違う値を求めてるが・・)
今回のプログラムでは、これを本来の(1/n) * sum((val - ave)^2)に
戻した分、ループがかさんで見えるはず。
誤差を気にしないのであれば元の式でもOKらしいが・・
元の式のままで行くなら、式を置く位置を変更かな。


197:デフォルトの名無しさん
08/11/04 08:13:08
      r;ァ'N;:::::::::::::,ィ/      >::::::::::ヽ
.      〃  ヽル1'´        ∠:::::::::::::::::i
       i′  ___, - ,. = -一   ̄l:::::::::::::::l
.      ! , -==、´r'          l::::::/,ニ.ヽ
      l        _,, -‐''二ゝ  l::::l f゙ヽ |、 ここはお前の日記帳じゃねえんだ
        レー-- 、ヽヾニ-ァ,ニ;=、_   !:::l ) } ト
       ヾ¨'7"ry、`   ー゙='ニ,,,`    }::ヽ(ノ  チラシの裏にでも書いてろ
:ーゝヽ、     !´ " ̄ 'l,;;;;,,,.、       ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{   __)`ニゝ、  ,,iリ::::::::ミ
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ ,  な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /

198:183
08/11/04 09:38:51
>>197
チラシ探してくる・・・
の前に、varの計算あってた、ごめん。
何年間かどこかで修行してくるわ。

199:デフォルトの名無しさん
08/11/04 13:46:53
[1] 授業単元:配列
[2] 問題文(含コード&リンク):ファイルを文字単位で読み出し,アルファベット('a' -> 'z')が二回連続して出現する全ての箇所から,アルファベット2文字を単位とした出現回数を int 型二次元配列 count[][] に格納せよ。
ファイルの先頭から最後まで文字単位で捜査し,2回連続してアルファベット('a' -> 'z')が出現した箇所を対象にせよ。
this is a pen であれば,th, hi, is, is, pe, en がカウントの対象となる。
"be" という二文字が出現した回数は count[1][4] (count['b'-'a']['e'-'a'])に格納されるようにせよ。
[3] 環境
[3.1] OS: Mac OS
[3.2] コンパイラ名とバージョン:gcc  
[3.3] 言語: C
[4] 期限: 2008年11月5日11:59まで

お願いします



200:デフォルトの名無しさん
08/11/04 14:31:08
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク)
 URLリンク(kansai2channeler.hp.infoseek.co.jp)
 
[3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:11月5日
[5] その他の制限:特になし
 よろしくお願いします。

201:デフォルトの名無しさん
08/11/04 14:54:26
>>199
下の方は確認用ね。
#include<stdio.h>
#define isUpper(a) ('A' <= (a) && (a) <= 'Z')
#define isLower(a) ('a' <= (a) && (a) <= 'z')
#define isAlpha(a) (isUpper(a) || isLower(a))
#define position(a) ( isUpper(a) ? (a) - 'A' : (a) -'a')
int count[26][26];
int main(){
char ch,prev='\0';
int i,j;
FILE* fp;
if((fp = fopen("in.txt","r")) == NULL) return 1;
while((ch = fgetc(fp)) != EOF){
if(isAlpha(prev) && isAlpha(ch)) count[position(prev)][position(ch)]++;
prev=ch;
}
fclose(fp);
printf(" ");
for(i=0;i<26;i++) printf(" %c",'a'+i);
printf("\n");
for(i=0;i<26;i++){
printf("%c",'a'+i);
for(j=0;j<26;j++) printf("%2d",count[i][j]);
printf("\n");
}
}

202:デフォルトの名無しさん
08/11/04 15:17:01
>>200
意外と簡単だった♪

void move(int n, int s, int d){
int tmp,i,j;
printf("%d:%c --> %c\n",n,'a'+s,'a'+d);

tmp=st[sp[s]][s];
st[sp[s]][s]=0; //スタックsからpop
st[sp[d]+1][d]=tmp; //スタックdにpush
//スタックポインタの操作
sp[s]--;
sp[d]++;
for(i=0;i<M;i++){
printf("%c ",'a'+i);
for(j=0;j<=sp[i];j++){
printf("%2d",st[j][i]);
}
printf("\n");
}
}

203:デフォルトの名無しさん
08/11/04 15:29:33
>>202
ありがとうございます!
問1と2の複合って感じですかね?

204:デフォルトの名無しさん
08/11/04 15:40:19
そうそう。
1の部分が
sp[s]--;
sp[d]++;
これで棒に刺さってる枚数をカウントして、
for(i=0;i<M;i++){
printf("%c ",'a'+i);
for(j=0;j<=sp[i];j++){
printf("%2d",st[j][i]);
}
printf("\n");
}
で棒の名前と刺さってる板の大きさを列挙する。

205:デフォルトの名無しさん
08/11/04 19:08:58
九九を計算して,以下のように表示するプログラムを作成せよ

1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81


for文、while文を使えとかいってたと思います。
よろしくお願いします。

206:デフォルトの名無しさん
08/11/04 19:16:48
>>205

int i, j;

for( i = 1; i < 10; i++ ) {
for( j = 1; j < 10; j++ ) {
 printf( "%d ", i * j);
}
printf( "\n");
}

207:デフォルトの名無しさん
08/11/04 19:36:34
>>206
ありがとうございます。

208:デフォルトの名無しさん
08/11/04 19:45:56
>>206
実行してみたんですけど、ただ計算するだけでなく

表みたいにしないといけないんです。どうしたらいいですか?

209:デフォルトの名無しさん
08/11/04 19:47:57
>>208
int i, j;

for( i = 1; i < 10; i++ ) {
for( j = 1; j < 10; j++ ) {
 printf( "%2d ", i * j);
}
printf( "\n");
}


210:デフォルトの名無しさん
08/11/04 20:11:47
>>209
できました。ありがとうございます。

211:デフォルトの名無しさん
08/11/04 20:30:10
∑1/x![X=1から10まで]を求めるにはどうしたらいいでしょうか?


212:デフォルトの名無しさん
08/11/04 20:30:17
[1] 授業単元: 配列
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
(↓途中までですが、考えてみたものです)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: cc
 [3.3] 言語: C
[4] 期限: 2008年11月5日14:00まで
[5] 多次元配列を用いて


213:デフォルトの名無しさん
08/11/04 20:35:31
[1] 授業単元:プログラミング
[2] 2つの3×3行列の入力に対して積を計算し、結果を出力せよ。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:VS2008
 [3.3] 言語:C++
[4] 期限: 明後日
[5] その他の制限: 繰り返しfor、2次元配列を使うこと。3重ループになるそうです。
しかし、どのように3重ループを使えばいいのかわかりません。

214:デフォルトの名無しさん
08/11/04 20:52:33
for(i=0; i<3; i++) for(j=0; j<3; j++) for(k=0; k=3; k++) c[i][j] += a[i][k] * b[k][j];

215:デフォルトの名無しさん
08/11/04 22:23:38
>>211
#include <stdio.h>
int main (void)
{
int i, j;
int kai;
double sum = 0;
for (i = 1;i <= 10; i++) {
kai = 1;
for (j = i;j > 0; j--) {
kai *= j;
}
sum += (double)1.0 / kai;
}
printf("{Σ1/(x!) |1 <= x <= 10} = %f\n", sum);
return 0;
}

216:デフォルトの名無しさん
08/11/04 22:34:19
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。
範囲は[0, 4π]です。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] できるだけ早く
[5] その他の制限:ループと条件分岐、putcharを使う

よろしくお願いします。


217:デフォルトの名無しさん
08/11/04 22:50:06
>>216
>[4] できるだけ早く
が非常に心証が悪いのですが、お気づきですか?気づかれたほうがいいですよ。

218:デフォルトの名無しさん
08/11/04 23:05:47
どうでもいい

219:216
08/11/04 23:38:43
>>217
不愉快な思いをさせてしまい申し訳ありませんでした。
これからは気をつけます。

220:デフォルトの名無しさん
08/11/04 23:50:29
>>192
レス遅くなりました。
プログラムありがとうございました。
出力の方は自分でなんとか、変えてみます。

助かりました。

221:デフォルトの名無しさん
08/11/05 00:09:10
>>212
その1のほう。原形とどめてないかも。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

URLリンク(www.mashimo.com)
を使ってテストした。多分大丈夫。

222:デフォルトの名無しさん
08/11/05 00:34:20
>>217
URLリンク(kansai2channeler.hp.infoseek.co.jp)

223:デフォルトの名無しさん
08/11/05 00:43:12
>>137
レス遅れてしまい申し訳ありません。
プログラムありがとうございました。

これからプログラムの内容を理解していきたいと思います。

224:デフォルトの名無しさん
08/11/05 00:56:29
>>222
ありがとうございました。
とても助かりました。

225:デフォルトの名無しさん
08/11/05 01:00:03
URLリンク(xy.yu.to)
始終荒れまくりの海外サーバ絵チャだ

一人の神プログラマーが強すぎてマクロ荒しが全く太刀打ちできてない。
荒しプログラマーは全員退散!!
誰か倒してくれwwwwww

荒らしても荒らしても線が消されてしまう
一体どうやっているのか?!

226:デフォルトの名無しさん
08/11/05 01:23:50
誰か助けてください。次のプログラムは関数の座標をプロットするプログラムなのですが、
y軸の数字はそのままで、もっと細かくプロットするにはどうすればよいでしょうか。
たとえば、(0.5, 0.25)をプロットするといった具合にです。お願いします。

int main(){
double x,y;

y=100.0;
while(y>=0){
printf("%.1f", y);

x=-10;
while(x<=10){
if(y==(x*x)){
putchar('*');
}
else {
putchar(' ');
}
x=x++;
}
putchar('\n');
y=y-5.0;
}

return 0;
}


227:デフォルトの名無しさん
08/11/05 01:33:17
>x=x++;
関係ないがこれはやめろ

228:デフォルトの名無しさん
08/11/05 01:50:19
[1] コンピュータの基礎的なもの:
[2] 1!+2!+....k!を求めよ:
[3] 環境
 [3.1] 一応Win: (Windows/Linux/等々)
 [3.2] VC6.0: (gcc 3.4 VC 6.0等)
 [3.3] C: (C/C++/どちらでも可 のいずれか)
[4] 今晩中です: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

#include<stdio.h>
main(){
int i,k;
float n,m;
printf("k=");
scanf("□□",□□);
n=0.0;
m=1.0;

for(i=1;i<=□;i□□){
n□□(m□□i);
}
printf("1!+2!+...+%□=%□\n",□,□);
}

forの内部以外のところは埋まりました。
forの内側のnから始まる分が分かりません。

229:デフォルトの名無しさん
08/11/05 01:57:32
n += (m *= i);

230:デフォルトの名無しさん
08/11/05 02:16:29
#include<stdio.h>
main(){
int i,k;
float n,m;
printf("k=");
scanf("%d",&k);
n=0.0;
m=1.0;
for(i=0;i<=k;i++){
n+=(m*=i);
}
printf("1!+2!+.....+%d!=%f\n",k,n);
}
ありがとうございます。
こんなかんじでやって答えが0にしかならないのですが...

231:デフォルトの名無しさん
08/11/05 02:21:37
m=1.0;
for(i=0;i<=k;i++){
n+=(m*=i);
}
これでは常にm = 0.0になってしまうのだが、for ( i = 1; ...)なだろうな

232:デフォルトの名無しさん
08/11/05 02:23:37
ありがとうございます。いけました

233:デフォルトの名無しさん
08/11/05 02:27:39
どなたか226をお願いします。夜が明けるまでにお願いします。

234:デフォルトの名無しさん
08/11/05 03:01:49
>>233
cとyの刻み幅を変えるだけでいいと思う
#include<stdio.h>
int main(){
double x,y;

y=100.0;
while(y>=0){
printf("%.2f", y);

x=-10;
while(x<=10){
if(y==(x*x)){
putchar('*');
}
else {
putchar(' ');
}
x+=0.5;
}
putchar('\n');
y-=0.25;
}

return 0;
}


235:デフォルトの名無しさん
08/11/05 03:20:02
×c
○x

236:デフォルトの名無しさん
08/11/05 03:25:41
1024がどうしたのやつ、まだ引きずってたのか。
前スレで205*5にするのは別に必須でなくて、1024個単位で処理できればいいんでしょ?
って確認しておkが出てたはずなんだけどなー
何が分からないかを伝える練習の場となったか。それもまたよかろ。

237:デフォルトの名無しさん
08/11/05 05:53:10
[1] 授業単元:計算機プログラミングII 「ポインタと文字列」
[2] 問題文(含コード&リンク):課題1
  2つの任意の長さの文字列をポインタ変数pxとpyを使って入力し,
 pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し,その
 結果を出力するプログラムを作成せよ.ただし,ヘッダファイル
 string.hで定義されている関数およびsprintfを使用してはいけない.
 その他,未習のもの(memcpyなど)は使えない.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:2008年11月6日10:30まで
[5] その他の制限:ポインタの基礎を習い始めたところだと思います。
  配列や文字列、for文、if文、関数ぐらいは簡単に習っています。
[6]出されたヒント:px,pyの長さを数える。たとえば,pxがn個の文字列ならば,
   新たなポインタにまずこのn個の文字列が順に入り,その次のところからは,
   pyの1番目,2番目の文字が入っていく。
  という方針であると説明を受けました。

238:デフォルトの名無しさん
08/11/05 06:27:37
>>237
長さ数えなくてもいける!
ただsscanfは微妙によくない気がする!w
#include<stdio.h>
void concatenate(const char* px, const char* py, char* pz){
while(*px) *pz++ = *px++;
while(*py) *pz++ = *py++;
*pz = '\0';
}
int main(){
char x[256];
char y[256];
char z[256];
printf("x:");
fscanf(stdin,"%s",x);
printf("y:");
fscanf(stdin,"%s",y);
concatenate(x,y,z);
printf("z:%s\n",z);
}

239:デフォルトの名無しさん
08/11/05 09:26:58
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 下位バイト側を,バイナリで出力するプロ
グラムです。
[3] 環境
 [3.1] OS: WINDOWS
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 無期限
[5] その他の制限:main()の引数として,argc, argvを使わなくてはいけません。
下のプログラムを元につくります。
よろしくお願いいたします。
#include <stdio.h>
union UNION {
int i;
char ch[4];
};
int main() {
union UNION obj;
obj.i = 320;
printf("%x %x %x %x",obj.ch[0],obj.ch[1],obj.ch[2],obj.ch[3]);
return 0;
}


240:デフォルトの名無しさん
08/11/05 10:29:58
[1] 授業単元:プログラミング
[2] 問題文: 構造体を用いて配列の和、積を求めるプログラムを作成せよ。
ただし、配列のデータは2つのファイルから開いて使用すること。
配列のデータ例
3 4
1.1 2.2 3.3 4.4
1.0 2.0 3.0 4.0
2.0 3.5 6.2 2.5

[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名:gcc
[4]11月6日 12:00まで
[5]その他:
構造体のメンバーは
行のサイズ unsigned int

列のサイズ unsigned int

行列のデータへのポインタ double **

よろしくお願いします。

241:デフォルトの名無しさん
08/11/05 11:14:23
[1] 授業単元: ニューラルネットワーク
[2] 問題文 
 
  ニューラルネットワークの初期状態が記憶パターン1とよく似ているが少しだけ異なっていたとする。
 ニューロンが非同期的に状態更新し、記憶パターン1に近づいていく様子をシュミレーションするプログラムを
 c++で作成せよ。

[3] 環境
 [3.1] OS: Windows Vista
 [3.2] コンパイラ名とバージョン: わかりませんが、最初から付いていたやつかと…。
 [3.3] 言語: C++
[4] 期限: 2008年11月9日
[5] その他の制限:
 序盤まではできたのですが後半からさっぱり・・・。下にできた(と思う)所までと、
与えられた問題のヒント、完成例など置いておきますのでどなたか御願いします><
何か不明な点があったら言って下さい。


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

242:デフォルトの名無しさん
08/11/05 12:13:43
[1] 授業単元:C言語
[2] 問題文 
 
指数関数ex の近似値を返す関数expon(x, n)をつくります。第1引数は浮
動小数点数x で,第2引数はex をTaylor 展開で展開する際の最大次数n になります。
n次項までのTaylor 展開の式は下に示す通りです。
さらに,浮動小数点数y と正の整数m を引数とし,y の小数点m 桁より下を切り捨てて出
力する関数trunc(y, m)をつくりなさい。

次に,これらの2つの関数を用いて,ex の近似値を小数点以下の桁数を指定して出力する
プログラムをつくりなさい。
ex ? 1 + x + x2/2! + x3/3! + … + xn/n!

△出力例:
指数関数exp(x)の近似値を計算します!
x を入力してください:2.5?
Taylor 展開の最大次数n は:100?
小数点以下の桁数m は:3?
exp(x)の近似値 = 12.182

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2008/11/7 24:00まで
[5] その他の制限:printf("%.*f", m, y); は用いないで定義すること。

よろしくお願いします。

243:デフォルトの名無しさん
08/11/05 12:33:39
>>241

vistaにはコンパイラついてませんよ?

244:デフォルトの名無しさん
08/11/05 13:22:14
>>221
一つ目の問題、ありがとうございます。

2つ目の問題の、
3×3行列の余因子の二次元配列を使った書き方がわかりません。

全て書けばプログラムがかなり長くなってしまいますし、それでは配列を使わなくても書けるのでは、と思い考えています。

245:デフォルトの名無しさん
08/11/05 13:49:36
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):

data[n][n]に格納された、n次正方行列の逆行列を求めるプログラムを作成せよ。
対角要素に0に近い要素があっても、正しく求められるように工夫せよ。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: なし


お願いします

246:デフォルトの名無しさん
08/11/05 14:03:52
このプログラムで*をもっと表示させるにはどうすればよいですか。
今日中にお願いいたします。

#include<stdio.h>
#include<math.h>

int main(){
double x, y, pai=3.14;

for(y=1; y>=-1; y=y-0.1){

for(x=0; x<=4*pai; x++){

if(y==cos(x)){
putchar('*');
}

else{
putchar(' ');
}

}
putchar('\n');

}
return 0;
}

247:デフォルトの名無しさん
08/11/05 14:11:58
>>246

#include<stdio.h>
#include<math.h>

int main(){
double x, y, pai=3.14;

for(y=1; y>=-1; y=y-0.1){

for(x=0; x<=4*pai; x++){

if(y==cos(x)){
putchar('************************************');
}

else{
putchar(' ');
}

}
putchar('\n');

}
return 0;
}

248:デフォルトの名無しさん
08/11/05 14:11:59
もっとってどういう風に?

249:デフォルトの名無しさん
08/11/05 15:44:48
>>243

う~ん、でもコンパイルは最初から普通に出来るんですが…
Visual Studio 2008 Express Editionsのページから無料でインストールしたやつを
使用してるんですが、Webインストールした時に一緒に付いて来たとかなのかな…

そうだとしたら落としたのはついこないだなのでvarは最新のはずですが…。

250:デフォルトの名無しさん
08/11/05 15:52:19
そういうときはVS2008と書けばおk

251:デフォルトの名無しさん
08/11/05 16:03:16
>>250
あ、なるほど。
お手数おかけしました><

252:デフォルトの名無しさん
08/11/05 16:03:57
>>242
n = 14 くらいまでにしておかないと、とんでもない結果になるよ
URLリンク(kansai2channeler.hp.infoseek.co.jp)

253: ◆591LS1rcWk
08/11/05 16:04:49


[1] 授業単元:プログラミング実習
[2] URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Win vista
 [3.2] borland C++ 2.31
 [3.3] 言語: C
[4] 期限: 11月06日14:00まで

Rxh(k)=1/n * Σ(n-1,n=0)x[n]*y[n+k]を計算しRxhを1-7出力するプログラムなのですが
完成し、動作を確認した後途中式に用意しておいた二重forループ無いの17行目
printf("%d---%d\n",sum1,sum2);
を消すと正常に稼働しなくなります。
原因解決策などお願いします。

254:デフォルトの名無しさん
08/11/05 16:07:35
>printf(x[8]={1,2,3,4,5,6,7,8}n);

何これ?

255:246
08/11/05 16:28:39
>>248
自分もなんといっていいかわからないのですが、246のままのプログラムでは、cosの値が整数のときしか*が表示されません。
でもpaiの値が小数を含んでいるので、cosの値が小数第何位かになってしまうわけです。
かといって、yの刻み幅をかなり小さくしてしまうと大変なことになってしまいます。
cosの値を四捨五入とかできればいいのですが・・・
そういう場合はどのようにすればよいのでしょうか。


256:デフォルトの名無しさん
08/11/05 16:30:21
>>254
一番最初に配列の内容を出力しておくこと
という条件でした。
情報足りなくてすいません。

257:デフォルトの名無しさん
08/11/05 16:33:07
printf("x[8]={1,2,3,4,5,6,7,8}\n");かな?

258:デフォルトの名無しさん
08/11/05 16:55:22
#include <stdio.h>

int main (void)
{
float rxh[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
int x[8]={1,2,3,4,5,6,7,8},
h[8]={8,7,6,5,4,3,2,1};
int sum1=0,sum2=0,n=8,k,y,z;

printf("x[8]={1,2,3,4,5,6,7,8}\n");
printf("h[8]={8,7,6,5,4,3,2,1}\n");

k=0;
y=n-1;
z=n-k;
for(k=0;k<y;k++,z--){
for(n=0;n<z;n++){
sum1 = x[n] * h[n+k];
sum2 += sum1;
//printf("%d---%d\n",sum1,sum2);
}
rxh[k] = (float)sum2/8.0;

printf("Rxh[%d]=%2.3f\n",k+1,rxh[k]);
sum2=0;
}
return(0);
}

259: ◆591LS1rcWk
08/11/05 16:58:51
リンク先の方を見ると何故か色々欠けているみたいなのでこっちに張り直します。
#include <stdio.h>
int main (void)
{
float rxh[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
int x[8]={1,2,3,4,5,6,7,8},
h[8]={8,7,6,5,4,3,2,1};
int sum1=0,sum2=0,n=8,k,y,z;
printf("x[8]=[1,2,3,4,5,6,7,8]\n");
printf("h[8]=[8,7,6,5,4,3,2,1]\n");
y=n-1;
z=n-k;
for(k=0;k<y;k++,z--){
for(n=0;n<z;n++){
sum1 = x[n] * h[n+k];
sum2 += sum1;
printf("%d---%d\n",sum1,sum2);
}
rxh[k] = (float)sum2/8;
printf("Rxh[%d]=%2.3f \n",k+1,rxh[k]);
sum2=0;
}
return(0);
}

260:デフォルトの名無しさん
08/11/05 17:16:18
>>258
気づきませんでした。ありがとうございます。
修正して下さった点は

k=0;の初期化とrxh[k] = (float)sum2/8.0;の8だった部分を8.0にで合っていますか?


261:213
08/11/05 17:53:35
>>214
返すのが遅れてすいません。どうもありがとうございます。
一晩考えたのですが…

#include <stdio.h>
int main()
{
int a[3][3];
int b[3][3];
int c[3][3];
int i, j, k;

scanf_s("%d %d %d %d %d %d %d %d %d", &a[0][0],&a[0][1],&a[0][2],&a[1][0],&a[1][1],&a[1][2],&a[2][0],&a[2][1],&a[2][2]);
scanf_s("%d %d %d %d %d %d %d %d %d", &b[0][0],&b[0][1],&b[0][2],&b[1][0],&b[1][1],&b[1][2],&b[2][0],&b[2][1],&b[2][2]);

for(i=0; i<3; i++) {
for(j=0; j<3; j++) {
for(k=0; k<3; k++) {
c[i][j] += a[i][k] * b[k][j];
}
printf("%d, " ,c[i][j]);
}
printf("\n");
}
}
とするととんでもない数字が表示されます。

262:デフォルトの名無しさん
08/11/05 18:03:04
int c[3][3] = {0};

263:デフォルトの名無しさん
08/11/05 18:26:59
cを全部0で初期化しないとね。

264:デフォルトの名無しさん
08/11/05 18:44:48
[1] 授業単元:プログラミング演習
[2]
 ①12個のデータを入力できる1次元配列(int型)を準備し、
キーボードから各自 適当な数字(int型の範囲)を12個入力する.
入力したデータは,準備した配列に格納される.
12個のデータの最大値と最小値を表示するプログラムを作成しなさい.

 ②12個のデータを入力できる2次元配列(int型 3行4列)を準備し,
キーボードから各自 適当な数字(int型の範囲)を12個入力する
入力したデータは,準備した配列に格納される.
12個のデータの最大値と最小値を表示するプログラムを作成しなさい.

[3] 環境
[3.1] OS windows Vista
[3.2] コンパイラ名:gcc
 [3.3] 言語: C
[4]11月12日 13:00まで
[5]その他制限:if文、for文、配列などは習いましたが、それ以上はまだ習っていません。よろしくお願いします。

265:デフォルトの名無しさん
08/11/05 19:36:54
>>262,263
できました。どうもありがとうございます。

266:デフォルトの名無しさん
08/11/05 19:49:16
239をどなたかお願いします。

267:デフォルトの名無しさん
08/11/05 20:00:44
>>239 の言ってる意味が分からないんだけど。
argc, argv をどうしたいの?
何の下位バイトを出力するの?

268:デフォルトの名無しさん
08/11/05 20:12:49
[1] 授業単元: C言語入門 文字処理の簡単な演習課題
[2] 問題文(含コード&リンク):

適当な1文字を入力し、それが元が何であったかが分からないように何文字かずらして暗号化し、また元に戻すようなプログラムを作りなさい。文字としては英字小文字のみと仮定します。
例を以下に示します。作成するプログラムも同じような出力形式にしてください。

[ 例 ]
入力文字 = x
暗号化された文字 = b
復号化された文字 = x

何文字ずらすか?については、各自で適当に設定して構いません。

ただし、暗号化された文字も、英字小文字でなければなりません。例えば、zに2を足すと、そのままでは英字でない記号になってしまいますが、これを z+1 -> a, z+2 -> b, z+3 -> c, … のようにアルファベットの先頭に戻してやる処理が必要です。
この点を工夫して下さい。

[3] 環境
 [3.1] OS:Windows XP
 [3.2] Visual C++ 2005
 [3.3] C++
[4] 期限:11月6日23時まで
[5] その他の制限: Char型変数を使うのはわかるのですがそれからがよくわからなくて・・・。
初歩的なことですみませんが、よろしくお願いします。

269:デフォルトの名無しさん
08/11/05 20:15:06
>>239
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
union UNION {
int i;
unsigned char ch[8];
};
void f(unsigned char c)
{
unsigned char i;
for (i = (1 << (CHAR_BIT - 1)); i != 0; i >>= 1) {
if ((c & i) != 0) putchar('1');
else putchar('0');
}
}

int main(int argc, char *argv[])
{
union UNION obj;
obj.i = 0;
if (argc > 1) obj.i = atoi(argv[1]);

printf("%d\n", obj.i);

f(obj.ch[1]);
putchar(' ');
f(obj.ch[0]);
return 0;
}

よくわからないとこは適当に判断させてもらった

270:デフォルトの名無しさん
08/11/05 21:00:23
[1] 授業単元: C言語応用
[2] 問題文(含コード&リンク):

テキストファイル
CD_DATA|45
DVD_DATA|601
MD_DATA|24

メイン関数と読み込み関数で、テキストファイルの'|'より後ろを構造体に書き込み
エラー処理でテキストファイルに'|'が無い時エラーメッセージをだす。
テキストファイルの中の行数が違った時エラーメッセージをだす。

[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:
 [3.3] C
[4] 期限:11月6日15時まで

271:デフォルトの名無しさん
08/11/05 21:00:39
>>269さん
どうもありがとうございます。

272:デフォルトの名無しさん
08/11/05 21:44:12
>>268
offsset は -26 ~ 26、入力文字 in の範囲チェックはどっかでやっておく

int offset = 3;
char in, en, de;

in = getchar();

/* 暗号化 */
en = (in - 'a' + offset + 26) % 26 + 'a';

/* 復号 */
de = (en - 'a' - offset + 26) % 26 + 'a';

printf("入力文字 = %c\n暗号化された文字 = %c\n復号された文字 = %c\n", in, en, de);

273:デフォルトの名無しさん
08/11/05 22:14:22
宿題への助言をお願いします。
内容は、入力された整数列を文字型配列で読み込み、その整数を以下のような変換規則に従い出力するというものです。
0→D、1→f、2→k、3→E、4→y、5→Q、6→R、7→e、8→B、9→t

以下は作ってみたものとなります。出力結果が文字化けしてしまいます…

#include<stdio.h>
#include<string.h>
#define N 50

int main(){
int i, j;
char num[N], txt[N];

printf("%d個までの整数列を入力して下さい : ", N);
scanf("%s", &num);

for(i = 0; i < strlen(num); i++){
for(j = 0; j < 10; j++){
if(num[i] == 'j') txt[i] = "DfkEyQReBt"[j];
}
}

printf("\n整数列を変換した文字列は「");
for(i = 0; i < strlen(num); i++){
putchar(txt[i]);
}
printf("」です。\n");

return 0;

}

274:デフォルトの名無しさん
08/11/05 22:24:23
>>273
scanf("%s", &num); --> scanf("%s", num); & をトル
if(num[i] == 'j') --> if(num[i] = j + '0') 'j' という文字と比べてどうすんの

以上。

275:デフォルトの名無しさん
08/11/05 22:30:26
>>274

どうもです。コンパイル通りました(^^

とっても初心者なので、「j + '0'」とするのがどうも理解しにくいところですが…(^^;

あと、sage忘れスマソ

276:14
08/11/05 22:34:32
>>16
ありがとうございます。先頭のセルの削除と解放ができました。
すべてのセルを削除すると同時に連結リストの先頭と2つ目に追加したセルの領域を解放する関数って
どう書けばいいんですか?

void *delete_all(struct cell *head)
{
struct cell * next;

if(head == NULL){
return NULL;
}
while(next !=NULL){
next = head->next;
}
free(head);
}

whileでnextをセルの終わりまで飛ばして、削除しようと考えたのですが領域の解放の部分が分かりません。


277:デフォルトの名無しさん
08/11/05 22:51:42
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] C
[4] 期限:11月8日

よろしくおねがいします。

278:デフォルトの名無しさん
08/11/05 22:52:31
>>275
'0' は ASCII コードで 48 という整数値に対応する。
'1' は ASCII コードで 49 だから '0' + 1 と表せる。
同様に、'2', '3', ..., '9' は '0' + 2. '0' + 3, ... , '0' + 9 となる。

279:デフォルトの名無しさん
08/11/05 23:04:20
>>272
できました。
本当に助かります。ありがとうございました

280:デフォルトの名無しさん
08/11/05 23:12:41
『2つの文字列をポインタ変数pxとpyを使って入力し、
pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し、
その結果を出力するプログラム』
を作れという課題なのですが、うまく動作してくれません。
誤ってる部分等、目につきましたら助言お願いします。

#include<stdio.h>
#define N 10
int main(){
char *px,*py,*pz,x[N+1],y[N+1],z[N+(N+1)]; /*最大N文字まで入力可としたいので、N+1個分の配列を用意*/
px=x;
py=y;
pz=z;
printf("2つの文字列を入力してください。(ただし、各々最大%d文字まで)\n",N);
printf("1つ目の文字列 >");
scanf("%s",px);
printf("2つ目の文字列 >");
scanf("%s",py);
/* pxとpyの文字列をpzに記憶させる部分 */
while(*pz++ = *px++) ;
pz--;
while(*pz++ = *py++) ;
printf("%s\n",pz);
return(0);
}

/*以下、出力結果
2つの文字列を入力してください。(ただし、各々最大10文字まで)
1つ目の文字列 >yamada
2つ目の文字列 >tarou
フフフフフフフフフフフフフフフフフフフフtarou
*/

281:デフォルトの名無しさん
08/11/05 23:15:38
>>280
printf("%s\n",pz);

printf("%s\n",z);

282:デフォルトの名無しさん
08/11/05 23:18:01
printf()の時点でpzがどこを指してるか考えてみよう

283:280
08/11/05 23:18:50
>>281
出来ました。ありがとうございます。こんなにあっさり・・・。

すみません、どうして、pzではまずいんでしょうか?


284:281
08/11/05 23:20:21
>>283
>>282の通りだけど、
pz--;
これをできているんだからもう少し考えればいけるさ。

285:デフォルトの名無しさん
08/11/05 23:21:53
文字列操作関数使えば瞬殺だったりして

286:280
08/11/05 23:30:55
>>283>>284
解決しました。ありがとうございました。

287:デフォルトの名無しさん
08/11/05 23:35:15
>>264
1問目あがり。
全角スペースは適当に置き換えてちょ。

#include<stdio.h>
#define N 12

int main()
{
 int i, array[N];
 int max, min;

 for( i = 0; i < N; i++ )
  scanf( "%d", &array[i]);

 /* とりあえず0番目の要素を最大値,最小値として設定し, それ以降の要素と比べる */
 max = min = array[0];
 for( i = 1; i < N; i++ ) {
  if(max < array[i])
   max = array[i];
  if(min > array[i])
   min = array[i];
 }
 printf( "Max: %d\nMin: %d\n", max, min);

 return 0;
}


288:デフォルトの名無しさん
08/11/05 23:45:19
exeファイルの中身、C++でプログラミングした文章は、
exeファイルから知ることはできないのでしょうか?

289:デフォルトの名無しさん
08/11/05 23:55:03
>>288
なんとなくはできるよ

逆アセンブルすりゃいいじゃん
したらばニモニックが登場して
そこからアセンブリを割り出せばいい
さらにそのあと好きな高級言語に翻訳

290:デフォルトの名無しさん
08/11/05 23:58:49
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] C
[4] 期限:11月6日 朝7時
[5] その他の制限:出来るだけ簡単に!

よろしくおねがいします!!!

291:デフォルトの名無しさん
08/11/06 00:17:02
>>278
ありがとうございます、すっきりしました(^^

292:デフォルトの名無しさん
08/11/06 00:24:37
245をお願いします

293:デフォルトの名無しさん
08/11/06 00:27:32
>>288
ソースコードを知るのか、例えばアドベンチャーゲームのような、実行ファイルに含まれる
文章を知るのかによってかわるかな。

294:デフォルトの名無しさん
08/11/06 01:08:14
[1] 授業単元: ループと条件分岐
[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。xの範囲は[0, 4π]です。
縦をy軸と見立てます。使うのは条件分岐のif、ループ、putcharです。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 夜が明けるまで
[5] その他の制限: 今はループと条件分岐のifまで習っています。使うのは条件分岐とループ、putcharです。

初めて書き込みします。特に難しいことは必要としないとは言っていましたが、自分には難しすぎます。
どうかよろしくお願いします。


295:デフォルトの名無しさん
08/11/06 01:14:05
>>276, >>14
URLリンク(kansai2channeler.hp.infoseek.co.jp)

296:デフォルトの名無しさん
08/11/06 01:28:06
>>294
横80文字縦20行としてとりあえず。上下非対称だがその辺は丸め誤差のせいにして。
#define WIDTH 80
#define HEIGHT 20
#define PI 3.14159265358979
int x, y;
int c[WIDTH];
for(x = 0; x < WIDTH; x++) c[x] = (cos(4 * PI / WIDTH * x) + 1)* HEIGHT/2;
for(y = 0; y <= HEIGHT; y++){
 for(x = 0; x < WIDTH; x++)
  if(c[x] == HEIGHT - y) putchar('*');
  else putchar(' ');
 putchar('\n');
}

297:296
08/11/06 01:30:01
>>296
配列習ってないんだったら if(c[x] == の部分の c[x] を
cos(4*PI/WIDTH * x) + 1)*HEIGHT/2
に置き換える。すると最初の for(x = 0; は不要。

298:296
08/11/06 01:33:10
と思ったけど、暗黙のキャスト使ってるから一度 int の配列に入れておくのが吉かも。


299:デフォルトの名無しさん
08/11/06 01:38:35
>>295 全然トリッキーじゃなかった。
struct cell *next, *curr;
for (curr = head, next = NULL ; next = curr->next, curr != NULL; curr = next) {
free(curr);
}
せめてこうだったわ。半日修行してくる。

300:294
08/11/06 01:48:40
>>296
配列習ってないので、c[x]を置き換えてやってみたんですけど、何かうまくいきませんでした。
どうすればよいでしょうか。
あと「横80文字縦20行とする」ってどういうことですか。

301:デフォルトの名無しさん
08/11/06 01:49:08
>>290
URLリンク(kansai2channeler.hp.infoseek.co.jp)

302:デフォルトの名無しさん
08/11/06 01:49:11
>>264
2問目あがり。全角スペースは適当に置き換えてちょ。簡単に、簡潔にかいたつもり。

#include <stdio.h>
#define X 4 /* X,Yの値を交換しても動くから好きにしてちょ */
#define Y 3
int main(void)
{
 int i, j, max, min, array[X][Y];
 for( i = 0; i < X; i++ )
  for( j = 0; j < Y; j++ )
   scanf( "%d", &array[i][j]);

 max = min = array[0][0];
 for( i = 0; i < X; i++ ) {
  for( j = 0; j < Y; j++ ) {
   if(max < array[i][j])
    max = array[i][j];
   if(min > array[i][j])
    min = array[i][j];
  }
 }
 printf( "Max: %d\nMin: %d\n", max, min);
 return 0;
}


303:301
08/11/06 01:51:23
問2の3行目は#include <string.h>だorz

304:294
08/11/06 02:08:21
自分でもプログラムを組んでみたんですが、これから何とかなりませんか。
自分の組んだのだと、一つしか表示されません。
#include<stdio.h>
#include<math.h>

int main(){
double x, y, pai=3.14;

for(y=1; y>=0; y=y-0.1){

for(x=0; x<=pai/2; x=x+0.1){

if(y==cos(x)){
putchar('*');
}

else{
putchar(' ');
}

}
putchar('\n');

}
return 0;
}

305:デフォルトの名無しさん
08/11/06 02:19:51
y==cos(x)
幅を持たせろ、なんで一致するとおもったんだ?


306:294
08/11/06 02:22:03
幅を持たせるって、どういうことですか?

307:デフォルトの名無しさん
08/11/06 02:23:47
yが0.1刻みなのにぴったり一致するわけないだろ?

308:デフォルトの名無しさん
08/11/06 02:27:23
#include <stdio.h>
#include <math.h>
int main(){
double x, y, pai=3.14;
for(y=1; y>=-1; y=y-0.1){
for(x=0; x<= 4 *pai; x=x+0.1){
if(y - 0.05 < cos(x) && cos(x) <= y + 0.05){
putchar('*');
}
else{
putchar(' ');
}
}
putchar('\n');
}
return 0;
}

答えわたしとけばいいんじゃね?

309:294
08/11/06 02:28:13
でも刻み幅を細かくしすぎたら、画面に収まりきらないと思うのですが・・・
そういう場合はどうすればよいでしょうか。

310:デフォルトの名無しさん
08/11/06 02:32:01
>>301
おお!
あざーっす!!

311:294
08/11/06 02:32:57
本当にありがとうございました。
自分の知識が足りず、申し訳ありませんでした。

312:301
08/11/06 02:39:00
>>277
#include <math.h>を足して
関数のプロトタイプ宣言して

#define next(x) (((x)+1% (Q_SIZE+1))

#define next(x) ((x+1) % (Q_SIZE+1))

関数enqueue内の return 0; の前に rear = next(rear); 足して

○○○1つ目 enqueue(n) == -1
○○○2つ目 (n=dequeue()) == -1
viewqueueは printf("末尾(長さ:%d)\n", abs(front-rear));

313:デフォルトの名無しさん
08/11/06 02:39:31
名前消すの忘れた(´・ω・`)

314:デフォルトの名無しさん
08/11/06 02:54:41
Cで以下のような関数を作りたいのですが、可能でしょうか?
可能ならば、どのように実装すればよいのか教えてください。

int myrand(int Max, int N, int prob)

0からMaxまでのランダムな整数を返しますが、
probの確率でNを返してくれるような関数です。
例えば、myrand(100, 10, 50)は50%で10を返しますが、
それ以外は1~100までランダム、という具合です。

315:デフォルトの名無しさん
08/11/06 03:03:44
>>314
それ以外は1~100までランダム
10は含むのか?

316:デフォルトの名無しさん
08/11/06 03:12:50
if( (double)rand()/RAND_MAX < prob )
return N;
else
return (int)(rand()*(Max+1.0)/(1.0+RAND_MAX));

317:デフォルトの名無しさん
08/11/06 04:12:38
>>316
probを100で割るか左辺を100倍しないと

318:デフォルトの名無しさん
08/11/06 09:54:40
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
10進数⇔16進数の変換プログラムを作成せよ
-10進⇒16進か16進⇒10進かを最初に選択
-変数はint型で

実行例
10進⇒16進なら1,16進⇒10進なら2を入力してください: 1 ↓
10進数を入力してください: 1000 ↓
入力した数は16進数で 3e8 です.

10進⇒16進なら1, 16進⇒10進なら2を入力してください: 2 ↓
16進数を入力してください: f86a ↓
入力した数は10進数で 63594 です.

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月10日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子は習いました。
お願いします。

319:デフォルトの名無しさん
08/11/06 10:02:27
>>318
strltolは使っちゃだめな課題っぽいけどそうなんだよね?

320:デフォルトの名無しさん
08/11/06 10:21:18
>>318
そうですね。
strltolは使わないでお願いします。

321:デフォルトの名無しさん
08/11/06 10:22:38
>>319
そうですね。
strltolは使わないでお願いします。

322:デフォルトの名無しさん
08/11/06 10:46:05
>>318
#include <stdio.h>
int main(void) {
int i, n;
printf("10進⇒16進なら1, 16進⇒10進なら2を入力してください: ");
scanf("%d", &i);

switch(i) {
case 1:
printf("10進数を入力してください: ");
scanf("%d", &n);
printf("入力した数は16進数で %x です\n", n);
break;
case 2:
printf("16進数を入力してください: ");
scanf("%x", &n);
printf("入力した数は10進数で %d です\n", n);
break;
}
return 0;
}

323:デフォルトの名無しさん
08/11/06 11:47:27
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:bcc
 [3.3] 言語:c
[4] 期限:11/10
[5] その他の制限:とくになし

よろしくおねがいします

324:デフォルトの名無しさん
08/11/06 12:07:30
>>323
int kaibun(char str[]){
{
 int i, n;
 /* 終端文字 \0 または \n までの文字数を数える */
 for(n = 0; str[n] != '\0' && str[n] != '\n'; n++);
 /* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */
 for(i = 0; i < n; i++) if(str[i] != str[n - i - 1]) return 0;
 /* 最後まで return 0 されなかったら 1 を return */
 return 1;
}

325:デフォルトの名無しさん
08/11/06 12:11:06
for(i = 0; i < n; i++)

for(i = 0; i < n/2; i++)
で十分だったな

326:738
08/11/06 12:23:09
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 入力した文字の先頭と最後の文字を出力する。
               ”終わり”と入力すればプログラム終了。

[3]
[3.1] OS:linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C言語
[4] 期限: 2008年11月8日までお願いします。
[5] その他の制限: scanfを使うのではなくgetcharを使用

327:デフォルトの名無しさん
08/11/06 13:23:19
>>326
マルチバイト文字の処理を要求しているのか

328:324
08/11/06 13:28:33
>>323
例文よく見てなかった。大文字小文字は区別しないのな
制限なしってことだから、ctype.h の tolower 使って書き換える
if(str[i] != str[n - i - 1])

if(tolower(str[i]) != tolower(str[n - i - 1]))


329:デフォルトの名無しさん
08/11/06 13:33:00
>>252

ありがとうございました!



330:324
08/11/06 14:35:12
何度もすまん。空白も無視しないとダメなんだな
int kaibun(char str[])
{
 int i, n;
 char buf[MAX_SIZE];
 /* 終端文字 \0 または \n までの文字数を数えて空白を除いて buf にコピー */
 for(i = 0, n = 0; str[i] != '\0' && str[i] != '\n'; i++) if(str[i] != ' ') buf[n++] = str[i];
 /* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */
 for(i = 0; i < n; i++)  if (tolower(buf[i]) != tolower(buf[n - i - 1]))   return 0;
 /* 最後まで return 0 されなかったら 1 を return */
 return 1;
}


331:123
08/11/06 16:34:15
>>123をお願いできないでしょうか?

332:デフォルトの名無しさん
08/11/06 18:49:14
>>324
なんども申し訳ありません
ありがとうございます!

333:デフォルトの名無しさん
08/11/06 18:58:02
>>322
本当に有難う御座いました。
大変助かりました。

334:デフォルトの名無しさん
08/11/06 19:40:49
お願いします
[1] 配列
[2]
下に示す行列の積を求めて表示するプログラムを作りなさい。
int x[2][3]={{1,2,3},{4,5,6}}
int y[3][2]={{1,5},{5,3},{8,1}}
実行結果
35 14
77 41

[3] 環境
 [3.1] XP
 [3.2] VC 6.0
 [3.3] 言語:C
[4] 期限:明日まで

335:デフォルトの名無しさん
08/11/06 19:59:36
>>331
#include <string>
#include <iostream>
class Fish {};
class Wakana : public Fish{
protected: std::string name;
public:
Wakana() : name("ワカナ") { };
void show() { std::cout << name << std::endl; }};
class Tsubasu : public Wakana {
protected: std::string name;
public:
Tsubasu() : name("ツバス") { }
void show() { std::cout << Wakana::name << "→" << name << std::endl; }};
class Inada : public Tsubasu {
protected: std::string name;
public:
Inada() : name("イナダ") { }
void show() { std::cout << Wakana::name << "→" << Tsubasu::name << "→" <<name << std::endl; };};
class Hamachi : public Inada {
protected: std::string name;
public:
Hamachi() : name("ハマチ") { };
void show() {
std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << name << std::endl;}};
class Buri : public Hamachi {
protected: std::string name;
public:
Buri() : name("ブリ") { };
void show() {std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << Hamachi::name << "→" << name << std::endl;}};
int main(){Buri().show(); return 0;}

336:デフォルトの名無しさん
08/11/06 20:08:41
入出力関数は?

337:デフォルトの名無しさん
08/11/06 21:02:39
題意がいまいち分からないので継承元の文字列を継ぎ足していく感じに
URLリンク(kansai2channeler.hp.infoseek.co.jp)
クラス名がinabaになっちゃった.

338:デフォルトの名無しさん
08/11/06 21:05:41
>>334
上の方に行列の課題なかったか?
int ans[2][2] = {0};
int i, j, k;

for(i = 0; i < 2; i++)
 for(j = 0; j < 2; j++)
   for(k = 0; k < 3; k++)
    ans[i][j] += x[i][k]*y[k][j];
for(i = 0; i < 2; i++){
 for(j = 0; j < 2; j++)
  printf("%d ", ans[i][j]);
 printf("\n");
}



339:デフォルトの名無しさん
08/11/06 21:12:34
[1] 授業単元: 配列を用いた計算
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:11月10日12:00まで
[5] その他の制限: 構造体を利用することになっています。
構造体のメンバーは
行のサイズ unsigned int
列のサイズ unsigned int
行列のデータへのポインタ double **
で構成するものとする。
と指定されています。

よろしくお願いします。

340:334
08/11/06 21:31:54
>>338
ありがとうございます

341:デフォルトの名無しさん
08/11/06 23:13:24
>>316, 317
ありがとうございます。

>>315
Maxはある程度大きく、それ程厳密な確率を求めているわけではないですので、
316さんの実装で十分です。


342:デフォルトの名無しさん
08/11/07 00:17:42
[1] 授業単元: ポインタ配列
[2] 問題文(含コード&リンク):

#include <stdio.h>
int main(void)
{
char ??? = {
"1.振り込み",
"2.預け入れ",
"3.残高照会",
"4.通帳記録",
"5.終了",
???
};
char ???p;
p = menu;
while(*p){
printf("???\n",???);
}

上記の???の場所を適切に埋め、動作を確認する。

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC6.0
 [3.3] 言語: C++
[4] 期限: [2008年11月07日10:00まで]
[5] その他の制限:

よろしくお願いします。

343:デフォルトの名無しさん
08/11/07 00:34:56
#include <stdio.h>
int main(void)
{
char *menu[] = {
"1.振り込み",
"2.預け入れ",
"3.残高照会",
"4.通帳記録",
"5.終了",
NULL,
};
char **p;
p = menu;
while(*p){
printf("%s\n", *(p++));
}
return 0;
}

344:デフォルトの名無しさん
08/11/07 00:37:17
>>343
動作確認しました。
ありがとうございます!
助かりました。

345:デフォルトの名無しさん
08/11/07 01:05:48
[1] 授業単元: C
[2] 問題文:
(1)自然数nの正の約数が6個あり(1及びn自身を含めて)
それらの総数の和が532である時のnの値を求めるプログラム。
(2)
nを2桁の偶数としn^2の下2桁がnと同じ時、nの値を求めるプログラム。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [11月7日8:00まで]
[5] その他の制限: 特になし

(2)については答えが76と分かっているのですが
(1)についてはさっぱりなんです…

346:デフォルトの名無しさん
08/11/07 01:55:20
>>345 (1)
#include<stdio.h>
int main()
{
int n, c, a, s;
for (n = 1; ; n ++)
{
c = s = 0;
for (a = 1; a <= n; a ++)
{
if (n % a == 0)
{
c ++;
s += a;
}
}
if (c == 6 && s == 532)
{
printf("%d\n", n);
break;
}
}
return 0;
}

347:デフォルトの名無しさん
08/11/07 01:55:57
>>345
すごい力まかせ、最適化の余地あり

void main(){

int count ;
int buff[6] ;

for ( int i = 1 ; i < 532 ; i++ ){
count = 0 ;
for ( int j= 1 ; j <= i ; j++ ){
if(i%j==0){
buff[count] = j ;
count++ ;
if ( count >= 6 ){
break ;
}
}
}
if ( count == 6 && buff[5]==i){
if( buff[0] + buff[1] + buff[2] + buff[3] + buff[4] + buff[5] == 532 ){
printf ( "%d\n", i ) ;
break ;
}
}
}
}

348:デフォルトの名無しさん
08/11/07 02:07:12
(2)
#include <stdio.h>

int main(void)
{
int n, tmp;

for(n=10; n<100; n+=2){
if(n == n*n%100)
break;
}

printf("%d\n", n);

return 0;
}

349:デフォルトの名無しさん
08/11/07 04:36:24
>>339
URLリンク(kansai2channeler.hp.infoseek.co.jp)
動作確認はあまりしてない。とりあえず動く程度。分割コンパイルは適当に。

350:デフォルトの名無しさん
08/11/07 04:51:50
>>339
同じ学校だね。


351:デフォルトの名無しさん
08/11/07 06:11:38
突然すみません。getsで何も入力しなかった場合に特定の処理をしたいのですが、
下のif(a==NULL)が動作しないです。どう書けばいいか教えて下さい。
int main(){
char a[256];
gets(a);
if(a==NULL){
printf("何か入力して下さい");
}
puts(a);
}
宜しくお願いします。

352:デフォルトの名無しさん
08/11/07 06:41:13
a[0]=='\0'

353:351
08/11/07 06:57:08
>>352
ありがとうございました。

354:デフォルトの名無しさん
08/11/07 07:17:14
[1] 授業単元: C++
[2] 問題文(含コード&リンク): 上下の画面外から敵を2つ出現させて、中央へ移動。左斜め上、右斜め下へそれぞれ移動し、矢印の方向へ一周回る。
一周回ったら再び、中央へ移動する。こんな感じの動きですURLリンク(www.dotup.org)
敵を表示させるところまでいったのですが、どうかお願いします。URLリンク(www.dotup.org)
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: VC2005又はVC2008
 [3.3] 言語: C++
[4] 期限: 2008年11月8日18:00まで
[5] その他の制限: 構造体でお願いします。説明不足な点など、何かあれば言って下さい。

355:241
08/11/07 08:35:49
どなたか>>241を御願いできないでしょうか?

356:デフォルトの名無しさん
08/11/07 10:21:50
>>354
クラスは使っていいの?

357:デフォルトの名無しさん
08/11/07 10:55:20
>>356
使っても大丈夫です。

358:デフォルトの名無しさん
08/11/07 12:02:23
>>241
問題文とか一部だけ見せられてもね・・・・

359:デフォルトの名無しさん
08/11/07 12:47:47
自分の才能の無さに絶望した。

>>354
恥ずかしすぎるので実行ファイルのみ(DXライブラリ)
URLリンク(www.dotup.org)

360:デフォルトの名無しさん
08/11/07 12:59:19
[1] 授業単元: プログラミング
[2] 問題文 神経衰弱の作成
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Visual Studio
 [3.3] 言語: C
[5] その他の制限:行と列を入力し表にする、


361:デフォルトの名無しさん
08/11/07 14:08:15
>>349
動作確認できました。
ありがとうございます<(_ _)>

362:デフォルトの名無しさん
08/11/07 14:09:35
例えば一回出した乱数をaに入れて固定するのはどうしたらいい?
言語はc++です

363:デフォルトの名無しさん
08/11/07 14:17:19
[1] 授業単元: プログラミング
[2] 問題文 
# 下記のように,二つのベクトルを生成し,それらの内積を計算するプログラムを作成しなさい.ただし,ベクトルの各成分は0~9の整数型の乱数で,ベクトルの長さは10とする.なお,乱数の生成にはrandを用いよ.

kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (8, 1, 4, 1, 7, 4, 9, 1, 2, 0)
b = (4, 0, 5, 4, 6, 0, 8, 6, 3, 6)

The value of the inner product of the two vectors = 182

kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (4, 8, 4, 6, 8, 1, 0, 3, 5, 8)
b = (8, 6, 4, 1, 6, 0, 4, 6, 1, 0)

The value of the inner product of the two vectors = 173

kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (8, 7, 3, 8, 8, 3, 8, 8, 3, 1)
b = (8, 9, 6, 3, 6, 3, 6, 3, 5, 8)

The value of the inner product of the two vectors = 321

kawasaki@orange ~/lectures/2008/C/5$
# 上と同じ計算をするプログラムを,乱数の生成にMersenne Twisterを用いて書け.ヒント:genrand_real2()に適切な値の整数をかけたものを整数型にキャストして,0~9の整数乱数をつくる.
[3] 環境
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[5]
お願いします・・・できれば1時間以内に・・・


364:デフォルトの名無しさん
08/11/07 14:24:44
>>362
変数に代入すれば?

365:デフォルトの名無しさん
08/11/07 14:30:18
>>363
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int a[10], b[10], i, sum = 0;
srand((unsigned int)time(NULL));
for (i = 0; i < 10; ++i) {
a[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX));
b[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX));
}
printf("a = (");
for (i = 0; i < 9; ++i) {
printf("%d, ", a[i]);
}
printf("%d)\n", a[i]);

printf("b = (");
for (i = 0; i < 9; ++i) {
printf("%d, ", b[i]);
sum += a[i] * b[i];
}
printf("%d)\n", b[i]);
sum += a[i] * b[i];
printf("The value of the inner product of the two vectors = %d", sum);
return 0;
}


366:デフォルトの名無しさん
08/11/07 14:33:59

[1] 授業単元: プログラミング
[2] 問題文 神経衰弱の作成
[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ名とバージョン: Visual Studio
 [3.3] 言語: C
[5] その他の制限:行と列を入力し表にする、

できれば夕方あたりまでにおねがいします><


367:デフォルトの名無しさん
08/11/07 14:39:12
>>365 ありがとうございます!

368:デフォルトの名無しさん
08/11/07 14:57:06
>>365のはarrayを使うとどういった形になりますか?

369:デフォルトの名無しさん
08/11/07 16:08:25
[1] 授業単元: C,C++、データ圧縮LZ78符合
[2] 問題文:以下に与えたデータ列をLZ78符合で圧縮し、画面に表示するプログラムを作成せよ。
      データ列:ABCBCBCDEBCDABCD
コンソールアプリケーションで作成すること。
      画面には最低限以下のものを出力すること。
      【1】与えたデータ列
      【2】作成した辞書の一覧
      【3】符号化したデータ列
[3] 環境
 [3.1] OS: WindousXP
 [3.2] コンパイラ名とバージョン: VisualStudio2005
 [3.3] 言語: C,C++どちらでも可
[4] 期限:2008年11月13日まで
[5] その他の制限: 標準ライブラリ可

370:デフォルトの名無しさん
08/11/07 16:56:14
>>354
struct 座標 {
 int x, y;
};

struct 移動 {
 座標 end; // 移動先。この座標まで移動したら、次の方向(next)へ向かって移動する
 移動 *next; // 次の移動先へのポインタ
};

こんな感じで、画面中央と画面の端の点を結んで、ループごとにちょっとずつ点に移動するのはダメ?
見当違いな事言っていたらごめんね。

371:241
08/11/07 17:47:36
>>358

すいません、241の問題が課題3でして、この前の課題1,2とそれの解答を下に。

課題1
URLリンク(kansai2channeler.hp.infoseek.co.jp)
課題2
URLリンク(kansai2channeler.hp.infoseek.co.jp)

課題1が1/2の確立で+-1となる記憶パターンを生成するプログラムで、
課題2がシナプスの結合の重みを決定するものです。

説明と資料の不足どうもすみませんでした…。
他にも情報、説明が足りない所があればお伝え下さい。
あと追記ですが、提出期限が11月9日→11月10日に変更になりました。

372:デフォルトの名無しさん
08/11/07 18:04:34
>>371
これって正解?それとも自力で解いたやつ?
>weight[j][i]=pattern1[i]*pattern1[j];/* 結合の重みの計算*/
>weight[j][i]=weight[i][j];
課題2回答.txtのこの部分、おかしい気がするんだけど。

373:デフォルトの名無しさん
08/11/07 18:18:00
>>371
課題2からしてコンパイルどころかインデントのチェックすら通らんな

例題も、定義によれば重みの対角成分は必ず+1じゃないとおかしいのに、
全部白(-1)になってる。問題に関する資料は全部晒したほうが良いと思われ


374:デフォルトの名無しさん
08/11/07 18:37:50
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
↑のカレンダープログラム(西暦と月を入力するとその月のカレンダーが表示されるもの)を
次のように改造せよ。
・月のカレンダーではなく一年分のカレンダーを表示させる。
・daysinyear()とdaysinmonth()でif文ではなくswitch文を使う。
というのと、
フィボナッチ数列を、指定された個数まで求めて表示するプログラムを書け。
ループにfor文を使ったもの、whileを使ったもの、doを使ったものをそれぞれ作ることで
プログラムを三つ書く。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名: gcc
 [3.3] 言語: C
[4] 期限: 2008年11月10日まで
[5] その他:上にあるカレンダープログラムは講師が生徒のレベルに合わせて
作成したものです。
2つになってしまいましたがどうかよろしくお願いします。

375:デフォルトの名無しさん
08/11/07 18:48:53
>>366
一応クリアはできた
URLリンク(kansai2channeler.hp.infoseek.co.jp)

376:241
08/11/07 18:51:32
>>372
>>373
もうほんと色々すいません…。講義で使うPDFが重くてラウンジにupできなかったんですが、
違う所にここまでの講義内容のpdf全部上げときます。(第2回~第5回迄)

URLリンク(www1.axfc.net)
DLパスは「123」です。馬鹿学校ですいません…。


377:デフォルトの名無しさん
08/11/07 18:57:20
>>376
上げてもらった資料まだ目を通してないけど
とりあえず対角成分だけ別に設定できるようにしてやってみた
例題と同じ値を入れてみても経過が一致しないww
URLリンク(kansai2channeler.hp.infoseek.co.jp)

378:377
08/11/07 18:58:37
例題と同じ値で試してみたい場合は最初のforループ(乱数でpattern生成するところ)を
ざっくりコメントアウトすればいい

379:デフォルトの名無しさん
08/11/07 19:11:46
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):

data[n][n]に格納された、n次正方行列の逆行列を求めるプログラムを作成せよ。
対角要素に0に近い要素があっても、正しく求められるように工夫せよ。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限: なし


お願いします!




380:372
08/11/07 20:23:47
>>377
俺はお手上げだ。
それ、初期化忘れと、対角成分ってところに代入するのは0じゃね?
ってことでこれ。変更箇所に目印を付けてみた。
URLリンク(kansai2channeler.hp.infoseek.co.jp)


381:デフォルトの名無しさん
08/11/07 20:37:04
>>380
対角成分はテキスト読んだかぎり+1にならない理由が見当たらないが、例題では0を入れているな。
weight は全要素に値が入るんだから初期化不要では?

あと、pattern2 の初期値だが、ランダムに「反転する」ならば
if(randv > 0.75)
 pattern2[i] = -pattern1[i];
else
 pattern2[i] = pattern1[i]
みたいな感じにすれば、この場合 25% の確率で反転する。

382:デフォルトの名無しさん
08/11/07 22:24:20
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
円柱の半径と高さを実数で入力し,その体積を求めるプログラムを作りなさい
-変数はすべてdouble型を用いること
-円周率p=3.14159265358979として計算

[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月10日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
             逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
            繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
            インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。
お願いします。

383:デフォルトの名無しさん
08/11/07 22:38:25
>>382 ほんとに問題それであってる?
#include <stdio.h>
main()
{
double p = 3.14159265358979, r, h;
printf("半径: ");
scanf("%lf", &r);
printf("高さ: ");
scanf("%lf", &h);
printf("体積: %f\n", p*r*r*h);
}

384:デフォルトの名無しさん
08/11/07 22:46:30
>>383
問題文はこれだけなので合っているのですが、どうかされましたか?

385:デフォルトの名無しさん
08/11/07 22:49:00
公式と最低限の入出力関数さえ知ってれば何の苦労もなさそうだから
宿題とする価値がないというか何と言うか…

386:デフォルトの名無しさん
08/11/07 22:54:53
>>385
そうなんですか。
一応、この問題はC言語のテキストの発展問題なんですがそんなに簡単だったんですね。
そんな問題が解らないって本当に自分やばいですね。
何はともあれ、宿題をやって下さって有難う御座いました。
本当に助かりました。

387:デフォルトの名無しさん
08/11/07 23:06:11
[1] 授業単元:Linuxプログラミング
[2] 問題文(含コード&リンク):
途中までつくって、コンパイルも出来るようになったのですが、動作が中途半端です。fork(), execvp, waitあたりが理解出来ていないからどこか
がおかしいと思うのですが、見て下さい。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 4.1.2
 [3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限:
やろうとしていること:
実行すると、testプロンプトが表示されるので、好きなコマンドを実行すると、結果を表示する。->例えば、test> ls -l -a /tmp/temp.txt
exitを入力するまで繰り返し何度でもコマンドを実行出来る。
質問(1)なぜか最初の一回目はexecvpによるコマンド実行結果が表示されません。二回目からは正常に動作するのですが。。
質問(2)exitを入力するまでループにしているのですが、一回入力させれば終了したいのに、複数回コマンドを実行した場合は、exitも複数回入力しなければ
抜けられなくなってしまいました。
質問(3)二回目のコマンド実行時、一回目よりも短いオプションで実行するとなぜか「ls: p/temp.txt: ファイルかディレクトリが見つかりません」とエラーになります。
argv[i]に格納した文字列が途中で切れてしまっているように思われます。
質問(4)存在しないコマンドを入力するとエラーメッセージを出したいのですが、どうすればよいでしょうか。
質問(5)ソース中にシグナルキャッチャーの箇所がありますが、どのように使えばいいのかわかりません。不明確な質問ですが、この文脈で使い方がわかる
場合は教えて下さい。以上、長くなりましたが宜しくお願いします。


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