C/C++の宿題片付けます 143代目at TECH
C/C++の宿題片付けます 143代目 - 暇つぶし2ch150:デフォルトの名無しさん
10/11/19 18:44:44
デフォルトコンストラクタはある

int i() とやると iは0に初期化される

しかし配列newの場合はPOD型はデフォルトコンストラクタは呼ばれなくて
不定値になるとちゃんと書いてあるじゃん

151:デフォルトの名無しさん
10/11/19 19:04:55
PODのディフォルトコンストラクタは配列 new 時にはコールされないって解釈なら正しいのか?

152:mery
10/11/19 19:10:58
[1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):
無限ループを用い、1~50までの数値を任意に10個入力し、その度数分布を求めよ。但し、度数分布は10等分(例;1~10に4個, 11~20に3個, 21~30・・・41~50に0個)して表示せよ。
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語:C
[4] 期限:11月21日
[5] その他の制限:1~50以外の数字が入力されたときの処理は考えなくていいそうです
よろしくお願いします!

153:デフォルトの名無しさん
10/11/19 19:15:02
>>152
その度数分布だと5等分なんじゃ?

154:デフォルトの名無しさん
10/11/19 19:44:05
>>151
規格を解釈するとそうなる

155:デフォルトの名無しさん
10/11/19 19:48:48
#include <stdio.h>
#include <stdlib.h>
double ave,var;
double heikin(double *array,int n)
{
int i;
double sum=0;
srand(10);
for(i=0;i<n;i++){
array[i] = (double)(rand())/RAND_MAX;
sum+=array[i];
printf("%lf\n",array[i]);
}
return sum;
}

156:デフォルトの名無しさん
10/11/19 19:50:46
int main(void)
{
int d=0;
double *h,r;

printf("乱数の数:");
scanf("%d",d);

h=(double*)malloc(d*sizeof(int));
r= heikin(h,d);
printf("合計:%lf",r);
return 0;
}

乱数の合計値を求めるプログラムなんですが、エラーが発生します。
どこが原因なんでしょうか?

157:デフォルトの名無しさん
10/11/19 19:54:03
>>156
sizeof(int)

158:デフォルトの名無しさん
10/11/19 19:56:05
>>157
sizeof(int)をどうすれば良いのですか?

159:デフォルトの名無しさん
10/11/19 20:12:30
double *h,r; hはdouble型のポイントで

h=(double*)malloc(d*sizeof(int)); int型のサイズで確保してどーすんだと

160:デフォルトの名無しさん
10/11/19 20:13:20
ポイントってなんだ、ポインタやん orz

161:デフォルトの名無しさん
10/11/19 20:20:25
>>156
scanf("%d",d);

scanf("%d",&d);

162:デフォルトの名無しさん
10/11/19 20:30:04
>>159-161
ありがとうございます。
初歩的なミスでした。

実を言うと、もう一つ質問があります。
この合計から「分散」を計算したいのですが、どうすれば良いですか?


163:mery
10/11/19 20:57:47
>153さん
すいません、5等分でした。
正しい問題は、
「無限ループを用い、1~50までの数値を任意に10個入力し、その度数分布を求めよ。但し、度数分布は5等分(例;1~10に4個, 11~20に3個, 21~30・・・41~50に0個)して表示せよ。 」です。


164:デフォルトの名無しさん
10/11/19 21:23:30
>>152
#include <stdio.h>

int main(void)
{
int count[5]={0};
int i, j, x=0;
i=0;
while(1)
{
if(i>=10) break;
scanf("%d", &x);
count[(x-1)/10]++;
i++;
}
i=0;
while(1)
{
if(i>=5) break;
printf("%2d~%2d : ", i*10+1, (i+1)*10);
j=0;
while(1)
{
if(j>=count[i]) break;
printf("*");
j++;
}
printf("\n");
i++;
}
return 0;
}

165:デフォルトの名無しさん
10/11/19 21:36:07
よし、マイナスの値を入力して結果を見てみようか。

166:デフォルトの名無しさん
10/11/19 21:37:57
範囲外の値を入力したらエラーで落ちた orz

167:デフォルトの名無しさん
10/11/19 21:41:39
こういうのを勇み足といいます

168:デフォルトの名無しさん
10/11/19 21:49:20
入力された値をもとに配列の添え字を指定するのは思いついたが
範囲外の対処が甘かったか。

169:デフォルトの名無しさん
10/11/19 21:49:34
>>162の者ですが、「分散」のプログラムはこれで合ってますか?

ave=sum/n;
for(i=0;i<n;i++){
gokei+=(sum*((array[i]-heikin)*(array[i]-heikin)));
}
var=gokei/(n-1);

170:デフォルトの名無しさん
10/11/19 21:50:58
>>169
いいえ

171:デフォルトの名無しさん
10/11/19 21:56:25
>>169
どこが違うのか教えてください

172:デフォルトの名無しさん
10/11/19 22:45:54
>>169ですが、書き直しました。

ave=sum/N;
for(i=0;i<N;i++){
sum2+=((array[i]-ave)*(array[i]-ave));
}
var=sum2/(N-1);
return var;
}

これで合ってますか?間違っているのなら指摘をお願いします。

173:デフォルトの名無しさん
10/11/20 00:05:58
>>172
sum2=0;
をforの前に入れればOK

174:デフォルトの名無しさん
10/11/20 00:07:40
安部

175:デフォルトの名無しさん
10/11/20 00:09:48
分散は、
(二乗の平均) - (平均の二乗)
に等しい、という公式がありますので(URLリンク(ja.wikipedia.org)
平均を求めるときに二乗の平均もあわせて計算すると、1 pass ですみます。参考までに。

176:デフォルトの名無しさん
10/11/20 01:35:23
>>173>>175
ありがとうございます!

177:デフォルトの名無しさん
10/11/20 01:46:27
[1] 授業単元:プログラミング
[2] 問題文
URLリンク(imepita.jp)
図の左のプログラム(○つけてある方です)の30行目~32行目を消して、デストラクタを作って31行目の処理を実装して動作確認をしてください
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C++
[4] 期限:2010/11/22


178:デフォルトの名無しさん
10/11/20 01:51:07
>>177
読みづらい
それにSeiseki.hはどこにあるの?
面倒でもcodepadかどこかに上げてくれ

179:デフォルトの名無しさん
10/11/20 01:53:29
>>177
そのページを打ち込んだテキストファイルをアップする
それが最低限のマナーだと思うぞ


180:デフォルトの名無しさん
10/11/20 01:53:42
>>132
これって、printfはcoutにする事は不可能でしょうか

181:177
10/11/20 02:02:03
URLリンク(imepita.jp)
ごめんなさい。全体を貼ったほうがいいですね…

182:デフォルトの名無しさん
10/11/20 02:05:13
だからimepitaはやめろっつーに
それもデジカメじゃなくて携帯で撮ったろ
ボケて読めない
テキストで打ち込め

183:デフォルトの名無しさん
10/11/20 02:20:24
なんでわざわざ紙に印刷した上にデジカメで撮影した画像をアップするんだよw
もとのテキストをアップすりゃ済むことだろw

184:デフォルトの名無しさん
10/11/20 02:26:49
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):平均値:μ,分散:σ^2の分布がn個与えられているとする。
この分布が何であろうと、nの数が多きなるにつれてこの分布の合計は平均:nμ,分散:nσ^2の正規分布に近づくとされる。
要素数n個をもつx個の乱数系列を発生させるプログラムを作れ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2010
 [3.3] 言語: C++
[4] 期限:2010年11月22日
[5] その他の制限:①キーボードから入力すること
②乱数は配列で保存すること
③#include <stdio.h>#include <stdlib.h>にしてはじめること


185:177
10/11/20 02:27:17
>>183
紙に印刷したんじゃなくて配布のプリントなんです…

186:デフォルトの名無しさん
10/11/20 02:28:16
宿題をくれているのに生意気なこと言うなよ
とっとと宿題をやれ

187:デフォルトの名無しさん
10/11/20 02:42:25
野良猫にえさを与えないで下さい

188:デフォルトの名無しさん
10/11/20 02:44:02
>>185
だから、それを一字一句間違いなく打ち込んでアップするのが出題者の最低限のマナーだ
コードを書けない馬鹿でも紙に書いてある物を間違いなく打ち込むくらいは出来るだろう

189:デフォルトの名無しさん
10/11/20 02:47:11
にゃおおおおー、にゃおーーーー

 ヾヽヽ
 (,, ・∀・)チュンチュン
  ミ_ノ
  ″″

190:デフォルトの名無しさん
10/11/20 02:48:51
>>188
>コードを書けない馬鹿でも紙に書いてある物を間違いなく打ち込むくらいは出来るだろう
これどうやるんですか?

191:デフォルトの名無しさん
10/11/20 03:14:56
まさかパソコン持ってないとか言うなよ・・・・

192:デフォルトの名無しさん
10/11/20 03:26:10
>>190
君に言うべき言葉が見つからない、ゴメン

193:デフォルトの名無しさん
10/11/20 03:30:47
いや、あるよ
>>190
君はこのスレに来る前にしなければならない事が山ほどある

194:デフォルトの名無しさん
10/11/20 03:35:42
PCなくてもネカフェ行けばいいんでないの

195:デフォルトの名無しさん
10/11/20 03:40:16
いまの学生は携帯は持っているけど、PCは持ってないの多そうだな
宿題の解答は学校のPCでダウソかな
時代は携帯中心になり、モビリティのないPCはおっさん時代の中心ねだろうな

196:デフォルトの名無しさん
10/11/20 03:45:36
だが、PCが一人1台すらない詐欺学校で
全て机上のペーパープログラミング授業だとしたらどうだろう?

197:デフォルトの名無しさん
10/11/20 03:45:56
>>177
よく分からないんだけど、これでいいの?
Seiseki.h URLリンク(codepad.org)
Seiseki.cpp URLリンク(codepad.org)
main.cpp URLリンク(codepad.org)

198:90
10/11/20 03:50:57
>>106
亀レスでごめんなさい。
256色で出力しようと思ってたのですが。
求める画像ができるならどの形式でも問題ありません。

codepad重いみたいなのでおかしいと思ったところを書き直して貼ってみます。
どなたか>>90をお願いします。


#include "stdafx.h"
#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
FILE *fp = NULL;

int inwidth,inheight,insize;


RGBQUAD eq[256];
for(a=0; a<256; a++)
{
eq[a].rgbBlue = a;
eq[a].rgbGreen = a;
eq[a].rgbRed = a;
eq[a].rgbReserved = 0;
}



199:デフォルトの名無しさん
10/11/20 03:52:02
fopen_s(&fp, "赤rec00「RGB」.bmp", "rb");
if(fp==NULL)
{
printf("画像の読み込みに失敗");
exit (-1); /*処理を継続できないので終了する*/
}
fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);
inwidth = bmih.biWidth;
inheight = bmih.biHeight;
insize = inwidth * inheight;
unsigned char* red;
red = new unsigned char[insize];
fread( &eq , sizeof(RGBQUAD)*256, 1 , fp );
fread(red, insize, 1, fp);
fclose(fp);

fopen_s(&fp, "緑rec00「RGB」.bmp", "rb");
if(fp==NULL)
{
printf("画像の読み込みに失敗");
exit (-1); /*処理を継続できないので終了する*/
}
fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);
unsigned char* green;
green = new unsigned char[insize];
fread( &g , sizeof(RGBQUAD)*256, 1 , fp );
fread(green, insize, 1, fp);
fclose(fp);


200:デフォルトの名無しさん
10/11/20 03:52:44
fopen_s(&fp, "青rec00「RGB」.bmp", "rb");
if(fp==NULL)
{
printf("画像の読み込みに失敗");
exit (-1); /*処理を継続できないので終了する*/
}
fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);
unsigned char* blue;
blue = new unsigned char[insize];
fread( &eq , sizeof(RGBQUAD)*256, 1 , fp );
fread(blue, insize, 1, fp);
fclose(fp);


unsigned char* rgbrec;
rgbrec = new unsigned char[insize];
RGBQUAD rgb[256*128];
for (a=0; a<insize; a++)
{
rgb[a].rgbBlue = blue[a];
rgb[a].rgbGreen = green[a];
rgb[a].rgbRed = red[a];
rgb[a].rgbReserved = 0;

rgbrec[a] = a;
}



201:デフォルトの名無しさん
10/11/20 03:53:25

bmfh.bfType = 0x4D42;
bmfh.bfSize = 54+insize+(4*256*128);
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
bmfh.bfOffBits = 54+4*256*128;

bmih.biSize = 40;
bmih.biWidth = inwidth;
bmih.biHeight = inheight;
bmih.biPlanes = 1;
bmih.biBitCount = 8;
bmih.biCompression = 0;
bmih.biSizeImage = insize;
bmih.biXPelsPerMeter = 0;
bmih.biYPelsPerMeter = 0;
bmih.biClrUsed = 256;
bmih.biClrImportant = 0;

fopen_s(&fp, "rec「RGB」.bmp" , "wb" );
fwrite( &bmfh , sizeof(BITMAPFILEHEADER) , 1 , fp );
fwrite( &bmih , sizeof(BITMAPINFOHEADER) , 1 , fp );
fwrite( &rgb , sizeof(RGBQUAD)*256*128 , 1 , fp );
fwrite( rgbrec , 1 , insize , fp );
fclose( fp );

return 0;
}

202:デフォルトの名無しさん
10/11/20 03:54:05
長々と失礼しました。

203:デフォルトの名無しさん
10/11/20 04:25:28
>>181
君がアンカーをミスらなければもっと早く答えたんだけどね

void Matrix::disp( void )
{
    if( m_Mat ) {
        int i, j;
        for( i = 0; i < m_row; i++ ) {
            cout << "|\t";
            for( j = 0; j < m_column; j++ )
                cout << m_Mat[i][j] << "\t";
            cout << "|" << endl;
        }
    }
}
これの話だと思う、別にC++だからprintf() を使ってはいけない理由は無いと思うんだけどな


204:203
10/11/20 04:27:58
× >>181
○ >>180

そして俺がアンカーをミスるのは何故だ....

205:デフォルトの名無しさん
10/11/20 05:38:00
>>90
全部書き直したいくらいのソースだけど
一応可能な限り残して修正
てか、これ色々エラー処理入れたほうがいいんじゃないか?

吐き出しフォーマットは24bitビットマップ

URLリンク(codepad.org)

206:デフォルトの名無しさん
10/11/20 10:27:17
>>184
URLリンク(codepad.org)

C標準関数rand()の質が悪いのでもっと良いrand()を使えば
いい結果が得られると思う

207:デフォルトの名無しさん
10/11/20 10:31:37
>>184
ごめん乱数は配列に保存すると題意にあったのでarray[]に保存している
表示はしていない

URLリンク(codepad.org)

208:デフォルトの名無しさん
10/11/20 12:53:14
>>203
ごめんなさい。これを>>129のプログラムのprintfの所に代わりに入れてあげればいいんですか?


209:デフォルトの名無しさん
10/11/20 14:10:20
>>184ですが、書き間違えていました。

正しくは、

②乱数は配列で保存すること → ②乱数は「動的確保された」配列に保存すること

ごめんなさい。

210:デフォルトの名無しさん
10/11/20 14:21:25
>>209の続きです。

④乱数係数xはキーボードから入力するようにプログラムすること

を追加してください。

211:デフォルトの名無しさん
10/11/20 14:33:26
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):赤い領域と白い領域が隣り合っているところを抽出せよ。
[3] 環境
 [3.1] OS:Windows、visual studio2005
 [3.3] 言語:どちらでも可。
[4] 期限:今日か明日には完成させたいです。
[5] その他の制限:できるだけわかりやすいと嬉しいです。

とりあえず赤い領域は抽出できたのですが隣り合う白い領域を抽出するのができないです。
ラスタスキャンし、赤い画素を見つけたら4近傍を探索し、白い画素だったら抽出…という方向で組んでいるのですが
白い画素を見つけたとき、その白い画素の4近傍もまた探索しないといけないのでここでつまづいています。
よろしくお願いします。

212:デフォルトの名無しさん
10/11/20 14:36:19
>>209>>210
乱数は動的確保された配列に保存されています

乱数係数xの意味がよくわかりません
具体的に説明をお願いします
もしかしてsrand()に与える値ですか?

213:211
10/11/20 14:43:00
// (1)画素値(R,G,B)を順次取得し,変更する
// 赤色領域の4近傍を探索し、白色であった場合抽出する
for (y = 0; y < hsvImage->height; y++) {
for (x = 0; x < hsvImage->width; x++) {
cnt++;
p[0] = hsvImage->imageData[hsvImage->widthStep * y + x * 3]; //座標(x,y)のH(色相)値を取得
p[1] = hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 1]; //座標(x,y)のS(彩度)値を取得
p[2] = hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 2]; //座標(x,y)のV(輝度)値を取

//赤い画素を見つけたら
if(((p[0] >= THRESH_BOTTOM1) && (p[0] <= THRESH_TOP1)) || ((p[0] >= THRESH_BOTTOM2) && (p[0] <= THRESH_TOP2))){
if((p[2] >= THRESH_BOTTOM4) && (p[2] <= THRESH_TOP3)){

//// 4近傍を探索し、白色の画素があれば抽出(とりあえず左だけ)
x = x - 1;
if((p[2] >= THRESH_BOTTOM3) && (p[2] <= THRESH_TOP3)){
p[0] = cvRound(255);
p[1] = cvRound(255);
p[2] = cvRound(255);
flag=1;
}x=x+1;

214:211
10/11/20 14:44:08
}
}
if((p[0] >= THRESH_BOTTOM1 && p[0] <= THRESH_TOP1) || p[0] >= THRESH_BOTTOM2 && p[0] <= THRESH_TOP2){
if((p[2] >= THRESH_BOTTOM4) && (p[2] <= THRESH_TOP3)){
hsvImage->imageData[hsvImage->widthStep * y + x * 3] = cvRound(255);
hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 1] = cvRound(255);
hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 2] = cvRound(255);
}
}else if((p[0] == THRESHOLD_MAX_VALUE) && (p[1] == THRESHOLD_MAX_VALUE) && (p[2] == THRESHOLD_MAX_VALUE)){
hsvImage->imageData[hsvImage->widthStep * y + x * 3] = cvRound(100);
hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 1] = cvRound(100);
hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 2] = cvRound(100);

}else{
hsvImage->imageData[hsvImage->widthStep * y + x * 3] = cvRound(0);
hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 1] = cvRound(0);
hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 2] = cvRound(0);
}
//printf("flag:%d\n",y);
if(flag==1){
y = y -1;
flag=0;
}
}
}
今のところこんな感じです。
赤い画素をH,S,V全てに255をセットし、みつけた白い画素をH,S,V全てに100をセットしています

215:デフォルトの名無しさん
10/11/20 14:44:18
>>211
サンプル画像も貼らずに質問とな?
説明の意味が分からんのだが、赤い領域と白い領域の境界を見るのなら
「白い画素の4近傍もまた探索」は必要ないのではないか?
とりあえず赤い領域と白い領域が何をさしてるのかちゃんと説明してくれ

216:デフォルトの名無しさん
10/11/20 14:52:32
>>209
>>210
奇特な >>129 がせっかく書いてくれてるのに、
理解する能力もなければ(ホントに全くないよね)、
理解する気持ちもない。
君は単位落とすべきでは?

217:211
10/11/20 14:55:50
>>215
URLリンク(www1.axfc.net)
画像用意しました。
この中からエビの部分だけを抽出したいんです。


218:デフォルトの名無しさん
10/11/20 16:08:51
jpegかよ

219:デフォルトの名無しさん
10/11/20 16:12:39
>>212

乱数係数ではなく「乱数系列」でした。

220:デフォルトの名無しさん
10/11/20 16:13:40
>>217
CDC MemDC1,MemDC2;を用意し、
MemDC1は白い色だけの色を残し、それ以外はCOLORREF=0にする。
MemDC2は赤い色だけの色を残し、それ以外はCOLORREF=0にする。
MemDC1とMemDC2のCOLORREF≠0の部分を縦横4ドットずつ広げる。
MemDC1とMemDC2のandを取る。

こんな感じでだめか?



221:デフォルトの名無しさん
10/11/20 16:15:16
>>216
>>122は私が書いたのものではないのですが…

222:デフォルトの名無しさん
10/11/20 16:17:52
>>14
URLリンク(codepad.org)

223:デフォルトの名無しさん
10/11/20 16:56:39
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):双方向リストを使って、複数行を読み込み、読み込んだ行をそのままの順に出力するプログラムを完成させなさい。
[3] 環境
 [3.1] OS: Windows7(Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: gcc 3.4 VC 6.0
 [3.3] 言語:_C
[4] 期限:今日中
[5] その他の制限: 特になし


224:デフォルトの名無しさん
10/11/20 17:06:52
IT会社の経営者なんて、自社製品を何も持たず技術者をよその会社にぶちこんでピンはねで利益を上げてるだけだぞ?
従業員のやりがいとか成長とか全く興味がないからな。ビジネスモデルがピンはねなんだからやつらの考えることは
如何に従業員をこき使うかしか考えてない。それでしか利益を上げられないんだから。
普通会社の存在理由って、世の中に新しい価値を提供したいとかそういうことじゃん?
でもITの経営者のやることは技術者を売ってピンはねで金儲けすることだけだから。
技術者の命より金の方が優先度が高い世界だぞ?そりゃ精神病んで自殺に追い込まれるよ。

225:デフォルトの名無しさん
10/11/20 17:20:49
[1] 授業単元:集合知プログラミング
[2] 問題文(含コード&リンク):スレリンク(tech板:224番) はどこか
のスレからの誤爆である。このスレを探し、何に対するレスであるか示すプログラムを書きなさい。
[3] 環境
 [3.1] OS: Windows7(Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: gcc 3.4 VC 6.0
 [3.3] 言語:_C
[4] 期限:今日中
[5] その他の制限: 特になし

226:デフォルトの名無しさん
10/11/20 17:43:07
>>217
画像ファイルの扱いは不慣れなので、変なところがあるかもしれませんが、
取りあえずエビっぽいのが抽出できたんで。
URLリンク(www1.axfc.net)

227:デフォルトの名無しさん
10/11/20 17:46:04
>>222
すごいシンプルだな、参考にさせてもらうよ
俺もがんばって解いたが発狂しそうになった
URLリンク(codepad.org)

228:デフォルトの名無しさん
10/11/20 17:53:22
>>227
問題読んですらないけど51-98行の圧迫感にワロタw
力作おつです。

229:デフォルトの名無しさん
10/11/20 17:58:13
>>219
出掛けていて遅くなった

URLリンク(codepad.org)

これでいいのかな
ちなみにcodepadには上げてないけど、自前のもっと質の良い乱数発生
ルーチンを使ったら発生個数を上げると平均、分散ともに桁数の一致が
良くなりました

でも宿題用ならこれで十分でしょう

230:226
10/11/20 18:01:15
>>226
ごめん。↓ここがおかしいわ。
gAnd[y][x] = 0;
int xx,yy;
for (yy=((y-3)<0?0:(y-3)) ; !gAnd[y][x] && yy<((y+3)>300?300:(y+3)) ;yy++) {
for (xx=((x-3)<0?0:(x-3)) ; !gAnd[y][x] && xx<((x+3)>300?300:(x+3)) ;xx++) {
if (gW[y][x] && gR[y][x]) {
gAnd[y][x] = 1;
}
}}

正しくは、というより俺がイメージしたのは↓。
/* "3ドット広げて、W,Rともドットがあったら"って処理のつもり */
gAnd[y][x] = 0;
int xx,yy;
int flag = 0;
for (yy=((y-3)<0?0:(y-3)) ; !gAnd[y][x] && yy<((y+3)>300?300:(y+3)) ;yy++) {
for (xx=((x-3)<0?0:(x-3)) ; !gAnd[y][x] && xx<((x+3)>300?300:(x+3)) ;xx++) {
if (gW[y][x]) flag |= 1;
if (gR[y][x]) flag |= 2;
if (flag==3) gAnd[y][x] = 1;
}}

231:デフォルトの名無しさん
10/11/20 18:19:43
>>229
ありがとうございます。
ところで、このプログラムは、#include <math.h>と#include <time.h>を使わずにつくれますか?
できればなしのプログラムも欲しいんです。
何度も注文つけてしまってすいません。

232:211
10/11/20 18:21:31
>>230
ありがとうございます!
キレイに抽出できてますね…
ソースが難しいので頑張って解読してみます。

233:デフォルトの名無しさん
10/11/20 18:39:43
>>231
できるけどsinとかcosとかを自分で作らないといけないよ?
もともとあるものを自分で作るのは全く無意味だし
問題の本質ではないからこのままでいいんじゃない?
math.hとtime.hを使いたくない理由が分からないけど
もし習ってないとか言うバカげた理由なら考えを改めたほうがいいよ


234:デフォルトの名無しさん
10/11/20 18:39:46
>>232
スケルトンから変えたのはほぼ View の40~120行目あたりだけ。
ソースがみずらくてすまんが、やってることは大したことない。
 1.白と赤の部分だけを取り出す。gW , gR
 2.白と赤のORを作る。gOr
 3.白と赤を3ドット広げて、重なり部分を取り出す。gAnd
 4.gOrの島の中から,gAndが含まれる部分を抽出する。gMsk
おそらく君にとって、Fillだけがキモだと思うが、
gOr && gAnd を見つけたら gMsk を1にし、
その上下左右にgOrが続いていたら、xy座標を更新してFillを再起する。
最初の基点からジワーッとgOrをあぶりだしていく感じ。

235:デフォルトの名無しさん
10/11/20 18:40:32
>>231
あ、>>229は<time.h>はもう不要なので取り忘れました
<math.h>はlog()とsqrt()とsin()とcos()を呼び出すのに必要なので、
やるとすれば疑似的な発生法しかありません

それで作ってみます

236:211
10/11/20 18:49:05
>>234
スケルトンをまず知らないのでww
c言語でお願いすればよかったと後悔してます\(^o^)/

237:デフォルトの名無しさん
10/11/20 18:54:45
>>231
URLリンク(codepad.org)

floor()もsqort()も使えなくなったので、分散を求める事が出来ないので
発生した正規分布の乱数を表示するようにしました

238:デフォルトの名無しさん
10/11/20 19:52:14
糞スレ

239:デフォルトの名無しさん
10/11/20 20:21:00
>>237
無理なお願いを聞いて頂きありがとうございます。

240:デフォルトの名無しさん
10/11/20 21:09:33
>>205
ありがとうございます。
RGBTRIPLEなんて構造体があったのですね。

241:デフォルトの名無しさん
10/11/20 21:13:01
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク)
問題1
1から10までの整数の表示をするプログラムを、 do-while 文とを使用して作成しなさい。
< 実行例 >
1 2 3 4 5 6 7 8 9 10
問題2
10から1までの整数の表示をするプログラムを、 while 文を使用して作成しなさい。
< 実行例 > 
10 9 8 7 6 5 4 3 2 1
問題3
キーボードから 読み込ん だ整数が1~9の範囲内の場合は 繰返し、それ以外の場合は終了するプログラムを作成しなさ い。
< 実行例 >

整数: 8
範囲内です

整数: 3

範囲内です

整数: 11

範囲外です。

終了します。
  [3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:11月21日
[5] その他の制限: なし
よろしくお願いします。

242:デフォルトの名無しさん
10/11/20 21:43:31
>>241
URLリンク(codepad.org)

243:デフォルトの名無しさん
10/11/20 21:45:35
>>223
スレリンク(tech板:80番)

244:デフォルトの名無しさん
10/11/20 21:46:58
>>243
おいおい問題があるスレに誘導するなよ
今運営に報告してきた所だぞ

245:デフォルトの名無しさん
10/11/20 21:55:53
>>244
報告先の URL を教えてください。
回答がありしだい、誘導を停止します。

246:デフォルトの名無しさん
10/11/20 21:57:50
>>245
その前にどうして誘導するのかその理由を聞かせてくれないか?
ここが宿題スレだろうに
誘導するのなら確固とした理由が必要だろ

247:デフォルトの名無しさん
10/11/20 22:03:49
◆QZaw55cn4c本人でしょ
いいかげん他スレにちょっかい出すのやめればいいのに
自分が立てたスレに責任が持てないなら削除依頼だしてこいよ

248:デフォルトの名無しさん
10/11/20 22:05:32
と言う事で◆QZaw55cn4cは自分のスレに書き込まれた問題のみに解答しろ
このスレから誘導すんな
このスレの意味が無くなる

249:226
10/11/20 22:19:01
あまり落とす人もいないでしょうが・・・
ちょっといじるとスタックオーバーフロー起こすので消しました。>>226
一応スタックオーバーフローの暫定対策版を↓に置いときます。
URLリンク(www1.axfc.net)

250:デフォルトの名無しさん
10/11/20 22:21:48
サーバ用途じゃないツールだったら、
思う存分落とせばいいじゃん。

251:デフォルトの名無しさん
10/11/20 22:23:10
あ、サーバ用途ってのは、それ自身が動き続けることが使命になってるプログラムのことね。
ツールってのは、コマンドとして実行させて、終了とともに結果を得るもの、ってつもり。

252:デフォルトの名無しさん
10/11/21 00:34:14
言わんとするところは伝わるような気がするが、
ツールだから落ちてもいいという根拠は何も出ていない。

253:デフォルトの名無しさん
10/11/21 02:32:40
作った本人が私的に使うツールなら分かるが、
そうでなければ、あまりにも無責任

254:デフォルトの名無しさん
10/11/21 03:09:35
ソースあるんだから文句があるなら自分で直せばいいだけなのに

255:デフォルトの名無しさん
10/11/21 09:51:24
プログラミング演習の問題で
入力した名前(アルファベット)を昇順に並び変える
sort_by_nameという関数を作りたいです。
2文字目ぐらいまで判定できればいいです。
数字の昇順ならできるのでヒントだけでもください。
URLリンク(codepad.org)

256:デフォルトの名無しさん
10/11/21 10:20:54
[1] 授業単元:情報処理概論Ⅰ
[2] 問題文(含コード&リンク):
つると亀が合わせてn匹います。足の数は合わせてmです。
nとmを入力して、つると亀がそれぞれ何匹いるのか求めるプログラムを作りなさい。
もし解がない場合は、その旨を出力するようプログラムすること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [無期限]
[5] その他の制限:if、while、for、配列、多重ループ、関数まで習いました。

よろしくお願いします。

257:デフォルトの名無しさん
10/11/21 10:30:42
>>255
strncmp

258:デフォルトの名無しさん
10/11/21 10:37:01
>>255
URLリンク(codepad.org)

259:デフォルトの名無しさん
10/11/21 11:01:00
>>256
URLリンク(codepad.org)

260:255
10/11/21 11:11:06
>>257>>258
ありがとうございました!
解決しました

261:デフォルトの名無しさん
10/11/21 14:30:29
[1] 授業単元: プログラミング
[2] 問題文: 4つの整数s,m,l,xlを小さい順に並べ替えるプログラムを作成しなさい。
      ただし、並び替えをする部分はユーザ定義関数化し、
      並び替え後の結果をmain関数で出力するようにすること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限:11月23日まで

よろしくお願いしますm(__)m



262:デフォルトの名無しさん
10/11/21 14:46:04
[1] 授業単元;プログラミング演習
[2] 問題文(含コード&リンク): ・ランダムな整数列を生成し,挿入ソート・シェルソートにより
並べ替えるプログラムを作れ
・実行時間を計測せよ

[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C/C++/どちらでも可
[4] 期限:11月24日
[5] その他の制限: unixのrand()とtimeコマンドを使用すること
         mainの中もお願いします。

263:デフォルトの名無しさん
10/11/21 14:46:17
>>261
#include <stdio.h>

void swap(int *a, int *b){int temp=*a; *a=*b; *b=temp;}

void sort(int *s, int *m, int *l, int *xl){
if(*s>*m) swap(s,m); if(*s>*l) swap(s,l); if(*s>*xl)swap(s,xl);
if(*m>*l) swap(m,l); if(*m>*xl)swap(m,xl);
if(*l>*xl)swap(l,xl);
}

int main(){
int s = 4, m = -33, l = 232, xl= 83;
sort(&s, &m, &l, &xl);

printf("s = %d, m = %d, l = %d, xl = %d",s, m, l, xl);
return 0;
}

264:デフォルトの名無しさん
10/11/21 16:27:49
>>262
スレリンク(tech板:83番)

265:デフォルトの名無しさん
10/11/21 16:29:54
[1] 授業単元: 情報工学
[2] 問題文: URLリンク(www.dotup.org)
[3] 環境
 [3.1] OS: Cygwin on Windows
 [3.2] コンパイラ名とバージョン: gcc 4.3.4
 [3.3] 言語: C
[4] 期限:11月22日まで

どうか宜しくお願いします。


266:デフォルトの名無しさん
10/11/21 16:35:16
>>264
◆QZaw55cn4cの出張ウザイです

267:デフォルトの名無しさん
10/11/21 19:08:46
>>265
入力してテストってのは面倒だからやってない、入力するには5行目の #define TEST をコメントアウトしてくれ
コードの問題で化けると嫌なので出力は英語になってるので気に喰わなければ勝手に直してくれ

URLリンク(codepad.org)

268:デフォルトの名無しさん
10/11/21 19:15:22
>>222 >>227
どうもありがとうございます。
御二方のコードを参考に自分でもう一度作ってみようと思います。

269:デフォルトの名無しさん
10/11/21 19:19:16
c言語の宿題の一部なのですが
コマンドプロンプトのmoreの役割をするプログラムを作るのはどうすればいいのでしょうか?
既に出来ているテキストファイルをコマンド上に表示するだけなのですが
出来ればソースをお願いします

270:デフォルトの名無しさん
10/11/21 19:24:28
ncursesを使う

271:デフォルトの名無しさん
10/11/21 19:38:42
解決しました
ありがとうございます

272:デフォルトの名無しさん
10/11/21 19:48:22
>>267
助かりました。
これからがんばって読みます。
ありがとうございました。

273:デフォルトの名無しさん
10/11/21 21:40:07
[1] 授業単元:プログラミング
[2] 問題文
問題1.文字列を入力し、入力された文字列について、次の1~6のすべてを表示するプログラムを作
成しなさい。
1 全文字の合計文字数
2 数字の文字数
3 英大文字の文字数
4 英小文字の文字数
5 空白の文字数
6 その他の文字の文字数
ただし、
・ 下記の実行結果のように、それらの数値を表示しなさい。
・ データの読み込みは getchar 関数を使うこと。

問題2.12 個の整数を入力し、それらの 3 倍の数値を表示するプログラムを作成しなさい。
ただし、
・入力した整数は、4 行 3 列の 2 次元配列に格納しなさい。
・配列の作成と表示にはループ制御を使用すること。
・下記の実行結果になるようにしなさい。
Column1 Column2 Column3
------------------------------------
Row1 : 3 6 9
Row2 : 300 600 900
Row3 : 3000 6000 9000
Row4 : 30000 60000 90000
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C++
[4] 期限:2010/11/20
[5] その他の制限: あまり難しくないようにお願いします。
繰り返しと条件判断と配列と簡単な関数までぐらいしか授業はやっていません。

274:デフォルトの名無しさん
10/11/21 21:50:02
>>269
スレリンク(tech板:87番)

275:デフォルトの名無しさん
10/11/21 21:55:21
うぜー

276:デフォルトの名無しさん
10/11/21 23:10:03
>>259
ありがとうございました!とても助かりました!

277:デフォルトの名無しさん
10/11/22 07:46:51
>>273
問題2だけ。
URLリンク(codepad.org)

278:デフォルトの名無しさん
10/11/22 08:32:07
>>273
問題1もやってみた。
C++でgetcharってこういうことかな?
URLリンク(codepad.org)

279:デフォルトの名無しさん
10/11/22 12:53:40
>>273ですが言語はCでした;

>>277
>>278
折角やっていただいたのにすみません!;
実行してみましたができませんでした。
普通にgetchar関数を使えと言われたんですが・・・。


280:デフォルトの名無しさん
10/11/22 13:08:02
1] 授業単元: プログラミング
[2] 問題文
#include <stdio.h>
#include <string.h> /*strlenのため */

void
main( void )
{
char mojis[16]; /* 文字列を入れるための配列 */
int i;
int n; /* 'e'の数 */

printf("文字列:");
scanf("%15s", mojis );
mojis[15] = '\0';


for( i=0, n=0; mojis[i]; i++ ) /* ヌル字まで順に見ていく */
{
if( mojis[i] == 'e' ) /* 文字と文字定数との比較 */
{
n++;
}
}
printf( "文字数 %d のうち'e'は %d個", strlen(mojis ), n );
return; }
このプログラミングを改造
1.strlenを使わずに文字数をカウントする。
[3] 環境
 [3.1] OS:Windows、visual studio2005
 [3.3] 言語:C
[4] 期限:11月22日

281:デフォルトの名無しさん
10/11/22 13:16:54
>>280
#include <stdio.h>

int main( void )
{
char mojis[16]; /* 文字列を入れるための配列 */
int i;
int n; /* 'e'の数 */
int len; /* 文字の数 */

printf("文字列:");
scanf("%15s", mojis );
mojis[15] = '\0';


for( i=0, n=0, len=0; mojis[i]; i++ ) /* ヌル字まで順に見ていく */
{
len++ ;
if( mojis[i] == 'e' ) /* 文字と文字定数との比較 */
{
n++;
}
}
printf( "文字数 %d のうち'e'は %d個", len, n );
return 0 ;
}

282:デフォルトの名無しさん
10/11/22 13:34:32
iでいいだろうよw

283:デフォルトの名無しさん
10/11/22 13:40:41
>>279
書いてくれてるプログラムはC++だけど
入出力以外はCと同じだから
#include <iostream>は#include <stdio.h>
std::getchar()はgetchar()
std::cout~の行はprintf()
std::cin~の行はscanf()に置き換えれば動くと思うよ

284:mery
10/11/22 13:42:18
以前152で
1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):
無限ループを用い、1~50までの数値を任意に10個入力し、その度数分布を求めよ。但し、度数分布は5等分(例;1~10に4個, 11~20に3個, 21~30・・・41~50に0個)して表示せよ。
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:11月21日
[5] その他の制限:1~50以外の数字が入力されたときの処理は考えなくていいそうです
で書き込ませていただいた者なんですが、教えていただいた通り、打ち込んでみたのですが、実行結果がでませんでした。
なぜでしょうか?

285:デフォルトの名無しさん
10/11/22 13:47:00
>>282
iだと1引かないといけないのがなんか気持ち悪い

286:デフォルトの名無しさん
10/11/22 13:48:32
>>285
え?w

287:デフォルトの名無しさん
10/11/22 14:06:22
>>284
>>164 でうまくいきますよ。「実行結果がでませんでした」というのは、どういう状態か、もう少し詳しく教えてください。

288:デフォルトの名無しさん
10/11/22 14:09:00
一瞬で終了してるとかってオチか?

289:デフォルトの名無しさん
10/11/22 14:11:48
>>288
入力はできてるところをみると可能性はありそう

290:デフォルトの名無しさん
10/11/22 15:04:40
>>281
ありがとうございました。参考にします。

291: ◆/91kCCQXBo
10/11/22 15:04:57
>>273
URLリンク(jbbs.livedoor.jp)

292:デフォルトの名無しさん
10/11/22 15:58:58
>>283
わかりました。間違えてすみません;
ありがとうございます!

>>291
わざわざありがとうございます!


293:ごばくすみません
10/11/22 16:00:49
>>284
>以前152
>で書き込ませていただいた者なんですが、教えていただいた通り、打ち込んでみたのですが、実行結果がでませんでした。
>なぜでしょうか?

7行目>>164
i=0; を
i=0; puts("数値を入力>"); に変えてみようか?

294:デフォルトの名無しさん
10/11/22 16:47:17
[1] 授業単元: プログラミング
[2] 問題文:
変数iに100が入っています、

iとは別に、50,75,55,60というように、ランダムな数字の配列があり、
次にくる数字が前の数字(ここでは60)より、5%大きかったら、
iに1を加算するプログラムを作成。

-5%なら-1で、10%なら+2するといった感じです。5%未満なら加算しません。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限:特に無し

よろしくお願いいたします。

295:デフォルトの名無しさん
10/11/22 17:07:41
100%なら+20?

296:デフォルトの名無しさん
10/11/22 17:11:47
>>294
ランダムな数字の配列に負数とかゼロが出現する可能性はあるのかな?

297:デフォルトの名無しさん
10/11/22 17:12:03
>>295
そうです。私の頭じゃさっぱりで・・・if文の乱立しか思い浮かびません。

298:デフォルトの名無しさん
10/11/22 17:13:35
>>296
負数やゼロはなしでお願いします。
問題にはありませんが、1~100あたりの乱数が入ると思っていただければ。

299:デフォルトの名無しさん
10/11/22 17:19:56
>>294
#include <stdio.h>

int main(void)
{
int i, j;
int data[]={50, 75, 55, 60, 0};

i=100;
for(j=1;data[j]>0;j++)
{
i+=(data[j]-data[j-1])*20/data[j-1];
}
printf("i=%d\n", i);

return 0;
}

300:299
10/11/22 17:54:23
>>294
>>299 の修正
負数の割り算は気持ち悪いので
#include <stdio.h>

int main(void)
{
int i, j;
int data[]={50, 75, 55, 60, 0};

i=100;
for(j=1;data[j]>0;j++)
{
if(data[j]>data[j-1])
i+=(data[j]-data[j-1])*20/data[j-1];
else
i-=(data[j-1]-data[j])*20/data[j-1];
}
printf("i=%d\n", i);

return 0;
}

301:デフォルトの名無しさん
10/11/22 18:42:03
>>300
ありがとうございます!
こういう式がさっと出てこないんですよね・・・頭悪いのが嫌になる・・・

302:デフォルトの名無しさん
10/11/23 08:07:57
[1] 授業単元:プログラミングC言語
[2] 問題文:診断メーカー風のプログラムを作成しなさい。
      名前を入力し、その名前に基づき何かしらの情報を出力。
      .txtファイルを読み込み出力できるものにする事。
      (オプション)日替わりで表示結果を変更。複数の組み合わせなど。
[3] 環境
 [3.1] OS:Linux
 [3.3] 言語:C++
[4] 期限:2010年11月23日12:00まで

自分の頭では何をどうしていいのかさっぱりわかりません。
ヒントだけでも良いので、どうかよろしくお願いします。

303:デフォルトの名無しさん
10/11/23 08:24:05
>>302
テキストファイルの中に名前が書かれているの?

304:デフォルトの名無しさん
10/11/23 09:19:39
>>302
URLリンク(codepad.org)

305:デフォルトの名無しさん
10/11/23 09:29:08
>>302
URLリンク(codepad.org)

306:デフォルトの名無しさん
10/11/23 09:31:48
>>302
脳内メーカーみたいな物を作れって事かな?
ならば、先ずは仕様を決めることが必要だ
例えば名前の文字列を1Byteづつ評価し、0~15なら毒、16~31なら薬、32~47なら愛.....等々の評価を与える
最後に全文字が何の評価を与えたかを集計すれば、毒:M%、愛:M%、薬:O%みたいな出力を出せるだろ
txtファイルを読むというのは引数にテキストファイル名が指定された場合にはそのファイルに書かれている
名前を標準入力の変わりに使えと言う事だと思う

参考になれば幸いだ

307:デフォルトの名無しさん
10/11/23 09:44:29
>>302
#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>
unsigned str2number(std::string str){
unsigned ret=7743; // 必要ならここに日付を数値化したものを足す time(NULL)/(60*60*24) みたいに
for(unsigned i=0;i<str.length();i++) ret=ret*37+str[i];
return ret;
}
int main(void){
std::string name, buf;
std::ifstream ifs("data.txt");

std::cout << "名前を入力してください : ";
getline(std::cin, name);
srand(str2number(name));
std::cout << name << " さんの" << std::endl;
while(getline(ifs, buf)){
if(buf[0]=='#'){
std::string theme, result;
theme=buf.substr(1);
for(int i=1;getline(ifs, buf);i++){
if(buf=="") break;
if(rand()%i==0) result=buf;
}
std::cout << theme << " は " << result << " です"<< std::endl;
}
}
return 0;
}

308:307
10/11/23 09:45:47
>>307 で使用する data.txt の中身

#運勢
大吉



#ラッキーアイテム
トイレットペーパー
栓抜き
生卵
ブルーアイズホワイトドラゴン

#ラッキーカラー
透明
シルバー


309:デフォルトの名無しさん
10/11/23 09:51:16
>>305
argcのチェックを入れるべき。

310:デフォルトの名無しさん
10/11/23 14:27:43
[1]プログラミング演習
[2] 問題文:URLリンク(codepad.org)
[3] 環境
 [3.1] windows
 [3.2] visual studio2010
 [3.3] C言語
[4] 2010/11/26まで
[5]配列、関数、文字列、関数形式マクロ、再帰は習っています。
構造体、ポインタ等は習っていません。
問題文が長く改行が多すぎて書き込めなかったのでcodepaに問題文も書きましたが
問題があったら言ってください。
お願いいたします。

311:デフォルトの名無しさん
10/11/23 14:45:14
コードパッドに本文を入れるとは斬新w

312:デフォルトの名無しさん
10/11/23 15:44:22
>>310
URLリンク(codepad.org)

313:デフォルトの名無しさん
10/11/23 15:59:54
>>310です。
>>312
御回答ありがとうございます。
無事できました。有難うございます。
>>311
あ…やっぱり文章を入れる物ではなかったですか…。


314:デフォルトの名無しさん
10/11/23 17:34:14
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク)
2分法により2の平方根を計算して表示するプログラムを作れ。
解の存在範囲|xb-xa|が矛め決めた値より小さくなったら計算を停止(収束判定)するようにせよ。
*注意
(1)f(xa)とf(xb)の符号が反対であるか否かの判定法を考えよ。
(2)f(xa)とf(xb)が共に同符号になるようなxa,xbが入力された場合に対処すること。
[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:11月24日
[5] その他の制限: なし
よろしくお願いします。

315:デフォルトの名無しさん
10/11/23 20:04:09
>>314
スレリンク(tech板:118番)

316:デフォルトの名無しさん
10/11/23 20:40:27
>>314
URLリンク(codepad.org)

317:デフォルトの名無しさん
10/11/23 21:13:54
配列とファイルの読み込みです。

たとえば、100個の数字が用意されたファイルを用意します。
そのファイルを使って平均値を求めるプログラムを作りたいのですが教えてください。
ファイル名は適当で良いです。

平均値を求める計算は関数部分でお願いします。

318:デフォルトの名無しさん
10/11/23 21:20:32
>>317
をPerlでお願いします。

319:デフォルトの名無しさん
10/11/23 21:42:51
int main(void) {
system("cat temp.txt | perl -e \"while(<>){$i+=$_} print $i/100\"");
return 0;
}


320:デフォルトの名無しさん
10/11/24 00:37:03
[1] 授業単元: プログラミング基礎
[2] 問題文: n 個の整数型データ配列a[i]を、一つの関数に渡して、
      その一つの関数内で平均値と分散値を求め、main関数内で
      平均値と分散値を参照できるプログラムを作成せよ。
      ただし、配列の受渡し、結果の受け渡しにはポインタを利用すること。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:11月25日まで
[5] その他の制限:なし
宜しくお願いします。

321:デフォルトの名無しさん
10/11/24 00:57:35
>>320
#include <stdio.h>
void func( int n, int* arr, double* heikin, double* bunsan ) {
int i, sum = 0, sum2 = 0;
for( i = 0;i < n; i++ ) {
sum += arr[i];
sum2 += ( arr[i] * arr[i] );
}
*heikin = (double)sum / (double)n;
*bunsan = (double)sum2 / (double)n - *heikin;
}
int main( void ) {
int arr[] = {1,2,3,4,5};
double h, b;
func( 5, arr, &h, &b );
printf( "heikin = %lf, bunsan = %lf\n", h, b );
return 0;
}


322:デフォルトの名無しさん
10/11/24 01:03:21
>>321
*bunsanの式の右辺第二項は*heikinの二乗

323:デフォルトの名無しさん
10/11/24 01:07:57
[1] 授業単元: 数学
[2] 問題文: リーマン予想の解をアルゴリズム化して10^100桁の素数を決定的に因数分解する
   プログラムを作成せよ     
[3] 環境
 [3.1] OS:Windows、Mac
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:1月25日まで
[5] その他の制限:しらみつぶしに因数分解するプログラムは不可
宜しくお願いします。

324:デフォルトの名無しさん
10/11/24 01:08:52
>>322
そうだった
*bunsan = (double)sum2 / (double)n - *heikin * *heikin;
に修正、*が並ぶと気持ち悪いな

325:デフォルトの名無しさん
10/11/24 01:08:59
>>323
おいww

326:デフォルトの名無しさん
10/11/24 01:12:23
>>323
素数を決定的に因数分解するって?

327:デフォルトの名無しさん
10/11/24 01:13:36
>>326
俺もそれ気になってた
素因数分解って言ってないから実数でもいいのか?だとしたら無数に存在するけど


328:320
10/11/24 01:16:09
>>321>>322>>324
ありがとうございます!

329:デフォルトの名無しさん
10/11/24 01:29:50
そもそも10^100桁の数値なんてどうやって扱えばいいのか分からない
情報量として (10^100)/2.41 byte分なんてしらみつぶししようとも思わないw

330:デフォルトの名無しさん
10/11/24 01:36:40
始めたばかりで何が何だかわかりません…

[1] 授業単元:メディア基礎
[2] 問題文(含コード&リンク):数式X=[{16/(k*π)^2}^2]がある。
kが整数1~30の時のXの値をそれぞれ出力するプログラムをCで書きなさい。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日午前十時まで
[5] その他の制限: 特に無いと思います。

よろしくお願いしますorz

331:デフォルトの名無しさん
10/11/24 01:39:43
素因数分解って素数に対してはそれ自身が素因数分解された結果だよな
だとしたら与えられた素数をそのまま出力するだけで終了じゃね?

332:デフォルトの名無しさん
10/11/24 01:47:23
[1] 授業単元: 数学
[2] 問題文: リーマン予想の解をアルゴリズム化して10^100桁の合成数を決定的に因数分解する
   プログラムを作成せよ     
[3] 環境
 [3.1] OS:Windows、Mac
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:1月25日まで
[5] その他の制限:しらみつぶしに因数分解するプログラムは不可
宜しくお願いします。

333:デフォルトの名無しさん
10/11/24 01:56:14
サラリーマンの人、やってみようか?

334:デフォルトの名無しさん
10/11/24 01:59:44
>>330

#include <stdio.h>

int main(void)
{
int i, k;
double PI = 3.14159265358979323846;

for(k = 1; k <= 30; k++) {
double t = 4 / (PI * k);
for(i = 0; i < 2; i++) t *= t;
printf("k = %d X = %f\n", k, t);
}

return 0;
}

335:デフォルトの名無しさん
10/11/24 02:01:19
>>330
URLリンク(codepad.org)

336:デフォルトの名無しさん
10/11/24 02:05:09
>>332
URLリンク(codepad.org)

337:デフォルトの名無しさん
10/11/24 02:06:41
リーマン予想なんて解明されていないのに、もう解いたのか。
ノーベル科学賞でも受賞できんじゃね?w

338:デフォルトの名無しさん
10/11/24 02:10:26
アンカー見て、誰も返信なかったから貼ったけど。
俺がアンカーミスってたとは・・・

339:デフォルトの名無しさん
10/11/24 02:12:22
>>337
数学にノーベル賞は無い

340:デフォルトの名無しさん
10/11/24 02:13:26
2^100ならいいけど10^100はちょっとやる気しないなぁ

341:デフォルトの名無しさん
10/11/24 02:21:44
>>334
ありがとうございます!
ほんとうに助かりました!

342:デフォルトの名無しさん
10/11/24 02:27:07
>>339
数学が無いことくらい知っているから敢えて 科学 の面で言ってみたんだが・・・

343:デフォルトの名無しさん
10/11/24 02:29:04
科学も 化学 を文字ってネタで言ったまでw

344:デフォルトの名無しさん
10/11/24 02:30:42
>>335
ありがとうございます!
あわせて参考にさせていただきます!

345:デフォルトの名無しさん
10/11/24 02:33:21
数学にノーベル賞は無いっておかしくね?

346:デフォルトの名無しさん
10/11/24 02:51:54
>>345
ノーベルが数学が苦手だったからだと
代わりにフィールズ賞がある

347:デフォルトの名無しさん
10/11/24 04:03:19
リーマン予想には賞金もかかってるよ

348:デフォルトの名無しさん
10/11/24 18:55:55
[1] 授業単元: プログラミング
[2] 問題文:たとえば、100個の数字が用意されたファイルを用意します。
そのファイルを使って平均値を求めるプログラムを作りたいのですが教えてください。
ファイル名は適当で良いです。

平均値を求める計算は関数部分でお願いします。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:11月27日まで
[5] その他の制限:なし
お願いします。


349:デフォルトの名無しさん
10/11/24 19:13:55
>>348
スレリンク(tech板:120番)

350:デフォルトの名無しさん
10/11/24 19:21:06
簡単な問題に必死だな
巣にこもってろ出てくるなよ、ゴミが

351:デフォルトの名無しさん
10/11/24 19:33:53
>>349
◆QZaw55cn4c
>たとえば、100個の数字が用意された
たとえば付くから、これは例を言っている(可能性ある)から数字の個数の100個は変化する可能性ある
と読み取れない?

352:デフォルトの名無しさん
10/11/24 20:06:55
>>351
1) #define N 100 と#define で記述して、コンパイル時に簡単に変えることができるようにしています。
2) 個数が仮に N より少ないデータだったとしても、正常に動くようにしています。
すなわち #define N 100 とした場合に対して、実際にはデータの個数が 5 であってもOKです。

100 を無視することも可能ではありましたが、平均を求める関数を準備する、という点を優先し、
一次近似として「データ数が100」を尊重いたしました。

>>348
問題があればコメントを下さい。随時変更いたします。

353:デフォルトの名無しさん
10/11/24 20:08:27
いいから出てくるなって

354:デフォルトの名無しさん
10/11/24 20:17:34
こんな入門レベルのものはやりたくないみたいなこと言ってたのになw

355:デフォルトの名無しさん
10/11/24 20:21:13
>>352 ◆QZaw55cn4c
いや、ここのスレでやり取りするなよ、自分のスレでやれ
スレチガイならともかく他所のスレのを無理やり横取りするなよ
お前、道徳的に最低ことしていると認識ないだろ



356:デフォルトの名無しさん
10/11/24 20:32:06
>>355
にちゃんねるで「道徳的」といわれても。

357: ◆EkRIf9bJPo
10/11/24 20:32:07

[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
-------------------
/*hogehoge*/
int main(){/*ggg*/
printf("xxxxxx");
}
int a=c;
-------------------
上記のソース総ステップ数5ステップ、実ステップ数3ステップ、
コメント率40%が求められるステップカウンターを作製せよ。
また、以下の条件を提示する。
1.ディレクトリ単位で読み込めるようにする。
2.Cファイルのみのステップ数を求めるようにする。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc 4.3.4
 [3.3] 言語: C
[4] 期限: 2010年11月25日9:00
[5] その他の制限: なし
よろしくお願いします。



358:デフォルトの名無しさん
10/11/24 20:37:13
◆QZaw55cn4c
当然、>>357も横取りするんだろ

359:デフォルトの名無しさん
10/11/24 20:42:46
>>358
お客様としてお待ちしようかと。
でも期限が厳しいですね。

360:デフォルトの名無しさん
10/11/24 21:11:48
>>357
ディレクトリ指定も可能って事はサブディレクトリも再帰的に捜査するんだよね
まぁ500円くらいなら払う価値は有る問題だと思うよ

総ステップは行数だと思うけど実ステップってのは?
if( x ) {
  i = a + b
    + c + d;
}
これは何ステップ?
コメント率は ( "/*", "*/",  "//" を含むコメント文字数 ) / (総文字数) の事?
その場合は改行コードは計算に入れるの?
この辺は詰める必要があるね

361:デフォルトの名無しさん
10/11/24 21:21:56
>>357
カンマ演算子の扱いとか、do while とかどうする?

362:デフォルトの名無しさん
10/11/24 21:28:43
>>357
実ステップは4行になりそうだけど。

363: ◆EkRIf9bJPo
10/11/24 21:40:11
>>360

そうです。サブディレクトリを読み込みます。
実ステップは、コメントのみの行、行区切りだけの行をはずした行数です。
なので、例に出されたソースの実ステップは、3ステップになります。

コメント率に関しては、特に条件が記載されてないです…
コメントが記載されている行/全行のことだと解釈しています。
改行コードについても記載がないので、計算には入れることは、考えてないです。

364: ◆EkRIf9bJPo
10/11/24 21:48:48
>>361

すみません。どうするってどういう意味ですか?

>>362

問題文がそうだったので…

365:デフォルトの名無しさん
10/11/24 22:57:27
>>356
2chを楯に自分の糞さから逃げてないか?

366:デフォルトの名無しさん
10/11/24 23:06:24
>>363
判定条件はこうかな
コメント外部にアルファベット、数字、記号({}を除く)が出現したら実ステップ行(*1)
コメントが入っている業はコメント行(*2)
当然、*1 でかつ *2 の行も存在する

例えば#if 0 ~ #endif の間は無効な行だけどこれも実ステップ行扱いで良いんだろうな、さもないと判定が難しすぎる

367:デフォルトの名無しさん
10/11/24 23:07:06
反論してる人もこっちでやってくれんかな。
スレリンク(tech板)
◆QZaw55cn4cもこのスレでそういう論議しなければ俺はかまわん。
このスレのそういうレスは双方無視の方向で。

368:デフォルトの名無しさん
10/11/24 23:18:41
>>364
たとえば
a++,b++;
は1ステップか、それとも2ステップか
式は一つだから1ステップでいいとはおもうけど

do{
func();
}while();
は2ステップなのか3ステップなのか
doがなんかするわけじゃないから2ステップでいいのか?

あと、;だけの行はステップとして数えるのか?

369: ◆QZaw55cn4c
10/11/24 23:31:10
>>357
>>363
途中ですが、コードを示します。使い方は、
./a.out Cプログラムファイル
です。

>>357 に例示されたコード例が指定どおりの数字を出す、という点だけで仕様を勝手にきめました。
大方は、>>366 にしたがっています。
これにいろいろ食わせてみて問題があるようであれば指摘ください。
途中ゆえデバッグコードを多数含みますことご容赦を。
URLリンク(codepad.org)

xmalloc() -> malloc()
xfree() -> free()
xrealloc() -> realloc()
に読み替えてください。

370: ◆1reJfOTbE.
10/11/24 23:35:18
URLリンク(www.icsd3.tj.chiba-u.jp)
[1] 授業単元:プログラミング実験
[2] URLリンク(www.icsd3.tj.chiba-u.jp)
  ここの第2回の課題です。
[3] 環境
 [3.1] OS:WindowsXPでコマンドプロンプトやMeadowなどを使っています。
 [3.2] gcc
 [3.3] C
[4] 期限:11/26の18:00
[5] その他の制限:特にないと思います。
第1回に比べて急に難しくなったように思え、困っています。
とりあえず課題が何をどうすればよいかわかりません。
手順を教えていただきたいです。よろしくお願いします。

371: ◆EkRIf9bJPo
10/11/24 23:36:00
>>363

その判定条件で大丈夫です。
#if0~#endifも実ステップ行扱いで良いと思います。

>>368

特にカンマ演算子と、do whileについて何も条件が出されてないので、>>663さんが提示した判断条件でお願いします。


372:デフォルトの名無しさん
10/11/24 23:40:32
>>369
printf("xxx/*nocomment*/xxx");

373:デフォルトの名無しさん
10/11/24 23:54:48
>>357
>>372
URLリンク(codepad.org)
これ以上複雑になれば、今のコードは捨てて状態遷移(オートマトン)で書き直すことを検討します。限界です。

374:デフォルトの名無しさん
10/11/24 23:58:24
>>373
問題が結構いい加減だから、都合のいいように解釈すればよいと思う。

375: ◆EkRIf9bJPo
10/11/24 23:58:29
>>369

ありがとうございます!
早速、デバッグを行なったところ、以下のエラーが表示されました。

1.c:8: error: conflicting types for ‘getline’
/usr/include/sys/stdio.h:37: error: previous declaration of ‘getline’ was here
よろしくお願いします。

376:デフォルトの名無しさん
10/11/25 00:00:43
getlineって◆QZaw55cn4cじゃないかw

377:デフォルトの名無しさん
10/11/25 00:08:00
>>373
/* "A" */

今のロジックだと /* と " のどちらかを優先しなければならないから限界みたいだね

378: ◆QZaw55cn4c
10/11/25 00:08:29
>>357
>>375
URLリンク(codepad.org)

>>376
じゃあトリップつけときますか。

379:デフォルトの名無しさん
10/11/25 00:09:38
つけなくていいよ

380:デフォルトの名無しさん
10/11/25 00:14:07
>>377
そのようですね。
このコード>>378 は捨てましょう。

>>375
このロジックでよければ、ディレクトリを掘るコードをつけます、といっても明日があるので今日はおしまい。
期限を見直してください。あと >>2 をよろしく。

381:377
10/11/25 00:15:40
>>373
間違えた、駄目なのはこんなケース

printf( "/* a */" );
/* "a */
printf( "/* a */" );

改行で終わらない行は無視してるみたいだけどそんな必要有るのかな

382:デフォルトの名無しさん
10/11/25 00:24:35
ありゃ、テレビ見てたら盛り上がってるな。
乗り遅れたし、明日早いし。寝るくぁ。

383:デフォルトの名無しさん
10/11/25 01:07:35
>>370
非常に丁寧な教材ですね。
難しいところを素直に先生に聞いてみるのはいかが?

このスレは回答を提示することで若い芽を摘み取る非情な場所であることをお忘れなく。

384:デフォルトの名無しさん
10/11/25 01:12:23
>>383
ワロスw
確かにその通りかもw

385:デフォルトの名無しさん
10/11/25 01:48:20
>>370
dequeだけ作っといた
フィルタは気が向いたらやるかも
URLリンク(codepad.org)

386:デフォルトの名無しさん
10/11/25 01:52:12
>>370の講義資料より引用
『インターネット上に匿名で書かれた情報は信じるな!!』

387:デフォルトの名無しさん
10/11/25 01:56:29
信じるな!とは言い過ぎだが利用は自己責任で、って位が落としどころかな

388:デフォルトの名無しさん
10/11/25 02:21:45
>>370
多分デジタルディレイの実装ではないかと思われる
queue.c はFifoリングバッファだろう
Fir_p.c のメインループ内では以下を行うんだろうな

for( ディレイ時間分ループ )
 enqueue( 0 );

while(入力ファイルから short 一つを x に読み込む) {
  enqueue( x );
 y = dequeue()
 x に y を重み付き加算
 出力ファイルに x を書き込む
}

これでシングルディレイが付加された音声データ(wavファイル)が作成できるだろう
Fifo リングバッファをマルチインスタンスに修正し複数のリングバッファを使用すれば多段ディレイも作成できる
また enqueue( x ); の位置を加算後に持っていけば減衰率によっては自然な残響を得られるかも知れない


389:デフォルトの名無しさん
10/11/25 03:32:08
>>385
修正
URLリンク(codepad.org)


390:デフォルトの名無しさん
10/11/25 05:03:09
話が繋がっていかない課題やレポートはつまらないけど
各論へのイントロになってる課題は面白いと思う

391:デフォルトの名無しさん
10/11/25 11:59:14
[1] 授業単元:プログラミング実験
[2]1~30の整数の範囲で、3辺a, b, c(cを斜辺)の三角形のうち、直角三角形が成立する場合のa,b,c辺をすべて見つけて配列
に入れる。その後、配列をもとにプログラムを作成しなさい。
ただし、a, b, c辺を見つけて配列に入れる機能は関数にすること。
[3] 環境
 [3.1] OS:linux
 [3.2] gcc
 [3.3] C
[4] 期限:11/25
[5] その他の制限:
よろしくお願いします。

392:デフォルトの名無しさん
10/11/25 12:01:44
>>391ですが、このプログラムをもとにして作っていただけますか

#include<stdio.h>
#define N 30
int main(void)
{
int a,b,c;
int p[N][3];
int n;
n = 0;
for(a=1;a<=N;a++){
for(b=a;b<=N;b++){
for(c=b;c<=N;c++){
if(a*a + b*b == c*c){
p[n][0] = a;
p[n][1] = b;
p[n][2] = c;
n = n + 1;
}
}
}


393:デフォルトの名無しさん
10/11/25 12:33:21
>>391
問題読むと直角三角形が成立する辺を配列に入れた後何かするようだけど
配列に入れて表示するプログラム?

394:デフォルトの名無しさん
10/11/25 13:13:35
>>393
多分そうだと思います

395:デフォルトの名無しさん
10/11/25 13:18:29
すみません>>391の問題文に追加です;

a <= b <= cを仮定してください。

396:デフォルトの名無しさん
10/11/25 13:26:39
for(a=1;a<=N;a++){
for(b=a;b<=N;b++){
for(c=b;c<=N;c++){
の時点でa <= b <= cを満たしてるはずなのに更に仮定するの?

397:デフォルトの名無しさん
10/11/25 13:31:59
>>396
その部分をいじるなってことだろ

398:デフォルトの名無しさん
10/11/25 13:36:13
>>391
#include <stdio.h>

#define N 30

int f(int p[][3], int size) {

int a, b, c, n = 0;

for(a = 1; a <= size; a++) {
for(b = a; b <= size; b++) {
for(c = b; c <= size; c++) {
if(a * a + b * b == c * c) {
p[n][0] = a;
p[n][1] = b;
p[n][2] = c;
n = n + 1;
}}}}
return n;
}

int main(void)
{
int p[N][3], i, n;

n = f(p, N);

for(i = 0; i < n; i++) printf("%d %d %d\n", p[i][0], p[i][1], p[i][2]);

return 0;
}

399:デフォルトの名無しさん
10/11/25 13:36:48
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):整数型1次元配列に対して平均値を計算する関数を書き、
{1, 4, 2, 8, 1, 5} の平均値 3.5 を求めよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:cygwin
 [3.3] 言語: C++
[4] 期限:2010 11/27
[5] その他の制限:int型からdouble型に書き換えるとのこと、すいません。ここからしてあまり理解できていません。

400:デフォルトの名無しさん
10/11/25 13:45:06
>>399
URLリンク(codepad.org)

401:デフォルトの名無しさん
10/11/25 14:06:24
>>399
こんなんしたらさすがに怒られるかな?

#include <iostream>
#include <numeric>

int main()
{
int a[] = {1, 4, 2, 8, 1, 5};
size_t SIZE = sizeof(a) / sizeof(a[0]);

double ave = std::accumulate(a, a + SIZE, 0.0) / SIZE;

std::cout << ave << std::endl;
}

402:370 ◆1reJfOTbE.
10/11/25 16:05:56
>>385-389
課題3-1ですが、作っていただいたコードで、コマンドプロンプトで
gcc -Wall -c queue.c
とやって、queue.oが作られました。
この課題は後、
gcc -Wall -o FIR_P FIR_P.c queue.o
とやれば完了でよいのでしょうか?

そして>>388の中身がわかる方いませんか?

分割コンパイルというものは理解できたと思うのですが、
最初の式の説明のところからやっていることがまだ理解できていなく、
どうすればいいかわかりません。

それと関連プログラム4種類をダウンロードと書いてありますが、
Makefileに関しては講義資料22ページの説明が出てきますが、
ダウンロードができません。コピーしてテキストファイルとして
保存ということでしょうか?

403:デフォルトの名無しさん
10/11/25 16:30:35
Makefileは拡張子の部分消して
関連ファイルと同じところに保存して
% makeかな?でまとめてコンパイルしてくれる
追加したファイルもMakefileに追加すればそれもコンパイルできる

404:デフォルトの名無しさん
10/11/25 16:43:08
>>402 が解らないのは
C言語
実験のデジタルフィルタ
の両方なの? 
デジタルフィルタは理解できるがC言語は駄目とか?

405: ◆L.eSCJEwZk
10/11/25 16:48:34
>>404
デジタルフィルタは、講義資料を見ていますがまだ理解できていません。
C言語はできるつもりでしたが、>>388の日本語で書いた部分をやろうと
思ったのですがどうすればよいかわかりませんでした。
基礎はできると思うのですが、ファイルのオープンなどでてくると
危ないです。

406: ◆1reJfOTbE.
10/11/25 16:49:17
↑トリップ間違いました、自分で間違いないです。

407:デフォルトの名無しさん
10/11/25 17:28:53
1回目の課題もファイル操作でてるけど
そっちがわかったならこっちもたぶんコードわかると思うんだけど
>>388の日本語で書いてある部分のどこがわからないのかな?

408:388
10/11/25 18:09:56
>>405
変数名を直して一部加筆

short int y;
for( ディレイ時間分ループ )  ←*1
 enqueue( 0 ); 
while(入力ファイルから short 一つを data に読み込む) {  ←現行のソースに有る
  enqueue( data );
 y = dequeue() 
 data に y を重み付き加算 ← *2
 出力ファイルに data を書き込む ←現行のソースに有る 
} 
つまり君が書くべきは *1 と *2 だけなんだけどな

ディレイ時間は argv[1] で与えられる delay だ、これがどんな単位で与えられるか又、サンプリングレートが幾らか不明なので
必要なループ回数が判らない
例えば delay の単位がmsecでサンプリングレートが20msec なら必要なループ回数はdelay / 20 という事になる

重みは argv[2] で与えられる weight だ、これも%で与えられるのか小数で与えられるのか判らないけど小数で与えられるなら *2 は
data += (short int)( (double)y * weight );
となる

>>383 が書いた様に、若い芽を摘み取りたくなかったので抽象的な表現を行ったのだけど伝わらないなら仕方がないだろう


409:デフォルトの名無しさん
10/11/25 18:25:20
[1] 授業単元: プログラミングおよび演習
[2] 問題文(含コード&リンク):
1.解答例のカレンダー(下にリンクはってます)について、dayofweek()を再帰で書き直せ。
 ◦ある月の1日の曜日は、前の月の日数と1日の曜日から計算できる
◦ある年の1月1日の曜日は、前の年の日数と前の年の1月1日の曜日から、あるいは、その年の日数と次の年の1月1日の曜日から計算できる
◦2000年1月1日は土曜日である

2.このプログラムについて、任意の年月についてdayofweek() の呼び出し回数が何回になるかを理論的に考察せよ。また、呼び出し回数を計測し、結果が実際に理論と合致しているかを確認せよ。
2.ヒント:呼出し回数を数えるためにグローバル変数を使用する

[3] 環境
 [3.1] OS: Windows
 [3.2] gcc
 [3.3] C
[4][2010年12月1日08:45まで]
[5]現在再起を習ったばかりで複雑なものは習っていません。

解答例のカレンダー↓
URLリンク(codepad.org)


410:389
10/11/25 19:02:18
>>405
ファイルのオープンなんかより生ポインタのが千倍危ないんだけどね
URLリンク(codepad.org)

411:デフォルトの名無しさん
10/11/25 19:48:02
>>410
元データを weight 分減少させる必要は無いと思うよ


412:デフォルトの名無しさん
10/11/25 20:46:57
>>409
再帰?謎過ぎる問題だな

413: ◆EkRIf9bJPo
10/11/25 20:47:26
>>375です。

期限直しました。
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
-------------------
/*hogehoge*/
int main(){/*ggg*/
printf("xxxxxx");
}
int a=c;
-------------------
上記のソース総ステップ数5ステップ、実ステップ数3ステップ、
コメント率40%が求められるステップカウンターを作製せよ。
また、以下の条件を提示する。
1.ディレクトリ単位で読み込めるようにする。
2.Cファイルのみのステップ数を求めるようにする。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc 4.3.4
 [3.3] 言語: C
[4] 期限: 2010年11月27日9:00
[5] その他の制限: なし


414:デフォルトの名無しさん
10/11/25 20:49:02
>>408

波形データ a[123]={~~~~~~~~~~~};
波形データ b[123];

今が、1から123の間、くりかえし

    b[今] =
        a[今] ・ 係数今用 +
        a[1こ過去] ・ 係数過去用1 +
        a[2こ過去] ・ 係数過去用2 +
        a[3こ過去] ・ 係数過去用3 +
        .
        .
        .
    
    今++;


ってやると、できあがる波形データ b が、
もんもんした音になったり、キラキラした音になったり、シャリシャリした音になったり、音質が変わっておもしろい。ってことじゃないかしら? ようするに。 はて?

すごい単純だけど、たとえば単純に
b[今] = a[今] + a[1こ過去]
ってやるだけでも、波形が、こもった感じの音に変化したりして、おもしろいですよね。ふしぎ~♪


415:デフォルトの名無しさん
10/11/25 20:52:33
>>414
そう。単に過去のデータを足しこむだけで、いろんな特性を持つ回路(フィルタなど)になるのです。
z 変換またはラプラス変換でググッてくだしゃあ。

416:デフォルトの名無しさん
10/11/25 20:59:12
>>409
何か汚いけど・・まあいいや
URLリンク(codepad.org)
URLリンク(www5a.biglobe.ne.jp)

417:デフォルトの名無しさん
10/11/25 21:00:50
>>416
表示直した
URLリンク(codepad.org)

418: ◆EkRIf9bJPo
10/11/25 21:02:30
>>380

大変申し訳ないのですが、読んでもロジックがわからなかったので自分で作りました。

URLリンク(codepad.org)


URLリンク(www.play21.jp)

上記のサイトを参考にしました。

方法3 コメントを削除したファイルを中間ファイルとして保存し、再度読み込み、行数を数える方法を行いました。

残っている課題が二つあります。

・ディレクトリ指定してCファイルを求める。
・コメント率を算出する。


大変、勝手なことだと思いますがこのソースをベースに作製お願いします。

419:409
10/11/25 21:15:23
>>412
なんかしたに張り付けてあるリンクのものを再起を使用して書き直すみたいです。
もうすこしコンパクトになるとか・・・
課題2はよくわかりません。

>>416
>>417
すみません。
再起はどこでどういう風に使用したらいいのでしょう?


420:409
10/11/25 21:18:32
>>409
for のところを再起にやればいいとかなんたら・・・・。

421:416
10/11/25 21:36:54
>>409
自分の定義に自分と同じ構造を持つ構造は再帰的に定義できる

さっきの例なら、ある月の一日の曜日は前の月の一日の曜日で求められる
前の月の一日はそのまた前の一日の曜日で
そのまた前も・・・ってな感じでずっと続く
ある状況で特殊化すればそこで再帰は終了する
さっきのなら2000年の1月で特殊化した

422:416
10/11/25 21:42:00
>>409
ついでにちょっと整理しといた
URLリンク(codepad.org)

423:デフォルトの名無しさん
10/11/25 22:04:51
カレンダー(カレンダー)C言語のソースが
2ちゃんのスレに書き込まれるぅ~♪

カレンダー(カレンダー)過ぎ行く時の中で
俺はソースを書いて彷徨うんだろう♪

424:409
10/11/25 22:12:19
みなさんありがとうございます。
recurse
みたいなコード?は使わないのでしょうか?
あと漸か式を考えたりなど・・・
よくわからない質問をしてしまってばっかりですみません><

425:デフォルトの名無しさん
10/11/25 22:35:14
recurse って再び呪うのか?

426:370 ◆1reJfOTbE.
10/11/25 22:54:27
ご解答いただいている方、本当にありがとうございます。

今日学校でレポートをすこしずつ進めていたのですが、
学校のパソコンや携帯では書き込みができなく、自宅のパソコンでは
環境が整っていなく実験ができないので、今のうちにやることを
把握しておいて明日学校に行ったらレポートを一気にやりたいと思って
います。なので、残りやるべきことを把握したいと思います。

課題3-1は、FIR_P.cとqueue.cを作っていただいたのでおkですが、
課題3-1(続)に、queue.c, FIR_P.c, FIR_N.c, IIR_P.c, IIR_N.cを実装せよ
とのことですが、これは3-1で作ったので終わりではないということですよね。
それに、FIR_N, IIR_P, IIR_Nという名前は初めて出てきたのですが、
これはFIR_P.cを書き換えてそれぞれの名前で保存しろということでしょうか?

プラスMakefileの修正ができれば、課題3-2以降はその作ったプログラムを
使って実行→聞いてみて考察~などでできると思いますので
よろしくお願いします。

427:デフォルトの名無しさん
10/11/25 23:14:03
[1] 授業単元:アルゴリズムとデータ構造
[2] 問題文(含コード&リンク):入力された2分木を中央順で走査するプログラムを
              再帰を使わずに書け。
自分で書いたプログラム
main.c  URLリンク(codepad.org)
STACK1.c URLリンク(codepad.org)
STACK2.c URLリンク(codepad.org)
Item1.h URLリンク(codepad.org)
Item2.h URLリンク(codepad.org)
STACK1.h URLリンク(codepad.org)
STACK2.h URLリンク(codepad.org)   
上三つをコンパイルして実行します。
コンパイルは通りますが、実行でsegmentation fault がでてしまいます。
main.cの最後のwhile文のところを修正していただけないでしょうか。
お願いします。
[3] 環境
 [3.1] OS: macosX
 [3.2] gcc
 [3.3] 言語: C
[4] 期限: 明日の午後一時まで。
[5] その他の制限:とくになし。

428:デフォルトの名無しさん
10/11/25 23:15:49
>>426
FIRが遅延時間前の入力信号を加算するのに対し、IIRは遅延時間前の出力信号を加算するものの様だ
ならば、FIRの encueue() するタイミングを加算後に移動させれば IIR になるのではと思う
PとNはポジとネガの意味かな?ならばNは重み付け加算を重み付け減算にすれば良いのだろうか?

429: ◆QZaw55cn4c
10/11/25 23:17:17
>>357
>>413
とりあえず動くものをあげときます。
URLリンク(codepad.org)

430:デフォルトの名無しさん
10/11/25 23:29:39
>>418
字句解析は作った人以外には理解が極めて困難、という面があります。
>>378>>429 も人に理解していただくような努力を微塵もしなかったことは申し訳ない。
本当に正確なものを作るのなら(そして人に理解していただくようにするのなら)、全然別のアプローチ(たとえば状態遷移でとらえるなど)をとらなければならないことは自覚しておりましたが、手が先に動いてしまいました。
(なお、>>429>>378 よりもちょっとだけ精度がよくなっております。)

というわけで >>418 を追いかける余裕がありません。すみません。



431:デフォルトの名無しさん
10/11/25 23:42:02
>>427
嫌がらせみたいに汚いコードだな、無意味な typedef とか控えろよ

問題なのは while() 内で1回pop()、3回push() を行っている事にあるんじゃないかな
必然的にスタックは2つづつ増えるから最初に確保した領域をはみ出して segmentation fault となる
そもそも push() には確保した領域をはみ出さないかのチェックが必要だが実装されていないし
何をしたいのか不明なコードだけど、毎ループで pop() されるのは head と 1 で head と 1 が3回push() される
当然、無限ループとなり segmentation fault で終わるプログラムだな

432:デフォルトの名無しさん
10/11/25 23:59:54
[1] 授業単元: 情報処理概論Ⅰ
[2] 問題文(含コード&リンク):
大、中、小の3 個のさいころを同時にふった時、出た目の和がm になるような目の出方をすべて求めるプログラムを作りなさい。
ただし、m の値はキーボードから入力するものとする。表示を工夫して見やすい出力にすること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [無期限]
[5] その他の制限: if、while、for、配列、多重ループ、関数まで既習です。

よろしくお願いします!


433:デフォルトの名無しさん
10/11/26 00:07:30
>>432
さいころは6面でいい?
負数の扱いは?

434:デフォルトの名無しさん
10/11/26 00:09:08
こまけぇこたぁ~良いんだよ、それなりのものが出来れば

435:デフォルトの名無しさん
10/11/26 00:16:21
>>431
適切なアドバイスどうもありがとうございます。
間違っていいたところも直せ、理解も深まりました。
ほんとうにありがとうございますm(_ _)m


436:デフォルトの名無しさん
10/11/26 00:18:52
>>432
#include<stdio.h>

#define MAX(a, b) ((a)>(b)?(a):(b))
#define MIN(a, b) ((a)<(b)?(a):(b))

int main(void)
{
int i_min, i_max, j_min, j_max, i, j, k;
int m=0;

printf("m を入力してください : ");
scanf("%d", &m);

i_min=MAX(1, m-12);
i_max=MIN(6, m-2);
for(i=i_min;i<=i_max;i++)
{
j_min=MAX(1, m-i-6);
j_max=MIN(6, m-i-1);
for(j=j_min;j<=j_max;j++)
{
k=m-i-j;
printf("大:%d 中:%d 小:%d\n", i, j, k);
}
}

return 0;
}

437:デフォルトの名無しさん
10/11/26 01:11:03
>>432
>表示を工夫して見やすい出力にすること。
ということで>>436みたいな効率化は図っていない
URLリンク(ideone.com)


438:デフォルトの名無しさん
10/11/26 02:05:41
>>432
URLリンク(codepad.org)

いちまん回さいころふって、なにがでるかしらべてみて、しらべる☆ ためしてガッテンたいぷ♪
たまにまちがえちゃうけど、気にスンナ!


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