1 :
デフォルトの名無しさん :
2005/11/16(水) 10:03:12 BE:605894988-
3 :
デフォルトの名無しさん :2005/11/16(水) 10:45:10
学校の宿題です。私の力では解けないのでよろしくおねがいします。 forを使用してください。 ・キーボードから実数を5個入力し,その入力データのうち, 3つのデータから実数の平均値を求めよ. 求める平均は最初のデータから3個分, 次のデータから3個分と順次3個のデータとする.(下図参照) ・入力データは配列に入れること. ・ 出力は全部で3個となる. ・ 入力データ(sample) 1.1 1.2 1.3 1.4 1.5 よろしくお願いします 例えば1 2 3 4 5 と入れると,1 2 3の平均と,2 3 4と3 4 5のへいきんが 順に 2 3 4とひょうじされます。 初心者っぽくおねがいします
>>3 なのに
>>1 が読めないのはメクラですか?
--- ここから ---
#include <stdio.h>
int main(void){double data[5], sum;int i, j;for( i = 0 ; i < 5 ; i++ ) scanf("%lf", &data[i]);for( i = 0 ; i < 3 ; i++ ) {sum = 0.0;for( j = 0 ; j < 3 ; j++ ) sum += data[i + j];printf("%f ", sum / 3);}printf("\n");return 0;}
--- ここまで ---
printf("\n");なんて初心者っぽさ抜群だろ。
double a, b, c, d, e; scanf("%lf %lf %lf %lf %lf", &a, &b, &c, &d, &e); printf("%f %f %f\n", (a + b + c) / 3.0, (b + c + d) / 3.0, (c + d + e) / 3.0); 素直すぎるか。
while(strcmp(a,A[j-h].str)<0 && j-h>=0){ ↓ while(j-h>=0 && strcmp(a,A[j-h].str)<0){ かなぁ?わからんけど。
8 :
デフォルトの名無しさん :2005/11/16(水) 12:11:45
double[] a=new double[5]; for(int i=0;i<a.length;i++){ System.out.println("数値入力"+(i+1)+"回目>"); a[i]=Double.parseDouble(buf.readLine()); } for(int i=0;i<a.length-2;i++){ double sum=a[i]; for(int j=i+1;j<i+3;j++){ sum=sum+a[j]; } System.out.print(sum/3+" "); }
10 :
デフォルトの名無しさん :2005/11/16(水) 12:18:34
if(
>>9 ==turaremakuri) System.out.print("ネタにマジレスカコワルイ");
else System.out.print("ウンコー");
おい!
>>6 勝手になりすましてんじゃねぇよ!
しかも、俺のテンプレどころかプログラムまでそのまま使おうとしてるし…
まぁ、俺は自分で解決できたから良いけどね。がんばって
ついでに
>>3 もやってみた
#include<stdio.h>
main(){
double data[5];
double ave;
int i,j;
for(i=0;i<5;i++) scanf("%lf",&data[i]);
for(i=0;i<3;i++){
ave=0;
for(j=i;j<i+3;j++) ave+=data[j];
printf("%f ",ave/3.0);
}
}
[1] 授業単元:オブジェクト指向言語 [2] 問題文:キーボードから入力されたファイル名のファイルを開き その内容をそのまま表示するプログラムを作りなさい [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] 言語:C言語 [4] 期限: 11月17日9時まで すいません、何卒よろしくお願いします。
>>13 #include <stdio.h>
int main(void) {
char s[256];
int c;
FILE* fp;
scanf("%255s", s);
fp = fopen(s, "r");
while ((c = fgetc(fp)) != EOF) putchar(c);
fclose(fp);
return 0;
}
>>13 オブジェクト指向言語という授業で、11月も半ば既に半分終ってるのに
出てきた課題に激しく吹いた。
[1] 授業単元:プログラミングⅡ [2] 問題文(含コード&リンク):下記 [3] 環境 [3.1] OS: UNIX [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月17日まで [5] その他の制限: stdio.h、string.h、stdlib.hは可 標準入力から読み込んだ文字列に対し,ランレングス符号化を行うプログラムを作成せよ. ランレングス符号化とは,データ内における同記号の列を,その記号と数値で置き換えることで情報圧縮を行う技術のことである. 例えば, aaaaabbbccdddda の入力に対し, a5b3c2d4a1 と出力する. //----------解答の最初---------- (* ここに解答を書き加える *) int main(void){ char buf_r[1024] = {0}; char buf_w[1024] = {0}; int length; printf("文字列の入力\n"); scanf("%s",buf_r); runlength(1024,buf_r,buf_w); printf("[ランレングス符号化]\n%s\n",buf_w); return(0); } //----------解答の終わり---------- どなたか教えてください。お願いします。
[1] 授業単元:プログラミング論 [2] 問題文(含コード&リンク): 県名、人口、面積が一行に書かれている。 これを10行分読み込んで県名、人口、面積、人口密度を表示するプログラムを作りなさい。 ただし、県データを格納する構造体として以下のものを使いなさい。 struct pref { char name[20]; int pop,area; float den; }; *県データ* hokkaido 5683 83456 aomori 1476 9606 iwate 1446 15278 miyagi 2365 7285 akita 1189 11612 yamagata 1244 9323 fukushima 2127 13782 ibaraki 2985 6096 tochigi 2005 6408 gunma 2025 6363 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: [3.3] 言語:C言語 [4] 期限:11月18日18時まで 考えたのですがわからなくて、よろしくお願いします。
[1] 授業単元: C言語入門 [2] 問題文(含コード&リンク): main() { float *a,*b,c; c=2.; a=&c; b=a; { float *a,b,c; b=2.; c=3.; a=&c; *a=*a+b; printf("*a=%f\n ",*a); } 次のプログラムを実行すると表示される値はどれだけになるか調べなさい。又 このプログラムを、ポインタ宣言を使った変数を使って計算するように書き改めなさい。ただし、変数のメモリへの割り当ては、 別に通常の宣言した変数のものを使うこと。 [3] 環境 [3.1] OS:Windows [3.2] gcc 2.9 [3.3] 言語: C [4] 期限: 明日 ポインタの説明が口頭のみでわかりませんでした、ほかの人も 苦労していました。お手数ですがよろしくお願いいたします。
>>19 #include <stdio.h>
struct pref{
char name[20];
int pop,area;
float den;
};
int main(){
FILE* fp;
char buf[256];
fp = fopen("data.txt","r");
if(fp==NULL){
printf("データファイル'data.txt'が読み込めません.\n");
exit(-1);
}
struct pref prefs[10];int i;
for(i=0;i<10;i++){
fgets(buf,256,fp);
sscanf(buf,"%s %i %i\n",&prefs[i].name,&prefs[i].pop,&prefs[i].area);
prefs[i].den=(float)prefs[i].pop/(float)prefs[i].area;
}
printf("name pop area den\n");
printf("---------------------------------\n");
for(i=0;i<10;i++)printf("%-9s %6i %6i %g\n",prefs[i].name,prefs[i].pop,prefs[i].area,prefs[i].den);
return 0;
}
考えてないのに考えたのですが、とか述べてんじゃねーよ
>>20 プログラムのソースも変だし
課題自体もいまいちよくわからんなぁ
表示される値がどれだけになるか調べなさい
なんて実行すりゃわかるじゃねーか
まぁそのソースはコンパイル通らないけど
2+3をポインタを用いて計算したいなら
int x=2,y=3;
int *b=&x,*c=&y;
printf("%i\n",*b+*c);
>>22 スレ汚し&2度手間すいません。2回コピーしてました。本当はこっちです。
main()
{
float *a,*b,c;
c=2.;
a=&c;
b=a;
c=*a+*b;
printf("c=%f\n ",c);
}
このプログラムを、ポインタ宣言を使った変数を使って計算するように書き改めなさい。ただし、変数のメモリへの割り当ては、
別に通常の宣言した変数のものを使うこと。
又、ポインタの概念を使い
底辺と高さを入力して三角形の面積を計算するプログラムを作成せよ。
実行するほうはコンパイルしてみて確認できました。
課題自体はポインタの概念を使わせたいみたいです。
>>25 #include <stdio.h>
int main()
{
float t=2;
float *a,*b,*c;
c=&t;
a=c;
b=a;
*c=*a+*b;
printf("c=%f\n ",*c);
float h,w;
float *x=&h,*y=&w;
printf("三角形の高さを入力してください>>");
scanf("%f",x);
printf("三角形の底辺を入力してください>>");
scanf("%f",y);
printf("三角形の面積は %f です.",*x**y/2);
return 0;
}
こういうこと?
>>27 うまくいきました!ありがとうございます。
29 :
デフォルトの名無しさん :2005/11/16(水) 22:35:16
[1] 授業単元: 情報処理演習Ⅱ [2] 問題文(含コード&リンク):それぞれの数値を配列型変数に入力し、 数値の合計、平均を求め、さらに入力した数値を大きい順に並び替えよ。 (a[0]=20 a[1]=10 a[2]=25 a[3]=30 a[4]=15) [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限:20日まで [5] その他の制限:習い始めて間もないので簡単な方法でお願いします
[1] 授業単元: C言語入門 [2] 問題文(含コード&リンク): 標準入力から複数の数値データを入力して、 データの個数、和、最大値、最小値、平均値 を標準出力に出力するプログラムを以下の条件を守り作成せよ。 このとき、別ファイルdata10.txtをリダイレクションにより入力させた結 果をresult10-2.txtに出力すること。 (a) 入力されるデータはdouble型で事前に個数は与えられない(入力データ がなくなるまで)が、最大1000個である。 (b) プログラムを3個の関数(main, input, process)で構成する。 (c) データ入力はinput関数で行う。input関数は引数に入力データを格納 する配列のポインタをもち、関数の戻り値でデータ個数を表す。すな わちinput関数の型はintとする。 (d) 和、最大値、最小値はprocess関数で求める。process関数はvoid型と し、引数にデータが格納されている配列のポインタ、データ数、なら びに和・最大値・最小値をmain関数に引き渡すためのポインタをもつ。 (e) main関数では必要な変数の宣言、input関数を利用したデータ入力、 process関数を利用した各種計算、平均値の計算、結果の表示を行う [3] 環境 [3.1] OS:Windows [3.2] gcc 2.9 [3.3] 言語: C [4] 期限: 今週 お願いします!
31 :
デフォルトの名無しさん :2005/11/16(水) 22:47:14
int i,j; double a[5],ave,sum,tmp; a[0]=20;a[1]=10;a[2]=25;a[3]=30;a[4]=15; sum=a[0]+a[1]+a[2]+a[3]+a[4]; ave=sum/5; for(i=0;i<5;i++) for(j=i;j<5;j++) if(a[i]<a[j]) {tmp=a[i];a[i]=a[j];a[j]=tmp;} printf("Ave = %lf Sum = %lf\n",ave,sum); for(i=0;i<5;i++) printf("%d - %lf",i,a[i]);
32 :
教えてください :2005/11/16(水) 23:52:06
キーボードから「100」以下の整数を入力して、その和が「1500」以上 になったときの入力データは何番目であったか求めるプログラムを作成せよ。 これなんですけど、どうしても分からないのでよろしくお願いします。C言語 でお願いします。
嫌です。
34 :
教えてください :2005/11/16(水) 23:57:22
お願いします。
断る。
int input(double *data) { int a, cnt=0; for(i=0;i<1000;i++){ scanf("%d", &a); if(EOF == a){ return (cnt); } data[cnt] = a; cnt++; } return (cnt); } void process(double *data, int cnt, double *sum, double *max, double min) { int cnt; if(0 == cnt){ return; } for(;1<=cnt;cnt--){ *sum = *sum+data[i]; *max = (data[i] > data[i-1]) ? data[i]:data[i-1]; *min = (data[i] < data[i-1]) ? data[i]:data[i-1]; } } void main() { double data[1000], sum, max, min; int cnt; }
37 :
教えてください :2005/11/16(水) 23:59:39
やっぱできたから大丈夫です。お騒がせしました♪
なんかムカついてきた
>>36 なんか見たらバグってるが直すつもりは無い
40 :
デフォルトの名無しさん :2005/11/17(木) 00:06:16
>>40 >for (i=0; i<=5; i++ )
配列の要素数が5個だから、使える添え字は0~4までです
このforループだと0~5までになっちゃうよ
43 :
デフォルトの名無しさん :2005/11/17(木) 00:28:55
#include<stdio.h> void main( void ) { float k[5] = {92, 56, 89, 76, 81}; float s[5] = {82, 46, 79, 88, 91}; printf("kokugo : %f\n" "suugaku: %f\n" "Heikin : %f %f %f %f %f\n", ( k[0] + k[1] + k[2] + k[3] + k[4] )/5, ( s[0] + s[1] + s[2] + s[3] + s[4] )/5, ( k[0] + s[0] ) / 2, ( k[1] + s[1] ) / 2, ( k[2] + s[2] ) / 2, ( k[3] + s[3] ) / 2, ( k[4] + s[4] ) / 2); } これでどうだ!
[1] 授業単元: プログラミング入門 [2] 問題文(含コード&リンク):正の整数mを読み込んだときに、それを逆順にした数nを求めなさい。 そのとき、mとnとどちらが大きいかもあわせて出力しなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: VisualC++ 6.0 [3.3] 言語:C [4] 期限:明日の朝10時まで 自分で途中までやってはみたのですができません…_| ̄|○以下がそのプログラムです。 #include<stdio.h> int main(void) { int m,n,max; printf("整数を入力してください:"); scanf("%d",&m); if(m > 0){ n = m % 10; m = m / 10;} if(m == 0){ if(m > n){max = m;} else{max = n;}} else{printf("NO");} printf("逆順:%d、大きいのは%d\n",n,max); return 0;} ホント、初心者すぎて申し訳ないんですが、よろしくお願いします。
>>43 __ __/ / | __ ──
/ ─ / / \ ○ | / | |  ̄ ̄/ ──
__/ _/ / \ | / レ ─┴─ _/
/\___/ヽ
/'''''' '''''':::::::\
. |(〇), 、(〇)、.:|
| ,,ノ(、_, )ヽ、,, .::::|
. | `,rェェェ、 ' .:::::::|
\ |,r-r-| .::::/
,,.....イ.ヽヽ、`ニニ´ーノ゙-、.
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
> ヽ. ハ | ||
>>45 マジカ
Borlandじゃ通ったんだがなぁ
逆数のことじゃね?
49 :
40 :2005/11/17(木) 01:01:02
>>41 .42
ありがとうございます。すごい簡単な見落とししてました。。
うまく表示されました。
>>43 実行例どうりに表示されてすごいです。
Heikinの表示参考にしてみます。(void型関数はよくわからない;;
>>45-46 borlandでは自分もコンパイルできました。
正の整数を逆数にしても、元の数より大きくなることはない
44です。すいません、説明不足でした_| ̄|○ 例えば12345って入力したら、54321って表示されるようにしなさいってことです。 そして入力した整数をm、逆から表示した数字をnとするっていう意味です。 ややこしくて本当に申し訳ないです…。
>>51 #include<stdio.h>
int main(void)
{
int l,m,n,max;
printf("整数を入力してください:");
scanf("%d",&m);
n = 0; max = l = m;
while(m > 0){
n = n * 10 + m % 10;
m = m / 10;
}
if(l < n) {max = n;}
printf("逆順:%d、大きいのは%d\n",n,max);
return 0;
}
>>52 できました!!本当にありがとうございました!!
l は要らんかったな。まぁいいや
55 :
c言語初心者 :2005/11/17(木) 02:47:20
質問というよりプログラムが長いのでいくつかに分けて書き込みます。 下記の二つのプログラムをまとめて一つにするには、どうしたらよいですか? /* コマンドライン引数で指定した解像度と明るさのPPM画像ファイルを生成する。 /* #include <stdio.h> #include <stdlib.h> #include “ppm.h” /*PPM画像ファイル処理関数ライブラリ*/ Int main(int argc,char *argv[]) { FILE *fpout; /*出力ファイルポインタ*/ unsigned char *buf; /*画像データバッファへのポインタ*/ int width; /*画像の幅*/ int height; /*画像の高さ*/ int br; /*画像の明るさ*/ int i,j /*注目ピクセルの座標(横、縦) */ int k; /*注目ピクセルの先頭からの位置*/
56 :
c言語初心者 :2005/11/17(木) 02:47:56
/*コマンドライン引数の個数チェック*/ if(argc<5){ printf(“Usage:%s<outfile><width><height><bright>\n”,argv[0]); exit(0); } /*コマンドライン引数で指定されたファイルをバイナリ書き込みモードでオープン*/ if(NULL==(fpout = fopen(argv[1],”wb”))){ printf(“%sをオープンできません\n”,argv[1]); exit(-1); } /*画像の横幅を取得*/ Sscanf(argv[2],”%d”,&width); if(width <=0){ printf(“画像の横幅の指定が不正です\n”); exit(-1); } /*画像の高さを取得*/ sscanf(argv[3],”%d”,&height); if(height <=0){ printf(“画像の高さの指定が不正です\n”); exit(-1);
57 :
c言語初心者 :2005/11/17(木) 02:48:25
} /*画像データバッファを取得*/ if(NULL==(buf = malloc(width*height*3*sizeof(unsigned char)))){ printf(“画像データバッファの取得に失敗しました\n”); exit(-1); } /*画像データバッファに画像データを書き込む*/ for(j = 0;j < height; j++){ for(i = 0; i <width; i++){ k = (i+j*width)*3; buf[k+0] =(unsigned char)br; buf[k+1] =(unsigned char)br; buf[k+2] =(unsigned char)br; } }
58 :
c言語初心者 :2005/11/17(木) 02:51:59
/*PPMヘッダーをファイルに出力*/ put_ppm_header(fpout,width,height,PPM_DEPTH); /*画像データバッファの内容をファイルに出力*/ fwrite(buf,width*height*3*sizeof(unsigned char),1,fpout); /*画像データバッファを解放*/ free(buf); /*ファイルクローズ*/ fclose(fpout); retrun0; ここまでが一つで、
59 :
c言語初心者2 :2005/11/17(木) 02:53:19
もう一つが /* PPM画像の平均輝度を算出する。 */ #include <stdio.h> #include <stdlib.h> #include “ppm.h” /*PPM画像ファイル処理関数ライブラリ*/ /*ピクセルのRGB各要素から,輝度を求める*/ int brightness(unsigned char *dat) { unsigned int r,g,b; unsigned int br; /*ピクセルの輝度*/ r=(unsigned int)dat[0]; g=(unsigned int)dat[1]; b=(unsigned int)dat[2]; br=(77*r+151*g+28*b)/256; return(int)br; }
60 :
c言語初心者 :2005/11/17(木) 03:04:00
r=(unsigned int)dat[0]; g=(unsigned int)dat[1]; b=(unsigned int)dat[2]; br=(77*r+151*g+28*b)/256; return(int)br; } Int main(int argc,char*argv[]) { FILE*fpin; /*入力ファイルポインタ*/ unsigned char*buf; /*画像データバッファへのポインタ*/ int header_len; /*画像データのヘッダのバイト数*/ int width; /*画像の幅*/
61 :
c言語初心者 :2005/11/17(木) 03:04:42
int height; /*画像の高さ*/ int depth; /*画像のデータ最大値*/ int br; /*ピクセルの輝度*/ int sum; /*輝度値の合計*/ double br_mean; /*平均輝度*/ int i,j; /*注目ピクセルの座標(横、縦)*/ int k; /*注目ピクセルの先頭からの位置*/ /*コマンドライン引数の個数チェック*/ if(argc<2){ printf(“Usage:%s<infile>\n”,argv[0]); exit(0); } /*入力ファイルをバイナリ読み取りモードでオープン*/ if(NULL==(fpin = fopen(argv[1],”rb”))){ printf(“%sをオープンできません\n”,argv[1]); exit(-1); }
62 :
c言語初心者 :2005/11/17(木) 03:05:19
/*入力ファイルのヘッダ情報を取得*/ header_len = read_ppm_header(fpin,&width,&height,&depth); /*ヘッダが不正な場合は終了*/ if(header_len < 0){ printf(“入力ファイルのヘッダが不正です\n”); exit(-1); } /*画像データバッファを取得*/ in(NULL==(buf = malloc(width*height*3*sizeof(unsigned char)))){ printf(“画像データバッファの取得に失敗しました\n”); exit(-1); } /*画像データの本体をバッファに読み込む*/ fseek(fpin,header_len,SEEK_SET); /*ヘッダの分だけ飛ばす*/ fread(buf,width*height*3*sizeof(unsigned char),1,fpin);
63 :
c言語初心者 :2005/11/17(木) 03:05:53
/*バッファ内の画像データの平均輝度を求める*/ sum = 0; for(j = 0;j < height;j++){ for(i = 0;j < width;i++){ k = (i+j*width)*3; /*j行i列のピクセルはkバイト目*/ br = brightness(buf+k);/*該当ピクセルの輝度*/ sum += br; /*輝度値の総和*/ } } br_mean =(double)sum/(double)(width*height); /*平均輝度を表示する*/ printf(“%sの平均輝度:%lf\n”,argv[1],br_mean); /*画像データ用バッファを解放*/ free(buf); /*ファイルクローズ*/ fclose(fpin); return0; }
65 :
c言語初心者 :2005/11/17(木) 04:26:39
/*バッファ内の画像データの平均輝度を求める*/ sum = 0; for(j = 0;j < height;j++){ for(i = 0;j < width;i++){ k = (i+j*width)*3; /*j行i列のピクセルはkバイト目*/ br = brightness(buf+k);/*該当ピクセルの輝度*/ sum += br; /*輝度値の総和*/ } } br_mean =(double)sum/(double)(width*height); /*平均輝度を表示する*/ printf(“%sの平均輝度:%lf\n”,argv[1],br_mean); /*画像データ用バッファを解放*/ free(buf); /*ファイルクローズ*/ fclose(fpin); return0; } の二つです。長すぎて面倒だと思いますがどなたかお願いします。
67 :
c言語初心者 :2005/11/17(木) 04:35:15
ありがとうございます。やってみます。
あのC言語で (x+3)の1/3乗を計算したい時はどのようにしたらいいんでしょうか><? double pow(double x,double y) を使うことは解るんですが・・・。 簡単なサンプルソースなどを貼ってもらえると助かります。
pow(x + 3.0, 1.0 / 3.0);
70 :
デフォルトの名無しさん :2005/11/17(木) 11:16:28
問:シェルソートのhの系列はどのようなものがよいか.調べて理由を考察せよ 3h+1がいいらしいが理由はどこにもないorz 何故なんですの?
>>70 「数学的に難しい問題が多く、教授にもきっとわからない事でしょう」と
書いて出すとかw
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 入力した文字列を逆順で再構成する関数strinverseを作れ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2005年11月11日まで(すでに遅れ) [5] その他の制限: なるべく簡単に・・・ 長さを取得して、*(temp+i)に逆から一つ一つ入れていけばできるのかなと思いましたがどうも上手くいきません。
>>73 #include <string.h>
char* strinverse(char* str)
{
int start = 0, end = strlen(str) - 1;
while (start < end) {
char temp = str[start];
str[start++] = str[end];
str[end--] = temp;
}
return str;
}
>>73 #include <stdio.h>
int main(void)
{
char str_in[1024], str_out[1024]; // 十分な長さを確保しているという前提で
int i, j;
fgets(str, 1024, stdin);
for( i = strlen(str) - 1 ; i >= 0 && (str[i] == '\n' || str[i] == '\r') ; i-- ) ;
for( j = 0 ; i >= 0 ; i--, j++ ) str_out[j] = str_in[i];
str_out[j] = '\0';
printf("Input -> %s\nReverse -> %s\n", str_in, str_out);
return 0;
}
76 :
71 :2005/11/17(木) 15:16:17
迅速な回答ありがとうございます。非常に助かります。 char *strinverse( char *s ) { int i, len; char *temp; len = strlen(s); for( i = 0 ; i < len ; i++ ) *(temp+i) = *(s+len-1-i); return temp; } これが今まで考えてたものなんですが、入力する文字列によってはエラーが起きたりします。 質問を連発して悪いのですが、一体どこが悪いのでしょうか。
>>75 > 関数strinverseを作れ
この部分の仕様を満たしてない。
78 :
73 :2005/11/17(木) 15:16:38
73でした・・・すみません。
>>76 tempの実体を確保していない。
実体を確保したとしてもauto変数の配列を返すことは出来ない。
従って*s自体を更新するように仕様を変更した方が良い
>>79 交換は必須条件ではないのでは?逆順で再構成せよとしかないし。
>>76 char *tempに領域を確保してないのが悪い。エラーなしで動くことがある方が怖いな。
82 :
68 :2005/11/17(木) 15:52:09
>>69 教えてくれてありがとうございました!!
とっても助かりました☆
1] プログラム演習 [2] 10までの10進法の数字を2進法(char形)に直して表示する。 [3] [3.1] Windows [3.2] VC++ 6.0 [3.3] C [4] 11/21 [5]たぶん、特になし。 おねがいします。
俺
>>71 だけど
>>76 じゃないから(´・ω・`)
ポインタとって実体確保しないなんてミスしないよ(つД⊂)・・・たぶん
>>83 #include <stdio.h>
#include <math.h>
int dec2bin(int, char*);
int main(void)
{
char bin[5];
int i = 10;
dec2bin(i, bin);
printf("%s\n", bin);
return 0;
}
int dec2bin(int dec, char* buf)
{
int i, bin = 0;
for (i=0;i<4;i++) {
if (i == 0)
bin += dec % 2;
else
bin += (int)pow(10, i)*(dec%2);
dec /= 2;
}
sprintf(buf, "%04i", bin);
return dec;
}
>>83 #include <stdio.h>
char* to_radix_2(unsigned int x, char* s) {
int index = 0, left = 0;
char temp;
do s[index++] = (x & 1) + '0'; while (x >>= 1);
s[index--] = '\0';
while (left < index) {
temp = s[left];
s[left++] = s[index];
s[index--] = temp;
}
return s;
}
int main(void) {
char s[256];
int i = 123456;
printf("%d(10) = %s(2)", i, to_radix_2(i, s));
}
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 1234567890を繰り返し表示するプログラムを作成せよ。 なお、表示する数字は、読み込まれた整数値の個数とする。 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VisualC++ 6.0 [3.3] 言語: C [4] 期限: 今夜20時までに プログラムを自分でも作成してみたのですが、うまく実行できません。 ↓が自分で作成したものです。 #include <stdio.h> int main (void) { int i,num; printf("整数を入力してください:"); scanf("%d", &num); for(i = 1; i <= num; i++){ if(i== 10){ i = 0; } printf("%d",i); } return 0; } よろしくおねがいします。
>>87 それはたとえば3が指定されたときに
012と表示するの?それとも012345678901234567890123456789と表示するの?
こんなん? #include<stdio.h> int main(void) { int s[10] = {1,2,3,4,5,6,7,8,9,0}; int a,i; scanf("%d",&a); for(i=0;i<a;i++) printf("%d ",s[i%10]); return 0; }
90 :
88 :2005/11/17(木) 17:39:52
>>87 ま、いいや。こんな感じ?
#include <stdio.h>
int main(void) {
int i = 9, num;
printf("整数を入力してください:"); scanf("%d", &num);
while (num-- > 0) {
if (++i == 10) i = 0;
printf("%d", i);
}
return 0;
}
配列使う意味わからん #include<stdio.h> int main(void) { int num,i; printf("整数を入力してください:"); scanf("%d",&num); for(i=0;i<num;i++) printf("%d ",(i+1)%10); return 0; }
改行されないね
93 :
87 :2005/11/17(木) 17:46:10
意味分からない説明文ですみませんでした。 無事解決しました。 ありがとうございます!
94 :
83 :2005/11/17(木) 18:10:17
95 :
デフォルトの名無しさん :2005/11/17(木) 19:28:36
宿題というわけではないのですが質問させてください. 「要素それぞれの遷移確率に従ってランダムに1つ選ぶ」 にはどのようにすればよいのでしょうか? 例えばa,b,cがそれぞれ5/10,3/10,2/10の確率のとき、 この確率に従ってa,b,cの中からランダムに1つ選択する といった感じです.
96 :
デフォルトの名無しさん :2005/11/17(木) 19:43:54
ランダムな数値を配列に入れてソート時間の計測をやっているのですが、 int *a; printf("要素数を入力:"); scanf("%d",&MAX); a=(int *)malloc(sizeof(int)*MAX); srand((unsigned int)time(NULL)); for(i=0;i<MAX;i++) a[i]=rand()*pow(2,15)+rand(); とした場合、扱えるデータ数の最大はメモリ容量が空いてる限りですか? それともrand()*pow(2,15)+rand();で表現できる2^30個までですか?
rand()*pow(2,15)+rand()はデータ数と関係無いから
>>95 コードは適当だけど、素朴に考えるとこんな感じになるんじゃね?
int i = rand() % 10;
if((0 <= i) && (i <= 4)){
next = a;
} else if((5 <= i) && (i <= 7)){
next = b;
} else if((8 <= i) && (i <= 9)){
next = b;
}
99 :
98 :2005/11/17(木) 19:50:31
あ、最後のは next = c; だな。
100 :
95 :2005/11/17(木) 19:56:03
>>98 なるほど~、確率に合わせて10を要素に配分してるんですね!
方針が立ちました、ありがとうございます!
101 :
デフォルトの名無しさん :2005/11/17(木) 20:26:10
>>97 ではメモリの容量がある限りデータを生成できるってことですね?
ということはrand()*pow(2,15)+rand()で表現できる数の範囲以上の個数を
指定したら同じ値を何個も使って生成していくってことですよね?
[1] 授業単元: プログラミング演習 [2] 下 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VisualC++ 6.0 [3.3] 言語: C [4] 期限: 来週中 1. 自然数2個の最大公約数を計算する関数を作成せよ 標準入力から自然数M, N, dm, dnを入力する。 自然数M~M+dmとN~N+dnとの最大公約数をそれぞれ求める。 結果は標準出力に表形式で示す。表形式の出力終了後、これらの中で互 いに素である自然数の組を標準出力に示す。 例:M=3, N=4, dm=3, dn=2の場合 3 4 5 6 4 1 4 1 2 5 1 1 5 1 6 3 2 1 6 互いに素: (3,4) (5,4) (3,5) (4,5) (6,5) (5,6) d) プログラムは3個以上の関数で構成すること(main, 最大公約 数を計算する関数以外に何かの役割を持たせた関数を作成する必要があ る) お願いします
103 :
名無し :2005/11/17(木) 20:32:47
[1] 授業単元:連立一次方程式 [2] 問題文:[入力]4個の実数(一次方程式ax+by+cz=dの定数a,b,c,d)の組を3組 [操作]行列を使って3元一次方程式の解を求める [出力]3元一次方程式の解をx=解1,y=解2,z=解3の形で出力 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:[2005年11月19日13:00まで] [5] その他の制限:ガウスの消去法かガウスジョルダン法で解かないといけないみたいです よろしくお願いいたします。
そうだけど、 rand()*pow(2,15)+rand()じゃ、一様な乱数を生成できないんじゃね?
>>101 あくまでランダムだから同じ数字が重複することもあるじゃん。
それにmallocでメモリ領域確保できなかったらエラーにしないとね。
あとallocしたらfreeを(´・ω・`)
109 :
デフォルトの名無しさん :2005/11/18(金) 00:35:33
文字列をさかさまにする関数 str_reverse(char*s,char*d); を使いなさい s→dへのコピーをする "abc"→"cba"になる
>>109 主語がわからないけど一応はっとく
#include "stdio.h"
double str_reverse(char *,char*);
int main(void){
char s[100]="1",d[100];
str_reverse(s,d);
printf("_%s_\n_%s_\n",s,d);
return 0;
}
double str_reverse(char *s,char *d){
int n=0,i;
if(*s){
while(s[++n]);i=d[n--]=0;
do d[n-i]=s[i];while(s[++i]);
}else *d=0;
return 0.0;
}
111 :
デフォルトの名無しさん :2005/11/18(金) 01:31:11
112 :
デフォルトの名無しさん :2005/11/18(金) 08:55:45
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): ★★★★★ で表現されたバーを回転させながら横に移動させなさい。 回転が速すぎるときは、sleep関数を使いなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: LCC-Win32 [3.3] 言語: C言語 [4] 期限: 11月18日月曜日 [5] その他の制限: 先週for,whileなどのをやって、今週if switch caseをやった後にこの宿題が出ました。 ★ ★ ★ ★ ★ ★ ★★★★★ ★ ★ ★ ★★★★★ ★ ★ ★ ★ ★ ★ こんな感じに回転させながら右に動き、 1回転したら左に同じく回転しながら動き最初の位置に戻ります。 考えてもさっぱりわかりません。どなたか何卒よろしくお願いします。
日本語がいまいちわからん・・・
for (int ic = 0; ic <= 8; ++ic) { printf("%*s%c\n", ic, "", "-\\|/-\\|/-"[ic]); } みたいな感じなんだろうか。
移動させるだけなら強引にこんな感じで・・・あとは知らない #include <stdio.h> #include <windows.h> int main() { int i, j; for (j = 0; j < 20; j++){ for (i = 0; i < j; i++) printf(" "); printf("★★★★★\r"); Sleep(100); } putchar('\n'); for (j = 20; j >= 0; j--){ for (i = 0; i < j; i++) printf(" "); printf("★★★★★\r"); Sleep(100); printf(" \r"); } return 0; }
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 配列a[ ]のすべての要素に1を代入する。 この代入する部分を独立させポインタ変数を明示するプログラムを書け。 (ポインタで渡してポインタで受け取る) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月21日まで [5] その他の制限:よろしくおねがいします
前スレの954と同じ奴かな なにかの嫌がらせ?
自分も最初問題を先生に言われたときは「はぁ?」って感じで、 この実行ファイルを配布されたので、それをみてやっと理解できたんです。 中心の星が右にひとつずつ動きます。それを軸にして周りの4つの星が回ります。 回転するだけでもいいので、よろしくお願いします。 以下のファイルを参考にしてくださいと先生が言っていました。 #include <stdio.h> #include <xxxxxx.h> #include <conio.h> int main(){ int x=15,y=15; int dir,col=1; Cinit(80,40); while(1){ Cprint(0,0,""); dir= getchar()-'0'; fflush(stdin); switch (dir){ case 1: y++; break; case 2: x+=2; break; case 3: y--; break; case 4: x-=2; break; default : col =(col++)%15+1; }Color(col); Cprint(x,y,"■"); }return 0;} 「xxxxxx.h(学部名なので伏せてます。)このファイルをインクルードすると、 Cinit(幅 , 高さ); でコンソールの大きさを指定することができる。 Color(色番号); で色を0~15 までの16 色選択できる。 Cprint(X,Y,文字列); でX,Y の位置に文字列を表示できる。 座標は文字単位に数えるので、X 方向とY 方向では長さが異なる。 半角文字を基準とするので、横方向長さは縦の約半分になる。 xxxxxx.h を使うときは必ずCinit 関数を使ってください。」とのことです。
>>118 ・自分のレス番が判るようにしよう。
・そういう条件ははじめから提示しよう。
それはさておき、めんどいし実行できないし、私ゃパスだ。
回転って45度毎でいいのかな。 それなら3パターンを静的にもっとけばいいだけのような。 なんにしてもわけのわからん課題だ。
>>120 >それなら3パターンを静的にもっとけばいいだけのような
馬鹿ですか?
まあ、実際に書き出さんと、数え上げミスはよくやるもんだ。 あと、指定座標に特定のパターンを出力するのも、良くある話だ。
[1] 授業単元:情報処理演習 [2] 問題文(含コード&リンク):最短最大路を求めるプログラムを作成せよ [3] 環境 [3.1] OS: Windows [3.2] vc++6.0 [3.3] C/C++ [4] 期限: 2005/11/21 色々と調べたのですが、どうしてもわかりません。 宜しくお願いします。
>>123 >"最短最大路" の検索結果 1 件中 1 - 1 件目
最短最大路って何かと思って調べてみたらここにバッチリ書いてあるが
最短路の中で最大の重みがついてる路ってことか?
それならダイクストラ法で最短路出せば直ぐだろ
125 :
デフォルトの名無しさん :2005/11/18(金) 17:17:37
[1] 授業単元:プログラミング演習2 [2] 問題文 入力した文字列を反転するプログラムをポインタ変数を用いて作成せよ. [実行例] 文字列を入力してください:meijo 反転文字列は"ojiem"です. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Microsoft VisualC++6.0 [3.3] 言語: C++ [4] 期限:速ければ速いほど助かります。 よろしくお願いします。
こんなんじゃ全然遅いかな #include <stdio.h> int main(){ char s[120]; char *p = s; printf("文字列を入力してください:"); scanf("%s", &s); for (; *p != '\0'; p++); p--; printf("反転文字列は\""); for (; p != s - 1; p--) printf("%c", *p); printf("\"です."); return 0; }
>>125 #include <iostream>
using namespace std;
void st_reverse(char *,char *);
int main() {
char str[128],st2[128];
cout << "文字列を入力してください:";
cin >> str;
st_reverse(str,st2);
cout << "反転文字列は\"" << st2 << "\"です.\n";
return 0;
}
void st_reverse(char *s,char *d){
char* t=s;
if(*t){
while(*(++t));
d-=s-t;*d--=0;t=s;
while(*t)*d--=*t++;
}else *d^=*d;
}
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 4×4正方行列Aにたいして、A^n(n=1,2,3,4...)
を求めるプログラムを配列を使用して作成せよ。
[3] 環境
[3.1] OS:unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日いっぱい
[5] その他の制限:
便乗して申し訳ないのですが
>>125 さんの問題文を
言語:C言語
制限:ポインタを使わない(まだ習っていないもので...
にした時のプログラムもご教授願います。
[1] 授業単元: プログラミング [2] 問題文: 入力した文字列を 2 回繰り返して表示するプログラムを作成 すること [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日まで [5] その他の制限:src が "cha" のとき dst に "chacha" が コピーされる関数 void str_dup(char dst[], char src[]) をつくり、それを用いて。 よろしくお願いします
#include <stdio.h> #include <string.h> void str_dup(char dst[], char src[]) { strcpy(dst, src); strcat(dst, src); } int main(void) { char s[128], d[256]; scanf("%s", s); str_dup(d, s); printf("%s\n", d); return 0; }
>>129 void(str_dup(char *dst, char*src)
{
char *ptrd = dst, *ptrs = src;
int i;
for (i=0;i<2;i++)
while (ptrs != '\0')
*ptrd++ = *ptrs++;
*ptrd = '\0';
}
str_dupだけ作ったが脳内コンパイル。mainは自分で作ってくれ
それとstrで始まる関数はstring.hで予約済み
st_dupとかの方がいい
>それとstrで始まる関数はstring.hで予約済み str_から始まるのは問題ないはず
134 :
デフォルトの名無しさん :2005/11/18(金) 22:40:12
[1] 授業単元: プログラミング [2] 問題文: 入力した文字列を逆順に表示せよ(abc→cba) [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日まで [5] その他の制限:ポインタを使わずに お願いします
>>135 #include <stdio.h>
#include <string.h>
int main(void)
{
int i;
char s[128];
scanf("%s", s);
for (i = strlen(s) - 1; i >= 0; --i) {
printf("%c", s[i]);
}
return ;
}
>>136 出来れば#include <string.h> 使わずに・・・だめですか?
まだ不満かよ…んじゃ #include <stdio.h> int main(void) { int i; char s[128]; scanf("%s", s); for (i = 0; s[i]; ++i) ; for (; i >= 0; --i) { printf("%c", s[i]); } return 0; }
>>138 最初に'\0'表示してる…(((( ;゚Д゚))))
まぁ画面上は問題無しか。
|3・)
|三(´・3・) ハズレ。中央の金玉が回転したしょぼんでした。
(・3・)エェー 呼ばれたかと思ったのに
(・3・) エェー ぼるじょあがDelphiの宿題を片付けるYO
sine
>>138 これ、反応(逆にした文字)返ってこなくない?
>>148 あふぉか。sprintfでもなんでも使えばいいだろうが。
>>148 空白入るとダメっぽいね
#include <stdio.h>
int main(void){
int i;
char s[128];
scanf("%[^\n]",s); /* 改行以外読み込む */
for (i = 0; s[i]; ++i);
for (i--; i >= 0; --i)/* i--で\0の部分飛ばす */
printf("%c", s[i]);
return 0;
}
これでも表示できる分は対応したと思うけど十分じゃないかも
%[^\n] については正規表現でぐぐれ
[1] 授業単元: 情報処理実習
[2] 問題文:
(1)入力した文字列をオウム返しで画面に出力するプログラムを作成せよ。
ただし、何度でも入力可能とし、"q" を入力すると終了するようにすること。
入力は半角に限定する。このとき、"quiz" や "quit" などの文字を入力しても終了しないようにする。
(2)Eratosthenes の篩法を用いて入力された整数(2 ~ 9999)が素数であるかを判定するプログラムを作成せよ。
ただし、素数でない場合は、その数を割り切る最初の素数とその他の因数を表示させること(1001=7*143のように)。
範囲外の数が入力されたときには、エラー処理を行うこと。
(3)多倍長演算の手法を用いてキーボードから 20 桁までの整数 a, b を入力し、
減算(a - b)をするプログラムを作成せよ。
但し、マイナスの場合は、マイナス記号を表示させること。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名:gcc
[3.3] 言語: C
[4] 期限: 2005年11月21日20時まで
[5] その他の制限: 関数は使わないこと。
Eratosthenes の篩法を用いて2~9999 までの中の素数を探すプログラム:
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1116.txt 多倍長演算の加算プログラム:
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1115.txt (2)と(3)については、上記のプログラムを改変、付け足しする形でお願いします。
[1] 授業単元: プログラミング演習 [2] 問題文: あらかじめ定義した文字列がキーボードから入力した文字列で始まっているかどうかを 判定して表示するプログラムを作成せよ [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 今日中 [5] その他の制限:ポインタを使わずに お願いします
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 長さが3以上の文字列が5つ入力されるまで繰り返し入力を受け付ける。 最後にこれら5つの文字列を出力しなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: VC++6.0 [3.3] 言語: C++ [4] 期限:2005,11,24 [5] その他:二次元配列? よろしくお願いします。
>>153 #include <stdio.h>
#include <string.h>
#define BUF_SIZE 1024
int isHajimatteru(const char arakajime[], const char buf[], const int buf_len)
{
int i;
for (i=0 ; i<buf_len ; i++)
{
if (arakajime[i] != buf[i])
{
return 0;
}
}
return 1;
}
>>155 の続き
int main()
{
const char arakajime[]="hello, world";
char buf[BUF_SIZE];
int buf_len;
fgets(buf, sizeof(buf)-1, stdin);
buf_len=strlen(buf);
if (buf[buf_len-1]=='\n')
{
buf[buf_len-1]='\0';
buf_len--;
}
if(isHajimatteru(arakajime, buf, buf_len))
{
printf("はじまってます\n");
}
else
{
printf("はじまってません\n");
}
return 0;
}
>>154 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SIZE 1024
int main()
{
char *buf;
char *mojiretufive[5];
int i;
int buf_len;
i=0;
while (i<5)
{
buf=malloc(BUF_SIZE);
fgets(buf, BUF_SIZE-1, stdin);
buf_len=strlen(buf);
if (buf[buf_len-1]=='\n')
{
buf[buf_len-1]='\0';
}
buf=realloc(buf, strlen(buf)+1);
>>157 の続き
if (strlen(buf)>=3)
{
mojiretufive[i]=buf;
i++;
}
else
{
free(buf);
}
}
for (i=0 ; i<5 ; i++)
{
printf("%s\n", mojiretufive[i]);
}
for (i=0 ; i<5 ; i++)
{
free(mojiretufive[i]);
}
return 0;
}
>>153 出来るだけ簡潔に書いたつもり
#include <stdio.h>
int startsWith(const char input[], const char test[])
{
for (; *input && *test; ++input, ++test) {
if (*input != *test) {
return 0;
}
}
return *test == '\0';
}
int main(void)
{
const char s1[] = "The quick brown fox jumps over the lazy dog.";
char s2[128];
scanf("%[^\n]", s2);
printf("%s", startsWith(s1, s2) ? "始まる" : "始まらない");
return 0;
}
160 :
159 :2005/11/20(日) 05:16:05
一見ポインタ使ってないように見せるの忘れてた… int startsWith(const char input[], const char test[]) { for (; input[0] && test[0]; ++input, ++test) { if (input[0] != test[0]) { return 0; } } return test[0] == '\0'; } こっちを使ってくれ。 (´-`).。oO(にしても何でポインタ使っちゃいけないんだろう…)
161 :
159 :2005/11/20(日) 05:42:38
>>154 暇だからこっちもやってみた
#include <iostream>
#include <iterator>
#include <functional>
#include <vector>
#include <string>
#include <algorithm>
namespace {
const int NUM_INPUT = 5;
const int MIN_LENGTH = 3;
struct StringsGenerator : std::unary_function<void, std::string> {
const std::string operator()() const
{
std::string s;
do {
std::getline(std::cin, s);
} while (s.length() < MIN_LENGTH);
return s;
}
};
}
int main()
{
std::vector<std::string> strings(NUM_INPUT);
std::generate(strings.begin(), strings.end(), StringsGenerator());
std::copy(strings.begin(), strings.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
return 0;
}
(´-`).。oO(こんなん出したら胡散臭そうな目で見られるだろうなぁ…)
朝から元気だなおまいらw
んー。よくわからん。図解入りで頼む>163
>>163 状態3が定義されていません。
適当に改行をしましょう。
166 :
151 :2005/11/20(日) 10:37:39
>>152 ありがとうございました。
できればどなたか(3)のほうもお願いいたします。
167 :
デフォルトの名無しさん :2005/11/20(日) 11:59:18
[1] 授業単元:プログラム [2] 問題文(含コード&リンク): エコーサーバとクライアントを作成する。 サーバ側の要件 「end+return」を受け付けるとサーバは終了する。 それ以外の文字の場合は、クライアントに再送信する。 終了時には、終了メッセージをクライアントに送信する。 通信が終了した場合は、クライアントのリソースは解放すること。 クライアント側の要件 行の先頭で「q+return」を入力するとクライアントは終了する。 一行づつサーバに入力文字を送信する。 サーバから受信した文字列は画面に表示する。 通信規約は任意のものでよい [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: C [4] 期限: 11月末 [5] その他の制限: 無し ソケットはやったことがないのです。。。
168 :
デフォルトの名無しさん :2005/11/20(日) 12:17:56
[1] 授業単元:プログラム [2] 問題文(含コード&リンク): csv形式(カンマ区切り、ダブルコートなし)のファイルがある。 このファイルを読み込んでデータを表示する。ただし、表示は各アイテム毎に改行する事。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: C [4] 期限: 11月末 [5] その他の制限: 無し
>>168 ダブルコートって何だ?ダブルバイトなら聞いたこともあるが
170 :
163 :2005/11/20(日) 14:43:31
うはwかぶったwww
サンプルの入力ファイルがないといまいちわかりづらいな。
>CSVの人 入力出力例 入力: 1st,2nd,3rd a,b,c 出力: line 1, item 1, '1st' line 1, item 2, '2nd' /* 略。質問側は略しちゃだめよ */ とか。出力の形がわからんと組みようがないわ。 >XORでパリティの人 ・授業なら「適当に並べ替え」ってところが肝で説明受けてるはず。なんで、それ書きましょう。 ・ああ・・・それから、パリティって普通、パリティビットつけるものです。 ・誤り訂正符合を考え提出せよってネタだったら、そのままだしたほうがいいよ。
177 :
デフォルトの菜無しさん :2005/11/20(日) 15:47:40
[1]授業単元:プログラミング [2]問題文(含コード&リンク): 1.実数型変数a, b を宣言し、そのアドレスを画面に表示するプログラムを作成。 2.上記のプログラムでポインタ変数 *pa, *pb を準備し、それぞれに変数 a, b のアドレスを入力して、それを画面に表示させる。 3.上記のプログラムで変数 a, b にキーボードから数値を入力し、その和 sum を計算して画面に表示させる。ただしポインタ *pa, *pb を用いて和を計算する。 4.実数型変数a, b を宣言し、和と差を計算して、結果を画面に表示するプログラムを考える。このとき、ポインタ変数 *pwa, *psa をmain関数内で準備し、関数 wasa に a, b, &pwa, &psa を引数として渡して、関数 wasa 内で「アドレス内のデータ」として和と差を計算する。
178 :
デフォルトの菜無しさん :2005/11/20(日) 15:48:27
↑続きです㊤ [3.1]OS:Windows [3.2]コンパイラ名:gcc [3.3]言語:C言語 [4] 期限:明日のお昼3時 [5] その他の制限:ポインタ変数を使うらしいです。 2番の問題までゎかるのですが、3番からが全然謎なので是非お願いします。
181 :
168 :2005/11/20(日) 15:59:53
>>174 ダブルバイトていうか多分スペース区切りでいいんじゃないでしょか
==============
1111 2222 3333
4444 5555 6666
==============
上記を
1111
2222
3333
4444
5555
.....
見たいに。だからスペースの有無とファイル中の改行を見て
コード内で1アイテムづつ改行を行うんじゃないかと...
182 :
デフォルトの名無しさん :2005/11/20(日) 15:59:54
じゃあ、男のフリすればいいんですよね。
おっぱいと聞いて駆けつけました うpはまだでつか?
>>181 カンマ区切りじゃないのか?
それと日本語云々は、(本当にあるのかは知らないが)2バイト目とカンマの文字コードが
一致する場合を避ける必要がある
1) double a, b; printf("&a %p, &b %p\n", &a, &b); 2) double a, b, *pa, *pb; pa = &a; pb = &b; printf("pa %p, pb %p\n", pa, pb); 3) double a, b, *pa, *pb. sum; pa = &a; pb = &b; printf("input a b:"); scanf("%lf %lf", pa, pb); /* scanf("%lf %lf", &a, &b);とどちらがよいだろう? */ sum = *pa + *pb; printf("pa %p, pb %p\n", pa, pb); 4) はC言語スレで頑張ってた人が居るので宣言考えるだけであとはパス。 double a, b, *pa = &a, *pb = &b, wa, sa, pwa = &wa, psa = &sa;
186 :
デフォルトの名無しさん :2005/11/20(日) 16:06:08
絶対しませんよ。
188 :
187 :2005/11/20(日) 16:06:53
よろしくお願いします
189 :
168 :2005/11/20(日) 16:07:05
============== 1111,2222,3333 4444,5555,6666 ============== こうっすね すいません。 日本語云々はどうなんでしょうか... それこそ宿題程度のものなので作る側の任意で良いと思います。 日本語関係にも対応している高尚なものであればそっちの方がいいとは思いますが。。。
190 :
デフォルトの名無しさん :2005/11/20(日) 16:07:32
185番さんありがとうございます!! コンパイルしてみます!
>181 (CSVではない気がするが) #include <stdio.h> int main(void) { char buf[100]; while(scanf("%99s", buf) == 1) printf("%s\n", buf); return 0;}
>189 やっぱしカンマありか・・・ #include <stdio.h> int main(void) { int c; while ((c = getchar()) != EOF) {if (c == ',' || c == '\n') putchar('\n'); else putchar(c);} return 0;}
ああ・・・ファイルを読み込む方法か・・・>191 コマンドラインから a.exe <file とか a.out <file としてくれ。リダイレクトとかリダイレクションとかいう機能だ。 手抜きプログラムで必須の方法だ。
195 :
168 :2005/11/20(日) 16:23:27
>194 ちゃんとやってください
なにか不備でも?
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): N個の要素よりなる配列をmain関数に宣言する。配列にデータを読み込む関数(例えばinput) をmainから呼んで入力を行いデータを書き出す関数(例えばoutput)を呼んで出力するプログラムを 配列で呼んで配列で受け取るやり方を書け。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン: [3.3] 言語:C [4] 期限:2005年11月21日 [5] その他の制限: ヘルプです
void input(int *a){int i;for(i=0;i<N;i++){scanf("%d",&(a[i]));}} void output(int *a){int i;for(i=0;i<N;i++){printf("%d\n",a[i]);}} int main(){int a[N];input(a);output(a);return 0;}
200 :
163 :2005/11/20(日) 18:44:51
>>177 の4 問題文に沿った回答
#include <stdio.h>
void wasa(double a, double b, double **ppwa, double **ppsa)
{ **ppwa = a + b; **ppsa = a - b; }
int main(void) {double a, b, wa, sa, *pwa, *psa;
pwa = &wa; psa = &sa;
printf("a b: "); scanf("%lf %lf", &a, &b);
wasa(a, b, &pwa, &psa);
printf("wa %f, sa %f\n", wa, sa);
return 0; }
多分・・・の回答
#include <stdio.h>
void wasa(double a, double b, double *pwa, double *psa)
{ *pwa = a + b; *psa = a - b; }
int main(void) {double a, b, *pa, *pb, wa, sa;
printf("a b: "); scanf("%lf %lf", &a, &b);
wasa(a, b, &wa, &sa);
printf("wa %f, sa %f\n", wa, sa);
return 0; }
>200 やっぱりよくわからんな・・・ 状態1~3が発生して、手順が全て示されるように、初期データを書いて、 実際に手順を適用してみてくれ。 ああ・・・ブロックサイズは説明用に小さくしてくれ。
>>200 パリティの意味が解らない。
ためしに、16bit、e=1/16でどんなことを求められているのか説明してくれ。
パリティーを用いた誤り訂正方法について とかいう卒論だったらイヤン。
205 :
デフォルトの名無しさん :2005/11/20(日) 23:26:55
201番の方、ありがとうございますw コンパイルしてみますね。
206 :
デフォルトの名無しさん :2005/11/20(日) 23:41:21
#include <stdio.h> void wasa(double a, double b, double *pwa, double *psa) { *pwa = a + b; *psa = a - b; } int main(void) {double a, b, *pa, *pb, wa, sa; printf("a b: "); scanf("%lf %lf", &a, &b); wasa(a, b, &wa, &sa); printf("wa %f, sa %f\n", wa, sa); return 0; } ↑で、できましたw 本当にありがとうござぃます~ また、お世話になると思いますがよろしくお願いしますw
>>167 みたいなソケット絡むと誰も解かないね この板。
ボクは知らないからダケド。
[1] 授業単元: プログラミング入門
[2] 問題文(含コード&リンク):
文字列10個を入力として受け付け、長さ上位3つを長い順に出力する。
同じ長さの文字列が入った場合には、後に入力されたものが高位とする。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C++
[4] 期限: 2005年11月24日
[5] その他の制限:
http://www9.plala.or.jp/sgwr-t/ ここの9章あたりまでしか習っていません
よろしくお願いします
>>207 正直面倒くさいしなあ.ネットワーク絡むと下手なプログラム書くとどこかで迷惑になるかもしれんし.
……167,コンパイラが bcc ってことは,winsock でいいんかな?
>>207 >>210 が書いてるように面倒+ちゃんと書かないと何処かの迷惑になりかねないし
そもそも完全に環境依存だからみんな及び腰になるんじゃまいか?
まぁそういう俺はまだソケットの扱い方分からないんだけどな
どこかにソケット関連のヘッダとそれで宣言されてる命令の一覧無い?
212 :
デフォルトの名無しさん :2005/11/21(月) 09:14:59
1] 授業単元: C++ [2] 問題文: 以下のクラス MyPair に対し, 演算子 == , !=, >=, >, <=, < を定義して下さい. ただし, これらの演算子は以下の性質を満たすようにして下さい. これらは全て MyPair 同士の比較である. fst が等しいとき, snd を比べてその比較の結果とする. fst が異なるとき, fst を比べてその比較の結果とする. class MyPair { int fst; int snd; public: MyPair(int f=0, int s=0) { fst = f; snd = s; } int get_fst() const { return fst; } int get_snd() const { return snd; } }; [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Microsoft Visual Studio.NET [3.3] 言語: C++ [4] 期限: 11月28日 [5] その他の制限:
213 :
デフォルトの名無しさん :2005/11/21(月) 09:31:24
1] 授業単元: C言語研究 [2] 問題文: 以下の条件を満たす template 関数 replicate を定義して下さい. template 引数(型引数) は一つであり, 以下の説明ではこれを T とする. replicate の引数は2つあり, 第一引数は T型, 第二引数は int型である. replicate はTの配列を第二引数で表される長さ分確保し, 各要素を第一引数の値で初期化した後, その配列の先頭へのポインタを返す. メモリ確保失敗等, 異常がある場合, replicate は NULL を返す. [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Microsoft Visual Studio.NET [3.3] 言語: C++ [4] 期限: 12月5日 [5] その他の制限:
>>213 #include <new>
#include <algorithm>
template <class T>
class auto_array {
public:
typedef T element_type;
explicit auto_array(int size) : pointee_(new T[size]) {}
~auto_array() throw() { delete[] pointee_; }
T* get(int n = 0) const { return &pointee_[n]; }
T* release()
{
T* oldPointee = pointee_;
pointee_ = 0;
return oldPointee;
}
private:
T* pointee_;
};
template <class T>
T* replicate(T t, int n)
{
try {
auto_array<T> p(n);
std::fill_n(p.get(), n, t);
return p.release();
}
catch (std::bad_alloc&) {
return 0;
}
}
215 :
デフォルトの名無しさん :2005/11/21(月) 10:12:59
>>212 >>213 の書き出しは
#include <iostream>
#include <string>
でおねがいします。
答えを書いてもらった後なのにすみません
216 :
デフォルトの名無しさん :2005/11/21(月) 10:38:13
[1] 授業単元: 初級C言語 [2] 問題文(含コード&リンク): 1から500までの整数から、3の倍数を1行に10個ずつ表示するプログラムを書きなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: 学校のpcなんでわかりません [3.3] 言語: C [4] 期限: 2005年11月22日12:40まで [5] その他の制限: for文を使えと指示されました。 初歩の初歩で申し訳ないんですけど、馬鹿文系の私をどなたか助けて下さい。
>>216 #include <stdio.h>
int main(void)
{
int i, j=0;
for (i=3;i<500;i=i+3) {
if (++j > 10) {
putchar('\n');
j = 0;
}
printf("%d ", i);
}
return 0;
}
脳内コンパイラだからエラーでるかもしれん
しかし文系でもCやるんだな
>>215 iostream も string も使わないじゃん。何で必要なんだよ?
220 :
デフォルトの名無しさん :2005/11/21(月) 11:31:26
>>217 即レスありがとうございます。学校行ったら実行してみます。
>>215 つーか、足したきゃ自分で勝手に足せよ。
222 :
デフォルトの名無しさん :2005/11/21(月) 11:54:00
1] 授業単元: C言語研究 [2] 問題文: このプログラムで #include <iostream> using namespace std; int main() { Quadratic q1(1,2,3); for(double i=0; i < 10 ; i += 0.5)cout << q1(i) << endl; return 0; } 出力が 3 4.25 6 8.25 11 14.25 18 22.25 27 32.25 38 44.25 51 58.25 66 74.25 83 92.25 102 112.25 となるようにクラスQuadraticの定義とそれを実行するためのmain文を書いて下さい. ただし, Quadraticは二次式を表すクラスです. この場合, q1は f(x) = 1*x*x + 2*x + 3 を意味します. [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Microsoft Visual Studio.NET [3.3] 言語: C++ [4] 期限: 12月5日 [5] その他:
223 :
デフォルトの名無しさん :2005/11/21(月) 11:56:35
>>222 書き忘れ
数字の出力は横ではなく縦一列でかまいません。
224 :
167 :2005/11/21(月) 12:24:21
>>167 の問題について
bcc でも gcc でもとりあえずそのように動いてくれれば仕様はどんなものでも良いです。
宿題なのでホント動いてくれるコードならなんでも・・・。
bcc なら winsock ですし gcc なら sys/sock ですし。出来れば bcc がよいと言う意味で bcc とは書きましたが。
>>222 // main()はそのままでいいんじゃないの?
struct Quadratic {
Quadratic(double a, double b, double c) : a(a), b(b), c(c) {}
double operator()(double x) {return a * x * x + b * x + c;}
private:
double a, b, c;
};
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 1, 1/2, 1/3, 1/4, ..., 1/100の値をそれぞれ 配列に保存し、保存した値を全て足し合わせること によって、 1 + 1/2 + 1/3 + ... + 1/100 を求めるプログラムを書きなさい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11月23日12:00まで [5] その他の制限: お願いします
228 :
167 :2005/11/21(月) 13:21:00
#include <stdio.h> int main(void){ int i; double n[100], sum = 0.0; for (i = 0; i < 100; i++){ n[i] = (double)1 / (i + 1); sum = sum + n[i]; } printf("%f\n", sum); return 0; }
230 :
むぅ :2005/11/21(月) 13:51:17
[1] 授業単元:アルゴリズム [2] 問題文(含コード&リンク):ファイルを読み込み、空白が早く現れる順に各行を並べ替えるプログラムを作成したいと思います。 空白とはスペース記号 0x20 とタブ 0x9 を意味します。空白の無い行は 0 番目に空白が現れたことにして下さい。 以下の手順にしたがって作成 ①始めに文字列を入れたら最初に空白が来る位置を求める関数を作りたいと思います。 その関数をテストするための文字列をいくつか作り、関数が出力しなければいけない値をそれぞれ求めなさい。 ②文字列を入れたら最初に空白が来る位置を求める関数を作りなさい。但し、空白で始まる文字列には 1, 空白がなければ 0 を返しなさい。 次に題意を満たすプログラムを作成しようと思います。そのプログラムをテストするようなファイルをいくつか作りなさい。 そして完成したプログラムが出力すると予想した値を書きなさい。 ③上で作成した関数を利用して、題意を満たすプログラムを実際に作成しなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc 2.9 [3.3] 言語: C,C++ [4] 期限: [2005年11月30日12:00まで [5] その他の制限: ファイルのサイズに上限を設けてはいけません。 何 MB のファイルでも読めるようになってなければいけません。 (配列は使うなということですか…) 但し、一行の文字制限が無いと入力バッファの処理が複雑になる場合、一行を高々 80 文字と仮定し、 一行を表す文字列としてだけ配列を使っても良い。 長くなってしまい申し訳ありません。 よろしくお願いします。
int itiban(const char* pline) { int a, b; char* space = strstr(" ", pline); char* tab = strstr("\t", pline); if(space && tab) { a = space - pline; b = tab - pline; return min(a, b); } else if(spacel) return space - pline; else if(tab) return tab - pline; retrun 0; } 空白位置を返す関数 こうですか?わかりません
[1] 授業単元:プログラミング [2] 問題文(s構造体配列のプログラムであるがこのプログラムを正しく直しなさい) [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC6.0 [3.3] 言語: C [4] 期限:11月20日 #include<stdio.h> main(void){ int idx; struct s_type{ int i; long l; }s[10]; for (idx=0;idx<10;idx++){ s.i[idx]=0; s.l[idx]=0; } return 0; } どう直せばいいのか分かりません。 よろしくお願いします。
ヒント:間違い探しレベル
>>232 s.i[idx]=0; → s[idx].i=0;
s.l[idx]=0; → s[idx].l=0;
#include <stdio.h> #include <stdlib.h> int main(void) { int idx; struct s_type { int i; long l; } s[10]; for (idx = 0; idx < sizeof(s) / sizeof(*s); ++idx) { s[idx].i = 0; s[idx].l = 0; } return EXIT_SUCCESS; }
>>231 ダメ。
・(どうでもいいけど)typoがある。
・strstr()ではなくstrchr()を使うべき。つーかそもそも、もっと便利な関数がある。
・先頭が空白のときに1を返すと言う問題の仕様を満たしていない。
#問題も蛸なんだけどね。
5-1 void initialize(int* acc) { int i; for(i=0; i < 5; i++) acc[i] = 0; } void dairy_input(int* acc) { int input, i; const char name[5][] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク",}; for(i=0; i < 5; i++) { printf("%s: ", name[i]); scanf("%d", &input); printf("\n"); } } void dairy_output(const int* acc) { int i; const char name[5][] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク",}; for(i=0; i < 5; i++) printf("%s: %d\n", name[i], acc[i]); } あとマンドクセ('A`)
void dairy_input(int* acc) { int input, i; const char name[5][] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク",}; for(i=0; i < 5; i++) { printf("%s: ", name[i]); scanf("%d", &input); acc[i] = input; // 抜けてた printf("\n"); } }
3をx86のショート実数にして16進数化するとどうなるんですか><
ショート実数なんていう言葉はない
仁志になるらしい
245 :
デフォルトの名無しさん :2005/11/21(月) 15:55:24
[1] 授業単元: C++演習 [2] 問題文(含コード&リンク):複数の整数が格納されたnumbers.datというファイルから読み込んだ各整数を整数型の配列に順に格納していき、 それらの整数をバブルソートとマージソートを用いてそれぞれ降順で整列するプログラムを作成しなさい。 この時、バブルソートはbubblesortという関数を、マージソートはmargesortという関数を作成し、 そこで各アルゴリズムに基づいた整列作業を実行させなさい。また、2つの整数の交換作業はswap関数という 関数を作成しそこで実行させなさい。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:g++ [3.3] 言語:C++ [4] 期限:2005年11月22日12時まで [5] その他の制限:よろしくお願いします。
[1] 授業単元: 情報特講 [2] 問題文(含コード&リンク): 自己参照構造体を使用したプログラムの作成: キーボードより、名前と身長を次々に入力し、 名前の入力がリターンのみのとき、入力を終了し、身長の一番高い人の 名前と身長、身長の一番低い人の名前と身長及び入力された人数を出力する。 ただ、名前はスペース入力が可能で、身長は実数での入力が可能とする。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: C [4] 期限: 2005年11月24日11:00まで [5] その他の制限: 条件:関数の使用、mallocの使用。 また、リストの中身も出力する。リストの形式は自由。 氏名 ? ああ ああ 身長 ? 170 氏名 ? AA AA 身長 ? 175 氏名 ? 入力は 2人です。 一番低い人は ああ ああ さん 170センチです。 一番高い人は AA AA さん 175センチです。 出力はこのような形でお願いします。よろしくお願いします。
[1] 授業単元:C言語Ⅰ [2] 問題文(含コード&リンク):引数4個のハノイの塔の再帰プログラムを作成しなさい [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC++6.0 [3.3] 言語:C [4] 期限:2005年11月25日まで [5] その他の制限:特に無し よろしくお願いします
>>238 エラーが出てしまいました。
error C2087: '<Unknown>' : 添字が不正です。
(14) : error C2117: 'りんご' : 指定された配列には、初期化子が多すぎます。
(14) : error C2117: 'みかん' : 指定された配列には、初期化子が多すぎます。
(14) : error C2117: 'イチゴ' : 指定された配列には、初期化子が多すぎます。
(14) : error C2117: 'ナシ' : 指定された配列には、初期化子が多すぎます。
(14) : error C2117: 'イチジク' : 指定された配列には、初期化子が多すぎます。
(28) : error C2087: '<Unknown>' : 添字が不正です。
: error C2117: 'りんご' : 指定された配列には、初期化子が多すぎます。
(28) : error C2117: 'みかん' : 指定された配列には、初期化子が多すぎます。
(28) : error C2117: 'イチゴ' : 指定された配列には、初期化子が多すぎます。
(28) : error C2117: 'ナシ' : 指定された配列には、初期化子が多すぎます。
(28) : error C2117: 'イチジク' : 指定された配列には、初期化子が多すぎます。
>>248 ×const char name[5][]
○const char name[][9]
自分で修正汁('A`)
void hanoi(int n, int a, int b, int c) { if (n > 0) { hanoi(n - 1, a, c, b); printf("Disk %d is moved from No.%d to %d\n", n, a, b); hanoi(n - 1, c, b, a); } }
>>235 課題の要求通りに動くにはこれだね。
>>250 がんばりました。なんで5-2とかもやってくれるとありがたい。
#include<stdio.h>
void initialize(int* acc, int* sum){
int i;
for(i=0; i < 5; i++) {sum[i] = 0;
acc[i] = 0;
}}
void dairy_input(int* acc)
{
int input, i;
const char name[][9] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク"};
for(i=0; i < 5; i++)
{ printf("%s: ", name[i]);scanf("%d", &input);
acc[i] = input;printf("\n");
} }
void dairy_output(const int* acc, int *sum)
{ int i;
const char name[][9] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク"};
for(i=0; i < 5; i++){sum[i] += acc[i];
printf("%s: %d\n", name[i], sum[i]);
}}
254 :
Ruby :2005/11/21(月) 20:45:45
スレ違いなのは分かっているのですが、 スレが見当たらないのでここで質問させてください。 すいませんです。 今学校でRubyを習っていて、 今日出た課題が解けなくて困っているのですが、 ここで質問は受け付けていただけるでしょうか…? プログラムに関してはRubyが始めて習う言語であり なんとも勝手が分かりません。 この質問自体トンチンカンだったらごめんなさい。
いいわけねえだろボケ
256 :
¥ ◆HndhSB4UQI :2005/11/21(月) 20:50:04
[1] 関数 [2] nの中からr個選ぶときの組み合わせの総数nCrを求めるプログラムを作成しなさい。ただし、関数名をcombinationと命名してやること。 (余裕のある人は、より大きな数を入力しても正しく表示されるように処理方法を工夫しなさい。) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: C言語 [4] 期限: [2005年11月25日22:00まで] [5] その他の制限: 標準ライブラリstdio.h・math.h・stdlib.hが使用可。 どうか宜しくお願いします。
258 :
Ruby :2005/11/21(月) 20:55:23
>>256 #include <stdio.h>
int conbinetaion(int,int);
int main()
{
printf("%d\n",conbination(7,2));
return 0;
}
int conbination(int n, int r)
{
if(r==0)return 1;
else return n*conbination(n-1,r-1);
}
else return n*conbination(n-1,r-1)/r; だった
>>253 それ、ぜんぜん仕様を満たしてないやん
const char food[][9] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク"};
void initialize(int acc[])
{
int i;
for(i=0; i < 5; i++) {
acc[i] = 0;
}
}
void dairy_input(int acc[])
{
int input, i;
for(i=0; i < 5; i++)
{
printf("%s: ", food[i]);
scanf("%d", &input);
acc[i] += input;
}
}
void dairy_output(const int acc[])
{
int i;
for(i=0; i < 5; i++)
{
printf("%s: %d\n", food[i], acc[i]);
}
}
>>253 /* 課題5-2 */
int main(void) {
int account[3][5], i, input;
for(i=0;i<3;i++)initialize(account[i]);
printf("初期化を完了しました.\n");
while(1)
{
printf("売上を入力しますか.プログラムを終了しますか.(入力:1,終了:99):");
scanf("%d", &input);
if(input == 99)
{
printf("終了します\n");
break;
}
printf("本日の売上を入力してください.\n");
for(i=0;i<3;i++)
{
printf("【%s】\n",store[i]);
dairy_input(account[i]);
}
printf("<<本日までの売上>>\n");
for(i=0;i<3;i++)
{
printf("【%s】\n",store[i]);
dairy_output(account[i]);
}
}
return 0;
}
264 :
超初心者 :2005/11/22(火) 00:00:26
課題『☆☆☆☆☆で表現されたバーを回転させながら横に移動させてみよう』 用語なし 期限は明日まで。 補足:windowsでlcc-win32っていうコンパイラ使ってます。chinou.3をインクルードしてCprint(x,y,文字列);っていうのを使うみたいなんですけど、お願いします!!
そんな標準ライブラリあったか?
266 :
超初心者 :2005/11/22(火) 00:04:44
ないんですか?てことは先生が勝手に作った関数なんですか?
268 :
超初心者 :2005/11/22(火) 00:12:47
あ~同じ課題だ・・・前に書き込みあったんですね・・失礼しました!
269 :
デフォルトの名無しさん :2005/11/22(火) 00:15:41
chinou.3なんて怪しげな標準ライブラリがあるわけない
272 :
名無し :2005/11/22(火) 02:39:21
[1] 授業単元:情報処理演習 [2] 問題文:a^e (mod n)を効率よく求めるプログラムを作成せよ。ってやつです。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2005年11月22日22:00まで [5] その他の制限:aとeの値は大きなものとする。 こんなんです。ヨロシクですー。
>>272 大きなものって多倍長?とりあえず多倍長使わない版。
ただしコンパイル通してない。
#include <stdio.h>
unsigned int powmod(unsigned int a, unsigned int e, unsigned int n)
{
unsigned int i, mod;
a %= n;
mod = 1;
for( i = 0x80000000 ; i ; i >>= 1 ) {
mod = (mod * mod) % n;
if( e & i ) mod = (mod * a) % n;
}
return mod;
}
int main(void)
{
// n <= 0xffff, e <= 0xffffffff で動作するはず
unsigned int a = 0x1234, e = 0xffffffff, n = 0x4321;
printf("%ud^%ud=%ud (mod %ud)\n", a, e, powmod(a, e, n), n);
return 0;
}
274 :
163 :2005/11/22(火) 03:12:20
亀レスで申し訳ないのですが、
>>150 さんのプログラムの
for (i = 0; moji[i]; ++i);
for (i--; i >= 0; --i) /* i--で\0の部分飛ばす */
の部分が、どういった動作をしているのかわかりません...。
説明していただける方いましたら、是非教えて欲しいです。
>>276 よく流れを確認しないで答えるから間違ってるかもしれないが
for (i = 0; moji[i]; ++i);で\0まで何文字あるか確認して
for (i--; i >= 0; --i)で\0を除いた文字数でループ じゃないだろうか
(・3・) エェー --iにするのはなんか意味あんの?
>>279 死ね。
特に意味はないんじゃないか?
While((--i) >= 0) ..
と書きかけてから書き直したとか。
Whileってなんだ… 死ぬのは俺だ
(・3・) エェー やっぱforだと同じ意味なんですNE whileだと意味違った気がするけDO
(・3・) エェー ぼるじょあの宿題スレはどこに行ったんだYO
(数値地図から)200×200の数の行列?を読み込まし、iと、i+1と、j、 j+1で四点をとり、その4点の一番大きい値から小さい方へいくプログラムがつくれません 参照できるサイトありますか?わかる人いますか?ヒントください>< もう三ヶ月悩んでます、助けて 馬鹿な為ほんとプログラムわからないんです
>>285 もうすこし実例挙げながら詳しく
あと
>>1 に沿って書いてくれるとありがたい
150です。
>>277 でだいたい説明されてるので略
for (i = 0; moji[i]; ++i); というか個人のクセで可能な限り
stdio.hで済ませようとするのでよくやります。最後の ; が嫌がらせ
と見られることがあるので、素直にstrlen()使った方がいいのかもしれません。
for (i--; i >= 0; --i)を
for ( ; i >= 0; --i)にして実行すればなぜ i-- 入れたのかが
わかると思います。あとは半角1文字ずつ後ろの方から出力して
printf("%c",moji[0]); (i=0最後の文字出力)
--i; (i=-1)
i>=0 が偽になりforループ終了 だと思います
この場合のi--と--iについては両方i--,--iに合わせても問題ないのですが
どっちのi--と聞かれるのがイヤかその時の気分かのどちらかです。
あとfor,whileに関してもその時のノリで決まります。do~whileなんて
使わねーよとかforでなく普通にwhile使おうよとか1文字変数連発やめれなど、
そのまま使うと採点者が嫌がるように書いてます。その辺は依頼者の方で
多少修正した方がいいと思う。
>>287 C++をやる気があるなら、どちらでもいいときには前置インクリメント(デクリメント)を
使う習慣をつけておいた方がいいよ。
#理由についてはスレ違いにつき割愛。
C++だからこそ後置だ! i++ C:++ ほらなんか似てるじゃないか(・∀・)
しまった変なもんついてたorz
291 :
デフォルトの名無しさん :2005/11/22(火) 13:22:50
[1] 授業単元:プログラミング [2] 環境 [2.1] OS:Linux [2.2] コンパイラ名とバージョン:gcc [2.3] 言語:C [3] 期限:11月25日14時 問題文:2題ですがすいません、どうかお願いします; NO1:線形探索でデータを見つけるプログラムを作成し、実行せよ。ただし、対象とするデータ構造は struct SportClub kaiin[]={555,"Yuki TERADA",222,"Kaho KANO",789,"Yuko FUKUDOME",444,"Seiko ANDO",456,"Mai YUKAWA",666,"Kyoko KAMIDOHZONO",123,"Yuasa OKADA",777,"Aya SAKATA", 111,"Yua SAITOU",333,"Noriko KIJIMA",0,"};と初期化すること。 <入出力例> Please input ID#:777 ID#:777 Name:Aya SAKATA Please input ID#:0 Not found! NO2: 以下の仕様に従って、番兵採用の効果を確認できるプログラムを作成し、実行せよ。 <仕様> 1、会員番号を格納した配列 int t_array[]={555,222,789,444,456,666,123,777,111,333,55}を作る 2、上記配列の1つの要素に対し、それがNO1のデータ構造に格納されているかどうかを番兵非採用探索プログラムでチェックする。 この操作を1億回繰り返し、その繰り返しに要した時間を求める、ただし、目的とする番号が格納されている場合は、Found!を一度だけ表示させる、また、格納されていなかった場合も、Not Found!を一度だけ表示させる 3、上記2を全要素に対して行い、11名分(t_array[]の要素数文)の会員検索に要した時間を求める 4、上記2,3を番兵採用線形探索プログラムに対して行う 2題もお願いして大変恐縮ですがどうかお願いします;
>>289 後置だとオブジェクトが複製されるからでしょ。
ネタニマジレス
>>291 なにその構造体宣言
いろいろおかしいぞ
296 :
291 :2005/11/22(火) 13:36:27
No1 番兵採用線形探索のフローチャートを示します 始まり | n←見つけたい会員番号 | kaiin[10].id_num←n(番兵値) | i←0(配列先頭) | ↑→→→→→→→| ↑ kaiin[i].id_num=nか?→-(YES)--↓ ↑ |(NO) i=10(番兵)か? ↑←--------← i←i+1 | ↓←←←←(YES)←↓ ↓ ↓ Not Foundを表示 (NO) ↓ ↓ ↓←←←←←←←←nameを表示 ↓ おわり
いろいろっつーかstructついてなかったら何なのかすら判断不明な物だな 配列か?とか思ってしまうかも
298 :
291 :2005/11/22(火) 13:39:42
295,297さん う~ん;問題文とか図とかそのままアップできればいいのですが、 アップの仕方わからないのです、でも問題文の写し間違えはありません;;
299 :
デフォルトの名無しさん :2005/11/22(火) 13:42:42
>>295 構造体宣言じゃなくてstruct SportClub[]型配列の宣言。
最後に"が一つ足りない点以外はおかしくないだろ。
>>291 #include <stdio.h>
typedef struct{int id;char name[64];}SportClub;
int main(){
int _t;
SportClub* psc;
SportClub kaiin[] = {
555,"Yuki TERADA",
222,"Kaho KANO",
789,"Yuko FUKUDOME",
444,"Seiko ANDO",
456,"Mai YUKAWA",
666,"Kyoko KAMIDOHZONO",
123,"Yuasa OKADA",
777,"Aya SAKATA",
111,"Yua SAITOU",
333,"Noriko KIJIMA",
0,""};
while(1){
printf("please input ID#:");
scanf("%d",&_t);
psc=kaiin;
while(1){
if(psc->id == 0){
printf("not found!\n");
break;}
if(_t==psc->id){
printf("%s\n",psc->name);
break;
}psc++;}
}return 0;}
>>291 #include <stdio.h>
int search(int); //番兵無し探索
int searchw(int);//番兵付き探索
#define ARRAYS 11
typedef struct{int id;char name[64];}SportClub;
SportClub kaiin[] = {
555,"Yuki TERADA",222,"Kaho KANO",789,"Yuko FUKUDOME",
444,"Seiko ANDO",456,"Mai YUKAWA",666,"Kyoko KAMIDOHZONO",
123,"Yuasa OKADA",777,"Aya SAKATA",111,"Yua SAITOU",
333,"Noriko KIJIMA",0,""};
int t_array[]={555,222,789,444,456,666,123,777,111,333,55};
int main(){
int (*pFunc)(int);
int ob = t_array[5];int i=0;
pFunc = search;
if(pFunc(ob)>0)printf("found\n");
else printf("not found\n");;
while(i++<100000000)pFunc(ob);
return 0;}
int search(int n){
int i;
for(i=0;i<ARRAYS && n!=kaiin[i].id;i++);
if(i<ARRAYS-1) return 1;
else return -1;}
int searchw(int n){
kaiin[ARRAYS-1].id=n;
int i=0;
while(kaiin[i++].id != n);
if(i<ARRAYS)return 1;
else return -1;}
上記のは2の2 問題の意図がいまいち掴みきれんので あってるかどうかはわからん 実行時間は/usr/bin/timeかなんかで計るんだろ
>>291 先生、うちのしょぼい環境でも前者37秒、後者37秒で有意差が得られません。
秒未満の精度の時刻測定は勝手にやってもらうってことでよければソース貼りますけど。
>>304 うちのマシンだと
>>302 のを用いて
番兵ありだと4.093000秒
番兵無しだと4.609000秒
プログラム自体が間違ってるんじゃ?
306 :
デフォルトの名無しさん :2005/11/22(火) 14:59:02
先生方すいません、質問です。 printf("%3f %f\n",s,ins[i]); ↑でsの値とins[i]に格納した値を出力しようとしたら 0.001000 1.#QNANO と出力されてしまいました。 どうゆうことでしょうか? 問題じゃなくてすいません。
not a number すれ違いじゃ
308 :
306 :2005/11/22(火) 15:06:10
すいませんでした。。。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 二つの(整数型)配列とその長さを引数とし、その共通の要素を新たな配列に格納するプログラムを作りなさい。 配列とその長さはmain関数で決めておくこととする。 [3] 環境 [3.1] OS: WindowsXP [3.2] Borland C++ Compiler [3.3] 言語: Cでお願いします [4] 期限: 2005年11月23日09:20まで [5] その他の制限: 特に制限なし よろしくお願いします。
310 :
304 :2005/11/22(火) 15:13:13
>>305 日本語読めてます?
標準関数の範囲でプログラミングしたからどちらも37秒なんですが。
#37.000秒だとか37.000000秒だと書いていないのだが。
CPUによって違うだけだろ 特にキャッシュ
標準関数てのが何を指してるのか不明だが
time.h使えばもっと正確に出せるだろ
プログラムが間違ってるんじゃないか、と言われてムキになる
>>304 萌え
314 :
304 :2005/11/22(火) 15:41:23
>>313 time.hつーか、time()だと秒単位。
#clock()はCLOCKS_PER_SECが環境依存だと思って避けた。
で、むきになってw、rusage使ってみたら3%強の処理時間差が出た。
#約37.7sec対約36.4sec。
まぁあれだ・・・納得いかないなら計ってる途中でなんか不具合でも起きたんだなぁ・・とか思え
[1] 授業単元:C言語(ポインタがテーマ)
[2] 問題文(含コード&リンク):3つの引数を取り、第1引数で指定されたint型の値を、第2引数で指定されたint型の値を基数として文字列に変換し、
第3引数で指定されたポインタが示す文字配列に格納する関数ltostr()を定義しなさい。
テストのためのmain()関数を記述したファイルに関数定義を記述すること。
ltostr()関数のプロトタイプ宣言、main()関数については変更を加えないこと。
(main関数は
>>317 に表示します)
第1引数の値は0以上の正の数、第2引数は2~36とする。時間に余裕があれば、第1引数が負の場合に先頭に"-"(マイナス)を付けるように拡張せよ。
実行例:
./radix 10 16 4096 1024 2047
4096(10) -> 1000(16)
1024(10) -> 400(16)
2047(10) -> 7FF(16)
./radix 16 10 1000 400 7FF
1000(16) -> 4096(10)
400(16) -> 1024(10)
7FF(16) -> 2047(10)
[3] 環境
[3.1] OS: Vine Linux
[3.2] コンパイラ名とバージョン: GNOME 1.4.0.4
[3.3] 言語: C
[4] 期限: 2005年11月24日18:00まで
[5] その他の制限: とくに指示されていません。
もしよろしければ宜しくお願いします。
>>316 です。
main関数を下に記載します。
#include <stdio.h>
#include <stdlib.h>
/* 第1引数のint型の数値を第2引数を基数として第3変数として指定した
配列に格納する関数 */
void ltostr( int number, int base, char *buf );
int main( int argc, char *argv[] ) {
int base1 = 10;
int base2 = 10;
int c;
char buf[256];
if ( argc < 4 ) {
fprintf( stderr, "Usage: %s [base1] [base2] [number]...\n", argv[0] );
exit(1);
}
else {
base1 = strtol( argv[1], NULL, 10 ); /* 第1引数をint型に直す */
base2 = strtol( argv[2], NULL, 10 ); /* 第2引数をint型に直す */
}
c = 3;
/*
>>317 の続きです。*/
while ( c < argc ) {
ltostr( strtol( argv[c], NULL, base1 ), base2, buf );
printf( "%s(%d) -> %s(%d)\n", argv[c], base1, buf, base2 );
c++;
}}
よろしくおねがいします。長文失礼しました。
>>309 #include <stdio.h>
int* compare(int[],int,int[],int);
int main()
{
int array1[10]={3,6,4,2,7,32,16,31,64,34};
int array2[7]={53,32,17,36,4,99,34};
int *dest,*p;
int i=0;
dest = compare(array1,10,array2,7);
while(dest[i] != -1)printf("%d\n",dest[i++]);
free(dest);
return 0;
}
int* compare(int ary1[],int len1,int ary2[],int len2)
{
int i,j,c=0;
int* buf = (int*)malloc(sizeof(int)*64);
for(i=0;i<64;i++)buf[i]=-1;
for(i=0;i<len1;i++){
for(j=0;j<len2;j++){
if(ary1[i]==ary2[j]){
buf[c++] = ary1[i];
}
}
}return buf;
}
こんな感じか?
>>316 void ltostr( int number, int base, char *buf ){
char code[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i=0;
while(number >= 1){
buf[i++] = code[number%base];
number/=base;
}
buf[i] = '\0';
strrev(buf);
}
321 :
名無し :2005/11/22(火) 16:28:59
>>103 のプログラム
#include <stdio.h>
#define M_DIM (3)
void sol_gj(double [][M_DIM+1],int);
void sol_g(double [][M_DIM+1],int);
int main(void) {
int n=M_DIM,k,j;
double a[M_DIM][M_DIM+1],aa[M_DIM][M_DIM+1];
for(k=0;k<n;k++){
printf("(%d)ax+by+cz=d a,b,c,d?",k+1);
scanf("%lf,%lf,%lf,%lf",&a[k][0],&a[k][1],&a[k][2],&a[k][3]);
}
for(k=0;k<n;k++)
for(j=0;j<n+1;j++)
aa[k][j]=a[k][j];
sol_gj(a,n);
for(k=0;k<n;k++)
for(j=0;j<n+1;j++)
a[k][j]=aa[k][j];
sol_g(a,n);
return 0;
}
>>316 static void ltos(int number, int base, char * buf)
{
static const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char * p;
if (number / base) {
ltos(number / base, base, buf);
}
p = strchr(buf, '\0');
p[0] = digits[number % base];
p[1] = '\0';
}
void ltostr(int number, int base, char * buf)
{
if (number < 0) {
buf[0] = '-';
ltostr(-number, base, buf + 1);
} else {
buf[0] = '\0';
ltos(number, base, buf);
}
}
323 :
名無し :2005/11/22(火) 16:35:21
>>321 続き
void sol_gj(double a[][M_DIM+1],int n){
int k,j,i;
double b;
char l[]="xyz";
for(k=0;k<n;k++) {
b = a[k][k];
for(j=0;j<n+1;j++) a[k][j] /= b;
for(i=0;i<n;i++){
if(i==k) continue;
b = -a[i][k];
for(j=0;j<n+1;j++) a[i][j] += (b*a[k][j]);
}
}
printf("Gauss-Jordan\n");
for(i=0;i<n;i++)
printf("%c=%f\n",l[i],a[i][n]);
}
324 :
名無し :2005/11/22(火) 16:36:24
>>323 続き
void sol_g(double a[][M_DIM+1],int n){
int k,j,i;
double b;
char l[]="xyz";
for(k=0;k<n;k++) {
b = a[k][k];
for(j=0;j<n+1;j++) a[k][j] /= b;
for(i=k+1;i<n;i++){
b = -a[i][k];
for(j=0;j<n+1;j++) a[i][j] += (b*a[k][j]);
}
}
for(k=n-2;k>=0;k--) {
for(j=k+1;j<n;j++)
a[k][n] -= (a[k][j] * a[j][n]);
}
printf("Gauss\n");
for(i=0;i<n;i++)
printf("%c=%f\n",l[i],a[i][n]);
}
325 :
名無し :2005/11/22(火) 16:37:02
>>324 続き
void sol_g(double a[][M_DIM+1],int n){
int k,j,i;
double b;
char l[]="xyz";
for(k=0;k<n;k++) {
b = a[k][k];
for(j=0;j<n+1;j++) a[k][j] /= b;
for(i=k+1;i<n;i++){
b = -a[i][k];
for(j=0;j<n+1;j++) a[i][j] += (b*a[k][j]);
}
}
for(k=n-2;k>=0;k--) {
for(j=k+1;j<n;j++)
a[k][n] -= (a[k][j] * a[j][n]);
}
printf("Gauss\n");
for(i=0;i<n;i++)
printf("%c=%f\n",l[i],a[i][n]);
}
x=1,y=2,Z=3となるように式を入れても答えがx=1.3*****,y=1.5*****,z=3.2*****などになり小数の値になります。
どこがおかしいか教えていただけないでしょうか?
>>320 strrev()は標準じゃないし、そのltostr()は0を変換できない。
じゃ、これでどうだ void ltostr( int number, int base, char *buf ){ char code[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int i=0; if(number<0){ buf[i++]='-'; number=-number; } if(number == 0)buf[i++]='0'; while(number > 0){ buf[i++] = code[number%base]; number/=base; } buf[i] = '\0'; if(buf[0]=='-')buf++; strrev(buf); } strrevと同等の機能をもつものなんて簡単に作れるが割愛
328 :
名無し :2005/11/22(火) 16:43:08
>>325 printf("%c=%f\n",l[i],a[i][n]);
ここがおかしいよ
いや、おかしくはないけど
330 :
329 :2005/11/22(火) 16:45:36
おっと勘違い
332 :
デフォルトの名無しさん :2005/11/22(火) 16:56:23
>>285 です、質問のが支離滅裂な文ですいません。説明もむずかしい(◎-◎;)
i方向に200j方向にも200の行列があるです、(数値地図50メートルメッシュ)。この数字を四点(iとi+1とjとj+1)での高さの値が一番高い所から、低いほうへ(→)矢印を引きたいのです
これをFor文で繰り返すことにより、(iとjを200)4万個引矢印を描写したいのです
わかりにくい文ですみませんが、どうかお願いします。
>>332 ここは宿題スレ。宿題でないならさようなら。
宿題なら>1参照。
どうでもいいが、それだけ判っていて3ヶ月も掛かって書けないなら諦めた方が早いぞ。
>>328 今試しにやってみたらちゃんとした結果が出たよ
>>316 です。携帯から失礼します。
ここで提案してくださったプログラムを実行したのですが、コンパイルエラーになってしまいました〇П_
>>332 ひょっとして
□□□□□□
□□□□□□
□□□□□□
こういう単純マトリクスを書こうとしてるの?
だとしたら大人しくCやC++をやり直したほうがいいぞ
>>335 コンパイルエラーの中身も書かずにどう対処しろと?
GNOMEはコンパイラじゃないし
>>336 いや、
→→↓→\↓
→/↑↓←↓
みたいのを書きたいのだろう。
>>316 コンパイルエラーなら実行できないだろ。
それに、>320、>327はstrrev()を自作する必要があるぞ。
あ、>322も#include <string.h>が必要だな。
やることもよくわからんが そもそも200*200って画面収まらんだろうどうすんだ? もすかすてAPIでも使って描きたいん?
>>332 よくわからんが、例えば
0 8
1 4
なら→
2 5
3 9
なら\
とかってしたいのか?
0 0
3 4
とかだったらどうするんだ?
問題出したやつに問題あるなこりゃ
だから宿題じゃないんだろ。 卒研か何かだったら大笑いだな。
345 :
322 :2005/11/22(火) 17:59:21
>>340 strchr()も使う必要なかった。
static char * ltos(int number, int base, char * buf)
{
static const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if (number / base) {
buf = ltos(number / base, base, buf);
}
buf[0] = digits[number % base];
return buf + 1;
}
void ltostr(int number, int base, char * buf)
{
if (number < 0) {
buf[0] = '-';
ltostr(-number, base, buf + 1);
} else {
ltos(number, base, buf)[0] = '\0';
}
}
346 :
デフォルトの名無しさん :2005/11/22(火) 18:00:10
00 34なら←です 書き方悪くてみすません、これでも一生懸命書き込んだですが。とにかく書きにくいものでして とりあえず↑の矢印を縦、横20ずつで400個かくプログラムわかれば教えてください(*_*)おながいします。神様
大きい方向へっての定義がわからんからな。 極端な話 10 01 なら→をどうするのか。
int i,j; for(i=0;i<20;i++){ for(j=0;j<20;j++)printf("↑"); printf("\n"); }
00 34なら←です まじわかんねぇよ 課題自体が意味不明な場合が多いから 宿題以外のものはご法度なんだよ
C++Builder相談室 Part15 こっちにもマル○してるw
雑談にも書き込んでるな 悩むだけ無駄だろ 諦めた方がいいと思う
(・3・) エェー 日本語がわかる子の質問待ってるYO
356 :
デフォルトの名無しさん :2005/11/22(火) 20:51:59
>>299 先程実行してみたところ、エラーがでて、
私には到底分かりそうにないです。
できれば教えて頂けないでしょうか。
俺は製作者ではないが エラーメッセージすら書かないのではどうしょうもないだろう メッセージがないなら、ない、と書け 我々はまた神でもないのだから
359 :
デフォルトの名無しさん :2005/11/22(火) 22:06:43
>>356 #include <string.h>
をコピペするのミスった。
コンパイルエラーならこれかも。
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
2~7文字のランダムな文字列を、リダイレクションによって読み込み、出力せよ
なお、下のような構造体[data]を使うこと。
struct data{
char str[8];
};
提示する文字列データは5千個しかないが、最大50万個まで対応できるようにしておくこと。
[3] 環境
[3.1] OS:Lnux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:できるなら明日まで
[5] その他の制限:
5千個の文字列データ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1137.txt 本来は、格納された文字列を使って文字列のソートを行う問題なのですが
ソートの部分は何とかなりそうなので読み込みの部分をお願いします。
361 :
名無し :2005/11/22(火) 22:50:34
362 :
356 :2005/11/22(火) 22:53:08
いろいろと不備があって申し訳ないです。エラーメッセージを書きます。
>>299 さんの方のエラーがエラー
E2141 tr070.c 21: 宣言の構文エラー
警告 W8065 tr070.c 82: プロトタイプ宣言のない関数 'setFormat3' の呼び出し(関数 a
ddMList3 )
警告 W8065 tr070.c 99: プロトタイプ宣言のない関数 'setFormat3' の呼び出し(関数 a
ddMList3 )
エラー E2141 tr070.c 150: 宣言の構文エラー
*** 2 errors in Compile ***
>>357 さんの方のエラー
エラー E2293 tr070.c 15: ) が必要
警告 W8065 tr070.c 158: プロトタイプ宣言のない関数 'memcpy' の呼び出し(関数 setF
ormat3 )
*** 1 errors in Compile ***
>>360 リダイレクションってのはな
標準入力の変わりにファイルから入力データを読み込むんだ
つまりscanf使えばそのままリダイレクションで読み込める
364 :
デフォルトの名無しさん :2005/11/22(火) 23:03:25
[1] 授業単元:プログラミング演習1 [2] 問題文(含コード&リンク): IF文と無限ループを使って、 10人の点数の上位3人(na1is ,na2is ,na3is ) 求める。 [3] 環境 [3.1] OS: うに [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等) [3.3] 言語: C [4] 期限: 2005年11月23日12時まで [5] その他の制限:習ったばっかりなので、難しいことはあまりわかりません。 よろしくお願いします
雲丹じゃコンピュータは動きませんよ。 せめて原生動物以外にしようよ...
>>364 #include <stdio.h>
int main(){
int na1is,na2is,na3is;
int score[] = {37,49,93,25,63,14,56,83,21,15};
int i;
na1is=na2is=na3is=0;
for(i=0;i<10;i++){
if(na1is<score[i]){
na3is=na2is;
na2is=na1is;
na1is=score[i];}
else if(na2is<score[i]){
na3is=na2is;
na2is=score[i];}
else if(na3is<score[i])
na3is=score[i];}
}
printf("1st:%d\n2nd:%d\n3rd:%d\n",na1is,na2is,na3is);
return 0;
}
あえてソートせずにやってみた
>>363 アドバイスありがとうございます!やっぱりそれで大丈夫なんですね…
一度ちょっと試してみようと思ったんですけど、上手く書けなくて…
#include<stdio.h>
struct data{
char str[8];
};
main(){
struct data D[500000];
int i=0, j;
while(1){
if() break;
scanf("%s",D[i].str);
i++;
}
for(j=0; j<i; j++) printf("%s",D[j].str);
}
こんな風に書いてみたんですけど、どうしてもifの条件の書き方が分からないんです…
他にもおかしい箇所がありましたら、手直しおねがいします。
・読み込む行を制限する ・EOF(ctrl-z)で終了する
>>367 scanfの返り値を使えば良い。
if(scanf("%s",D[i].str)!=1) break;
あと、本質的じゃないけどDの定義も下のように変更したほうが良い。
static struct data D[500000];
# 動的確保のほうがより良いけど
>>363 変数に代入するのはscanfでいいのだろうけど
リダイレクトで最大50万件の不定数のデータを扱うので
fopenみたいに1回開いて件数把握することができない
おそらく初めに struct data hoge[500000];と宣言できるかも不明
ひょっとしたら50万件mallocでとってしまうのがいいのかもしれない。
また
typedef struct data DAT;
DAT **temp;
temp = (DAT**)calloc(100,sizeof(DAT*));
for(i = 0; i < 100; i++){
*(temp+i) = (DAT*)calloc(5000,sizeof(DAT));
for(j=0;j<5000;j++)
scanf(ry
}
として5000件ごとに新たに領域を確保していくか
(forよりwhileの方が適してるとか管理が大変だったりするが
[123456] → [24][3456]とかしなきゃならないし)
勘違いだったらすまん
>>366 すいません。whhileも条件に入れて、もらえますか?
#include <stdio.h> int main(){ int na1is,na2is,na3is; int score[] = {37,49,93,25,63,14,56,83,21,15}; int i=0; na1is=na2is=na3is=0; while(1){ if(na1is<score[i]){ na3is=na2is; na2is=na1is; na1is=score[i];} else if(na2is<score[i]){ na3is=na2is; na2is=score[i];} else if(na3is<score[i]) na3is=score[i]; if(i++==9)break; } printf("1st:%d\n2nd:%d\n3rd:%d\n",na1is,na2is,na3is); return 0; } そんくらいてめーでやれよ
まぁD[500000]なんてのは 50*8MBものメモリが必要なわけで それはおいといて とりあえず while(fgets(buf,8,stdin)!=NULL)sscanf(buf,"%s\n",D[i++].str); とでもすればいい
勘違い 500*8KBだな
375 :
デフォルトの名無しさん :2005/11/23(水) 00:09:55
>>375 ここで研究室の名前を晒しておいて、ここで寄せられた回答をそのまま持っていく積もりかね。
当然、伊庭先生に筒抜けなんだがなぁ。
課題2のほうのやつやってみてるんだが 3.14・・じゃなくて2.73・・・ になる・・・ うーんどこがおかしいんだろ
[1] 授業単元:コンピュータ基礎 [2] 問題文:行と列を入力し、for文を使い模様を表示するプログラム 実行例 行?7 列?9 ━|━|━|━|━ |━|━|━|━| ━|━|━|━|━ |━|━|━|━| ━|━|━|━|━ |━|━|━|━| ━|━|━|━|━ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 11月23日22時まで [5] その他の制限:for文を使う
#include <stdio.h> int main(){ int i, j, x, y; char ptn[2][3] = {"━", "|"}; printf("行?"); scanf("%d", &y); printf("列?"); scanf("%d", &x); for(i = 0;i < y;i++){ for(j = 0;j < x;j++){ printf("%s", ptn[(i + j) % 2]); } printf("\n"); } return 0; }
>>382 あ、いや、原因は分かってちゃんと円周率に近い値を出すようにはなったんだが
針の角度を三角関数を用いずに一様に求める方法が分からん
針のY軸への射影を一様にすると期待通りの値が出ない
マクローリン展開でもしろってか?
>>384 マクローリン展開で解を出しちゃったらシミュレーションの意味がないじゃんw
>>384 while(1){
x=random()-RAND_MAX/2, y=random()-RAND_MAX/2;
if(x*x+y*y>RAND_MAX*RAND_MAX/4) continue;
r=sqrt(x*x+y*y);
s=y/r, c=x/r;
// 他の処理
}
これで三角関数使わなくても角度(というかsin,cos)出るよ。均等割合くらいで。
そこで悩んでるんだ 三角関数や円周率は使ってはいけないが cosxと同じような分布をもつものが必要なんだよ
>>386 それでやってみたけどやっぱりうまくいかん
とりあえずcosバージョンを載せとく
void subject2(int L,int N, unsigned int seed)
{
srand(seed);
double M=0;
double sy,dy;
int i;
double x,y,r,c;
for(i=0;i<N;i++){
sy=2.0*L*rand()/RAND_MAX;
dy = L*cos(rand());
if((sy <= 0 && sy+dy >= 0)||(sy >= 0 && sy+dy <= 0)||
(sy <= L && sy+dy >= L)||(sy >= L && sy+dy <= L)||
(sy <= 2*L && sy+dy >= 2*L)||(sy >= 2*L && sy+dy <= 2*L))M++;
}
printf("%lf\n",(2*N)/M);
}
389 :
デフォルトの名無しさん :2005/11/23(水) 02:48:38
[1] 授業単元:プログラミング基礎演習 [2] 問題文(含コード&リンク): 図のような矢がすり模様を出力するプログラムを 繰り返しと条件分岐,および一文字出力関数 putc() または putchar() を用いて作れ。 矢がすりの大きさや、模様の傾き度合い等は、変数を使い自由に値を指定できるようにすること。 ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等) [3.3] 言語: C [4] 期限:11/25
390 :
デフォルトの名無しさん :2005/11/23(水) 02:53:58
間違い ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** ***** *****
傾きってどんな風になるのだべか
ああ、そうか
大きさって、模様の大きさなのか全体の大きさなのかどっちだべ
394 :
デフォルトの名無しさん :2005/11/23(水) 03:11:29
たぶん全体の大きさだと思います。
ちょっと思いつきで進めたんでぐちゃぐちゃだが こうかな #include <stdio.h> int main(int argc,char** argv) { int tend=1; //アローの傾き int arrows=3; //折り返し回数 int width = 3; //ラインの幅 int col = 4; //アローの高さ int row = 4; //アローの横幅 int w,c,r,x,dx,s; dx = 1; for(r=0,x=1;r<(row-1)*2*arrows;r++,x+=dx){ if(x==row-1)dx=-dx; if(x==0)dx=-dx; for(s=0;s<x*tend;s++)printf(" "); for(c=0;c<col;c++){ for(w=0;w<width;w++)printf("*"); for(w=0;w<width;w++)printf(" "); } printf("\n"); } return 0; }
コメントはこうかな int tend=1; /* アローの傾き */ int arrows=3; /* 折り返し回数 */ int width = 4; /* アローの横幅 */ int col = 4; /* アローの本数 */ int row = 4; /* アローの縦幅 */ うまく説明できん
最終的にこんなんできました #include <stdio.h> int main(int argc,char** argv) { int tend=3; /* アローの傾き */ int refs=2; /* 折り返し回数 */ int width = 4; /* アローの横幅 */ int size = 6; /* アローの大きさ */ int arrows = 3; /* アローの本数 */ int r,w,i,s,a,x,dx=1; for(r=0,x=1;r<(size-1)*2*refs;r++,x+=dx) { if(x==size-1)dx=-dx; if(x==0)dx=-dx; for(i=0;i<x*tend;i++)printf(" "); for(a=0;a<arrows;a++) { for(w=0;w<width;w++)printf("*"); for(s=0;s<size;s++)printf(" "); } printf("\n"); } return 0; }
399 :
389 :2005/11/23(水) 04:17:43
ありがとうございます。 参考にしつつ明日自分でもう一度考えてみます。
あれwww 適当作りすぎたせいかCOMが必ず勝つプログラムじゃなくて COMが必ず負けるプログラムになっちゃったwww まぁいいか
ちょwwwwwそれ言わなきゃ
>>375 がそのまま出したかもしれないのにwwwwwwwwww
++[L:32個 M:0個 N:0個]++ COMの番です. COM=>Lから32個取りました. プレイヤーの勝ちです. なにこいつwwwwwwwww
勝利判定が間違ってるんじゃ テイルズの意思取りは最後の一個を取ったほうが負けだが この場合全ての石を0にしたほうが勝ちのようだぞ
>>378 伊庭さんに筒抜けかどうかはともかくとして少なくとも TA はいますお。
採点は TA がやるので…… ry
「TAへの周知徹底をお勧めします。」の一文を添えて通報s(ry
別に宿題を解いてやるスレなんだからそんなもんどうでもよくないか
どうせ去年も似たような状況だったし、そもそもシケプリの丸ごとコピーで提出してくる奴も例年 1/4 くらいいるし。 自発的に人に聞いて解こうとするのはまあマシなんじゃないかね。 ただ 2ch で聞かなくても伊庭さんのところの掲示板で聞いてくれればそれなりに答えるのになあ。
TA もこのスレに出入りしてんのかよw
ようしらんがこのスレの住人は毎年同じ問題を解かされているということか 中の人は違うかもしれんが まぁ日に何度か同じ問題がでることもあるしな
すみませんtextoutで文字を180度反転させる方法教えてるください pDC->TextOut(0,0,"あ"); この"あ"という文字を180度反転させるにはどうすればいいでしょうか?
(・3・) エェー こちらはAPIは受け付けていませんYO
オラオラどしたどしたぁあ!!
[1] 授業単元:プログラム演習 [2] 問題文(含コード&リンク): 任意の整数が与えられた時(例:4657の場合) 下記のように表示する再帰プログラムを作る 4 4 6 10 5 15 7 22 22 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC++6 [3.3] 言語:C [4] 期限:2005年11月26日0:00 [5] その他の制限:特に無し
[1] 授業単元:プログラム演習 [2] 問題文(含コード&リンク): 入力した文字列の全ての英字を削除する再帰プログラムを作りなさい 例:BC192と入力したら 192だけ表示される [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC++6 [3.3] 言語:C [4] 期限:2005年11月26日0:00 [5] その他の制限:特に無し よろしくお願いします
>>416 #include <stdio.h>
int main(){
int d,t;
int sum=0;
int k=0,i;
printf("数字を入力してください:");
scanf("%d",&d);
while(d>0){
t=d;
k=0;
while((t/10)!=0){t/=10;k++;}
sum+=t;
printf("%d %d\n",t,sum);
for(i=0;i<k;i++)t*=10;
d-=t;
}
printf("%d\n",sum);
return 0;
}
こんな感じかな
おっとぜんぜん再帰的じゃねーや やりなおしてきまつ
>>417 (・3・) エェー
#include<stdio.h>
int main(void)
{
char c;
int i;
while(1)
{
scanf("%c",&c);
if(c=='\n')break;
if(64>=c||(91<=c&&96>=c)||123<=c)
printf("%c",c);
}
return 0;
}
>>416 int n2d(int);
int main(){
int d;
printf("数字を入力してください:");
scanf("%d",&d);
printf("%d\n",n2d(d));
return 0;
}
int n2d(int number){
int sum;
if(number==0)return 0;
int d=number%10;
sum=d+n2d(number/10);
printf("%d %d\n",d,sum);
return sum;
}
よし再帰的
(・3・) エェー int iはいらねーYO
>>417 #include <stdio.h>
void delalpha(char* _str);
int main(){
char buf[256];
printf("文字を入力してください:");
scanf("%s",buf);
delalpha(buf);
return 0;
}
void delalpha(char* _str){
if(!(*_str >= 'a' && *_str <='z')&&
!(*_str >= 'A' && *_str <='Z'))putchar(*_str);
if(*_str!='\0')delalpha(_str+1);
}
(・3・) アルェー 再帰的でしたかYO
ここってぼるじょあスレだったんか
オラオラどしたどしたぁあ!! 今日はネタが少ないな 当然か、祭日だし
427 :
デフォルトの名無しさん :2005/11/23(水) 21:34:31
宿題ではないのですが以下のような課題が出ました。 1:MSXMLのパーサを簡単に扱えるクラスを作成する 読込・書出・要素、エレメントの読書き、程度の機能があればよい。 2:STLを使ったプログラムになれる。 map list vector ...etc 色々使って、なれておいてください。 以上を覚えるのにどちらか良いサイト、または書籍をご存知でしたら教えてください。 スレ違いかもしれませんが。。。
1:まずはbisonやflex等のジェネレータで作ってみて 機能を覚えつつ自作してみる 2:なれておいてください。
>>427 1: boost::spiritか、XML程度ならboost::regexでもいいかも
2: なれておいてください。
>>428 ,430
MSXMLのラッパーを作れってことではないのか?
MSXMLのヘルプって日本語版でてないんだっけ
DOMとかでアクセスするあれのことか。 確か昔日本語マニュアル読んだ気がするけど、最新のはしらね。
436 :
163 :2005/11/24(木) 01:19:22
437 :
389 :2005/11/24(木) 01:46:36
もう1問お願いします。 [1] 授業単元:プログラミング基礎演習 [2] 問題文(含コード&リンク): 以下のようにcos関数のグラフを出力するプログラムを作れ(定義域は[0,4π]程度)。通常 kterm は横80桁,縦24行ほどあるので,その範囲に指定された定義域分のグラフを出力すること。 なお,変数を使い定義域を指定できるようにすること。 またcos(x)だけではなくcos(2*x)やcos(x/2)なども表示できるようにプログラムしてあると良い。ちなみに,前問同様これも 繰り返しと条件分岐,および一文字出力関数 putc()または putchar() を用いて作れ。 ***** ***** *** ** * ** ** ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** ** ** * ** *** ***** ***** [3] 環境 [3.1] OS: unix [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等) [3.3] 言語: C [4] 期限:11/25
439 :
デフォルトの名無しさん :2005/11/24(木) 03:07:08
C使ってQR法で固有値求めるプログラム教えてください。
441 :
デフォルトの名無しさん :2005/11/24(木) 05:21:29
[1] 授業単元: コンピュータプログラミング [2] 問題文(含コード&リンク): 0 から 1までの間で一様な乱数Xi を M個発生させ、それを M個の同じ幅の「箱」に入れよう。 たとえば、M=4のときには、 [0.0,0.25],[0.25,0.5],[0.5,0.75],[0.75,1.0]の4つの箱になる。 その後で,乱数を受け取っていない箱の数Z を数える。このとき M/Z の値を求めるようなプログラムを書きなさい。 Mのさまざまな値(100~10000くらい)に対して実験して見よ。 Mの値を自由に入力できるようにすること。 [3] 環境 [3.1] OS: Mac [3.2] コンパイラ名とバージョン: gcc -ansi [3.3] 言語: C [4] 期限: 11/24 Mの値が固定ならできるのですが自由に入力できるようにしたらエラー出まくりで泣きました よろしくお願いします
プログラミングの授業で使うコンピュータが Mac って珍しいな
443 :
デフォルトの名無しさん :2005/11/24(木) 06:52:21
お前ら、前の晩に宿題出せよw 過疎してたのに...
444 :
デフォルトの名無しさん :2005/11/24(木) 06:56:24
>>441 ソースうp。
とりあえず、
int *hako; int M,i; double rvalue;
scanf("%d",&M);
hako = (int*)malloc(sizeof(int)*M);memset(hako,0,なんだったっけ?);
for(i=0;i<M;i++){rvalue=(double)(rand()%10000)/10000.0;
hako[rvalue * M]++;}
こんなかんじになるはず。
[1] 授業単元: C言語 [2] 問題文:底辺と高さを入力して三角形の面積を計算するプログラムを作れ。 1。ただし底辺等を引数で渡すと各計算をしてreturn文で計算結果を返す 関数を作り、この関数を使って、その計算を表示するプログラムを作りなさい。 2。又、これとは別に底辺等と計算結果を入れておくものを引数で渡すと 各計算をして計算結果を返す関数を作り、この関数を使って、その計算を表示するプログラムを 作りなさい 3:環境 dcc 4 期限: 11/24 returnを使えということでしょうか?よろしくお願いいたします
>>445 脳内コンパイルで試してないけど
1.
double triangle(double b, double h) {return (b*h)/2.0;}
int main(int argc, char **argv)
{
double base, height, ans;
printf("底辺="); scanf("%f", &base);
printf("高さ="); scanf("%f", &height);
ans = triangle(base, height);
printf("面積=%lf\n", ans);
return 0;
}
2.
void triangle(double b, double h, double *a) {*a=(b*h)/2.0;}
int main(int argc, char **argv)
{
double base, height, ans;
printf("底辺="); scanf("%f", &base);
printf("高さ="); scanf("%f", &height);
triangle(base, height, &ans);
printf("面積=%lf\n", ans);
return 0;
}
447 :
291 :2005/11/24(木) 15:55:52
302さんどうもありがとうございました、たすかりました 304さん、できればはっていただけると助かります。 ところで302さんのソースを以下のように実行すると bash-2.05b$ ./a.out found となるのですが、これはどういうことでしょうか? bash-2.05b$ /usr/bin/time Usage: /usr/bin/time [-apvV] [-f format] [-o file] [--append] [--verbose] [--portability] [--format=format] [--output=file] [--version] [--help] command [arg...] の使いかたもよくわからないのですが
>>447 実行結果は特に大事ではない
実行時間が大事なんだろ
foundなら検索した値がマッチしたってことだ
pFunc = search;なら番兵無し
pFunc = searchw;なら番兵あり
それぞれ変えて
/usr/bin/time ./a.outとやれば実行時間が出る
そこんとこ何も聞いてないのかよ
>>441 それ上で話題になった伊庭研のやつと一緒ジャン
ソースも上のほうにあるんでは?
>446 ありがとうございます、2のほうが結果が0になりうまくいかないのですが、 関数のタイプ等間違いはないでしょうか?
>>437 #include <stdio.h>
#include <math.h>
/*値域*/
#define VDOM 24
/*定義域*/
#define FDOM 60
int vcos[FDOM][VDOM]={0};
int main(){
int i,j;
double ang=0;
for(ang=0;ang<FDOM;ang++){
vcos[(int)ang][(int)(12+11*cos(4*M_PI*ang/FDOM))]=1;
}
for(i=0;i<VDOM;i++){
for(j=0;j<FDOM;j++){
if(vcos[j][i]==1)putchar('#');
else putchar(' ');
}
putchar('\n');
}
return 0;
}
とりあえず一部だけ
あとはがんがれ
>>450 #include <stdio.h>
void triangle(double b, double h, double *a) {*a=(b*h)/2.0;}
int main(int argc, char **argv)
{
double base, height, ans;
printf("底辺="); scanf("%lf", &base);
printf("高さ="); scanf("%lf", &height);
triangle(base, height, &ans);
printf("面積=%g\n", ans);
return 0;
}
453 :
ふみー :2005/11/24(木) 17:47:26
[1] 授業単元:アルゴリズム [2] 問題文:ファイルを読み込み、空白が早く現れる順に各行を並べ替えるプログラムを作成する。 空白とはスペース記号 0x20 とタブ 0x9 を意味し、空白の無い行は 0 番目に空白が現れた事にする。 ①文字列を入れたら最初に空白が来る位置を求める関数を作る。 その関数をテストするための文字列をいくつか作り、関数が出力しなければいけない値を それぞれ求める。また、そのような文字列を作った理由を解説しなさい。 ②文字列を入れたら最初に空白が来る位置を求める関数を作る。 但し、空白で始まる文字列には 1, 空白がなければ 0 を返す。 ③上で作成した関数を利用して、題意を満たすプログラムを実際に作成する。 [3] 環境 [3.1] OS:Windows [3.2] gcc 2.9 [3.3] 言語:C/C++ [4] 期限: [2005年11月31日17:00] [5] その他の制限:一行の文字制限が無いと入力バッファの処理が複雑になる場合、 一行を高々 80 文字と仮定し、一行を表す文字列としてだけ配列を使っても良い。 以上、長々とお願いします。
455 :
デフォルトの名無しさん :2005/11/24(木) 18:56:27
[1] 授業単元:プログラミング演習Ⅱ [2] 問題文: 平面座標上のn個(4個以上)の長方形の2つの対角となる点をキーボードから入力し、 一方向リストを使って表示するプログラムを作成せよ。 ただし、表示する時には長方形の面積も表示すること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:11/30まで [5] その他の制限:初心者にもわかりやすいようにお願いします。 どなたかご教授お願いします。
一方向リストを使って何を表示するんだよ
458 :
456 :2005/11/24(木) 20:47:14
>>457 長方形の4つの頂点を表示するそうです。
わかり辛くてすいません。
[1] 授業単元:情報処理B [2] 問題文(含コード&リンク):コンピューターにランダムな0~99を選ばせて数当てゲームを作れ 回数制限もつける(10回でお願いします) [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC 2003(たぶん) [3.3] 言語: C [4] 期限: 11月27日(日曜) できるだけ早めがいいです>< [5] その他の制限: かなり初歩的なことしか習ってないと思います。 一応参考として for (cownter=10;cownter>0;cownter--) 何らかの処理; if (条件) { break; } 乱数の発生 #include <atdlib.h> #include <time.h> srand((unsigned)time(NULL)) ans=rand()%100; と言うのが与えられているのでコレも含んだ感じで作ってもらえるとうれしいです。 あと、おもしろければおもいしろいほどイイ点数を付けてくれるそうなので、正解の±5以内だと「おしい!」的なことを言ったり 1行AAを入れてもらえればうれしいです。 よろしくおねがいします。
>>459 初歩的なところしかやってないらしいのでif文の条件を&&で繋げずに書いてみた。
おしい!とかあたり!とかは適当に自分で改変しる。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int cownte, ans, x;
srand((unsigned)time(NULL));
ans=rand()%100;
for(cownter=10;cownter>0;cownter--){
printf("数を当ててね(残り%d回)>",cownter);
scanf("%d",&x);
if(x==ans){
printf("あたり!\n");
break;
}
else if(x<=ans+5){
if(x>=ans-5){
printf("おしい!\n");
}else{
printf("はずれ\n");
}
}
else{
printf("はずれ\n");
}
}
return 0;
}
461 :
デフォルトの名無しさん :2005/11/24(木) 23:20:05
三次元での最小二乗法での近似って可能ですか?ググッても見当たりません。 わかる方いらっしゃいますでしょうか?
>>456 ちょっち長くなった
#include <stdio.h>
typedef struct LIST{
int x1;
int y1;
int x2;
int y2;
struct LIST *next;
}List;
List* init(int,int,int,int);
void release(List*);
List* init(int _x1, int _y1,int _x2, int _y2){
List* list = (List*)malloc(sizeof(List));
list->x1=_x1;
list->y1=_y1;
list->x2=_x2;
list->y2=_y2;
list->next = NULL;
return list;
}
void release(List* list){
if(list!=NULL){
if(list->next!=NULL)release(list->next);
free(list);
}
}
続き int main(){ List head; List *lp = &head; int d1,d2,d3,d4,height,width,i=1; char buf[80]; while(1){ printf("長方形の対角の二点を入力してください(x1 y1 x2 y2) :"); if(fgets(buf,80,stdin)==NULL)break; if(sscanf(buf,"%d %d %d %d\n",&d1,&d2,&d3,&d4)!=4){ printf("入力に誤りがあります.\n"); continue; } lp->next = init(d1,d2,d3,d4); lp = lp->next;} lp = head.next; while(lp!=NULL){ printf("%d:(%d %d),(%d %d),(%d %d),(%d,%d)",i++,lp->x1,lp->y1,lp->x2,lp->y1,lp->x1,lp->y2,lp->x2,lp->y2); height = (lp->y2 > lp->y1)? lp->y2-lp->y1 : lp->y1-lp->y2; width = (lp->x2 > lp->x1)? lp->x2-lp->x1 : lp->x1-lp->x2; printf(" 面積=%d\n",height*width); lp=lp->next;} release(head.next); return 0; } 入力ループはCtrl-Zで打ち切る なんかheadの指定方法が変だな Cでこういうのやるとオブジェクトの良さがわかる
オブジェクト指向の良さ、ね つーか今気づいたんだが Cの構造体もメソッドみたいなのつけられるようになったんだよな 忘れてた
>>461 直線なら
x座標、y座標で近似 y=ax+b(三次元上では平面)
y座標、z座標で近似 z=cy+d(三次元上では平面)
y=ax+b、 z=cy+dが交わってできる直線をなんとか求める
というのはどうだろう
>>466 int combination(int n,int r)
{
printf("combination(%d,%d)が呼ばれました\n", n, r);
:
(略)
:
>>466 int combination(int n,int r)
{
if(r==0||r==n){
printf("<%d,%d>\n",n,r);
return (1);
}
else if(r==1){
printf("<%d,%d>\n",n,r);
return (n);
}
printf("(%d,%d)->[%d,%d][%d,%d]\n",n,r,n-1,r-1,n-1,r);
return(combination(n-1,r-1)+combination(n-1,r));
}
注
<n,r>引数が n,rで呼び出されそこで完結したこと
(n,r)->… 引数が n,rで呼び出されさらに->以降の引数で呼び出しを行っていること
>>460 かなり助かりますた!!!!!!!!!!
全部見たことある感じでいい感じです><
本当にありがとうございました。
470 :
163 :2005/11/25(金) 00:36:25
471 :
304 :2005/11/25(金) 00:54:06
>>447 今日は直行直帰で会社に行かなかったから明日出社したら張るわさ。
>>453 うはwww同じ大学wwwww
ちなみに、ひとつ情報たしときます。
for文使ったらその時点でダメとのこと
453氏は線形リスト理解しとけ~
間違った listで表示させるとこはfor使っていいんだった ごめんよ
474 :
デフォルトの名無しさん :2005/11/25(金) 03:11:16
>>472 なにいってんのかわかんねぇから消えろよ
476 :
デフォルトの名無しさん :2005/11/25(金) 05:05:18
[1] 授業単元: プログラミング言語C++ [2] 問題文(含コード&リンク): std::stringを一つ受け取って、文字列内のスペースを除去したstd::stringを返す関数を作成せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc(バージョン不明) [3.3] 言語: C++ [4] 期限: 本日午前中 [5] その他の制限: STLの概要まで習いました。
>>476 erase-remove idiom. erase が必要なのを確認しておこう.
#include <string>
#include <algorithm>
std::string remove_space(std::string s) {
s.erase(std::remove(s.begin(), s.end(), ' '), s.end());
return s;
}
478 :
456 :2005/11/25(金) 09:36:08
>>462 >>463 プログラム、正常に作動しました。
おかげで助かりました。本当にありがとうございました。
479 :
304 :2005/11/25(金) 11:56:30
>>291 1/2
#include <sys/resource.h> // #include <time.h>
#include <stdbool.h>
#include <stdio.h>
struct SportClub {int id; char name[64];} kaiin[] = {
{555, "Yuki TERADA",}, {222, "Kaho KANO",}, {789, "Yuko FUKUDOME",}, {444, "Seiko ANDO",},
{456, "Mai YUKAWA",}, {666, "Kyoko KAMIDOHZONO",}, {123, "Yuasa OKADA",}, {777, "Aya SAKATA",},
{111, "Yua SAITOU",}, {333, "Noriko KIJIMA",}, {0, "",},
};
int t_array[]={555,222,789,444,456,666,123,777,111,333,55};
static bool findWithoutSentinel(struct SportClub const * target, unsigned nTarget, int id)
{
for (unsigned ic = 0; ic < nTarget; ++ic) {
if (id == target[ic].id) {
return true;
}
}
return false;
}
static bool findWithSentinel(struct SportClub const * target, unsigned nTarget, int id)
{
for (unsigned ic = 0; target[ic].id; ++ic) {
if (id == target[ic].id) {
return true;
}
}
return false;
}
480 :
304 :2005/11/25(金) 11:59:13
>>291 2/2
static inline unsigned long long getTime()
{
// return time(NULL); // sec
struct rusage ru;
getrusage(RUSAGE_SELF, &ru);
return ru.ru_utime.tv_sec * 1000 * 1000 + ru.ru_utime.tv_usec; // usec
}
static void find(bool sentinel)
{
printf("with%s sentinel.\n", sentinel ? "" : "out");
bool (* func)(struct SportClub const *, unsigned, int) = sentinel ? findWithSentinel : findWithoutSentinel;
const int Iteration = 100000000;
bool isFound;
unsigned long long before = getTime();
for (unsigned id = 0; id < sizeof(t_array) / sizeof(*t_array); ++id) {
for (unsigned ic = 0; ic < Iteration; ++ic) {
isFound = func(kaiin, sizeof(kaiin) / sizeof(*kaiin), t_array[id]);
}
printf("id:%d is %sFound !\n", t_array[id], isFound ? "" : "Not ");
}
unsigned long long after = getTime();
// printf("%lld sec.\n", after - before);
printf("%lld msec.\n", (after - before) / 1000);
}
int main()
{
find(false);
find(true);
return 0;
}
481 :
助けて :2005/11/25(金) 14:05:34
[1] 授業単元: 情報処理2 [2] 問題文(含コード&リンク): 神経衰弱を行うゲ-ムを作成すること。ただし 、カ-ドは52枚使用して、絵柄の区別はないものとする。 [3] 環境 [3.1] OS: windows [3.2] コンパイラ名とバージョン:Visual C++ 6.0 [4] 期限: 2005年11月27日[5] その他の制限: IF文 FOR文 配列 乱数を使用して作ります 助けてくださいお願いします
書き込むスレを変えたのなら前のスレに断りをいれようよ。 それとも、誘導されてきた旨を伝えるか、さ。 レスを見れば印象が悪いことぐらい分かるでしょ。 マルチなんてしたら教えるヤシが確実にいなくなっちゃうよ。
483 :
助けて :2005/11/25(金) 14:24:55
すみませんでした。これからは気をつけます。
>>481 ユーザインタフェースが分かんない。どんな入出力になればいいの?
まさかGUIなプログラムを作れとか言わないよね?
仮にGUIお願いっつーならマズグラ作れ 話はそれからだ
ぼるじょあを名乗るならちゃんと演じろよw
(;・3・) エェー しまった!忘れてた
(・3・) エェー 飽きたので名無しの名乗らせていただきますYO いままでありがとうございましたYO
>>486 (・3・)エェー まずグラ作ってYo
話はそれからだYo
今度は名前ぼるじょあじゃねーしw
東京電×大学の課題ってややこしいのが多いね・・・・
CUIでも作れるだろ 13×4配列に1-13のランダムな数字をひとつずつ入れて まだめくってないカードは「*」で表示し当て終わったカードは「 」で表示する プレイヤーには行列で選らばせればいいし COMはランダムに選べばいい という感じで誰か作ってやれ
>>492 あまりに簡単すぎるのでツマランからいいだしっぺのおまいが作ってやれ
俺はCUIで画面消す方法知らないからできん
なんか[とか使う奴じゃなかったっけ?
エスケープシーケンスによる端末制御は標準ではないからねぇ。
>>495 消さなくても順次スクロールすればよかろ。
system("CLS"); これでいいはず
>>498 見えててもいいじゃん。対人対戦じゃなければ。
>>499 それってゲイツ限定だろ
まぁかといって\x1b[2Jはゲイツじゃ使えないが
元の問題の投稿者を放置してインタフェースについて語るのはアレだと思うが
[1] 授業単元:コンピュータ基礎 [2] 問題文:関数rand()を使用して0~999の整数を10個作り、 画面に表示させた後、昇順に表示させるプログラム 実行例 564 448 669 974 917 483 14 743 155 946 14 155 448 483 564 669 743 917 946 974 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 11月27日22時まで [5] その他の制限: バブルソートを使いソートをする
>>504 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int a[10], i, j, tmp;
srand(time(NULL));
for (i = 0; i < 10; ++i) a[i] = 1000*rand()/RAND_MAX;
for (i = 0; i < 10; ++i) printf("%d ", a[i]); printf("\n");
for (i = 0; i < 10; ++i)
for (j = i+1; j < 10; ++j)
if (a[i] > a[j]) tmp = a[i], a[i] = a[j], a[j] = tmp;
for (i = 0; i < 10; ++i) printf("%d ", a[i]); printf("\n");
}
>>246 ですが、提出は結局間に合わなかったのですが、遅れても一応提出しな
いといけないので、
>>246 の課題をどなたか簡単に、できればswich文を使わ
ず、簡単な形でお願いできませんか。よろしくお願いします。
そんな簡単な問題が放置されてたなんてかわいそうだな
お前馬鹿?
>>299 に答えあるじゃん。
検索すらできないアホは質問するな。
>>508 たぶん
switch使ってるから気に入らなかったんだろうw
510 :
501 :2005/11/25(金) 17:30:26
やんじゃないの?
>>505 gccではRAND_MAX==INT_MAXだからかなり高い確率でオーバーフローするよ。それ
513 :
デフォルトの名無しさん :2005/11/25(金) 18:13:09
以下の仕様を満たす可変個の引数を持つ関数 char *concatStrings(char *format, ... ) を作り,プログラムと実行結果を示せ: * 関数 char *concatStrings(char *format, ... ) は第 1 引数 format に書式を指す文字列の先頭を指すポインタを受け取り,第 2 引数以降に文字列の先頭を指す char * 型のポインタを受け取る. * 関数 char *concatStrings(char *format, ... ) は,書式 format 中の %s を左から順に,第 2 引数以降のポインタが指す文字列で置き換えた文字列を 1 本作り,その新しく作られた文字列の先頭を指す char * 型のポインタを返り値とする. * 書式 format 中に %s 以外の形で % が現れた場合や,引数が正しくない場合に対する動作は不定でよい (エラー処理はさぼってよい). また,できれば以下の条件も満していることが望ましい: * 関数 char *concatStrings(char *format, ... ) が作る新しい文字列用のメモリ領域は必要最小限のサイズに抑える (メモリ領域を無駄に多く確保しない). * 書式 format 中の %% は % に置き換える.
514 :
デフォルトの名無しさん :2005/11/25(金) 18:19:07
>>513 以下の仕様を満たす質問を作り、プログラムと実行結果を求めよ。
>>1
515 :
デフォルトの名無しさん :2005/11/25(金) 18:22:39
[1] 授業単元:可個数 [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等) [3.3] 言語: C
char * concatStrings(char * format, ...) { va_list args; va_start(args, format); FILE * fp = fopen("/dev/null", "w"); size_t foo = vfprintf(fp, format, args); fclose(fp); char * bar = malloc(foo); vsprintf(bar, format, args); va_end; return bar; }
>>499 いや、それすると新しいコンソールを開いてCLSしてすぐ閉じるようになる場合もあるんだ。
>>518 221 名前: 電大さんが通る 投稿日: 2005/11/13(日) 02:36:32 [ vyr2Ul.s ]
今年も大騒ぎの予感がするデータ構造とアルゴリズムの課題1。
http://edu.net.c.dendai.ac.jp/ad/1/2005/kadai.html この課題が分からないとか終わってるだろwwwww
232 名前: 電大さんが通る 投稿日: 2005/11/20(日) 22:14:03 [ zfSDCTN. ]
宿題解くのはいいのだがわざとわかりくく間違えを混ぜてあるとか自慢げに初回の授業で言ってたな
それがストレス発散になるらしいぞ
ちょwwwwwwwwおまwwwwwwwww
坂本出てきてくれ、おまい結構いいやつじゃないか
>>516 nul文字のメモリの確保忘れますよ
#include<stdarg.h>
#include<stdlib.h>
#include<stdio.h>
char * concatStrings(char * format, ...){
va_list args;
va_start(args, format);
{FILE * fp = tmpfile();
size_t foo = vfprintf(fp, format, args);
char * bar = malloc(foo+1);
rewind(fp);
bar[fread(bar,1,foo,fp)]='\0';
fclose(fp);
va_end(args);
return bar;}
}
522 :
521 :2005/11/25(金) 19:05:32
×忘れます ×忘れてますよ
523 :
501 :2005/11/25(金) 19:05:39
>>481 え~ヘタレで時間かかった上に変なんでなんかゴメン
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define omote 1
#define ura 0
void gamen(long card[][13],long baka[][13]);
int main(void)
{
long card[4][13],unko[13],baka[4][13],i,j,k,tate[2],yoko[2],han=0,ok=0;
char end;
srand((unsigned)time(NULL));
for(i=0;i<13;i++)
unko[i] = 0;
for(i=0;i<4;i++)
for(j=0;j<13;j++)
{
baka[i][j] = ura;
while(1)
{
k = rand()%13+1;
if(unko[k-1]<4)
{
card[i][j] = k;
unko[k-1] += 1;
break;
524 :
501 :2005/11/25(金) 19:06:09
} } } while(1) { gamen(card,baka); puts(""); while(1) { if(ok==1) { gamen(card,baka); puts("ダメもう一回入力"); } puts("めくる場所を縦横の順に入力"); printf("縦(1~4):"); scanf("%ld",&tate[han%2]); printf("横(1~13):"); scanf("%ld",&yoko[han%2]); if(tate[han%2]>=1&&tate[han%2]<=4&&yoko[han%2]>=1&&yoko[han%2]<=13&&baka[tate[han%2]-1][yoko[han%2]-1]==0) { ok = 0; baka[tate[han%2]-1][yoko[han%2]-1] = 1; break; } else { ok = 1; system("CLS"); } } if(han%2==1)
525 :
501 :2005/11/25(金) 19:06:43
{ if(card[tate[0]-1][yoko[0]-1]!=card[tate[1]-1][yoko[1]-1]) { system("CLS"); gamen(card,baka); baka[tate[0]-1][yoko[0]-1] = 0; baka[tate[1]-1][yoko[1]-1] = 0; puts("そろいませんですた\n続ける?(y/n)"); while(1) { scanf("%c",&end); if(end=='y')break; if(end=='n')return 0; } } han++; } else han++; if(han>=52) break; system("CLS"); } return 0; }
526 :
501 :2005/11/25(金) 19:07:16
void gamen(long card[][13],long baka[][13]) { long i,j; char c[27] = {"①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬"}; printf(" "); for(i=0;i<13;i++) printf("%c%c ",c[i*2],c[i*2+1]); puts(""); for(i=0;i<4;i++) { printf("%c%c",c[i*2],c[i*2+1]); for(j=0;j<13;j++) { if(baka[i][j] == omote) printf("%3d ",card[i][j]); else printf(" * "); } puts(""); } }
527 :
501 :2005/11/25(金) 19:27:53
なんか変だから 最初に void sleep(int n); 追加して system("CLS"); gamen(card,baka); baka[tate[0]-1][yoko[0]-1] = 0; baka[tate[1]-1][yoko[1]-1] = 0; puts("そろいませんですた"); sleep(3); に変えて 最後に void sleep(int n) { time_t start,end; time(&start); while(time(&end),difftime(end,start)<n); } 追加して
528 :
坂本 :2005/11/25(金) 20:22:43
11月31日17:00が間近に迫って来て、憂鬱になって来た坂本が出てきましたよ。
>>519 結構いいやつかどうかは定かではないが、「わざと間違いを混ぜる」というのは嘘で、
本当は「動くけど、そのままじゃ提出できないようなプログラム」が正解。
皆様おせわになりますが、うちのできの悪い学生を宜しくお願いします。
529 :
デフォルトの名無しさん :2005/11/25(金) 20:43:32
>>508-509 講師に、今回のプログラムで
swichはないだろうと言われたので。
条件後付けされた感覚ですよ。
[1] 授業単元: プログラミングII [2] 問題文(含コード&リンク): 以下のプログラムを微分を関数微分から数値微分に変更したプログラムを完成させる Δxは打ち切り誤差DELTAと同じ値とする √5を計算できるように変更する [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC 6.0 [3.3] 言語: C++ [4] 期限: 2005年11月30日12:00まで [5] その他の制限: 特にありません。 数学の知識がぶっ飛んでいて、関数積分、数値積分の意味が分かりませんorz よろしくお願いします。
#include <stdio.h> #include <math.h> #define DELTA 0.000001 double f(double x); double df(double x); double newton(double ox); void main(void) { double x, ox; int num = 1; printf("初期値x0を指定してください:"); scanf("%lf", &ox); printf("反復回数 近似値\n"); while(1){ x = newton(ox); if(fabs(x - ox) < DELTA) break; printf("%d %lf\n", num++, x); ox = x; } printf("解の近似値は%lfです。\n", x); }
double f(double x) { return x*x*x + 2*x*x - 19*x -20; } double df(double x) { return 3*x*x + 4*x - 19; } double newton(double ox) { double x; x = ox - (f(ox)/df(ox)); return x; }
>>530 関数二つだけ書き換える
double f(double x)
{
return x*x-5;
}
double df(double x)
{
return (f(x+DELTA)-f(x)) / DELTA;
}
>>530 ありがとうございます。数学用語が分からないなんて、プログラム以前の問題でしたねorz
535 :
534 :2005/11/25(金) 21:19:51
537 :
デフォルトの名無しさん :2005/11/25(金) 21:35:50
>>505 乱数はrand()/RAND_MAX;ではなく
rand()%1000という形にしたい場合はどうすれば
rand()%1000にすりゃええじゃないか
>>538 ただしそれだと一様分布にならない可能性が高いが
1/32と1/33の違いだが 試行回数を増やしまくると響くな
だから何? ちょっとは自分で考えろよ
どこをどう変えたらエラーがでるのか小一時間問いつめ…たくはないなw
記念パピコ ヘ( ゚ρ゚)┌θペタッ
printf("Hello World\n"); return 0; 順番変わってないよ・・・
>>541 1/32 と 1/32 ってどこから出たの?
俺の計算では rand が一様乱数を生成するとして,X ≦ 647 の要素はどれも 0.00100000016 くらいの確率で出現し,
X > 647 の要素はどれも 0.00099999969 くらいの確率で出現することになったんだけど.
普通RAND_MAXは32768だからじゃねーの
だったら32/1000と33/1000だろう
おっと、俺もらりってるな 33/32768と32/32768か
552 :
547 :2005/11/26(土) 00:13:29
>>549 サンクス.「The value of the RAND_MAX macro shall be at least 32767」(ISO/IEC 9899:1999) か.
gcc の RAND_MAX が 2147483647 だったから 647 で考えてしまってた.
553 :
デフォルトの名無しさん :2005/11/26(土) 00:32:15
[1] 授業単元:プログラム [2] 問題文(含コード&リンク): int main(void) { char str[] = "abcd"; char *ptr = str; } 以上のような変数宣言をしたときの ポインタ変数のアドレス ポインタ変数が参照する配列変数の先頭アドレス ポインタ変数そのものの値(ポインタ変数に格納されている値) ポインタ変数の参照先データ をそれぞれポインタ変数を用いてポインタの位置を文字数分まで1つずつ進めながら16進数で確認するプログラムを作成 ただし,ポインタの位置を変化させても値が変化しないものについては,1回だけ表示すれば良い.なお,文字型のデータであっても16進数で文字コードを表示させれば良い. [3] 環境 [3.1] OS:winXP [3.2] コンパイラ名とバージョン:bcc32 [3.3] 言語: C++ [4] 期限: 2005まで [5] その他の制限: #include<stdio.h> まで。
>>246 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _PROFILE{
char name[32];
double height;
struct _PROFILE* next;
}profile;
profile* add(char* _str,double d){
if(strlen(_str)>32)return NULL;
profile* p = (profile*)malloc(sizeof(profile));
strcpy(p->name,_str);
p->height = d;
p->next = NULL;
return p;}
int remove(profile* p){if(p!=NULL){if(p->next!=NULL)remove(p);free(p);}}
void minmax(profile* p){
if(p!=NULL){
int c=0;profile *min=p,*max=p;
while(p!=NULL){
if(min->height > p->height)min=p;
if(max->height < p->height)max=p;
c++;
p = p->next;}
printf("入力は%d人です.\n",c);
printf("一番低い人は%sさん %gセンチです.\n",min->name,min->height);
printf("一番高い人は%sさん %gセンチです.\n",max->name,max->height); }}
int main(){ profile *head = NULL,*pp; char buf[32],n[32]; double h; while(1){ printf("氏名?: "); if(fgets(buf,32,stdin)==NULL)break; if(strlen(buf)<=1)break; buf[strlen(buf)-1]='\0'; strcpy(n,buf); printf("身長?: "); if(fgets(buf,32,stdin)==NULL)break; if(sscanf(buf,"%lf\n",&h)!=1)break; if(head==NULL){ pp = add(n,h); head = pp; }else{ pp->next = add(n,h); pp = pp->next; } } minmax(head); remove(head); return 0; } switchなし版 こんなもんで十分だろ
>>553 #include <stdio.h>
int main(){
char str[] = "abcd";
char *ptr = str;
while(*(ptr)!='\0'){
printf("ポインタ変数のアドレス:0x%X\n",&ptr);
printf("ポインタ変数が参照する配列変数の先頭アドレス:0x%X\n",ptr);
printf("ポインタ変数そのものの値:%s\n",ptr);
printf("ポインタ変数の参照先データ:%X\n",*ptr);
printf("\n+ポインタを進めます+\n");
ptr++;
}
return 0;
}
こういうことかな?
#include <stdio.h> int main(){ char str[] = "abcd"; char *ptr = str; printf("ポインタ変数のアドレス:0x%X\n",&ptr); printf("ポインタ変数が参照する配列変数の先頭アドレス:0x%X\n",str); while(*(ptr)!='\0'){ printf("ポインタ変数そのものの値:0x%X\n",ptr); printf("ポインタ変数の参照先データ:%Xh\n",*ptr); printf("\n+ポインタを進めます+\n"); ptr++; } return 0; } こうじゃないか?
[1] 授業単元:コンピュータ工学 [2] 問題文(含コード&リンク): 余弦定理を用いて三角形の一辺の長さを求めるプログラムを完成せよ。 ディスプレイから入力する値:2辺の長さ、辺の間の角度(単位は度) 出力する値:2辺の長さ、辺の間の角度、計算で求めた1辺の長さ 注:数学関数を使用すること、π=3.14 として計算。 ヒント 余弦定理 c^2=a^2+b^2-2abcosθ 使用する数学関数 sqrt( ),cos( ) [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: [2005年11月28日11:00まで] [5] その他の制限:入出力のところまでやりました。 よろしくお願いします。
>>558 #include <stdio.h>
#include <math.h>
#ifndef M_PI
#define M_PI 3.14/*1592653589793*/
#endif
int main(void)
{
double a, b, c, th;
do{printf("a=?");}while(scanf("%lf\n", &a)!=1);
do{printf("b=?");}while(scanf("%lf\n", &b)!=1);
do{printf("θ=?");}while(scanf("%lf\n", &th)!=1);
c = sqrt(a*a+b*b-2.0*a*b*cos(th*M_PI/180.0));
printf("c=%f\n", c);
return 0;
}
>>559 ありがとうございます!
本当に助かりました。
do{printf("a=?");}while(scanf("%*c%lf", &a)!=1); do{printf("b=?");}while(scanf("%*c%lf", &b)!=1); do{printf("θ=?");}while(scanf("%*c%lf", &th)!=1); のほうがいいな
間違えた do{printf("a=?");}while(scanf("%lf", &a)!=1); do{printf("b=?");}while(scanf("%*c%lf", &b)!=1); do{printf("θ=?");}while(scanf("%*c%lf", &th)!=1); だ
564 :
デフォルトの名無しさん :2005/11/26(土) 06:57:30
>>528 先生、11/31ってなんですか pgr
565 :
デフォルトの名無しさん :2005/11/26(土) 07:14:48
>>554 本当に、ありがとうございます。
ここの人達は物凄く親切ですね。
どうも、ありがとうございました。
>>564 9/31、4/31、2/31に次ぐ暗黒の日です
2/30、6/31もあてはまりますがマイナーです
567 :
デフォルトの名無しさん :2005/11/26(土) 10:09:55
568 :
坂本 :2005/11/26(土) 11:51:03
>>564 闇の締切日です。
>>453 この日にレポートを提出すると、大学生活一年分プレゼントのチャンス!!
ただ、危険な技なので自己責任で。
569 :
デフォルトの名無しさん :2005/11/26(土) 14:52:44
[1] 授業単元:プログラミング1 [2] 問題文:fgets()を用いて英文を改行、\0を含む128文字以内で1行入力し、文中に含まれる 単語の長さと単語の出現回数の統計(1,2,3,4,5,6,7,8,9,10,それ以上に分ける)を表示する 処理を繰り返すプログラムを作成しなさい。単語境界は空白文字とし、単語の要素は 英数字記号なら何でも良い。出現回数を単語の長さに応じて記録するlen[]とい う整数型配列をグローバル変数として定義。 入力行を引数としてlen []に値を設定する関数を定義し、main関数から呼び出すようにする。 。sscanf()を用い、書式指定子に%sを多用してはならない。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2005年11月28日16:10まで [5] その他の制限:stdio.h,string.h内ポインタは使用禁止です。 よろしくお願いしますm(__)m
570 :
246 :2005/11/26(土) 15:04:10
>>554-555 エラー E2140 test.c 12: ここでは宣言はできない(関数 add )
エラー E2356 test.c 17: 'remove' の再宣言で型が一致していない
エラー E2344 c:\Borland\Bcc55\include\stdio.h 193: 一つ前の
'remove' の定義位置
警告 W8075 test.c 17: 問題のあるポインタの変換(関数 remove )
警告 W8070 test.c 17: 関数は値を返すべき(関数 remove )
警告 W8075 test.c 56: 問題のあるポインタの変換(関数 main )
*** 3 errors in Compile ***
というエラーがでました。助けてください。お願いします。
>>569 1.
%sは何回までなら使用していいのか。
2.
>[5] その他の制限:stdio.h,string.h内ポインタは使用禁止です。
stdinは使うなということか?
572 :
レン :2005/11/26(土) 15:36:23
[1] 授業単元:二分探索法 [2] 問題文:0からN(適当な自然数)までの数を一つ利用者に思ってもらう。計算機は当て推量(ゲスguess)で 0からNまでの数の一つを出力する。計算機のゲスが当たっていたらG(Good)、計算機のゲスした数より思った数が大きければL(Large)、 小さいならばS(Small)を入力してもらって、出来るだけ少ない回数のゲスで利用者の思った数を当てるゲームを作る。 <入力>"G"、"L"、"S"。 <操作>利用者の"L"または"S"の回答によって利用者の思った数の範囲を狭めてゆく、利用者の思った数が0からNまでのどの数であっても、 出来るだけ少ないゲスで利用者の思った数を当てるように工夫する。 <出力>0からNまでの数(ゲス)。 <考察>もっとゲスの回数を少なくする可能性のあるアルゴリズムは? [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:[2005年11月30日9:00まで] [5] その他の制限:なし よろしくお願いいたします。
573 :
デフォルトの名無しさん :2005/11/26(土) 15:38:03
1. >%sは何回までなら使用していいのか。 わかりませんが、たとえば128文字ならスペース区切りで 64個の%sを用いればできるらしいのですが、そういった使い方 は禁止と言われました。 2. >stdinは使うなということか? 日本語がまずかったです。すみません。 stdio.hとstring.hに含まれる標準関数は 使用可能です。
>>574 様。
ありがとうございました。
これからは気をつけますm(__)m
>>572 考察の部分だけ.
次のメタアルゴリズム(アルゴリズムに対するアルゴリズム)を考える:
入力: アルゴリズム(既知の情報から次のゲスを決める戦略)
出力: 数
1. I = [0,N] とする.
2. これまで得られている情報から,アルゴリズムが x ∈ I を選び出すとき,
I として I∩[0,x) と I∩(x,N] の長いほうを再設定する.
3. I の要素数が 1 になるまで 2 を繰り返す.要素数が 1 ならそれを返す.
このメタアルゴリズムによって得られる数は,構成方法から明らかに
与えられたアルゴリズムの対してその繰り返し回数だけのゲスを必要とする.
その回数は区間の長いほうを常に選んだことから,二分探索以上になる.
従って,任意のアルゴリズムはこのメタアルゴリズムが選ぶ数に対して,
二分探索以上のゲス回数がかかるので,二分探索が最良のアルゴリズム.
>>570 ン、プロトタイプ宣言して
メイン関数を一番上に持って行けば直ると思うぞ
579 :
246 :2005/11/26(土) 18:20:25
>>578 度々すみません。教科書片手に戦いましたが、分かりそうにないです。
お手数かけますが、馬鹿な私にも分かるように教えてください。
お願いします。
だが断る! この578が最も好きな事のひとつは 自分で馬鹿だと思ってるやつに『NO』と断ってやる事だ…
プロトタイプ宣言しなくても警告出るくらいじゃないのか・・・
remove()は標準関数に同じ名前が在るから使っちゃ駄目。
_PROFILEはどの文脈でも予約済みだから使用禁止。
ブロックの先頭以外でのローカル識別子宣言は
>>246 は禁止。
>>584 番兵使用/未使用で2通りのマージソートを書けと言うことか
大量にサンプルコードあるんだから自分で探せ
つーか、なんでマージソート書かせておいてmainのみなんだ
別関数化した方が使い回し効いて便利なわけだが
586 :
584 :2005/11/26(土) 20:59:55
>>585 ソートはマージソート以外の方法で行えとの指定がありました。
> 任意のデータ列2つをキーボードから入力し、 >それぞれのデータ列を整列(ソート)させたうえでマージ >(どちらの解法でも構わない)を行うプログラムを作成せよ。 >(マージソートではないので、各データ列を個別に整列させた後マージを行うこと。) >ただし、以下の点に注意すること これのことか
>>586 広義でのマージソートじゃまいか?
まぁ流し読みだった俺も悪いんだが
マーチングキューブ法って知ってる? 誰かおせーてくれよん
590 :
デフォルトの名無しさん :2005/11/27(日) 01:55:25
1] 授業単元: プログラミング [2] 問題文;ファイルから データを読み込み、人口の多い順に都道府県を出力せよ [3]環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: lcc-win32 [4] 期限:2005年11月29日火曜 都道府県とそれぞれの人口が書いてあるファイルあって、そこからファイルを読み込むまではできるんですけど、 人口が多い順に並び替えるのが、どうやればいいかわからないんでおしえてください!!
いぜんどっかで見たようなプログラムだな データファイルさらせよぼけぇ
592 :
デフォルトの名無しさん :2005/11/27(日) 02:25:29
>>592 <string>を使っていいか否かによって手間が結構変わる。
[1] 授業単元:C 言語 [2] 問題文:度数分布 関数rand()を使用して0~9の整数を作る。これを100回実行して、 各数値の出現回数をn[0]~n[9]の10個の配列にセット、 これを用いて次のような棒グラフを表示するプログラム。 実行例 0:*********** 1:********* 2:***** 3:***************** 4:*********** 5:********** 6:****** 7:********** 8:********** 9:*********** [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 11月28日20時まで [5] その他の制限: 配列を使う
>>594 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, n[10];
srand(time(NULL)); // 乱数系列初期化
for( i = 0 ; i < 10 ; i++ ) n[i] = 0; // 初期化
for( i = 0 ; i < 100 ; i++ ) n[rand()%10]++;
for( i = 0 ; i < 10 ; i++ ) {
printf("%d:", i);
for( ; n[i] > 0 ; n[i]-- ) printf("*"); // putchar('*'); も可
printf("\n"); // puts(""); も可
}
return 0;
}
598 :
595 :2005/11/27(日) 03:32:39
ミス訂正。 × int pos = min( line.find(' '), line.find('\n') ); ○ int pos = min( line.find(' '), line.find('\t') ); × m.insert( Pair( max(pos,INT_MIN), line )); ○ m.insert( Pair( pos, line ));
600 :
デフォルトの名無しさん :2005/11/27(日) 04:31:27
[1] 授業単元: プログラム [2] 問題文(含コード&リンク): ポインタ変数を用いて入力した文字列を反転するプログラム [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: どちらでも可 [4] 期限: [無期限] [5] その他の制限: #include<stdio.h>だけ
>>600 #include <stdio.h>
void st_reverse(char *,char *);
int main() {
char s[100],d[100];
scanf("%[^\n]",s);
st_reverse(s,d);
printf("_%s_\n_%s_\n",s,d);
return 0;
}
void st_reverse(char *s,char *d){
char* t=s;
if(*t){
while(*(++t));
d-=s-t;*d--=0;t=s;
while(*t)*d--=*t++;
}else *d^=*d;
}
81回ファイルを読み直すとかいってアホだろ
作ったプログラムの二つともでファイル閉じてない・・・hahaha
608 :
246 :2005/11/27(日) 10:44:08
>>582-583 「remove」の所を強引に「remo」に変えた所、エラーは減りました。
エラー E2140 test.c 12: ここでは宣言はできない(関数 add )
警告 W8070 test.c 17: 関数は値を返すべき(関数 remo )
頑張ってみたけど分かりません。助けてください。お願いします。
610 :
デフォルトの名無しさん :2005/11/27(日) 10:52:25
[1]基礎情報処理 [2]10000 までのすべての素数をできるだけ効率のいい方法で求めなさい。 [3] 環境 [3.1] Windows [3.3] C [4] 11月29日火曜まで [5] とくになし よろしくお願いいたします。
素数のデータベースを作る。 以上
2から10000の平方根までふるいにかける
エラトステネスのふるいを使う
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): abc.txtからデータを読み込み、人口の多い都道府県順に出力せよ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: lcc [3.3] 言語: C言語 [4] 期限: 火曜日まで [5] その他の制限: 今、配列と構造体をやっています。「abc.txt」とは、 北海道56590 青森1462 岩手1402 宮城2373 秋田116 山形1230 福島2113 茨城299 このようなファイルです。ちなみに、 #include <stdio.h> int main(){ char ken[12]; double num; FILE *fp; fp=fopen("pop.txt","r"); while(fscanf(fp,"%s\t%lf",ken, &num)!=EOF){ printf("%s\t%f \n", ken, num ); } return 0; } に付け加えるようにと言われました。画面に表示されるのは、県名のみです。 いろいろごちゃごちゃしていますが、なにとぞよろしくお願いします。
すみません。pop.txtのところがabc.txtです。 ファイル名は何でもいいです。
616 :
デフォルトの名無しさん :2005/11/27(日) 11:38:34
[1] 授業単元: [2] 問題文(含コード&リンク): 画像一画素あたりのRGBそれぞれの平均の値を数値で取得するプログラムを書け。 [3] 環境 [3.1] OS: FreeBSD [3.3] C [4] 11月30日水曜まで [5] とくになし
>>614 データの県と人口の間にタブが入っているという前提で。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define DATA_MAX 256
typedef struct {char ken[12]; double num; } data_t;
int cmp_of_num(const void *a, const void *b){ return (*(data_t**)b)->num -(*(data_t**)a)->num; }
int main()
{
data_t DataBase[DATA_MAX] = {0};
data_t *pDataBase[DATA_MAX] = {0};
int i, numOfData;
FILE *fp;
if(!(fp = fopen("abc.txt","r"))) return -1;
for(i = 0; i < DATA_MAX; ++i)
{
if(i == DATA_MAX || fscanf(fp,"%s\t%lf",DataBase[i].ken, &DataBase[i].num) == EOF) break;
pDataBase[i] = &DataBase[i];
}
numOfData = i;
qsort(pDataBase, numOfData, sizeof(data_t*), cmp_of_num);
for(i = 0; i < numOfData; ++i) printf("%s\t%f \n", pDataBase[i]->ken, pDataBase[i]->num );
close(fp);
return 0;
}
そういや、
>>470 誰か解けた?答えが見当たらない。
問題文の意味はなんとか分かる。
が、プログラム作成はオレには無理だorz
そもそもC言語でできるのかな?
>>609 テスト時は109万行(50MB)のテキストで試したけど
1行80字以上のテキストに仮対応(1行1024文字までだけど)するなら
#include<stdio.h> の次行に
#include N (1024) 追加
char d[81]; → char d[N+1];
for(i=0;i<81;i++){ → for(i=0;i<N+1;i++){
while(fgets(d,80,f)!=NULL){ → while(fgets(d,N,f)!=NULL){
if(!a[i] || i>80)return 0; → if(!a[i])return 0;/* やっぱいらないか */
の5ヶ所を修正
また20-22行のwhile文内でiより大きい最小の整数を見つけておくと
無駄なループを省ける
inti; → int i=0,t,c; に修正後
while(i<N+1){
fseek(f,0,SEEK_SET);/* 初めから読み直し */
t=N+1;
while(fgets(d,N,f)!=NULL){
if((c=s(d))==i) fputs(d,g);
/* iより大きい最小の空白開始位置がどこにあるかの目星をつける */
if(c>i && c<=t) t=c;
}
i=t;
}
いわゆる char d[N+1] が気に入らないというのならお手上げですorz
623 :
デフォルトの名無しさん :2005/11/27(日) 14:13:59
>>616 データ形式定義よろ。
まあこういう課題ならふつうはJPEG2000だろうが。
624 :
デフォルトの名無しさん :2005/11/27(日) 14:48:42
[1]データベース
[2]簡単なDBMSを作る
[3]windowsXP
C言語
[4]2005/11/28 (月)
問題 search1.txtまたはsearch2.txtを読み込んで、次にそれら1行目に書かれている
gakusei.csvを読み込み、2行目に書かれている項目を表示する。
↓search1.txtの中身
gakusei.csv
学籍番号,氏名,電話番号
↓search2.txtの中身
gakusei.csv
氏名,住所
↓gakuseki.csvの中身
学籍番号,氏名,住所,電話番号
401,市川雅紀,つくば市,2985421
402,海老原徹,潮来市,2894654
403,小林誠二,水戸市,2924583
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1159.lzh マジ切羽詰ってるんでよろしくお願いしますm(__)m
それはDBMSではない。
めんどくさそうだからやらない
>>624 つまりsearch*.txtを読み込んで
select (2行目) from (1行目);
だと解釈しろってことか?
Cだとめんどいな。 perl向きだ。
つか、むちゃくちゃだろ。 最低レベルのDB作るにしてもレベル低い、 DBを実装を除いて教えているかと思うと、まったくの無知。 これじゃ、Cを教えているだけwwww
>>628 perlならcsv読み込んで、一行目を,で区切った上でハッシュのキーにしておけば
楽に読み出せるもんな
C++ならmap使えばどうにか出来なくも無いが、面倒だな
Cじゃ何もないから自力でやらないとダメだし面倒杉
超簡単な課題にしてやると先生が言ってたので・・・(´Д`;)
Accessとかを習う授業ではなく、データベース管理はどういう仕組みになってるかって言う
授業なもので・・・orz
>>627 SQLだとそういうことと思います。
だったらなおさらCでやる意味無いな。
633 :
624 :2005/11/27(日) 15:41:50
やっぱ別の言語の方が簡単にできる系ですか? 一応先生がそのプログラムをテストできる言語なら何でも良いとのことです。 それからソースコードと実行例のみ提出すれば良いらしいです。
>>633 そもそも文字列処理はPerlの十八番
言語指定無しならわざわざC/C++でやる意味が無い
(・3・) エェー ファイル処理忘れましたYO
>>619 パワポ入ってないので詳しい定義等がわからn
>>619 計算可能である限り C で書けんことはない.
が,俺には 470 の問題の意味が全然わからんので無理.
これまで回答が無いのも問題をきちんと理解できた奴が居ないからだと思ってた.
具体的に何をしたらいいか,きちんとした定義で書いてくれれば,やったるよ.
>>621 char d[N+1] が気に入らない、以前に
プログラムのボトルネックとなるファイル入出力を
無駄に81回も1024回も繰り返して、更に肥大させてどうするんだよ
プログラミングじゃなくて計算機の構造を勉強しなおせ
640 :
619 :2005/11/27(日) 18:33:38
641 :
デフォルトの名無しさん :2005/11/27(日) 19:07:00
[1] 授業単元: program [2] 問題文(含コード&リンク): ポインタ変数を用いて入力した文字列から指定した文字を検索するプログラム。 [3] 環境 [3.1] OS:Windows/Linux [3.2] コンパイラ名とバージョン: .NET [3.3] 言語: c++ [4] 期限: 無期限 [5] その他の制限: #include<stdio.h> int main(void) だけでお願いします。
みんなIQテストやってるから無理
>>640 「誤り訂正」というよりも,「区間に渡る xor」だけを用いて,ビット列の 1 になってる場所を
特定して 0 に置き換えていくときの「区間に渡る xor」の回数を求める感じなのか.
図5.wmf, ブロックのサイズは,全ビット数/誤り個数 に定められてるものなの?
あと,「半分にしたブロックまで記憶」って意味がわからん.
644 :
デフォルトの名無しさん :2005/11/27(日) 20:13:42
>>641 ジャンクすぽーつみている俺がやってきましたよ。
#include<stdio.h>
int main(void)
{
char src[1000]="abcdefghijklmnopqrstuvwxyz";
char dst[1000]="mno";
char *p1,*p2,*d;
for(p1=src;*p1;p1++){
for(p2=p1,d=dst;(*p2==*d)&&(*p2);++p2,++d);
if(!*d) printf("%s\n",p1);
}
return 0;
}
ふむ、状態1を求めるのは容易いが・・・
646 :
デフォルトの名無しさん :2005/11/27(日) 20:44:44
[1] 授業単元:プログラミング(2) [2] 問題文(含コード&リンク): 2次元配列を利用してパスカルの三角形を 作るプログラム ただし、行数は入力して指定出来るようにすること(最大で16行まで) [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C [4] 期限: 2005年12月2日23:59まで [5] その他の制限: 表示された際、二等辺三角形型ではなく、直角三角形型で表示する事 ※パスカルの三角形:頂点は全て1、それ以外は全て(上の数)+(左上の数) 例) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1
647 :
646 :2005/11/27(日) 20:46:10
その他、特に指定はありません よろしくお願いします
#include <stdio.h> int comb(int,int); int main(){ int i,j; int n=16; for(i=1;i<=n;i++){ for(j=0;j<=i;j++){ printf("%d ",comb(i,j)); } putchar('\n'); } return 0; } intcomb( int m, int n ) { if( (m>n) && (n>0) ) { returncomb(m-1,n-1) + comb(m-1,n); } else { return1; } }
>>641 char c,s[64],*p=s;
fgets(s,64,stdin);
c=getchar();
for(;(*p!=c)!='\0';p++);
if(!*p) puts("not found");
else printf("%d番目",p-s);
[1] 授業単元: 情報処理 [2] 問題文: 1999リットルの水が入った容器Aと、同じ大きさのからの容器B がある。 1 回目は、A の1/2 の量をB へ移し、2 回目は、B の1/3 をA に移す、 3 回目は、A の1/4 をB へ移す、次はB の1/5 をA へ・・・・ この方法で、次々と水を移す。1999回目にA からB へ移したとき、 B の容器には、何リットルの水が入っているかを求めるプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: bcc [3.3] 言語: C [4] 期限: 11月29日まで [5] その他の制限: 特にありません
>>650 #include <stdio.h>
int main(){
double a = 1999.0;
double b = 0.0;
int i;
for(i = 1; i <= 1999; ++i){
if( i % 2 ){
b += a /= 2.0;
}else{
a += b / 3.0;
b -= b / 3.0;
}
}
printf("A = %f\n", a);
printf("B = %f\n", b);
return 0;
}
652 :
651 :2005/11/27(日) 22:07:41
ごめん、ちがった。
>>650 ほい訂正。
#include <stdio.h>
int main(){
double a = 1999.0;
double b = 0.0;
double c = 2.0;
int i;
for(i = 1; i <= 1999; ++i, ++c){
if( i % 2 ){
b += a / c;
a -= a / c;
}else{
a += b / c;
b -= b / c;
}
}
printf("A = %f\n", a);
printf("B = %f\n", b);
return 0;
}
doubleで++使えたかな?
>>653 それだと一回目に3で割ってませんか?
>> 1 回目は、A の1/2
657 :
655 :2005/11/27(日) 22:29:55
>>656 あぁそうなのか。forの部分いつもi++にしててつい。
>>657 関係ない.for の第三項はループの終端で評価される.
659 :
デフォルトの名無しさん :2005/11/27(日) 22:38:23
>>653 漏れもそのソースと同じのを上げようとしてしまったやww
660 :
619 :2005/11/27(日) 23:50:06
>>643 一番大きいブロックが 全ビット数/シャッフルした時の誤り個数 。
「半分にしたブロックまで記憶」 は要するに図4で一番下の状態になったら
0000 0 0 00 00000000 1010 0 0 00 10001000 … (α)
のブロックの塊で記憶しているということだろう。
もちろん各ブロックには誤りがない又は偶数の状態。
というか図4の一番下の区切り方がまずいなぁ。
(α)のように区切っていてくれれば分かりやすいのに。
もちろん図5の上から1番目がまずいのは当然として、3番目、4番目もまずい。
図5の上から3番目の緑の部分は
0 0 00 1100 00000000
のブロックの塊、
図5の上から4番目の訂正後はおそらく
0000 0 0 00 00000000 00 0 0 0 0 00 0 0 00 0000
のブロックの塊で記憶しているということのはず。
661 :
おーすけ :2005/11/28(月) 00:01:55
2 つのデータ列(3,8,11,19,24,30,37,43)、(5,13,24,31)をマージするプログラムを作成せよ。
[1]授業単元: プログラミング演習 [2]問題: 要素数[20]、マイナスになったら終了。 入力した数の分だけ*で表示。 実行例 データ入力:3 データ入力:1 データ入力:4 データ入力:-1 結果 [0]:*** [1]:* [2]:**** [3]環境 [3.1]OS:Windows [3.2]コンパイラ名とバージョン:bcc [3.3]言語:C その他の制限:特になしです 問題うろ覚えなのですが、よろしければお願いします。
これのシャッフルってかなり複雑だから もう一から構成しなおしたほうが早くないか
>>662 #include <stdio.h>
void main()
{
int n[20];
int cnt = 0;
int i , k;
do {
scanf("%d" , &n[cnt]);
} while (n[cnt++] >= 0);
for (i = 0 ; i < cnt - 1 ; i++) {
printf("[%2d]:" , n[i]);
for (k = 0 ; k < n[i] ; k++) printf("*");
printf("\n");
}
}
どうでしょうか
665 :
662 :2005/11/28(月) 00:15:47
>>664 ありがとうございました。
助かりました。
>>665 ×printf("[%2d]:" , n[i]);
○printf("[%2d]:" , i);
下から5行目
>>663 一から構成したら問題にならん.全部 0 に置き換えれば済んでしまう.
初期状態:エラー数12619 状態(1):エラー数6984 シャッフル後:当然6984 状態(2):エラー数5951 ぜんぜんへらねぇ
669 :
デフォルトの名無しさん :2005/11/28(月) 00:36:35
【質問テンプレ】 [1] 授業単元: [2] 問題文(含コード&リンク):ポインタ変数を用いて入力した文字列のアルファベットをカウントするプログラム 例 abcdABCDE a,A=2 b,b=2 c,C=2 d,D=2 e,E=1 [3] 環境 [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 2.9 VC 6.0等) [3.3] 言語: c++ [4] 期限: なし [5] その他の制限: #include<stdio.h> int main(void) {
>>667 #include <stdio.h>
int main(){
char buf[80],c,*pc;
pc = (char*)malloc(sizeof(char)*80);
int count[26]={0},i;
fgets(buf,80,stdin);
sscanf(buf,"%s",pc);
while(*pc!='\0'){
putchar(*pc);
if((*pc)>='A' && (*pc)<='Z')count[*pc-'A']++;
if((*pc)>='a' && (*pc)<='z')count[*pc-'a']++;
pc++;
}
for(i=0;i<26;i++){
if(count[i]!=0)printf("%c,%c=%d\n",'a'+i,'A'+i,count[i]);
}
return 0;
}
おっとputchar(*pc);は消しといてくれ
672 :
619 :2005/11/28(月) 01:02:32
>>663 >>667 「一から構成」の意味を取り違えて解釈してしまったかもしれないけど、
状態1の?番目→状態2の?番目は、1→1 2→50001 3→2 4→50002 のようでなくても、
ランダムにシャッフルして
状態1の何番目が状態2の何番目になったかが追跡できればいいんじゃないのかな?
全ビット数/シャッフルした時の誤り個数 にするのは、
出力する「誤りの数を確かめる回数」を一番少なくするためだと思う。
初期状態 エラービット数:12424 エラー率:0.12424 ブロックサイズ:8 状態(1) エラービット数: 6808 エラー率:0.06808000 ブロックサイズ: 8 状態(2) エラービット数: 4306 エラー率:0.04306000 ブロックサイズ: 16 状態(1) エラービット数: 4306 エラー率:0.04306000 ブロックサイズ: 8 状態(2) エラービット数: 2302 エラー率:0.02302000 ブロックサイズ: 16 状態(1) エラービット数: 2302 エラー率:0.02302000 ブロックサイズ: 8 状態(2) エラービット数: 874 エラー率:0.00874000 ブロックサイズ: 16 状態(1) エラービット数: 874 エラー率:0.00874000 ブロックサイズ: 8 状態(2) エラービット数: 288 エラー率:0.00288000 ブロックサイズ: 16 状態(1) エラービット数: 288 エラー率:0.00288000 ブロックサイズ: 8 状態(2) エラービット数: 62 エラー率:0.00062000 ブロックサイズ: 16 状態(1) エラービット数: 62 エラー率:0.00062000 ブロックサイズ: 8 状態(2) エラービット数: 10 エラー率:0.00010000 ブロックサイズ: 16 状態(1) エラービット数: 10 エラー率:0.00010000 ブロックサイズ: 8 状態(2) エラービット数: 0 エラー率:0.00000000 ブロックサイズ: 16 パリティ回数97369 追跡するとどれだけ減るのやら
課題のほうも説明プリントのほうも激しく分かりずらい 出題者のほうもあまり知識がないんじゃないか?
675 :
デフォルトの名無しさん :2005/11/28(月) 02:22:40
1] 授業単元: C++ [2] 問題文: 以下のクラス MyPair に対し, 演算子 == , !=, >=, >, <=, < を定義して下さい. ただし, これらの演算子は以下の性質を満たすようにして下さい. これらは全て MyPair 同士の比較である. fst が等しいとき, snd を比べてその比較の結果とする. fst が異なるとき, fst を比べてその比較の結果とする. それと下記を実行するためのmain文も書いてください class MyPair { int fst; int snd; public: MyPair(int f=0, int s=0) { fst = f; snd = s; } int get_fst() const { return fst; } int get_snd() const { return snd; } }; [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Microsoft Visual Studio.NET [3.3] 言語: C++ [4] 期限: 11月28日 [5] その他の制限:
676 :
619 :2005/11/28(月) 02:37:02
677 :
673 :2005/11/28(月) 02:41:01
まだ追跡を取り入れてないがパリティチェック回数が大変な数になってきた
しかも下手打った場合状態10くらいまでいくこともあるし
>>675 #include <iostream>
using namespace std;
class MyPair {
int fst;int snd;
public:
MyPair(int f=0, int s=0) {fst = f;snd = s;}
bool operator ==(const MyPair mp){if(this->fst!=mp.fst)return this->fst == mp.fst;else return this->snd == mp.snd;}
bool operator !=(const MyPair mp){if(this->fst!=mp.fst)return this->fst != mp.fst;else return this->snd != mp.snd;}
bool operator <=(const MyPair mp){if(this->fst!=mp.fst)return this->fst <= mp.fst;else return this->snd <= mp.snd;}
bool operator <(const MyPair mp){if(this->fst!=mp.fst)return this->fst < mp.fst;else return this->snd < mp.snd;}
bool operator >=(const MyPair mp){if(this->fst!=mp.fst)return this->fst >= mp.fst;else return this->snd >= mp.snd;}
bool operator >(const MyPair mp){if(this->fst!=mp.fst)return this->fst > mp.fst;else return this->snd > mp.snd;}
int get_fst() const { return fst; }
int get_snd() const { return snd; };
void isTrue(bool b){if(b)cout << "true" << endl;else cout << "false" << endl;}
int main(){
MyPair mp1(2,6);MyPair mp2(2,4);
isTrue(mp1==mp2);
isTrue(mp1!=mp2);
isTrue(mp1>=mp2);
isTrue(mp1>mp2);
isTrue(mp1<=mp2);
isTrue(mp1<mp2);
return 0;}
678 :
デフォルトの名無しさん :2005/11/28(月) 02:43:21
>>677 何もC++に直さなくて、最初の「ひまわり」で実装したバージョンで良くないか?
ミズラ #include <iostream> using namespace std; class MyPair { int fst;int snd; public: MyPair(int f=0, int s=0) {fst = f;snd = s;} bool operator ==(const MyPair mp){ if(this->fst!=mp.fst)return this->fst == mp.fst;else return this->snd == mp.snd;} bool operator !=(const MyPair mp){ if(this->fst!=mp.fst)return this->fst != mp.fst;else return this->snd != mp.snd;} bool operator <=(const MyPair mp){ if(this->fst!=mp.fst)return this->fst <= mp.fst;else return this->snd <= mp.snd;} bool operator <(const MyPair mp){ if(this->fst!=mp.fst)return this->fst < mp.fst;else return this->snd < mp.snd;} bool operator >=(const MyPair mp){ if(this->fst!=mp.fst)return this->fst >= mp.fst;else return this->snd >= mp.snd;} bool operator >(const MyPair mp){ if(this->fst!=mp.fst)return this->fst > mp.fst;else return this->snd > mp.snd;} int get_fst() const { return fst; } int get_snd() const { return snd; }}; void isTrue(bool b){if(b)cout << "true" << endl;else cout << "false" << endl;} int main(){ MyPair mp1(2,4);MyPair mp2(2,4); isTrue(mp1==mp2); isTrue(mp1!=mp2); isTrue(mp1>=mp2); isTrue(mp1>mp2); isTrue(mp1<=mp2); isTrue(mp1<mp2); return 0;}
680 :
デフォルトの名無しさん :2005/11/28(月) 03:02:52
C++の月刊誌って無いでしょうか? 一度にどっさり覚えるの苦手なんで、毎月チマチマと 新鮮な気分で習得していきたいんです。 雑誌買うと、真新しい気分になれるじゃん。
いろいろあるが 今月はクラス、来月はポインタやりますよー なんて初歩的なのはないと思うぞ
CMAGAってそういう内容も取り扱ってなかったか?
683 :
デフォルトの名無しさん :2005/11/28(月) 03:36:08
>>661 #include <stdio.h>
int main(void)
{
int a[] = {3, 8, 11, 19, 24, 30, 37, 43};
int b[] = {5, 13, 24, 31};
int c[20] = {0};
int asize = sizeof(a) / sizeof(int), bsize = sizeof(b) / sizeof(int), i = 0, j = 0, num = 0;
do {
if (i < asize && j < bsize) {
if (a[i] < b[j])
c[num++] = a[i++];
else
c[num++] = b[j++];
} else if (i < asize)
c[num++] = a[i++];
else /* j < bsize */
c[num++] = b[j++];
} while (i < asize || j < bsize);
for (i = 0; i < num; i++)
printf("%d ", c[i]);
putchar('\n');
return 0;
}
>>624 chomp ($src = <STDIN>);
open (FS, "< $src") || die "can't open $src\n";
chomp ($from = <FS>);
open (F, "< $from") || die "can't open $from\n";
chomp ($category = <F>);
($no, $name, $addr, $tel) = split(",", $category);
%data = ($no => [], $name => [], $addr => [], $tel => []);
$i = 0;
foreach $line (<F>)
{
chomp $line;
($data{$no}->[$i], $data{$name}->[$i], $data{$addr}->[$i], $data{$tel}->[$i]) = split(",", $line);
$i++;
}
chomp ($key = <FS>);
@keys = split(",", $key);
print "$_ " foreach (@keys);
print "\n";
$cnt = $data{$no};
foreach $l (0..@$cnt-1)
{
print "$data{$_}->[$l] "foreach (@keys);
print "\n";
}
close(FS);
close(F);
文字コードとか考慮してない
687 :
614 :2005/11/28(月) 08:20:58
今更ながら
>>617 さんありがとうございました。
Tabが間に入っていることにも察してくれたことには感謝です。
本当は都道府県が47個なので読み込むのは47回でよかったのですが、
わざわざdefineとか使わせてしまってすみませんでした。
今後気をつけます。
後は自分で調整にがんばってみようと思います。
できないかもしれませんが・・・。
本当にありがとうございました。
689 :
618 :2005/11/28(月) 10:00:06
>>620 >>622 プログラム、正常に作動しました。
どうもありがとうございます。助かりました。
返事が遅くなって申し訳ないです。
690 :
デフォルトの名無しさん :2005/11/28(月) 10:22:36
1] 授業単元: C言語研究 [2] 問題文: 以下のプログラムのキャスト記法を, 正しいC++のキャスト演算子に直して下さい. #include <iostream> void func(int* x) { cout << *x << endl; } int main() { const int a=1; double b=1.2; unsigned int c = ('a' << 24) | ('b' << 16) | ('c' << 8) | 'd'; const int* d=&a; func((int *)d); cout << (int)b << endl; cout << ((char *)(&c))[0] << endl; cout << ((char *)(&c))[1] << endl; cout << ((char *)(&c))[2] << endl; cout << ((char *)(&c))[3] << endl; return 0; } [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Microsoft Visual Studio.NET [3.3] 言語: C++ [4] 期限: 12月10日 [5] その他:
691 :
デフォルトの名無しさん :2005/11/28(月) 11:43:33
>>690 こういうことでいいのか?
#include <iostream>
void func(int* x)
{
cout << *x << endl;
}
int main()
{
const int a=1;
double b=1.2;
unsigned int c = ('a' << 24) | ('b' << 16) | ('c' << 8) | 'd';
const int* d=&a;
func(const_cast<int*>( d ));
cout << static_cast<int>( b ) << endl;
cout << (reinterpret_cast<char*>( &c ))[0] << endl;
cout << (reinterpret_cast<char*>( &c ))[1] << endl;
cout << (reinterpret_cast<char*>( &c ))[2] << endl;
cout << (reinterpret_cast<char*>( &c ))[3] << endl;
return 0;
}
[1] 授業単元: プログラミング1 [2] 問題文(含コード&リンク): ローン返済プログラム ・元利均等方式 ・ボーナス返済はなし ・月払い ・単位期間における支払総額 = 当初借入額 × 利率/(1-(1+利率))^(-返済回数) ・月の支払額と、支払い総額を求め表示する [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Borland C++ 5.5 [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: 2005年12月01日 [5] その他の制限: 習ったもの↓ ・printf ・scanf ・基本的な算術演算 ・if ・for、while、do-while ・多次元配列 #include <stdio.h> void main ( void ){ でお願いします。 初心者なので初心者ぽくお願いします…。 うちのガッコのプログラミングはあまり授業が進まない…。 進んでもついていけないけどorz
694 :
デフォルトの名無しさん :2005/11/28(月) 14:16:27
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク): 1:いくつかの要素を持つ配列のなかから最大値を求めるユー ザー関数を作成。 2:文字列のコピーを行うユーザー関数を作成。標準関数は使 用しない。 [3] 環境 [3.1] OS: /Linux/ [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: すぐにお願い致します [5] その他の制限:ポインタを少し習いました。 今授業中なんでできれば早めにお願い致します。
>void main ( void ){ 進まない方がいいかもね。
>>694 の1
#include <stdio.h>
int max(int *array, int size)
{
int max;
int i;
max=array[0];
for (i=1 ; i<size ; i++)
{
if (array[i]>max)
{
max=array[i];
}
}
return max;
}
int main()
{
int array[]={1,5,6,3,2};
printf("%d\n", max(array, sizeof(array)/sizeof(array[0])));
return 0;
}
697 :
デフォルトの名無しさん :2005/11/28(月) 14:42:22
リアルタイムで出てる宿題なのですが キーボードから入力された5つの整数を配列の中に保存し、それを表示するプログラムを作れ で授業終わりまでに仕上げないといけません^^; 先輩方知恵を貸してくださいTT
>>694 の2
#include <stdio.h>
void my_string_copy(char *src, char *dest)
{
while(*src!='\0')
{
*dest=*src;
dest++;
src++;
}
*dest='\0';
}
int main()
{
char *src="fuck'n jap";
char dest[80];
my_string_copy(src, dest);
puts(src);
puts(dest);
}
>>697 #include <stdio.h>
int main()
{
char buf[1919];
int num[5];
int i;
for (i=0 ; i<5 ; i++)
{
fgets(buf, sizeof(buf)-1, stdin);
sscanf(buf, "%d", &num[i]);
}
for (i=0 ; i<5 ; i++)
{
printf("%d\n", num[i]);
}
}
>695 意味がわからないですけど、マジでそれしか習ってないんでorz
701 :
デフォルトの名無しさん :2005/11/28(月) 15:04:53
699さんまだ最初の方の授業なのでもっと簡単な感じかと思うのですが そんな風にはできますか??
>>701 #include <stdio.h>
int main()
{
int num[5];
int i;
for (i=0 ; i<5 ; i++)
{
scanf("%d", &num[i]);
}
for (i=0 ; i<5 ; i++)
{
printf("%d\n", num[i]);
}
}
703 :
デフォルトの名無しさん :2005/11/28(月) 15:18:34
numのところはssでも平気でしょうか?
705 :
デフォルトの名無しさん :2005/11/28(月) 15:22:32
ありがとうございます、なんだかcharというのを使わないといけないような 雰囲気なのですが・・・
>>705 となりの奴が間違ってる
好評価を得るチャンス
707 :
デフォルトの名無しさん :2005/11/28(月) 15:27:01
Σ マジデスカ!? 今日は初期化の授業をしております
708 :
デフォルトの名無しさん :2005/11/28(月) 15:43:32
今講義中で配列は引数にできないからポインタで渡すとか禿がぬかしてますが、 渡す配列が、「要素全部」なのか「一つの要素だけ」なのかわかりません。 見回りの院生に聞いたら「ハァ?」みたいな顔された・・・orz 質問が悪いのかも、意味補完して理解できる人オシエテクレ
>>699 sizeof(buf)から1引いてるのは何かのトラップですか?
710 :
デフォルトの名無しさん :2005/11/28(月) 15:46:43
隣の奴は、256以上の数字とか入れるとフィーバータイムが始まる。
711 :
名無し :2005/11/28(月) 15:47:09
>>572 の期限が近いのでよろしくお願いします。
712 :
デフォルトの名無しさん :2005/11/28(月) 15:47:36
>>708 要するに、配列の先頭要素のポインタです。
まぁまぁ、暇だし。
>>709 fgets manpageより抜粋
fgets() は stream から最大で size - 1 個の文字を読み込み、
s が指すバッファに格納する。
読み込みは EOF または改行文字を読み込んだ後で停止する。
読み込まれた改行文字はバッファに格納される。
'\0' 文字が一つバッファの中の最後の文字の後に書き込まれる。
なんで、確かにいらないですね。
>>715 去年は2ch又はプログラミング掲示板に投稿された事が坂本先生に発覚。
そのプログラムを使用した人は100%落ちた。その数は全体の6割強。
この掲示板を見てる人はお前さんが思ってるよりもずっと多い、今回も同じだろ。
賢いあの先生のことだ・・・見て無いはずがないし生徒じゃ到底気づかない罠を仕掛けてるに決まってる。
717 :
坂本 :2005/11/28(月) 17:45:58
>>716 補足すると、別に 2ch で書かれたプログラムだから落したわけではないよ。
問題のプログラムは Java で書かれていたもの。
実行結果を読むと明白に問題を解いてないことが分かるのに
それをチェックもせずに「正しく動作した」とか書いて来たから不合格になっただけ。
今回の課題の「罠」は他人が作ったプログラム程レポートが書きづらくなっているだけ。
他に裏は無いよ。まあ課題 2 も同じ人にプログラムを書いてもらってね。
# この一行でパニックになっている人がいるかも
718 :
デフォルトの名無しさん :2005/11/28(月) 18:07:32
坂本先生、sage知ってるんですねw もう一人前のねらーですね。 6割がJavaで書いてくるとは... お疲れ様です。
719 :
デフォルトの名無しさん :2005/11/28(月) 18:09:14
>>715 教えて差し上げます。
11/30の12:00が締め切りです。
内輪ネタは他所でやれ
>>718 sageくらい小学生でも知ってるが・・・
722 :
デフォルトの名無しさん :2005/11/28(月) 18:14:53
724 :
デフォルトの名無しさん :2005/11/28(月) 18:30:53
#define N (20) int main(int argc, char* argv[]) { char buf[5]; int guess_number,lower,higher; printf("Think A number from 0 to %d.\n" , N); lower=0; higher=N; do{ guess_number = (lower + higher)/2; printf("I guess %d , how about it is? ->" , guess_number); fgets(buf,sizeof(buf),stdin); switch (buf[0]){ case 'L':higher = guess_number-1; break; case 'H':lower = guess_number+1; break; } }while(buf[0]!='C'); printf("Number = %d\n",guess_number); return 0; }
>>723 「ここに書き込んでる時点で」って言いたいが、どいつもこいつも揃って馬鹿ばっかだな(pgr
>>725 ちょっとだけディスプレイの電源を切ってごらん。
もう一人馬鹿が見えるよwww
729 :
sage :2005/11/28(月) 19:37:21
Qに最初なかった変数が一度現れて、また消えたときにプログラムを 終了させるには、どのような終了条件にすればいいですか
>>715 >>592 いままで3回くらい同じ課題があげられて
そのつど何人かが答えを提示してるのに
意味が解らない。っていうか宿題じゃねーだろ、消えろ。
もしくは
>>1 を読んで半年ROMれ。
ヒント とかいって馬鹿じゃねーのおめー
ごめんなさい。わかりました。すみませんでした。本当に・・・
所詮2ちゃんねる限度を超えて面倒な問題は誰もやらないことを理解しろ
面倒ってほどの問題でもないし実際いっぱい答え出てるじゃん 何がNGなの?
単純にしつこいと嫌気さすだけだろ
C言語の最初の授業でreturnなんか書いた記憶ないからおそらく書いたら逆にぁゃιぃ
釣れますか?
整数を文字に変換する関数を作る。 引数は5つで変換元整数、変換先、桁数、16進表示or10進表示か、先頭の0を表示するか。 sprintfで同じことができますが、自作しろとのことです。 お願いします。
つーかさー、
>>741 だけじゃなく
過去に類似する、または同一の課題が腐るほど存在した、
あるいはソートのように検索するだけで答えがでるようなものに
いちいち答えてたらきりがないよな
テンプレでもありゃいいのに
>>742 そのアンカーの先「E:数字9桁-」が見えるんだが何だ?
745 :
通りすがり :2005/11/28(月) 22:17:42
東京電機大学以外の理工系大学の問題はそれほど出てこないけど 東京電機大学の課題ってそんなに鬼畜なの?
こういうところで聞くやつは交友関係が乏しいんだろうな
原○タソのエロ画像キボンヌ
さっそく間違いハケーン void change_board( char** board, int size, Coordinates input ) { board[input.j][input.i]^=1; if(input.j>0)board[input.j-1][input.i]^=1; if(input.i>0)board[input.j][input.i-1]^=1; if(input.j<size-1)board[input.j+1][input.i]^=1; if(input.i<size-1)board[input.j][input.i+1]^=1; }
うはwwwwwwwwww課題必死中乙wwwwwwwwwwww
もう年末だってのに確かに課題の程度は低いものが多いな 俺がかよってた大学だと2年の終わりにCでスモールコンパイラ作らされたぞ
ここにあるのは専門学校の宿題ばかりですよ
>>755 どこの大学?つか教授誰?コンパイラやりたい高校生にはマジ欲しい情報だと。
758 :
694 :2005/11/29(火) 00:45:14
>>696 >>698 授業中にはできませんでしたが、自分のために勉強になります。
本当にありがとうございました。
>>755 そういや俺の所も2年の最後か3年初めどっちかで
CでPascalのコンパイラ(といってもサブセットだが)を作らせるとか言ってたな
まだ1年の俺には関係ない話だがw
760 :
デフォルトの名無しさん :2005/11/29(火) 04:42:46
1] 授業単元: プログラミング演習
[2] 問題文:
"end"が入力されるまで繰り返し文字列の入力を受け付ける。入力された文字列のうち,
長さが4 以上7 未満のものを配列に格納して,最終的にその配列の全要素を出力せよ。
一回作ってみたソース
http://up.viploader.net/mini/src/viploader0820.txt.html [3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: Microsoft Visual C++
[3.3] 言語: C
[4] 期限: 11月29日
[5] その他:
コンパイラは通るのですが問題が発生したためa.exeを終了します。ご不便をおかけして申し訳ありませんって出ます
761 :
デフォルトの名無しさん :2005/11/29(火) 04:59:29
762 :
761 :2005/11/29(火) 05:01:37
>>761 あとj++の位置をstrcpyのあとにしたほうがよいです。
763 :
デフォルトの名無しさん :2005/11/29(火) 05:14:17
>>761 おお!見落としてましたorz
確かにj++の位置を変えたほうがいいですね
おかげさまで出来ました。ありがとうございます!
夜遅くにやるもんじゃないっすねぇ
イテレータに入っている 文字データを文字配列に渡すにはどうすれば いいんでしょうか? coutで画面には出せるんですが・・・・
それって宿題?
>>757 大学じゃなくて専門じゃないの?
大学だと情報系でも一般教養とかうざったいからあんまし授業時間とれないし
767 :
デフォルトの名無しさん :2005/11/29(火) 10:11:13
東京電機大の場合、ハードの中に中途半端にソフトがあるから十分授業数が足りないように見える。 レベルが低いのに授業を演習も十分にやらないで先に進めるから学生もついてこれないわけだ 教師も大変だね
768 :
デフォルトの名無し :2005/11/29(火) 10:13:29
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):二分検索 ①10個数字を取り込む ②検索したい数を入れる ③二分検索 ④数字○は、○個目にあると表示 なければ、エラー表示 終了 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: visual c++ 6.0 [3.3] 言語: c言語 [4] 期限: 11月30日 [5] その他の制限: 配列かリストで実現してください。 二分検索お願いします。
二分探索なw ~~~~
771 :
98 :2005/11/29(火) 13:04:49
>>766 情報工学とか情報科学の学部なら簡単なコンパイラぐらい作るだろ。
772 :
768 :2005/11/29(火) 13:25:53
770 見れないんですが……
773 :
768 :2005/11/29(火) 13:29:42
770さんソースをメールで くれませんか? a.d.j.m.t.w..@xxne.jp こちらにおねがいします
774 :
たべちゃう :2005/11/29(火) 13:30:06
[1] 情報処理実習 [2] x^2^sinx=0の解は0以外にx=0.1から1の間にある。 これを10^-6の精度で解の存在範囲を示せ。 (解法は中点を次々に取り、範囲を縮める方法) [3] 環境 OS:UNIX 言語:C [4] 期限:17年12月2日(金) [5] インクルード関数はstdio,math のみ。 おねがいします。
775 :
たべちゃう :2005/11/29(火) 13:31:21
x^2-sinx=0の間違いでした。
776 :
197 :2005/11/29(火) 13:43:44
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
>>197 の派生で
最後の行を、配列で呼んでポインタで受け取るやり方を教えてください
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
[4] 期限:2005年11月30日
[5] その他の制限:
おねがいします
777get
>>776 どこのコードの「最後の行」?
>>198 なら
配列a[]で呼んで、char*aで受け取っているように見えるが。
>>774 #include <stdio.h>
#include <math.h>
double f(double x){ return x * x - sin(x); }
int main(void) {
double left, right, middle;
double eps = 1e-6; // 精度
for( left = 0.0, right = 1.0 ; right - left >= eps ; ) {
printf("[%.6f,%.6f]を調査\n",left, right);
middle = (left + right) * 0.5;
if( f(right) * f(middle) > 0 ) right = middle else left = middle;
}
middle = (left + right) * 0.5;
printf("解: x=%.6f (f(x)=%.6f)\n", middle, f(middle));
return 0;
}
>>774 #include <stdio.h>
#include <math.h>
double f(double x){ return x*x-sin(x); }
int main(int argc, char* argv[])
{
double l=0.1, r=1.0 , c;
do{
c = (l + r) / 2;
//printf("x = %f , f(x) = %f \n" , c , f(c) );
if( f(c) < 0) l=c; else r=c;
}while( fabs(f(c)) > 1E-6);
printf("x = %f , f(x) = %f" , c , f(c) );
return 0;
}
781 :
たべちゃう :2005/11/29(火) 14:29:28
>>779 ありがとうございます。
僕自身はこれで納得いくのですが、どうも
授業では関数の定義をやっていないので、
できればmain関数のみでできないでしょうか?
このソースをヒントに作り変えているところですが。
お願いします。
782 :
たべちゃう :2005/11/29(火) 14:34:26
すみません勘違いです。 これで完璧です。 ありがとうございました。
783 :
780 :2005/11/29(火) 14:34:52
うはwww 俺スルーされたwwww 先生に「関数って自分で定義出来ませんか?」って聞いてしまえ。 もしくは本に載っていたので使ってみましたで。
784 :
780 :2005/11/29(火) 14:52:05
>>768 int i,j;
int l,r,c;
int a[10] = { 3 , 15, 24, 14 , 76 , 39 , 48 , 52 , 6 , 10};
int b;
/* Sort */
for(i=0;i<9;i++){
for(j=i+1;j<10;j++){
if(a[i]>a[j]){ int t = a[i];a[i]=a[j];a[j]=t; }
}
}
for(i=0;i<10;i++){printf ("%d ",a[i] ); } printf("\n");
/* Find */
scanf("%d",&b);
for(l=0, r=9 , c=(l+r)/2; a[c]!=b; c=(l+r)/2){
printf("%d - %d - %d \n",a[l],a[c],a[r]);
if(l==r) break;
if(a[c]<b) l=c+1; else r=c-1;
}
if( l==r && a[l]!=b){
printf("Not found \n");
}else{
printf("%d - %d - %d \n",a[l],a[c],a[r]);
}
【質問テンプレ】 [1] 授業単元:プログラミング演習(ポインタ) [2] 問題文(含コード&リンク): 次のフォーマットで格納されたバイナリファイルを読み込み、標準出力にその内容を書き出すプログラム(ファイル名 readBinDat.c )を作成せよ。 国名(40個のchar型(40バイト)) 面積(double型(8バイト)) 人口(double型(8バイト)) GDP(double型(8バイト)) の順に記録されたデータの繰り返し、国の数は256を越えない。 入力ファイル名はコマンドラインの引数として受け取ること。 入力ファイルの例として、country.bin.datを使用せよ。 [3] 環境 [3.1] OS: Vine Linux [3.2] コンパイラ名とバージョン: gcc 2.9 [3.3] 言語: C [4] 期限: 2005年12月1日17:20まで バイナリーファイルはうpロダにうpします。 もしよろしければ御協力お願いします。
785の間違いでしたorz
dat形式をうpロダにうpできませんorz 拡張子変換をしたいけど窓しか使ったこと内のでできないっすorz
lhasaとかlhacaとかで圧縮してZIPやLZHにしてくれ。 ソースは出来たので、動作確認したい。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):二分探索 ①10個数字を取り込む ②検索したい数を入れる ③二分探索 ④数字○は、○個目にあると表示 なければ、エラー表示 終了 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: visual c++ 6.0 [3.3] 言語: c言語 [4] 期限: 11月30日 [5] その他の制限: 配列かリストで実現してください。 二分探索お願いします。 前の二分探索木になってて二分探索してほしいんです
FILE *fp; char name[40]; double area, population , GDP; int n; fp=fopen(argv[1],"rb"); if(fp==NULL){return 1;} /* file cannot open */ for(n=0;n<256;n++){ fread(&name,sizeof(char),40,fp); fread(&area,sizeof(double),1,fp); fread(&population,sizeof(double),1,fp); fread(&GDP,sizeof(double),1,fp); if(feof(fp)) break; printf("%d - %-40s %10.2lf %8.0lf %10.0lf\n",n,name,area,population,GDP); } fclose(fp); return 0;
>>785 >>792 一応補足。printf("-40s")は文字列を表示するとき左詰でやるということ。
あと、本当はfreadの返り値でチェックするのが望ましいけど、
面倒なので最後にチェック。
難しい宿題はスルーするんですね、情けない
791して(´..`)
・・・ちょっとまて、微妙な気がする。 二分探索だと数字をソートしないといけないのだが、 「n番目」を表示するのはソート前?だったら二分探索自体いらない罠。
int i,j; int l,r,c; int a[10]; int b; /* Input*/ for(i=0;i<10;i++){ scanf("%d" , &a[i]); } /* Sort */ for(i=0;i<9;i++){ for(j=i+1;j<10;j++){ if(a[i]>a[j]){ int t = a[i];a[i]=a[j];a[j]=t; } } } for(i=0;i<10;i++){printf ("%d ",a[i] ); } printf("\n"); /* Find */ scanf("%d",&b); for(l=0, r=9 , c=(l+r)/2; a[c]!=b; c=(l+r)/2){ if(l==r) break; printf("%d - %d - %d \n",a[l],a[c],a[r]); if(a[c]<b) l=c+1; else r=c-1; } printf("%d - %d - %d \n",a[l],a[c],a[r]); if( l==r && a[l]!=b){ printf("%dは見つかりませんでした\n",b); }else{ printf("%dは小さいほうから数えて%d番目の要素です\n",b,c+1); } return 0;
801 :
デフォルトの名無し :2005/11/29(火) 16:22:09
最終表示するときに 検索した数字となん個目か表示してほしいです
>>801 そういうのを言ってもらえると対応できるんだけど...
これは元の数列での何個目かも表示するバージョン。
int main(int argc, char* argv[]){
int i,j; int l,r,c;
int a[10],a2[10]; int b;
/* Input*/
for(i=0;i<10;i++){
scanf("%d" , &a[i]); a2[i]=i;
}
/* Sort */
for(i=0;i<9;i++){
for(j=i+1;j<10;j++){
if(a[i]>a[j]){ int t = a[i];a[i]=a[j];a[j]=t; t=a2[i];a2[i]=a2[j];a2[j]=t;}
}
}
for(i=0;i<10;i++){printf ("%d ",a[i] ); } printf("\n");
/* Find */
scanf("%d",&b);
for(l=0, r=9 , c=(l+r)/2; a[c]!=b; c=(l+r)/2){
if(l==r) break;
printf("%d - %d - %d \n",a[l],a[c],a[r]);
if(a[c]<b) l=c+1; else r=c-1;
}
printf("%d - %d - %d \n",a[l],a[c],a[r]);
if( l==r && a[l]!=b){
printf("%dは見つかりませんでした\n",b);
}else{
printf("%dは小さいほうから数えて%d番目の要素です\n",b,c+1);
printf("%dは元の数列では%d番目の要素です\n",b,a2[c]+1);
}
}
803 :
791 :2005/11/29(火) 16:27:21
800さん 二分探索ですか? 今ケータイなんで 確認できなくて……
・・・「二分探索です」としか答えられないw 家帰ってから確認してください。 数字の配列だけ使っているので、多分大丈夫ですよ。
805 :
デフォルトの名無しさん :2005/11/29(火) 16:32:46
10取り込むとき 前の数よりちいさいとはじいてエラー表示も忘れてました(´..`)
・・・殺意が芽生えてきたおwww
807 :
デフォルトの名無しさん :2005/11/29(火) 16:34:39
数字10個取り込むときでした
808 :
785 :2005/11/29(火) 16:35:30
携帯からカキコします。%lfを%fにかえたら実行できました。 ありがとうございました(_ _*)_ _*) もう一つあるのですがもう少し考えてみます。わからなかったらまたカキコさせてください(_ _*)_ _*)
809 :
デフォルトの名無しさん :2005/11/29(火) 16:37:35
ごめんなさい(PД`q) 10個取り込むとき前の数よりちいさいとはじいてエラー表示もしてまたいれなおしです(PД`q) やってくれたら お礼します(^ε^)-☆Chu!!
とりあえず、
>>80 は日本語を勉強してきてくれ。意味が解らない。
ご、ごめんなさい
>>80 さんwwww
int main(int argc, char* argv[])
{
int i,j;int l,r,c;
int a[10]; int b;
printf("%3d ->",0); scanf("%d", &a[0]);
for(i=1;i<10;i++){
printf("%3d ->",i); scanf("%d" , &a[i]);
if(a[i-1]>a[i]){
printf("前の数字よりも大きい数値を指定してください\n");
i--;
}
}
/* Find */
scanf("%d",&b);
for(l=0, r=9 , c=(l+r)/2; a[c]!=b; c=(l+r)/2){
if(l==r) break;
printf("%d - %d - %d \n",a[l],a[c],a[r]);
if(a[c]<b) l=c+1; else r=c-1;
}
printf("%d - %d - %d \n",a[l],a[c],a[r]);
if( l==r && a[l]!=b){
printf("%dは見つかりませんでした\n",b);
}else{
printf("%dは小さいほうから数えて%d番目の要素です\n",b,c+1);
}
}
ということで、お礼よこせ。
814 :
809 :2005/11/29(火) 16:56:13
具体的に何をお礼すれば (^ε^)-☆Chu!!
816 :
809 :2005/11/29(火) 17:54:19
ちっ、女かつまらん。
818 :
デフォルトの名無しさん :2005/11/29(火) 18:23:46
2A+3B+4C-5D=0 5A+2B-2C+D=0 3A+B-C+D=0 7A+2B+C-3D=0 この連立一次方程式をガウス・ザイデル法で解くプログラムの作成
>>785 です。先ほどはありがとうございましたm(__)m
今までもう一つの課題を考えていたのですが何もできなかったので助けていただけるとうれしいです。
[1] 授業単元: プログラミング演習(ポインタ)
[2] 問題文(含コード&リンク):
次のフォーマットで格納されたバイナリファイルを読み込み、人口密
度順にソートして、その内容を同じ形式のバイナリファイルに書き出
すプログラム(ファイル名 sortBinDat.c )を作成せよ。
国名(40個のchar型(40バイト))
面積(double型(8バイト))
人口(double型(8バイト))
GDP(double型(8バイト))
の順に記録されたデータの繰り返し、国の数は256を越えない。
入力ファイル名、出力ファイル名はこの順にコマンドラインの引数と
して受け取ること。
入力ファイルの例として、country.bin.dat を使用せよ。
国名等のデータを格納するメモリ領域は動的に確保すること。
[3] 環境
[3.1] OS: Vine Linux
[3.2] コンパイラ名とバージョン: gcc 2.9
[3.3] 言語: C
[4] 期限: 2005年12月1日17:20まで
バイナリーファイルは
>>790 のURLです。
もしよろしければ御協力お願いします。
>国名等のデータを格納するメモリ領域は動的に確保すること やばい・・・スルーしましたw ちょっとまって
一応解説。 「C言語 ファイルサイズ 取得」でぐぐると 上から二つ目の908に「ファイルサイズの取得」がある。 でもって、ファイルサイズ/構造体のサイズ=データ件数のはず。 fseekを調べたらSEEK_ENDで最後に移動できて、SEEK_SETで先頭に移動できるのを発見。 まあこんなとこ。
>>825 もうちょっと説明すると...
AX=b においてb=0の形のものを斉次形と呼ぶ。
この際、解の重なりがありうるので、一意に決定することが出来ない。
よってこの解をガウス・サイデル法で求めるのは不可能である。
827 :
むう :2005/11/29(火) 21:41:19
[1] 授業単元: TCP/IP [2] 問題文(含コード&リンク):サーバから送られてくるデータは0,1。これをクライアント側で3×3配列に[0][0]=1,[0][1]=1,[0][2]=0,[1][0]=0の順にデータを 格納するプログラムを作る。今回はサーバ側からデータが送られてきたと仮定してプログラムを作成する。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VW BC++ [3.3] 言語: C [4] 期限: [無期限] [5] 制限: Winsockを必ず使う。 以上、よろしくお願いします
ここAPIスレじゃないから
>>825-826 線型代数の本を読み直しましょう.
A について斉次方程式 Ax = 0 の解は rank(A) だけの余自由度を持って「必ず」存在する.解なしなんてのは絶対にありえない.
特にこの問題の A は正方で,det(A) ≠ 0 即ち rank(A) = n だから自由度 0 の解,つまり一意解が存在(x = 0).
あと,ガウス法は解がなす線型空間を求める解法だから,ちゃんと組めば自由度付きで解が求まるよ.
830 :
826 :2005/11/29(火) 22:04:06
>>825 は嘘だなw
で、自由度をどうやってプログラム中であらわすんだ?
とりあえず四の五の言わずにプログラムを出してくれ。
[1] 授業単元: プログラミング技術 [2] 問題文(含コード&リンク): スケジュールを入力、閲覧、日付順に並べ替えするプログラムを作りなさい。 スケジュールはsche.datに入力すること 全ての機能はユーザー定義関数で個別に分け行うこと。mainは各機能に飛ぶのみ スケジュールの書式は 年月8桁 予定20桁半角英数字 コメント半角英数字10桁 時間半角英数字4桁とする 余力のあるものは時間を取得し今現在の日付に何があるかmain画面に表示させなさい 並べ替えは演習のため mainでレコード数を取得→何らかの手段を使い並べ替えの関数に移動→レコードを構造体の配列で管理し入れ替える とする [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Borland C++ 5.5 [3.3] 言語: (C/C++/どちらでも可 のいずれか) [4] 期限: 2005年12月02日 入力閲覧はあっさりできましたが時間取得、並べ替えの最後の部分がうまくいきません。 どうかお願いします。
トリップ忘れたのでつけました。スレ汚しすいません
833 :
デフォルトの名無しさん :2005/11/29(火) 22:39:15
1] 授業単元: プログラミング演習
[2] 問題文: 除算は,減算を繰り返すことによって実現できる。例えば,6 / 2 は6 から2 を3 回引け
るということである。これを利用して,2 つの整数a とb を引数としてとり,a をb で割っ
た結果を返す関数を作成せよ。ただし,a あるいはb に負の数が入力された場合にも正しく
動くことを確認すること。テストは,a とb の正負全ての組み合わせに対して行うこと。
やりかけソース
http://up.viploader.net/mini/src/viploader0834.txt [3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: Microsoft Visual C++
[3.3] 言語: C
[4] 期限: 11月30日 0:00
[5] その他:
>>833 scanf("%d%d",&divis(a,b));
ってなんですか?
ガウス・ザイデル法ってのは、反復法の事かな?
>>833 (オリジナルを尊重)
int divis(int a,int b){
int i , j = 0;
if ((a < 0 && b > 0) || (a > 0 && b < 0)) j = 1;
a = abs(a);
b = abs(b);
if (b == 0) return(0);
for(i = 0 ;; i++){
a = a - b;
if (a < 0) break;
}
if (j == 1)i *= -1;
return(i);
}
int main(void){
int a, b, i;
printf("a÷bを計算します\n");
printf("a、b順に入れてください");
scanf("%d%d", &a, &b);
i = divis(a, b);
printf("割った結果;商=%d\n",i);
return(0);
}
838 :
デフォルトの名無しさん :2005/11/29(火) 22:53:25
>>833 if(a<0||b>0 && a>0||b<0){
j=1;
}
でなくて
if(a<0||b>0 && a>0||b<0){
j=1;
} else {
j=0;
}
int j; でなくてint sign;を使って
sign = a*b<0? -1: 1;
として、最後の
if(j==0){
i=-1*i;
}
をi *= sign;
としたほうがエレガント。
>>838 なるほど、そういう書き方もあるんですね
ありがとうございます
>>833 オリジナルを木っ端微塵。
#include <stdio.h> #include <stdlib.h>
int divis(int a,int b){
int i;
if(a<0 && b<0){ return divis(-a,-b); }
if(b==0) { return 0; }
if(a * b < 0) { return -1; }
for(i=0;a!=0;i++){ a-=b; if(a<0) return -2; }
return i;
}
int main(void){
int a,b,c;
printf("a÷bを計算します\n a、b順に入れてください");
scanf("%d%d",&a,&b);
c = divis(a,b);
switch(c){
case 0:printf("0で除算しようとしました\n"); break;
case -1:printf("割り算の左右の項の符号が一致しません\n"); break;
case -2:printf("割り切れませんでした\n"); break;
default: printf("割った結果;商=%d\n",divis(a,b)); break;
}
return(0);
}
どうでもいいけど、 i = -1 * i; も i = -i; と書くべきだな。コンパイラによっては余計な演算が一個減らせる。
default: printf("割った結果;商=%d\n",divis(a,b)); break; default: printf("割った結果;商=%d\n",c); break;
馬鹿に付き合うと苦労するよな
#include <stdio.h> #include <stdlib.h> int divis(int a,int b){ int i; if(a < 0) { return -divis(-a,b); } if(b < 0) { return -divis(a,-b); } if(b==0) { return 0; } for(i=0;a!=0;i++){ a-=b; if(a<0) return 0; } return i; } int main(void){ int a,b,c; printf("a÷bを計算します\n a、b順に入れてください"); scanf("%d%d",&a,&b); switch((c = divis(a,b))){ case 0:printf("除算エラー\n"); break; default: printf("割った結果;商=%d\n",c); break; } return(0); }
848 :
833 :2005/11/29(火) 23:25:31
>>837 のif文とかの大括弧はいらないんですか?
一応出来たんですが837がちょっと気になりました
>>837 ではないが、基本的に付けるほうが確実。
for() 命令1; ってやってて、命令2を足そうとして
for() 命令1; 命令2; とかやってバグだすよかまし。
>>848 ifのあと1文だけなら要らない
そもそもifの後は1文処理ってのからきて、
複数文処理したい時に、じゃあ{ }使って
ブロック化し、1文と見なしちゃおう
という発想
851 :
849 :2005/11/29(火) 23:28:58
ケコーン...
>>849-850 なるほど、そういうことなんですか
まだまだ勉強が足りないっすねぇ。。
アルゴリズムの勉強をもうちょっとした方がよさそう
アルゴリズムじゃなくてコードの書き方ですよ、お客さん。
854 :
98 :2005/11/29(火) 23:35:13
俺は1文でも括弧つけるけどな。
>>853 毎日一つプログラム作って鍛錬しますorz
>>855 じゃあ、俺の代わりにこのスレで宿題やっててくれ。俺はもう練る。
ノシ
∧,,∧ ( ´・ω・) ____(____)___ / \ ___\ .<\※ \____|\____ヽ ヽ\ ※ ※ ※| |====B=| \`ー──-.|\|___l__◎..|ヽ  ̄ ̄ ̄ ̄| .| ̄ ̄ ̄ ̄| \| |~ _∧,,∧ ___( ( ´・ω・)___ フゥ・・・ / \  ̄ ̄ ̄__\ .<\※ \____|\____ヽ ヽ\ ※ ※ ※| |====B=| \`ー──-.|\|___l__◎..|ヽ  ̄ ̄ ̄ ̄| .| ̄ ̄ ̄ ̄| \| |~ _________ / / / / / / / / バタンッ! /_________/ / \ ※ ※__\ .<\※ \_____※___|\____ヽ ヽ\ ※ ※ ※| |====B=| \`ー──-.|\|___l__◎..|ヽ  ̄ ̄ ̄ ̄| .| ̄ ̄ ̄ ̄| \| |~
861 :
829 :2005/11/30(水) 00:22:52
今日は賑わってんなーと思って除いてみたら なんかちょっと荒れてんな
一行分の文字列を入力し、次に数字nを入力すると、文字列がn番目から表示される って問題の解答例を教えてくれませんか?
>>864 あ、すいません
[1]授業単元:プログラミングⅡ
[2]問題文:一行分の文字列を入力し、次に数字nを入力すると、文字列がn番目から表示される
[3]環境
[3.1]OS:Windows
[3.2]コンパイラ名とバージョン:Visual C++ .NET 2003 コマンドプロンプト
[3.3]言語:C
[4]期限:今日中
お願いします
>>865 #include<stdio.h>
int main(void)
{
char *c;
int i,n;
printf("文字列入力:");
scanf("%s",c);
printf("何番目表示?:");
scanf("%d",&n);
for(i=1;i<n;i++)
c++;
printf("%d番目は%cです\n",n,*c);
return 0;
}
例外は一切考えてないぞ
あっ悪い問題読み違えたw
#include<stdio.h> int main(void) { char *c; int n; printf("文字列入力:"); scanf("%s",c); printf("何番目から表示?:"); scanf("%d",&n); c += n-1; while(*c!='\0') { printf("%c",*c); c++; } puts(""); return 0; } 例によって例外は考えてない
>>867 いえいえ
"HELLO"って文字列を入力した場合、数字2を入力すると"LLO"
みたいになる感じです
寧ろ c += n-1; 以下を、 printf("%s\n", c + n); return 0; } に。
マジだ初めて知った Σ(゚д゚lll) ちなみにあんまり長いの入れるとボロでるよ (´σ `)
ちょっと待て、それ以前に>868は重大なバグを抱えているぞ。
>>865 ただし1023文字まで。
#include <stdio.h>
int main(void) {
char buf[1024];
int n;
scanf("%1023[^\n]", buf);
scanf("%d", &n);
printf(buf + n);
}
>>866-868 ,870-871
それでは領域を確保していない。
875 :
デフォルトの名無しさん :2005/11/30(水) 02:19:02
>>868 char *c;
scanf("%s",c);
はまずいべ
あーもう、
int main(void)
{
char c[100];
int n;
printf("文字列入力:");
scanf("%99s",c);
printf("何番目から表示?:");
scanf("%d",&n);
printf("%s\n", c + n);
return 0;
}
にでもしとき。
>>874 それは流石に、%を含む文字列を入力されるとまずい。
いや・・動的メモリ確保が面倒だったからこれでどうにかならんかなと思ってw いろいろ試したら文字列長くなるとバグるなこれww
880 :
デフォルトの名無しさん :2005/11/30(水) 02:31:08
【質問テンプレ】
[1] 授業単元: IT入門B2
[2] 問題文(含コード&リンク): 円周率πを以下の式を用いて計算するプログラムを作成しなさい。
π/4 = arctan 1/2 + arctan 1/5 + arctan 1/8
ただし、arctanは以下の級数展開の式を用いて計算すること。
arctan t = t - t^3/3 + t^5/5 -t^7/7 + … + (-1)^n * t^(2n+1) / 2n+1 + …
http://www-it.sci.waseda.ac.jp/ITB2/c-class2/itb2-rep1.pdf [3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語:C言語
[4] 期限: ([2005年12月2日09:00まで]
[5] その他の制限:
よろしくお願いします。
881 :
デフォルトの名無しさん :2005/11/30(水) 02:36:57
遅いけど #include <stdio.h> #include <string.h> int main(void){ char str[256]; int i,j,n; printf("文字列を入力してください\n"); scanf("%s",str); printf("何番目から?\n"); scanf("%d",&n); for(i=n;;){ printf("%c",str[i]); i++; j=strlen(str); if(i>j){ break; } } return(0); }
それアークタンジェントどこまで計算すればいいのよ なんかここで計算止めみたいな基準ないの?
883 :
874 :2005/11/30(水) 02:37:29
>>876 なぜ%がダメなのか分からない。
ちなみにそれでは空白を含めない。
>>883 それじゃ、abc%def、2、とでも入力して味噌。
次スレには馬鹿が来ませんように ( 人 )
>>881 せめてjの算出はループの外へ。
そうすれば条件判断もifでやることもないし。
つーか、変数名が安直過ぎ。
別に商用でもないんだし動けばいいじゃん
まあ上達につながるしいいんじゃないの?
889 :
デフォルトの名無しさん :2005/11/30(水) 02:49:56
#include <stdio.h> #include <math.h> #define N 99 double myarctan(double x) { int i; int sign; double at = 0.0; sign = 1; for (i = 1; i <= N; i++) { if (i%2 == 0) continue; at += sign * pow(x, i)/i; sign *= -1; } return at; } int main(void) { double pi; pi = 4*(myarctan(1/2) + myarctan(1/4) + myarctan(1/8)); printf("π=%g\n", pi); }
890 :
889 :2005/11/30(水) 02:52:06
arctanの級数展開はNで定義されてます。
>>889 では99です。
>>889 forの繰り返し文を i += 2とすれば、その次のif文は要らない訳だが。
それと、sign *= -1;もsign = -sign;とした方が無駄な乗算が行なわれる可能性を排除できる。
処で、計算式が>880と違うわけだが、どっちが正しいんだ?
892 :
889 :2005/11/30(水) 02:55:47
>>891 pi = 4*(myarctan(1/2) + myarctan(1/5) + myarctan(1/8));
ですね^^
毎回 arctan 計算するのは無駄だろ?
人の宿題だし半分適当でもいいじゃん^^
895 :
889 :2005/11/30(水) 03:01:26
不適当なのか?
897 :
デフォルトの名無しさん :2005/11/30(水) 03:02:21
>>886 こういうのって最適化してくれないの?
まあそうでなくても外に出すべきだろうけど。
適当は意味が2通りあるから都合の(・∀・)イイ!!ように考えてくれ^^
>>897 strlen()は標準関数だし単純だからよきに計らってくれそうではあるね。
でも外に出せば条件判断がすっきりすることだし。
短いからど~でもい~い~ですよ~
ありゃ、円周率と聞いたから多倍長かと思って組んでたらdoubleでよかったのね。 組みあがったけどどうしよう…。
とりあえず晒す
903 :
889 :2005/11/30(水) 03:17:52
904 :
901 :2005/11/30(水) 03:27:22
905 :
901 :2005/11/30(水) 03:28:24
違った。文字コードUTF-8だ。
/* sin(x) = x - x^3/3! + x^5/5! + ... + (-1)^(n-1)(x^(2n-1)/(2n-1)!) + ... 普通に計算した場合(func1-3), 逐次方式(func4) x^3/3! = (x)*x*x/2/3 x^5/5! = (x^3/3!)*x*x/4/5 x^7/7! = (x^5/5!)*x*x/6/7 double の場合 n = 16 で収束 sin(π/6 = 0.523598775598298820) = 0.499999999999999940, 0.499999999999999940 sin(π/4 = 0.785398163397448280) = 0.707106781186547460, 0.707106781186547460 sin(π/3 = 1.047197551196597600) = 0.866025403784438490, 0.866025403784438490 sin(π/2 = 1.570796326794896600) = 1.000000000000000200, 1.000000000000000200 sin(2π/3 = 2.094395102393195300) = 0.866025403784438930, 0.866025403784438930 sin(π = 3.141592653589793100) = 0.000000000000000334, 0.000000000000000248 */
#include <stdio.h> #include <math.h> #define PI 3.14159265358979323846 struct pitable { double x; char *s; }; int func1(int n) { return (int)pow(-1, n); } double func2(int n, double x) { int i; double r = func1(n-1) * pow(x, (2 * n - 1)); for(i = 2 * n - 1; i > 1; i--) r /= i; return r; } double func3(double x, int max) { int i; double r = x; for(i = 2; i <= max; i++) r += func2(i, x); return r; }
double func4(double x, int max) { int i; double r = x; double y = x; for(i = 1; i < max; i++){ y *= x * x / (2 * i) / (2 * i + 1); r += (i & 1 ? -1 : 1) * y; // printf("%03d, %20.18f, %20.18f\n", i + 1, y, r); } return r; }
int main() { int i, j; struct pitable pt[] = { PI / 6, "π/6", PI / 4, "π/4", PI / 3, "π/3", PI / 2, "π/2", PI * 2 / 3, "2π/3", PI, "π" }; for(i = 1; i <= 20; i++){ printf("%03d\n", i); for(j = 0; j < 6; j++){ printf("sin(%s = %20.18f) = %20.18f, %20.18f\n", pt[j].s, pt[j].x, func3(pt[j].x, i), func4(pt[j].x, i)); } } return 0; }
>>889 の改善 and 修正
#define N 10000
double myarctan(double x)
{
int i;
double result;
double d;
double s;
for (i=3, d=x, s=-1.0, result = x; i<=N; i+=2)
{
d *= x * x;
result += s * d / (double)i;
s = -s;
}
return result;
}
int main(void)
{
double pi;
pi = 4.*(myarctan(1./2.) + myarctan(1./4.) + myarctan(1./8.)); /* doble型に修正*/
printf("pai=%g\n", pi);
return 0;
}
精度は… orz
計算式が間違えてた pi = 4.*(myarctan(1./2.) + myarctan(1./4.) + myarctan(1./8.)); /* doble型に修正*/ ↓ pi = 4.*(myarctan(1./2.) + myarctan(1./5.) + myarctan(1./8.)); /* doble型に修正*/
>>910-911 の結果
N = 100 で収束してるから N = 10000 回実行は無駄のようです
pi = 3.29999999999999980 : n = 1
pi = 3.14173932800660390 : n = 10
pi = 3.14159265358979220 : n = 100
pi = 3.14159265358979220 : n = 1000
pi = 3.14159265358979220 : n = 10000
>>910-911 のは誤差が伝播するから
>>889 ,892 の方が精度高いと思われ
どっちも五十歩百歩なんだけど
#include <stdio.h> double arct(double x, int n) { int i; double result; double d; double s; for(i = 3, d = x, s = -1.0, result = x; i <= n; i += 2){ d *= x * x; result += s * d / (double)i; s = -s; } return result; } int main(void) { int i; double pi; for(i = 1; i <= 10000; i *= 10){ pi = 4.0 * (arct(0.5, i) + arct(0.2, i) + arct(0.125, i)); printf("pi = %20.17lf : n = %d\n", pi, i); } return 0; }
↑ for(i = 1; i <= 10000; i *= 2){ で実行すると N = 32~64 あたりで収束するから N = 100 (99) でも無駄大杉
なんで収束見るのに回数決めうちしてるんよ. 適当な eps を取って while(error > eps) { ... } が定石でしょうが.
N を +1 しながら過去 2 回の計算結果を比較して収束チェックするのが良
>>829 正直すまんかった。
で、これなんてガウス・ザイデル法?
問題文
>>818 は「ガウス・ザイデル法で」という指定付なんだが。
だから困ってる。
918 :
829 :2005/11/30(水) 08:37:38
ぐへ,ごめん.ガウスジョルダンとガウスザイデル勘違いしてた orz.... ザイデルは反復解法のほうですね.こっちだと A x = 0 に反復させたら一発で x = 0 で終わりですね
919 :
917 :2005/11/30(水) 08:41:04
いや、俺も言葉が過ぎた。申し訳ない。
921 :
776 :2005/11/30(水) 10:37:53
すいません、書き方が悪かったです [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): N個の要素よりなる配列をmain関数に宣言する。配列にデータを読み込む関数(例えばinput) をmainから呼んで入力を行いデータを書き出す関数(例えばoutput)を呼んで出力するプログラムを 配列で呼んでポインタで受け取るやり方を書け。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン: [3.3] 言語:C [4] 期限:2005年11月21日 [5] その他の制限: おねがいします
void input(int *a){int i;for(i=0;i<N;i++){scanf("%d",a+i);}} void output(int *a){int i;for(i=0;i<N;i++){printf("%d\n",*(a+i));}} int main(){int a[N];input(a);output(a);return 0;}
>>884 あ、2番目のprintfがいかんかったのか。
寝坊をかまして闇の締切日の内容がリアルになりました。
>>924 大丈夫だ、今日はまだ11/30だ。
>>453 提出日は明日11/31... と言い切れ!!
926 :
デフォルトの名無しさん :2005/11/30(水) 15:58:27
学校の課題です。私の力では解けないのでよろしくおねがいします。 forを使用してください。あと初心者っぽくお願いします。 •3×3の2次元配列を用意する • キーボードから任意の実数を9個入 力し,順番に配列にいれる. ([0][0]->[0][1]->[0][2]->....) • その入力データから3×3の配列の 縦と横のそれぞれの平均(実数)を 求め,画面に表示する. • 入力データ – 1.1 1.2 1.3 1.4 1.5 ・・・・ 例えば 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 があると,それぞれの横の平均1.2 1.5 1.8が出力されて たての平均も1.4 1.5 1.6と出るようなプログラムを作ってください。 よろしくお願いします。
929 :
デフォルトの名無しさん :2005/11/30(水) 16:40:12
[1] プログラミング入門 [2] • 3×3の2次元配列を用意する • キーボードから任意の実数を9個入力し,順番 に配列にいれる.([0][0]->[0][1]->[0][2]->....) • その入力データから3×3の配列の縦と横のそ れぞれの平均(実数でよい)を求め,画面に表 示する. • 入力データ – 1.1 1.2 1.3 1.4 1.5 ・・・・ [3] 環境 [3.1] Windows [3.2] コマンドプロンプト 秀丸 [3.3]C [4] あと一時間半 [5] forを使って初心者っぽくお願いします。
930 :
926 ◆8/./95naVw :2005/11/30(水) 16:41:33
[1] プログラミング入門 [2] • 3×3の2次元配列を用意する • キーボードから任意の実数を9個入力し,順番 に配列にいれる.([0][0]->[0][1]->[0][2]->....) • その入力データから3×3の配列の縦と横のそ れぞれの平均(実数でよい)を求め,画面に表 示する. • 入力データ – 1.1 1.2 1.3 1.4 1.5 ・・・・ [3] 環境 [3.1] Windows [3.2] コマンドプロンプト 秀丸 [3.3]C [4] あと一時間半 [5] forを使って初心者っぽくお願いします。 何回も書き込んですいません。
>>926 初心者っぽい?
#include <stdio.h>
int main (void)
{
int i, j;
double d[3][3];
for (i=0; i<3; ++i)
for (j=0; j<3; ++j)
scanf("%lf", &(d[i][j]));
for (i=0; i<3; ++i)
printf("横平均 %f\n", (d[i][0] + d[i][1] + d[i][2])/3.0);
for (i=0; i<3; ++i)
printf("縦平均 %f\n", (d[0][i] + d[1][i] + d[2][i])/3.0);
return 0;
}
933 :
926 ◆8/./95naVw :2005/11/30(水) 16:53:51
ありがとうございます またおねがいします(^_^)
くそお、 #define フォー for #define バッチコーイ scanf #define セイセイセイセイ printf なんてやって遊んでたら...
>>934 どうみてもコンパイルエラーです
本当にありがとうございました
#include <stdio.h> int main(int argc,char *argv[]){ double a[3][3],r[3],c[3]; int i; scanf("%lf %lf %lf %lf %lf %lf %lf %lf %lf", &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]); for(i=0;i<3;i++ ){ i[r]=(a[i][0]+a[i][1]+a[i][2])/3; i[c]=(a[0][i]+a[1][i]+a[2][i])/3; } printf("横の平均%f %f %f\n",0[r],1[r],2[r]); printf("たての平均%f %f %f\n",0[c],1[c],2[c]); return 0; } いちおう入力データが1行かと思って作ってたら出遅れた 初心者っぽく記法をいじっといた。コンパイル通るのは確認した
>>935 まちがいなくコンパイルエラーでした
本当にありがとうございました
>>934 が通らないとは糞なプリプロセッサばかりだな。
VC6 error C2007: #define の後に識別子が必要です。 VC2005 OK!! ktkr!!!
VC2003 error C3209: 'tH[' : Unicode 識別子は現在サポートされていません。 2003 → 2005でサポートされたのか…?
学校の課題が解けません。 [1]授業単元:アルゴリズム・プログラム [2]問題文:適当な連結成分を持つグラフを作り、関節点を見つけるプログラムを作ってください。 グラフには関節点を入れるようにしてください。 [3]環境 [3.1]OS:Windows [3.2]コンパイラ名とバージョン:Visual C++ .NET 2003 コマンドプロンプト [3.3]言語:どちらでも可 [4]期限:来週の月曜日 どなたかお願いします。。。
944 :
◆XYndhCe37s :2005/11/30(水) 20:06:29
[1]授業単元:プログラミング基礎 [2]問題文:rand()を用いて一様乱数を100個発生させ、乱数の最大値RAND_MAXでそ れぞれを割り、その答えが0≦i≦0.1、0.1<i≦0.2、・・・0.9≦i≦1 の10個の区間にそれぞれ何個あるか調べよ [3]環境 [3.1]OS:Linux [3.2]コンパイラ名とバージョン:gcc 2.9 [3.3]言語:どちらでも可 [4]期限:明日午前9時まで お願いします
945 :
◆XYndhCe37s :2005/11/30(水) 20:09:33
0.9<i≦1でした
>>944 #include <stdio.h>
#include <stdlib.h>
int main(){
int i, j, sum[10];
double d;
for(i = 0; i < 10; ++i) sum[i] = 0;
for(i = 0; i < 100; ++i){
d = (double)rand() / (double)RAND_MAX;
for(j = 0;j < 10; ++j){
if(d <= (double)(j+1)/10){ ++sum[j]; break;}
}
}
for(i = 0;i < 10; ++i)
printf("%0.1f < i <= %0.1f %2d\n", (double)i/10, (double)(i+1)/10, sum[i]);
return 0;
}
適当に作ったんで誰か添削ヨロ
あと表示が0<i になってるけどキニシナイ
暇なんで作ってみたC++Version #include <stdlib.h> #include <iostream> int main() { using namespace std; long box[10]; for (int j=0;j<10;j++) box[j] = 0; for (int i=0;i<100;i++) { int n = rand()*10/RAND_MAX; box[n]++; } for (int k=0;k<10;k++) { cout << "0." << k << "~0." << k+1 << ":" << box[k] << endl; } return 0; }
[1] 授業単元:プログラミング演習Ⅱ [2] 問題文: 平面座標上のn個(4個以上)の長方形の2つの対角となる点をキーボードから入力し、 その点を一方向リストを使って表示するプログラムを作成せよ。 ただし、表示する時には長方形の面積も表示すること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:12/1まで [5] その他の制限:初心者にもわかりやすいようにお願いします。 462さんに一度作ってもらったのですが、LinuxでCtrl-Zを入力すると プログラムが強制終了してしまうので、上手く動きませんでした。 Windowsではちゃんと動いたのですが。 あと表示するのは長方形の対角となる2点だけでもいいそうです。 申し訳ないですが、どなたかまたご教授お願いします。
>>948 Linuxでは一般的にCtrlZはプロセス中断。強制終了ではない。
入力を閉じたいなら、CtrlDでできるはず。
950 :
942 :2005/11/30(水) 22:37:56
>>943 ありがとうございます
なんとか月曜までにがんばってみます
>>947 int n = rand()*10/RAND_MAX;
これって大丈夫?
19.8.1 ISO C Random Number Functions
This section describes the random number functions that are part of the ISO C standard.
To use these facilities, you should include the header file stdlib.h in your program.
— Macro: int RAND_MAX
The value of this macro is an integer constant representing
the largest value the rand function can return.
In the GNU library, it is 2147483647,
which is the largest signed integer representable in 32 bits.
In other libraries, it may be as low as 32767.
[1] 授業単元:プログラミングⅡ [2] 問題文: 1.最初にnの値を入力して、各入力を行った後、それぞれの目的を実行する以下のプログラムを作成しなさい。 ただし、nの大きさは100を超えないものとする。 n人の点数を入力した後、不可(60点以下)の人の数を調べるプログラム ただし一次元配列を引数で渡すと各計算をして結果を返してくれる関数を作り、この関数を使って、 その計算を表示するプログラムを作りなさい。 2. 最初に行列の次元nの値を入力し、配列を使って次の計算をするプログラムを 作りなさい。ただし、nは100以内で、n次の正方行列とする。 行列AとBを入力すると、その掛け算A×Bを計算するプログラム ただし二次元配列を引数で渡すと各計算する関数を作り、この関数を 使って、その計算を表示するプログラムを作りなさい。ただし、計算した 結果は、引数で渡した行列Aで戻すものとする。 [3] 環境 [3.1] OS:xp [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:12/1まで 行列同士の規則性を見つけ出してプログラムで表してとくようなのですが、 いまいちよくわかりません。よろしくお願いいたします。
953 :
デフォルトの名無しさん :2005/12/01(木) 01:01:58
[1] プログラミング演習 [2] 1~100万までの整数から素数全てを表示せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:明後日 [5]整数の表示から素数の導きについて何を使えば分からずもし、よろしければ 説明もお願いします 長々と書きましたがどうぞよろしくお願いします
954 :
デフォルトの名無しさん :2005/12/01(木) 01:05:01
955 :
デフォルトの名無しさん :2005/12/01(木) 01:22:36
>>953 こんなでどう?
だけど、計算時間がものすごくかかるね
#include <stdio.h>
#define MAXNUM 1000000
int isprime(int pr)
{
int i;
for (i = 2; i < pr; i++) {
if (pr % i == 0) break;
}
return i == pr? 1: 0
}
int main(void)
{
int i;
for (i = 2; i <= MAXNUM; i++) {
if (isprime(i)) {
printf("%d\n", i);
}
}
return 0;
}
>>953 眠たいので適当に書いた。
アルゴリズムは エラトステネスのふるい でググッて
#include<stdio.h>
int t[1000000],x,y;
int main(){
for(x=t[0]=t[1]=2;x<1000000;++x)
for(y=x+x;y<1000000;y+=x)t[y]=2;
for(x=y=0;x<1000000;++x)t[x]||(printf("%7d ",x),++y%8||puts(""));
return 0;
}
957 :
デフォルトの名無しさん :2005/12/01(木) 01:27:36
>>953 printf("2, 3, 5, 7, 11,..............,999983\n");
958 :
デフォルトの名無しさん :2005/12/01(木) 01:35:57
みなさんありがとうございます
参考にして頑張ります
>>957 えwwwwwwwwww
素数って素数で割れなければいいんだっけ あんまり覚えてないからフォルダ漁ったら出てきた #include <stdio.h> int main(void) { int i, n; static int prime[1000000]; int ptr = 0; int flag; prime[ptr++] = 2; prime[ptr++] = 3; for (n = 5; n <= 1000000; n += 2) { flag = 0; for (i = 1; prime[i] * prime[i] <= n; i++) { if (n % prime[i] == 0) { flag = 1; break; } } if (!flag) { prime[ptr++] = n; printf("%d\n", n); } } return 0; }
素数は素数で割れませんよ
そーすね
割れますが何か。 つーか、自分自身で割れない数は0だけですが。
もっとも単純な方法は ある奇数整数nが素数かを判断するには 3からルートnまでで割り切れるかどうかを調べればいい
√nなら割り切れますね
>>953 エラトステネスの素直なプログラム
#include <stdio.h>
#define N 1000000
int main (void)
{
char t[N+1];
int i, j, count;
printf("%d\n", 2);
count = 1;
for (i=0; i<=N; ++i) t[i] = 0;
for (i=3; i<=N; i += 2)
{
if (t[i] == 0)
{
printf("%d\n", i); ++count;
for (j=i; j<=N; j += i) t[j] = i;
}
}
printf("count = %d", count);
return 0;
}
効率なんか考えてねぇよ
>>952 (1)
int damecount(int*point,int n,int low){
int i; int m;
m=0;
for(i=0;i<n;i++)if(point[i]<=low)m++;
return m;
}
971 :
970 :2005/12/01(木) 09:35:44
<memory.h>か<string.h> を#includeし忘れた。
972 :
948 :2005/12/01(木) 09:54:36
>>949 ありがとうございます。
解決しました。
973 :
デフォルトの名無しさん :2005/12/01(木) 10:16:38
初めまして。C++を最近習い始めた超初心者なのですが、 ひとつ質問があります。 今授業で配列(x[ ]など)を学んでいるのですが、それの問題で 「5つ数字を入力してその内の最小値を見つけ、画面にその最小値の 配列番号を表示させる」というのがなかなかできません。 例えばx[4]={10,45,23,8,14}の場合x[3]が最小値を持ってるので 画面に「3」と出したいのですが・・・。 以下のようにやってみたところ表示されるのは最小値であって 配列の番号ではないんです。 void findIndex(int x[], int size); int min; int main() { int score[4]; cout << "Enter 4 numbers: " << endl; cin >> score[0]; min = score[0]; findIndex(score, 4); cout << "The index of the array which has the smallest number is: " << min << endl; return 0; } void findIndex(int x[], int size) { int n; for (n = 1; n < size; n++) { cin >> x[n]; if (x[n] < min) min = x[n]; } } どなたかご指導のほどよろしくお願いします。
スレタイ半年読み返して来い。
意味なくglobal変数使っている時点で終了。 findIndexでnを返り値にしろ。
976 :
973 :2005/12/01(木) 10:29:35
>>974 申し訳ございません。半年も読み返したら期限過ぎちゃうんでご勘弁を・・。
[1] 授業単元:Problem Solving with C++
[2] 問題文(含コード&リンク):上記
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: win visual studio 6.0
[3.3] 言語: C++
[4] 期限: 明日まで
よろしくお願いします。
977 :
973 :2005/12/01(木) 10:47:34
>>975 >>意味なくglobal変数使っている時点で終了。
ごもっともです・・・。
なんせ初心者なんでいろいろ試してみてるんですが
その分無駄も多いですよね。
>>findIndexでnを返り値にしろ。
すいません、もう少し分かりやすくお願いできますでしょうか。
nを返り値にとはどうのようにすればできますか・・・?
int findIndex(int x[], int size) { int n,ret=0; int min = x[0]; for (n = 1; n < size; n++) { cin >> x[n]; if (x[n] < min) { min = x[n];ret=n; } } return ret; }
979 :
デフォルトの名無しさん :2005/12/01(木) 10:54:28
スレ違いかと思いますがCASL2で 6×11-(4×8÷2)のプログラムのつくり方がわかりません。 どなたかわかるかた今したら教えていただけないでしょうか。
元も子もないかもワカランが、最小値なら std::min_elementで一発だろ 最初は使い方覚えるだけでいいし、 自作するより遙かにマシなはず
982 :
デフォルトの名無しさん :2005/12/01(木) 11:28:12
激初心者スレにも書いたんですが。。。。 Z1=2.5+3.2i Z2=1.3+0.4i この和と積を求めて、結果を打ち出すプログラムはどうなりますか? 自分でやってみたんですが、うまくいきません。 誰かわかる方教えてください
>>982 #include <stdio.h>
#include <complex.h>
int main(void)
{
double _Complex Z1 = 2.5 + 3.2i;
double _Complex Z2 = 1.3 + 0.4i;
double _Complex R = Z1 * Z2;
printf("%lf+%lfi\n", __real__ R, __imag__ R);
}
985 :
984 :2005/12/01(木) 11:48:43
おっと、和もか。 適宜追加してくれ。
>>985 >1に則っていない、しかもマルチに回答すんじゃね。
#しかし、C99って便利になってんだな。
987 :
973 :2005/12/01(木) 12:05:36
>>978 なるほど!findIndexをvoidじゃなくてintにすればreturnできますね。
しかもret=nをifの{}の中に入れるとは思いつきませんでした!
ret=nみたいなことは試したのですが{}がなかったので
どんな数字入れても配列の一番最後の「4」が表示されるだけだったんです。
早速試してみます。
>>981 すみません、まだそういうの習ってないんでわかんないです・・・。
それは最小値を見つけてくれるんですか?だったらかなり使えそうですね。
勉強してきます。ありがとうございます。
次スレ立ててみる 無理ならまた書き込む。
989 :
988 :2005/12/01(木) 12:12:55
>970 ありがとうございました、ソースの大本はわかったのでこれを元に 改変してみます。
991 :
デフォルトの名無しさん :2005/12/01(木) 16:57:01
スタックを 1.配列を利用して 2.また、構造体を用いたリストを応用して 実装してください。 プッシュ、ポップの関数を定義してください。
1] 授業単元:プログラム演習C [2] 問題文(含コード&リンク):getchar関数を使用して文字を読み取り、ピリオドが出てきたら改行する プログラムを作りなさい。(ファイルの終わりを入力したらプログラムを終了させる) [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2005年12月2日17時 [5] その他の制限: ポインタと標準入出力関数の初歩しか習っていません よろしくお願いします
#include <stdio.h> int main(void) { int ch; while (ch = getchar(), ch != EOF) if (ch == '.') puts(""); return 0; }
次スレ?
(・∀・)カエレ!
\ │ / / ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ─( ゚ ∀ ゚ )< ぱいそんぱいそん! \_/ \_________ / │ \ ∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< ぱいそんぱいそんぱいそん! ぱいそん~~~! >( ゚∀゚ )/ | / \__________ ________/ | 〈 | | / /\_」 / /\」  ̄ / /
\ │ / / ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ─( ゚ ∀ ゚ )< ぱいそんぱいそん! \_/ \_________ / │ \ ∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< ぱいそんぱいそんぱいそん! ぱいそん~~~! >( ゚∀゚ )/ | / \__________ ________/ | 〈 | | / /\_」 / /\」  ̄ / /
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。