C/C++の宿題を片付けます 75代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/10/19(木) 20:39:01【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html
【前スレ】
C/C++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0002デフォルトの名無しさん
2006/10/19(木) 20:53:27乙
0003デフォルトの名無しさん
2006/10/19(木) 21:41:43>>http://pc8.2ch.net/test/read.cgi/tech/1158844912/1000
初の1000GETですた
0004デフォルトの名無しさん
2006/10/19(木) 22:36:11[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):http://www.vipper.net/vip114940.jpg
↑の図の高さBEを求める関数を作成せよ。
引数は距離DE(m)、仰角θ(度)、目の高さAD(m)
直角三角形ABCにおいてtanθ=BC/AC
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 無期限
0005デフォルトの名無しさん
2006/10/19(木) 22:40:13{
return de*tan(theta)+ad ;
}
0006デフォルトの名無しさん
2006/10/19(木) 22:45:23double be_height(double de, double theta, double ad){
theta*=M_PI/180;
return (de*tan(theta)+ad);
}
0007デフォルトの名無しさん
2006/10/19(木) 23:13:32これ、すげー難しい問題だな。
0008デフォルトの名無しさん
2006/10/19(木) 23:17:020009デフォルトの名無しさん
2006/10/19(木) 23:21:18[2] 問題文(含コード&リンク):100までの全ての素数とその個数表示
するプログラム。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: (gcc
[3.3] 言語: (C
[4] 期限: 明日
[5] その他の制限:
0010デフォルトの名無しさん
2006/10/19(木) 23:24:06[2] 問題文:行列の積を用いた性能評価プログラムを作成しなさい
計算に何秒かかったのか表示し、行列の大きさは任意で変更が出来るように組むこと
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 2006年10月20日14時
[5] その他の制限: コンパイルオプションには最適化を指示する。
倍精度浮動小数点を用いること
前スレにも書き込みましたがよろしくお願いします
0011デフォルトの名無しさん
2006/10/19(木) 23:27:230012デフォルトの名無しさん
2006/10/19(木) 23:31:49isPrime(int n) {
int i;
for(i=2;i<n;i++)
if(n%i == 0)
return 0;
return 1;
}
0013デフォルトの名無しさん
2006/10/19(木) 23:32:28[2] 問題文(含コード&リンク):
サンプル数6個で、2つの変数(x、y)を入力してその共分散と相関係数を出力する
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語: Cでお願いします
[4] 期限: 明日中
[5] その他の制限:使う命令は、printf,scanf,for文等長くなってもいいので
初心者が使う文法みでお願いします
#include<stdio.h>
#include <math.h>
main()
{
scanf( "%d%d", &a, &g );
scanf( "%d%d", &b, &h );
scanf( "%d%d", &c, &i );
scanf( "%d%d", &d, &j );
scanf( "%d%d", &e, &k );
scanf( "%d%d", &f, &l );
m=(a+b+c+d+e+f)/6;
n=(g+h+i+j+k+l)/6;
S=((a-m)(g-n)+(b-m)(h-n)+(c-m)(i-n)+(d-m)(j-n)+(e-m)(k-n)+(f-m)(l-n))/6;
X=double sqrt(double((a-m)^2+(b-m)^2+(c-m)^2+(d-m)^2+(e-m)^2+(f-m)^2));
Y=double sqrt(double((g-n)^2+(h-n)^2+(i-n)^2+(j-n)^2+(k-n)^2+(l-n)^2));
R=S/(X*Y)
printf("%d",S);
printf("%d",R);
0014デフォルトの名無しさん
2006/10/19(木) 23:36:12#include <math.h>
main()
{
double a, b, c, d, e, f, g, h, i, j, k, l, m, n, S, X, Y, R ;
scanf( "%f%f", &a, &g );
scanf( "%f%f", &b, &h );
scanf( "%f%f", &c, &i );
scanf( "%f%f", &d, &j );
scanf( "%f%f", &e, &k );
scanf( "%f%f", &f, &l );
m=(a+b+c+d+e+f)/6;
n=(g+h+i+j+k+l)/6;
S=((a-m)(g-n)+(b-m)(h-n)+(c-m)(i-n)+(d-m)(j-n)+(e-m)(k-n)+(f-m)(l-n))/6;
X=sqrt((a-m)^2+(b-m)^2+(c-m)^2+(d-m)^2+(e-m)^2+(f-m)^2);
Y=sqrt((g-n)^2+(h-n)^2+(i-n)^2+(j-n)^2+(k-n)^2+(l-n)^2);
R=S/(X*Y)
printf("%f",S);
printf("%f",R);
}
0015デフォルトの名無しさん
2006/10/19(木) 23:39:35どんな行列の積を計算して性能評価にするんだ?
0016デフォルトの名無しさん
2006/10/19(木) 23:51:30正方行列の積を計算してその計算にかかった時間と、繰り返しの回数からMflopsを求めるプログラムです。
1,2,4,8…といったように倍の大きさの行列でどのように計算の時間が変わるのか測定するのが目的です。
0017デフォルトの名無しさん
2006/10/20(金) 00:05:32http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2795.cpp
0018デフォルトの名無しさん
2006/10/20(金) 00:10:44ゴテゴテしすぎてて、Mflops を求める、という用途には全然役に立たないような。
0019デフォルトの名無しさん
2006/10/20(金) 00:23:17#include<stdio.h>
#include<math.h>
#define DATA_NUM 6
int main(void){
double x[DATA_NUM], y[DATA_NUM];
double sum_x, sum_y, ave_x, ave_y, dif_x, dif_y;
double S, X, Y, R, X_2, Y_2;
int i;
sum_x=0.0;sum_y=0.0;
for(i=0;i<DATA_NUM;i++){
scanf("%lf %lf", &x[i], &y[i]);
sum_x+=x[i];
sum_y+=y[i];
}
ave_x=sum_x/DATA_NUM;
ave_y=sum_y/DATA_NUM;
S=0.0;X_2=0.0;Y_2=0.0;
for(i=0;i<DATA_NUM;i++){
dif_x=x[i]-ave_x;
dif_y=y[i]-ave_y;
S+=dif_x*dif_y/DATA_NUM;
X_2+=dif_x*dif_x;
Y_2+=dif_y*dif_y;
}
X=sqrt(X_2);
Y=sqrt(Y_2);
R=S/(X*Y);
printf("%f\n", S);
printf("%f\n", R);
return 0;
}
0020デフォルトの名無しさん
2006/10/20(金) 02:06:27#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
int is_prime(int n,int*buf,int p){int i;for(i=0;i<p;i++)if(n%buf[i]==0)return 0;return 1;}
int get_prime(int n,int*buf){int i,j,p,m=sqrt((double)n);j=p=1;buf[0]=2;i=3;while(i<=n){if(is_prime(i,buf,j))buf[p++]=i;if(i<=m)j=p;i++;}return p;}
int main(int argc,char*argv[]){int i=0,n,m,p;int*buf;if(argc<2){fprintf(stderr,"usage error : no input\n");exit(1);}
while(*(argv[1]+i))if(!isdigit(*(argv[1]+i++))){fprintf(stderr,"usage error : illeagal input\n");exit(1);}
n=atoi(argv[1]);if(n<2){fprintf(stderr,"usage error : illeagal input\n");exit(1);}buf=(int*)malloc(sizeof(int)*(n-1));
if(!buf){fprintf(stderr,"out of memory\n");exit(1);}p=get_prime(n,buf);for(i=0;i<p;i++){printf(" %d",buf[i]);if(!((i+1)%10))printf("\n");}
printf("\ninput = %d\ncount = %d\n",n,p);free(buf);return 0;}
0021デフォルトの名無しさん
2006/10/20(金) 08:39:310022デフォルトの名無しさん
2006/10/20(金) 09:09:17main()の7割が引数チェック…
そこまで丁寧に作らなくても#defineでいいんでね?
0023デフォルトの名無しさん
2006/10/20(金) 09:31:52#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <math.h>
int is_prime(int n){int i;if(n<=1)return 0;for(i=2;i<=sqrt(double(n));i++)if(n%i==0) return 0;return 1;}
int main(void){int i,c=0,n=100;for(i=1;i<n;i++){if(is_prime(i)){printf(" %d",i);c++;
if(!((c+1)%10))printf("\n");}}printf("\ncount = %d\n",c);return 0;}
0024デフォルトの名無しさん
2006/10/20(金) 10:01:31int is_prime(int n){int i;if(n<=1)return 0;for(i=2;n/i>=i;i++)if(n%i==0) return 0;return 1;}
0025デフォルトの名無しさん
2006/10/20(金) 10:52:25どうもありがとうございます。参考までに>>14はどこがおかしいのですか?
0026デフォルトの名無しさん
2006/10/20(金) 11:06:36David van Brackle って人が書いたプログラムで1行で書けけるプログラムなんだけれども
main(Q,O)char**O;{if(--Q){main(Q,O);O[Q][0]^=0X80;for(O[0][0]=0;O[++O[0][0]]!=0;)if(O[O[0][0]][0]>0)puts(O[O[0][0]]);puts("----------");main(Q,O);}}
このプログラムを実行するとコマンドラインの引数すべての部分集合を表示することができるらしいのですが
どうして表示されるのか解説をしろという問題なのですが
どうしてなるのかわかる方はいらっしゃいませんか?
解説できる方がいたら解説をお願いします。
0027デフォルトの名無しさん
2006/10/20(金) 11:09:38^ はC言語では XOR の意
0028デフォルトの名無しさん
2006/10/20(金) 11:37:24mainの再帰ってありなのか…おもしろいな
解説者がすぐ現れるかもしれんけど面白そうだからじっくり考えてみるか
002928
2006/10/20(金) 12:34:28int ini_n = -1;
int main(int n, char **v) {
static int cnt = 0;
int i;
if(ini_n == -1) ini_n = n;
for(i=0;i<cnt;i++) printf(" ");
printf("main(%d, \"", n);
for(i=1;i<n;i++) printf("%s ", v[i]);
for(i=n;i<ini_n;i++) printf("(%s) ", v[i]);
printf("\")\n");
cnt++;
if(--n) {
main(n,v);
v[n][0] ^= 0X80;
for(i=0;i<cnt;i++) printf(" ");
for(i=1;i<n;i++) printf("%s ", v[i]);
for(i=n;i<ini_n;i++) printf("(%s) ", v[i]);
printf("\n");
for(v[0][0]=0; v[++v[0][0]]!=0; ) {
if(v[v[0][0]][0] > 0) {
for(i=0;i<cnt;i++) printf(" ");
puts(v[v[0][0]]);
}
}
for(i=0;i<cnt;i++) printf(" ");
puts("----------");
main(n,v);
}
cnt--;
}
003028
2006/10/20(金) 12:35:46(環境によっては0とOの違いが見分けづらいので、変数名も変えた)
O[Q][0]^=0X80で値を負にすることによって、出力するかどうかのフラグにしている。
XORなので再び実行されると元に戻るのもポイント。
今は時間がないので、詳細はまた後で。
0031デフォルトの名無しさん
2006/10/20(金) 13:47:53[2] 問題文(含コード&リンク):プロセススケジューリングのシュミレータ
スケジューリング(FCFS,SPT,ラウンドロビン)*分布(一様,指数,超指数)の9通り。
[3] 環境
[3.1] OS: (Linux
[3.2] コンパイラ名とバージョン: (gcc
[3.3] 言語: (C言語
[4] 期限: ([2006年11月24日13:00まで]
[5] その他の制限: なし
宣しくお願いします。
0032デフォルトの名無しさん
2006/10/20(金) 16:19:240033デフォルトの名無しさん
2006/10/20(金) 19:51:22ちなみにC++ではmainの再帰が禁じられた。
グローバルなオブジェクトの初期化との兼ね合いのようだ。
0034デフォルトの名無しさん
2006/10/20(金) 20:51:00これだけの情報でどうしろというのか
0035デフォルトの名無しさん
2006/10/20(金) 23:23:58>>29 のマネして書き換えてみた
argv[0][0] はループ用の変数として使われてるので i に置き換え。
あとはよく使われる argc argv に変数名を置き換えてみた。
ハノイの塔の問題を解くプログラムに似てるかな…
#include<stdio.h>
int main(int argc, char **argv)
{
if(--argc)
{
int i;
main(argc,argv);
argv[argc][0]^=0x80;
for(i=0;argv[++i]!=0;)
if(argv[i][0]>0)
puts(argv[i]);
puts("----------");
main(argc,argv);
}
return 0;
}
0036デフォルトの名無しさん
2006/10/20(金) 23:47:16超指数分布の意味が分からなかった。超幾何分布じゃないよね?
分布ってなにの分布?
プロセスの発生頻度?プロセスの所要時間?両方?その他?
期待してる入力と出力が分からない。
下のコードでもおk?
#include<stdio.h>
int main(void){
printf("シミュレーション開始\n");
printf("シミュレーション終了\n");
return 0;
}
0037デフォルトの名無しさん
2006/10/21(土) 00:14:53>>35
説明不足だったり、お礼が遅れてしまいすいません。
ありがとうございました。
とても参考になります。
0038デフォルトの名無しさん
2006/10/21(土) 00:17:50[2] 問題文(含コード&リンク):下のような感じで、3行6列の行列を表示させよ。
ただし、一番上の行に○行○列と言った感じで表示させること。
3 6(←こんな感じに)
2 5 10 7 0 4
11 3 5 4 2 9
1 8 7 6 4 1
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: Borland C
[3.3] 言語: C
[4] 期限: 10月23日0:00まで
[5] その他の制限:標準ライブラリのみを使用すること。
0039デフォルトの名無しさん
2006/10/21(土) 00:21:54printf( "3 6\n") ;
printf( "2 5 10 7 0 4\n") ;
printf( "11 3 5 4 2 9\n") ;
printf( "1 8 7 6 4 1\n" ) ;
0040tanomu
2006/10/21(土) 00:33:00[2] 問題文(含コード&リンク):キーボードからL(一遍の長さ)、p(0から1までの数)
を入力し、pの確立でL*Lのグリッド内に木を詰めなさいと。(森を作るのね)
それで、左淵にある木、すべてに火を付けて、燃えてる木がなくなるまでシミュレート
し、その時間を計算しろっての。火がついた木は次のステップで灰になって、その木の
近隣にある木(縦と横)に火がうつるワケです。で、近隣に火を移す木がなくなるまで
プログラムは実行されるのだ。
[3] 環境
[3.1] OS:Windows,Mac,Linux、どれでもよか
[3.2] コンパイラ名とバージョン: (gcc
[3.3] 言語: (C言語
[4] 期限: ([出来れば来週]
[5] その他の制限: 出来れば 下のプログラムに近い物をお願い。
シミュレーション自体は上手くいってるっぽいけど、ステップをちゃんと
計算してくれないのだ
0041tanomu
2006/10/21(土) 00:35:29#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define L 7
#define p 0.8
//tree occupation probability
main()
{
double rnd;
int tree[L][L]; //tree location (i=0,j=0)~(i=L-1,j=L-1)
int i,j;
int n=1;
int t=0; //time
FILE *output1;
FILE *output2;
// srand(time(NULL));
0042tanomu
2006/10/21(土) 00:35:59output2=fopen("after.dat","w");
for(i=1;i<L-1;i++){
for(j=1;j<L-1;j++){
rnd=(double)rand()/RAND_MAX;
if(rnd<p){
tree[i][j]=1; //tree occupied at i,j
fprintf(output1,"%d\t%d\n",i,j);
}else{
tree[i][j]=0; //no tree at i,j
}
} //end of j loop
}//end of i loop
for(i=0;i<L;i++){
tree[i][0]=0; //no trees at the bottom
tree[i][L-1]=0; //no trees at the top
tree[0][i]=0; //no trees on the left side
tree[L-1][i]=0; //no trees on the right side
}
fclose(output1);
for(j=1;j<L-1;j++){
if(tree[1][j]==1) tree[1][j]=2; //sets all the tree on the left edge on fire
}
0043tanomu
2006/10/21(土) 00:37:12n=0; //reset n. this counts the number of burning tree
t++;
for(i=0;i<L;i++){
for(j=0;j<L;j++){
if(tree[i][j]==2){//if the tree at the current site is on fire
if(tree[i][j]==2) printf("burning tree--> %d\t%d\t%d\n",i,j,n);
//printf("burning tree-->%d\n",n);
if(tree[i+1][j]==1) {tree[i+1][j]=2;} //burns the one on the right
n++;
// if(tree[i][j+1]==1) tree[i][j+1]=2; //burns the one on the top
//if(tree[i-1][j]==1) tree[i-1][j]=2; //burns the one on the left
if(tree[i][j-1]==1) {tree[i][j-1]=2;} //burns the one on the bottom
tree[i][j]=3; //burned tree is gone
// printf("burning tree-->%d\n",n);
}
//printf("burn out time-->%d\n",t);
}//end of j loop
} //end of i loop
}//end of while loop
printf("burn out time-->%d\n",t); // machigatta kekka ga deru!
for(i=0;i<L;i++){
for(j=0;j<L;j++){
if(tree[i][j]==1) fprintf(output2,"%d\t%d\n",i,j);
}
}
fclose(output2);
system("pause");
}//end of main
0044デフォルトの名無しさん
2006/10/21(土) 00:47:18お礼はおっぱいでいいよ。
0045デフォルトの名無しさん
2006/10/21(土) 00:50:06#include <stdio.h>
#define ROWS 3
#define COLUMNS 6
int matrix[ROWS][COLUMNS] =
{
{2, 5, 10, 7, 0, 4},
{11, 3, 5, 4, 2, 9},
{1, 8, 7, 6, 4, 1}
};
int main(void)
{
int r, c;
printf("行=%d 列=%d\n", ROWS, COLUMNS);
for (r = 0; r < ROWS; r++) {
for (c = 0; c < COLUMNS; c++) {
printf("%d ", matrix[r][c]);
}
printf("\n");
}
return 0;
}
注意: スペースは全角を使っているから、半角に変換してね
0046デフォルトの名無しさん
2006/10/21(土) 01:15:28ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2801.txt
これでいいはず・・・
print関数は確認のために使っただけだから消しといてくれ
0047デフォルトの名無しさん
2006/10/21(土) 09:54:50memset(tree, 0, sizeof(tree));
for(i=1;i<L-1;i++){
for(j=1;j<L-1;j++){
rnd=(double)rand()/RAND_MAX;
if(rnd<p){
tree[i][j]=1; //tree occupied at i,j
fprintf(output1,"%d\t%d\n",i,j);
}
} //end of j loop
}//end of i loop
0048デフォルトの名無しさん
2006/10/21(土) 10:10:34何がいけないかというと
状態が2の木に隣接している木を状態2にしているので、同じ時刻のループで
1−>2に変化した木を処理してしまうということだな。
> if(tree[i+1][j]==1) {tree[i+1][j]=2;} //burns the one on the right
だから状態を、
燃えていない木=1、燃えている木=2、燃え尽きた木=3
でなくて
燃えていない木=1、火がつけられた木=4、燃えている木=3、燃え尽きた木=2
にして1−>4にすればこれを解決できる。
同じ時刻のループを抜けるときに、4−>2に戻してやるわけだ。
>>46さんのプログラムはそうしている。
あと、
>> n++;
上下左右各々に対してn++すること。
0049デフォルトの名無しさん
2006/10/21(土) 10:10:451〜L-2 ?
0050デフォルトの名無しさん
2006/10/21(土) 10:16:13int dy[4] = {-1, 1, 0, 0};
for(k=0;k<4;k++) {
tree[i+dx[k]][j+dy[k]];
}
このやり方の方が多少簡潔に書ける
0051デフォルトの名無しさん
2006/10/21(土) 11:32:12int x;
int y;
}delta[]={
{0,-1},
{0,1},
{-1,0},
{1,0}};
for(k=0;k<4;k++) {
tree[i+delta[k].x][j+delta[k].y];
}
の方が佐賀
0052デフォルトの名無しさん
2006/10/21(土) 11:39:25int * arr[]はintのptrの配列ですよね?
0053デフォルトの名無しさん
2006/10/21(土) 11:41:590054デフォルトの名無しさん
2006/10/21(土) 11:55:000055デフォルトの名無しさん
2006/10/21(土) 11:57:48おまけ #define 無しで顔文字プログラム
main(){int i,l,o,P;
l^o^l/
(o-o)?
:-P
;
}
0056デフォルトの名無しさん
2006/10/21(土) 12:04:24[2] 問題文:各種ソートやサーチのプログラムを比較する
[3] 環境
[3.1] OS:suse Linax
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 11月中ですが実行して比較するのでもう少し余裕が要る
[5] その他の制限:特になし
#include <stdio.h>
void linear(int t,int num,FILE *fp) ;
int main(){
int t,num;
char name[256];
FILE *fp;
printf("Put target file of sarch\n");/*検索するファイル名を入力*/
scanf("%s",&name);
fp=fopen(name,"r");
if(fp==NULL){/*ファイルオープンに失敗*/
fprintf(stderr,"file open error!!\n");
return 1;
}
fscanf(fp,"%d",&num);/*乱数の個数を読み込む*/
printf("put target number\n");/*検索する目的の値を入力*/
scanf("%d",&t);
|
|後略
|
これが動くのに
005756
2006/10/21(土) 12:04:54#include <stdlib.h>
void bynali(int *x,int first,int last,int t,int c);
int main()
{
int num,*arr,i,t;
char name[256];
FILE *fp;
printf("Put sarch file\n");/*検索する対象のデータファイルを入力*/
scanf("%s",&name);
fp=fopen(name,"r");
if(fp==NULL){/*ファイルオープンに失敗*/
fprintf(stderr,"file open error!!");
return 1;
}
printf("put target number\n");/*検索する目的の値を入力*/
scanf("%d",&t);/*ここでセグメンテーションフォルト*/
|
|後略
|
これがセグメンテーションフォルトになってしまう理由がわかりません。
005856
2006/10/21(土) 12:08:53void BubSort(int *x);
int main(void)
{
int *arr,num,i;
FILE *fp,*fo;
char name[256];
printf("Put target file of sort\n");/*ソートする対象のデータファイルを入力*/
scanf("%s",&name);
fp=fopen(name,"r");
if(fp==NULL){/*ファイルオープンに失敗*/
fprintf(stderr,"file open error!!");
return 0;
}
printf("Put file name to sort\n");/*ソート結果を出力するファイル名を入力*/
scanf("%s",&name);
fo=fopen(name,"w");
if(fo==NULL){/*ファイルオープンに失敗*/
fprintf(stderr,"file open error!!");
return 0;
}
|
|後略
|
これが動くのに
0059デフォルトの名無しさん
2006/10/21(土) 12:09:41intのptrの配列がこれですね→int (*parr)[4];
intの配列へのptrはこんなん?→int *(arrp [4]);←あり?
実際にはptrのptr→int **ptr で考えるかと思いますが、理屈的なところで。
006055
2006/10/21(土) 12:09:41l^o^l/
(o-o)?
l^w^l
:-P
;}
006156
2006/10/21(土) 12:12:13#include <stdlib.h>
void quick(int *x,int first,int last);
int main()
{
int num,*arr,i;
char name[256];
FILE *fp,*fo;
printf("Put target file of sort\n");/*ソートする対象のデータファイルを入力*/
scanf("%s",&name);
fp=fopen(name,"r");
if(fp==NULL){/*ファイルオープンに失敗*/
fprintf(stderr,"file open error!!");
return 1;
}
printf("Put file name to sort\n");/*ソート結果を出力するファイル名を入力*/
scanf("%s",&name);/*ここでセグメンテーションフォルト*/
|
|後略
|
これがセグメンテーションフォルトになるのがどうしてもわかりません。
しかもquickの方は二つのscanfを入れ替えると必ず二つ目のscanfでセグメンテーションフォルトにな
ります。
なぜセグメンテーションフォルトになるのか、どう対処したらよいのか教えてください。
0062デフォルトの名無しさん
2006/10/21(土) 12:21:12エスパー回答
arr の領域を確保せずに使用して、変なアドレスを破壊しようとしてる。
おそらくセグメンテーションフォルトはあなたが思っているところでは起こっていない。
コードを全て晒してください。
0063デフォルトの名無しさん
2006/10/21(土) 12:39:49printf("abc") を呼んだからといって、
すぐに "abc" が画面に表示されるわけではない。
>>56 は、そこまでは表示されていたから、
その直後でセグメンテーションフォルトが起こったと
思っているのだろう。
恐らく、
|
|後略
|
のところにバグがある。
0064デフォルトの名無しさん
2006/10/21(土) 12:40:21>>62と同じ意見
後略の部分をコメントアウトしても落ちるかどうか位のチェックはしたほうがいい
0065デフォルトの名無しさん
2006/10/21(土) 13:06:23>scanf("%s",&name);
配列の先頭のポインタのポインタを渡してる気がする
0066デフォルトの名無しさん
2006/10/21(土) 13:10:41そこも確かに意味としては間違ってる
でもこのコードだと値としては &name[0]=name=&name
になると思う。
006756
2006/10/21(土) 13:13:45確かにその後をコメント化したところ正常に終了しました。
が、どこが原因なのかが全くわかりません。
1のロダが死んでるみたいなんで別ロダに上げたソース↓
http://kossie.run.buttobi.net/cgi-bin/up/src/kos0002.txt
0068デフォルトの名無しさん
2006/10/21(土) 13:21:24for(i=0;i<num;i++){
fscanf(fp,"%d",arr[i]);/*配列にデータを格納*/
}
arr[i] の前に & が無い
0069デフォルトの名無しさん
2006/10/21(土) 13:26:13そうだったのか
無知ですまんかった
0070デフォルトの名無しさん
2006/10/21(土) 13:27:45リンクエラーになってる
0071デフォルトの名無しさん
2006/10/21(土) 13:29:12ソースがもう見れない
>>68がもう答えだしてるみたいだけど、
コメントアウトして正常動作したなら、そのコメント部分の処理が怪しいだろう
1行ずつ削るなり増やしていけば大抵バグは見つかる
0072デフォルトの名無しさん
2006/10/21(土) 13:31:13このコードでのセグメンテーションフォルトの原因にはなりませんが、
誤作動の元になるので、危険なことには変わりないです。
(name を動的割り当てに変更したときとか)
要するにバグですね
0073デフォルトの名無しさん
2006/10/21(土) 13:45:06逆。
int (*parr)[4];とすると、parrはint [4]へのポインタ。
int *(arrp[4]);とすると、arrpはint *の配列(4要素)。
int (*parr)[4];という宣言は、括弧にしたがって、
「parrをまず*で逆参照し、その結果に対して[]でwアクセスすると、intが得られる」
と読むべし。
0074デフォルトの名無しさん
2006/10/21(土) 13:47:04__FILE__ __LINE__
使い方
#include<stdio.h>
#define DEBUG 1
#if DEBUG
#define debug_print(msg) fprintf(stderr, "File:%s Line:%d %s\n", __FILE__, __LINE__, msg)
#else
#define debug_print(msg)
#endif
int main(void)
{
debug_print("debug1");
debug_print("debug2");
return 0;
}
__VA_ARGS__ マクロが使えるコンパイラならもっと便利にできるよ
0075デフォルトの名無しさん
2006/10/21(土) 14:39:29ありがとうございます。こんな理解でいいですね?
#include<stdio.h>
int main(void){
int arr[]={1,2,3,4,5};
int *parr=arr; //pointer of array
int *a, *b, *c , *d , *e;
a=arr;
b=++arr;
c=++arr;
d=++arr;
e=++arr;
int *arrp[]={a,b,c,d,e}; // array of pointer
for(int i=0; i<5; i++){
printf("%d\n", arr[i]);
}
for(int i=0; i<5; i++){
printf("%d\n", *parr++);
}
for(int i=0; i<5; i++){
printf("%d\n", *(*arrp)++);
}
}
0076デフォルトの名無しさん
2006/10/21(土) 14:53:15良くない。
>int *parr=arr; //pointer of array
これではparrはintへのポインタだし、
arrではなくarrの先頭要素を指している。
arrへのポインタが欲しいなら、
int (*parr)[5] = &arr;
とするw。
0077デフォルトの名無しさん
2006/10/21(土) 15:12:13int arr[5];のとき、arrと&arrの区別が付きません。中身は両方とも
arrの先頭アドレスかと思います。
arr=&(arr[0])で配列の先頭要素へのポインタであり、&arrはarrそのもの
へのポインタということですか?
0078デフォルトの名無しさん
2006/10/21(土) 15:27:21あれほど言っているでしょうに?
0079デフォルトの名無しさん
2006/10/21(土) 15:31:56がんばれ
0080デフォルトの名無しさん
2006/10/21(土) 15:33:59の
ttp://www9.plala.or.jp/sgwr-t/c/sec10-2.html
配列とポインタ
こことかいいんじゃないか?
0081デフォルトの名無しさん
2006/10/21(土) 15:50:16>>80 ありがとうございます。修行します。
0082デフォルトの名無しさん
2006/10/21(土) 15:55:00>int arr[5];のとき、arrと&arrの区別が付きません。中身は両方とも
>arrの先頭アドレスかと思います。
機械の観点から見れば同じ値だけど、C言語から見ると型が違うので解釈も違う。
例えば、arr + 1はarrの第二要素を指すポインタだけど、
&arr + 1は違うところ(具体的には、arrをint [5]の配列(つまり配列の配列)の一要素とみなして
その次の要素)を指す。
>arr=&(arr[0])で配列の先頭要素へのポインタであり、&arrはarrそのもの
>へのポインタということですか?
その通り。w
0083デフォルトの名無しさん
2006/10/21(土) 16:53:18#include <stdio.h>
int main(void){
int arr[]={11,21,31,41,51};
printf("arr: %d\n", arr);
printf("arr+1: %d\n", arr+1);
printf("&arr+1: %d\n", (&arr)+1);
int (*parr)[5] = &arr;
printf("parr+1: %d\n", parr+1);
printf("parr++: %d\n", ++parr);
int * ptr=arr;
printf("++arr: %d\n", ++arr);
printf("++ptr: %d\n", ++ptr);
}
で、結果が
arr: 4278992
arr+1: 4278996
&arr+1: 4278996
parr+1: 4278996
parr++: 4278996
++arr: 0
++ptr: 4278996
&arr+1はarr+(5 * 4byte)先ということではないのですね?
あと、最後の3行から、arrは配列arrの先頭要素のアドレスを返すけれど、
ポインタでは無いと考えていいでしょうか?(処理系はcintです。)
#うざく感じているみなさん、大変申し訳ありません。
#もう少しなので、多めに見てくださいますよう、お願いします。
0084デフォルトの名無しさん
2006/10/21(土) 17:01:44それはたぶん処理系がおかしい。
gcc-4.1.1では、
test.c: In function ‘main’:
test.c:11: error: インクリメントの中での左辺値が無効です
と言われる。この部分をコメントアウトしてコンパイル・実行すると、
arr: -1080531448
arr+1: -1080531444
&arr+1: -1080531428
parr+1: -1080531428
parr++: -1080531428
++ptr: -1080531444
こうなって、&arr+1はarrより20バイト先を指していることが分かる。w
0085デフォルトの名無しさん
2006/10/21(土) 17:16:40どうも腑に落ちないと思ったら、処理系の問題とは。
cintがそんな不細工とは思えないので、設定ミスかな?
ちゃんとしたコンパイラで勉強するようにします。
> インクリメントの中での左辺値が無効です
++arrはNGということですね(arrのポインタならOK)?
ありがとうございました。
0086デフォルトの名無しさん
2006/10/21(土) 17:56:03[2] 問題文
1次元離散座標ランダムウォークで, 遷移確率が
1/4(y=x-1),
w(y|x)=3/4(y=x+1),
0(それ以外)
というものを考える.
x=0から出発して3ステップ歩いた後のウォーカーの
位置を X(3) と書こう. X(3)の平均と分散を計算しよう,.
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C
[4] 期限: 2006年10月24日09:00まで
[5] その他
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2686.txt
を利用して作ってください
008786
2006/10/21(土) 17:56:45到達地点の座標 X(3) のサンプル平均 m とサンプル分散 s2 を計算するプログラムを作ろう.
つまり,
サンプルの個数?
10
ランダムウォークの長さ?
3
シード?
3098
とすると, とすると, 3098 を seed として, 長さ 3 のランダムウォークを10回行い,
# サンプル番号 到達地点の座標
0 3
1 -1
2 -1
3 1
4 1
5 -3
6 1
7 -3
8 3
9 -1
サンプルの個数 10
サンプル平均 1.400000
サンプル分散 8.711111
と出力するようなプログラムを作ろう. (上のサンプル平均とサンプル分散の値は正しくありません。)
0088デフォルトの名無しさん
2006/10/21(土) 17:59:41yってなに?
1/4の確率でx座標が-1、3/4で+1ってこと?
0089デフォルトの名無しさん
2006/10/21(土) 18:37:15[2] 問題文:
整数型intは32ビットの内部表現をもつ。どの範囲の整数まで表現できるか
調べなさい。
その上で、範囲外の結果となる演算をしたときにどのような値が出力されるのか。
そしてなぜ、そのような値が出力されるのか、
コンピュータの計算原理をふまえて説明しなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC++ 6.0
[3.3] 言語:C++
[4] 期限:2006年10月23日まで
[5] その他の制限: なし
コンピュータの計算原理というのがよくわからなくて…
お願いします。
009089
2006/10/21(土) 18:44:48[1] 授業単元:プログラム
[2] 問題文:
整数型intの値を、どの段階で実数型doubleに型変換すべきか検討しなさい。
2つ以上の場合で実際にプログラムを作成し、計算結果が同じとなるデータ、
異なるデータを示しなさい。
計算結果が異なる場合、なぜそうなるのか、コンピュータの計算原理、
コンピュータの計算原理をふまえて説明しなさい。
#include<stdio.h>
int main(void) {
int x, y, z;
printf("xを入力して下さい。: ");
scanf("%d", &x);
printf("yを入力して下さい。: ");
scanf("%d", &y);
printf("zを入力して下さい。: ");
scanf("%d", &z);
printf("[x+y+z] heikin = %f\n", (double)( x + y + z ) / 3);
return(0);
}
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC++ 6.0
[3.3] 言語:C++
[4] 期限:2006年10月23日まで
[5] その他の制限: なし
0091デフォルトの名無しさん
2006/10/21(土) 19:10:33学校がくれるのか?
教えて学生さん><
0092デフォルトの名無しさん
2006/10/21(土) 19:16:280093デフォルトの名無しさん
2006/10/21(土) 19:17:43それは知ってる
俺もアカデミックですから
Amazonは年齢認証なしに買わせてくれたし・・・
でも6.0って今売ってるの?
0094デフォルトの名無しさん
2006/10/21(土) 19:48:14あとはVC++6.0ってアクティベーションないんじゃないかな、古いし
0095デフォルトの名無しさん
2006/10/21(土) 19:57:310096デフォルトの名無しさん
2006/10/21(土) 21:24:54#include<stdio.h>
int main(void)
{
int a, i;
a=0x7FFFFFFE;
for(i=0;i<3;i++)
printf("%d\n", a++);
printf("\n");
a=0x80000001;
for(i=0;i<3;i++)
printf("%d\n", a--);
printf("\n");
return 0;
}
0097デフォルトの名無しさん
2006/10/21(土) 21:29:48試しに x=1 y=2 z=4 でもいれてみてください
#include<stdio.h>
int main(void) {
int x, y, z;
printf("xを入力して下さい。: ");
scanf("%d", &x);
printf("yを入力して下さい。: ");
scanf("%d", &y);
printf("zを入力して下さい。: ");
scanf("%d", &z);
printf("[x+y+z] heikin = %f\n", (double)( x + y + z ) / 3);
printf("[x+y+z] heikin = %f\n", ( x + y + z ) / (double)3);
printf("[x+y+z] heikin = %f\n", (double)(( x + y + z ) / 3));
return(0);
}
0098デフォルトの名無しさん
2006/10/21(土) 21:58:15http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2802.c
一応やってみたけど、根本的にやり直したほうが…
0099デフォルトの名無しさん
2006/10/21(土) 22:02:110100デフォルトの名無しさん
2006/10/21(土) 22:47:37[2] 問題文(含コード&リンク): キーボードから月(12ヶ月)に相当する整数値を入力し,その月の値に応じて,例のように表示するプログラムを作成せよ.ただし,switch~case文を使い,できる限り少ない個数のcase文で記述するよう工夫すること.
(実行例)
何月? => 3
1st month of spring
何月? => 4
2nd month of spring
何月? => 5
3rd month of spring
何月? =>6
1st month of summer
何月 => 13
そんな月ない!
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VisualStudio.net2003
[3.3] 言語: C
[4] 期限: 10月25日
[5] その他の制限: お願いします
0101デフォルトの名無しさん
2006/10/21(土) 22:52:09角度 sin cos
0 0.00 1.00
…
180 1.00 0.00
[2] 問題文:↑みたいな感じに正弦、余弦の値を求める物です。
で、開始値、終了値、間隔は都度入力、単位はdegree、度数法です。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ:Borland C
[3.3] 言語:C (printf, scanf, if-else, swich, do-while, forと算術処理関連まで来てます。)
[4] 期限:基本無制限
[5] そのほか:特には
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2803.txt
なんかしっくり来ないです…
0102デフォルトの名無しさん
2006/10/21(土) 22:58:18何そのcase0個の方が手っ取り早い問題(;´Д`)
0103デフォルトの名無しさん
2006/10/21(土) 22:58:34そのソースコードは何?
「しっくりこない」って何?
0104デフォルトの名無しさん
2006/10/21(土) 23:07:30http://pc8.2ch.net/test/read.cgi/tech/1158844912/684
0105デフォルトの名無しさん
2006/10/21(土) 23:08:01スルーしろ
0106ワンダフル魁 ◆F9pJmydzS.
2006/10/21(土) 23:14:13#include<stdio.h>
int main(void)
{
int ch;
printf("10進数を入力してください。\nCtrl+Zで処理を終了します。\n");
scanf("%d",&ch);
0107ワンダフル魁 ◆F9pJmydzS.
2006/10/21(土) 23:15:19switch(ch){
case 1:
printf("apple\n");
scanf("%d",&ch);
break;
case 2:
printf("banana\n");
scanf("%d",&ch);
break;
case 3:
printf("cherry\n");
scanf("%d",&ch);
break;
default:
printf("???\n");
scanf("%d",&ch);
break;
}
}
return 0;
}
0108デフォルトの名無しさん
2006/10/21(土) 23:17:05printf("10進数を入力してください。\nCtrl+Zで処理を終了します。\n");
scanf("%d",&ch); ←ここ
0109デフォルトの名無しさん
2006/10/21(土) 23:19:22printf("10進数を入力してください。\nCtrl+Zで処理を終了します。\n");
↓
printf("10進数を入力してください。\n-1で処理を終了します。\n");
0111ワンダフル魁 ◆F9pJmydzS.
2006/10/21(土) 23:31:47#include<stdio.h>
int main(void)
{
char word1[32],word2[32];
printf("同じ長さの文字列を二つ入力しなさい。\n");
gets(word1);
gets(word2);
while(word1!=word2){
printf("異なる文字列を入力しました");
scanf("%c",&word1);
0112デフォルトの名無しさん
2006/10/21(土) 23:32:260113ワンダフル魁 ◆F9pJmydzS.
2006/10/21(土) 23:36:02scanf("%c",&word2);
}
printf("等しい文字列を入力しました。");
return 0;
}
0114デフォルトの名無しさん
2006/10/21(土) 23:41:220115デフォルトの名無しさん
2006/10/21(土) 23:45:03これだろ?スルーできなかったww
0116デフォルトの名無しさん
2006/10/21(土) 23:49:12printf("異なる文字列を入力しました");
↓
printf("異なるアドレスです\n");
0117デフォルトの名無しさん
2006/10/21(土) 23:50:380118デフォルトの名無しさん
2006/10/21(土) 23:53:030119デフォルトの名無しさん
2006/10/21(土) 23:53:52彼女は言った。
「ここにあるよ」
確かに、彼女はそう言った。
永遠のある場所。
…そこにいま、>>113は立っていた。
0120116
2006/10/21(土) 23:54:07期待している状態が分からない以上適当に答えるか質問するかスルーしかない。
こんなときオレは全力で答える。(分かる範囲なら)
0121デフォルトの名無しさん
2006/10/21(土) 23:55:53エスパーでがんがれ!
・・・俺はやらん。
0122デフォルトの名無しさん
2006/10/22(日) 00:00:240123デフォルトの名無しさん
2006/10/22(日) 00:17:09#include<stdio.h>
#include<string.h>
#defineBUF_SIZE(1024)
int main(void)
{
char word1[BUF_SIZE],word2[BUF_SIZE];
while(1){
printf("同じ長さの文字列を二つ入力しなさい。\n");
gets(word1);
gets(word2);
if(strcmp(word1, word2)==0)
break;
printf("異なる文字列を入力しました\n");
}
printf("等しい文字列を入力しました。\n");
return 0;
}
0124デフォルトの名無しさん
2006/10/22(日) 00:28:45初心者向けのわかりやすいやつを教えてください
0125デフォルトの名無しさん
2006/10/22(日) 00:31:27スレ違いだ
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/
012656
2006/10/22(日) 00:35:18ありがとうございました
0127デフォルトの名無しさん
2006/10/22(日) 01:31:05[2] 問題文(含コード&リンク):
文字列strを逆順に格納する関数(recを受け取ったらcerを表示する)
void rev_string(char str[]){ /*…*/ }
を作成せよ。
[3.1]OS:Windows XP
[3.2]コンパイラ:gccバージョン不明
[3.3]言語:C言語
[4]期限:2006/10/24 9:00まで
[5]その他制限事項:ポインタ使用不可
お願いします
0128デフォルトの名無しさん
2006/10/22(日) 01:47:50バッファオーバーフローの脆弱性があります
void rev_string(char str[]){
char str2[1000];
int i,len;
len = strlen(str);
strcpy(str2, str);
for(i = 0; i < len; i++)
str[i] = str2[len - 1 - i];
}
0129デフォルトの名無しさん
2006/10/22(日) 01:55:15[2] 問題文(含コード&リンク):nyuryoku.datというファイルを作り、そのファイルに
格納されている文字列を行列形式で表示させよ。
↓以下nyuryoku.datの中身
4 8
1 3 5 7 9 0 2 4
6 8 1 3 5 7 9 0
2 4 6 8 1 3 5 7
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: Borland C(V5.5)
[3.3] 言語: C言語
[4] 期限: 10月23日18:00まで
[5] その他の制限:標準ライブラリのみ使用
どうしてもできません…よろしくお願いします><
0130デフォルトの名無しさん
2006/10/22(日) 01:55:530131デフォルトの名無しさん
2006/10/22(日) 02:14:04stdio.hとかの中でもポインタ使ってるだろうから・・・
0132デフォルトの名無しさん
2006/10/22(日) 02:52:59行列形式って何?
0133デフォルトの名無しさん
2006/10/22(日) 03:07:21多分4行8列の行列に読み込んで画面に[ ]のような記号を外に付けて表示しろって
事だと思うけど、データが3行分しかないよ?
0135デフォルトの名無しさん
2006/10/22(日) 05:08:32nyuryoku.datというファイルを作り、そのファイルに格納されている文字列を行列形式で表示させるプログラム。
転置行列は省いてしまったが。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define FILENAME "nyuryoku.dat"
int main(void){int i,j,k,c,m,count=0,size=256,tcount=0;int*buf,*row,*column;
int nyuryoku[4][8]={{4,8,},{1,3,5,7,9,0,2,4,},{6,8,1,3,5,7,9,0,},{2,4,6,8,1,3,5,7,}};
FILE *fp;if((fp=fopen(FILENAME,"wt"))==NULL){fprintf(stderr,"error : can't open file");exit(1);}
for(i=0;i<4;i++){if(i==0){fprintf(fp,"%d %d",nyuryoku[0][0],nyuryoku[0][1]);}else{fprintf(fp,"%d",nyuryoku[i][0]);
for(j=1;j<8;j++)fprintf(fp," %d",nyuryoku[i][j]);}fprintf(fp,"\n");}fclose(fp);
if((fp=fopen(FILENAME,"rt"))==NULL){fprintf(stderr,"error : can't open file");exit(1);}
buf=(int*)malloc(sizeof(int)*size);while(fscanf(fp,"%d",&buf[count])!=EOF)if(++count>=size){size*=2;buf=(int*)realloc(buf,sizeof(int)*size);}fclose(fp);
m=sqrt(count);row=malloc(sizeof(int)*m);column=malloc(sizeof(int)*m);for(i=1;i<=m;i++)if(count%i==0){row[tcount]=i;column[tcount]=count/i;tcount++;}
for(i=0;i<tcount;i++){for(j=0;j<row[i];j++){printf("%d",buf[j*row[i]]);for(k=0;k<column[i];k++)
printf(" %d",buf[j*row[i]+k]);printf("\n");}printf("\n");}free(buf);free(row);free(column);return 0;}
0137135
2006/10/22(日) 09:40:320138135
2006/10/22(日) 09:52:46最後から3行目m=sqrt(count)をm=countに
最後から2行目j*row[i]をj*column[i]に
最後の行j*row[i]をj*column[i]に
すればなんとかいけるかな
0139デフォルトの名無しさん
2006/10/22(日) 10:10:02さらに言うと(pop関数に戻り値が書かれているので)、構造体を
戻り値にするのは不可能ですよね?
文法書を読んでも書かれていないので混乱しています。
これが解らないと宿題にとりかかれないので教えてください。
0140デフォルトの名無しさん
2006/10/22(日) 10:14:41>>1
0141デフォルトの名無しさん
2006/10/22(日) 10:27:30> 文法書を読んでも書かれていないので混乱しています。
規格には書かれている。
文法書ってなんや?
0142デフォルトの名無しさん
2006/10/22(日) 10:27:33問題以前の話だけど、ここで聞くのが適切かと思ったんだよ
0143デフォルトの名無しさん
2006/10/22(日) 10:28:41C言語の参考書のことです
0144デフォルトの名無しさん
2006/10/22(日) 10:34:43言語が違うんじゃ?
Perlじゃない?
0145デフォルトの名無しさん
2006/10/22(日) 10:36:22http://www.google.com/search?num=50&lr=lang_ja&q=%E6%A7%8B%E9%80%A0%E4%BD%93%20%E6%88%BB%E3%82%8A%E5%80%A4
0146デフォルトの名無しさん
2006/10/22(日) 10:42:30できますよ。
std::stack<std::pair<int,int> >
0147デフォルトの名無しさん
2006/10/22(日) 10:57:55> スタックの内容の型
初耳の表現
型有/無に関わらず、”スタック”は抽象構造だぞ?
それともC++にはスタック型という唯一の型があったのか?
0148デフォルトの名無しさん
2006/10/22(日) 11:18:54?
見当違いの予感。
唯一の型じゃないからそこに入れられるものの型について質問してんじゃないの?
0149147
2006/10/22(日) 12:26:03うーん、そこまで考えてもいいのかな?
”スタック”が何を指してるのか分からない限り話が進まないよね
もしかしたら>>139はwindowsのtlsの話してるかもしれないし、
stlのstack<T>かもしれないし、自前のstackかもしれないし。
さすがにリアルワールドの積荷の話じゃないだろうけど
0150139
2006/10/22(日) 12:41:19struct division {
int x;
int y;
};
typedef struct division elementtype;
struct stack {
int top;
elementtype elements[STACKSIZE];
};
elementtype pop(struct stack *s) {
if (s->top < 0) {
printf("stack underflow"); exit(1); }
else return s->elements[s->top--];
}
メイン関数でpushはうまくできたのですが、popをするとエラーが発生してしまい、
原因がさっぱりだったため、血迷って愚かな質問をしてしまい申し訳ありません。
popの戻り値がおかしかった(メンバx,y共になぜかtop-1の値が入っている)ので、
[s->top--]のところの--を取ってみたらメンバの値が正常に入力されていました。
そこで、まさかと思いLinuxでコンパイルしてみたらできました・・・。
これでやっと宿題が始められます。お騒がせいたしました。
>148
その通りです
0151デフォルトの名無しさん
2006/10/22(日) 12:52:14良ければソース見せてもらえない?
0152デフォルトの名無しさん
2006/10/22(日) 12:57:560153デフォルトの名無しさん
2006/10/22(日) 12:59:22既視観があるのう。
それってオライリーの入門C++?
もしそうなら記述のソースがソースが古いのかもしれまへん。
その本でサンプルファイル、
gcc3だと配布されてるサンプルファイルのコンパイルがうまくいかない
(ソース中のtypedef int boolがC++ヘッダ内で既に定義されとるわエラーとかがでたりする。コメントアウトすればOK)
0154デフォルトの名無しさん
2006/10/22(日) 13:00:51もしかしてVC6?
0155139
2006/10/22(日) 13:13:07スタックの動作を確かめるためだけのプログラムです。
#include <stdio.h>
#include <stdlib.h>
#define N 4
#define STACKSIZE N*N
struct division {
int x;
int y;
};
typedef struct division elementtype;
struct stack {
int top;
elementtype elements[STACKSIZE];
};
void push(struct stack *s, elementtype x) {
s->top++;
if(s->top >= STACKSIZE) {
printf("stack overflow"); exit(1); }
else
s->elements[s->top]=x;
}
0156139
2006/10/22(日) 13:14:46elementtype pop(struct stack *s) {
if (s->top < 0) {
printf("stack underflow"); exit(1); }
else { printf("s->top=%d s-elements[s->top].x=%d\n", s->top, s->elements[s->top]);
return s->elements[s->top--]; }
}
void initstack(struct stack *s) {
s->top=-1;
}
int stackempty(struct stack *s) {
return s->top < 0;
}
int main() {
struct stack suuretu;
elementtype test;
initstack(&suuretu);
while(scanf("%d %d", &test.x, &test.y)!=EOF) {
push(&suuretu, test); printf("top=%d\n",suuretu.top);
}
test=pop(&suuretu);
printf("test.x=%d test.y=%d\n", test.x, test.y);
}
0157139
2006/10/22(日) 13:15:581 2
top=0
3 4
top=1
5 6
top=2
7 8
top=3
^Z
s->top=3 s-elements[s->top].x=7
test.x=2 test.y=2
>153
スタックの部分は大学でもらった資料です。
>154
VisualC++6.0です・・・・・
0158デフォルトの名無しさん
2006/10/22(日) 13:32:30OS:Windows XP
コンパイラ:VC++ Toolkit 2003
オプション:-Za -O2(-Microsoft言語拡張機能off,-コード最適化)
それと同じコードをコンパイルしてコンソールから入力してみたけどとくにエラーなく
157のとおりの結果がでる。
オプション:-O2(-コード最適化)
でもおんなし。
なぞス
0159デフォルトの名無しさん
2006/10/22(日) 13:42:31( ̄□ ̄;)!!
Linuxでやると
1 2
top=0
3 4
top=1
5 6
top=2
7 8
top=3
s->top=3 s-elements[s->top].x=7
test.x=7 test.y=8
こうならなきゃおかしいですよね。
0160デフォルトの名無しさん
2006/10/22(日) 13:47:18ちなみに自分のとこのvc,gcc,dmcでは>>159と同じ結果が出ました。
0161デフォルトの名無しさん
2006/10/22(日) 14:00:03コンパイラの性格なんじゃない?
前置演算子に変えてみては?
0162デフォルトの名無しさん
2006/10/22(日) 14:00:56またVC++ .NET 2003 Pro SP1で、/Za /O2、/Oxを試したが、やはり159のとおりになった。
なお、共にコマンドプロンプトから実行した。
0163158
2006/10/22(日) 14:02:24>>s->top=3 s-elements[s->top].x=7
>>test.x=2 test.y=2
デバッガつかってなかったんで、以下のようにmainを書き換えたところ
159と同じ結果でました。VC6の問題かも;・
結果:
1 2
top=0
3 4
top=1
5 6
top=2
7 8
top=3
s->top=3 s-elements[s->top].x=7
test.x=7 test.y=8
0164158
2006/10/22(日) 14:03:42int main() {
struct stack suuretu;
elementtype test;
initstack(&suuretu);
while(scanf("%d %d", &test.x, &test.y)!=EOF) {
push(&suuretu, test);
printf("top=%d\n",suuretu.top);
/* ここ追加開始 */
if(suuretu.top==3)
break;
/* ここ追加終了 */
}
test=pop(&suuretu);
printf("test.x=%d test.y=%d\n", test.x, test.y);
}
0165デフォルトの名無しさん
2006/10/22(日) 14:13:12ついでに適当に探してみた。
多分、VC6 SP3で修正されたこのバグの亜種だな。
http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/vs6fixes.aspx
> 6.3.5.2
> return ステートメントに ++ 演算子を使用すると、
> /Od を指定してコードをコンパイルしたときにアクセス違反となっていました。
0166デフォルトの名無しさん
2006/10/22(日) 15:24:06C++が必修で今学期初めてプログラミングの授業をとりました。
初心者で何もわからないのでどうか助けて下さい。
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):10人の生徒の名前、生徒番号、
4つのテストの点数を入力して、そこからテストの平均点を求め、
平均点から成績を割り出し、それらの記録を表示するプログラムを作成せよ。
成績は4つのテストの平均点が59点以下の場合=F、60−69点=D、
70−79点=C、80−89点=B、90−100点=A。
最終的な表示はこんな感じになります。
名前 生徒番号 テストの平均点 成績
-------------------------------------------
生徒1 28584 90.3 A
生徒2 359 71.6 C
:
生徒10 1701 82.4 B
[3] 環境
[3.1] OS: (Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C++
[4] 期限: 明日
[5] その他の制限: struct type array を使用する事
0167139
2006/10/22(日) 15:29:07>165
おかげさまでサービスパックをインストールしたら直りました。
ですが、構造体変数の宣言をmain内でしようとするとgccでは出ないエラーが出るので、もう好きになれません。
0168デフォルトの名無しさん
2006/10/22(日) 15:34:21一応自分がどれくらいのレベルか分かってもらうために
途中まで書いたのを載っけときますので、よろしくお願いします。
#include<iostream>
#include<iomanip>
using namespace std;
const_int NUM_STUDENT=10;
void getStudentInfo(char name[25],int &points);
char calculateGrade(int points);
void displayResult(char name[25],char grade);
struct Student
{
char stuName[25];
char grade;
int idNum;
int *testScore;
float average;
};
0169デフォルトの名無しさん
2006/10/22(日) 15:36:21int main()
{
char stuName[25],grade;
int earnedPoints=0;
getStudentInfo(stuName,earnedPoints);
grade=calculateGrade(earnedPoints);
displayResult(stuName,grade);
return 0;
}
void getStudentInfo(char name[25],int &points)
{
int test1, test2, test3, test4;
int scores [NUM_STUDENT];
int idNum;
float average;
0170デフォルトの名無しさん
2006/10/22(日) 15:37:44{
cout<<"Enter name of the student:";
cin.getline(name,25);
cout<<"Enter the first test score:";
cin>>test1;
cout<<"Enter the second test score:";
cin>>test2;
cout<<"Enter the third test score:";
cin>>test3;
cout<<"Enter the fourth test score:";
cin>>test4;
points=test1+test2+test3+test4;
}
}
char calculateGrade(int points)
{
char letterGrades;
int average=(points/4);
0171デフォルトの名無しさん
2006/10/22(日) 15:38:17if (average>=90)
letterGrade='A';
else if (average>=80)
letterGrade='B';
else if (average>=70)
letterGrade='C';
else if (average>=60)
letterGrade='D';
else
letterGrade='F';
return letterGrade;
}
void displayResult(char name[25],char grade)
{
cout<<endl<<endl;
cout<<"Student Name"<<" "<<name<<endl;
cout<<setw(45)<<setfill('-')<<"-"<<setfill('-')<<endl;
cout<<setw(14)<<"GRADE"<<" "<<grade<<endl<<endl;
}
0172デフォルトの名無しさん
2006/10/22(日) 16:00:12[2] 50円切手が 5 枚, 80円切手が 4 枚, 120円切手が 3 枚あるとき, キーボードから金額 t を入力し, 金額の合計がちょうど t 円になるような切手の枚数の組合せを求めるプログラムを作成せよ.
次のような出力が得られることを確認せよ (表示形式は各自工夫せよ).
o 310円 → 50円×3枚+80円×2枚+120円×0枚
o 390円 → 50円×3枚+80円×0枚+120円×2枚, 50円×3枚+80円×3枚+120円×0枚
[3] 環境
[3.1] winXP sp2
[3.2] cygwin
[3.3] C
[4] 2006年10月23日23時59分
[5] 途中までやったんで埋める形でお願いします
途中までやったぶんは次書きます
0173129
2006/10/22(日) 16:00:33実際に動かしてみたところ、様々な行列表示にはなるのですが、
>>129で設定したdat形式のように、
4 8
1 3 5 7 9 0 2 4
6 8 1 3 5 7 9 0
2 4 6 8 1 3 5 7
と、そのまま表示させるには、>>135のプログラムをどのようにすれば、
表示させることができるのでしょうか?
教えて君で本当に申し訳ありません。
0174172
2006/10/22(日) 16:01:44int main (void)
{
int x,y,z,t;
printf("金額tを入力してください>>");
scanf("%d",t);
for(x=0;x<=5;x++)
{
for(y=0;y<=4;y++)
{
for(z=0;z<=3;z++)
{
printf(" );
}
}
}
return 0;
}
よろしくお願いします
0175デフォルトの名無しさん
2006/10/22(日) 16:05:56scanf("%d", &t); な
if(t == 50*x+80*y+120*z)
0176172
2006/10/22(日) 16:15:41int main (void)
{
int x,y,z,t;
printf("金額tを入力してください>>");
scanf("%d",&t);
for(x=0;x<=5;x++)
{
for(y=0;y<=4;y++)
{
for(z=0;z<=3;z++)
{
if(t == 50*x+80*y+120*z)
{
printf("50円×%d枚+80円×%d枚+120円×%d枚"\n",x,y,z);
}
}
}
}
return 0;
}
これであってますか?
0177デフォルトの名無しさん
2006/10/22(日) 16:20:53#include<iostream>
#include<iomanip>
#include<numeric>
using namespace std;
const int NUM_STUDENT = 10;
const int NUM_TEST = 4;
const char*number_string[NUM_TEST]={"first","second","third","fourth"};
struct Student
{
char name[25];
int id,testScore[NUM_TEST];
int total(){return accumulate(testScore,testScore+4,0);}
static float average(int total){return total / 4.0f;}
static char grade(int total){return "FFFFFFDCBAA"[total / 4 / 10];}
void input(){
cout << "Enter name of the student:";
cin.getline (name, 25);
cout << "Enter id of the student:";
cin >> id;
/*
0178デフォルトの名無しさん
2006/10/22(日) 16:21:47*/
for(int i=0;i<4;++i){
cout << "Enter the "<<number_string[i]<<" test score:";cin >> testScore[i];
}
cin.ignore(std::numeric_limits<int>::max(),'\n');
}
void output(){
int total = this->total();
cout << setw(8) << name << setw(8) << id
<< setw(16) << average(total) << setw(8) << grade(total) << endl;
}
};
int main ()
{
Student a[NUM_STUDENT];
for(int i=0;i<NUM_STUDENT;++i)a[i].input();
cout << "名前 生徒番号 テストの平均点 成績" << endl;
cout << "----------------------------------------" << endl;
for(int i=0;i<NUM_STUDENT;++i)a[i].output();
return 0;
}
0179デフォルトの名無しさん
2006/10/22(日) 16:23:12まあ、やりたいこととしては合ってるんだが…それくらい自分でテストしようよ
ちなみにそのままだとコンパイル通らないぞ
0181デフォルトの名無しさん
2006/10/22(日) 16:34:36[2] 問題文(含コード&リンク):
完全に昇順ソートされているデータうち、配列の添字の範囲L中のn組の2個のデータがわざと交換されているとする(L>2n)。
この場合,データが昇順である性質が一部失われる。L=10, n<=1のとき,すなわち,配列の添字の範囲10以内では,1もしくは2個の
データの値の昇順が保証されない場合に,二分探索をどのように改良すれば,正しい探索が行えるだろうか?そのプログラムを実現せよ。
補足
用いるデータは,全部で100個。データの作成は手作業で構わない。
データを全部ソートし直すのはまずいが,二分探索をしながら辺りを調べその結果,一部何らかのデータ操作を行うことは禁止していない。
100個のデータを昇順に並び替えるプログラム載せてみます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2804.txt
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: borland
[3.3] 言語: C
[4] 期限: 10/23
[5] その他の制限: どんな改良をしたか書いていただければ幸いです。
どうか、よろしくお願いします。
0182デフォルトの名無しさん
2006/10/22(日) 16:52:530183デフォルトの名無しさん
2006/10/22(日) 17:01:14>>181
>L=10, n<=1のとき,すなわち,配列の添字の範囲10以内では,1もしくは2個の
>データの値の昇順が保証されない場合に,
この条件をもうちょっと厳密に頼む。
0184デフォルトの名無しさん
2006/10/22(日) 17:09:25そこで使っている変数の値を表示させることが多い。
その必要がなければ、関数名や"enter"/"leave"とか。
0185デフォルトの名無しさん
2006/10/22(日) 17:27:05http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2764.txt
0186デフォルトの名無しさん
2006/10/22(日) 17:27:56ほぼ >>74 と同じファイル名と行番号+関数名
0187デフォルトの名無しさん
2006/10/22(日) 17:33:49前スレ684以降にあるじゃん?
0188デフォルトの名無しさん
2006/10/22(日) 18:32:09実装は面倒なのでアイデアだけ.n ≦ 1 ならこれで動くはず.
・二分探索を行う.ただし端点の要素は三つくらいの要素の
中間値でも取って昇順条件を外れた要素を踏まないようにする.
・二分探索で範囲を絞りきったときの状態は
1. 目的の値が見つかった → 終了.
2. 昇順条件には従うが目的の値は見つからない → 存在しない.
3. 昇順条件に反する値が見つかった → その値をキーにして再度二分探索.
一般の L, n については考えてないけど,O(n log L) くらいがある気はする.
0189デフォルトの名無しさん
2006/10/22(日) 19:01:24>一般の L, n については考えてないけど,O(n log L) くらいがある気はする.
なんでLの増加関数?
Lが小さいほど頻繁な交換が許されるので
より時間が掛かるようになるんじゃないか?
0190デフォルトの名無しさん
2006/10/22(日) 19:47:58L はリストの長さだから,全く交換が許されないとしても O(log L) はかかる.
L が小さいときは全然単調じゃなくなって線型探索したほうが早くなる(かもしれない)
けど,O 表記は漸近的に大きいときの挙動をあらわすので関係ない.
0191デフォルトの名無しさん
2006/10/22(日) 20:07:27>L はリストの長さだから
俺は違うように読んだ。正確な事は読み取れないけど、例えば
「任意の長さLの部分列について、n組が交換されている」
とか。これだとそんな列は存在し得ないので正しい解釈じゃないけど。
それに、>>180ではL=10でデータ数は100個と言っている。
0192デフォルトの名無しさん
2006/10/22(日) 20:25:47なるほど,再読すると 191 のように読めた.俺の誤読っぽい.
やっぱり細かいところがわからんので 181 は再説明求む.
0193デフォルトの名無しさん
2006/10/22(日) 21:03:11何のソフト使ってるのか教えてくれないか?
翻訳ソフトだとしたら高機能っぽいので興味がある。
0194デフォルトの名無しさん
2006/10/22(日) 21:07:46翻訳?
MSIMEで「、」「。」の変換候補に出てくるけど?
0195デフォルトの名無しさん
2006/10/22(日) 21:08:53皮肉だと思うがマジレス。
理系の人は日常的に使う。論文などでもそれが普通。
MS-IMEでも設定で句読点変えれる。
俺は文系だけどな!
0196デフォルトの名無しさん
2006/10/22(日) 21:21:38[2] 問題文(含コード&リンク):
ファイルからの入力・構造体
ファイル「kyotocity.txt」には、京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されている。
これらの情報を格納する構造体 struct division を宣言しなさい。
struct division {
char name[20];
int population;
double area;
}
struct division型の配列 kyoto[11]を用意し、ファイルからデータを読んで、配列に入力しなさい。
入力した構造体の配列を調べて、以下の情報を出力しなさい。
人口が最大の区と最小の区の、名前と人口。
面積が最大の区と最小の区の、名前と面積。
人口密度が最大の区と最小の区の、名前と人口密度。
↓txtファイル中身のデータ↓
Kita 124306 94.92
Kamigyo 83082 7.11
Sakyo 168133 246.88
Nakagyo 100145 7.38
Higashiyama 41659 7.46
Yamashina 136769 28.78
Shimogyo 74897 6.82
Minami 97877 15.78
Ukyo 201819 291.95
Nishikyo 155973 59.20
Fushimi 284812 61.62
[3.1] OS: windws xp pro [3.2] visual studio 2003 [3.3] 言語: C
[4] 期限: 11月までに、なるべく早くお願いします
[5] その他の制限: 反復構造、ソート、探索、ポインタ、ファイル、構造体
0197デフォルトの名無しさん
2006/10/22(日) 21:26:22196の問題の解く部分は
人口が最大の区と最小の区の、名前と人口。
まででも構いません。
面積が最大の区と最小の区の、名前と面積。と
人口密度が最大の区と最小の区の、名前と人口密度。
は、前者の問題を応用して自分でやります
よろしくお願いします
0198デフォルトの名無しさん
2006/10/22(日) 21:41:05MS-IMEを始めとして、多くの日本語IMEは句読点に何を使うか、,と。.の組み合わせを設定できる。
たとえば,.を使用するように選んだ場合、キーボードの、。を叩くと変換するまでもなく直接,.が入力される。
スレ違いすまん。
0199デフォルトの名無しさん
2006/10/22(日) 21:44:20日本語のあとじゃないだろ。
0200デフォルトの名無しさん
2006/10/22(日) 21:48:28見当違いの予感
0201デフォルトの名無しさん
2006/10/22(日) 21:49:220202デフォルトの名無しさん
2006/10/22(日) 21:52:380203デフォルトの名無しさん
2006/10/22(日) 21:53:01別に、や。である必要もない。
それぞれの分野での習慣。
0204デフォルトの名無しさん
2006/10/22(日) 21:54:17数字の後の,や.以外での必要性が分からない。
0205181
2006/10/22(日) 21:59:30具体案ありがとうございます。
>>183,>>192
100個の範囲の中から、10個見たとき昇順でない要素があると言ってましたが、
問題文その物のようです。
これ以上細かなことは聞いてないんです・・・
0206デフォルトの名無しさん
2006/10/22(日) 22:05:510207デフォルトの名無しさん
2006/10/22(日) 23:41:00[2] 問題文
文字列に文字列を挿入する関数 str_ins を作成する。
str_ins( 挿入先の文字列 , 挿入する位置 , 挿入文字列)
-------------------雛形--------------------------
#include <stdio.h>
int str_ins(char str[], int p, char pat[])
{
}
int main(void)
{
char a[128];
strcpy(a, "abcdef");
str_ins(a, 3, "xyz");
puts(a);
}
-------------実行結果-----------------
[yokoyama@pratpc02 Temp]$ ./a.out
abcxyzdef
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 10月24日
[5] その他の制限:特になし
よろしくお願いします
0208デフォルトの名無しさん
2006/10/22(日) 23:55:23#include <string.h>
int str_ins(char str[], int p, char pat[])
{
size_t len = strlen(pat);
memmove(str+p+len,str+p,strlen(str+p)+1);
memcpy(str+p,pat,len);
}
0209デフォルトの名無しさん
2006/10/22(日) 23:59:50そりゃ文字列操作じゃなくてメモリ操作だろ
pの例外とか考えにゃならん
けど良く頑張った
0210デフォルトの名無しさん
2006/10/23(月) 00:01:27memmoveの引数、一番目と二番目が逆じゃね。
0211デフォルトの名無しさん
2006/10/23(月) 00:01:41pの例外?
0212デフォルトの名無しさん
2006/10/23(月) 00:04:06str_ins(a,-1,b);
とか出来るけど、おかしいよね
0213デフォルトの名無しさん
2006/10/23(月) 00:04:56strの範囲外をpが指してる時とかじゃね?
まぁ俺は変なデータを渡す奴が悪い、そんなの知らん。という主義だけど。
0214181
2006/10/23(月) 00:06:54取り出すのではなく、1〜100までの中の任意の連続した10個の中に
昇順ではない並びがある時といった感じだったと思います。
昇順ではない箇所はいくつかというのは指定されていなかったと思うので、
拡大すれば1〜100のなかで1箇所だけ順序が違うけど2分探索しろ ということだと思います。
0215デフォルトの名無しさん
2006/10/23(月) 00:11:51[2] 2 数 n と m を入力すると, 下のように '@' を n x m 個並べたパターン (画像) を出力するプログラムを作成せよ. 制御部は for 文の 2 重ループを用いよ.
[3]
[3.1] winXP sp2
[3.2] cygwin
[3.3] C
[4] 23時59分
[5] n=5 m=8でこんなん
@@@@@@@@
@@@@@@@@
@@@@@@@@
@@@@@@@@
@@@@@@@@
よろしくお願いします
0216デフォルトの名無しさん
2006/10/23(月) 00:11:56>>213
負の値はさすがにアレだけど、
> str_ins( 挿入先の文字列 , 挿入する位置 , 挿入文字列)
↑に従うと文字サイズ渡せないから、エラーチェックなんてどうでもいい課題なんじゃないかね?
0217デフォルトの名無しさん
2006/10/23(月) 00:14:560218デフォルトの名無しさん
2006/10/23(月) 00:15:02まぁ人それぞれの解釈になるわな
というわけで俺は愚問でFAした
0219デフォルトの名無しさん
2006/10/23(月) 00:16:06バッファサイズでしたorz
0220デフォルトの名無しさん
2006/10/23(月) 00:17:20#include<stdio.h>
#include<stdlib.h>
int main(int argc,char**argv){
if(argc==3){
int n=atoi(argv[1]);
int m=atoi(argv[2]);
int i,j;
for(i=0;i<n;putchar('\n'),++i)
for(j=0;j<m;++j)
putchar('@');
}
}
0221デフォルトの名無しさん
2006/10/23(月) 00:23:00もう寝よう…
0222 ◆3zNBOPkseQ
2006/10/23(月) 00:31:46#include <stdio.h>
int main (void)
{
int mozi;
printf("文字を一字入力してください。");
scanf("%s",&mozi);
if(mozi>='A' && mozi<='Z')printf("英大文字です");
else if(mozi>='a' && mozi<='z')
printf("英小文字です");
else if(mozi>=0 && mozi<=9)
printf("数字です");
else
printf("英字でも数字でもありません");
return 0;
}
0223デフォルトの名無しさん
2006/10/23(月) 00:33:510224デフォルトの名無しさん
2006/10/23(月) 00:34:07int main(){
char c;
scanf("%c",&c);
とかじゃなかった?
0225デフォルトの名無しさん
2006/10/23(月) 00:34:310226 ◆3zNBOPkseQ
2006/10/23(月) 01:03:47文字列でなくて一字でもcharの方がいいのですか
サンクスコ
0228デフォルトの名無しさん
2006/10/23(月) 01:44:31#include <stdio.h>
int main()
{
int m, n, i, j;
printf("m> "); scanf("%d", &m);
printf("n> "); scanf("%d", &n);
for (; m > 0; putchar(\n), m--) {
for (i = 0; i < n; i++)
putchar("@");
}
}
0229デフォルトの名無しさん
2006/10/23(月) 01:47:45putchar(@) => putchar('@')
に修正
0230デフォルトの名無しさん
2006/10/23(月) 02:31:20[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):50音順にソートするプログラムをつくれ。 (隣接交換)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語:C
コンパイラ通らない原因がわからないです。
お願いします。
0231デフォルトの名無しさん
2006/10/23(月) 02:34:44エラー文訂正します
/*
以下エラー文です。
c:\MyC>gcc foo.c
foo.c: In function `main': ←foo.c: In function `sort': が正しいです。すみません><
foo.c:42: incompatible types in assignment
foo.c:43: incompatible types in assignment
foo.c:44: incompatible types in assignment
*/
0232デフォルトの名無しさん
2006/10/23(月) 02:37:510233215
2006/10/23(月) 02:38:39ありがとうございました
0234デフォルトの名無しさん
2006/10/23(月) 02:49:37ありがとうw
0235デフォルトの名無しさん
2006/10/23(月) 02:56:190236デフォルトの名無しさん
2006/10/23(月) 03:45:53最初からポインタを教えないらしい。
0237デフォルトの名無しさん
2006/10/23(月) 03:53:380238デフォルトの名無しさん
2006/10/23(月) 05:39:32[2] 問題文(含コード&リンク):
あるフォルダ(sample)の中にある画像(.jpg,.jpeg)の更新日時(作成日時?)を取得し
yyyy-mmの様にフォルダを作成し各々のフォルダに振り分けるプログラムを作成せよ。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 水曜日まで
[5] その他の制限:
よろしくお願いします。
0239デフォルトの名無しさん
2006/10/23(月) 05:53:42Unixシステムコールか、Win32APIのどっちで取ってくるのか
0240デフォルトの名無しさん
2006/10/23(月) 06:00:13質問者じゃねーけど、OSがWinXPなんだから、APIでいいんじゃね?w
0241デフォルトの名無しさん
2006/10/23(月) 06:03:55学校のPCじゃLinuxだけど、うちだとWinしかないとかありうるかなーと
まぁやる気はないんだが
0242238
2006/10/23(月) 06:50:30言葉が足りなくてすみません。
Win32APIでお願いします。
JavaでLinuxは触っていますがCではXPにCygwin+gccがメインです。
0243デフォルトの名無しさん
2006/10/23(月) 06:58:370244デフォルトの名無しさん
2006/10/23(月) 07:15:390245238
2006/10/23(月) 07:36:30Win32APIだと作る事ができないんですか?
漠然と課題内容の物作って来いと言う課題だったので…。
0246デフォルトの名無しさん
2006/10/23(月) 08:00:30http://www.google.com/search?num=50&hl=ja&q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+%E6%9B%B4%E6%96%B0%E6%97%A5%E6%99%82+%E5%8F%96%E5%BE%97&lr=lang_ja
http://www.google.com/search?num=50&hl=ja&q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+%E5%88%97%E6%8C%99&lr=lang_ja
あとはフォルダの作成とかファイルの移動とか
0247デフォルトの名無しさん
2006/10/23(月) 08:01:49わざわざありがとうございます。
自分でやってみて詰まったらまた着ますのでよろしくお願いします。
0248デフォルトの名無しさん
2006/10/23(月) 08:09:03http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2807.c
0249デフォルトの名無しさん
2006/10/23(月) 08:12:370250デフォルトの名無しさん
2006/10/23(月) 09:29:04http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2808.c
gcc(mingw)でコンパイル・リンク・動作確認してある
環境依存・コンパイラ依存してるのでコンパイラが変わると書き換えなきゃいけないが…
0251238
2006/10/23(月) 10:34:13出先からなので携帯から失礼します。
本当にありがとうございます。
参考を見ても全くどうすれば良いか分からずに半ば諦めモードでした。
凄く助かりました本当にありがとうございました。
0252デフォルトの名無しさん
2006/10/23(月) 11:13:42ターゲット m は検索結果の場所 n を元に n-L < m < n+L の範囲にあるので
その範囲を線形サーチすると見つかる(はず)
int search(int search_value, int *data, int data_num){
intcenter, search_start, search_end;
inti;
search_start=0;
search_end=data_num-1;
while(search_end-search_start>=0){
center=(search_end-search_start)/2+search_start;
if(data[center]==search_value)
return center;
if(data[center]>search_value){
search_end=center-1;
}
else{
search_start=center+1;
}
}
search_start-=L;
search_end+=L;
if(search_start<0)
search_start=0;
if(search_end>=data_num)
search_end=data_num-1;
for(i=search_start;i<=search_end;i++)
if(data[i]==search_value)
return i;
return -1;
}
0253デフォルトの名無しさん
2006/10/23(月) 11:19:50「オレの質問答えが出てない」っていう質問者さん、是非もう一度書きこんで下さい。
0254デフォルトの名無しさん
2006/10/23(月) 12:17:34[2] 問題文(含コード&リンク):
コマンド行から複数の数値を受け取りその平均値を出力するプログラムを作成し、プログラムリストと実行結果を示せ。
ヒント:受け取った文字列をdouble型に変換するには関数double atof(const char *nPtr)を使うこの関数を使うにはstdlib.hのインクルードが必要である
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char str[] = "1.41421356";
double x;
x = atof(str);
}
[3] 環境
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc 3.4)
[3.3] 言語: (C)
[4] 期限: ([金曜まで])
[5] その他の制限:
ヒントみたいなのがあるけどよくわかりません、おねがいします
0255デフォルトの名無しさん
2006/10/23(月) 13:06:37[2] 問題文(含コード&リンク): 無限に走り続けるプログラムtest.cを作り、実行可能なプログラムにtestという名前をつけ、これをバックグラウンドで走らせ、そのプロセスを殺すこと。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限: 特になし
0256デフォルトの名無しさん
2006/10/23(月) 13:11:59while(1);
0257デフォルトの名無しさん
2006/10/23(月) 13:28:44#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
int i=0,n;
double *x;
double a=0,m=1,h=0;
if(argc<2) {
fprintf(stderr,"error : no input");
exit(1);
}
n=argc-1;
x=(double *)malloc(sizeof(double)*n);
while(i<n)
x[i++]=atof(argv[i+1]);
for(i=0;i<n;i++) {
a+=x[i];
m*=x[i];
h+=1/x[i];
}
a/=n;
m=pow(m,1/(double)n);
h=n/h;
printf("Arithmetical average = %lf\n",a);
printf("Multiply mean = %lf\n",m);
printf("Hamonic mean = %lf\n",h);
free(x);
return 0;
}
0258デフォルトの名無しさん
2006/10/23(月) 15:42:57なるほど。算術平均とは言われてないもんな。
0259デフォルトの名無しさん
2006/10/23(月) 17:58:00[2] 問題(含コード&リンク):
括弧、加算、減算、乗算、除算に対応した記述を認識し、
先行順走査と後行順走査に書き換えるプログラムを作成せよ。
後行順 入力例:(a+b)-c
出力例:ab+c-
[3] 環境
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc 3.4)
[3.3] 言語: (C)
[4] 期限: ([来週まで])
[5] その他の制限:
0260デフォルトの名無しさん
2006/10/23(月) 19:38:550261デフォルトの名無しさん
2006/10/23(月) 19:45:49>>248で解答が出てるが。
0262デフォルトの名無しさん
2006/10/23(月) 20:14:020263デフォルトの名無しさん
2006/10/23(月) 20:53:20C++が使える人来てくれませんか?
http://ex16.2ch.net/test/read.cgi/news4vip/1161592926/
0264デフォルトの名無しさん
2006/10/23(月) 23:41:23http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2809.c
再帰下降型構文解析を行って構文木を作り,前優先と後優先で訪問する.
スタックを用いた非再帰アルゴリズムもあるが,前置と後置が統一的に書けるのでこちらで.
0265デフォルトの名無しさん
2006/10/23(月) 23:57:500267デフォルトの名無しさん
2006/10/24(火) 03:00:38コンパイルするとこのようなエラーがでました。
ex02.c: In function `main':
ex02.c:64: parse error before `int'
ex02.c:67: `t' undeclared (first use in this function)
ex02.c:67: (Each undeclared identifier is reported only once
ex02.c:67: for each function it appears in.)
0268デフォルトの名無しさん
2006/10/24(火) 03:09:53拡張子をcppにしろ。
0269デフォルトの名無しさん
2006/10/24(火) 07:25:17[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2812.txt
[3] 環境
[3.1] OS: unix
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: C
[4] 期限: 2006年10月24日
よろしくお願いします。
0270デフォルトの名無しさん
2006/10/24(火) 07:27:00int main() {
char buf[256];
fgets(buf, 256, stdin);
int p = 0;
tree *t = equation(buf, &p);
を
int main() {
char buf[256];
int p = 0;
tree *t:
fgets(buf, 256, stdin);
t = equation(buf, &p);
に変更
0271デフォルトの名無しさん
2006/10/24(火) 11:17:531次元適合度検定って何?カイ二乗検定なら聞いた事があるが。
よろしかったら詳しく説明してあるサイトへのリンク貼ってくれたら
プログラム書けると思うよ。
0272デフォルトの名無しさん
2006/10/24(火) 12:40:06携帯からなんでサイトは貼れませんけどカイ二乗というやつです。
一次元適合度検定はx軸をM個の区間に分けN個のデータの度数分布を調べ、カイ二乗を計算するものです
0273デフォルトの名無しさん
2006/10/24(火) 14:06:38片っ端から出力しちゃうんですが、どの文字(何文字目)を出力するか
指定できますか?
0274デフォルトの名無しさん
2006/10/24(火) 14:11:540275デフォルトの名無しさん
2006/10/24(火) 14:58:251
数字2?
2
1足す2の結果は3です。
というプログラムをお願いします
0276デフォルトの名無しさん
2006/10/24(火) 14:59:04指定の仕方の載ってるサイトだけでも・・・。
0277デフォルトの名無しさん
2006/10/24(火) 15:18:05<?
echo "数字1?<br>1<br>数字2?<br>2<br>1足す2の結果は3です。";
?>
0278asd ◆TJ9qoWuqvA
2006/10/24(火) 15:32:31[2] 問題文(含コード&リンク):実数riを入力すると自然対数を求めて表示するプログラムを作成せよ。
ただし、0以下の場合は不可能と出る。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Crescent
[3.3] 言語:C
[4] 期限:10月25日1時
[5] その他の制限:特になし
0279デフォルトの名無しさん
2006/10/24(火) 15:49:30その文字列がchar momoji[32]="nunenumEor"で宣言されてたら、
Eだけ表示させたかったら、put(momoji[7])で読み込め
0280デフォルトの名無しさん
2006/10/24(火) 17:20:04#include<stdio.h>
#include<math.h>
intmain(void)
{
double ri;
printf("Input value :");
scanf("%lf", &ri);
if(ri<=0.0)
printf("不可能\n", ri);
else
printf("自然対数 %f\n", log(ri));
return 0;
}
0281280
2006/10/24(火) 17:22:56printf("不可能\n", ri);
↓
printf("不可能\n");
0282デフォルトの名無しさん
2006/10/24(火) 19:15:42[2] 問題文(含コード&リンク):二行二列の行列の掛け算をせよ。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語:C言語
[4] 期限:2006年10月26日07:00まで
[5] その他の制限:void関数までは習いました。
void sum(int x[][2],int y[][2],int z[][2]);みたいな関数を授業で使ったのですが、
さっぱり意味がわからなくて困ってます。
int x11,x12,x21,x22;
int y11,y12,y21,y22;
int a[2][2]={{x11*y11,x12*y12},{0,0}};
int b[2][2]={{x11,x12},{x21,x22}};
int c[2][2]={{y11,y12},{y21,y22}};
printf("x11=");
scanf("%d",x11);
こんな感じで数値を代入しようとしても代入されないので、この状態からまったく進みません。
どうかよろしくおねがいします。
0283デフォルトの名無しさん
2006/10/24(火) 19:22:17scanfの&を忘れてるだけじゃ?
0284デフォルトの名無しさん
2006/10/24(火) 19:23:30C言語だと変数宣言のときに変数の値って使えないんじゃないかな
0285デフォルトの名無しさん
2006/10/24(火) 19:38:41phpかよw
0286デフォルトの名無しさん
2006/10/24(火) 20:08:31わからないので教えてください
Form1のメンバとして整数型の変数countを用意します。
TButtonコンポーネントとTLabelコンポーネントをForm1に貼り付けます。
Buttonをクリックするごとに、クリックした回数と何か文章をLabelに表示してください。
この時、文章の中身はできるだけ更新してください。
たとえば5種類文章を用意して、それをクリックごとに順番に表示させてもOKです。
0287デフォルトの名無しさん
2006/10/24(火) 20:09:45>>1
0288デフォルトの名無しさん
2006/10/24(火) 20:15:51よくしらんがVCLなので。
引数とかはよく知らない。BCBもってないし。
Button1Click {
count++;
Label1.Caption = IntToStr(count) + "回クリックされました";
}
0289デフォルトの名無しさん
2006/10/24(火) 21:50:54printf("%3d", i)
としたとき
0
1
2
・
・
・
10
11
となるところを
001
002
003
・
・
・
010
としたいのですが、何かよい方法はないでしょうか?
0290デフォルトの名無しさん
2006/10/24(火) 21:54:36%03d
0291デフォルトの名無しさん
2006/10/25(水) 09:42:26なのですが、下記のプログラムを作るにはどうしたら良いでしょうか?
(4行目まで、上の行を消して書き込みファイルに保存→そのファイルを読みを4回繰り返す
という作業では中間ファイルばかりが増えてしまいます。一度で処理を行えませんか?)
ttp://forums.belution.com/ja/cpp/000/059/87.shtml
0292デフォルトの名無しさん
2006/10/25(水) 10:13:500293デフォルトの名無しさん
2006/10/25(水) 11:05:18[2]
今回はファイル入出力の応用で、
ファイルの簡単な暗号化及び複合化を行うプログラムを作成する。
暗号化は改行以外の文字のアスキーコードに1を足す
複合化はその逆の動作を行うこと
引数の2番目が暗号化と複合化のどちらかを決定、
3番目が入力ファイル名を示し、
4番目が出力ファイル名を示す
上記のようなプログラムを作成せよ
[3]OS:Linux コンパイラ:gcc3.4 言語:C
[4]明日午前9時30分
[5]C言語の基礎
関数・ポインタ・構造体・ファイル入出力まで学んでいます
よろしくお願いします
0294デフォルトの名無しさん
2006/10/25(水) 11:21:39[2]
● 西暦の年号を入力して、閏年かを判定するプログ
ラムを作成しましょう。
■ 入力は正の整数
■ 入力ミスの場合(0か負の整数)は、
「正の整数を入力しましょう。」と表示する
■ 閏年の場合は、「閏年です。」と表示する
■ 閏年でない場合は、「閏年ではないです。」と表示する
■ 閏年は、年号が4で割り切れる年。(2004年)
ただし、100で割り切れる年は閏年ではない。(1900年)
しかし、400で割り切れる年は閏年となる。(2000年)
■ 条件をうまく考えよう(「かつ」と「または」で言い換えよ
う)。プログラムは、例題を参考にしよう。
■ プロジェクト名:06leap ファイル名:06leap.c
■ ソースコードを印刷し、自分の生まれた年で試した結果
を記入して提出しよう
[3]windowsXP
[4]10月30日
0295デフォルトの名無しさん
2006/10/25(水) 11:29:43#include <stdio.h>
#include <stdlib.h>
int main(){
FILE *readfile,*writefile;char buff[512],*endptr;long i,pos,num;double data;
readfile=fopen("sample.txt","r"); writefile=fopen("result.txt","w");
if(!readfile || !writefile){ puts("エラー"); exit(1); }
for(i=0;i<4;++i)fgets(buff,sizeof(buff),readfile);
for(i=0;1;i^=1){
pos=ftell(readfile);
if(!fgets(buff,sizeof(buff),readfile)) break;
num=strtol(buff,&endptr,10); fprintf(writefile,"%03d\n",i?num%1000:num/1000);
while(fgets(buff,sizeof(buff),readfile)){
if(buff[0]=='9') continue;
num=strtol(buff,&endptr,10);
if(num){
if(i)data=strtod(endptr,&endptr);
data=strtod(endptr,&endptr);
fprintf(writefile,"%06d %f\n",num,data);
}else{
fprintf(writefile,"%06d\n\n",num);
break;
}
}
if(!i)fseek(readfile,pos,SEEK_SET);
}
fclose(readfile); fclose(writefile);
return 0;
}
0296デフォルトの名無しさん
2006/10/25(水) 11:34:42#include <stdio.h>
int main(){
int year;
printf("西暦を入力してください:");
scanf("%d", &year);
if(year <= 0){
printf("正の整数を入力しましょう。");
return -1;
}
if((year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0)){
printf("閏年です。");
}else{
printf("閏年ではないです。");
}
return 0;
}
0297デフォルトの名無しさん
2006/10/25(水) 12:01:34「多倍長整数を使うことによって、フィボナッチ数列の100番目
までを正しく計算するプログラムをC言語で作成しなさい。」
いろいろ調べたんですが、多倍長整数がなんなのかよくわかっていないので。。。
よろしくおねがいします。
0298デフォルトの名無しさん
2006/10/25(水) 12:04:15>>1を読んで書き直し
0299デフォルトの名無しさん
2006/10/25(水) 12:15:32すいません。書き直します。
[1]単元は多倍長整数、二重リンクリスト、ポインタあたりですたぶん。
[2]「多倍長整数を使うことによって、フィボナッチ数列の100番目
までを正しく計算するプログラムをC言語で作成しなさい。」
[3]環境はUnix?
コンパイラ名は・・・gccって書いてコンパイルはしてるんですが。。
言語はC言語
[4]今週の土曜日正午まで
[5]まだ初めて3週間くらいです。超簡単な入門書は一応全部目を通しました。
よろしくお願いします。
0300デフォルトの名無しさん
2006/10/25(水) 12:43:190302デフォルトの名無しさん
2006/10/25(水) 12:48:14http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2814.c
0304デフォルトの名無しさん
2006/10/25(水) 13:12:10BEGIN{
for(i=0;i<4;i=i+1)
getline
}
{
if(NF==1){
kind1=substr($1, 1, 3)
kind2=substr($1, 4, 6)
kind[kind1]=1;
kind[kind2]=1;
}else{
if(substr($1,1,1)=="9")
continue
data_num[kind1]+=1
data_label[kind1,data_num[kind1]]=$1
data[kind1,data_num[kind1]]=$2
data_num[kind2]+=1
data_label[kind2,data_num[kind2]]=$1
data[kind2,data_num[kind2]]=$3
}
}
END{
for(kind_loop in kind){
print kind_loop
for(i=1;i<=data_num[kind_loop];i+=1)
{
printf "%s %s\n", data_label[kind_loop,i], data[kind_loop, i]
}
}
}
0305デフォルトの名無しさん
2006/10/25(水) 13:18:26ありがとうございます。
本を見ながら何が書いてあるか考えます。
0306295
2006/10/25(水) 13:31:48重複を除くように修正
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2816.c
0307デフォルトの名無しさん
2006/10/25(水) 17:48:36書き直したらシカト・・・
結局、いちゃもんしかつけれないのねw
0308デフォルトの名無しさん
2006/10/25(水) 17:55:54お前の目は節穴か
0309291
2006/10/25(水) 18:01:14>295,306
>304
ありがとうございます。助かりましたm(_ _)m
こんなすれ違いな質問に回答をしていただき感謝しています。
0310デフォルトの名無しさん
2006/10/25(水) 18:26:26A^A→0
になるのは何がすごいのでしょうか・・・
0311デフォルトの名無しさん
2006/10/25(水) 18:28:260313デフォルトの名無しさん
2006/10/25(水) 18:37:352)
A-1
ファイルを読み込み、行番号をつけて出力するプログラムを作成せよ
A-2
引数に3つのファイル名を取ると、最初の二つのファイルを結合し、
3つめのファイルに保存するプログラムを作成せよ
-実行例-
% cat text01.txt
good morning!!
% cat text02.txt
good bye!!
% ./a-2 text01.txt text02.txt text03.txt
% cat text03.txt
good morning!!
good bye!!
3)OS:Linux コンパイラ:gcc3.4 言語:C
4)明日
5)ポインタを終えてファイル入出力まで学んだ所です
構造体はまだやっていません
よろしくお願いします
0314デフォルトの名無しさん
2006/10/25(水) 18:44:21先に>>302が出たから答えなかっただけかも知れないだろ。
0315デフォルトの名無しさん
2006/10/25(水) 18:51:05A-2
#include <stdlib.h>
int main(int argc, char* argv[])
{
if(argc != 4)
return 0;
char com[1024] = "cat ";
strcat(com, argv[1]);
strcat(com, " ");
strcat(com, argv[2]);
strcat(com, " > ");
strcat(com, argv[3]);
system(com);
return 0;
}
0316デフォルトの名無しさん
2006/10/25(水) 18:56:370317デフォルトの名無しさん
2006/10/25(水) 19:42:260318デフォルトの名無しさん
2006/10/25(水) 20:54:27[2] 問題文(含コード&リンク):
3つの自然数を選んだところ、それらの和は2006になり、それらの最小公倍数は2006の倍数に
なった。このような3つ自然数の組を列挙しなさい。
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名 :VC 6.0
[3.3] 言語: (C/C++)
[4] 期限: 無期限
[5] その他の制限:実行時間が1000msを超えるのもは不可
0319デフォルトの名無しさん
2006/10/25(水) 21:05:23#include<stdio.h>
int main(int argc,char **argv){
char c;
int key;
FILE *infp,*outfp;
/*手抜き*/
key = (0 == strcmp(argv[1],"encode"))? 1:-1;
infp = fopen(argv[2],"r");
outfp = fopen(argv[3],"w");
while(EOF != (c = fgetc(infp))){
fputc((c == '\n')? c:c+key,outfp);
}
fclose(infp);
fclose(outfp);
return 0;
}
0320デフォルトの名無しさん
2006/10/25(水) 21:41:19高速化の余地は大いにあるけど、1000msも掛かることはないと思う。
# include <iostream>
/*
* a, b, cの最小公倍数が2006の倍数である
* は、
* a, b, cのいずれかが2の倍数であり、かつa, b, cのいずれかが17の倍数であり、
* かつa, b, cのいずれかが59の倍数である
* と同値である。
*/
bool test(int a, int b, int c)
{
# define DIVISIBLE(n) !(a % n && b % n && c % n)
return DIVISIBLE(2) && DIVISIBLE(17) && DIVISIBLE(59);
# undef DIVISIBLE
}
int main()
{
for(int i = 1; i <= 2004; i++)
for(int j = 1; j <= 2005 - i; j++)
if(test(i, j, 2006 - i - j))
std::cout << "(" << i << ", " << j << ", " << 2006 - i - j << ")\n";
}
0321デフォルトの名無しさん
2006/10/25(水) 21:48:29ありがとう
0322デフォルトの名無しさん
2006/10/25(水) 22:37:160323デフォルトの名無しさん
2006/10/25(水) 23:01:06http://osk.u-shizuoka-ken.ac.jp/~tateyama/lecture/STAT/chitest/goodness.html
↑カイ2乗検定の解説です。
0324デフォルトの名無しさん
2006/10/25(水) 23:23:29あたまわるい
0325デフォルトの名無しさん
2006/10/25(水) 23:54:59C/C++初心者なのでご教授お願いしたいのですが,
javaでいうところのset/get 関数を配列で扱う場合
C/C++ではどのように実装するのでしょうか?
javaでは配列ごと
int[] AA(){return aa;}
とreturn できるのですが
Cでは配列は返せないのでC特有のスマートな方法があるのでしょうか?
よろしくお願いします.
0326デフォルトの名無しさん
2006/10/25(水) 23:59:18つか、そんなことが必要になる時点で設計失敗だがなw
0327デフォルトの名無しさん
2006/10/26(木) 00:01:16> 配列へのポインタを返せば?
で、墓穴を掘り
…*vector返せよ
> つか、そんなことが必要になる時点で設計失敗だがなw
で、人生に終止符を打つ
…すべてファーストクラスオブジェクトなんだからどうでもいいだろ
0328デフォルトの名無しさん
2006/10/26(木) 04:11:04構造体を返せばおk
0329デフォルトの名無しさん
2006/10/26(木) 04:50:44#include<stdio.h>
int main(int argc, char *argv[]){
FILE *fp;
int moji, line_no=0;
int flag_prev_is_linefeed=1;
if(argc<2){
fprintf(stderr, "\nUsage: %s filename\n", argv[0]);
exit(1);
}
fp=fopen(argv[1], "r");
if(fp==NULL){
fprintf(stderr, "\nError: %s file cannot open.\n", argv[1]);
exit(1);
}
while(1){
moji=fgetc(fp);
if(moji==EOF)
break;
if(flag_prev_is_linefeed)
{
flag_prev_is_linefeed=0;
printf("%4d ", ++line_no);
}
putc(moji, stdout);
if(moji=='\n')
flag_prev_is_linefeed=1;
}
fclose(fp);
return 0;
}
0330デフォルトの名無しさん
2006/10/26(木) 05:31:12#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define HYOUHON_KIND 11
#define HYOUHON_NUM 100
double uniform_rand(void){ /* 一様擬似乱数 */
return (double)rand()/(RAND_MAX-1);
}
double p(double x){ /* 確率密度関数 */
if(x<0.0 || x>=4.0)
return 0.0;
return (-x/8+0.5);
}
int p_rand(double x){ /* 確率分布に従う擬似乱数 */
if(uniform_rand()<p(x))
return 1;
return 0;
}
int main(void){
int data[HYOUHON_KIND]={}; /* 配列を 0 で初期化 */
int i, j;
double hyouhon_value;
srand(time(NULL));
for(i=0;i<HYOUHON_KIND;i++){
hyouhon_value=4.0/(HYOUHON_KIND-1)*i;
for(j=0;j<HYOUHON_NUM;j++)
data[i]+=p_rand(hyouhon_value);
printf("%3d %.3f %d/%d\n", i, hyouhon_value, data[i], HYOUHON_NUM);
}
return 0;
}
0331デフォルトの名無しさん
2006/10/26(木) 10:28:01[2] 問題:ボイヤームーア法を用いた文字検索プログラムの作成とその動作解説
[3] 環境
[3.1] OS:WindowsXP(動作はUNIX上で行う)
[3.2] コンパイラ名とバージョン:不明
[3.3] 言語:Cのみ
[4] 期限:2006年10月31日 23:59:59まで
[5] テキストファイルから文章を読み込んで、それに対してこちらが検索文字を打ち込みます。
結果は「icchi:〜gyou〜moJime」とし、最後に合計を「total:〜」として出力します。
他の人からもらったものがあるんですが、いまいち動作が理解できません。
あと、条件として同じ文字が続いている文章に対してそれよりも少ない数
の同じ文字で検索した際は、検索文字の数ずつではなく1文字ずつずらさな
ければいけないそうです。
例を挙げると、「aaaaaaaaa」という文字列に「aaa」で検索をしたときの
出力結果は3個ではなく7個になります。
以下にもらったものを張ります。よろしければ動作説明もお願いします。
よろしくお願いします。
0332デフォルトの名無しさん
2006/10/26(木) 10:30:13#include <string.h>
#define MAXCHR1 1000
#define MAXCHR2 256
int main(void)
{
char filename[MAXCHR2],ex[MAXCHR1],strg[MAXCHR2],x[MAXCHR2];
FILE *fp;
int a,m,nall,s,M,N,b,c,resoult,P,e,t;
printf("Input filename\n");
scanf("%s",filename);
printf("Input search string.\n");
scanf("%s",strg);
M=strlen(strg);
if((fp=fopen(filename,"r"))==NULL)
{
printf("read open error!\n");
return (-1);
}
0333デフォルトの名無しさん
2006/10/26(木) 10:30:44m=0;
while(m<M-1)
{
if(strg[M-1]==strg[m])
{
x[a]=M-m;
a++;
}
m++;
}
P=0;
e=0;
while(fgets(ex,MAXCHR1,fp)!=NULL)
{
N=strlen(ex);
P++;
nall=0;
s=0;
while(nall+M-1<N)
{
nall=nall+s;
0334デフォルトの名無しさん
2006/10/26(木) 10:31:57{
resoult=strncmp(ex+nall,strg,M);
if(resoult==0)
{
printf("icchi:%dgyou%dmojime\n",P,nall+1);
e++;
}
b=0;
while(b<a)
{
resoult=strncmp(ex+nall+x[b],strg,M);
if(resoult==0)
{
printf("icchi:%dgyou%dmojime\n",P,nall+1);
e++;
}
b++;
}
if(a==0)
{
s=M;
}
else
{
s=x[0]-1;
}
}
0335デフォルトの名無しさん
2006/10/26(木) 10:32:34{
c=1;
t=0;
while(c<M-1 && t==0)
{
c++;
if(ex[M-1+nall]==strg[M-c])
{
t=c;
}
}
if(t!=0)s=c-1;
else s=M;
}
}
}
printf("total:%d\n",e);
fclose(fp);
return(0);
}
0336デフォルトの名無しさん
2006/10/26(木) 13:46:352]長いのでこちらにUPしました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2820.txt
3]C言語 linux gcc3.4
4]10/30
5]ポインタ・構造体まで教わりました
よろしくお願いします
0337デフォルトの名無しさん
2006/10/26(木) 15:04:55http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2821.txt
0338デフォルトの名無しさん
2006/10/26(木) 21:06:08関数をつくり、座標X,Yを入力して0点からの距離とθを求める
プログラムなのですが、
#include <stdio.h>
#include <math.h>
int
kyori(float y, float x,float l)
{
return l=sqrt((x*x)+(y*y));
}
sita(float y, float x,float C)
{
return C=atan2(y,x);
}
void main() {
float x;
float y;
float l;
float C;
printf("座標Xを入力してください。\n");
scanf("%f", &x);
printf("座標Yを入力してください。\n");
scanf("%f",&y);
kyori (l,x,y);
printf("距離は%fです\n",l);
printf("角度θは%f \n",C);
}
で一応完成はして実行もできるのですが計算結果がマイナスになったりなど
どうもおかしいのです、間違っている箇所等ございましたらお願いいたします。
0339デフォルトの名無しさん
2006/10/26(木) 21:25:03たぶんθがマイナスになってるんだと思うが、どこもおかしくはない。
atan2の戻り値は-πからπまでだから。
0から2πにしたいのなら、2πを加えてやればいい
0340デフォルトの名無しさん
2006/10/26(木) 21:34:41πだろ?
0341デフォルトの名無しさん
2006/10/26(木) 21:42:57π足したら座標に対する角度にならんだろw
>>339は負数なら2πを足せって意味でそ
0342デフォルトの名無しさん
2006/10/26(木) 23:32:09なるほど
0343デフォルトの名無しさん
2006/10/26(木) 23:53:44[2] 問題文(含コード&リンク):
http://pdaxrom.sourceforge.jp/wiki/index.php?plugin=attach&pcmd=open&file=Lesson.txt&refer=%A5%A2%A5%C3%A5%D7%A5%ED%A1%BC%A5%C0
ヒント→http://pdaxrom.sourceforge.jp/wiki/index.php?plugin=attach&pcmd=open&file=1.jpg&refer=%A5%A2%A5%C3%A5%D7%A5%ED%A1%BC%A5%C0
[3] 環境
[3.1] WindowsXP(SP2)Home
[3.2] .NET2005(C++)
[3.3] C言語
[4] 期限:2006年10月30日AM9:00まで
[5] 特に無し
0344デフォルトの名無しさん
2006/10/26(木) 23:59:03[2] 問題文: pixelを用いて図形を描く問題です。
15×15の画面に(3,3)-(10,8)の直線を描きなさい。
また、(3,3)-(8,10)の直線も加えなさい。
授業で扱った例題を応用して書くプログラムだと思います。
下に試ニで扱った例荘閭vログラムを試ヲしておきます=B
#define XSIZE 15
#define YSIZE 15
#include <stdio.h>
main(){
char pixel[XSIZE][YSIZE];
int x,y;
for(y=0;y<YSIZE;y++) for(x=0;x<XSIZE;x++)pixel[x][y]='.';
for(x=0;x<XSIZE;x++) pixel[x][x]='*';
for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++) printf("%c",pixel[x][y]);
printf("\n");
}
}
このプログラムをもとに上記の課題プログラムを作るんだと思います。
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ名とバージョン: (viエディタ)
[3.3] 言語:C
[4] 期限:2006年10月31日(火)
[5] その他の制限:なし
0345デフォルトの名無しさん
2006/10/27(金) 00:15:210346デフォルトの名無しさん
2006/10/27(金) 00:42:33struct node **a,**b;
for(a=&start;1<d1;--d1) a=&((*a)->next);
for(b=&start;1<d2;--d2) b=&((*b)->next);
p = *a;
*a = *b;
*b = p;
p = (*a)->next;
(*a)->next = (*b)->next;
(*b)->next = p;
0347デフォルトの名無しさん
2006/10/27(金) 01:25:32[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2827.txt
[3] 環境
[3.3] 言語:C++
1~1000で素数をファイルに出力するんですがうまくいかず・・・
ファイルは作成されるものの文字化け状態でどうしたものかと。
0348デフォルトの名無しさん
2006/10/27(金) 01:34:51メモ帳の自動認識が誤爆してるだけ。
0349デフォルトの名無しさん
2006/10/27(金) 01:36:140350デフォルトの名無しさん
2006/10/27(金) 01:38:20ホントだ。メモ帳すげー!
0351デフォルトの名無しさん
2006/10/27(金) 02:55:53[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2828.txt
[3] 環境
[3.2] 言語:コンパイラ名とバージョン:VisualStdio2003
[3.3] 言語:C++
ぅう・・・配列はどうにも・・・・・・
0352デフォルトの名無しさん
2006/10/27(金) 03:02:50#include <stdio.h>
#define XSIZE 15
#define YSIZE 15
/* 点p1と点p2を通る直線の式y=ax+bを求める */
void linexpr(double p1[2], double p2[2], double *a, double *b)
{
*a = (p1[1] - p2[1])/(p1[0] - p2[0]);
*b = p1[1] - (*a)*p1[0];
}
0353デフォルトの名無しさん
2006/10/27(金) 03:03:37int main(){
char pixel[XSIZE][YSIZE];
int x,y;
double a; /* 直線の傾きa y = ax + b */
double b; /* 直線のY軸との交点 y = ax + b */
double p1[2]; /* 点1の座標 */
double p2[2]; /* 点2の座標 */
for(y=0;y<YSIZE;y++) for(x=0;x<XSIZE;x++)pixel[x][y]='.';
p1[0] = 3; p1[1] = 3; /* 点(3, 3) */
p2[0] = 10; p2[1] = 8; /* 点(10, 8) */
linexpr(p1, p2, &a, &b); /* 直線の式を求める */
for(x=0;x<XSIZE;x++) {y = a*x+b+0.5; if (y >= 0 && y < YSIZE) pixel[x][y]='*';};
p1[0] = 3; p1[1] = 3; /* 点(3, 3) */
p2[0] = 8; p2[1] = 10; /* 点(8, 10) */
linexpr(p1, p2, &a, &b); /* 直線の式を求める */
for(x=0;x<XSIZE;x++) {y = a*x+b+0.5; if (y >= 0 && y < YSIZE) pixel[x][y]='*';};
for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE;x++) printf("%c",pixel[x][y]);
printf("\n");
}
return 0;
}
0354デフォルトの名無しさん
2006/10/27(金) 03:13:08課題がいくつかあるけど、どれ?
0355 ◆asHRtOTOD2
2006/10/27(金) 10:55:35[2] 問題文(含コード&リンク): 1次元配列を用いてn人分の数学の得点を100点満点で入力し、得点の高い順に並び替えて表示するプログラムを作成しなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: borland
[3.3] 言語: C
[4] 期限: 2006年10月30日17:00まで
[5] その他の制限:
わかる方がいたら、どうかお願いします。
0356デフォルトの名無しさん
2006/10/27(金) 11:10:45#include <string.h>
int main(void){
int i,n;
int sort[100];
int *points;
printf("nを入力:"); scanf("%d",&n);i f(n<0) return 1;
points=(int*)malloc(n,sizeof(int));
for(i=0;i<n;i++){
printf("%d番目の入力:",i);
scanf("%d",&points[i])
if(!(0<=points[i] && points[i]<=100)) return 1;
}
for(i=0;i<100;sort[i++]=0);
for(i=0;i<n;sort[points[i++]]++);
for(i=100;i<0;i--)
for(n=0;n<sort[i];i++)
printf("%d点",i);
free(points);
}
みたいな
0357 ◆asHRtOTOD2
2006/10/27(金) 11:44:31#include <stdio.h>
void main(void)
{
int i, x[100], sum=0,n;
printf("n=");
scanf("%d",&n);
for(i = 0; i <n ; i++){
printf("x[%d] =", i );
scanf("%d",&x[i]);
}
for(i = 0; i <n; i++){
sum += x[i];
}
printf("sum = %d \n",sum);
}
こんな風にやっています。
本当に図々しくてすいません
0358デフォルトの名無しさん
2006/10/27(金) 12:01:16それじゃ、>357の最後の行の前にこれを追加して味噌。
--
int nums[100 + 1];
for (int ic = 0; ic <= 100; ++ic) {
nums[ic] = 0;
}
for (int ic = 0; ic < n; ++ic) {
++nums[x[ic]];
}
for (int ic = 100; ic >= 0; --ic) {
for (int nc = 0; nc < nums[ic]; ++nc) {
printf("%d pts.\n", ic);
}
}
--
0359デフォルトの名無しさん
2006/10/27(金) 12:09:51こんなのでソートできるのか?
0360 ◆asHRtOTOD2
2006/10/27(金) 12:12:310361デフォルトの名無しさん
2006/10/27(金) 12:14:29じゃあエラー直してコンパイルすれば?
0362デフォルトの名無しさん
2006/10/27(金) 12:17:130363358
2006/10/27(金) 12:21:35なんだよ、今時C89なのか?
ちょっと待て、書き直すから。
>>359
やってみてからほざけ。漏れは>356を書き直しただけだ。
0364358
2006/10/27(金) 12:24:29あーすまん、確かにコンパイラが過去の遺物になっていたな。
ほれ、これで通るだろ。
--
{
int ic;
int nums[100 + 1];
for (ic = 0; ic <= 100; ++ic) {
nums[ic] = 0;
}
for (ic = 0; ic < n; ++ic) {
++nums[x[ic]];
}
for (ic = 100; ic >= 0; --ic) {
int nc;
for (nc = 0; nc < nums[ic]; ++nc) {
printf("%d pts.\n", ic);
}
}
}
--
言うまでもないが、括弧の数に注意な。
0365 ◆asHRtOTOD2
2006/10/27(金) 12:32:000366デフォルトの名無しさん
2006/10/27(金) 12:33:30そういうたぐいの物なのか?
0367デフォルトの名無しさん
2006/10/27(金) 12:34:08大差ないかもな
0368デフォルトの名無しさん
2006/10/27(金) 12:40:23値域が狭いときは重宝する。
#普通こういう場合は何点が何人って表現になるはずだけどね。
どうでもいいけど、>>364のコードってどう見ても癖の強い熟練プログラマの手が入ってるっぽいんだけどw
#前置インクリメントとか制御変数名が二文字だとか
それはさておき、>>356はお粗末だの。0-100点の入力を許容しているのに配列は100要素しかない。
0369デフォルトの名無しさん
2006/10/27(金) 12:42:05いやそうではないだろう。
表示部分のように二重ループがないとちゃんとソートされた出力が
出来ない事から、オーダーはO(N^2)だろ。
0370デフォルトの名無しさん
2006/10/27(金) 12:54:44#勿論、値域が狭い(というか取り得る値のバリエーションが少ない)ことが前提ね。
具体的な応用としてはこういう何かの成績みたいなものとかグレイ256諧調画像の濃度分布とかね。
0371デフォルトの名無しさん
2006/10/27(金) 12:58:41調べてみたらビンソートらしい。
0372デフォルトの名無しさん
2006/10/27(金) 13:45:22http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2831.txt
0373デフォルトの名無しさん
2006/10/27(金) 13:47:22int x[] = {7,12,5,8,66,33,24,59,1,0,100};
const int n = sizeof(x)/sizeof(x[0]);
int ic; int nums[100 + 1];
int result[n];
for (ic = 0; ic <= 100; ++ic) nums[ic] = 0;
for (ic = 0; ic < n; ++ic) ++nums[x[ic]];
for (ic = 1; ic <= 100; ++ic) nums[ic]+=nums[ic-1];
for (ic = n-1; ic >= 0; --ic) result[--nums[x[ic]]] = x[ic];
for (ic = n-1; ic >= 0; --ic) printf("%d pts.\n", result[ic]);
0374デフォルトの名無しさん
2006/10/27(金) 13:53:34http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2831.txt
0375374
2006/10/27(金) 13:54:370376デフォルトの名無しさん
2006/10/27(金) 14:05:56>>364のコードでは、外側のループは101回まわり、
その一回ごとに内側のループはnums[ic]回まわる。
したがって、内側のループは合計するとΣ{ic=0..101}(nums[ic])回まわる。
一方、Σ{ic=0..101}(nums[ic])はnに等しいので、全体でO(n)。
0378デフォルトの名無しさん
2006/10/27(金) 15:03:27あっそうか。101というのはNじゃなくて固定されてるもんな。
0379330
2006/10/27(金) 16:03:56ごめ、問題勘違いしてた。
問題文の p(x) 確率分布密度に沿った乱数は次の式になります。
double p_rand(void){
return 4*sqrt(1.0-uniform_rand());
}
0380291,309
2006/10/27(金) 16:53:33>309
で十分まとめの作業を行えていたのですが、
004005
168400 8.793 48.078
↓
004
168400 8.793
005
168400 48.078
というパターンのほかに
004005
168400 8.793 48.078 -70.018 52.845
↓
004
168400 8.793 48.078
005
168400 -70.018 52.845
(左から A B C D Eだとすると A B C A D Eの組み合わせ)
というパターンが増えました。
>309をどのように修正したら、このような出力を行うことが出来ますか?
0381デフォルトの名無しさん
2006/10/27(金) 17:33:57[2] Form1のメンバとして整数型の変数countを用意します。
TButtonコンポーネントとTLabelコンポーネントをForm1に貼り付けます。
Buttonをクリックするごとに、クリックした回数と何か文章をLabelに表示してください。
この時、文章の中身はできるだけ更新してください。
たとえば5種類文章を用意して、それをクリックごとに順番に表示させてもOKです。
ちなみに、Buttonをクリックした時のメンバ関数内でif文などは使用できます。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: C++ Builde 6
[3.3] 言語: C++
おねがいします
0382デフォルトの名無しさん
2006/10/27(金) 18:53:08ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2832.c
0383380
2006/10/27(金) 19:10:08いけました。ありがとうございます
0384デフォルトの名無しさん
2006/10/27(金) 19:29:19[2] 問題文:
第1問@キーボードから5つの整数を入力して、その後その5つの値と平均値を出力するプログラムを作成せよ
(5つの値は配列にいれるように)
第2問@char c[3]; int i[3]; double d[3]; という配列を確保してそれぞれの変数(全部で9つ)のアドレスを表示
するプログラムを作成せよ
(printf()での表示には%pを使いなさい)
第3問@キーボードから5つの実数(範囲0.2〜10.0)を(要素数5の配列に)入力すると、その「5つの値」と「最大値と
最小値を除いた3つの値の平均」を計算し表示するプログラムを作成
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 無期限
0385デフォルトの名無しさん
2006/10/27(金) 20:04:24[2] 問題文
これは>>86の続きのようなものです.
t=0に x=0からスタートするランダムウォークを考えよう.
ただしx → yとジャンプする遷移確率は,
2/3(y=x+1,右に1進む),
W(y|x)=1/3(y=x-1,左に1進む),
0(それ以外) とします.
x(t)のサンプル平均, サンプル分散を計算するプログラムを作ろう.
ランダムウォークは nn=1000回繰り返してサンプルを得ます.
各ウォークで, interval=19 歩ごとに, x(i*interval) のサンプル平均,
サンプル分散を計算することにします.
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C
[4] 期限: 2006年10月31日09:00まで
[5] その他
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2686.txt
を利用して作ってください
0386330,379
2006/10/27(金) 20:08:42間違った答え書いてごめん
正解はこちら
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2833.c
0387>>330>>379>>386
2006/10/27(金) 20:25:30sample_data_index=(int)(p_rand()/SAMPLE_DATA_WIDTH);
↓
#define EPS (1.0e-10)
sample_data_index=(int)((p_rand()-EPS)/SAMPLE_DATA_WIDTH);
何度目の修正だか…orz
0388デフォルトの名無しさん
2006/10/27(金) 20:41:14http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2834.c
0389デフォルトの名無しさん
2006/10/27(金) 21:10:15void print_line(char pixel[XSIZE][YSIZE], int x1, int y1, int x2, int y2)
{
int dx, dy, sign_dx, sign_dy;
int x, y, d, cx, cy, i;
dx=x2-x1; dy=y2-y1;
sign_dx=(dx<0)?-1:((dx>0)?1:0);
sign_dy=(dy<0)?-1:((dy>0)?1:0);
dx=abs(dx); dy=abs(dy);
if(dx>dy) d=dx;
else d=dy;
x=x1;y=y1;
cx=cy=d/2;
for(i=0;i<=d;i++){
if(cx>d){x+=sign_dx;cx-=d;}
if(cy>d){y+=sign_dy;cy-=d;}
pixel[x][y]='*';
cx+=dx;
cy+=dy;
}
}
使い方
print_line(pixel, 3, 3, 10, 8);
0390デフォルトの名無しさん
2006/10/27(金) 21:13:14C++ Builde 6 持ってないので、
TButtonコンポーネントとTLabelコンポーネントをForm1に貼り付けた、ソースコードをアップロードしてちょ
0391291,380,383
2006/10/27(金) 21:13:29例.result.txtをresult-C-11.txtという風に。
result.txtの001(〜) と000000の間にある数字6桁の数字ですが一番左が 0 16 18 26 4 5 の6種類です。6桁の数字を、左側の種類によって異なる変換ルールを用いて9桁の数字に置き換えたいと
思います。グループ名はA=1 B=2 C=3 D=4となりresult-C-11(グループ名-管理番号).txtを読んだ場合、つぎの変更ルールにのっとって名前の変更を行いたいです。
左端が0の場合
001100→111301100(固定値[1] 管理番号[11] グループ名[3] 6桁数字の2番目3番目4番目[011] 固定値[00])
左端が16の場合
160500→100000516(固定値[1] 固定値[0000] 6桁数字の3番目4番目[05] 固定値[16])
左端が18の場合
181600→100001626(固定値[1] 固定値[0000] 6桁数字の3番目4番目[16] 固定値[18])
左端が26の場合
260500→100000526(固定値[1] 固定値[0000] 6桁数字の3番目4番目[05] 固定値[26])
左端が4の場合
400100→111301040(固定値[1] 管理番号[11] グループ名[3] 6桁数字の3番目4番目[01] 固定値[0] 固定値[40])
左端が5の場合
500100→111301050(固定値[1] 管理番号[11] グループ名[3] 6桁数字の3番目4番目[01] 固定値[0] 固定値[50])
001
001100 -3.080 80.194
160500 -25.997 89.993
181600 -2.786 70.379
0000
↓
001
111301100 -3.080 80.194
100000516 -25.997 89.993
100001626 -2.786 70.379
000000
以下 002 … 000000 003 … 000000と続きます。すみませんが、よろしくお願いします。
0392デフォルトの名無しさん
2006/10/27(金) 22:20:51http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2836.c
使い方
./a.out ファイル名 管理番号
例
./a.out result-C-11.txt 11
ところで、これって宿題?
0393デフォルトの名無しさん
2006/10/27(金) 22:57:14ありがとうございます。
最初のころにすれ違いとも書いていましたが、卒論データのまとめなんです。
データが多すぎて、ツール作ってってことだったんですが、Cの入門書を買ってきても
全然分からなくて。
すみません
0394393
2006/10/27(金) 23:14:52ところで、
使い方
./a.out ファイル名 管理番号
例
./a.out result-C-11.txt 11
これって、どういう意味なんですか?
0395392
2006/10/27(金) 23:24:50コンパイル・リンクしてできた実行ファイルの後に続けて
〜.exe ファイル名 管理番号
と入れて下さい
※gcc でコンパイル・リンクした場合には
オプションで出力ファイル名をしていない限り実行可能ファイルが a.out という名前になります。
但し ms-windows 環境だと a.exe です(ファイル種別を拡張子で判断しているため)
0396393
2006/10/27(金) 23:41:47WindowsXP
VC++6.0
という環境でコンパイルをかけています。
実行すると、
Usage: パス\a.exe filename number
Press any kiy to continue
となり、入力が出来ないのですが、これはどのようにしたら入力が
出来るのでしょうか?
0397396
2006/10/27(金) 23:51:21自己解決しました。
0398396
2006/10/27(金) 23:57:24001
001100 -3.080 80.194
160500 -25.997 89.993
181600 -2.786 70.379
0000
↓
001
111301100 -3.080 80.194
100000516 -25.997 89.993
100001626 -2.786 70.379
6桁の数字を9桁に変えた横にある二列の数字も書き出すことは出来ませんか?
0399392
2006/10/28(土) 00:08:56出力結果をファイルにしたいという意味でしょうか?それなら
〜.exe ファイル名 管理番号 > 出力ファイル名
として下さい。
あなたが出力として欲しいフォーマットと違うという意味であれば、
例を書いて下さい。
0400デフォルトの名無しさん
2006/10/28(土) 00:10:22卒論で急いでるのはいいですが、残念ですがCは難しいからそう簡単に分かるものでも、教えられるものでもありません。きっと諦めた方が早いでしょう。
0401デフォルトの名無しさん
2006/10/28(土) 00:15:38ret=sscanf(one_line, "%[0-9] %[-.0-9] %[-.0-9]", left_code, data[0], data[1]);
↓
ret=sscanf(one_line, "%[0-9] %s %s", left_code, data[0], data[1]);
と変更して試してみて下さい。
0402393
2006/10/28(土) 00:30:48C、難しいです。(入門書を読んだ限りでは、簡単そうだったのですが。)
書き出しフォーマット、ファイル出力 ともに>399 >401 で解決しました。
ありがとうございました。
0403デフォルトの名無しさん
2006/10/28(土) 02:49:32[2] pp. 177〜179 (5.1.5 sqrt 関数を作ってみよう) を読め. [リスト 5.11] の mysqrt は, 結局
a1=1
ai+1=(ai+x/ai)/2
という数列が x の平方根に収束することを利用して計算を行っている. 同様にして, x の 3 乗根を計算する関数 double mycbrt(double x) を作成せよ. 数列には,
a1=1
ai+1=(2ai+x/ai2)/3
を用いよ. [リスト 5.11] と同じように, main から mycbrt を呼び出すことにより, x = 1, 2, 3, …, 10 について x の 3 乗根 r を求めよ.
[3.1] winXP sp2
[3.2] cygwin
[3.3] C
[4] 2006年 10/30 23時59分
[5] 途中までやったんで埋める感じでお願いします。
問題文のページ数とかは本使ってやってるから出てるだけです。
0404403
2006/10/28(土) 02:51:15#include<math.h>
double mycbrt(double r); /*プロトタイプ宣言*/
int main (void)
{
double r;
printf("\tr\tcbrt r\t\tmycbrt r\n");
for(r=1.0; r<=10.0; r += 1.0)
{
printf("\t%3.1f\t%12.10f\t%12.10f\n",r,cbrt(r),mycbrt(r));
}
return 0;
}
double mycbrt (double r)/*square root を求める関数*/
{
const double eps=1.0e-10;/*打ち切り計算誤差*/
doubleguess=1.0;/*推測値*/
while(fabs(guess*guess-x) >= eps)/*推測値がよくなるまで繰り返す*/
{
guess=((2*guess)+r/(guess*guess))/3.0;/*推測値の更新*/
}
return guess;/*関数の戻り値*/
}
途中までやったぶんです、
実行したら最初の1行だけ出てプログラムが固まります。
0405デフォルトの名無しさん
2006/10/28(土) 03:41:23三箇所ほど直しといた
double mycbrt(double r)/*cube root を求める関数*/
{
const double eps=1.0e-10;/*打ち切り計算誤差*/
double guess=r;/*推測値*/
while(fabs(guess*guess*guess-r) >= eps)/*推測値がよくなるまで繰り返す*/
{
guess=((2*guess)+r/(guess*guess))/3.0;/*推測値の更新*/
}
return guess;/*関数の戻り値*/
}
0407デフォルトの名無しさん
2006/10/28(土) 09:31:30Cは簡単過ぎて難しいな。
キーワードが少なく、しかもいろんな意味を割り当ててある上に、
演算子が結構多くて優先順位が決まっている上に、ポインタが
あって、他の高級言語とはかなり毛色が違うからな。
0408388
2006/10/28(土) 10:08:54>>388 の修正版
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2837.c
問1、問3の「5つの値を表示」するのを忘れてた
0409388
2006/10/28(土) 10:14:36問3
maximum=minimum=data[i];
↓
maximum=minimum=data[0];
0410デフォルトの名無しさん
2006/10/28(土) 11:11:27[2] 問題文: 実行したファイル名を除いたコマンドライン引数に、複数個指定した全てのファイルの内容を標準出力に表示するプログラム
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:明日まで
よろしくお願いします。
0411デフォルトの名無しさん
2006/10/28(土) 11:19:14何でこう言う方法を思いつくの?って感じのソースが沢山ある。
ただ宿題を頼む側としては、このまま出して大丈夫なのかなぁ?
考え方が学生レベルを遥かに逸脱してて先生に怒られそう。
0412デフォルトの名無しさん
2006/10/28(土) 11:21:400413デフォルトの名無しさん
2006/10/28(土) 11:25:52いろんなプログラムを見たり書いたりしてれば思いつく必要さえなくなるよ
> ただ宿題を頼む側としては、このまま出して大丈夫なのかなぁ?
そこまで真面目な人なら、
ロジックを追って自分なりに書き直してみるのもいいかもね
0414デフォルトの名無しさん
2006/10/28(土) 11:35:11こうゆうこと?
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *args[]){
FILE *fp;
int i, c;
if(argc <= 1)return EXIT_FAILURE ;
for(i=1; i<argc; i++){
if((fp = fopen(args[i], "r")) == NULL){
puts("ERROR");
return EXIT_FAILURE;
}
while((c=fgetc(fp)) !=EOF){
putchar(c);
}
fclose(fp);
puts("");
}
return EXIT_SUCCESS;
}
0415デフォルトの名無しさん
2006/10/28(土) 11:42:19#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
char cmd[FILENAME_MAX+10];
int i;
for(i=1;i<argc;i++)
{
sprintf(cmd, "type %s", argv[i]);
system(cmd);
}
return 0;
}
0416デフォルトの名無しさん
2006/10/28(土) 12:01:48[2] 問題文(含コード&リンク):0から99の乱数を使って6×6ビンゴの表を作成しなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:BorlandC++
[3.3] 言語:C++
[4] 期限: 10月30日まで
[5] その他の制限:
よろしくお願いします。
0417cがわからない学生
2006/10/28(土) 12:03:11[2] 問題文(含コード&リンク):キーボードから1以上26 以下の整数n を入力し,n 番目のアルファベット(大文字)を画面表示
するプログラムを作成しなさい.例えば,「1」が入力された場合には「A」を,「10」が入力された
場合には「J」を画面に表示する.なお,0 以下,あるいは27 以上の数字が入力された場合に
は再入力できるようにすること.また,if やswitch を用いて26 種類の分岐を作ってはならない.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名:gcc
[3.3] 言語:C
[4] 期限:2006年10月31日まで
[5] その他の制限:なし?
0418cがわからない学生
2006/10/28(土) 12:04:420419デフォルトの名無しさん
2006/10/28(土) 12:10:17#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define BINGO_RAND 100
void swap(int *a, int *b){
int temp;
temp=*a;
*a=*b;
*b=temp;
}
int main(void){
int rand_data[BINGO_RAND];
int i, j;
srand(time(NULL));
for(i=0;i<BINGO_RAND;i++)
rand_data[i]=i;
for(i=0;i<BINGO_RAND;i++)
swap(&rand_data[i], &rand_data[rand()%BINGO_RAND]);
for(i=0;i<6;i++){
for(j=0;j<6;j++)
printf(" %2d", rand_data[i*6+j]);
printf("\n");
}
return 0;
}
0420デフォルトの名無しさん
2006/10/28(土) 12:13:54#include<stdio.h>
int main(void)
{
int n;
while(1)
{
printf("Input value (1-26):");
scanf("%d", &n);
if(n>=1 && n<=26)
break;
}
printf("%c\n", 'A'+(n-1));
return 0;
}
0422c不明な人
2006/10/28(土) 12:19:50[2] 問題文(含コード&リンク):キーボードから,「A」,「B」,「C」,「D」,「K」の5 種類のアルファベットを入力し,それぞれの入
力個数を数えて画面出力するプログラムを作成しなさい.なお,「Z」が入力されるまでキーボ
ード入力を繰り返すこととし,これら6 文字以外の入力はカウントしないようにしておくこと.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 明後日まで
[5] その他の制限: なし
よろしくお願いします。
0423デフォルトの名無しさん
2006/10/28(土) 12:20:430-99 の範囲のままでおk
0424デフォルトの名無しさん
2006/10/28(土) 12:29:06#include<stdio.h>
#include<ctype.h>
int main(void)
{
char check_char[]="ABCDK";
int count[sizeof(check_char)-1]={};
int i;
int moji;
while(1)
{
moji=getchar();
moji=toupper(moji);
if(moji=='Z' || moji==EOF)
break;
for(i=0;check_char[i]!='\0';i++)
if(moji==check_char[i])
count[i]++;
}
for(i=0;check_char[i]!='\0';i++)
{
printf("%c : %d\n", check_char[i], count[i]);
}
return 0;
}
0425c不明な人
2006/10/28(土) 12:50:190426cがわからない学生
2006/10/28(土) 12:51:170427デフォルトの名無しさん
2006/10/28(土) 13:04:17[2] 問題文(含コード&リンク):
入力された値(1,2,3,9)と名前により線形リストを作成するものである。
値=1の時、名前を含むノードを線形リストの先頭に追加し、ポインタ sentoがそれを指し示す。
値=2の時、逆に線形リストの最後に追加し、ポインタ saigoがそれを指し示す。
値=3の時、現在の線形リストの状態を先頭から順に表示する。
値=9の時、リスト構築を終了する。
なお各ノードの格納場所として配列workが用意され、最初のノードは名前のみの入力により無条件に作成される。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2839.txt
ほとんど出来たんですが、case2 の場合がうまく動いてくれないので
その部分をどう直していいのかが分かりません…
コンパイラは通ってるんですけど、実行結果がうまい事いかないorz
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006/10/29 PM02:00
[5] その他の制限: 構造体、ポインタを使用。
0428デフォルトの名無しさん
2006/10/28(土) 13:44:18work[n].next = &work[n];
は
saigo->next = &work[n];
の誤りだな。
0429デフォルトの名無しさん
2006/10/28(土) 13:51:07早速ありがとうございます
ちゃんとcase2が正常に動きました
構造体とポインタの部分が難しいです…
0430デフォルトの名無しさん
2006/10/28(土) 14:35:24[2]問題文:実行したファイル名を除いたコマンドライン引数に、複数個指定したすべてのファイルの内容を標準出力に表示するプログラムです。
#include <stdio.h>
int main(int argc, char *argv[]){
int c;
FILE *src;
FILE *dst;
if(argc != 3){
fprintf(stderr, "使い方: %s ファイル名 1 ファイル名 2\n", argv[0]);
fprintf(stderr, "ファイル名 1 をファイル名 2 に copy します。\n");
return 1;
}
src = fopen(argv[1], "r");
if(src == NULL){
perror(argv[1]);
return 1;
}
dst = fopen(argv[2], "w");
if(dst == NULL){
perror(argv[2]);
return 1;
}
while((c = fgetc(src)) != EOF)
fputc(c, dst);
fclose(src);
fclose(dst);
return 0;
}
を参考につくるのですが。
[3]環境
[3.1]OS:Windows XP
[3.2]コンパイラ名とバージョン:gcc
0431デフォルトの名無しさん
2006/10/28(土) 14:52:49dst = stdin
for(i=1;i<argc;i++) {
src = fopen(argv[i], "r");
if(src == NULL)
continue;
while((c = fgetc(src)) != EOF)
fputc(c, dst);
fclose(src);
}
0432デフォルトの名無しさん
2006/10/28(土) 14:53:48stdin -> stdout
0433デフォルトの名無しさん
2006/10/28(土) 15:04:32それをどこに入れたらよいのでしょうか?
0434デフォルトの名無しさん
2006/10/28(土) 15:15:35♂ -> ♀
キャッ
0435デフォルトの名無しさん
2006/10/28(土) 15:21:40dst = stdin
↓
dst = stdout
0436デフォルトの名無しさん
2006/10/28(土) 15:55:04dst = fopen(argv[2], "w");
if(dst == NULL){
perror(argv[2]);
return 1;
を、
dst = stdout
for(i=1;i<argc;i++) {
src = fopen(argv[i], "r");
if(src == NULL)
continue;
while((c = fgetc(src)) != EOF)
fputc(c, dst);
fclose(src);
}
に変えるだけですか?
0437デフォルトの名無しさん
2006/10/28(土) 16:02:23「セミコロンがないというエラーが出るんですがどうしたらいいですか?」
だな
0438416
2006/10/28(土) 16:27:51ありがとうございました。
0439デフォルトの名無しさん
2006/10/28(土) 17:16:160440デフォルトの名無しさん
2006/10/28(土) 17:45:36ない
0441デフォルトの名無しさん
2006/10/28(土) 18:42:590442デフォルトの名無しさん
2006/10/28(土) 19:36:240444デフォルトの名無しさん
2006/10/28(土) 19:47:12[2] 問題文(含コード&リンク):
多倍長整数を使うことによって、フィボナッチ数列の100番目までを
正しく計算するプログラムを作成しなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] borland
[3.3] C言語
[4] 期限: 本日中
[5] その他の制限: 特に無し。
途中までは問題なかったのですが、
突然原因不明のエラーが出てくるようになってしまいました。
http://www-2ch.net:8080/up/download/1162032169809635.yw2OjQ
コンパイラは何の文句も言ってくれません。
助けてください。お願いします。
0445デフォルトの名無しさん
2006/10/28(土) 19:48:51[2] 問題文(含コード&リンク):入力された数値の総和を求めるプログラムを作成せよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: VC++ 6.0
[3.3] 言語: C++
[4] 期限: 2006年10月30日
[5] その他の制限:まだ習い始めて間もないです。
変数:総和、入力した数値
1. 総和を0とする。
2. 最初の数値を入力する。
3. 入力した値が-1でない限り以下の処理を繰り返す。
3.1. 入力した数値を総和に加算する。
3.2. 次の数値を入力する。
4. 総和を画面に表示する。
入力終了は値-1の入力によって検出する。
と言う方法でやるようにと言われてます。
お願いします。
0446デフォルトの名無しさん
2006/10/28(土) 19:58:14まずは main 関数内の head_a, head_b, head_t の領域を確保しましょう。
0447デフォルトの名無しさん
2006/10/28(土) 20:06:54at main ():
struct digitへのポインタだけ作って、実体が宣言されてないんだが。
head_a->next = head_a->prev = head_a;
でコケるぞ。
で、ロジックも何がしたいのか良く分からん。
head_aが二つ前の要素、head_bが一つ前の要素、head_tが現在の要素のように
見えるんだが、add()では全然そのような計算をしていない。
0448デフォルトの名無しさん
2006/10/28(土) 20:14:52どう途中まで問題ないんだよw
main始まってすぐ落ちてるじゃねーか
0449デフォルトの名無しさん
2006/10/28(土) 20:21:55int main (void) {
int sum; // 総和
int input; // 入力した数値
sum = 0;
printf ("入力された数の総和を表示します。\n");
printf ("入力を終了するときは、-1を入力してください。\n");
while (1) { // ずっと繰り返す
scanf ("%d", &input); // inputに値を入力
if (input == -1) break; // inputが-1のときループを抜ける
sum += input; // 総和にinputを足す
}
printf ("総和は %d です。\n", sum);
return 0;
}
0450デフォルトの名無しさん
2006/10/28(土) 20:22:370451444
2006/10/28(土) 20:30:58ありがとうございます!
最初で落ちなくなりました。
きっちり確保してあげなきゃいけないんですね…。
>>447
head_aが現在の要素、head_bが一つ前の要素、
head_tは退避用の一時リストのつもりです。
わかりにくいソースでごめんなさい。
解答ありがとうございました、助かりました。多謝です。
0452デフォルトの名無しさん
2006/10/28(土) 20:35:47449のはC言語じゃないんですか?
C++じゃないと怒られます。
0453デフォルトの名無しさん
2006/10/28(土) 20:54:34思いっきり勘違いしてました。ごめんなさい。C++だとこうなります。
---
#include <iostream>
using namespace std;
int main (void) {
int sum; // 総和
int input; // 入力した数値
sum = 0;
cout << "入力された数の総和を表示します。" << endl;
cout << "入力を終了するときは、-1を入力してください。" << endl;
cin >> input; //最初の数値を入力する
while (input != -1) { // inputが-1でない間繰り返す
sum += input; // 総和にinputを足す
cin >> input; // 次の数字を入力する
}
cout << "総和は " << sum << " です。" << endl;
return 0;
}
0454デフォルトの名無しさん
2006/10/28(土) 21:15:35多倍長整数の演算部分とフィボナッチ部分を分けた方が見やすいと思う
0455デフォルトの名無しさん
2006/10/28(土) 21:33:17どこのどなたかもわかりませんがホントにありがとうございます。
これからは、なるべく自力で出来るようにがんばります。
0456デフォルトの名無しさん ◆HOZlQYR1MY
2006/10/28(土) 21:58:33[2] 問題文(含コード&リンク):初期値 N を0とし、N←2*N+3で更新されるNを10回順に出力するプログラムをwhile文を利用して作成せよ。(漸化式N(i+1)=2*N(i)+3、初期値N(0)=0で表される数列のN(0)〜N(9)の値を順に出力するプログラムです。)作成したプログラムを提出せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2006/11/8
まだ1年なのでよく分からないのでよろしくお願いします。
0457デフォルトの名無しさん
2006/10/28(土) 22:05:26こんな授業とるなよw
0458デフォルトの名無しさん
2006/10/28(土) 22:06:35int i = 0;
while(i < 10) {
/* printf で好きなように出力 */
n = 2*n+3;
}
2年になったらもっとわからなくなるんでない?
0459デフォルトの名無しさん
2006/10/28(土) 22:28:25繰り返し計算をしててその結果を随時for文の中に
coutを入れて発散してないか(計算がおかしくないか)
見ているのですが、今一回一回改行する設定にしてて
DOS画面にバーッと下のほうに出てくるような感じになっているのですが、
これをDOS画面の一番最初の数字のところだけどんどん更新させる事はできないのでしょうか?
ご存知の方がおられましたら教えてください。よろしくお願いします。
0460デフォルトの名無しさん
2006/10/28(土) 22:30:46\r
0461デフォルトの名無しさん
2006/10/28(土) 22:38:23すみません・・・やっても使い方がわからず
ググっても"/r C++言語"などと調べても
中の人からいい検索結果が返ってきません。
申し訳ないんですがやりかたを書いていただけないでしょうか?
0462デフォルトの名無しさん
2006/10/28(土) 22:40:54と思ったらできました!!"¥"という字が文字化け?してたのか
/の左右逆さまの文字になっていて分かりませんでした。
改行と同じように使えばいいのですね!わかりました。ありがとうございました!
0463デフォルトの名無しさん
2006/10/28(土) 23:04:16ここに書いてあるアドバイスを参考に作ってみたのですがよくわかりません。
>>444の方のプログラムを具体的にどう直せばいいでしょうか・・・
プログラム初心者なのにこんな授業取ってしまって非常に困ってます
出来れば回答宜しくお願いします・・・
0464デフォルトの名無しさん
2006/10/28(土) 23:05:58そして半角スラッシュ( / )は別物。
0465デフォルトの名無しさん
2006/10/28(土) 23:15:01さすがに同じ授業とってる奴のとほとんど同じなのはまずいだろ
0466デフォルトの名無しさん
2006/10/28(土) 23:16:55一応変えられる所は出来る限り変えますので・・・
0467デフォルトの名無しさん
2006/10/28(土) 23:28:000468初心者
2006/10/28(土) 23:38:32他の.exeファイル実行できるようにどうすればいいですか??
0469デフォルトの名無しさん
2006/10/28(土) 23:41:16スレ違い
あと日本語でおk
0470デフォルトの名無しさん
2006/10/28(土) 23:52:09マルチは氏ね
0471カッパ
2006/10/29(日) 09:45:510472デフォルトの名無しさん
2006/10/29(日) 09:46:36[2] 問題文(含コード&リンク):
2と17と5の倍数を入力した時のみ
終了するプログラムを作りなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] borland
[3.3] C言語
[4] 期限: 10月30日の12時まで
[5] その他の制限: 特に無し。
よろしくお願いします。
0473デフォルトの名無しさん
2006/10/29(日) 09:55:16#include <stdio.h>
int main (void) {
int input;
/* ずっと繰り返す */
while (1) {
printf ("数値を入力してください。\n");
scanf ("%d", &input);
/* nの倍数 <=> nで割った余りが0 */
if (input % 2 == 0) break;
if (input % 5 == 0) break;
if (input % 17 == 0) break;
}
return 0;
}
0474デフォルトの名無しさん
2006/10/29(日) 10:46:42そんないいげんなソースよく公開できるな
匿名ならではw
0475デフォルトの名無しさん
2006/10/29(日) 11:04:53そんないいかげんな日本語(ry
0476デフォルトの名無しさん
2006/10/29(日) 11:09:57具体的箇所を示さずオナニーできるのが匿名ならでわなのだw
0477デフォルトの名無しさん
2006/10/29(日) 11:22:10全くエラー処理してねーじゃん
0478デフォルトの名無しさん
2006/10/29(日) 11:23:440479デフォルトの名無しさん
2006/10/29(日) 11:25:21具体的箇所(ry
0480デフォルトの名無しさん
2006/10/29(日) 11:30:29チャーなりキャラクターなり好きに呼べ
0481デフォルトの名無しさん
2006/10/29(日) 11:31:32[2]問題文:以下のプログラムを参考に、UNIXのgrepコマンド同様に1つ目の引数に示された文字列を持つ行を、2つ目の引数で示されたファイル内から抜き出して表示するプログラムを作ってください。
strlenght関数とstrinclude関数に関しては宣言だけで結構です。
int strinclude(char str1[], char str2[]){
int i, j;
int len1, len2;
len1 = strlength(str1);
len2 = strlength(str2);
if(len1 < len2)
return 0;
for(i = 0; i <= (len1 - len2); i++){
for(j = 0; j < len2; j++){
if(str1[i+j] != str2[j]){
break;
}
}
if(j == len2){
return 1;
}
}
return 0;
}
[3] 環境
[3.1] OS: WindowsXP
[3.2] gcc
[3.3] C言語
[4] 期限:本日中
よろしくお願いします。
0482デフォルトの名無しさん
2006/10/29(日) 11:38:420483デフォルトの名無しさん
2006/10/29(日) 11:58:25よし、じゃああえて標準関数で
>>481
/* 宣言だけで結構らしいので宣言だけする */
int strlenght(char[]);
int strinclude(char[],char[]);
#include<stdio.h>
#include<string.h>
int main(int argc,char**argv){
char*pattern;
char buf[1024];
int lineno;
if(argc <= 1)return 0;
pattern = argv[1];
if(argc > 2)freopen(argv[2],"r",stdin);
for(lineno=1;fgets(buf,sizeof buf,stdin);++lineno)
strstr(buf,pattern) && printf("%3d: %s",lineno,buf);
}
0484デフォルトの名無しさん
2006/10/29(日) 12:58:420485デフォルトの名無しさん
2006/10/29(日) 13:01:25>>473で問題ないよ
0486デフォルトの名無しさん
2006/10/29(日) 15:02:300487デフォルトの名無しさん
2006/10/29(日) 15:10:200488デフォルトの名無しさん
2006/10/29(日) 15:35:040489デフォルトの名無しさん
2006/10/29(日) 18:12:49main()
{
int *x;
*x=1;
printf("x=%o *x=%d\n",x,*x);
}
これを実行しろって問題なんだけど、コンパイルできませんでした。
なぜコンパイルできないのですか?
テンプレ無視ってスマソ
0490デフォルトの名無しさん
2006/10/29(日) 18:15:41return 0?
0491デフォルトの名無しさん
2006/10/29(日) 18:17:39こんなカンジかな。
#include <stdio.h>
int main(void)
{
int *x;
x=malloc(sizeof(int));
*x=1;
printf("x=%o *x=%d\n",x,*x);
free(x);
return 0;
}
0492デフォルトの名無しさん
2006/10/29(日) 18:21:46xがどこにも指定されてない。
#include<stdio.h>
int main()
{
int a=1;
int *x;
*x=a;
x=&a;
printf("x=%o *x=%d\n",x,*x);
return 0;
}
0493デフォルトの名無しさん
2006/10/29(日) 18:47:45俺の環境(gcc-4.1.1)ではコンパイルできた。
0494saga
2006/10/29(日) 19:21:26x=&a;
順番逆じゃない佐賀?
0495489
2006/10/29(日) 19:37:31どうなったんですか?
0496デフォルトの名無しさん
2006/10/29(日) 19:39:58セグメンテーション違反です (core dumped)
0497489
2006/10/29(日) 19:40:49それってどういう意味なんですか?
0498デフォルトの名無しさん
2006/10/29(日) 19:42:19プログラムが不正なメモリ操作をしたので強制終了、くらいの意味。
0499デフォルトの名無しさん
2006/10/29(日) 19:48:24*x=a;自体いらないんだぜ
0500デフォルトの名無しさん
2006/10/29(日) 19:55:34コンパイルエラーは?
まともなC89コンパイラなら通すはずだと思うんだが。
0501492
2006/10/29(日) 19:56:47#include<stdio.h>
int main()
{
int a=1;
int *x;
x=&a;
printf("x=%o *x=%d",x,*x);
return 0;
}
0502デフォルトの名無しさん
2006/10/29(日) 21:06:350503デフォルトの名無しさん
2006/10/29(日) 21:08:440504デフォルトの名無しさん
2006/10/29(日) 21:41:41普通は書き換える必要はありません。
0505デフォルトの名無しさん
2006/10/29(日) 21:41:50[2] 発生させた乱数の値に関して度数分布を求める関数を作る
関数 frequency( データ配列、データ配列の要素数、値の範囲、結果の配列、結果の配列の要素数)
とする。例えば、値の範囲が0〜100で、結果配列の要素数が20であれば、5刻みの区間で
その区間にある値をカウントする。つまり(0〜5、6〜10、11〜15.。。。。 96〜100)
のそれぞれの区間にあるデータの個数を結果として返す。
関数frequency内は、できるだけポインタを使ってきじゅつすること。以下雛形↓
#include <stdio.h>
int main( void )
{ int n;
int x[1024], f[20];
generate_dist( x , 1024, 100);
for(n=0; n<1024; n++) printf("%5d",x[n]);
frequency( x , 1024 , 100, f , 20);
puts("");
for(n=0; n<20; n++) printf("%5d",f[n]); }
int frequency( int x[], int numx, int r, int f[], int numy)
{
}
int generate_dist( int x[], int num, int r)
{ int *p;
for (p=x; p != &x[num] ; p++ ) {
*p = rand() % (r+1);
*p += rand() % (r+1);
*p += rand() % (r+1);
*p /= 3; } }
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語: C
[4] 期限: 10月31日
[5] その他の制限:特になし
0506デフォルトの名無しさん
2006/10/29(日) 22:26:17#include <stdio.h>
#include <stdlib.h>
void frequency( int x[], int numx, int r, int f[], int numy);
void generate_dist( int x[], int num, int r);
int main( void )
{
int n;
int x[1024], f[20];
generate_dist( x , 1024, 100);
for(n=0; n<1024; n++) printf("%5d\n",x[n]);
frequency( x , 1024 , 100, f , 20);
puts("");
for(n=0; n<20; n++) printf("%d: %5d\n",n, f[n]);
return 0;
}
0507デフォルトの名無しさん
2006/10/29(日) 22:26:54void frequency( int x[], int numx, int r, int f[], int numy)
{
int i;
double tick = (double)r/numy;
for (i = 0; i < numy; i++) f[i] = 0;
for (i = 0; i < numx; i++) {
int n;
n = x[i]/tick;
f[n]++;
}
}
void generate_dist( int x[], int num, int r)
{
int *p;
for (p=x; p != &x[num] ; p++ ) {
*p = rand() % (r+1);
*p += rand() % (r+1);
*p += rand() % (r+1);
*p /= 3;
}
}
0508デフォルトの名無しさん
2006/10/30(月) 01:07:34[2]
# 2つの自然数 a, b に対し, a と b の最大公約数を求める関数 int gcd(int a, int b) を作成せよ.
# 2つの自然数 a, b に対し, その公約数をすべて表示する関数 void print_cd(int , int) を作成せよ.
※ 「a と b の公約数」は「a と b の最大公約数の約数」なので, gcd(a,b) を呼び出して 2 数の最大公約数 g を求めてその全約数を表示すればよい. i = 2, 3, …, g について i が g を割り切るかどうかテストし, 割り切ればそれを表示するようにする.
# main から gcd と print_cd を呼び出し, キーボードから入力した自然数 a, b に対して, 最大公約数とすべての公約数とを表示するようにせよ (表示形式は任意).
[3]
[3.1] winXP sp2
[3.2] cygwin
[3.3] C
[4] 23時59分
[5] 途中までやったんで続きお願いします。最大公約数は出せました
0509508
2006/10/30(月) 01:08:49void gcdprint(int,int);
int gcd(int,int);
int main (void)
{
int a,b;
printf("a bを入力して下さい>>");
scanf("%d %d",&a,&b);
gcdprint(a,b);
return 0;
}
void gcdprint(int a,int b)/*最大公約数を印字する関数*/
{
printf("%d\tgcd\t%d\t=\t%d\n",a,b,gcd(a,b));
}
int gcd(int a,int b)/*最大公約数を計算する関数*/
{
int z;
while((z=a%b)!=0)/*aをbで割った余りをzに代入し*/
{/*zが0以外のあいだにループする*/
a=b;/*aにbを代入し*/
b=z;/*bに余りzを代入する*/
}
return b;/*bに余りzを代入する*/
}
これに埋めて下さい。よろしくお願いします
0510デフォルトの名無しさん
2006/10/30(月) 01:58:440511デフォルトの名無しさん
2006/10/30(月) 02:55:02{
int g, i;
g = gcd(a, b)
printf("%d\tgcd\t%d\t=\t%d\n",a,b,g);
for (i = 1; i < g; i++)
{
if (g & i == 0)
{
printf("%d\n", i);
}
}
}
0512デフォルトの名無しさん
2006/10/30(月) 03:01:29void print_cd(int a, int b){
int c, i;
c=gcd(a, b);
for(i=1;i<=c;i++){
if(c%i==0)
printf("%d\n", i);
}
}
0513デフォルトの名無しさん
2006/10/30(月) 03:02:47void print_cd_recursive_call(int a, int b){
int c, i, j, k;
if(a==1){
printf("%d\n", b);
return;
}
for(i=2;a/i>=i;i++){
if(a%i==0){
c=a;
for(j=0;c%i==0;j++)
c/=i;
break;
}
}
if(a/i<i){
i=a;
j=1;
c=1;
}
for(k=0;k<=j;k++){
print_cd_recursive_call(c, b);
b*=i;
}
}
void print_cd(int a, int b){
int c;
c=gcd(a, b);
print_cd_recursive_call(c, 1);
}
0514デフォルトの名無しさん
2006/10/30(月) 12:33:02[2] 問題文(含コード&リンク):
1.入力した文章の半角スペースを改行に変換して表示せよ。
2.1の改行を削除し,文字を詰めて表示せよ
ex.
Hello World
ans1.
Hello
World
ans2.
HelloWorld
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: Borland C
[3.3] 言語: C
[4] 期限: 10月30日まで
ご教授宜しくお願い致します。
0515デフォルトの名無しさん
2006/10/30(月) 12:48:54#include<stdio.h>
int main(void){
char c;
while(EOF != (c = fgetc(stdin))){
if(c == ' ') c = '\n';
if(c != '\n'){
printf("%c",c);
}
}
return 0;
}
0516デフォルトの名無しさん
2006/10/30(月) 12:49:56それだと「変換して」ないのでは?
0517515
2006/10/30(月) 12:49:58× char c;
○ int c;
0518デフォルトの名無しさん
2006/10/30(月) 12:50:07/* 問1 */
#include<stdio.h>
#define BUF_SIZE 1024
int main(void)
{
char buf[BUF_SIZE];
int i;
gets(buf);
for(i=0;buf[i]!='\0';i++)
{
if(buf[i]!=' ')
putchar(buf[i]);
else
putchar('\n');
}
return 0;
}
0519デフォルトの名無しさん
2006/10/30(月) 12:50:40/* 問2 */
#include<stdio.h>
#define BUF_SIZE 1024
int main(void)
{
char buf[BUF_SIZE];
int i;
gets(buf);
for(i=0;buf[i]!='\0';i++)
{
if(buf[i]!=' ')
putchar(buf[i]);
}
return 0;
}
0520デフォルトの名無しさん
2006/10/30(月) 15:00:57[2] 以下の文法を(Lexical analyze)字句解析するプログラムを作成せよ。
program --> declaration_list statement_list
declaration_list --> empty_string | declaration ; declaration_list
declaration --> VAR variable
variable --> a|b|c
statement_list --> statement | statement_list ; statement
statement --> variable := expression | PRINT variable
expression --> term | expression + term | expression - term
term --> integer | variable
integer --> digit | integer digit
digit --> 0 | 1
[3] 環境
[3.1] OS:Unix
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 明後日まで
よろしくお願い致します。
0521デフォルトの名無しさん
2006/10/30(月) 18:12:07[2] 問題文(含コード&リンク):
(1)画面に繰り返し数を入力させるメッセージを表示し、キーボードから入力させる。
(2)画面に2つの整数を入力させるメッセージを表示し、キーボードから入力させる。
(3)画面に計算方法を2つ提示し、その中から1つを選択させる。
計算方法は四則演算、剰余、ビット演算のいずれか。
(4)選択された計算方法で、計算を行う。計算は関数を用いて行うこと。
関数には引数と戻り値があること。
(5)計算結果を画面に出力する。
(6)(2)に戻り、繰り返し数ぶん処理を繰り返す。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cigwin
[3.3] 言語: C
[4] 期限: 11月10日
[5]if文、for文、関数まで習いました。
よろしくお願いします。
0522デフォルトの名無しさん
2006/10/30(月) 18:40:00http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2843.c
0523デフォルトの名無しさん
2006/10/30(月) 18:41:58def_func(sub,-)
def_func(mul,*)
def_func2(div,/)
def_func2(jouyo,%)
def_func(bit_and,&)
def_func(bit_or,|)
def_func(bit_xor,^)
↓
int add(int a, int b){return a + b;}
int sub(int a, int b){return a - b;}
int mul(int a, int b){return a * b;}
int div(int a, int b){if(b==0)return 0;return a / b;}
int jouyo(int a, int b){if(b==0)return 0;return a % b;}
int bit_and(int a, int b){return a & b;}
int bit_or(int a, int b){return a | b;}
int bit_xor(int a, int b){return a ^ b;}
0524デフォルトの名無しさん
2006/10/30(月) 18:50:490525デフォルトの名無しさん
2006/10/30(月) 19:30:41「置換」でなく「変換」しろとおっしゃいますか(;´Д`)
0526デフォルトの名無しさん
2006/10/30(月) 20:08:56[2] 問題文:
問題1@キーボードから姓と名を(別々に)入力して、文字列として結合して入力せよ。
(strcat()を使う?)
問題2@まず4桁の整数を入力する(要素数4の配列にそれぞれの桁を格納)
次に'\l'か十分な数だけ'\n'を出力(画面をスクロールアウトさせてクリアするため)
今度は別の人が4桁の整数を入力、入力に応じて、それぞれの桁の数字について
「位置も数字も当たっていればHを1つ」
「その数字は入っているけど位置が違うときはBを1つ出力」
当たるまで整数の入力を繰り返す。ただし何回かで終了してもよい。
当たったら、それまでの回数を表示。
問題3@4桁の数字を入力⇒1234(1234を入力)
ここで画面をスクロールアウト
他の人が4桁の数字を入力する
1回目:1352 ⇒ 1は場所を含めて正解、2と3は場所が違う。よって「H1B2」と出力
2回目:1235 ⇒ 1と2と3は場所を含めて正解。よって「H3B0」と出力
このようにH4B0になるまで繰り返させる(5回目で正解を表示して終了させる)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 無期限
0529デフォルトの名無しさん
2006/10/30(月) 22:31:58なお、許容誤差をε=10^-7とし、区間幅がεを下回ったところで計算を打ち切ること。
(for文とwhile文を使用すること)
0530デフォルトの名無しさん
2006/10/30(月) 22:45:24画面をスクロールアウトさせるのに必要な改行の数を書け。
>>529
>>1読め。
0532529
2006/10/30(月) 23:13:09[2] 問題文(含コード&リンク):10分法のアルゴリズムにより、x^3-10=0の非線形方程式の解を求めるプログラムを作成せよ。
なお、許容誤差をε=10^-7とし、区間幅がεを下回ったところで計算を打ち切ること。
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:borland 5.5
[3.3] 言語: C
[4] 期限: [無期限]
[5] その他の制限:for文とwhile文を使用すること
0533デフォルトの名無しさん
2006/10/30(月) 23:25:16#include<stdio.h>
int main(void)
{
const double eps = 10e-7;
double cube = 10.0;
double ans = 0.0;
double level = 1.0;
int i;
while(level>=eps){
for(i=1; i<=10; i++){
double temp = ans+i*level;
if(temp*temp*temp>cube){
ans += (i-1)*level;
level *= 0.1;
break;
}
}
}
printf("x = %f\n",ans);
return 0;
}
0534デフォルトの名無しさん
2006/10/30(月) 23:58:23[2] 問題文(含コード&リンク):
�@→http://proxy.f3.ymdb.yahoofs.jp/bc/7ac5f273/bc/Lesson3-1.doc?bc6hhRFB7BACroo3
�A→http://proxy.f3.ymdb.yahoofs.jp/bc/7ac5f273/bc/Lesson3-2.doc?bc6hhRFBRi2HG_cD
[3] 環境
[3.1] OS:Windows(XP)Home SP2
[3.2] コンパイラ名とバージョン:Visual Stdio.NET2005(C++)
[3.3] 言語:C言語
[4] 期限: [2006年11月1日のAM8:30まで]
[5] その他の制限:無し。�A>�@で優先。
0535デフォルトの名無しさん
2006/10/31(火) 00:05:16[2] 問題文(含コード&リンク):
「座席予約システム」を二種類のADTを用いて作成する。「座席予約システム」は(ある車両)の10人分の座席の予約を行うプログラムである。
次の七種類の命令を受け付ける。
a:予約を追加する
l:現在の予約状況を表示する
d:指定した座席番号の予約を取り消す
s:指定した予約社名の座席番号を表示する
e:指定した予約者名の予約を取り消す
h:ヘルプを表示する
q:終了する
一つ目のADTはseat_tで、個々の座席をあらわす。
typedef struct{
int occup;
char name[100];
}seat_t
seat_tに対して次の四つの操作を準備する。
1:void makeSeatEmpty(seat_t *sp)
spがさす座席を空席にする。座席がもともと空席の場合は何もしない
2:void makeSeatOccup(seat_t *sp, const char *nm)
spがさす座席をnmの名前で予約する。座席にすでに予約が入っている場合は、それまでの予約者名は消され、新しい予約者名nmを登録する
3:int isSeatEmpty(seat_t st)
座席stが空席かどうかを問い合わせる。空席なら1、予約済みなら0を返す。
4:const char *getSeatName(const seat_t *sp)
spが刺す座席の予約者名を返す
0536535の続き
2006/10/31(火) 00:07:08typedef struct{
int numres;
seat_t seat[10];
}
car_tに対する操作は次の四つ
1:void makeCarEmpty(car_t *cp)
cpでさす車両全体を空席にする
2:void dispCarStatus(car_t cr)
車両crの予約状況を表示する
3:int appendRsv(car_t *cp, const char *nm)
cpでさす車両に名前nmで予約を追加し、予約した座席番号を返す
4:void cancelRsv(car_t *cp, int sn)
cpでさす車両のsn番の座席の予約を取り消す
5:int searchRsv(car_t cr, const char *nm)
車両cr、予約者名nmの座席番号を返す。ただし見つからない場合は-1を返す。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: kterm
[3.3] 言語:C
[4] 期限: 2006年11月1日正午
0537デフォルトの名無しさん
2006/10/31(火) 00:20:39ADTって何だよ?
0538デフォルトの名無しさん
2006/10/31(火) 00:32:53階層的ADTってやつみたいです
0539デフォルトの名無しさん
2006/10/31(火) 00:37:49か?
0540デフォルトの名無しさん
2006/10/31(火) 00:39:34たぶん、ADTは構造体のことだと思います。
0541デフォルトの名無しさん
2006/10/31(火) 01:18:36理科大だな
0542デフォルトの名無しさん
2006/10/31(火) 10:58:21[2] 問題文:
問題 マウスの左ボタン右ボタンを押したときの左右それぞれの反応時間を
保存するプログラム
[3] 環境
[3.1] OS: WindowsXP
[3.2] C++ 6.0
[4] 期限: 11月4日
よろしくお願いします
0543デフォルトの名無しさん
2006/10/31(火) 12:19:41C++ 6.0?
0544デフォルトの名無しさん
2006/10/31(火) 12:31:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2855.c
0545544
2006/10/31(火) 13:11:39http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2856.c
0546デフォルトの名無しさん
2006/10/31(火) 13:31:52[2] 問題文: >>1のロダが使えなかったのでこちらに書きます
#include <stdio.h>
#include <stdio.h>
#include <math.h>
#define PI 3.14159
#define HABA 40
int main(void)
{
int a,b,c;
double i,s,t;
printf(" ?p?x ");
for(a=0; a<HABA; a++){
if(a==HABA/2){
printf("+");
}
else{
printf("-");
}
}
printf("\n");
for (t=0.0; t<=360.0; t+=18.0){
0547542
2006/10/31(火) 13:52:080548デフォルトの名無しさん
2006/10/31(火) 15:02:37クラスAからfriend指定したクラスBがあるとします(BからAのprivateメンバアクセスを許す)
この時、Bの派生クラスからもクラスAのprivateメンバにアクセス可能でしょうか?
0549デフォルトの名無しさん
2006/10/31(火) 15:12:000550デフォルトの名無しさん
2006/10/31(火) 15:55:00反応時間って何の反応時間?
もぐら叩きみたいな感じにするのか?
それとも、「マウス右クリック」→「メニュー」 がでるまでの時間とか?
マウスボタンを押した時刻を記録していくのか?
さっぱり分からん
0551デフォルトの名無しさん
2006/10/31(火) 16:04:4810分法について解説plz
解説してあるサイトの URL でもおk
0552デフォルトの名無しさん
2006/10/31(火) 16:08:03「サーバが見つかりませんでした」と出て問題文が見えないよ
0553デフォルトの名無しさん
2006/10/31(火) 16:11:46>>533 で答え出てる
0554デフォルトの名無しさん
2006/10/31(火) 17:33:27http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2857.c
0555デフォルトの名無しさん
2006/10/31(火) 17:41:52[2]
the shortest remaining time next (SRTN) job scheduling algorithm.
入力: 0 6
1 1
2 5
2 6
3 2
から以下の実行結果を出力するプログラムのrun_srtn関数を作成しプログラムを完成させよ。
*出力結果
Job 0 Arrival Time 0 Service Time 6
Job 1 Arrival Time 1 Service Time 1
Job 2 Arrival Time 3 Service Time 5
Job 3 Arrival Time 5 Service Time 6
Job 4 Arrival Time 8 Service Time 2
--- Scheduling Statistics ---
JOB # Arr Fin Svc TA
0 0 7 6 7
1 1 2 1 1
2 3 14 5 11
3 5 20 6 15
4 8 10 2 2
*{arr= arrival time, Fin = finish time,Svc =service time,TA= turn around time(finish-arrival_time)}
0556デフォルトの名無しさん
2006/10/31(火) 17:45:05typedef struct job {
int job_id; /* job id */
int arr_time; /* arrival time */
int srv_time; /* service time */
int rem_time; /* remaining time */
int finish; /* finish time */
int turn_around; /* turn around time */
struct job *prev, *next; /* pointer to the previous and next jobs in
the list */
} job;
job *front, *tail; /* front and tail pointers to the job queue */
void append_job();
void remove_job();
void run_srtn();
0557デフォルトの名無しさん
2006/10/31(火) 17:46:59char line[80];
int job_id =0;
int cur_time = 0;
int dat, svt;
job *tmp_job;
/* read delta arrival time and service time from stdin.
Allocate a memory chunk for a 'job' struct, which is pointed to by
tmp_job. Set arr_time and srv_time using the data read from stdin */
while(scanf("%d %d",&dat, &svt) != EOF){
tmp_job = malloc(sizeof(job));
tmp_job->job_id = job_id++;
tmp_job->arr_time = (cur_time + dat);
tmp_job->srv_time = svt;
/* initialized other fields of the job here */
cur_time += dat; /* advance the clock */
printf("Job %d Arrival Time %d Service Time %d\n", tmp_job->job_id,
tmp_job->arr_time, tmp_job->srv_time);
/* append the created job at the end of the list
append_job(tmp_job);*/
}
/* set finish, turn_around for each job in the queue,
and then print the job statistics*/
run_srtn();
/*use the following printf statements to write out the job scheduling
result.*/
printf("--- Scheduling Statistics ---\nJOB #\tArr\tFin\tSvc\t TA\tNTA \n");
printf("%3d\t %3d\t %3d\t %3d\t %3d\n",tmp_job->job_id,tmp_job->arr_time,tmp_job->finish,tmp_job->srv_time,tmp_job->turn_around);
}
0558デフォルトの名無しさん
2006/10/31(火) 17:48:40if( front == NULL ){
front = tmp_job;
tail = tmp_job;
}
else{
tail->next = tmp_job;
tmp_job->prev = tail;
tail = tmp_job;
}
}
void remove_job( job *tmp_job ){
job *l = tmp_job->prev, *n = tmp_job->next;
if( tmp_job == front ){
front = tmp_job->next;
front->prev = NULL;
}
else if( tmp_job == tail ){
tail = tmp_job->prev;
tail->next = NULL;
}
else{
l->next = n;
n->prev = l;
}
free( tmp_job );
}
void run_srtn(void){
}
0559デフォルトの名無しさん
2006/10/31(火) 17:49:57[3.1] OS:Unix
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限:今週中
連続カキコ失礼しました。よろしくお願いします。
0560デフォルトの名無しさん
2006/10/31(火) 18:04:59マウスボタンを押したときの時刻じゃないかなと勝手な想像妊娠
0561デフォルトの名無しさん
2006/10/31(火) 18:05:03void append_job( job *tmp_job )
void remove_job( job *tmp_job )
のバグは放っておいておk?仕様?っていうかバグ取りしろってか!
0562デフォルトの名無しさん
2006/10/31(火) 20:13:39バグもあるんですか・・・。
run_srtn関数だけじゃなくプログラム全体を修正する問題みたいです
0563デフォルトの名無しさん
2006/10/31(火) 20:39:010564542
2006/10/31(火) 20:52:41課題は 部屋に3台のスピーカーが左、中、右と配置されています
音は3回出ますが、
真中のスピーカーから2回音が鳴り、3回目で左右どちらか
から音が鳴ります もし左から音がすれば、マウス左ボタンを
右の音なら右ボタンを押します この時、3番目の音と
マウスを押したときの反応時間を出す課題です
どなたか分かりますか? おそらく、プロシージャーを
変えると出来る?と思うのですが。。。よろしくお願いします
0565デフォルトの名無しさん
2006/10/31(火) 21:05:54stringのコンストラクタにcharだけを受け取るものがある。
explicitは付いていないのでキャスト演算子も可。
0566デフォルトの名無しさん
2006/10/31(火) 21:11:14音を出す制御は必要無い?もし必要なら適当なダミーの関数いれたほうがいい?
それともマウスボタンをクリックした時刻を記録するだけでおk?どっち?
例.
enum{SPEAKER_CENTER, SPEAKER_RIGHT, SPEAKER_LEFT};
sound(SPEAKER_CENTER);
みたいなのをいれるか?ってこと
クリックのイベントを取るのは適当なウインドウを作って、ウインドウでのイベント取得でいいの?
それともAPIフックして、PCで他の作業中(ワープロ打ちながらとか)であっても反応しないとダメ?
専用のウインドウを作るとしたら全画面?サイズ指定あり?
>>564 の書き方からすると、元になるソースコードがありそうだけどアップロードできない?
0567デフォルトの名無しさん
2006/10/31(火) 21:13:14クラスじゃなくて、stringか何かのメソッドでありますでしょうか?
0568デフォルトの名無しさん
2006/10/31(火) 21:14:210569デフォルトの名無しさん
2006/10/31(火) 21:22:15>>565 氏が書いてあるけど、コンストラクタじゃだめなの?
0570デフォルトの名無しさん
2006/10/31(火) 21:36:36要求定義を聞き出すのって難しい・・・
0571デフォルトの名無しさん
2006/10/31(火) 21:49:27よろしくお願いします。
0572デフォルトの名無しさん
2006/10/31(火) 21:50:58>>1
0573デフォルトの名無しさん
2006/10/31(火) 22:00:15意味がわからんので適当に超解釈を入れて書いた。
もし、超解釈が希望と違ってもめんどいからなおさん。
#include<vector>
#include<iostream>
#include<algorithm>
#include<iterator>
using namespace std;
struct Data{
string name,addr,tel;
int age;
};
istream&operator>>(istream&cin,Data&d){return cin>>d.name>>d.addr>>d.tel>>d.age;}
ostream&operator<<(ostream&cout,const Data&d){return cout<<d.name<<" "<<d.addr<<" "<<d.tel<<" "<<d.age;}
int main(){
vector<Data>a;
copy(istream_iterator<Data>(cin),istream_iterator<Data>(),back_inserter(a));
copy(a.begin(),a.end(),ostream_iterator<Data>(cout,"\n"));
}
0574デフォルトの名無しさん
2006/10/31(火) 22:01:24[2] 問題文(含コード&リンク):STLを用いて、名前、年齢、住所、電話番号を入力、格納、出力ができるプログラムを作れ。(STLは何をしようしてもよい)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: VC++EE
[3.3] 言語: C++
[4] 期限: 来週の月曜日
[5] その他の制限: STLはvector, list の基本的なことをならいました。クラスは使ってお願いします。
0575デフォルトの名無しさん
2006/10/31(火) 22:29:55入力、格納、出力だけでいいのかな。
iostream 使ったの久しぶりだ…
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2858.txt
0576デフォルトの名無しさん
2006/10/31(火) 23:09:10ありがとうございます!!
これで宿題は完成しました。
感謝☆
0577542
2006/10/31(火) 23:14:13音を出す制御は完成しています。 適当なダミー関数は入れても大丈夫です
三番目の音を基準に0とし、マウスのボタンが押されるまでのわずかな時間です.
>enum{SPEAKER_CENTER, SPEAKER_RIGHT, SPEAKER_LEFT};
>sound(SPEAKER_CENTER);
>クリックのイベントを取るのは適当なウインドウを作って、ウインドウでのイベント取得でいいの?
はい、それで良いです。
>専用のウインドウを作るとしたら全画面?サイズ指定あり?
特に指定はありません。全画面で無くても良いです。マウスでの反応時間
を取っている間はPCは使われない事とします。
実はほぼプログラムは出来ていますが、アップロードのやり方が分かりません
全文載せようとしても文字数オーバーになってしまいます。どうしたらよろしいでしょうか?
説明不足ですがよろしくお願いします Eメールアドレス 載せときます
0578デフォルトの名無しさん
2006/10/31(火) 23:56:35>>574
横スレですが、勉強になりました。
STLが、何なのか分からなかったので一から調べてみました。
コンテナの種類には、複数あってそれぞれに適したクラスが既に用意されているのね。
C++って結構便利なのねぇ。
0579デフォルトの名無しさん
2006/11/01(水) 00:37:08[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2859.txt の実行結果を簡略化
もしくは、別の入力で同様の結果を出す。
[3] 環境
[3.1] OS:MacOSX
[3.2] Xcode
[3.3] 言語: C言語
[4] 期限: 11月1日正午まで
[5] その他の制限: ポインタまでは習っています。それまでの範囲でお願いします。
よろしくお願いします。
0580デフォルトの名無しさん
2006/11/01(水) 01:04:34インデントが汚い。コンパイルすら通らない。コードから何をしたいのか掴むのは不可能。
まずこのコードはどんな動作をして欲しいのか日本語で説明したほうが良い。
0581デフォルトの名無しさん
2006/11/01(水) 01:19:44失礼しました。
問題は0〜360度を18度ずつ進むSinカーブを
アスタリスクで縦に表示するプログラムを作成するものです。
説明下手なので分りにくければ、Sinカーブをアスタリスクで縦に表示するプログラムを作成すると考えて下さい。
よろしくお願いします。
0582デフォルトの名無しさん
2006/11/01(水) 01:20:110583579
2006/11/01(水) 01:31:46プリントをうpできる環境も無いし・・・
大人しく諦めます、お手数お掛けしました。
0584582
2006/11/01(水) 01:36:10ほいこれ・・・ってもういないか。
#include<stdio.h>
#include<math.h>
#define PI 3.14159
#define HABA 40
int main(void)
{
int i, t, x;
char line[HABA + 1];
line[HABA] = '\0';
for (i = 0; i < HABA; ++i)
line[i] = '-';
line[HABA/2] = '+';
puts(line);
for (t = 0; t < 360; t += 18) {
for (i = 0; i < HABA; ++i)
line[i] = ' ';
line[HABA/2] = '|';
x = (int)(HABA/2 * sin(PI * t / 180)) + HABA/2;
line[x] = '*';
puts(line);
}
return 0;
}
0585デフォルトの名無しさん
2006/11/01(水) 02:10:42http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2862.cpp
#include のあたりだけ C++ の表現だけど全然 C++ の意味がない orz
適当に書きなおしてね
0586デフォルトの名無しさん
2006/11/01(水) 04:10:02*
***
*****
******
*****
***
*
***
****
*****
****
***
*
0587デフォルトの名無しさん
2006/11/01(水) 07:09:18[2] 問題文(含コード&リンク):
【与えられた漸化式に基づいて数列の第0項から第N項までの値を表示する。】
【A0 = A1 = 1, An = An-1+An-2 (n≧2のとき) 】
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:よくわかりませんが、Visual Studio2005のC++(Win32)でやってます。
[3.3] 言語:◆ C++ ◆
[4] 期限:11月3日金曜日
[5] その他の制限:どこまで習っているか:習い始めて演習の講義を5時限分経験のみ
よくわかりませんが、
#include <iostream>
using namespace std; から始まるようにと言われています。
0588デフォルトの名無しさん
2006/11/01(水) 07:17:38using namespace std;
int main() {
int N = 10;
int Ax = 1, Ay = 1;
for (int i = 0; i <= N; ++i) {
// Ax = A[i], Ay = A[i+1]
cout << "A[" << i << "] = " << Ax << endl;
int temp = Ax + Ay;
Ax = Ay;
Ay = temp;
}
}
0589デフォルトの名無しさん
2006/11/01(水) 07:30:42#include<iostream>
using namespace std;
#include<vector>
#include<numeric>
#include<functional>
#include<iterator>
#include<algorithm>
template<typename It>It next (It it){return ++it;}
template<typename It>It prior(It it){return --it;}
int main(){
cout << "n? ";int n;cin>>n;
vector<int>a(n+1);
a.front() = 1;
adjacent_difference(a.begin(),prior(a.end()),next(a.begin()),plus<int>());
copy(a.begin(),a.end(),ostream_iterator<int>(cout," "));
cout << endl;
}
0590デフォルトの名無しさん
2006/11/01(水) 08:05:52// A_i
// A_{i-1}
// A_{i-2}
// 添字
// (1) 第0項と第1項の値を求めて表示する。
// (2) 添字iを2から上限値まで1ずつ増やしながら以下の処理を繰り返す。
// (2-1) A_iの値を求めて表示する。
// (2-2) A_{i-1}の値をA_{i-2}に移す。
// (2-3) A_iの値をA_{i-1}に移す。
っていうふうにお願いできますか?
(途中に足りない所があれば自分で追加するようにと言われてます)
0591デフォルトの名無しさん
2006/11/01(水) 08:21:51条件の後だしウゼーーーーーーー
#include<iostream>
#include<boost/numeric/ublas/vector.hpp>
#include<boost/numeric/ublas/matrix.hpp>
#include<boost/numeric/ublas/io.hpp>
using std::cout;using std::cin;using std::endl;
using namespace boost::numeric::ublas;
int main(){
int n=10;
matrix<int>b(2,2);b(0,0) = 0;b(0,1) = b(1,0) = b(1,1) = 1;
matrix<int>c(b);
// A_i
// A_{i-1}
// A_{i-2}
vector<int>a(2);
int i;// 添字
// (1) 第0項と第1項の値を求めて表示する。
a[0]=1;
a[1]=1;
cout << a[0] << endl;
cout << a[1] << endl;
// (2) 添字iを2から上限値まで1ずつ増やしながら以下の処理を繰り返す。
for(i=2;i<=n;++i){
// (2-1) A_iの値を求めて表示する。
// (2-2) A_{i-1}の値をA_{i-2}に移す。
// (2-3) A_iの値をA_{i-1}に移す。
a = prod(a,b);
cout << a[1] << endl;
}
}
0592デフォルトの名無しさん
2006/11/01(水) 08:37:30ありがとうございました。
0593デフォルトの名無しさん
2006/11/01(水) 08:41:130594デフォルトの名無しさん
2006/11/01(水) 09:29:08まあいいか
0595デフォルトの名無しさん
2006/11/01(水) 09:59:110596デフォルトの名無しさん
2006/11/01(水) 11:23:17[2] 問題文(含コード&リンク):waveファイルのヘッダー情報を取得して、表示する。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:
[3.3] 言語: Microsoft Visual C++ 2005
[4] 期限: 今週中
[5] その他の制限: バイナリで読み込むのだが、そのバイナリの値を表示する必要はないとのこと。
表示するヘッダー情報は、ファイル容量・フォーマット(PCMとか)・チャンネル数・周波数・ビット数です。
0597デフォルトの名無しさん
2006/11/01(水) 11:24:32ダイアログベースMFCです。
0598PIC
2006/11/01(水) 13:22:000599デフォルトの名無しさん
2006/11/01(水) 14:24:58できる*かも*しれない。
メモリは4kまでとか、intは16bitとか色々な制限あると思うんだが…
0600デフォルトの名無しさん
2006/11/01(水) 15:59:23その手の問題は解答がつかない可能性が高いです。
なんせ、ここの人等は
文字列を逆順にしたり、四則演算程度の算数
等、なんの役にも立たないプログラムなら得意ですからねw
0601デフォルトの名無しさん
2006/11/01(水) 16:19:380602デフォルトの名無しさん
2006/11/01(水) 16:23:380603デフォルトの名無しさん
2006/11/01(水) 16:26:090604デフォルトの名無しさん
2006/11/01(水) 17:16:10fread(&wave_info, sizeof(wave_info), 1, fp);
SetDlgItemInt(dlgWnd, dlgItem, wave_info.???, TRUE)
でできるじゃん
Hit&Blow の方が余程面倒だよ
0605291,393 卒論
2006/11/01(水) 17:58:16その節はありがとうございました。
以前の入力データは問題なく行えました。追加で、このようなデータもあるのですが
以下の条件で変更を行いたいのですが。
C-01-0(削除)
001 152.473 179.709 -0.22 -0.12(削除)
002 152.484 179.823 -0.47 -0.36(削除)
002100 -97217.32 111872.02 529.36(先頭が0は削除)
400100 -99483.17 110373.47 576.80
160100 -96582.70 108696.32 364.00
160200 -98327.02 111334.33 311.60
002 152.484 179.823 -0.47 -0.36(削除)
003 152.477 179.754 -0.11 0.04(削除)
002100 -97217.32 111872.02 529.36(先頭0は削除)
400200 -97778.83 110554.77 427.08
160100 -96582.70 108696.32 364.00(数字重複は削除)
/EOF
↓
400100 -99483.17 110373.47 576.80
160100 -96582.70 108696.32 364.00
160200 -98327.02 111334.33 311.60
400200 -97778.83 110554.77 427.08
このようなファイルを作成したのちに、>391 の名前変更ルールでリネームを行った
ファイルを出力したいのですが。
すれ違いですが、すみませんがよろしくお願いします。
0606デフォルトの名無しさん
2006/11/01(水) 18:28:16awk または gawk で
/^[1-9]+.*$/{
if(!($1 in already_print)){
already_print[$1]=1;
}
}
例)a.awkの内容は上記のプログラム通り。余計な改行は入れないこと(動作が変わるので)
gawk -f a.awk a.txt > b.txt
0607デフォルトの名無しさん
2006/11/01(水) 18:33:54その程度のデータ処理なら、>>606みたいにUNIXコマンドを使って処理した方が楽だよ。
0608デフォルトの名無しさん
2006/11/01(水) 18:45:42gawk for win32 http://www.vector.co.jp/soft/win95/util/se015007.html
0609291,393 卒論
2006/11/01(水) 19:04:21のようなプログラムで処理ということはできませんでしょうか?
0610579
2006/11/01(水) 19:14:01そして本当に申し訳ないのですが、>>584さんの作ってくれた
プログラムの実行結果の左側に
コレを↓足していただけないでしょうか?条件の後出しになってしまい申し訳ありません。
角度
0:
18:
36:
54:
72:
90:
108:
126:
144:
162:
180:
198:
216:
234:
252:
270:
288:
306:
324:
342:
360:
0611デフォルトの名無しさん
2006/11/01(水) 19:17:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2863.c
使い方
./a.exe < 入力ファイル > 出力ファイル
例
./a.exe < a.txt > b.txt
なんで C,C++ にこだわるのやら…
0612デフォルトの名無しさん
2006/11/01(水) 19:19:53puts(line);
↓
printf("%3d:%s\n", t, line);
0613579
2006/11/01(水) 19:51:36実行してみたのですが、縦の数値が360まで表示されず
342で止まってしまいます・・・
0614291,393 卒論
2006/11/01(水) 19:54:07ありがとうございます。
すみません。。
0615291,393 卒論
2006/11/01(水) 20:01:03このようなエラーが出る原因はなんでしょうか?
error C2440: '=' : 'void *' から 'struct tag_print_data *' に変換することはできません。(新しい動作 ; ヘルプを参照)
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
あと質問なのですが、>606は同じ結果になるということなんでしょうか?
0616デフォルトの名無しさん
2006/11/01(水) 20:02:45new_member=malloc(sizeof(print_data));
ここでエラーが出ているようなのですが。。
0617デフォルトの名無しさん
2006/11/01(水) 20:03:470618デフォルトの名無しさん
2006/11/01(水) 20:05:21new_member=malloc(sizeof(print_data));
↓
new_member=(print_data*)malloc(sizeof(print_data));
0619デフォルトの名無しさん
2006/11/01(水) 20:09:42宿題というか宿題の一部みたいなもので・・・よろしくお願いします。
0620デフォルトの名無しさん
2006/11/01(水) 20:14:41d[0] および d[1] が 1 か 0 の値しか取らないのであれば、大丈夫。
あとは自分で試せば分かる
0621291,393 卒論
2006/11/01(水) 20:16:33ありがとうございます
0622デフォルトの名無しさん
2006/11/01(水) 20:16:45想定する値にもよるけど。多分無理。
!(~-d[0]|~-d[1]|~-d[2])なら可
0623デフォルトの名無しさん
2006/11/01(水) 20:20:59なるほど。1以外の値もとるんでこういう風にはかけないんですね。てかこういう書き方自体しないみたいですね。
>>622
~ と − の意味がわかりません><
0624291,393 卒論
2006/11/01(水) 20:38:03で作成された↓のデータ。>391と同じ要領でリーネームを行いたい場合、
>392のどこを変えればよいのでしょうか?
400100 -99483.17 110373.47 576.80
160100 -96582.70 108696.32 364.00
160200 -98327.02 111334.33 311.60
160300 -98881.64 112843.92 411.20
160400 -98744.69 112829.23 426.60
400200 -97778.83 110554.77 427.08
0625291,393 卒論
2006/11/01(水) 20:42:03今回は入力データが↓のように変わっていますが、ほかは391と同じ条件です
001(←この行なし)
400100 -99483.17 110373.47 576.80(ここが3列)
160100 -96582.70 108696.32 364.00
160200 -98327.02 111334.33 311.60
0000((←この行なし)
0626デフォルトの名無しさん
2006/11/01(水) 20:57:09char data[2][BUF_SIZE];
↓
char data[3][BUF_SIZE];
それと
ret=sscanf(one_line, "%[0-9] %[-.0-9] %[-.0-9]", left_code, data[0], data[1]);
if(ret==2 || ret==3)
↓
ret=sscanf(one_line, "%[0-9] %s %s %s", left_code, data[0], data[1], data[2]);
if(ret>=2 && ret<=4)
オレってスルー力皆無だな
0627デフォルトの名無しさん
2006/11/01(水) 21:04:460628デフォルトの名無しさん
2006/11/01(水) 21:29:50かなりできる人が暇つぶしでもしてるんだろうな…
0629デフォルトの名無しさん
2006/11/01(水) 21:57:00ここで宿題訊くような奴は端からマになろうなんて思ってないから
一時しのぎで人のを写しても別に問題ないのだろうな。
0630デフォルトの名無しさん
2006/11/01(水) 21:57:35ありがとうございました
0631デフォルトの名無しさん
2006/11/01(水) 22:28:52[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2864.zip
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C++
[4] 期限: 11月2日16:00まで
[5] その他の制限:なし(ソースファイルのView.cppを使っています)
0632デフォルトの名無しさん
2006/11/01(水) 22:33:05view.cppって何?
VBAでやれば?
0633デフォルトの名無しさん
2006/11/01(水) 22:34:54[2] 問題文(含コード&リンク):
レポート課題:フェルマーの予想
フェルマーは、x^n+y^n=z^n (x,y,z,n:整数)においてn≧3に対して、
この式を満たすものはないと断言した。これはつい最近になって証明された。
n=3に対して、x,y,z≦100の範囲内でこれに対する反例がないか確認せよ。
ヒント:
一見すると、3重ループになるようであるが、
うまく工夫して2重ループにせよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Microsoft Visual C++ 6.0
[3.3] 言語: C++
[4] 期限: 2006年11月7日まで
[5] その他の制限: 基礎的な知識で出来るプログラミングでおねがいします。
0634デフォルトの名無しさん
2006/11/01(水) 23:05:10#include<stdio.h>
/* 1≦x≦y≦z≦100 */
int main(void){
int x, y, z;
long data[100+1];
for(x=0;x<=100;x++)
data[x]=x*x*x;
for(z=1;z<=100;z++){
y=z;
for(x=1;x<=z;x++){
if(data[z]-data[x]<data[y]){
y--;
if(y<x) break;
}
if(data[z]-data[x]==data[y])
printf("反例 x=%d y=%d z=%d\n", x, y, z);
}
}
return 0;
}
0635デフォルトの名無しさん
2006/11/01(水) 23:07:100636デフォルトの名無しさん
2006/11/01(水) 23:10:44>>634
0637デフォルトの名無しさん
2006/11/01(水) 23:14:36初歩的な質問ですいません。
0638デフォルトの名無しさん
2006/11/01(水) 23:15:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2865.zip
授業でVC2005が使えるのか。うらやますぃ。
うちの大学は予算が少ないからなぁ。
0639デフォルトの名無しさん
2006/11/01(水) 23:16:52去年提出したソースかも。
0640デフォルトの名無しさん
2006/11/01(水) 23:25:18内の大学はBCB3だった
6〜7年前の話
0641デフォルトの名無しさん
2006/11/01(水) 23:31:08できたら解説をお願いします。
0642デフォルトの名無しさん
2006/11/01(水) 23:32:370643デフォルトの名無しさん
2006/11/01(水) 23:40:06すいません。
0644デフォルトの名無しさん
2006/11/01(水) 23:49:17今後、後出ししません。
お願いします<m(__)m>
0645デフォルトの名無しさん
2006/11/01(水) 23:49:24x≦y の時
(x+1)^3-x^3 ≦ (y+1)^3-y^3
なので
x←x+1 の時、y←y 又は y←y-1 のどちらかで追従できる
0646デフォルトの名無しさん
2006/11/01(水) 23:51:00ありがとうございます
プログラミング能力が凄いですね
感謝です。
0647デフォルトの名無しさん
2006/11/02(木) 00:39:13[2] 問題文(含コード&リンク):
数値を順番に読み込んで、計算結果を返す次のどちらかのプログラムを書け。
まず係数 a, b を標準入力より読みとる。次に変数 x の値を読み込んで y=a*x+b を計算して表示する。
この x の読み込みと y の表示を、x に数値以外が入力されるまで繰り返す。
x と y の数値の対を読み込むことを繰り返す。
数値以外が入力されると最小二乗法による回帰直線 y=a*x+b の係数 a, b を計算して表示する。
注) 直線回帰係数 a, b は、実験指導書はじめの誤差論の式(6.5)で、c=0のときの上2つの式で、
データ個数と x, y, x2, y2, xy の総和から求めることができる。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
期限: 2006年11月9日まで]
0648デフォルトの名無しさん
2006/11/02(木) 00:50:19#include<stdio.h>
#define BUF_SIZE 1024
int main(void)
{
double a, b, x, y;
char buf[BUF_SIZE];
int scanf_ret;
printf("Input a, b:");
scanf("%lf %lf", &a, &b);
while(1)
{
printf("Input x:");
scanf("%s", buf);
scanf_ret=sscanf(buf, "%lf", &x);
if(scanf_ret!=1)
break;
y=a*x+b;
printf("y=a*x+b y=%f x=%f a=%f b=%f\n", y, x, a, b);
}
return 0;
}
0649デフォルトの名無しさん
2006/11/02(木) 01:06:570650デフォルトの名無しさん
2006/11/02(木) 01:17:190651デフォルトの名無しさん
2006/11/02(木) 01:31:25[1] 授業単元:プログラミング
[2] 問題文(
問題1
キーボードから入力した5 件のデータのうち、最大値と最小値を調べ、最後に
表示してください。なお、プログラム作成時は以下の仕様に従ってください。
ファイル名: kadai2.c
【 問題作成時の注意点 】
・キーボードから入力したデータはint 型配列で管理してください。
・データを入力する際にはscanf 関数を利用してください。
・画面にメッセージを表示する際にはprintf 関数を利用してください。
なお、結果表示時は、最大値/最小値となる要素の添字もあわせて
表示してください。また、最大値/最小値が複数ある場合は、
すべての要素を表示してください。
【 実行時のイメージ 】
-----------------------------
data[0] ... 69 ←「...」の後ろはキーボード入力部
data[1] ... 91 ←「...」の後ろはキーボード入力部
data[2] ... 91 ←「...」の後ろはキーボード入力部
data[3] ... 72 ←「...」の後ろはキーボード入力部
data[4] ... 86 ←「...」の後ろはキーボード入力部
Max : data[1] = 91
Max : data[2] = 91
Min : data[0] = 69
-----------------------------
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C++
[4] 期限: ([2006年11月2日17:30まで
[5] その他の制限:なし
0652デフォルトの名無しさん
2006/11/02(木) 01:37:25[1] 授業単元:プログラミング
[2] 問題文(
キーボードから入力したメニュー番号に沿った図形を「*」で表示するプログラムを
作成してください。なお、プログラム作成時は以下の仕様に従ってください。
ファイル名: kadai3.c
【 問題作成時の注意点 】
・メニュー番号と図形の種類は以下の通りとします。なお、キーボードから
入力した値が以下の番号以外の場合、再びメニュー番号を入力するように
してください。
1 三角形
2 四角形
・図形の段数(高さ)は、キーボードから入力してください。なお、キーボード
から入力した数が1 以下の場合、エラーメッセージを表示し、exit 関数で
プログラムを終了してください。
エラーメッセージの例) wrong number
・図形の表示には関数を利用してください。関数のプロトタイプ宣言は以下の
通りとします。
void DrawTriangle(int);
void DrawRectangle(int);
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C++
[4] 期限: ([2006年11月2日17:30まで
[5] その他の制限:なし
0653デフォルトの名無しさん
2006/11/02(木) 01:39:58[1] 授業単元:卒論の一部
[2] 問題文(含コード&リンク):
MFCダイアログベースでピクチャボックスに2値化された画像で、にょろにょろとした線分が一本あってですね、それを最小二乗法を使って一本の直線にしたいんですよ。
http://homepage3.nifty.com/ishidate/vcpp6_19/vcpp6_19.htm
こことか参考にしてるんですけど、ボタンを一つ押すと直線になるようなものを作りたいんですよ。。
[3] 環境
[3.1] OS: WindowsXP
[3.2] VC2005 Pro
[3.3] 言語: C++
[4] 期限: こいつができてないと先に進めないのでできるだけ早いほうが・・・
[5] その他の制限:ピクチャボックスの変数名はm_pictです。
ほんとにお願いします( ・∀・)!先生、卒業がしたいです・・・
0654デフォルトの名無しさん
2006/11/02(木) 01:41:45http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2866.c
0655デフォルトの名無しさん
2006/11/02(木) 01:52:16#include <stdio.h>
#define COUNT 5
int main(void)
{
int data[COUNT];
int min,max;
int i;
/*入力*/
for(i=0; i<COUNT; i++){
printf("data[%d] ... ",i);
scanf("%d",&data[i]);
}
/*最小値と最大値を求める*/
min = max = data[0];
for(i=0; i<COUNT; i++){
if(min>data[i]) min = data[i];
if(max<data[i]) max = data[i];
}
/*最小値と最大値にそれぞれ等しい値を全て表示する*/
for(i=0; i<COUNT; i++){
if(max==data[i]) printf("Max : data[%d] = %d\n",i,data[i]);
}
for(i=0; i<COUNT; i++){
if(min==data[i]) printf("Min : data[%d] = %d\n",i,data[i]);
}
return 0;
}
0656デフォルトの名無しさん
2006/11/02(木) 01:53:49#include<stdio.h>
#define DATA_NUM 5
int main(void){
int data[DATA_NUM];
int maximum, minimum;
int i;
printf("-----------------------------\n");
for(i=0;i<DATA_NUM;i++){
printf("data[%d] ... ", i);
scanf("%d", &data[i]);
if(i==0)
maximum=minimum=data[0];
if(maximum<data[i])
maximum=data[i];
if(minimum>data[i])
minimum=data[i];
}
for(i=0;i<DATA_NUM;i++)
if(data[i]==maximum)
printf("Max : data[%d] = %d\n", i, data[i]);
for(i=0;i<DATA_NUM;i++)
if(data[i]==minimum)
printf("Min : data[%d] = %d\n", i, data[i]);
printf("-----------------------------\n");
return 0;
}
0658デフォルトの名無しさん
2006/11/02(木) 02:08:38#include<stdio.h>
#include<stdlib.h>
int main(void){
int figure, height, i;
while(1){
printf("1 三角形\n2 四角形\n");
scanf("%d", &figure);
if(figure==1 || figure==2) break;
}
printf("図形の段数(高さ)を入力してください :");
scanf("%d", &height);
if(height<=1){
printf("wrong number\n");
exit(1);
}
switch(figure){
case 1:
printf("\n*\n");
for(i=1;i<height-1;i++) printf("*%*s*\n", i-1, "");
for(i=0;i<height;i++) printf("*");
printf("\n");
break;
case 2:
printf("\n**********\n");
for(i=1;i<height-1;i++) printf("* *\n");
printf("**********\n");
break;
}
return 0;
}
0659デフォルトの名無しさん
2006/11/02(木) 02:19:12本当にありがとうございます。実行イメージを下のようにするには
どうすればよいですか?ほんと初心者でわからなくて、、教えてく
ださい、お願いします。
The figure is drawn.
1. Triangle
2. Rectangle
Please input the number ... 1 ←「...」の後ろはキーボード入力部
Please input height ... 5 ←「...」の後ろはキーボード入力部
*
* *
* *
* *
*********
三角形は正三角形のような形で
-----------------------------
(メニューとして「2」、段数として「5」を入力した場合)
*****
* *
* *
* *
*****
0660デフォルトの名無しさん
2006/11/02(木) 02:20:49[2] 問題文:生成した乱数をファイルに出力するプログラムを拡張し2つの乱数を生成し出力するプログラムを作成する。
それらの乱数データを配列に読み込み、その配列の行列の和と積を求め、結果をファイルに出力するプログラムを作成せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:11/3
[5] その他の制限:使えるようであればmalloc()、strtok()を活用するとの事です。
よろしくお願いします。
0661デフォルトの名無しさん
2006/11/02(木) 02:21:09すみません、図形がずれました。
三角形は正三角形
四角形は普通の四角形です。
0662デフォルトの名無しさん
2006/11/02(木) 02:25:36>生成した乱数をファイルに出力するプログラム
とりあえずこれあげないと作れねーだろ
0663658
2006/11/02(木) 02:34:56#include<stdio.h>
#include<stdlib.h>
void DrawTriangle(int height){
int i;
printf("%*s*\n", height-1, "");
for(i=1;i<height-1;i++) printf("%*s*%*s*\n", height-i-1, "", i*2-1, "");
for(i=0;i<height*2-1;i++) printf("*");
printf("\n");
}
void DrawRectangle(int height){
int i;
for(i=0;i<height*2;i++) printf("*");
printf("\n");
for(i=1;i<height-1;i++) printf("*%*s*\n", height*2-2, "");
for(i=0;i<height*2;i++) printf("*");
printf("\n");
}
int main(void){
int figure, height;
while(1){
printf("The figure is drawn.\n1. Triangle\n2. Rectangle\nPlease input the number ... ");
scanf("%d", &figure);
if(figure==1 || figure==2) break;
}
printf("Please input height ... ");
scanf("%d", &height);
if(height<=1){printf("wrong number\n");exit(1);}
if(figure==1) DrawTriangle(height);
else DrawRectangle(height);
return 0;
}
0664デフォルトの名無しさん
2006/11/02(木) 02:39:38>乱数データを配列に読み込み、その配列の行列の和と積を求め、
配列の行列???
0665デフォルトの名無しさん
2006/11/02(木) 02:43:14本当にありがとうございました!!これで提出に間に合います。
0666デフォルトの名無しさん
2006/11/02(木) 02:46:00>>654 で回帰直線の求め方は分かるんじゃないかな
なんで VC 多いんだろう。参加できねーよ
makefile 〜.rc 〜.cpp
でうpしても使い方分かってくれなさそうだし… orz
0667660
2006/11/02(木) 03:03:04#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i;
time_t current;
FILE *myFile;
myFile = fopen("random.dat","w");
if(myFile==NULL){
return 1;
}
srand((unsigned int)time(& current));
for (i=0; i<10; i++){
fprintf(myFile,"%3d\n",rand()/%10+1);
}
fclose(myFile);
fprintf(stderr,"done\n");
return 0;
}
問題文そのまま書いたんですけど・・・多分配列の行列っていうのは乱数を読み込ませた配列の値を使って行列計算をしろって
ことだと思うんですけど・・・どうでしょうか?
0668デフォルトの名無しさん
2006/11/02(木) 04:36:47へへへ、ダンナ。そういうことができないからここで聞かせてもらってるんでゲスぜ。
先生方が思っている以上にオイラの能力はありやせんぜ。
どなたか >>653 を作成してくれませんか?ボタンクリックのとこだけでいいんですよ( ;・∀・)
0669デフォルトの名無しさん
2006/11/02(木) 04:54:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2867.zip
作ってから気付いたんだが、二値化画像からデータを取るんだよね?
これだとクリックしてプロットした点をデータとして使うからちょっと感じが違うんだけども。
0670デフォルトの名無しさん
2006/11/02(木) 09:32:44C++ではなく、Cでウィンアプリを作れと言われたのですが、
これはMFCっていうのは使ってもいいのでしょうか?
あと、開発環境はVSでもおkなんでしょうか??
しかも、CでDB接続とかもできるんでしょうか???
CとC++の情報を切り離せずに混乱しております。
助けて!
0671デフォルトの名無しさん
2006/11/02(木) 09:48:31猫でもわかるのサイトか本みんさい
全部C言語だから。
あと、MFCはAPIをラップしたクラスだからC++になります。
猫でもの本とか買って、適当に載ってるソースコピペして
いじったらいいじゃな〜い。
0672デフォルトの名無しさん
2006/11/02(木) 10:38:13助かりました!ありがとうございました!!
0673デフォルトの名無しさん
2006/11/02(木) 11:17:03[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ベッセル関数 (j0() と j1()) の数表を出力する C のプログラムを作り、
その出力結果を Excel でグラフにして、Word 等でレポートを書いて
その中にグラフも挿入して、このWebCTで提出せよ。
作業手順は添付ファイルを参照のこと。
ベッセル関数 J0, J1 は sin, cos と同じようにCの標準関数として用意されているので、
それを呼び出せばよい。ただし borland C compiler には用意されていないようなので、
大学の cygwin あるいは Unix 環境でプログラムを行うこと。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限: 2006年11月15日まで
0674 ◆xQTfY.P6Xs
2006/11/02(木) 11:18:23[2] 問題文(含コード&リンク):n個の整数を入力し、入力した値の中で奇数と偶数の個数を表示せよ
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: borland 2,31
[3.3] 言語: C
[4] 期限: 今日の17時まで
[5] その他の制限: まだ習い始めて間もないです。
#include <stdio.h>
void main(void)
{
int x;
printf("x = ");
scanf("%d",&x);
if(x%2 !=0)
{
printf("\n xは奇数");
}
else{
printf("\n xは偶数");
}
}
これを応用して作れだそうです。
どうかよろしくお願いします
0675デフォルトの名無しさん
2006/11/02(木) 11:19:27Excel を用いて計算結果のグラフを描く
描画データの準備:
CSV ファイル(コンマ区切りファイル)として、C プログラムから計算結果を書き出す。
例えば2つの整数変数、i, n を出力するのならば、プログラム中の書式指定において、
printf("%d, %d\n", i, n);
のようにコンマで区切って出力するように指定する。さらに、このプログラムを実行するとき、
$ ./a > data.csv
というように指定してデータファイルに書き込む。
“>” はリダイレクトと呼ばれる機能であり、この後ろに指定されている data.csv という名
前のファイルに今まで画面に出ていた出力(標準出力)を書き込む。ファイル名はどのようにつけてもかまわないが、
日本語やスペースは使わない方がよい。また拡張子は、Excel で開くために .csv としておくこと。
Excel でグラフを描く:
Windows 上でファイル data.csv を探してクリックすると、Excel が起動してデータが表示される。
描画するデータ範囲を選択して、グラフウイザードを起動する
([挿入(I)]メニューから[グラフ(H)]を選んでもよい)。
グラフウイザードでグラフの種類を選択して実行する。この場合は散布図を選んでいる。
画面にしたがって次へと進み、[完了]をクリックすると、Excelの画面にグラフが挿入される。
Word 文書への貼り付け:
Excel 上のグラフを選択して、[編集]→[コピー] (あるいはCtrl+C )でコピーし、Word などで
[編集]→[貼り付け] (あるいは Ctrl+V) を選ぶと、文書中にグラフが挿入される。
0676デフォルトの名無しさん
2006/11/02(木) 11:27:31どうでもいいがj0,j1はCの標準関数じゃねー
0677デフォルトの名無しさん
2006/11/02(木) 11:28:30[2] 問題文(含コード&リンク):◎見にくくなりそうなので一番下に書きます。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC++ 2005
[3.3] 言語:C++
[4] 期限:明日 11/3
[5] その他の制限: 標準入出力ストリームで、
整数除算による商の計算表(下記の例を参照)を表示する.
÷ | 除数
-------+ 1 2 3 4 5 6 7 8 9
被除数 +--------------------------------------------
1 | 1 0 0 0 0 0 0 0 0
2 | 2 1 0 0 0 0 0 0 0
3 | 3 1 1 0 0 0 0 0 0
4 | 4 2 1 1 0 0 0 0 0
5 | 5 2 1 1 1 0 0 0 0
6 | 6 3 2 1 1 1 0 0 0
7 | 7 3 2 1 1 1 1 0 0
8 | 8 4 2 2 1 1 1 1 0
9 | 9 4 3 2 1 1 1 1 1
これを出力するようなプログラムを教えてください。
0678デフォルトの名無しさん
2006/11/02(木) 11:29:220679デフォルトの名無しさん
2006/11/02(木) 11:30:32-------+ 1 2 3 4 5 6 7 8 9
被除数 +--------------------------------------------
1 | 1 0 0 0 0 0 0 0 0
2 | 2 1 0 0 0 0 0 0 0
3 | 3 1 1 0 0 0 0 0 0
4 | 4 2 1 1 0 0 0 0 0
5 | 5 2 1 1 1 0 0 0 0
6 | 6 3 2 1 1 1 0 0 0
7 | 7 3 2 1 1 1 1 0 0
8 | 8 4 2 2 1 1 1 1 0
9 | 9 4 3 2 1 1 1 1 1
0680デフォルトの名無しさん
2006/11/02(木) 11:40:27表のフォーマットがよくわからんからその辺すこし適当。
#include<iostream>
#include<iterator>
#include<algorithm>
#include<iomanip>
#include<functional>
using namespace std;
int main(){
int a[9];for(int i=1;i<=9;++i)a[i-1]=i;
cout << " ÷ | 除数" << endl;
cout << "++++++++ ";
copy(a,a+9,ostream_iterator<int>(cout," "));
cout << endl << "非除数 +";
*fill_n(ostream_iterator<char>(cout),18,'-')++ = '\n';
for(int i=1;i<=9;++i){
cout << setw(6) << i << " | ";
transform(a,a+9,ostream_iterator<int>(cout," "),bind1st(divides<int>(),i));
cout << endl;
}
}
0681デフォルトの名無しさん
2006/11/02(木) 11:57:29#include<stdio.h>
int main(void){
int i,n,x,odd=0,even=0;
printf("n:");
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&x);
(x%2==0)? even++:odd++;
}
printf("偶数:%d,奇数:%d\n",even,odd);
return 0;
}
0682 ◆xQTfY.P6Xs
2006/11/02(木) 12:03:33ほんとうにありがとうございました。 いきなり課題とかだされて全くわからなくてこまっていたんです。ほんとうにありがとうございます。
0683デフォルトの名無しさん
2006/11/02(木) 12:24:02じっくり自分で考えてみた方が自分のためにもなるし、
出された回答を理解するだけより、よっぽど勉強になると思うんだ。
0684デフォルトの名無しさん
2006/11/02(木) 12:45:30まことに勝手ながら<iostream>しか習ってません。setwとかcharとかも習ってません。
条件の後出しですいませんが、
//除数
//被除数
//商
//(1)計算表の第1行を表示
//(2)計算表の第2行を表示
//(3)計算表の第3行を表示
//(4)各被除数について以下の処理を繰り返す(反復)
//(4-1)当該被除数を表示する
//(4-2)各除数について、被除数を除数で割った商を表示する
//(4-3)改行する
おおまかに、このアルゴリズムでお願いできませんでしょうか?
0685デフォルトの名無しさん
2006/11/02(木) 12:49:23ありがとうございます!
今からじっくり見させていただきます。
0686デフォルトの名無しさん
2006/11/02(木) 12:55:17÷ | 除数
------+ 1 2 3 4 5 6 7 8 9
被除数+---------------------
1 | 1 0 0 0 0 0 0 0 0
2 | 2 1 0 0 0 0 0 0 0
3 | 3 1 1 0 0 0 0 0 0
4 | 4 2 1 1 0 0 0 0 0
5 | 5 2 1 1 1 0 0 0 0
6 | 6 3 2 1 1 1 0 0 0
7 | 7 3 2 1 1 1 1 0 0
8 | 8 4 2 2 1 1 1 1 0
9 | 9 4 3 2 1 1 1 1 1
ズレませんように
0687デフォルトの名無しさん
2006/11/02(木) 16:30:07教えてもらえませんか?
0688デフォルトの名無しさん
2006/11/02(木) 16:40:470689デフォルトの名無しさん
2006/11/02(木) 16:53:47>>653です。
おお。早い!
そうです、こんな感じですが2値化画像を参照して開くんで、とりあえず簡単な1本の完璧でない直線の画像(BMP)をリソースに登録してそれを表示して
そのにょろにょろ直線を直線にするプログラムがいいですね。。。
あと直線も画面の端から端ではなく、線分の一番左のX座標から右のX座標までの線分にしていただけませんか?
しかし、ここの先生方の馬力はすごいですね。お願いします><
0690デフォルトの名無しさん
2006/11/02(木) 16:57:54あっ!ちなみに線分は細線化されてますので太さは「1」です><
0691デフォルトの名無しさん
2006/11/02(木) 23:08:420692デフォルトの名無しさん
2006/11/02(木) 23:10:290693デフォルトの名無しさん
2006/11/02(木) 23:12:09実行したのですが、何も表示されなかったのですが
どうすれば?
0694デフォルトの名無しさん
2006/11/02(木) 23:22:31http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2868.zip
>>677
#include <iostream>
using namespace std;
int main()
{
cout << "÷ | 除数" << endl;
cout << "------+ 1 2 3 4 5 6 7 8 9" << endl;
cout << "被除数+--------------------" << endl;
for(int i=1; i<=9; i++){
cout << " " << i << " | ";
for(int j=1; j<=9; j++){
cout << i/j << " ";
}
cout << endl;
}
return 0;
}
>>693
それが正しい動作
0695デフォルトの名無しさん
2006/11/02(木) 23:25:22答えは無いってことですか?
0696デフォルトの名無しさん
2006/11/02(木) 23:35:27問題文くらい読まないのか?
0697デフォルトの名無しさん
2006/11/02(木) 23:39:07反例があるっぽいんですけど。
0698デフォルトの名無しさん
2006/11/02(木) 23:46:49> この式を満たすものはないと断言した。これはつい最近になって証明された。
0699デフォルトの名無しさん
2006/11/02(木) 23:54:47なるほど
0700デフォルトの名無しさん
2006/11/02(木) 23:58:09先生・・・すさまじいです。。。オイラの卒論なんて一週間でできちゃいそうですね。
ほんとに感謝感激です。ありがとうございました。
0701デフォルトの名無しさん
2006/11/03(金) 00:41:320702デフォルトの名無しさん
2006/11/03(金) 03:18:18[2] 問題文(含コード&リンク): 見にくくなりそうなので下に書きます。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 2005
[3.3] 言語: C
[4] 期限: 明日23時
[5] その他:分割コンパイルとポインタ習い始めましたが、よく分かりませんorz
1.分割コンパイル
引数として受け取ったint型の数値nについて、
1からnまでの総和を計算して返す関数 int sum(int n)
nの階乗を計算して返す関数 int fact(int n)
を作成しなさい。
ただし、main関数を記述するファイルとは別のファイルに作成すること。
2.ポインタによる疑似間接参照
要素数が10のint型の配列に
キーボードから数値を入力する関数を作成し
(main関数の中で)呼び出しなさい。
配列はmain関数の中で宣言し、
入力の関数には配列のアドレスを引数で与えること。
【ヒント】 void input(int *p)
2問ありますが、よろしくお願い致します。
0703デフォルトの名無しさん
2006/11/03(金) 04:05:170704デフォルトの名無しさん
2006/11/03(金) 06:36:34int sum(int n)
{
n*(1+n)/2
}
int fact(int n)
{
int i = 1;
int result = 1;
for(;i<=n;i++)
result *= i;
return result;
}
void input(int *p, int size)
{
int i = 0;
for(;i < size; i++)
fscanf(stdin,%d,p[i]);
}
0705デフォルトの名無しさん
2006/11/03(金) 09:30:21[2] 問題文(含コード&リンク):
線形リストを作成するプログラムを作れ。
メニュー番号は以下の通りである。
1・・・先頭に新規ノードを挿入
2・・・最後に新規ノードを挿入
3・・・挿入したいノード名を指示して、指示されたノードの後ろに新規のノードを指定する
4・・・削除したいノード名を指示して、指示されたノード名を削除する
8・・・リストを先頭より表示する
9・・・終了
>>427 のプログラムの応用編です。
自分なりにやってみましたが、case3, 4の部分がうまく動いてくれないんです…
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2869.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006/11/04 PM01:00
[5] その他の制限: 構造体、ポインタを使用
0706デフォルトの名無しさん
2006/11/03(金) 09:39:53[2] 問題文
確率変数Xが確率密度関数
1/6( -3 ? x < 0)
p(x)=2( 0 ? x < 1/4)
0( それ以外 )とする。
double get_uniform_random(void) を利用して, p(x)に従う乱数X を返す関数
double get_myrandom(void) をまず定義する.
繰り返し回数?
300
シード?
128478
と入力すると, double get_myrandom(void)でサンプルを300回発生し,
サンプル平均 10.0 嘘です
サンプル分散 1.0 嘘です
…
-3.050000 0.000000
-2.950000 0.016000
-2.850000 0.018000
…
のようにサンプル平均, サンプル分散, ヒストグラムを計算して出力するプログラムを作ろう, ここで,
-2.950000 0.016000
は, -2.95 を中心値とするビンに, 300回中 300*0.016 回はいったということをいっている.
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C
[4] 期限: 2006年11月07日09:00まで
[5] その他
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2870.txt
ヒントです。利用して下さい。
0707デフォルトの名無しさん
2006/11/03(金) 10:11:48>>386 のはどこがいけない?
0708デフォルトの名無しさん
2006/11/03(金) 10:24:16・ノード追加
trace = &work[n];
-> trace->next = &work[n];
・ノード削除
sento->next = trace->next
-> previous->next = trace->next;
previous = NULL;
-> previous = trace;
if( trace->name != value )
-> if ( trace == NULL )
0709デフォルトの名無しさん
2006/11/03(金) 10:40:05ありがとうございます
ちゃんと正常動作できました
0710デフォルトの名無しさん
2006/11/03(金) 10:51:24hist[(int)((x-xmin)/dx)]++;
average=sum/nn;
variation=(sum2-sum*sum/nn)/nn;
double get_myrandom(void){
double x;
double r;
r=get_uniform_random();
if(r<=0.5)
x=-r*6;
else
x=(r-0.5)/2;
return x;
}
0711デフォルトの名無しさん
2006/11/03(金) 11:04:48return (double)rand()/(RAND_MAX-1);
↓
return (double)rand()/(RAND_MAX+1);
0713デフォルトの名無しさん
2006/11/03(金) 13:51:43しかし、正常動作しないので、>>702の問題答えてくれる方よろしくお願いします。
1と2、分けて書いてくれると有難いです。
0714デフォルトの名無しさん
2006/11/03(金) 14:02:590715デフォルトの名無しさん
2006/11/03(金) 14:12:59[2] 問題文(含コード&リンク):2 つの整数 a と b を入力し, 小さい方を出力するプログラムを条件演算子を用いて作成せよ
[3] 環境
[3.1] OS: Windows98
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006年11月3日16:00まで
0716デフォルトの名無しさん
2006/11/03(金) 14:32:54(a >b) ? printf("%d",b) : printf("%d",a);;
0717デフォルトの名無しさん
2006/11/03(金) 14:53:04美しくない
0718デフォルトの名無しさん
2006/11/03(金) 14:59:07[2] 問題文1整数のビットパターンを表示するプログラムを作成せよ
2単浮動小数点数のビットパターンを表示するプログラムを作成せよ
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:borland C++ 5.5
[3.3] 言語:C++
[4] 期限:今日中 11/3
0719デフォルトの名無しさん
2006/11/03(金) 15:01:04普通はこうじゃね?
printf("%d",a>b?b:a);
0720デフォルトの名無しさん
2006/11/03(金) 15:04:160721デフォルトの名無しさん
2006/11/03(金) 15:08:130722デフォルトの名無しさん
2006/11/03(金) 15:09:20嬉しいからあげちゃお
0723デフォルトの名無しさん
2006/11/03(金) 15:24:54問題1
#include <stdio.h>
union {
int n;
struct {
unsigned b0: 1; unsigned b1: 1; unsigned b2: 1; unsigned b3: 1;
unsigned b4: 1; unsigned b5: 1; unsigned b6: 1; unsigned b7: 1;
unsigned b8: 1; unsigned b9: 1; unsigned b10: 1; unsigned b11: 1;
unsigned b12: 1; unsigned b13: 1; unsigned b14: 1; unsigned b15: 1;
unsigned b16: 1; unsigned b17: 1; unsigned b18: 1; unsigned b19: 1;
unsigned b20: 1; unsigned b21: 1; unsigned b22: 1; unsigned b23: 1;
unsigned b24: 1; unsigned b25: 1; unsigned b26: 1; unsigned b27: 1;
unsigned b28: 1; unsigned b29: 1; unsigned b30: 1; unsigned b31: 1;
};
}a;
int main()
{
scanf("%d", &a.n);
printf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d"
"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
a.b31, a.b30, a.b29, a.b28, a.b27, a.b26, a.b25, a.b24,
a.b23, a.b22, a.b21, a.b20, a.b19, a.b18, a.b17, a.b16,
a.b15, a.b14, a.b13, a.b12, a.b11, a.b10, a.b9, a.b8,
a.b7, a.b6, a.b5, a.b4, a.b3, a.b2, a.b1, a.b0);
return 0;
}
0724デフォルトの名無しさん
2006/11/03(金) 15:53:37#include<iostream>
#include<bitset>
using namespace std;
int main(){
float f = 7.18;
bitset<32> a(*(int*)&f);
string s = a.to_string<char,char_traits<char>,allocator<char> >();
cout << s << endl;
}
0725デフォルトの名無しさん
2006/11/03(金) 17:33:33[2] 問題文(コピペ)
引数で受け取ったunsigned int型変数を2進数で表示する関数を作成せよ。
(例えば,0xf0f0f0f0が入った変数の値を表示させると,
11110000111100001111000011110000 が画面に表示されるようにする。)
ヒント:
unsigned int mask = 1<<31; は1000 0000 0000 0000 0000 0000 0000 0000を表すので,
この変数maskをうまく使って最上位ビットを取り出す。次に mask = mask >>1; とすると,
0100 0000 0000 0000 00000000 0000 0000となるので,これを使うと,
最上位から2番目のビットを取り出すことが出来る。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:borland C++ 5.5
[3.3] 言語:C
[4] 期限:明日の朝まで。
0726デフォルトの名無しさん
2006/11/03(金) 18:22:25int xxx( unsigned int num)
{
unsigned int mask = 1 << BIT-1;
int i;
for( i = 0; i < BIT-1; i++ ){
printf( "%d", (num & mask) >> (BIT-1-i) );
mask = mask >>1;
}
printf("\n");
return 0;
}
0727デフォルトの名無しさん
2006/11/03(金) 19:26:59[2] 問題文(含コード&リンク):
英単語を各行に一語ずつ入力してもらい、単語がそれぞれ
何回ずつ出現したかの頻度を出力するプログラムを作りなさい。
単語を辞書式順序で出力しなさい。ここで、単語は、次のような
木構造で管理しましょう。
struct tree{
struct tree *left;
struct tree *right;
char *word;
int count;
};
wordが単語を表し、countがその単語の出現回数を表しています。
leftからリンクされている木の単語は、wordより辞書式順序で
前にあるものばかりで、rightはwordより後にあるものばかり
になるように木構造を管理しなさい。辞書式順序の比較には
strcmpを使います。文字列pとqに対して、
strcmp(p,q)
は、pがqより辞書式順序で前にある場合には-1を、
等しい場合には0を、後ろの場合には1を返します。
[3] 環境
[3.1] OS:unix
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限: 2006年11月4日23:00
[5] その他の制限:今までは制御構造、ポインタ、構造体など、
今回はクイックソート、バブルソート、バイナリサーチまで習いました。
0728デフォルトの名無しさん
2006/11/03(金) 19:52:19ありがとうございます。参考になりました。
0729デフォルトの名無しさん
2006/11/03(金) 20:48:05>>723
どうもありがとうございます。
0730デフォルトの名無しさん
2006/11/03(金) 21:14:44http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2871.c
0732デフォルトの名無しさん
2006/11/03(金) 22:15:24すまんfreeの順序間違えた。
free(p->word);
free(p);
にしといて
0733デフォルトの名無しさん
2006/11/03(金) 23:00:16[2] 問題文(含コード&リンク):正の整数値を読み込み、その数を逆順に表示するプログラムを作成せよ
例えば、1234が入力されたら4321と出力するする
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 11月7日
[5] その他の制限: while文を使う
10で割ってその余りを表示していくらしいんですがうまくいきません
0734デフォルトの名無しさん
2006/11/03(金) 23:05:01#include<stdio.h>
int main(void)
{
int number;
printf("Input positive number : ");
scanf("%d", &number);
while(number>0)
{
printf("%d", number%10);
number/=10;
}
return 0;
}
0735デフォルトの名無しさん
2006/11/03(金) 23:36:43ありがとうございます
こんなに早く答えてもらえるとは
0736デフォルトの名無しさん
2006/11/03(金) 23:44:36[2] 問題文(含コード&リンク):これを利用して別の動き,オブジェクトを用いたOpenGLアニメーションを作成せよ
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC 6.0等
[3.3] 言語:C
[4] 期限: 11月6日(月)朝9:30まで
[5] その他の制限: なし
希望としましてはプログラム実行時の現在左下から動き出す1個の四角形を犬の口から3個発射できるようにして、
4回目の発射から四角形が四方八方に花火のように破裂する openglアニメーションを作成したいのですがどうすればいいですか?
実行ファイルはbackground.cです。
ファイル:
http://up2.viploader.net/mini/src/viploader84139.zip.html
0737デフォルトの名無しさん
2006/11/04(土) 09:54:05[2] 問題文:与えられた漸化式に基づいて数列の第0項から第N項までの値を表示する。
A0 = A1 = 1, An = An-1+An-2 (n≧2のとき)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC++ 2005
[3.3] 言語:C++
[4] 期限: 11月6日(月)まで
[5] その他の制限:よくわからないんで、プログラムを作るときの設定をいいますと、Win32→Win32コンソールアプリケーション→コンソールアプリケーション→(ここからプログラムを作ってます)
アルゴリズムの指定制限:
・データ構造:
An
An-1
An-2
添字(n)
・操作部:
(1)第0項と第1項の値を表示する。
(2)添字を上限値(20)まで1づつ増やしながら以下の処理を繰り返す(反復)
(2-1)Anの値を求めて表示する。
(2-2)An-1の値をAn-2に移す。
(2-3)Aの値をAn-1に移-1す。
自分で、やってみるとAn-1とかのn-1などが漸化式の様に連動していかない(数値として変化していってない)みたいで、どういう風に記述したらいいのかわかりません。
数日前にもこの課題を答えて頂いたんですが、ビルドできませんでした。
参考にはなったんですが、自分はアホなのでこんな風につまづいてます。
0738デフォルトの名無しさん
2006/11/04(土) 09:59:30最初のところは、
#include <iostream>
using namespace std;
void main(){ しか習ってません。
あと cout cin int for while if…else くらいしか習ってません。
0739デフォルトの名無しさん
2006/11/04(土) 10:10:37自分で書いたところまで晒してくれ
0740デフォルトの名無しさん
2006/11/04(土) 10:12:27google:フィボナッチ
0741デフォルトの名無しさん
2006/11/04(土) 12:34:52別にyahooでもinfoで変わらなくね?
0742デフォルトの名無しさん
2006/11/04(土) 12:43:41#include <iostream>
using namespace std;
void main() {
#define N 20
int An //An
int An-1 //An-1
int An-2 //An-2
int n //Aの添字 …int n を一番最初にしてみましたけどダメでした。
int A1 = 1
int A2 = 1 ← どの辺で、A1=A2=1って書かないといけないのでしょうか。
cout << A1 << endl;
cout << A2 << endl; //(1)第0項と第1項の値を表示
for ( int 2; n <= N ; n++ ) { //添字を2から上限値まで1ずつ増やしながら表示
An = An-1 + An-2; ←これもA1=A2=1と同じでどの辺に書くべきですか?
An-2 = An-1; //An-1の値をAn-2に移す
An-1 = An; //Anの値をAn-1に移す
cout << endl;
}
}
0743デフォルトの名無しさん
2006/11/04(土) 12:48:01------ ビルド開始: プロジェクト: enshu1-5-3, 構成: Debug Win32 ------
コンパイルしています...
enshu1_5_3.cpp
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(21) : error C2144: 構文エラー : 'int' は ';' によって先行されなければなりません。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(21) : error C2601: 'A_' : ローカル関数の定義が正しくありません。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(16): この行は '{' を含んでいますが、これに対応するものがありません。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(21) : error C2065: 'i' : 定義されていない識別子です。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(21) : error C2143: 構文エラー : ';' が '}' の前にありません。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(24) : error C2470: 'A_' : 関数定義のようですが、パラメータ リストがありません。外見上の本体をスキップします。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(27) : error C2371: 'i' : 再定義されています。異なる基本型です。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(36) : warning C4091: '' : 変数が何も宣言されていないときは、'int' の左辺を無視します。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(48) : error C2143: 構文エラー : ';' が '{' の前にありません。
c:\enshu1\enshu1-5-3\enshu1_5_3.cpp(48) : error C2143: 構文エラー : ';' が '}' の前にありません。
An,An-1,An-2が計算上(An)-1,(An)-2とかになってるんですかね?
0744デフォルトの名無しさん
2006/11/04(土) 12:54:350745デフォルトの名無しさん
2006/11/04(土) 14:21:23> 自分で、やってみるとAn-1とかのn-1などが漸化式の様に連動していかない
連動しないも何もコンパイル通らないぞ…
・行末のセミコロンがない
・An-1 ←変数名にマイナス記号は使えない(Anから1を引く計算と区別できないから)
・for ( int 2; n <= N ; n++ ) ←もの凄くおかしい(nをカウンタにするならn = 2だろ)
これでコンパイルは通るはず。
実際動かしてみるとforの中で最初のn = 2のとき
> An = An_1 + An_2;
An_1, An_2の値は何も代入されてないので不定。これがいけない。
An_1 = 1;
An_2 = 1;
とループの前に与えておけば問題ない。
あと、A1, A2は使ってない&必要ない。
> cout << endl;
これじゃ改行出すだけで答えが出力されない。
A_nを出力しよう。
0746デフォルトの名無しさん
2006/11/04(土) 15:15:19#include <iostream>
using namespace std;
int main(){
int An; //An
int An_1; //An-1
int An_2; //An-2
int n; //添字
#define N 20;
_asm{
mov n, 2
mov An_1, 1
mov An_2, 1}
cout << An_2 << endl; //第0項
cout << An_1 << endl; //第1項
while(n <= N){
_asm{
mov eax, An_1
add eax, An_2
mov An,eax}
cout << An << endl;
_asm{
mov eax, An_1
mov An_2, eax
mov eax, An
mov An_1, eax
inc n}}
return 0;}
0747デフォルトの名無しさん
2006/11/04(土) 15:58:45ちょwwwおまwwww
0748デフォルトの名無しさん
2006/11/04(土) 16:17:36特定した
0749秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 19:19:48乱数で0が出るまでの回数をtemp[]配列に記憶しておき,それを1万回試行してtemp[]の平均を求める。
http://ipoko.skr.jp/ransuu.cpp.txt
というプログラムを考えたのですが,なぜか最初の1回だけランダムな数字が出て
残りの9999回は全部0になってしまいます。
何故でしょうか?誰か教えてくださいm(__)mペコ
0750デフォルトの名無しさん
2006/11/04(土) 19:25:59j = 0;
↓
j = 0; s=1;
0751秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 19:27:54アッー!
なるほど、どうもありがとうございましたw
0752デフォルトの名無しさん
2006/11/04(土) 20:17:20あまりにもレベルの低い宿題を晒さないでください。
大学いってもその程度ができないのかと思うと中学生ながら絶句してしまいます。
0753デフォルトの名無しさん
2006/11/04(土) 20:21:060754デフォルトの名無しさん
2006/11/04(土) 20:27:2013年前に中学生だった俺でも授業でやったよ。(N88-BASICだったが)
最近なら程度の差はあれやってるんじゃないかな。
0755デフォルトの名無しさん
2006/11/04(土) 20:33:58大学に入るまでにやるのは高専・商業科・専門の低収入組くらい
0756デフォルトの名無しさん
2006/11/04(土) 20:35:040757デフォルトの名無しさん
2006/11/04(土) 20:41:02さりげなく数学の教科書にはあるが・・・・やってない
0758デフォルトの名無しさん
2006/11/04(土) 20:49:350759デフォルトの名無しさん
2006/11/04(土) 20:51:030760デフォルトの名無しさん
2006/11/04(土) 20:51:58頭が良い人の9割は勝ち組です
また将来の勝ち組は子供時代にプログラミングに対して興味を持ちません
0761デフォルトの名無しさん
2006/11/04(土) 20:57:17ここで聞くような奴はそもそもプログラミングを職業にするような奴ではなく、
ただ課程として履修しないといかんからやってるだけの奴なんだと気づけ。
出来ないんじゃなくて、出来る必要のない、出来なくても何の問題なく生きていける人種なのさ。
そしてそのための時間を彼らは(彼らの社会的地位を高めるような)別のことに使ってるのさ。
0762デフォルトの名無しさん
2006/11/04(土) 20:57:390763デフォルトの名無しさん
2006/11/04(土) 20:58:220764デフォルトの名無しさん
2006/11/04(土) 20:59:120765デフォルトの名無しさん
2006/11/04(土) 21:05:19出来なくても何の問題もないことないじゃん。
過程として履修しないと卒業できないんだろ?
0766デフォルトの名無しさん
2006/11/04(土) 21:07:52[2] 問題文(含コード&リンク): 正の整数値を読み込み、その数だけ*を連続して表示するプログラムを作成せよ。
例えば、3が入力されたら***と表示すること。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 7日
[5] その他の制限: while文で
0767デフォルトの名無しさん
2006/11/04(土) 21:08:36でも多くの大学で「過程」ではなく「成果物」が重要
とりあえず出来てればいい
0768デフォルトの名無しさん
2006/11/04(土) 21:13:40今考えただろその問題
0769デフォルトの名無しさん
2006/11/04(土) 21:15:05そりゃ行く学校による。
さわり程度にプログラミングの講義やって終わりにして
就職先はプログラミングとは何の関係もないところなら、
宿題でそこそこの回答を提出して成績稼いだほうが結果的にお得。
それを分かってて、それでもなおここの連中は回答し続けるのさ。
なぜならそこに問題があるからだ。
0770デフォルトの名無しさん
2006/11/04(土) 21:19:03* 整数型配列 a[ ] を定義し, 次のように初期化しなさい
int a[ ] = {92, 56, 89, 76, 81, 82, 46, 79, 88, 91};
* 整数型の配列を引数に取り, その平均値を浮動小数点型(double) で返す 関数 average を作りなさい.
ただし, main から average は, 次のよう な呼び出し型をされるものとする.
x = average( 配列名, 要素数 );
* 作成した関数を使って, 配列 a[ ] の要素の平均値を計算するプログラム を作りなさい.
という宿題が出ているのですが、
#include<stdio.h>
double average(int k[],int b);
int main(void)
{
int a[ ] = {92, 56, 89, 76, 81, 82, 46, 79, 88, 91};
double x;
x = average(a,10);
printf("%f\n",x);
return 0;
}
double average(int k[],int b)
{
int i;
double y;
for(i=0;i<b;i++)
{
y=y+k[i];
}
y=y/b;
return y;
}
で大丈夫でしょうか?
0771デフォルトの名無しさん
2006/11/04(土) 21:21:080772デフォルトの名無しさん
2006/11/04(土) 21:30:31違います
0773デフォルトの名無しさん
2006/11/04(土) 21:33:59double y;
↓
double y=0.0;
0774秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 21:47:04ボクの計算機では1万回やると約3秒かかりました。
しかし2万回以上に増やすとエラーで強制終了してしまうのですが・・・
原因はメモリ不足でしょうか?
C言語では乱数を2万回作ったくらいじゃメモリ不足?で強制終了されなかったと思いますが
C++はそんなもんなのでしょうか??
[3] 環境
[3.1] OS: WindowsXP-SP1
[3.2] コンパイラ名とバージョン: Borland C++ 5.5.1 for Win32 & Turbo Incremental Link 5.00
0775秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 21:50:12演算装置:Athlon64-3600+
メインメモリ:DDR SDRAM 1024GB
0776デフォルトの名無しさん
2006/11/04(土) 21:52:13多分スタックオーバーフローが生じてる
0777デフォルトの名無しさん
2006/11/04(土) 21:52:49#include<stdio.h>
int main(void)
{
int c;
printf("数字を入力してください:");
scanf("%d", &c);
while (c-- > 0)
putchar('*');
return 0;
}
0778デフォルトの名無しさん
2006/11/04(土) 21:53:58さっきの>>749のことか?
temp[10000];で10000個のメモリしか確保してないんなら
20000にしたら不正アクセスで落ちるのは当然だぞ。
0779秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 21:54:21n=20000ちょいくらいで実行させてみてください
他にもエラーで強制終了する人いますか?
自分で使うプログラムだからいいけど
例えば,仕事とかで顧客に納品するアプリやシステムでこういうことが起こったら
どう対処するべきなんですか?(顧客側の計算機のスペックのせいで台無しになったら・・・)
0780秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 21:55:19アッー!
なるほど、どうもありがとうございましたw
0781秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 21:57:44int temp[n];
ってのは使えないんですか?Cでも使えたかなぁ・・・?
0782秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 21:58:17malloc()とかって使えるのかなぁ
0783_
2006/11/04(土) 21:58:50もしかしてwin32consolアプリでやってる?
DOS窓は286でも使えるように(今回の場合、仮想86モードだろうけど)、すなはちセグメント切り替えできない、すなはち64KBの壁があって、
それ以上のプログラムははじかれると思ったけれど・・
0785秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 22:04:3427780前後の乱数に収束する
0786秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 22:05:320787デフォルトの名無しさん
2006/11/04(土) 22:05:51>擬似乱数を生成するrand関数を使います。この関数は、0以上RAMD_MAX以下の乱数を返します。
>なお、RAND_MAXの値は処理系に依存しますが、少なくとも32,767であることが保証されます。
http://www.bohyoh.com/CandCPP/FAQ/FAQ00062.html
0788デフォルトの名無しさん
2006/11/04(土) 22:10:03C++のrand()関数で返ってくる値の最大値RAND_MAXが分からない
そこで統計的に近似させることが出来るのではないかと考えた。
【モデル】
1.0〜RAND_MAXの中から任意のある値を決め
2.その数が 何回目のrand()で返ってくるか。
3.1〜2を何回も繰り返す。
0789_
2006/11/04(土) 22:10:410790デフォルトの名無しさん
2006/11/04(土) 22:10:45WIN32コンソールアプリはDOSアプリとは違い、
64KBの壁はない。
0791デフォルトの名無しさん
2006/11/04(土) 22:11:250792デフォルトの名無しさん
2006/11/04(土) 22:13:28そうか。死ね。
0793デフォルトの名無しさん
2006/11/04(土) 22:14:45> 344 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/04(土) 19:42:32
> C++暦2日目でもマルチポストはベテランらしいな
> 345 名前:秋葉の大学生♂&rlo;望志んさ屋トフソ[] 投稿日:2006/11/04(土) 19:43:29
> 気をつけます
> 2ch暦6年です
http://pc8.2ch.net/test/read.cgi/tech/1161257941/774
http://pc8.2ch.net/test/read.cgi/tech/1160893851/360
全然気をつけてねえw
0794デフォルトの名無しさん
2006/11/04(土) 22:14:50http://search.yahoo.co.jp/search?p=WIN32%A5%B3%A5%F3%A5%BD%A1%BC%A5%EB%A5%A2%A5%D7%A5%EA%A4%C8DOS%A5%A2%A5%D7%A5%EA&fr=top_v2&tid=top_v2&ei=euc-jp&search.x=1&x=24&y=4
0796デフォルトの名無しさん
2006/11/04(土) 22:15:46342 名前:秋葉の大学生♂?望志んさ屋トフソ 投稿日:2006/11/04(土) 19:31:28
Cはそれなりに得意ですが
CとC++の違いがまだ分からないです。
勉強に当たって何に気をつければいいとかありますか?
343 名前:デフォルトの名無しさん 投稿日:2006/11/04(土) 19:35:16
罠が増えてるので気をつけましょう
0797秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 22:16:310798デフォルトの名無しさん
2006/11/04(土) 22:20:51[2] 問題文(含コード&リンク):英単語を各一語ずつ入力してもらい、辞書式順序で出力しなさい。また、単語がそれぞれ何回ずつ出現したかを出力しなさい。
[3] 環境
[3.1] WindowsXP
[3.2] わかんないです
[3.3] 言語:C
[4] 期限:本日中
[5] http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2875.txt
C言語初心者です。
頑張ってみたものの、コンパイルは通っても実行するとエラーが出てしまいます。
0799デフォルトの名無しさん
2006/11/04(土) 22:21:21「MS-DOSプロンプト」はWindowsではMS-DOSアプリケーションだけでなく、Win32コンソールアプリケーションを動作させるための環境でもあります。
このWin32コンソールアプリケーションは、見た目はMS-DOSアプリケーションと変わりませんが、中身はれっきとしたWin32アプリケーションです。
よって、MS-DOSアプリケーションとは違ってセグメント(64KB)境界を気にしないでアプリケーションが組めるわけです。
バッチ
0800デフォルトの名無しさん
2006/11/04(土) 22:22:09ちょwwwおまwwww本日かよ!
0801デフォルトの名無しさん
2006/11/04(土) 22:22:310802デフォルトの名無しさん
2006/11/04(土) 22:22:51ギリギリまでがんばったんですが、わからなかったんです・・・
0803デフォルトの名無しさん
2006/11/04(土) 22:23:2124:00までが〆切ってのも結構あうr
0804デフォルトの名無しさん
2006/11/04(土) 22:25:42単語の文字数や単語数の限界値は?
0805デフォルトの名無しさん
2006/11/04(土) 22:26:02別なところで質問して答え貰ってただろw
0806デフォルトの名無しさん
2006/11/04(土) 22:27:14yahoo映画れびゅーで
フラガールって人気あるけど面白いの?
0807デフォルトの名無しさん
2006/11/04(土) 22:27:14明確な指定はないです
一応単語数は100語に指定してあります
>>805さん
恐らく同じ授業取っている別人ではないかと・・・
0808デフォルトの名無しさん
2006/11/04(土) 22:27:55おまえ、小林じゃねーか!
どうしたんだよ、おい
0809デフォルトの名無しさん
2006/11/04(土) 22:28:01>>730じゃね?
0810デフォルトの名無しさん
2006/11/04(土) 22:28:490811デフォルトの名無しさん
2006/11/04(土) 22:29:210812デフォルトの名無しさん
2006/11/04(土) 22:29:510813デフォルトの名無しさん
2006/11/04(土) 22:30:08あ、はい
出来ればtree構造を使えという指定を使うとこれですね
私がやったのは使わない方法なので・・・
0814デフォルトの名無しさん
2006/11/04(土) 22:30:380815デフォルトの名無しさん
2006/11/04(土) 22:33:04大学何年生?
0816デフォルトの名無しさん
2006/11/04(土) 22:33:22大学何年生で出る宿題?
0817デフォルトの名無しさん
2006/11/04(土) 22:33:29俺はmainを最後に書く派。
プロトタイプ宣言面倒じゃね?
0818デフォルトの名無しさん
2006/11/04(土) 22:34:242年です
0819デフォルトの名無しさん
2006/11/04(土) 22:36:12天と地ほど難易度に差が出てくる
0820デフォルトの名無しさん
2006/11/04(土) 22:36:28http://l.huu.cc/board/
ここに答えあるよ
0821デフォルトの名無しさん
2006/11/04(土) 22:37:58??????????■?■????
??????■〓?? ?????
????■?? ????
??????? ??????
?????? ??????? ? ? ???
?????????? ? ? ???? ???
■??????? ???? ?? ??
????????? ?? ?? ■
■???????? ???? ??
?????????? ????? ?これがコピペできないとPC関連の仕事は難しい
?????????? ??■? ?
???????????? ??
????????■????? ??▲
0822デフォルトの名無しさん
2006/11/04(土) 22:39:37あれは書く癖つけたほうがよくないか一応
0823730,809
2006/11/04(土) 22:41:21聞いても何の役にも立たんと思うけど、俺は2回生だな。
mainを最後に書いてるのはぶっちゃけプロトタイプ宣言面倒だから。
なんか1ファイルで収まるレベルの課題だと、真面目に書くのだるいんだよな。
0824デフォルトの名無しさん
2006/11/04(土) 22:42:04俺も2年生だ
0825デフォルトの名無しさん
2006/11/04(土) 22:43:07ぶっちゃけも何もそれ以外の理由はないだろうなw
0826デフォルトの名無しさん
2006/11/04(土) 22:43:21といWinnyのソースコード見て思った
Winnyのmain.cはヘッダファイルでまとめちゃって
どこいっちゃてるかもう沸け分からないけど
0827798
2006/11/04(土) 22:44:15先ほど教えていただいたソースをがんばって理解していじってみます
0828デフォルトの名無しさん
2006/11/04(土) 22:45:520829デフォルトの名無しさん
2006/11/04(土) 22:45:58ありゃバイナリから再構成したものだから全体的にむちゃくちゃ。
0830デフォルトの名無しさん
2006/11/04(土) 22:47:32確かに
0831秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 22:49:45http://ipoko.skr.jp/ransuu.cpp.txt
int型の配列を25000個なら確保できるけど,
30000個以上だとプログラム実行させても強制終了しちゃいます
これの原因は何でしょうか?
0832デフォルトの名無しさん
2006/11/04(土) 22:52:41スタックオーバーフロー
0833デフォルトの名無しさん
2006/11/04(土) 22:53:06釣りキター
0834秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 22:54:59Winnyの機能を元に逆アセンブリされたソースコード
http://ipoko.skr.jp/winny2_src_noyounamono.zip
0835秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 22:55:53あ、ちなみにソースコードの
int temp[];のところで3万以上を入力しても駄目なんです><
0836デフォルトの名無しさん
2006/11/04(土) 22:56:12ここは宿題スレだ。用事が済んだのなら帰ってくれ。
0837秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 22:57:16としたソースをコンパイルして実行させると強制終了しちゃいます。
ユーザが入力する前に・・・
0838デフォルトの名無しさん
2006/11/04(土) 23:00:03キーワードが>>832に示されている。
ぐぐれ。
0839デフォルトの名無しさん
2006/11/04(土) 23:00:56>>776みてねーのか
0840デフォルトの名無しさん
2006/11/04(土) 23:04:04すなおにヒープで確保しろとおも
0841秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/04(土) 23:04:52え?
int temp[1000000];とかにすると強制終了します
0842デフォルトの名無しさん
2006/11/04(土) 23:07:030843デフォルトの名無しさん
2006/11/04(土) 23:07:44ソフト屋さん志望してないなら
ヒープ・スタックの区別なんて知る必要ないよ
(逆読みってことはそういうことだよね)
0844デフォルトの名無しさん
2006/11/04(土) 23:08:34もうお前添え字1000個超えたらヒープからもってくるようにしろ
これは命令です
0845デフォルトの名無しさん
2006/11/04(土) 23:08:34初心者の人が虫食い状態のソースを埋めて完成させる簡単な課題を丸投げしていたのですが…
わざと理解できないように難しく書き直したり、きちんとお礼を言っている質問者に対して『この程度の事が分からないのはやる気がないだけ、そんな人間にお礼を言われる筋合いもないし、虫酸が走る』とまで書いていました…。
分かる人には大した事の無いことだったとしても、分からない人にはそうでないのですから、もう少し常識ある態度が取れないのかな…と思った訳です。
0846デフォルトの名無しさん
2006/11/04(土) 23:09:25こういうのを見た後に、ここのサイトにやってきたので、余計に素晴らしいなと思ったんですよね(笑)
私の拙い知識でも役に立つ人がいるのならば…と、今後を驕ることなく書き込みしていきたいと思ってますよ(^-^)
0847デフォルトの名無しさん
2006/11/04(土) 23:10:09もしかしてその発言した奴はKusa○○○eじゃないのか。
0848デフォルトの名無しさん
2006/11/04(土) 23:10:16わかってないですね
その人にはあなたには分かっている「常識」が分かっていなかったんですよ?
なんで分かりやすく「常識」を教えてあげなかったんですか
結局あなたも一緒じゃないですか!!
0849デフォルトの名無しさん
2006/11/04(土) 23:10:550850デフォルトの名無しさん
2006/11/04(土) 23:12:110851デフォルトの名無しさん
2006/11/04(土) 23:12:53○○○○kab○
?
0852デフォルトの名無しさん
2006/11/04(土) 23:13:030853デフォルトの名無しさん
2006/11/04(土) 23:13:570854デフォルトの名無しさん
2006/11/04(土) 23:15:17>>846
そういう真面目さは裏切られるのがオチなのでお勧めしない。
個別の疑問に優しく答えて欲しいならそれ相応の金を払って家庭教師でも雇えばいい。
タダで人から何でもかんでも教わろうという考えが既に虫のいい考えだ。
0855デフォルトの名無しさん
2006/11/04(土) 23:16:49m9(^Д^)プギャー
0856デフォルトの名無しさん
2006/11/04(土) 23:17:19あ、そうですね。ありがとうございます。
0857デフォルトの名無しさん
2006/11/04(土) 23:19:14(そういう宿題はめったにないけど。)
GIVE&TAKEの精神で。
ネタを提供するかわりに回答を教えてもらうと。
一方通行は健全じゃないよな。
0858デフォルトの名無しさん
2006/11/04(土) 23:22:11ってところでちゃんと宿題の助けにはなってると思う。
単に答えを教えて、それに大してありがとうってだけでは誰のためにもなってないわけで、
一見して穏やかなようでもそれが正しいとは思えない。
0859デフォルトの名無しさん
2006/11/04(土) 23:38:190860デフォルトの名無しさん
2006/11/04(土) 23:39:38言いたいことは分かるが常識ある人間ならこんなところで陰口をたたくのはやめような
0861デフォルトの名無しさん
2006/11/04(土) 23:41:16http://ipoko.skr.jp/ransuu.cpp.txt
int型の配列を25000個なら確保できるけど,
30000個以上だとプログラム実行させても強制終了しちゃいます
配列の宣言のところで
int temp[3万以上]; としたソースをコンパイルして実行させると強制終了しちゃいます。
これの原因は何でしょうか?
0862デフォルトの名無しさん
2006/11/04(土) 23:41:540863デフォルトの名無しさん
2006/11/04(土) 23:41:590864デフォルトの名無しさん
2006/11/04(土) 23:42:34{
int n, s=9999, temp[1000000]; //30000以上にすると強制終了?
float sum = 0.0;
0865デフォルトの名無しさん
2006/11/04(土) 23:43:09言語の意味的には間違ってないと思う。
だけど、現実には無制限にメモリを使えるわけじゃないんだ。
スタックからあまりたくさん確保するのは基本的に避けよう。
0866デフォルトの名無しさん
2006/11/04(土) 23:44:250867デフォルトの名無しさん
2006/11/04(土) 23:44:35だからilinkのオプションに/S:0x8000000 (=8MB) でも付けてみろって。
マルチすんな。ますます誰も答えなくなるぞ。
0868デフォルトの名無しさん
2006/11/04(土) 23:46:310869デフォルトの名無しさん
2006/11/04(土) 23:47:12Ku○○○○○eがいないかどうか確かめて、もしいたらそこには
何も書き込まない事だな。
0870デフォルトの名無しさん
2006/11/04(土) 23:52:26意味不明
解説キボン
>>660
行列の大きさが不明
指定しる!
>>673
ベッセル関数 j0() j1() の取る引数が不明
>>736
VCなんて持ってない
ってところかな…
0871デフォルトの名無しさん
2006/11/05(日) 00:06:46推測だけど多分
double j0(double)
double j1(double)
0872デフォルトの名無しさん
2006/11/05(日) 00:10:17入力は
仕事の到着する時間 仕事開始から終了まで必要な時間
となる。んで、仕事番号は 0 から順番に勝手に付けろ、と。
出力の前半は要するに入力したデータをフォーマットだけ入れてそのまま出力。
後半は、最後の仕事終了時刻が最も早くなるようにスケジュールを組み、その状況をしめす。
"JOB #"は仕事番号、"Arr"は仕事が到着する時刻、"Fin"はその仕事が終了する時刻、
"Svc"は仕事にかかる時間、"TA"は仕事に実質的にかけた時間(終了時間-到着時間)
0873デフォルトの名無しさん
2006/11/05(日) 00:11:06#include<stdio.h>
int main(void)
{
double x;
printf("x,j0(x),j1(x)\n");
for(x=0.0;x<=20.0;x+=0.1)
{
printf("%f,%f,%f\n", x, j0(x), j1(x));
}
return 0;
}
0874デフォルトの名無しさん
2006/11/05(日) 00:55:47最近の子供はコンピュータがブラックボックス化してしまたせいで
コンピュータの仕組みについては何も知らない
MS-DOS?Windows3.1?コマンドライン?(謎)って感じ
昔に比べて自分でプログラム作る必要は無くなったし
自作する必要も無くなった(自作PCと既製PCの値段の差が無くなってきている!)
(まぁインターネットサーフェインやHP作成はちょっと昔の子供より出来そう?だが)
商業高校の掲示板とかスレとか見てみ?
情報をたくさん勉強してるはずなのに何も知らないよ?
資格もワープロ検定やパソコン検定などエンドユーザ側の試験ばかり(それはそれで悪くはない・・?)
0875デフォルトの名無しさん
2006/11/05(日) 00:57:06メモリあるだけ使えるのはヒープだけの特権なのね
0876デフォルトの名無しさん
2006/11/05(日) 00:58:150877デフォルトの名無しさん
2006/11/05(日) 01:02:45どんなアルゴリズムなのか全然わからんとです…('A`)
スレ違いすみませんでした
学校で習ってるわけじゃないので質問したことはないけど、色々勉強になるのでROMせてもらってます
0878デフォルトの名無しさん
2006/11/05(日) 01:12:55スタックやキューの大きさって自分で決められないの?
今までかってに配列宣言してたけど
0879デフォルトの名無しさん
2006/11/05(日) 01:38:300880デフォルトの名無しさん
2006/11/05(日) 02:54:53> スタックやキューの大きさって自分で決められないの?
↑と↓の展開の速さが釣りを表しています
> 今までかってに配列宣言してたけど
きっと余程急いでいたのでしょう・・・
0881デフォルトの名無しさん
2006/11/05(日) 04:16:15ハ ┌( ;/ ト, ,、 rヘ r'^ナrジ-z
__}ヽ,__ (ヽ/ス_r^フしz,り い)n/イr〜^′
'っヾ、r'__ |レ'ノ_C'入彳勺ソメろ_j/し-,_
`フ ヾ勹_| <_r' !|刀_」r''>||/⌒(_rヘ-‐'
<_ゝし||フぅ(ひzメ__ゝ'l !'そ
~zヾ|て 、l レ^ //'| |'~
| | ヽl| // }|
| :! || | | ,/ ,' すいません、ちょっと通りますよ
| :{. || | |/ /
l !|| | | /
ヽ ヽ.|/ //
_,r)_ j (_,( ciz
,ノこ_- __,ーヽ ん|Zゥ レz zjそ_
} ... 丿 ろ、,_!|乙7ムLそ/し-z
ノ""'' 一( `う.l !シ/ア了//_⊂,
/、__ ヽ ^'| |~//,/_ソ ハr^
/ ...... ーl | |// //ノ
/~"' 、__/ ,,,...} |/ ///
{' _ `y′ 一 / r'〜(_ノ
人 =/‐- ハ 丿" ''(
ヽ '' / __,, / / ‐- ''')
'∨ X. }''' ....ノ
j ー/ /== ノ'ヽ
/=‐ r'´-ヽ } ー/'''' {
,' _,, 人 ''"`、 ノ.. '' ノ`ヽ ''"ヽ
{ー / \ -'} / / \'''}`
ハ 〈 )八 ( f )ハ
ヽ ) (( )ノ /
ノ/ ') _/
0882デフォルトの名無しさん
2006/11/05(日) 04:16:40そりゃ、スタックオーバーフローだろうな。
temp配列の領域をスタックに置いているから、ある程度以上のインデックスを超えると
リンカで用意しているスタック領域を超えて、メモリ領域を壊しまくる。か、MMUによってアクセス例外が起きる。
普通ある程度大きな領域を必要とする場合は、ヒープ領域にとる。
int* temp = new int[1000000]; //領域確保
... 処理
delelte[] temp; //使い終わったら必ず領域開放
0883デフォルトの名無しさん
2006/11/05(日) 04:17:41そりゃ、スタックオーバーフローだろうな。
temp配列の領域をスタックに置いているから、ある程度以上のインデックスを超えると
リンカで用意しているスタック領域を超えて、メモリ領域を壊しまくる。か、MMUによってアクセス例外が起きる。
普通ある程度大きな領域を必要とする場合は、ヒープ領域にとる。
int* temp = new int[1000000]; //領域確保
... 処理
delelte[] temp; //使い終わったら必ず領域開放
0884秋葉の大学生&rlo;望志んさ屋トフソ
2006/11/05(日) 04:20:26ありがとうございました。
スタックがそんなところに存在して
あの場所で宣言すると勝手にリンカのスタックに入ってしまい
しかもゴチャゴチャした制約があったなんて知りませんでした
勉強になります
0885デフォルトの名無しさん
2006/11/05(日) 04:42:30曜日ごとに整理された表(カレンダー)を表示するプログラムを製作せよ
0886デフォルトの名無しさん
2006/11/05(日) 04:44:30>>1
0887デフォルトの名無しさん
2006/11/05(日) 10:47:30[2] 問題文:http://adlib.rsch.tuis.ac.jp/~akira/unix/ossprog/src/short/parrot.c
のプログラムで録音したデータにFFTをかけて周波数解析をする
プログラムを作成せよ。(FFT後のデータはfourier.dataに保存する。)
[3] 環境
[3.1] OS:Linux
[3.2] gcc 3.3.2
[3.3] 言語: C
[4] 期限: 2006年11月5日24:00まで。
[5]その他の制限: なし
録音データをFFTのプログラムに渡す所で迷っています。
どなたかお願いします。
0888デフォルトの名無しさん
2006/11/05(日) 15:13:53問題文のプログラムにFFTのルーチン書き加えたりして、そのままbufを読みに行けば?
0889デフォルトの名無しさん
2006/11/05(日) 17:56:49[2] 問題文(含コード&リンク):
異なる40個の正の自然数が書かれた40枚のカ−ドが1次元(直線)上にランダムに並べられている。
先手と後手が交互に1枚づつ取る。ただし、カ−ドの取り方は直線上に並べられたカ−ドの右端、
または左端のカ−ドしか取れないものとする。
先手は意図的に偶数番目、奇数番目どちらかのカードを取りつづけることが出来る。
先手が必ず勝つには、偶数番目、奇数番目のカードの和を求め、大きいほう種類のカードをとりつづければいい。
このとき、引き分けの場合と先手が勝つ場合に分け、プログラムで計算し、その結果を確かめる。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:BCC5.5
[3.3] 言語:Cのみ(coutは可)
[4] 期限:2006年11月06日10:00まで
[5] その他の制限:C習い始めて1年くらいの奴が書くような感じでお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2877.txt
ここまでは書いたのですが、うまく動きません。
よろしくお願いします。
0890デフォルトの名無しさん
2006/11/05(日) 18:40:44勝つ条件は?
それと
>先手は意図的に偶数番目、奇数番目どちらかのカードを取りつづけることが出来る。
ここもよくわからないんだけどランダムに並んだカードの端からしか取れないのに
どうやって意図的に選べるんだ?
0891デフォルトの名無しさん
2006/11/05(日) 19:41:59勝つ条件抜けてました。すいません。
取ったカードに書かれた数字の和が大きいほうが勝ちです。
1 2 3 4 5 6
とあるときに、自分が偶数番目である6を取った場合、1 2 3 4 5 となり、相手は1か5の奇数番目を取るしかなくなる。
で、相手がどちらを取ったとしても左右の端どちらかは必ず偶数番目なので、また偶数番目をとることができる。
同様に一番最初に奇数番目を取った場合も同じ。
こうやって先手は偶数番目、奇数番目どちらかを意図的にとりつづけることが出来る、ってわけです。
0892デフォルトの名無しさん
2006/11/05(日) 20:13:41enum {LEFT, RIGHT};
int delete_card(int a[], int n, int side) {
int i;
if (a == NULL || n < 1) return -1;
if (side == RIGHT) return n - 1;
for (i = 0; i < n - 1; i++) a[i] = a[i + 1];
return n - 1;}
/* 左右のうち大きいほうを取る */
int cpu1(int a[], int n) {
if (a == NULL || n < 1) return -1;
if (a[0] > a[n - 1]) return LEFT; return RIGHT;}
/* 奇数、偶数番目の和を考える */
int cpu2(int a[], int n) {
int i, sum[2]; sum[0] = sum[1] = 0;
if (a == NULL || n < 1) return -1;
for (i = 0; i < n; i++) sum[i % 2] += a[i];
return (sum[0] > sum[1]) ? LEFT : RIGHT;}
0893デフォルトの名無しさん
2006/11/05(日) 20:27:39偶数奇数で交互に並んだランダムな数列という事ですね。
0894デフォルトの名無しさん
2006/11/05(日) 20:28:40[2] 問題文(含コード&リンク):3つの整数をキーボードから入力し、switch文を用いて大きい順に並べるプログラムを作成しなさい。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Borland C(V5.5)
[3.3] 言語:C
[4] 期限:11月06日 12:00まで
[5] その他の制限: 本当に基本的なプログラムでお願いします。
いろんなサイトを参考にしましたが、自分の頭じゃどうプログラムを組めばいいのか全くわかりませんorz
0895デフォルトの名無しさん
2006/11/05(日) 21:17:01if (a < b) swap(&a, &b);
↓
switch (a < b) { case 1: swap(&a, &b);}
ぐらいしか思いつかんのだが・・・。
0896デフォルトの名無しさん
2006/11/05(日) 21:22:400897デフォルトの名無しさん
2006/11/05(日) 21:25:35{
switch(
0898デフォルトの名無しさん
2006/11/05(日) 21:33:08とりあえず問題文考えた奴殴ってこい
0899デフォルトの名無しさん
2006/11/05(日) 21:33:25switch文も8個の条件を書けばいい。
0900デフォルトの名無しさん
2006/11/05(日) 21:42:13acb
bac
bca
cab
cba
6種類じゃなくて?
0901デフォルトの名無しさん
2006/11/05(日) 21:47:54イコールとなる時があるのを忘れてる
0902デフォルトの名無しさん
2006/11/05(日) 21:48:340903デフォルトの名無しさん
2006/11/05(日) 21:51:37abc
acb
bac
bca
cab
cba
a=b>c
a=b<c
a=c>b
a=c<b
b=c>a
b=c<a
a=b=c
で15通り
ではなくて?
0904903
2006/11/05(日) 21:52:160905デフォルトの名無しさん
2006/11/05(日) 21:55:300906894
2006/11/05(日) 21:56:26>>898
この講義の担当教員はかなり生徒の評判が悪いです。
質問しに行って話しているといきなり「何でこんなことも分からないんだ!?」と
いきなり怒りだしたりと、あまり講義を受けたいと思う人じゃないです。
でも必修科目で選択の余地無しなんです('A`)
0907デフォルトの名無しさん
2006/11/05(日) 22:04:24void int swap(int *a, int *b) { int t; t = *a; *a = *b; *b = t; }
int main(void) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
printf("%d %d %d\n", a, b, c);
switch (a < b) { case 1: swap(&a, &b); };
switch (b < c) { case 1: swap(&b, &c); };
switch (a < b) { case 1: swap(&a, &b); };
printf("%d %d %d\n", a, b, c);
return 0;
}
うーん・・・中途半端。
0908デフォルトの名無しさん
2006/11/05(日) 22:06:550909デフォルトの名無しさん
2006/11/05(日) 22:08:10switch ( (a > b) + (a > c) * 2 + (b > c) * 4 ) {
case 0: printf("%d %d %d\n", a, b, c); break;
case 1: printf("%d %d %d\n", b, a, c); break;
//case 2: printf("%d %d %d\n", a, b, c); break; // a<=b b<=c -> a<=c : 0
case 3: printf("%d %d %d\n", b, c, a); break;
case 4: printf("%d %d %d\n", a, c, b); break;
//case 5: printf("%d %d %d\n", c, b, a); break; // a>b b>c -> a>c : 7
case 6: printf("%d %d %d\n", c, a, b); break;
case 7: printf("%d %d %d\n", c, b, a); break;
}
0910デフォルトの名無しさん
2006/11/05(日) 22:09:24> TRUEが1って保証されてたっけ
さあ?
まあ、詳しくは規格書みてくれ。
0911デフォルトの名無しさん
2006/11/05(日) 22:12:33(a > b ? 1:0) + (a > c ? 1:0) * 2 + (b > c ? 1:0) * 4
0912デフォルトの名無しさん
2006/11/05(日) 22:14:13比較演算子は1か0を返す
>>911
やめてくれ。冗長過ぎて気持ち悪い。
0914デフォルトの名無しさん
2006/11/05(日) 22:15:59switchの呪い、恐るべし。
0915デフォルトの名無しさん
2006/11/05(日) 22:17:49http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2878.c
先手は勝つように選択、後手は適当に選択するようにした。
引き分け時の動作は確認してない。
仕様がびみょうにわからんので期待通りの動作かしらん。
0916デフォルトの名無しさん
2006/11/05(日) 22:20:54あぁ…、22行目いらん。
あと153行目の300とかいう数字はマクロにしといて下さい。
0917デフォルトの名無しさん
2006/11/05(日) 22:23:47俺の認識ではNo
0か非0かだと思った
( ( a > 1 ) == 1 ) は良くない
( ( a > 1 ) != 0 ) と書くべき・・・・だったと
ただTUREとtureは違うとも....
0918917
2006/11/05(日) 22:25:09!!
TRUEとtrue ね
0919デフォルトの名無しさん
2006/11/05(日) 22:31:19解答例とか公開されるの?
オレも模範解答が知りたい
0920デフォルトの名無しさん
2006/11/05(日) 22:34:40Each of operators < (less than), ... shall yield 1 if the specified relation is true ...
0921894
2006/11/05(日) 22:36:37しかし、たまに前回の課題について何もふれないまま講義が進み
次の課題が出たりすることもあるのであまり期待はしないでください。
0922デフォルトの名無しさん
2006/11/05(日) 22:37:39不正確な認識は仕様書を読んで改めよ。
if 文の中で非ゼロが評価された場合真、
ゼロが評価された場合偽になるのは正しいが、
それとは別に比較演算子は 1, 0 を返す。
0923デフォルトの名無しさん
2006/11/05(日) 22:42:43if(c >= b)
d = 1;
else if(c >= a)
d = 2;
else
d = 3;
}
else if(a >= c)
d = 4;
else
d = 5;
switch(d){
case 1 : printf("%d %d %d\n",c,b,a); break;
case 2 : printf("%d %d %d\n",b,c,a); break;
case 3 : printf("%d %d %d\n",b,a,c); break;
case 4 : printf("%d %d %d\n",a,c,c); break;
case 5 : printf("%d %d %d\n",c,a,b); break;
}
うーむ・・・
0924デフォルトの名無しさん
2006/11/05(日) 22:44:04把握した
…スマートな方法は無さそうだが
0925デフォルトの名無しさん
2006/11/05(日) 22:48:27[2] 問題文(含コード&リンク):各値を格納した構造体をvector<>に格納し、さらに、構造体にある値を検索し表示させるプログラムを作れ。
[3] 環境
[3.1] WindowsXP
[3.2] CV++6
[3.3] 言語:C++
[4] 期限:本日中
[5] vectorに格納する構造体の個数は2個以上でお願いします。
struct{
int age;
char *name;
};
void main(){
while( 1 ){
各値の入力格納、vectorに格納
}
vector<T>::iterator i = find(・・・);
検索した値の構造体のすべての値を表示
}
上記のは例みたいなものなので、できればこれに近い形のプログラムをお願いします。
0926923
2006/11/05(日) 23:06:140927デフォルトの名無しさん
2006/11/05(日) 23:12:14#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
struct human {
int age;
std::string name;
human() {}
human(int a, std::string n) : age(a), name(n) {}
bool operator==(const human& rhs) {return age == rhs.age && name == rhs.name;}
};
int main() {
std::vector<human> v;
int age;
std::string name;
while (std::cin >> age >> name) {
v.push_back(human(age, name));
}
std::vector<human>::iterator i = std::find(v.begin(), v.end(), human(5, "Bob"));
if (i != v.end()) {
std::cout << i->age << " " << i->name << std::endl;
}
return 0;
}
0929887
2006/11/05(日) 23:20:49ありがとうございました。図々しいですがもう1題お願いします。
[1] 授業単元:情報工学
[2] 問題文:http://adlib.rsch.tuis.ac.jp/~akira/unix/ossprog/index.html
の課題4,5をお願いします。
[3] 環境
[3.1] OS:vine Linux 3.2
[3.2] gcc
[3.3] 言語: C
[4] 期限:なし
[5]その他の制限: なし
お願いします。
0930デフォルトの名無しさん
2006/11/06(月) 00:29:51凄い難しいことやってるのね。
大学って凄いね。
0931デフォルトの名無しさん
2006/11/06(月) 00:44:000932デフォルトの名無しさん
2006/11/06(月) 01:10:04課題4
status = write(fd, buf, sizeof(buf)); /* play it back */
↓
{
#if (SIZE==16)
short *pvalue=(short *)buf;
#elif (SIZE==8)
signed char *pvalue=(signed char *)buf;
#endif
int i;
FILE *fp;
fp=fopen("parrot_4.txt", "a");
for(i=0;i<LENGTH*RATE;i++)
{
status = write(fd, pvalue, SIZE/8*CHANNELS); /* play it back */
if(CHANNELS==1)
fprintf(fp, "%d\n", pvalue[0]);
if(CHANNELS==2)
fprintf(fp, "%d,%d\n", pvalue[0], pvalue[1]);
pvalue+=CHANNELS;
}
fclose(fp);
}
0933894
2006/11/06(月) 01:17:31printf("一つ目の整数値-->");
scanf("%d",&a);
printf("二つ目の整数値-->");
scanf("%d",&b);
printf("三つ目の整数値-->");
scanf("%d",&c);
if (a>b)
if (b>c)
printf("%d>%d>%d",a,b,c);
else if (c>b)
printf("%d>%d>%d",a,c,b);
if (b>a)
if (a>c)
printf("%d>%d>%d",b,a,c);
else if (c>a)
printf("%d>%d>%d",b,c,a);
if (c>a)
if (a>b)
printf("%d>%d>%d",c,a,b);
else if (b>a)
printf("%d>%d>%d",c,b,a);
return(0);
}
switchを使うのは無理なので減点覚悟でif文で組んでみたのですが
ちょっと自信がないので確認していただけないでしょうか?お願いします。
0934デフォルトの名無しさん
2006/11/06(月) 01:22:09重箱の隅つつくみたいだけど、表示形式がそれだとa=bのときは?
0935894
2006/11/06(月) 01:24:270936デフォルトの名無しさん
2006/11/06(月) 01:34:20[2] 自然数 n に対して 1/1+1/2+1/3+1/4+…+1/n を計算する関数 double h(int n) を作成せよ. main 関数から h を呼び出し, 1〜10 の整数 i について h(i) を表示 (小数点以下 5 桁) するようにせよ. 次のような結果が得られることを確認せよ
i h(i)
1 1.00000
2 1.50000
3 1.83333
4 2.08333
5 2.28333
6 2.45000
7 2.59286
8 2.71786
9 2.82897
10 2.92897
[3.1] winXP sp2
[3.2] cygwin
[3.3] C
[4] 20006/10/6/23時59分
[5] どんな感じにするか次に書くので埋めて下さい。
0937936
2006/11/06(月) 01:35:24double h(int);/*プロトタイプ宣言*/
int main(void)
{
int n;
for(i=1;i<=10;i++)
{
printf("%d\t%5.3f\n",i,distance(i,(i+2)));
}
return 0;
}
double h(int n)/*関数の定義*/
{
return n;
}
よろしくお願いします。
0938デフォルトの名無しさん
2006/11/06(月) 01:36:05期限が…
0939936
2006/11/06(月) 01:37:280940デフォルトの名無しさん
2006/11/06(月) 01:37:310941デフォルトの名無しさん
2006/11/06(月) 01:42:30#include<stdio.h>
double h(int);/*プロトタイプ宣言*/
int main(void)
{
int i;
printf("i\th(i)\n");
for(i=1;i<=10;i++)
{
printf("%d\t%.5f\n", i, h(i));
}
return 0;
}
double h(int n)/*関数の定義*/
{
double value=0.0;
int i;
for(i=1;i<=n;i++)
value+=1.0/i;
return value;
}
0942936
2006/11/06(月) 02:31:54ありがとうございます。
あとこのプログラムが動かないんですが誰か間違い探しお願いします。
本とか見て考えても分かりません。
#include<stdio.h>
void gcdprint(int,int);
void printf_cd(int,int);
int gcd(int,int);
int main (void)
{
int a,b;
printf("a bを入力して下さい>>");
scanf("%d %d",&a,&b);
gcdprint(a,b);
print_cd(a,b);
return 0;
}
長いから続きで
0943936
2006/11/06(月) 02:32:27{
printf("gcd=\t%d\n",gcd(a,b));
}
void print_cd(int a,int b)
{
int g,i;
g=gcd(a,b);
printf("%d\tgcd\t%d\t=\t%d\n",a,b,g);
for(i=2;i<g;i++)
{
if(g%i==0)
{
printf("%d\n",i);
}
}
}
int gcd(int a,int b)
{
int z;
while((z=a%b)!=0)
{
a=b;
b=z;
}
return b;/*bに余りzを代入する*/
}
よろしくお願いします。
>>936は正常に動作しました。
0944デフォルトの名無しさん
2006/11/06(月) 02:34:080946デフォルトの名無しさん
2006/11/06(月) 02:43:12ってことでエスパー回答
for(i=2;i<g;i++)
↓
for(i=2;i<g;i++)
0947946
2006/11/06(月) 02:44:00for(i=2;i<=g;i++)
0948946
2006/11/06(月) 02:45:48for(i=1;i<=g;i++)
ミス多すぎ。もうダメ。寝よう Zzz
0949デフォルトの名無しさん
2006/11/06(月) 02:54:56中学生でもできるようなものを教えてもらって恥ずかしくないのですか?
0950デフォルトの名無しさん
2006/11/06(月) 02:57:59('A` 家のVMにdspデバイスが無いっぽいので実験できねぇ・・・ムチャクチャ楽しそうだ
0951デフォルトの名無しさん
2006/11/06(月) 03:03:060952デフォルトの名無しさん
2006/11/06(月) 03:05:190953デフォルトの名無しさん
2006/11/06(月) 03:06:48('∀` とおもったらcygwinさんが/dev/dspをサポーチしてくれてた!!!やった!楽しスwwwwwwwwwwww
0954936=942
2006/11/06(月) 03:14:33そうでした。
動かしてみたら11行目のprint_cd(a,b); あたりにエラー出てまず動きません。
プログラムの書き方自体に問題があるようです。
mainからgcdとprint_cdを呼び出すようんしたいんですが、
2つを同時にする方法が分かりません。
ちなみに11行目のprint_cd(a,b); 削除したらプログラムは動作するようになりますが
>>508の問題文の
# 2つの自然数 a, b に対し, a と b の最大公約数を求める関数 int gcd(int a, int b) を作成
だけが正常に表示されて他は出ません。
アドバイスか添削お願いします。
0955デフォルトの名無しさん
2006/11/06(月) 03:17:30コンパイラの吐くメッセージの事を言ってるならコピペしてよ
void printf_cd(int,int);
↓
void print_cd(int,int);
0956デフォルトの名無しさん
2006/11/06(月) 03:23:12どうせコンパイルでき、実行できただけ喜んでんだろw
0957デフォルトの名無しさん
2006/11/06(月) 03:30:05結局のところ、if文とswitch文を正しく把握してるかどうか試されてるだけだと思うぞ。
エレガントな書き方ではないが、if文をswitch文に置き換えることは可能だし。
あと、自力で考えないでこんなところに丸投げしてる奴に、教授を非難する資格はないよ。
0958デフォルトの名無しさん
2006/11/06(月) 03:39:55通常は教員としての仕事は評価されない上に、
簡単な問題に対する質問に時間をとられて研究できなくなると
教員にとっての死活問題になるからなぁ…
ここの住人からすれば面白くない問題を出したという意味で、
叩かれても仕方ないけどね
0959デフォルトの名無しさん
2006/11/06(月) 03:46:11音鳴ったスwwww
やべぇwwww
Win32API使うのなんて目じゃないくらいに簡単wwwww
うは、これでUDP broadcast使ってネット越しに音流せるwwww
0960デフォルトの名無しさん
2006/11/06(月) 04:18:350961デフォルトの名無しさん
2006/11/06(月) 04:30:21何とでも言うがいいぉ
どうせボクの足元にも及ばない愚民の鳴き声なんだぉ
フヒヒヒヒッヒ
0962デフォルトの名無しさん
2006/11/06(月) 04:33:44参考サイトはここだぉ
/dev/dsp on cygwin
http://www.sixnine.net/cygwin/cygwin-doc/devices.html
0963デフォルトの名無しさん
2006/11/06(月) 06:57:48一つの文字列につきメモリをその都度動的に確保し
逆順に並べ替えて、さらに出力行の最後の一文字目だけ大文字にして
出力するプログラム
(動的メモリ割り当て)
スレ違いと言われここに来ました
誰か教えて下さい
0964963
2006/11/06(月) 07:03:07[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):コマンドからいくつか引数を取って
一つの文字列につきメモリをその都度動的に確保し
逆順に並べ替えて、さらに出力行の最後の一文字目だけ大文字にして
出力するプログラム
[3] 環境
[3.1] OS: unix
[3.2] コンパイラ名とバージョン: (gcc
[3.3] 言語: (C
[4] 期限: 今日
[5] その他の制限:
0965デフォルトの名無しさん
2006/11/06(月) 07:06:51そんなプログラム作ってなんの役に立つの?
0966963
2006/11/06(月) 07:20:57宿題なんでやらなきゃどうしようもない
あとコマンドじゃなくてコマンドラインです
例えば
./○○○ orange appleと入力したら
egnarO
elppA
となるようなプログラムです
誰か教えて下さい
0967デフォルトの名無しさん
2006/11/06(月) 07:24:25適当に
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stddef.h>
#include<ctype.h>
char*strdup_(char*s);
char*capitalize(char*s);
char*strrev_(char*s);
int main(int argc,char**argv){
(void)argc;//unused
while(*++argv){
char*p = strrev_(capitalize(strdup_(*argv)));
if(!p){perror("main:");break;}else puts(p);
}
return 0;
}
/*
0968デフォルトの名無しさん
2006/11/06(月) 07:25:26*/
char*strdup_(char*s){
size_t len = strlen(s);
char*p = (char*)malloc(len+1);
if(p)memcpy(p,s,len+1);
return p;
}
char*capitalize(char*s){
if(s)*s = (char)toupper(*s);
return s;
}
char*strrev_(char*s){
size_t len,i;
if(!s)return s;
len = strlen(s);
for(i=0;i<--len;++i){char c=s[i];s[i]=s[len];s[len]=c;}
return s;
}
0969デフォルトの名無しさん
2006/11/06(月) 07:29:47あ、メモリリーク。C++にどっぷり毒されてるから開放忘れてた。
修正修正
while(*++argv){
char*p = strrev_(capitalize(strdup_(*argv)));
if(!p){perror("main:");break;}else puts(p);
free(p);
}
0970894
2006/11/06(月) 07:37:16ここに課題を持込んでここの住人の人達に解いてもらい、その上で教員を
批判するような発言をする権利など無いというのは反論する余地がありません。反省します。
あと、まだ少しですが時間はあるので自分の頭を使って考えてみます。
>>958
自分はまだ研究室に配属されていないので忘れがちですが、先生方の本業は自分の研究ですから
このようなルーチンワークに時間を割かれるのを嫌うということを考えもしませんでした・・・。
0971963
2006/11/06(月) 07:51:03ありがとうございます
だけど自分アマチュアなんでちょっと分からない
下のやつ改造して教えてくれませんか?
(間違いは多々あるとおもいますが…)
あと他に条件で一度確保したメモリは次の文字列を処理する前に解放せよ
ってのがありました
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
int i, j, elem;
char *array;
if(argc == 1){
exit(1);
}
elem = argc - 1;
array = malloc(elem * sizeof(char));
ここらへんがわかりません
printf("\n");
free(array);
}
0972デフォルトの名無しさん
2006/11/06(月) 08:07:49C++にどっぷりだと開放忘れる?
意味不明
C#やJAVAなんておこちゃま言語につかりすぎてるだけでは?
0973デフォルトの名無しさん
2006/11/06(月) 08:21:20批判しかしねぇー
0975デフォルトの名無しさん
2006/11/06(月) 10:07:53瑣末なことだけど1/nから足していった方がよくね
mainでは有効数字5桁しかいらないからどうでもいいといえばどうでもいいが
0976デフォルトの名無しさん
2006/11/06(月) 10:26:10スマートポインタにどっぷりなんだろうよ。
>>974
俺は>>967ではないが。これ以上初心者向けには(俺には)できない。
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i, j, length;
char *a, temp;
if (argc == 1) exit(1); /* 引数なしなら終了 */
for (i = 1; i < argc; i++) { /* それぞれの引数に対して */
length = strlen(argv[i]); /* 引数の文字数 */
a = malloc(length + 1); /* 文字数分だけメモリの確保 */
strcpy(a, argv[i]); /* aに引数をコピー */
for (j = 0; j < length / 2; j++) { /* 文字列を反転 */
temp = a[j]; /* あらかじめ文字を保存しておいて */
a[j] = a[length - j - 1]; /* 手前を後ろの文字で置き換えて */
a[length - j - 1] = temp; /* 後ろの文字をあらかじめ保存した文字で置き換える */
}
a[length - 1] = toupper(a[length - 1]); /* 最後の文字を大文字に */
printf(a); /* 表示 */
free(a); /* 確保したメモリの開放 */
printf("\n"); /* 改行 */
}
return 0;
}
0977デフォルトの名無しさん
2006/11/06(月) 13:45:17問題2 整数xを2倍した値を返す関数mult2(x)をつくれ。但し、乗算*を使ってはいけない。
問題1で用いたinc(x)とdec(x)を用いること。
(ヒント:inc(x)とdec(x)を同じ回数だけdec(x)が0になるまで繰り返す)
テンプレ無視ってスマソor2
0978デフォルトの名無しさん
2006/11/06(月) 13:47:02int inc(x){return x+1;}
int dec(x){return x-1;}
0979デフォルトの名無しさん
2006/11/06(月) 13:47:27何のためのテンプレなんだよ
謝りゃいいって思ってるんならとっとと辞めちまえ
というわけで>>1
0980デフォルトの名無しさん
2006/11/06(月) 13:52:27int mult2(x){pow(inc(x),2)-pow(x,2)+dec(0);}
0981デフォルトの名無しさん
2006/11/06(月) 14:52:15#include <stdio.h>
int inc(int x) {return x + 1;}
int dec(int x) {return x - 1;}
int mul2(int x) {
int x2;
for (x2 = x; x != 0; x = dec(x), x2 = inc(x2)) ;
return x2;
}
int main(void) {
printf("%d\n", mul2(10));
return 0;
}
0982デフォルトの名無しさん
2006/11/06(月) 15:01:20int inc(int x) {return x + 1;}
int dec(int x) {return x - 1;}
int mul2(int x) {
return dec(x)+inc(x);
}
int main(void) {
printf("%d\n", mul2(10));
return 0;
}
(ヒント:inc(x)とdec(x)を同じ回数だけdec(x)が0になるまで繰り返す)
使ってないけどw
0983936=942
2006/11/06(月) 15:29:07コピーのやりかたがわからなかったもので。
学校のPCだとコンパイラの表示を選択してエンター押せばできるんですが
家のやつだと同じコンパイラなのに選択すらできません。
でもそれ直したら動きました。こういうミス多いな。。何回も見たのに。
ありがとうございました。
0984デフォルトの名無しさん
2006/11/06(月) 15:32:36携帯なんだよそれくらい察しろカス
授業中なんだから早く答えろ
0985デフォルトの名無しさん
2006/11/06(月) 15:40:02その発想はなかったわ
0986デフォルトの名無しさん
2006/11/06(月) 15:40:29それは宿題ではないな
0987デフォルトの名無しさん
2006/11/06(月) 15:42:36テスト中なんだから早く答えろ
とかレスがつく日がくるのかも
0988俺のが正しい
2006/11/06(月) 15:46:53int inc(int x) {return x + 1;}
int dec(int x) {return x - 1;}
int mult2(int x){
int i,y;
i=x;
y=x;
while(i>0){
y=inc(y);
i=dec(i);
}
return y;
}
0989デフォルトの名無しさん
2006/11/06(月) 15:53:28>>988
xが負の場合どうするの?
0990デフォルトの名無しさん
2006/11/06(月) 16:01:51int i,j;
i=x;
j=x;
while(i&&j){
i=inc(i);
j=dec(j);
}
return i+j;
}
0991990
2006/11/06(月) 16:07:12読み返してみると982がやってることとほとんど変わらないのが悲しい
0992889
2006/11/06(月) 17:59:19助かります。
0994デフォルトの名無しさん
2006/11/06(月) 20:13:350995デフォルトの名無しさん
2006/11/06(月) 20:18:46級数展開でもニュートン法でもやりかたはよりどりみどり
0996デフォルトの名無しさん
2006/11/06(月) 20:21:10pow( x, 0.5)
0997デフォルトの名無しさん
2006/11/06(月) 20:31:27ニュートン法の学習的実装。
#include <stdio.h>
#define eps 0.00000001
double myroot(double x) {
double ym = x, yn;
do {
yn = ym;
ym = 0.5 * (yn * yn + x) / yn;
} while (ym - yn > eps || yn - ym > eps);
return ym;
}
int main(void) {
printf("%.8f\n", myroot(2));
return 0;
}
0998デフォルトの名無しさん
2006/11/06(月) 20:51:000999デフォルトの名無しさん
2006/11/06(月) 20:52:05次こっちよ
1000デフォルトの名無しさん
2006/11/06(月) 20:52:2210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。