C/C++の宿題を片付けます 75代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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
2デフォルトの名無しさん:2006/10/19(木) 20:53:27
>>1
3デフォルトの名無しさん:2006/10/19(木) 21:41:43
4デフォルトの名無しさん: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] 期限: 無期限
5デフォルトの名無しさん:2006/10/19(木) 22:40:13
double kansuu(double de, double theta, double ad)
{
  return de*tan(theta)+ad ;
}
6デフォルトの名無しさん:2006/10/19(木) 22:45:23
>>4
double be_height(double de, double theta, double ad){
theta*=M_PI/180;
return (de*tan(theta)+ad);
}
7デフォルトの名無しさん:2006/10/19(木) 23:13:32
>>4
これ、すげー難しい問題だな。
8デフォルトの名無しさん:2006/10/19(木) 23:17:02
あ、θは度か。
9デフォルトの名無しさん:2006/10/19(木) 23:21:18
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):100までの全ての素数とその個数表示
するプログラム。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: (gcc
 [3.3] 言語: (C
[4] 期限: 明日
[5] その他の制限:
10デフォルトの名無しさん:2006/10/19(木) 23:24:06
[1] 授業単元:システム学
[2] 問題文:行列の積を用いた性能評価プログラムを作成しなさい
      計算に何秒かかったのか表示し、行列の大きさは任意で変更が出来るように組むこと
[3] 環境  
 [3.1] OS: linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限: 2006年10月20日14時
[5] その他の制限: コンパイルオプションには最適化を指示する。
倍精度浮動小数点を用いること
前スレにも書き込みましたがよろしくお願いします
11デフォルトの名無しさん:2006/10/19(木) 23:27:23
こんなの出来る奴はいねーよ。
12デフォルトの名無しさん:2006/10/19(木) 23:31:49
>>9
isPrime(int n) {
int i;
for(i=2;i<n;i++)
if(n%i == 0)
return 0;
return 1;
}
13デフォルトの名無しさん:2006/10/19(木) 23:32:28
[1] 授業単元: ゼミ
[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);
14デフォルトの名無しさん:2006/10/19(木) 23:36:12
#include<stdio.h>
#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);
}
15デフォルトの名無しさん:2006/10/19(木) 23:39:35
>>10
どんな行列の積を計算して性能評価にするんだ?
16デフォルトの名無しさん:2006/10/19(木) 23:51:30
>>15
正方行列の積を計算してその計算にかかった時間と、繰り返しの回数からMflopsを求めるプログラムです。
1,2,4,8…といったように倍の大きさの行列でどのように計算の時間が変わるのか測定するのが目的です。
17デフォルトの名無しさん:2006/10/20(金) 00:05:32
18デフォルトの名無しさん:2006/10/20(金) 00:10:44
>>17
ゴテゴテしすぎてて、Mflops を求める、という用途には全然役に立たないような。
19デフォルトの名無しさん:2006/10/20(金) 00:23:17
>>13
#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;
}
20デフォルトの名無しさん:2006/10/20(金) 02:06:27
>>9を見てちょっとやってみた
#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;}
21デフォルトの名無しさん:2006/10/20(金) 08:39:31
printf("2,3,5,7,11,…
22デフォルトの名無しさん:2006/10/20(金) 09:09:17
>>20
main()の7割が引数チェック…
そこまで丁寧に作らなくても#defineでいいんでね?
23デフォルトの名無しさん:2006/10/20(金) 09:31:52
>>20を改悪してみた。

#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;}
24デフォルトの名無しさん:2006/10/20(金) 10:01:31
>>23 の is_prime を変更してみた
int 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;}
25デフォルトの名無しさん:2006/10/20(金) 10:52:25
>>14>>19
どうもありがとうございます。参考までに>>14はどこがおかしいのですか?
26デフォルトの名無しさん:2006/10/20(金) 11:06:36
前スレの942です流れてしまったようなのでもう一度お願いします
David 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);}}

このプログラムを実行するとコマンドラインの引数すべての部分集合を表示することができるらしいのですが
どうして表示されるのか解説をしろという問題なのですが
どうしてなるのかわかる方はいらっしゃいませんか?
解説できる方がいたら解説をお願いします。
27デフォルトの名無しさん:2006/10/20(金) 11:09:38
>>25
^ はC言語では XOR の意
28デフォルトの名無しさん:2006/10/20(金) 11:37:24
>>26
mainの再帰ってありなのか…おもしろいな
解説者がすぐ現れるかもしれんけど面白そうだからじっくり考えてみるか
2928:2006/10/20(金) 12:34:28
#include <stdio.h>
int 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--;
}
3028:2006/10/20(金) 12:35:46
>>29>>26のプログラムを改変していろいろ出力してみたもの。
(環境によっては0とOの違いが見分けづらいので、変数名も変えた)

O[Q][0]^=0X80で値を負にすることによって、出力するかどうかのフラグにしている。
XORなので再び実行されると元に戻るのもポイント。

今は時間がないので、詳細はまた後で。
31デフォルトの名無しさん:2006/10/20(金) 13:47:53
[1] 授業単元:ソフトウェア実験演習
[2] 問題文(含コード&リンク):プロセススケジューリングのシュミレータ
スケジューリング(FCFS,SPT,ラウンドロビン)*分布(一様,指数,超指数)の9通り。
[3] 環境
 [3.1] OS: (Linux
 [3.2] コンパイラ名とバージョン: (gcc
 [3.3] 言語: (C言語
[4] 期限: ([2006年11月24日13:00まで]
[5] その他の制限: なし
宣しくお願いします。
32デフォルトの名無しさん:2006/10/20(金) 16:19:24
日本語でおk
33デフォルトの名無しさん:2006/10/20(金) 19:51:22
>>28
ちなみにC++ではmainの再帰が禁じられた。
グローバルなオブジェクトの初期化との兼ね合いのようだ。
34デフォルトの名無しさん:2006/10/20(金) 20:51:00
>>31
これだけの情報でどうしろというのか
35デフォルトの名無しさん:2006/10/20(金) 23:23:58
>>10
>>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;
}
36デフォルトの名無しさん:2006/10/20(金) 23:47:16
>>31
超指数分布の意味が分からなかった。超幾何分布じゃないよね?
分布ってなにの分布?
プロセスの発生頻度?プロセスの所要時間?両方?その他?
期待してる入力と出力が分からない。

下のコードでもおk?
#include<stdio.h>
int main(void){
printf("シミュレーション開始\n");
printf("シミュレーション終了\n");
return 0;
}
37デフォルトの名無しさん:2006/10/21(土) 00:14:53
>>17
>>35
説明不足だったり、お礼が遅れてしまいすいません。
ありがとうございました。
とても参考になります。
38デフォルトの名無しさん:2006/10/21(土) 00:17:50
[1] 授業単元:プログラミング
[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] その他の制限:標準ライブラリのみを使用すること。
39デフォルトの名無しさん:2006/10/21(土) 00:21:54
ほらよ
printf( "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" ) ;
40tanomu:2006/10/21(土) 00:33:00
[1] 授業単元:計算物理
[2] 問題文(含コード&リンク):キーボードからL(一遍の長さ)、p(0から1までの数)
を入力し、pの確立でL*Lのグリッド内に木を詰めなさいと。(森を作るのね)
それで、左淵にある木、すべてに火を付けて、燃えてる木がなくなるまでシミュレート
し、その時間を計算しろっての。火がついた木は次のステップで灰になって、その木の
近隣にある木(縦と横)に火がうつるワケです。で、近隣に火を移す木がなくなるまで
プログラムは実行されるのだ。
[3] 環境  
 [3.1] OS:Windows,Mac,Linux、どれでもよか
 [3.2] コンパイラ名とバージョン: (gcc
 [3.3] 言語: (C言語
[4] 期限: ([出来れば来週]
[5] その他の制限: 出来れば 下のプログラムに近い物をお願い。
シミュレーション自体は上手くいってるっぽいけど、ステップをちゃんと
計算してくれないのだ
41tanomu:2006/10/21(土) 00:35:29
//forest fire problem

#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));
42tanomu:2006/10/21(土) 00:35:59
output1=fopen("before.dat","w");
output2=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
}
43tanomu:2006/10/21(土) 00:37:12
while(n>0){
n=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
44デフォルトの名無しさん:2006/10/21(土) 00:47:18
>>37
お礼はおっぱいでいいよ。
45デフォルトの名無しさん:2006/10/21(土) 00:50:06
>>38
#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;
}

注意: スペースは全角を使っているから、半角に変換してね
46デフォルトの名無しさん:2006/10/21(土) 01:15:28
>>40
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2801.txt
これでいいはず・・・
print関数は確認のために使っただけだから消しといてくれ
47デフォルトの名無しさん:2006/10/21(土) 09:54:50
>>40 森を作る部分こうしたほうが良くね?
memset(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
48デフォルトの名無しさん:2006/10/21(土) 10:10:34
>>40
何がいけないかというと

状態が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++すること。
49デフォルトの名無しさん:2006/10/21(土) 10:10:45
for(i=1;i<L-1;i++){

1〜L-2 ?
50デフォルトの名無しさん:2006/10/21(土) 10:16:13
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
for(k=0;k<4;k++) {
    tree[i+dx[k]][j+dy[k]];
}

このやり方の方が多少簡潔に書ける
51デフォルトの名無しさん:2006/10/21(土) 11:32:12
struct _pos{
int 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];
}
の方が佐賀
52デフォルトの名無しさん:2006/10/21(土) 11:39:25
intの配列へのptrはどう書きますか?
int * arr[]はintのptrの配列ですよね?
53デフォルトの名無しさん:2006/10/21(土) 11:41:59
int (*parr)[4];w
54デフォルトの名無しさん:2006/10/21(土) 11:55:00
int **ptr
55デフォルトの名無しさん:2006/10/21(土) 11:57:48
適度な難易度の宿題キボン

おまけ #define 無しで顔文字プログラム
main(){int i,l,o,P;
l^o^l/
(o-o)?
:-P
;
}
56デフォルトの名無しさん:2006/10/21(土) 12:04:24
[1] 授業単元:プログラムミング応用
[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);
|
|後略
|
これが動くのに
5756:2006/10/21(土) 12:04:54
#include <stdio.h>
#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);/*ここでセグメンテーションフォルト*/
|
|後略
|
これがセグメンテーションフォルトになってしまう理由がわかりません。
5856:2006/10/21(土) 12:08:53
同様に
void 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;
}
|
|後略
|
これが動くのに
59デフォルトの名無しさん:2006/10/21(土) 12:09:41
>53, 54 ありがとうございます。というか、
intのptrの配列がこれですね→int (*parr)[4];
intの配列へのptrはこんなん?→int *(arrp [4]);←あり?
実際にはptrのptr→int **ptr で考えるかと思いますが、理屈的なところで。
6055:2006/10/21(土) 12:09:41
main(){int l,o,P,w;
l^o^l/
(o-o)?
l^w^l
:-P
;}
6156:2006/10/21(土) 12:12:13
#include <stdio.h>
#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でセグメンテーションフォルトにな

ります。
なぜセグメンテーションフォルトになるのか、どう対処したらよいのか教えてください。
62デフォルトの名無しさん:2006/10/21(土) 12:21:12
>>56
エスパー回答
arr の領域を確保せずに使用して、変なアドレスを破壊しようとしてる。
おそらくセグメンテーションフォルトはあなたが思っているところでは起こっていない。

コードを全て晒してください。
63デフォルトの名無しさん:2006/10/21(土) 12:39:49
>>56
printf("abc") を呼んだからといって、
すぐに "abc" が画面に表示されるわけではない。
>>56 は、そこまでは表示されていたから、
その直後でセグメンテーションフォルトが起こったと
思っているのだろう。

恐らく、
|
|後略
|
のところにバグがある。
64デフォルトの名無しさん:2006/10/21(土) 12:40:21
>>56
>>62と同じ意見
後略の部分をコメントアウトしても落ちるかどうか位のチェックはしたほうがいい
65デフォルトの名無しさん:2006/10/21(土) 13:06:23
char name[256];
>scanf("%s",&name);
配列の先頭のポインタのポインタを渡してる気がする
66デフォルトの名無しさん:2006/10/21(土) 13:10:41
>>65
そこも確かに意味としては間違ってる
でもこのコードだと値としては &name[0]=name=&name
になると思う。
6756:2006/10/21(土) 13:13:45
ご教授ありがとうございます。
確かにその後をコメント化したところ正常に終了しました。
が、どこが原因なのかが全くわかりません。

1のロダが死んでるみたいなんで別ロダに上げたソース↓
http://kossie.run.buttobi.net/cgi-bin/up/src/kos0002.txt
68デフォルトの名無しさん:2006/10/21(土) 13:21:24
>>56
for(i=0;i<num;i++){
fscanf(fp,"%d",arr[i]);/*配列にデータを格納*/
}
arr[i] の前に & が無い
69デフォルトの名無しさん:2006/10/21(土) 13:26:13
>>66
そうだったのか
無知ですまんかった
70デフォルトの名無しさん:2006/10/21(土) 13:27:45
>>67
リンクエラーになってる
71デフォルトの名無しさん:2006/10/21(土) 13:29:12
>>67
ソースがもう見れない

>>68がもう答えだしてるみたいだけど、
コメントアウトして正常動作したなら、そのコメント部分の処理が怪しいだろう
1行ずつ削るなり増やしていけば大抵バグは見つかる
72デフォルトの名無しさん:2006/10/21(土) 13:31:13
>>69
このコードでのセグメンテーションフォルトの原因にはなりませんが、
誤作動の元になるので、危険なことには変わりないです。
(name を動的割り当てに変更したときとか)

要するにバグですね
73デフォルトの名無しさん:2006/10/21(土) 13:45:06
>>59
逆。
int (*parr)[4];とすると、parrはint [4]へのポインタ。
int *(arrp[4]);とすると、arrpはint *の配列(4要素)。
int (*parr)[4];という宣言は、括弧にしたがって、
「parrをまず*で逆参照し、その結果に対して[]でwアクセスすると、intが得られる」
と読むべし。
74デフォルトの名無しさん: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__ マクロが使えるコンパイラならもっと便利にできるよ
75デフォルトの名無しさん:2006/10/21(土) 14:39:29
>>73
ありがとうございます。こんな理解でいいですね?
#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)++);
}
}
76デフォルトの名無しさん:2006/10/21(土) 14:53:15
>>75
良くない。
>int *parr=arr; //pointer of array
これではparrはintへのポインタだし、
arrではなくarrの先頭要素を指している。
arrへのポインタが欲しいなら、
int (*parr)[5] = &arr;
とするw。
77デフォルトの名無しさん:2006/10/21(土) 15:12:13
>>76 ありがとうございます。他もぼろぼろでした。ごめんなさい。
int arr[5];のとき、arrと&arrの区別が付きません。中身は両方とも
arrの先頭アドレスかと思います。
arr=&(arr[0])で配列の先頭要素へのポインタであり、&arrはarrそのもの
へのポインタということですか?
78デフォルトの名無しさん:2006/10/21(土) 15:27:21
だからね、そろそろありきたりな問題とその模範解答を記述したサイトでも作ってくれよ
あれほど言っているでしょうに?
79デフォルトの名無しさん:2006/10/21(土) 15:31:56
>>78
がんばれ
80デフォルトの名無しさん:2006/10/21(土) 15:33:59
ttp://www9.plala.or.jp/sgwr-t/index.html

ttp://www9.plala.or.jp/sgwr-t/c/sec10-2.html
配列とポインタ


こことかいいんじゃないか?
81デフォルトの名無しさん:2006/10/21(土) 15:50:16
>>78, 79 安易に書き込んですいませんでした。
>>80 ありがとうございます。修行します。
82デフォルトの名無しさん:2006/10/21(土) 15:55:00
>>77
>int arr[5];のとき、arrと&arrの区別が付きません。中身は両方とも
>arrの先頭アドレスかと思います。
機械の観点から見れば同じ値だけど、C言語から見ると型が違うので解釈も違う。
例えば、arr + 1はarrの第二要素を指すポインタだけど、
&arr + 1は違うところ(具体的には、arrをint [5]の配列(つまり配列の配列)の一要素とみなして
その次の要素)を指す。

>arr=&(arr[0])で配列の先頭要素へのポインタであり、&arrはarrそのもの
>へのポインタということですか?
その通り。w
83デフォルトの名無しさん:2006/10/21(土) 16:53:18
>>77 ありがとうございます。
#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です。)

#うざく感じているみなさん、大変申し訳ありません。
#もう少しなので、多めに見てくださいますよう、お願いします。
84デフォルトの名無しさん:2006/10/21(土) 17:01:44
>>83
それはたぶん処理系がおかしい。
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
85デフォルトの名無しさん:2006/10/21(土) 17:16:40
>>83
どうも腑に落ちないと思ったら、処理系の問題とは。
cintがそんな不細工とは思えないので、設定ミスかな?
ちゃんとしたコンパイラで勉強するようにします。
> インクリメントの中での左辺値が無効です
++arrはNGということですね(arrのポインタならOK)?
ありがとうございました。
86デフォルトの名無しさん:2006/10/21(土) 17:56:03
[1] 授業単元:計算科学
[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
を利用して作ってください
8786:2006/10/21(土) 17:56:45
この確率によるステップ数3のランダムウォークを, 指定した回数だけ繰り返し,
到達地点の座標 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
と出力するようなプログラムを作ろう. (上のサンプル平均とサンプル分散の値は正しくありません。)
88デフォルトの名無しさん:2006/10/21(土) 17:59:41
>>86
yってなに?
1/4の確率でx座標が-1、3/4で+1ってこと?
89デフォルトの名無しさん:2006/10/21(土) 18:37:15
[1] 授業単元:プログラム
[2] 問題文:
整数型intは32ビットの内部表現をもつ。どの範囲の整数まで表現できるか
調べなさい。
その上で、範囲外の結果となる演算をしたときにどのような値が出力されるのか。
そしてなぜ、そのような値が出力されるのか、
コンピュータの計算原理をふまえて説明しなさい。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VC++ 6.0
 [3.3] 言語:C++
[4] 期限:2006年10月23日まで
[5] その他の制限: なし

コンピュータの計算原理というのがよくわからなくて…
お願いします。
9089: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] その他の制限: なし
91デフォルトの名無しさん:2006/10/21(土) 19:10:33
前から思ってたんだが宿題スレってVC++6.0を使ってるやつが多いような気がするんだが何でだ?
学校がくれるのか?
教えて学生さん><
92デフォルトの名無しさん:2006/10/21(土) 19:16:28
アカデミックパックってやっすいのさー
93デフォルトの名無しさん:2006/10/21(土) 19:17:43
>>92
それは知ってる
俺もアカデミックですから
Amazonは年齢認証なしに買わせてくれたし・・・
でも6.0って今売ってるの?
94デフォルトの名無しさん:2006/10/21(土) 19:48:14
学校だと何年かに一回しかマシンやソフトを買い換えないからVC++6.0でも不思議はない
あとはVC++6.0ってアクティベーションないんじゃないかな、古いし
95デフォルトの名無しさん:2006/10/21(土) 19:57:31
つまり割れ率も高いと、こう言いたいわけですね?
96デフォルトの名無しさん:2006/10/21(土) 21:24:54
>>89
#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;
}
97デフォルトの名無しさん:2006/10/21(土) 21:29:48
>>90
試しに 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);
}
98デフォルトの名無しさん:2006/10/21(土) 21:58:15
>>86
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2802.c
一応やってみたけど、根本的にやり直したほうが…
99デフォルトの名無しさん:2006/10/21(土) 22:02:11
ああ

100デフォルトの名無しさん:2006/10/21(土) 22:47:37
[1] 授業単元: プログラミング演習
[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] その他の制限: お願いします
101デフォルトの名無しさん:2006/10/21(土) 22:52:09
[1] 授業単元:プログラミング演習 II
角度    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
なんかしっくり来ないです…
102デフォルトの名無しさん:2006/10/21(土) 22:58:18
>>100
何そのcase0個の方が手っ取り早い問題(;´Д`)
103デフォルトの名無しさん:2006/10/21(土) 22:58:34
>>101
そのソースコードは何?

「しっくりこない」って何?
104デフォルトの名無しさん:2006/10/21(土) 23:07:30
105デフォルトの名無しさん:2006/10/21(土) 23:08:01
>>103
スルーしろ
106ワンダフル魁 ◆F9pJmydzS. :2006/10/21(土) 23:14:13
これがうまく実行できないのですが、問題点を教えてください
#include<stdio.h>
int main(void)
{
int ch;
printf("10進数を入力してください。\nCtrl+Zで処理を終了します。\n");
scanf("%d",&ch);
107ワンダフル魁 ◆F9pJmydzS. :2006/10/21(土) 23:15:19
while(ch!=EOF) {
switch(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;
}

108デフォルトの名無しさん:2006/10/21(土) 23:17:05
>>106
printf("10進数を入力してください。\nCtrl+Zで処理を終了します。\n");
scanf("%d",&ch); ←ここ
109デフォルトの名無しさん:2006/10/21(土) 23:19:22
>>106
printf("10進数を入力してください。\nCtrl+Zで処理を終了します。\n");

printf("10進数を入力してください。\n-1で処理を終了します。\n");
110ワンダフル魁 ◆F9pJmydzS. :2006/10/21(土) 23:24:29
>>108
>>109
ありがとうございます
111ワンダフル魁 ◆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);
112デフォルトの名無しさん:2006/10/21(土) 23:32:26
全く調べようとしないんだね
113ワンダフル魁 ◆F9pJmydzS. :2006/10/21(土) 23:36:02

scanf("%c",&word2);

}

printf("等しい文字列を入力しました。");
return 0;
}
114デフォルトの名無しさん:2006/10/21(土) 23:41:22
皆さんのスルー力が試されております。
115デフォルトの名無しさん:2006/10/21(土) 23:45:03
http://0xcc.net/blog/archives/000133.html
これだろ?スルーできなかったww
116デフォルトの名無しさん:2006/10/21(土) 23:49:12
全力で答えてやるぜ!
printf("異なる文字列を入力しました");

printf("異なるアドレスです\n");
117デフォルトの名無しさん:2006/10/21(土) 23:50:38
永遠を感じるプログラムだな
118デフォルトの名無しさん:2006/10/21(土) 23:53:03
ずっとスルーカだと思ってた・・・
119デフォルトの名無しさん:2006/10/21(土) 23:53:52
「えいえんはあるよ」
彼女は言った。

「ここにあるよ」
確かに、彼女はそう言った。
永遠のある場所。
…そこにいま、>>113は立っていた。
120116:2006/10/21(土) 23:54:07
要するに問題っていうのは期待した状態と違うって事だろうけど、
期待している状態が分からない以上適当に答えるか質問するかスルーしかない。

こんなときオレは全力で答える。(分かる範囲なら)
121デフォルトの名無しさん:2006/10/21(土) 23:55:53
>>120
 エスパーでがんがれ!


・・・俺はやらん。
122デフォルトの名無しさん:2006/10/22(日) 00:00:24
質問テンプレ以外にはあまり首をつっこまなくてもいいんじゃね?
123デフォルトの名無しさん:2006/10/22(日) 00:17:09
>>111
#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;
}
124デフォルトの名無しさん:2006/10/22(日) 00:28:45
無料でC言語ができる環境が欲しいのですが、
初心者向けのわかりやすいやつを教えてください
125デフォルトの名無しさん:2006/10/22(日) 00:31:27
12656:2006/10/22(日) 00:35:18
学校から帰ってきました。
ありがとうございました
127デフォルトの名無しさん:2006/10/22(日) 01:31:05
[1] 授業単元:プログラミング
[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]その他制限事項:ポインタ使用不可
お願いします
128デフォルトの名無しさん:2006/10/22(日) 01:47:50
>>127
バッファオーバーフローの脆弱性があります

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];
}
129デフォルトの名無しさん:2006/10/22(日) 01:55:15
[1] 授業単元:プログラミング
[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] その他の制限:標準ライブラリのみ使用

どうしてもできません…よろしくお願いします><
130デフォルトの名無しさん:2006/10/22(日) 01:55:53
これは配列の[ ]が内部ではポインタとして解釈されているのにってギャグなのか
131デフォルトの名無しさん:2006/10/22(日) 02:14:04
>>130
stdio.hとかの中でもポインタ使ってるだろうから・・・
132デフォルトの名無しさん:2006/10/22(日) 02:52:59
>>129
行列形式って何?
133デフォルトの名無しさん:2006/10/22(日) 03:07:21
>>129
多分4行8列の行列に読み込んで画面に[ ]のような記号を外に付けて表示しろって
事だと思うけど、データが3行分しかないよ?
13440:2006/10/22(日) 04:57:52
>>46~>>51
ありがとうございます。>>48の明確な解説ありがとさんでした。
ここの人たちはずばらしいですね。
135デフォルトの名無しさん:2006/10/22(日) 05:08:32
>>129を見てちょっとやってみた。
nyuryoku.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;}
136135:2006/10/22(日) 05:39:14
>>135の訂正
最後から2行目k=0をk=1に訂正
137135:2006/10/22(日) 09:40:32
しかも転置じゃないよなorz
138135:2006/10/22(日) 09:52:46
>>135の訂正
最後から3行目m=sqrt(count)をm=countに
最後から2行目j*row[i]をj*column[i]に
最後の行j*row[i]をj*column[i]に
すればなんとかいけるかな
139デフォルトの名無しさん:2006/10/22(日) 10:10:02
スタックの内容の型を構造体にすることはできますか?
さらに言うと(pop関数に戻り値が書かれているので)、構造体を
戻り値にするのは不可能ですよね?
文法書を読んでも書かれていないので混乱しています。
これが解らないと宿題にとりかかれないので教えてください。
140デフォルトの名無しさん:2006/10/22(日) 10:14:41
141デフォルトの名無しさん:2006/10/22(日) 10:27:30
>>139
> 文法書を読んでも書かれていないので混乱しています。

規格には書かれている。
文法書ってなんや?
142デフォルトの名無しさん:2006/10/22(日) 10:27:33
>140
問題以前の話だけど、ここで聞くのが適切かと思ったんだよ
143デフォルトの名無しさん:2006/10/22(日) 10:28:41
>141
C言語の参考書のことです
144デフォルトの名無しさん:2006/10/22(日) 10:34:43
>>143
言語が違うんじゃ?
Perlじゃない?
145デフォルトの名無しさん:2006/10/22(日) 10:36:22
146デフォルトの名無しさん:2006/10/22(日) 10:42:30
>>139
できますよ。
std::stack<std::pair<int,int> >
147デフォルトの名無しさん:2006/10/22(日) 10:57:55
>>139
> スタックの内容の型
初耳の表現
型有/無に関わらず、”スタック”は抽象構造だぞ?
それともC++にはスタック型という唯一の型があったのか?
148デフォルトの名無しさん:2006/10/22(日) 11:18:54
>>147

見当違いの予感。
唯一の型じゃないからそこに入れられるものの型について質問してんじゃないの?
149147:2006/10/22(日) 12:26:03
>>148
うーん、そこまで考えてもいいのかな?
”スタック”が何を指してるのか分からない限り話が進まないよね
もしかしたら>>139はwindowsのtlsの話してるかもしれないし、
stlのstack<T>かもしれないし、自前のstackかもしれないし。

さすがにリアルワールドの積荷の話じゃないだろうけど
150139:2006/10/22(日) 12:41:19
みなさん有難うございます。結論から申し上げるとVisualC++のバグ?のようですorz

struct 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
その通りです
151デフォルトの名無しさん:2006/10/22(日) 12:52:14
>>150
良ければソース見せてもらえない?
152デフォルトの名無しさん:2006/10/22(日) 12:57:56
そろそろエスパーの能力が必要だとこのスレを見ている誰もが感じているに違いない
153デフォルトの名無しさん:2006/10/22(日) 12:59:22
>>150
既視観があるのう。
それってオライリーの入門C++?
もしそうなら記述のソースがソースが古いのかもしれまへん。

その本でサンプルファイル、
gcc3だと配布されてるサンプルファイルのコンパイルがうまくいかない
(ソース中のtypedef int boolがC++ヘッダ内で既に定義されとるわエラーとかがでたりする。コメントアウトすればOK)
154デフォルトの名無しさん:2006/10/22(日) 13:00:51
VC6のSP3より前だとreturnにデクリメントとか書くとコード生成がバグるってのは聞いたことあるけど。
もしかしてVC6?
155139:2006/10/22(日) 13:13:07
>151
スタックの動作を確かめるためだけのプログラムです。

#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;
}
156139:2006/10/22(日) 13:14:46
続き

elementtype 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);

}
157139:2006/10/22(日) 13:15:58
結果(VisualC++)
1 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です・・・・・
158デフォルトの名無しさん:2006/10/22(日) 13:32:30
>>157
OS:Windows XP
コンパイラ:VC++ Toolkit 2003
オプション:-Za -O2(-Microsoft言語拡張機能off,-コード最適化)
それと同じコードをコンパイルしてコンソールから入力してみたけどとくにエラーなく
157のとおりの結果がでる。

オプション:-O2(-コード最適化)
でもおんなし。
なぞス
159デフォルトの名無しさん:2006/10/22(日) 13:42:31
>158
( ̄□ ̄;)!!

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

こうならなきゃおかしいですよね。
160デフォルトの名無しさん:2006/10/22(日) 13:47:18
VC6のSP3前のコード生成バグと思ってたけど>>158でも再現するということは違うのかなぁ。
ちなみに自分のとこのvc,gcc,dmcでは>>159と同じ結果が出ました。
161デフォルトの名無しさん:2006/10/22(日) 14:00:03
BCCでの>>139-140の実行結果は>>159になったよ。
コンパイラの性格なんじゃない?
前置演算子に変えてみては?
162デフォルトの名無しさん:2006/10/22(日) 14:00:56
俺も、VC++ 2005 EEでオプション無し、/O2、/Za /O2、/Ox (最大限の最適化)を試したが全て159と同じになった。
またVC++ .NET 2003 Pro SP1で、/Za /O2、/Oxを試したが、やはり159のとおりになった。

なお、共にコマンドプロンプトから実行した。
163158:2006/10/22(日) 14:02:24
あ、すまん。ここ読み飛ばしてたw
>>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

164158:2006/10/22(日) 14:03:42
デバグプリント文(追加開始ー追加終了まで):
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);
/* ここ追加開始 */
if(suuretu.top==3)
break;
/* ここ追加終了 */
}
test=pop(&suuretu);
printf("test.x=%d test.y=%d\n", test.x, test.y);
}
165デフォルトの名無しさん: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 を指定してコードをコンパイルしたときにアクセス違反となっていました。
166デフォルトの名無しさん:2006/10/22(日) 15:24:06
自分はアメリカの大学に行ってて、専攻はプログラミングじゃないんですけど
C++が必修で今学期初めてプログラミングの授業をとりました。
初心者で何もわからないのでどうか助けて下さい。
[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 を使用する事
167139:2006/10/22(日) 15:29:07
やはりVC6のバグが原因だったようです。

>165
おかげさまでサービスパックをインストールしたら直りました。
ですが、構造体変数の宣言をmain内でしようとするとgccでは出ないエラーが出るので、もう好きになれません。
168デフォルトの名無しさん: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;
};
169デフォルトの名無しさん:2006/10/22(日) 15:36:21
続き:
int 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;
170デフォルトの名無しさん:2006/10/22(日) 15:37:44
続き2:
{
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);
171デフォルトの名無しさん:2006/10/22(日) 15:38:17
続き3:
if (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;

}
172デフォルトの名無しさん:2006/10/22(日) 16:00:12
[1] プログラミング
[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] 途中までやったんで埋める形でお願いします
途中までやったぶんは次書きます
173129:2006/10/22(日) 16:00:33
>>135

実際に動かしてみたところ、様々な行列表示にはなるのですが、
>>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のプログラムをどのようにすれば、
表示させることができるのでしょうか?
教えて君で本当に申し訳ありません。
174172:2006/10/22(日) 16:01:44
#include<stdio.h>

int 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;
}

よろしくお願いします
175デフォルトの名無しさん:2006/10/22(日) 16:05:56
>>174
scanf("%d", &t); な

if(t == 50*x+80*y+120*z)
176172:2006/10/22(日) 16:15:41
#include<stdio.h>

int 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;
}

これであってますか?
177デフォルトの名無しさん:2006/10/22(日) 16:20:53
とりあえず>>168をベースに適当に書いた。
#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;
/*
178デフォルトの名無しさん: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;
}

179デフォルトの名無しさん:2006/10/22(日) 16:23:12
>>176
まあ、やりたいこととしては合ってるんだが…それくらい自分でテストしようよ

ちなみにそのままだとコンパイル通らないぞ
180172:2006/10/22(日) 16:25:48
>>179
"が多かったですね。
自分でテストできるの忘れてました。ありがとうございました。
181デフォルトの名無しさん:2006/10/22(日) 16:34:36
[1] 授業単元: プログラミング
[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] その他の制限: どんな改良をしたか書いていただければ幸いです。

どうか、よろしくお願いします。
182デフォルトの名無しさん:2006/10/22(日) 16:52:53
おまえらprintfデバッグをやるときにどんな文字列を表示させてる?俺はいつもunkoって表示させてる。
183デフォルトの名無しさん:2006/10/22(日) 17:01:14
ひさびさに面白そうな問題が。
>>181
>L=10, n<=1のとき,すなわち,配列の添字の範囲10以内では,1もしくは2個の
>データの値の昇順が保証されない場合に,
この条件をもうちょっと厳密に頼む。
184デフォルトの名無しさん:2006/10/22(日) 17:09:25
>>182
そこで使っている変数の値を表示させることが多い。
その必要がなければ、関数名や"enter"/"leave"とか。
185デフォルトの名無しさん:2006/10/22(日) 17:27:05
前スレ683をC言語でやってくださる方いませんか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2764.txt
186デフォルトの名無しさん:2006/10/22(日) 17:27:56
>>182
ほぼ >>74 と同じファイル名と行番号+関数名
187デフォルトの名無しさん:2006/10/22(日) 17:33:49
>>185
前スレ684以降にあるじゃん?
188デフォルトの名無しさん:2006/10/22(日) 18:32:09
>>181
実装は面倒なのでアイデアだけ.n ≦ 1 ならこれで動くはず.

・二分探索を行う.ただし端点の要素は三つくらいの要素の
 中間値でも取って昇順条件を外れた要素を踏まないようにする.
・二分探索で範囲を絞りきったときの状態は
 1. 目的の値が見つかった → 終了.
 2. 昇順条件には従うが目的の値は見つからない → 存在しない.
 3. 昇順条件に反する値が見つかった → その値をキーにして再度二分探索.


一般の L, n については考えてないけど,O(n log L) くらいがある気はする.
189デフォルトの名無しさん:2006/10/22(日) 19:01:24
>>188
>一般の L, n については考えてないけど,O(n log L) くらいがある気はする.
なんでLの増加関数?
Lが小さいほど頻繁な交換が許されるので
より時間が掛かるようになるんじゃないか?
190デフォルトの名無しさん:2006/10/22(日) 19:47:58
>>189
L はリストの長さだから,全く交換が許されないとしても O(log L) はかかる.

L が小さいときは全然単調じゃなくなって線型探索したほうが早くなる(かもしれない)
けど,O 表記は漸近的に大きいときの挙動をあらわすので関係ない.
191デフォルトの名無しさん:2006/10/22(日) 20:07:27
>>190
>L はリストの長さだから
俺は違うように読んだ。正確な事は読み取れないけど、例えば
「任意の長さLの部分列について、n組が交換されている」
とか。これだとそんな列は存在し得ないので正しい解釈じゃないけど。
それに、>>180ではL=10でデータ数は100個と言っている。
192デフォルトの名無しさん:2006/10/22(日) 20:25:47
>>191
なるほど,再読すると 191 のように読めた.俺の誤読っぽい.

やっぱり細かいところがわからんので 181 は再説明求む.
193デフォルトの名無しさん:2006/10/22(日) 21:03:11
全然関係ないんだけど,や.の句読点になってるのは
何のソフト使ってるのか教えてくれないか?
翻訳ソフトだとしたら高機能っぽいので興味がある。
194デフォルトの名無しさん:2006/10/22(日) 21:07:46
>>193
翻訳?
MSIMEで「、」「。」の変換候補に出てくるけど?
195デフォルトの名無しさん:2006/10/22(日) 21:08:53
>>193
皮肉だと思うがマジレス。
理系の人は日常的に使う。論文などでもそれが普通。
MS-IMEでも設定で句読点変えれる。

俺は文系だけどな!
196デフォルトの名無しさん:2006/10/22(日) 21:21:38
[1] C言語プログラミング
[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] その他の制限: 反復構造、ソート、探索、ポインタ、ファイル、構造体
197デフォルトの名無しさん:2006/10/22(日) 21:26:22
>>196です。

196の問題の解く部分は
人口が最大の区と最小の区の、名前と人口。
まででも構いません。

面積が最大の区と最小の区の、名前と面積。と
人口密度が最大の区と最小の区の、名前と人口密度。
は、前者の問題を応用して自分でやります

よろしくお願いします
198デフォルトの名無しさん:2006/10/22(日) 21:41:05
>>193
MS-IMEを始めとして、多くの日本語IMEは句読点に何を使うか、,と。.の組み合わせを設定できる。
たとえば,.を使用するように選んだ場合、キーボードの、。を叩くと変換するまでもなく直接,.が入力される。

スレ違いすまん。
199デフォルトの名無しさん:2006/10/22(日) 21:44:20
いや、IMEで設定するのは数字のあとに.や,にするにしておけばいいことじゃん
日本語のあとじゃないだろ。
200デフォルトの名無しさん:2006/10/22(日) 21:48:28
>>199
見当違いの予感
201デフォルトの名無しさん:2006/10/22(日) 21:49:22
わざわざ,や.に設定する意味が分からない。
202デフォルトの名無しさん:2006/10/22(日) 21:52:38
203デフォルトの名無しさん:2006/10/22(日) 21:53:01
>>201
別に、や。である必要もない。
それぞれの分野での習慣。
204デフォルトの名無しさん:2006/10/22(日) 21:54:17
、や。は文として必要。
数字の後の,や.以外での必要性が分からない。
205181:2006/10/22(日) 21:59:30
>>188
具体案ありがとうございます。

>>183,>>192
100個の範囲の中から、10個見たとき昇順でない要素があると言ってましたが、
問題文その物のようです。
これ以上細かなことは聞いてないんです・・・
206デフォルトの名無しさん:2006/10/22(日) 22:05:51
1...100のうち任意に取り出した、連続した10個ってことなんだろうか
207デフォルトの名無しさん:2006/10/22(日) 23:41:00
[1] 授業単元:コンピューター実習
[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] その他の制限:特になし

よろしくお願いします
208デフォルトの名無しさん:2006/10/22(日) 23:55:23
>>207
#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);

209デフォルトの名無しさん:2006/10/22(日) 23:59:50
>>208
そりゃ文字列操作じゃなくてメモリ操作だろ
pの例外とか考えにゃならん
けど良く頑張った
210デフォルトの名無しさん:2006/10/23(月) 00:01:27
>>208
memmoveの引数、一番目と二番目が逆じゃね。
211デフォルトの名無しさん:2006/10/23(月) 00:01:41
>>209
pの例外?
212デフォルトの名無しさん:2006/10/23(月) 00:04:06
>>211
str_ins(a,-1,b);
とか出来るけど、おかしいよね
213デフォルトの名無しさん:2006/10/23(月) 00:04:56
>>211
strの範囲外をpが指してる時とかじゃね?
まぁ俺は変なデータを渡す奴が悪い、そんなの知らん。という主義だけど。
214181:2006/10/23(月) 00:06:54
>>206
取り出すのではなく、1〜100までの中の任意の連続した10個の中に
昇順ではない並びがある時といった感じだったと思います。
昇順ではない箇所はいくつかというのは指定されていなかったと思うので、
拡大すれば1〜100のなかで1箇所だけ順序が違うけど2分探索しろ ということだと思います。
215デフォルトの名無しさん:2006/10/23(月) 00:11:51
[1] プログラミング
[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でこんなん
@@@@@@@@
@@@@@@@@
@@@@@@@@
@@@@@@@@
@@@@@@@@
よろしくお願いします
216デフォルトの名無しさん:2006/10/23(月) 00:11:56
>>212
>>213
負の値はさすがにアレだけど、

> str_ins( 挿入先の文字列 , 挿入する位置 , 挿入文字列)

↑に従うと文字サイズ渡せないから、エラーチェックなんてどうでもいい課題なんじゃないかね?
217デフォルトの名無しさん:2006/10/23(月) 00:14:56
文字サイズ?
218デフォルトの名無しさん:2006/10/23(月) 00:15:02
>>216
まぁ人それぞれの解釈になるわな

というわけで俺は愚問でFAした
219デフォルトの名無しさん:2006/10/23(月) 00:16:06
>>217
バッファサイズでしたorz
220デフォルトの名無しさん:2006/10/23(月) 00:17:20
>>215
#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('@');
    }
}
221デフォルトの名無しさん:2006/10/23(月) 00:23:00
2数が2進数に見えた
もう寝よう…
222 ◆3zNBOPkseQ :2006/10/23(月) 00:31:46
入力した一字を判別したプログラムをif制御で作りたいのですが、下のどこが違いますか?
#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;
}
223デフォルトの名無しさん:2006/10/23(月) 00:33:51
scanf("%c",&mozi); 
224デフォルトの名無しさん:2006/10/23(月) 00:34:07
めんどうだから

int main(){
char c;
scanf("%c",&c);

とかじゃなかった?
225デフォルトの名無しさん:2006/10/23(月) 00:34:31
char mozi;
226 ◆3zNBOPkseQ :2006/10/23(月) 01:03:47
>>225
文字列でなくて一字でもcharの方がいいのですか
サンクスコ
227215:2006/10/23(月) 01:11:59
すいません、#include<stdlibh>とかはまだ使ってないです。
>>174と同じくらいの感じで出来ないでしょうか。
228デフォルトの名無しさん:2006/10/23(月) 01:44:31
>>227
#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("@");
}
}
229デフォルトの名無しさん:2006/10/23(月) 01:47:45
putchar(\n) => putchar('\n')
putchar(@) => putchar('@')
に修正
230デフォルトの名無しさん:2006/10/23(月) 02:31:20
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2806.txt

[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):50音順にソートするプログラムをつくれ。 (隣接交換)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語:C


コンパイラ通らない原因がわからないです。
お願いします。
231デフォルトの名無しさん:2006/10/23(月) 02:34:44
>>230です。
エラー文訂正します

/*
以下エラー文です。

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
*/
232デフォルトの名無しさん:2006/10/23(月) 02:37:51
strcpy使えよ
233215:2006/10/23(月) 02:38:39
228
ありがとうございました
234デフォルトの名無しさん:2006/10/23(月) 02:49:37
>>232
ありがとうw
235デフォルトの名無しさん:2006/10/23(月) 02:56:19
最近はポインタ使っちゃいけないと学校で教えてるのか…?
236デフォルトの名無しさん:2006/10/23(月) 03:45:53
馬鹿学生が多くて理解できないから
最初からポインタを教えないらしい。
237デフォルトの名無しさん:2006/10/23(月) 03:53:38
教える側がポインタを理解してないらしい
238デフォルトの名無しさん:2006/10/23(月) 05:39:32
[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
あるフォルダ(sample)の中にある画像(.jpg,.jpeg)の更新日時(作成日時?)を取得し
yyyy-mmの様にフォルダを作成し各々のフォルダに振り分けるプログラムを作成せよ。

[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 水曜日まで
[5] その他の制限:

よろしくお願いします。
239デフォルトの名無しさん:2006/10/23(月) 05:53:42
ファイルの日付だよな?
Unixシステムコールか、Win32APIのどっちで取ってくるのか
240デフォルトの名無しさん:2006/10/23(月) 06:00:13
>>239
質問者じゃねーけど、OSがWinXPなんだから、APIでいいんじゃね?w
241デフォルトの名無しさん:2006/10/23(月) 06:03:55
いあコンパイラはgccとか書いてあるしさ
学校のPCじゃLinuxだけど、うちだとWinしかないとかありうるかなーと

まぁやる気はないんだが
242238:2006/10/23(月) 06:50:30
>>239
言葉が足りなくてすみません。
Win32APIでお願いします。
JavaでLinuxは触っていますがCではXPにCygwin+gccがメインです。
243デフォルトの名無しさん:2006/10/23(月) 06:58:37
それじゃAPIじゃダメだろ。
244デフォルトの名無しさん:2006/10/23(月) 07:15:39
FindFirstFile()とFindNextFile()で作るしかなかろう。
245238:2006/10/23(月) 07:36:30
自分はCがあまり得意で無い為にこちらで聴く事にしたんです。
Win32APIだと作る事ができないんですか?

漠然と課題内容の物作って来いと言う課題だったので…。
246デフォルトの名無しさん:2006/10/23(月) 08:00:30
247デフォルトの名無しさん:2006/10/23(月) 08:01:49
>>246
わざわざありがとうございます。
自分でやってみて詰まったらまた着ますのでよろしくお願いします。
248デフォルトの名無しさん:2006/10/23(月) 08:09:03
249デフォルトの名無しさん:2006/10/23(月) 08:12:37
逐次でやりゃあオケじゃん
250デフォルトの名無しさん:2006/10/23(月) 09:29:04
>>238
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2808.c
gcc(mingw)でコンパイル・リンク・動作確認してある

環境依存・コンパイラ依存してるのでコンパイラが変わると書き換えなきゃいけないが…
251238:2006/10/23(月) 10:34:13
>>250
出先からなので携帯から失礼します。
本当にありがとうございます。
参考を見ても全くどうすれば良いか分からずに半ば諦めモードでした。
凄く助かりました本当にありがとうございました。
252デフォルトの名無しさん:2006/10/23(月) 11:13:42
>>181
ターゲット 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;
}
253デフォルトの名無しさん:2006/10/23(月) 11:19:50
制限時間内で未解決の問題ってもうないの?
「オレの質問答えが出てない」っていう質問者さん、是非もう一度書きこんで下さい。
254デフォルトの名無しさん:2006/10/23(月) 12:17:34
[1] 授業単元:C演習
[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] その他の制限:


ヒントみたいなのがあるけどよくわかりません、おねがいします
255デフォルトの名無しさん:2006/10/23(月) 13:06:37
[1] 授業単元: オペレーティングシステム
[2] 問題文(含コード&リンク): 無限に走り続けるプログラムtest.cを作り、実行可能なプログラムにtestという名前をつけ、これをバックグラウンドで走らせ、そのプロセスを殺すこと。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日まで
[5] その他の制限: 特になし
256デフォルトの名無しさん:2006/10/23(月) 13:11:59
>>255
while(1);
257デフォルトの名無しさん:2006/10/23(月) 13:28:44
>>254
#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;
}
258デフォルトの名無しさん:2006/10/23(月) 15:42:57
>>257
なるほど。算術平均とは言われてないもんな。
259デフォルトの名無しさん:2006/10/23(月) 17:58:00
[1] 授業単元:C演習
[2] 問題(含コード&リンク):
括弧、加算、減算、乗算、除算に対応した記述を認識し、
先行順走査と後行順走査に書き換えるプログラムを作成せよ。
後行順 入力例:(a+b)-c
出力例:ab+c-
[3] 環境
 [3.1] OS: (Linux)
 [3.2] コンパイラ名とバージョン: (gcc 3.4)
 [3.3] 言語: (C)
[4] 期限: ([来週まで])
[5] その他の制限:
260デフォルトの名無しさん:2006/10/23(月) 19:38:55
>>196 の問題誰かお願いします
261デフォルトの名無しさん:2006/10/23(月) 19:45:49
>>260
>>248で解答が出てるが。
262デフォルトの名無しさん:2006/10/23(月) 20:14:02
>>260 すみません。素で気づきませんでした
263デフォルトの名無しさん:2006/10/23(月) 20:53:20
すごいスレw
C++が使える人来てくれませんか?
http://ex16.2ch.net/test/read.cgi/news4vip/1161592926/
264デフォルトの名無しさん:2006/10/23(月) 23:41:23
>>259
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2809.c

再帰下降型構文解析を行って構文木を作り,前優先と後優先で訪問する.
スタックを用いた非再帰アルゴリズムもあるが,前置と後置が統一的に書けるのでこちらで.
265デフォルトの名無しさん:2006/10/23(月) 23:57:50
so。
266181:2006/10/24(火) 01:59:14
>>252
ありがとうございます。
早速、組み込んでみます。
267デフォルトの名無しさん:2006/10/24(火) 03:00:38
>>264
コンパイルするとこのようなエラーがでました。

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.)
268デフォルトの名無しさん:2006/10/24(火) 03:09:53
>>267
拡張子をcppにしろ。
269デフォルトの名無しさん:2006/10/24(火) 07:25:17
[1] 授業単元: 情報工学
[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日

よろしくお願いします。
270デフォルトの名無しさん:2006/10/24(火) 07:27:00
>>267
int 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);
に変更
271デフォルトの名無しさん:2006/10/24(火) 11:17:53
>>269
1次元適合度検定って何?カイ二乗検定なら聞いた事があるが。
よろしかったら詳しく説明してあるサイトへのリンク貼ってくれたら
プログラム書けると思うよ。
272デフォルトの名無しさん:2006/10/24(火) 12:40:06
>>271
携帯からなんでサイトは貼れませんけどカイ二乗というやつです。
一次元適合度検定はx軸をM個の区間に分けN個のデータの度数分布を調べ、カイ二乗を計算するものです
273デフォルトの名無しさん:2006/10/24(火) 14:06:38
ファイル出力する際、putsを使うと読み込んだ文字列を
片っ端から出力しちゃうんですが、どの文字(何文字目)を出力するか
指定できますか?
274デフォルトの名無しさん:2006/10/24(火) 14:11:54
>>273 できます。
275デフォルトの名無しさん:2006/10/24(火) 14:58:25
数字1?

数字2?

1足す2の結果は3です。
というプログラムをお願いします
276デフォルトの名無しさん:2006/10/24(火) 14:59:04
指定の仕方を教えていただけますか?
指定の仕方の載ってるサイトだけでも・・・。
277デフォルトの名無しさん:2006/10/24(火) 15:18:05
>>275
<?
echo "数字1?<br>1<br>数字2?<br>2<br>1足す2の結果は3です。";
?>
278asd ◆TJ9qoWuqvA :2006/10/24(火) 15:32:31
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):実数riを入力すると自然対数を求めて表示するプログラムを作成せよ。
               ただし、0以下の場合は不可能と出る。   
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:Crescent
 [3.3] 言語:C
[4] 期限:10月25日1時
[5] その他の制限:特になし
279デフォルトの名無しさん:2006/10/24(火) 15:49:30
>>273
その文字列がchar momoji[32]="nunenumEor"で宣言されてたら、
Eだけ表示させたかったら、put(momoji[7])で読み込め
280デフォルトの名無しさん:2006/10/24(火) 17:20:04
>>278
#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;
}
281280:2006/10/24(火) 17:22:56
訂正
printf("不可能\n", ri);

printf("不可能\n");
282デフォルトの名無しさん:2006/10/24(火) 19:15:42
[1] 授業単元:Cプログラミング
[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);
こんな感じで数値を代入しようとしても代入されないので、この状態からまったく進みません。
どうかよろしくおねがいします。
283デフォルトの名無しさん:2006/10/24(火) 19:22:17
>>282
scanfの&を忘れてるだけじゃ?
284デフォルトの名無しさん:2006/10/24(火) 19:23:30
>>282
C言語だと変数宣言のときに変数の値って使えないんじゃないかな
285デフォルトの名無しさん:2006/10/24(火) 19:38:41
>>277
phpかよw
286デフォルトの名無しさん:2006/10/24(火) 20:08:31
Borand C++ bilder使ってます
わからないので教えてください

Form1のメンバとして整数型の変数countを用意します。
TButtonコンポーネントとTLabelコンポーネントをForm1に貼り付けます。
Buttonをクリックするごとに、クリックした回数と何か文章をLabelに表示してください。
この時、文章の中身はできるだけ更新してください。
たとえば5種類文章を用意して、それをクリックごとに順番に表示させてもOKです。

287デフォルトの名無しさん:2006/10/24(火) 20:09:45
288デフォルトの名無しさん:2006/10/24(火) 20:15:51
>>286
よくしらんがVCLなので。
引数とかはよく知らない。BCBもってないし。
Button1Click {
count++;
Label1.Caption = IntToStr(count) + "回クリックされました";
}
289デフォルトの名無しさん:2006/10/24(火) 21:50:54
for(i=0;i<=100;i++)
printf("%3d", i)
としたとき
0
1
2



10
11
となるところを
001
002
003



010
としたいのですが、何かよい方法はないでしょうか?
290デフォルトの名無しさん:2006/10/24(火) 21:54:36
>>289
%03d
291デフォルトの名無しさん:2006/10/25(水) 09:42:26
すれ違い申し訳ありません。Beltion.comのCフォーラムでも質問を出した課題(作業?)
なのですが、下記のプログラムを作るにはどうしたら良いでしょうか?
(4行目まで、上の行を消して書き込みファイルに保存→そのファイルを読みを4回繰り返す
という作業では中間ファイルばかりが増えてしまいます。一度で処理を行えませんか?)


ttp://forums.belution.com/ja/cpp/000/059/87.shtml
292デフォルトの名無しさん:2006/10/25(水) 10:13:50
改行コードが4回カウントされるまでfgetcを繰り返す
293デフォルトの名無しさん:2006/10/25(水) 11:05:18
[1]C言語演習T
[2]
今回はファイル入出力の応用で、
ファイルの簡単な暗号化及び複合化を行うプログラムを作成する。
暗号化は改行以外の文字のアスキーコードに1を足す
複合化はその逆の動作を行うこと
引数の2番目が暗号化と複合化のどちらかを決定、
3番目が入力ファイル名を示し、
4番目が出力ファイル名を示す
上記のようなプログラムを作成せよ

[3]OS:Linux コンパイラ:gcc3.4 言語:C
[4]明日午前9時30分
[5]C言語の基礎
関数・ポインタ・構造体・ファイル入出力まで学んでいます

よろしくお願いします
294デフォルトの名無しさん:2006/10/25(水) 11:21:39
[1]計算機プログラミング
[2]
● 西暦の年号を入力して、閏年かを判定するプログ
ラムを作成しましょう。
■ 入力は正の整数
■ 入力ミスの場合(0か負の整数)は、
「正の整数を入力しましょう。」と表示する
■ 閏年の場合は、「閏年です。」と表示する
■ 閏年でない場合は、「閏年ではないです。」と表示する
■ 閏年は、年号が4で割り切れる年。(2004年)
ただし、100で割り切れる年は閏年ではない。(1900年)
しかし、400で割り切れる年は閏年となる。(2000年)
■ 条件をうまく考えよう(「かつ」と「または」で言い換えよ
う)。プログラムは、例題を参考にしよう。
■ プロジェクト名:06leap ファイル名:06leap.c
■ ソースコードを印刷し、自分の生まれた年で試した結果
を記入して提出しよう
[3]windowsXP
[4]10月30日
295デフォルトの名無しさん:2006/10/25(水) 11:29:43
>>291
#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;
}
296デフォルトの名無しさん:2006/10/25(水) 11:34:42
>>294
#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;
}
297デフォルトの名無しさん:2006/10/25(水) 12:01:34
質問です。宿題で期限が土曜日正午です。
「多倍長整数を使うことによって、フィボナッチ数列の100番目
までを正しく計算するプログラムをC言語で作成しなさい。」
いろいろ調べたんですが、多倍長整数がなんなのかよくわかっていないので。。。
よろしくおねがいします。
298デフォルトの名無しさん:2006/10/25(水) 12:04:15
>>297
>>1を読んで書き直し
299デフォルトの名無しさん:2006/10/25(水) 12:15:32
>>298
すいません。書き直します。

[1]単元は多倍長整数、二重リンクリスト、ポインタあたりですたぶん。
[2]「多倍長整数を使うことによって、フィボナッチ数列の100番目
までを正しく計算するプログラムをC言語で作成しなさい。」
[3]環境はUnix?
コンパイラ名は・・・gccって書いてコンパイルはしてるんですが。。
  言語はC言語
[4]今週の土曜日正午まで
[5]まだ初めて3週間くらいです。超簡単な入門書は一応全部目を通しました。

よろしくお願いします。
300デフォルトの名無しさん:2006/10/25(水) 12:43:19
日本ハゲひちょりーズ
301289:2006/10/25(水) 12:45:11
>>290
助かりました。
302デフォルトの名無しさん:2006/10/25(水) 12:48:14
303asd ◆TJ9qoWuqvA :2006/10/25(水) 12:59:46
>>280-281
どうもありがとうございます
304デフォルトの名無しさん:2006/10/25(水) 13:12:10
>>291 awk または gawk で
BEGIN{
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]
}
}
}
305デフォルトの名無しさん:2006/10/25(水) 13:18:26
>>302
ありがとうございます。
本を見ながら何が書いてあるか考えます。
306295:2006/10/25(水) 13:31:48
307デフォルトの名無しさん:2006/10/25(水) 17:48:36
>>298
書き直したらシカト・・・

結局、いちゃもんしかつけれないのねw
308デフォルトの名無しさん:2006/10/25(水) 17:55:54
>>307
お前の目は節穴か
309291:2006/10/25(水) 18:01:14
お返事が遅くなり、大変申し訳ありません。


>295,306
>304

ありがとうございます。助かりましたm(_ _)m

こんなすれ違いな質問に回答をしていただき感謝しています。
310デフォルトの名無しさん:2006/10/25(水) 18:26:26
ビット論理演算子の(Aは同じ関数をとる)
A^A→0
になるのは何がすごいのでしょうか・・・
311デフォルトの名無しさん:2006/10/25(水) 18:28:26
当たり前のこと。何もすごくない。
312デフォルトの名無しさん:2006/10/25(水) 18:30:32
>>308
>>298
書き直したらシカト・・・

結局、いちゃもんしかつけれないのねw
313デフォルトの名無しさん:2006/10/25(水) 18:37:35
1)プログラム演習 C言語コース
2)
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)ポインタを終えてファイル入出力まで学んだ所です
構造体はまだやっていません
よろしくお願いします
314デフォルトの名無しさん:2006/10/25(水) 18:44:21
>>312
先に>>302が出たから答えなかっただけかも知れないだろ。
315デフォルトの名無しさん:2006/10/25(水) 18:51:05
>>313
A-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;
}
316デフォルトの名無しさん:2006/10/25(水) 18:56:37
#include <string.h>
317デフォルトの名無しさん:2006/10/25(水) 19:42:26
int main(){
318デフォルトの名無しさん:2006/10/25(水) 20:54:27
[1] 授業単元: 計算数学演習
[2] 問題文(含コード&リンク):
  3つの自然数を選んだところ、それらの和は2006になり、それらの最小公倍数は2006の倍数に
  なった。このような3つ自然数の組を列挙しなさい。
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名 :VC 6.0
 [3.3] 言語: (C/C++)
[4] 期限: 無期限
[5] その他の制限:実行時間が1000msを超えるのもは不可
319デフォルトの名無しさん:2006/10/25(水) 21:05:23
>>293
#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;
}
320デフォルトの名無しさん:2006/10/25(水) 21:41:19
>>318
高速化の余地は大いにあるけど、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";
}
321デフォルトの名無しさん:2006/10/25(水) 21:48:29
>>320
ありがとう
322デフォルトの名無しさん:2006/10/25(水) 22:37:16
問題文があいまいなのはエスパーの訓練も兼ねているということか
323デフォルトの名無しさん:2006/10/25(水) 23:01:06
期限が延びました(未定)のでどなたか>>269をお願いします。

http://osk.u-shizuoka-ken.ac.jp/~tateyama/lecture/STAT/chitest/goodness.html
↑カイ2乗検定の解説です。
324デフォルトの名無しさん:2006/10/25(水) 23:23:29
>>322
あたまわるい
325デフォルトの名無しさん:2006/10/25(水) 23:54:59
失礼します.

C/C++初心者なのでご教授お願いしたいのですが,

javaでいうところのset/get 関数を配列で扱う場合
C/C++ではどのように実装するのでしょうか?

javaでは配列ごと

int[] AA(){return aa;}

とreturn できるのですが
Cでは配列は返せないのでC特有のスマートな方法があるのでしょうか?

よろしくお願いします.
326デフォルトの名無しさん:2006/10/25(水) 23:59:18
配列へのポインタを返せば?

つか、そんなことが必要になる時点で設計失敗だがなw
327デフォルトの名無しさん:2006/10/26(木) 00:01:16
>>326
> 配列へのポインタを返せば?
で、墓穴を掘り
…*vector返せよ

> つか、そんなことが必要になる時点で設計失敗だがなw
で、人生に終止符を打つ
…すべてファーストクラスオブジェクトなんだからどうでもいいだろ
328デフォルトの名無しさん:2006/10/26(木) 04:11:04
>>325
構造体を返せばおk
329デフォルトの名無しさん:2006/10/26(木) 04:50:44
>>313 A-1
#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;
}
330デフォルトの名無しさん:2006/10/26(木) 05:31:12
>>323 χ2乗検定の前まで
#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;
}
331デフォルトの名無しさん:2006/10/26(木) 10:28:01
[1] 授業単元:C言語
[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個になります。
以下にもらったものを張ります。よろしければ動作説明もお願いします。
よろしくお願いします。
332デフォルトの名無しさん:2006/10/26(木) 10:30:13
#include <stdio.h>
#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);
}
333デフォルトの名無しさん:2006/10/26(木) 10:30:44
a=0;
m=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;
334デフォルトの名無しさん:2006/10/26(木) 10:31:57
if(ex[M-1+nall]==strg[M-1])
{
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;
}
}
335デフォルトの名無しさん:2006/10/26(木) 10:32:34
else
{
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);
}
336デフォルトの名無しさん:2006/10/26(木) 13:46:35
1]演習C言語
2]長いのでこちらにUPしました
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2820.txt
3]C言語 linux gcc3.4
4]10/30
5]ポインタ・構造体まで教わりました
よろしくお願いします
337デフォルトの名無しさん:2006/10/26(木) 15:04:55
338デフォルトの名無しさん: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);

}
で一応完成はして実行もできるのですが計算結果がマイナスになったりなど
どうもおかしいのです、間違っている箇所等ございましたらお願いいたします。
339デフォルトの名無しさん:2006/10/26(木) 21:25:03
>>338
たぶんθがマイナスになってるんだと思うが、どこもおかしくはない。
atan2の戻り値は-πからπまでだから。
0から2πにしたいのなら、2πを加えてやればいい
340デフォルトの名無しさん:2006/10/26(木) 21:34:41
>>339
πだろ?
341デフォルトの名無しさん:2006/10/26(木) 21:42:57
>>340
π足したら座標に対する角度にならんだろw
>>339は負数なら2πを足せって意味でそ
342デフォルトの名無しさん:2006/10/26(木) 23:32:09
>>341
なるほど
343デフォルトの名無しさん:2006/10/26(木) 23:53:44
[1] 授業単元:アルゴリズム概論U
[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] 特に無し
344デフォルトの名無しさん:2006/10/26(木) 23:59:03
[1] 授業単元: 情報処理工学
[2] 問題文: pixelを用いて図形を描く問題です。

  15×15の画面に(3,3)-(10,8)の直線を描きなさい。
  また、(3,3)-(8,10)の直線も加えなさい。

授業で扱った例題を応用して書くプログラムだと思います。
下に授業で扱った例題プログラムを示しておきます。

#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] その他の制限:なし
345デフォルトの名無しさん:2006/10/27(金) 00:15:21
346デフォルトの名無しさん:2006/10/27(金) 00:42:33
>>343 こんな感じ
struct 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;
347デフォルトの名無しさん:2006/10/27(金) 01:25:32
[1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2827.txt
[3] 環境
 [3.3] 言語:C++

1~1000で素数をファイルに出力するんですがうまくいかず・・・
ファイルは作成されるものの文字化け状態でどうしたものかと。
348デフォルトの名無しさん:2006/10/27(金) 01:34:51
>>347 お兄ちゃん、罠だよ♪
メモ帳の自動認識が誤爆してるだけ。
349デフォルトの名無しさん:2006/10/27(金) 01:36:14
prime.txt作られたけど別に文字化けしてないよ。
350デフォルトの名無しさん:2006/10/27(金) 01:38:20
>>348
ホントだ。メモ帳すげー!
351デフォルトの名無しさん:2006/10/27(金) 02:55:53
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2828.txt
[3] 環境
 [3.2] 言語:コンパイラ名とバージョン:VisualStdio2003
 [3.3] 言語:C++
ぅう・・・配列はどうにも・・・・・・
352デフォルトの名無しさん:2006/10/27(金) 03:02:50
>>344
#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];
}
353デフォルトの名無しさん:2006/10/27(金) 03:03:37
>>344続き
int 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;
}
354デフォルトの名無しさん:2006/10/27(金) 03:13:08
>>351
課題がいくつかあるけど、どれ?
355 ◆asHRtOTOD2 :2006/10/27(金) 10:55:35
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク): 1次元配列を用いてn人分の数学の得点を100点満点で入力し、得点の高い順に並び替えて表示するプログラムを作成しなさい。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: borland
 [3.3] 言語: C
[4] 期限: 2006年10月30日17:00まで
[5] その他の制限:

わかる方がいたら、どうかお願いします。
356デフォルトの名無しさん:2006/10/27(金) 11:10:45
#include <stdio.h>
#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);
}

みたいな
357 ◆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);
}
こんな風にやっています。

本当に図々しくてすいません
358デフォルトの名無しさん:2006/10/27(金) 12:01:16
>>357
それじゃ、>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);
}
}
--
359デフォルトの名無しさん:2006/10/27(金) 12:09:51
>>358
こんなのでソートできるのか?
360 ◆asHRtOTOD2 :2006/10/27(金) 12:12:31
すいません それでもエラーがでてコンパイルできません
361デフォルトの名無しさん:2006/10/27(金) 12:14:29
>>357 >>360
じゃあエラー直してコンパイルすれば?
362デフォルトの名無しさん:2006/10/27(金) 12:17:13
エラー直してはいるんですけど ひとつなんとか直すたびに、他のエラーがどんどん出てきてしまって俺の力じゃ、むりっぽいです
363358:2006/10/27(金) 12:21:35
>>362
なんだよ、今時C89なのか?
ちょっと待て、書き直すから。

>>359
やってみてからほざけ。漏れは>356を書き直しただけだ。
364358:2006/10/27(金) 12:24:29
>>355
あーすまん、確かにコンパイラが過去の遺物になっていたな。
ほれ、これで通るだろ。
--
{
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);
}
}
}
--
言うまでもないが、括弧の数に注意な。
365 ◆asHRtOTOD2 :2006/10/27(金) 12:32:00
ありがとうございます なんとかなりました 本当にありがとうございました
366デフォルトの名無しさん:2006/10/27(金) 12:33:30
こんなソート法初めてみたぜ。ビンソートとかバケットソートとか、
そういうたぐいの物なのか?
367デフォルトの名無しさん:2006/10/27(金) 12:34:08
ソート効率は確かに悪そうだな。O(n^2)程度か。交換ソートと
大差ないかもな
368デフォルトの名無しさん:2006/10/27(金) 12:40:23
入力を一回スキャンするだけでソートが完了するわけだから処理速度は無茶苦茶速いよ。
値域が狭いときは重宝する。
#普通こういう場合は何点が何人って表現になるはずだけどね。

どうでもいいけど、>>364のコードってどう見ても癖の強い熟練プログラマの手が入ってるっぽいんだけどw
#前置インクリメントとか制御変数名が二文字だとか

それはさておき、>>356はお粗末だの。0-100点の入力を許容しているのに配列は100要素しかない。
369デフォルトの名無しさん:2006/10/27(金) 12:42:05
>>368
いやそうではないだろう。
表示部分のように二重ループがないとちゃんとソートされた出力が
出来ない事から、オーダーはO(N^2)だろ。
370デフォルトの名無しさん:2006/10/27(金) 12:54:44
いや、出力部のループはO(N^2)じゃなくてO(N)だよ。それに>>368で書いたような出力でいいなら定数時間だし。
#勿論、値域が狭い(というか取り得る値のバリエーションが少ない)ことが前提ね。

具体的な応用としてはこういう何かの成績みたいなものとかグレイ256諧調画像の濃度分布とかね。
371デフォルトの名無しさん:2006/10/27(金) 12:58:41
http://www1.cts.ne.jp/~clab/hsample/Sort/Sort7.html

調べてみたらビンソートらしい。
372デフォルトの名無しさん:2006/10/27(金) 13:45:22
>>351 面倒なので全部纏めて。課題4-1は勘違いしてるかもしれない。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2831.txt
373デフォルトの名無しさん:2006/10/27(金) 13:47:22
>>369の言うように364のコードだとO(N)にならないよな。こうじゃね?
int 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]);
374デフォルトの名無しさん:2006/10/27(金) 13:53:34
>>351 面倒なので全部纏めて。課題4-1は勘違いしてるかもしれない。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2831.txt
375374:2006/10/27(金) 13:54:37
書き込み成功してたのかよ orz
376デフォルトの名無しさん:2006/10/27(金) 14:05:56
>>373
>>364のコードでは、外側のループは101回まわり、
その一回ごとに内側のループはnums[ic]回まわる。
したがって、内側のループは合計するとΣ{ic=0..101}(nums[ic])回まわる。
一方、Σ{ic=0..101}(nums[ic])はnに等しいので、全体でO(n)。
377373:2006/10/27(金) 14:10:24
>>376
おお確かにそうだな。良く見てなかった。サンクス。
378デフォルトの名無しさん:2006/10/27(金) 15:03:27
>>376
あっそうか。101というのはNじゃなくて固定されてるもんな。
379330:2006/10/27(金) 16:03:56
>>323
ごめ、問題勘違いしてた。
問題文の p(x) 確率分布密度に沿った乱数は次の式になります。

double p_rand(void){
return 4*sqrt(1.0-uniform_rand());
}
380291,309:2006/10/27(金) 16:53:33
以前(>291)、ここで質問したものです。

>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をどのように修正したら、このような出力を行うことが出来ますか?
381デフォルトの名無しさん:2006/10/27(金) 17:33:57
1] 授業単元:C++言語
[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++

おねがいします
382デフォルトの名無しさん:2006/10/27(金) 18:53:08
383380:2006/10/27(金) 19:10:08
>382

いけました。ありがとうございます
384デフォルトの名無しさん:2006/10/27(金) 19:29:19
[1] 授業単元:情報処理
[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] 期限: 無期限
385デフォルトの名無しさん:2006/10/27(金) 20:04:24
[1] 授業単元:計算科学
[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
を利用して作ってください
386330,379:2006/10/27(金) 20:08:42
>>269,323
間違った答え書いてごめん
正解はこちら
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2833.c
387>>330>>379>>386:2006/10/27(金) 20:25:30
>>269,323
sample_data_index=(int)(p_rand()/SAMPLE_DATA_WIDTH);

#define EPS (1.0e-10)
sample_data_index=(int)((p_rand()-EPS)/SAMPLE_DATA_WIDTH);

何度目の修正だか…orz
388デフォルトの名無しさん:2006/10/27(金) 20:41:14
389デフォルトの名無しさん:2006/10/27(金) 21:10:15
>>344 直線じゃなくて線分なら次のアルゴリズムが高速
void 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);
390デフォルトの名無しさん:2006/10/27(金) 21:13:14
>>381
C++ Builde 6 持ってないので、
TButtonコンポーネントとTLabelコンポーネントをForm1に貼り付けた、ソースコードをアップロードしてちょ
391291,380,383:2006/10/27(金) 21:13:29
さきほどのresult.txtのファイル名は、手動で[グループ名(A〜D)- 2桁の管理番号]を付けています。
例.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と続きます。すみませんが、よろしくお願いします。
392デフォルトの名無しさん:2006/10/27(金) 22:20:51
>>391
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2836.c
使い方
./a.out ファイル名 管理番号


./a.out result-C-11.txt 11

ところで、これって宿題?
393デフォルトの名無しさん:2006/10/27(金) 22:57:14
>392

ありがとうございます。

最初のころにすれ違いとも書いていましたが、卒論データのまとめなんです。
データが多すぎて、ツール作ってってことだったんですが、Cの入門書を買ってきても
全然分からなくて。

すみません
394393:2006/10/27(金) 23:14:52
>392


ところで、

使い方
./a.out ファイル名 管理番号


./a.out result-C-11.txt 11

これって、どういう意味なんですか?
395392:2006/10/27(金) 23:24:50
管理番号を手動で切り分けて入力してくださいという意味です。
コンパイル・リンクしてできた実行ファイルの後に続けて

〜.exe ファイル名 管理番号

と入れて下さい

※gcc でコンパイル・リンクした場合には
オプションで出力ファイル名をしていない限り実行可能ファイルが a.out という名前になります。
但し ms-windows 環境だと a.exe です(ファイル種別を拡張子で判断しているため)
396393:2006/10/27(金) 23:41:47
>393 です。


WindowsXP
VC++6.0
という環境でコンパイルをかけています。

実行すると、

Usage: パス\a.exe filename number
Press any kiy to continue

となり、入力が出来ないのですが、これはどのようにしたら入力が
出来るのでしょうか?
397396:2006/10/27(金) 23:51:21
ぐぐりました。

自己解決しました。
398396:2006/10/27(金) 23:57:24
使用方法は自己解決したのですが、

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

6桁の数字を9桁に変えた横にある二列の数字も書き出すことは出来ませんか?
399392:2006/10/28(土) 00:08:56
>>393
出力結果をファイルにしたいという意味でしょうか?それなら
〜.exe ファイル名 管理番号 > 出力ファイル名
として下さい。

あなたが出力として欲しいフォーマットと違うという意味であれば、
例を書いて下さい。
400デフォルトの名無しさん:2006/10/28(土) 00:10:22
>>393
卒論で急いでるのはいいですが、残念ですがCは難しいからそう簡単に分かるものでも、教えられるものでもありません。きっと諦めた方が早いでしょう。
401デフォルトの名無しさん:2006/10/28(土) 00:15:38
GCC と VC++6.0 で scanf の動作が違うかもしれないので、

ret=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]);

と変更して試してみて下さい。
402393:2006/10/28(土) 00:30:48
すみません。

C、難しいです。(入門書を読んだ限りでは、簡単そうだったのですが。)


書き出しフォーマット、ファイル出力 ともに>399 >401 で解決しました。

ありがとうございました。
403デフォルトの名無しさん:2006/10/28(土) 02:49:32
[1] プログラミング
[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] 途中までやったんで埋める感じでお願いします。
問題文のページ数とかは本使ってやってるから出てるだけです。
404403:2006/10/28(土) 02:51:15
#include<stdio.h>
#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行だけ出てプログラムが固まります。
405デフォルトの名無しさん:2006/10/28(土) 03:41:23
>>403
三箇所ほど直しといた

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;/*関数の戻り値*/
}
406403:2006/10/28(土) 04:34:12
>>405
正常に動作しました。ありがとうございます。
意味は自分で考えとく
407デフォルトの名無しさん:2006/10/28(土) 09:31:30
>>402
Cは簡単過ぎて難しいな。

キーワードが少なく、しかもいろんな意味を割り当ててある上に、
演算子が結構多くて優先順位が決まっている上に、ポインタが
あって、他の高級言語とはかなり毛色が違うからな。
408388:2006/10/28(土) 10:08:54
>>384
>>388 の修正版
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2837.c

問1、問3の「5つの値を表示」するのを忘れてた
409388:2006/10/28(土) 10:14:36
アップするまえに確認すりゃよかった orz
問3
maximum=minimum=data[i];

maximum=minimum=data[0];
410デフォルトの名無しさん:2006/10/28(土) 11:11:27
[1] 授業単元: 情報処理
[2] 問題文: 実行したファイル名を除いたコマンドライン引数に、複数個指定した全てのファイルの内容を標準出力に表示するプログラム
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:明日まで

よろしくお願いします。
411デフォルトの名無しさん:2006/10/28(土) 11:19:14
やっぱりこう言うスレは、とても勉強になるよ。
何でこう言う方法を思いつくの?って感じのソースが沢山ある。

ただ宿題を頼む側としては、このまま出して大丈夫なのかなぁ?
考え方が学生レベルを遥かに逸脱してて先生に怒られそう。
412デフォルトの名無しさん:2006/10/28(土) 11:21:40
そんなレベルの高い回答があったか禿げしく疑問
413デフォルトの名無しさん:2006/10/28(土) 11:25:52
>>411
いろんなプログラムを見たり書いたりしてれば思いつく必要さえなくなるよ

> ただ宿題を頼む側としては、このまま出して大丈夫なのかなぁ?

そこまで真面目な人なら、
ロジックを追って自分なりに書き直してみるのもいいかもね
414デフォルトの名無しさん:2006/10/28(土) 11:35:11
>>410
こうゆうこと?

#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;
}
415デフォルトの名無しさん:2006/10/28(土) 11:42:19
>>410
#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;
}
416デフォルトの名無しさん:2006/10/28(土) 12:01:48
[1] 授業単元:情報処理概論
[2] 問題文(含コード&リンク):0から99の乱数を使って6×6ビンゴの表を作成しなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:BorlandC++
 [3.3] 言語:C++
[4] 期限: 10月30日まで
[5] その他の制限:  
よろしくお願いします。
417cがわからない学生:2006/10/28(土) 12:03:11
[1] 授業単元:情報処理U
[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] その他の制限:なし?
418cがわからない学生:2006/10/28(土) 12:04:42
↑↑よろしくお願いしますm(_ _)m
419デフォルトの名無しさん:2006/10/28(土) 12:10:17
>>416
#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;
}
420デフォルトの名無しさん:2006/10/28(土) 12:13:54
>>417
#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;
}
421419:2006/10/28(土) 12:15:48
>>416
rand_data[i]=i;

rand_data[i]=i+1;
422c不明な人:2006/10/28(土) 12:19:50
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):キーボードから,「A」,「B」,「C」,「D」,「K」の5 種類のアルファベットを入力し,それぞれの入
力個数を数えて画面出力するプログラムを作成しなさい.なお,「Z」が入力されるまでキーボ
ード入力を繰り返すこととし,これら6 文字以外の入力はカウントしないようにしておくこと.
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 明後日まで
[5] その他の制限: なし
よろしくお願いします。
423デフォルトの名無しさん:2006/10/28(土) 12:20:43
>>421
0-99 の範囲のままでおk
424デフォルトの名無しさん:2006/10/28(土) 12:29:06
>>422
#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;
}
425c不明な人:2006/10/28(土) 12:50:19
ちゃんとできました。ありがとうございました!
426cがわからない学生:2006/10/28(土) 12:51:17
どうもありがとうございました。ちゃんと実行できました。提出に間に合ってよかったです(泣)
427デフォルトの名無しさん:2006/10/28(土) 13:04:17
[1] 授業単元: プログラミング
[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] その他の制限: 構造体、ポインタを使用。
428デフォルトの名無しさん:2006/10/28(土) 13:44:18
>>427
work[n].next = &work[n];

saigo->next = &work[n];
の誤りだな。
429デフォルトの名無しさん:2006/10/28(土) 13:51:07
>>428
早速ありがとうございます
ちゃんとcase2が正常に動きました
構造体とポインタの部分が難しいです…
430デフォルトの名無しさん: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
431デフォルトの名無しさん:2006/10/28(土) 14:52:49
>>430
dst = 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);
}
432デフォルトの名無しさん:2006/10/28(土) 14:53:48
>>431
stdin -> stdout
433デフォルトの名無しさん:2006/10/28(土) 15:04:32
>>431
それをどこに入れたらよいのでしょうか?
434デフォルトの名無しさん:2006/10/28(土) 15:15:35
>>433
♂ -> ♀
キャッ
435デフォルトの名無しさん:2006/10/28(土) 15:21:40
>>433
dst = stdin

dst = stdout
436デフォルトの名無しさん:2006/10/28(土) 15:55:04
>>435
dst = 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);
}
に変えるだけですか?
437デフォルトの名無しさん:2006/10/28(土) 16:02:23
次に来る質問は
「セミコロンがないというエラーが出るんですがどうしたらいいですか?」
だな
438416:2006/10/28(土) 16:27:51
出来ました。答えていただいた方
ありがとうございました。
439デフォルトの名無しさん:2006/10/28(土) 17:16:16
んで、ぽまいらはWindowsVistaに乗り換える気があるん?
440デフォルトの名無しさん:2006/10/28(土) 17:45:36
>>439
ない
441デフォルトの名無しさん:2006/10/28(土) 18:42:59
今の彼女から鞍替えするほど魅力はない
442デフォルトの名無しさん:2006/10/28(土) 19:36:24
自分が乗り換える気は無くてもメーカーPCはいやでもVistaが載るだろうね
443384:2006/10/28(土) 19:44:38
>>408
ありがとうございます(`・ω・´)
444デフォルトの名無しさん:2006/10/28(土) 19:47:12
[1] 授業単元:システムプログラミング
[2] 問題文(含コード&リンク):
多倍長整数を使うことによって、フィボナッチ数列の100番目までを
正しく計算するプログラムを作成しなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] borland
 [3.3] C言語
[4] 期限: 本日中
[5] その他の制限: 特に無し。

途中までは問題なかったのですが、
突然原因不明のエラーが出てくるようになってしまいました。
http://www-2ch.net:8080/up/download/1162032169809635.yw2OjQ
コンパイラは何の文句も言ってくれません。
助けてください。お願いします。
445デフォルトの名無しさん:2006/10/28(土) 19:48:51
[1] 授業単元:プログラミング
[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の入力によって検出する。
      と言う方法でやるようにと言われてます。
お願いします。
446デフォルトの名無しさん:2006/10/28(土) 19:58:14
>>444
まずは main 関数内の head_a, head_b, head_t の領域を確保しましょう。
447デフォルトの名無しさん:2006/10/28(土) 20:06:54
>>444
at main ():
struct digitへのポインタだけ作って、実体が宣言されてないんだが。
head_a->next = head_a->prev = head_a;
でコケるぞ。

で、ロジックも何がしたいのか良く分からん。
head_aが二つ前の要素、head_bが一つ前の要素、head_tが現在の要素のように
見えるんだが、add()では全然そのような計算をしていない。
448デフォルトの名無しさん:2006/10/28(土) 20:14:52
>>444
どう途中まで問題ないんだよw
main始まってすぐ落ちてるじゃねーか
449デフォルトの名無しさん:2006/10/28(土) 20:21:55
#include <stdio.h>

int 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;
}
450デフォルトの名無しさん:2006/10/28(土) 20:22:37
すいません、>>449>>445宛てです。
451444:2006/10/28(土) 20:30:58
>>446
ありがとうございます!
最初で落ちなくなりました。
きっちり確保してあげなきゃいけないんですね…。

>>447
head_aが現在の要素、head_bが一つ前の要素、
head_tは退避用の一時リストのつもりです。
わかりにくいソースでごめんなさい。

解答ありがとうございました、助かりました。多謝です。
452デフォルトの名無しさん:2006/10/28(土) 20:35:47
すいません。
449のはC言語じゃないんですか?
C++じゃないと怒られます。
453デフォルトの名無しさん:2006/10/28(土) 20:54:34
>>452
思いっきり勘違いしてました。ごめんなさい。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;
}
454デフォルトの名無しさん:2006/10/28(土) 21:15:35
>>451
多倍長整数の演算部分とフィボナッチ部分を分けた方が見やすいと思う
455デフォルトの名無しさん:2006/10/28(土) 21:33:17
453 ホントありがとうございます。
どこのどなたかもわかりませんがホントにありがとうございます。
これからは、なるべく自力で出来るようにがんばります。
[1] 授業単元:情報技術U
[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年なのでよく分からないのでよろしくお願いします。
457デフォルトの名無しさん:2006/10/28(土) 22:05:26
文系か・・・
こんな授業とるなよw
458デフォルトの名無しさん:2006/10/28(土) 22:06:35
int n = 0;
int i = 0;
while(i < 10) {
/* printf で好きなように出力 */
n = 2*n+3;
}

2年になったらもっとわからなくなるんでない?
459デフォルトの名無しさん:2006/10/28(土) 22:28:25
C++言語で
繰り返し計算をしててその結果を随時for文の中に
coutを入れて発散してないか(計算がおかしくないか)
見ているのですが、今一回一回改行する設定にしてて
DOS画面にバーッと下のほうに出てくるような感じになっているのですが、
これをDOS画面の一番最初の数字のところだけどんどん更新させる事はできないのでしょうか?
ご存知の方がおられましたら教えてください。よろしくお願いします。
460デフォルトの名無しさん:2006/10/28(土) 22:30:46
>>459
\r
461デフォルトの名無しさん:2006/10/28(土) 22:38:23
>>460
すみません・・・やっても使い方がわからず
ググっても"/r C++言語"などと調べても
中の人からいい検索結果が返ってきません。
申し訳ないんですがやりかたを書いていただけないでしょうか?
462デフォルトの名無しさん:2006/10/28(土) 22:40:54
>>460
と思ったらできました!!"¥"という字が文字化け?してたのか
/の左右逆さまの文字になっていて分かりませんでした。
改行と同じように使えばいいのですね!わかりました。ありがとうございました!
463デフォルトの名無しさん:2006/10/28(土) 23:04:16
>>444の方と恐らく同じ授業です。
ここに書いてあるアドバイスを参考に作ってみたのですがよくわかりません。
>>444の方のプログラムを具体的にどう直せばいいでしょうか・・・
プログラム初心者なのにこんな授業取ってしまって非常に困ってます
出来れば回答宜しくお願いします・・・
464デフォルトの名無しさん:2006/10/28(土) 23:05:58
日本では、半角バックスラッシュ(半角\)と半角円記号(半角¥)は事実上同一だと思え。
そして半角スラッシュ( / )は別物。
465デフォルトの名無しさん:2006/10/28(土) 23:15:01
>>463
さすがに同じ授業とってる奴のとほとんど同じなのはまずいだろ
466デフォルトの名無しさん:2006/10/28(土) 23:16:55
>>465
一応変えられる所は出来る限り変えますので・・・
467デフォルトの名無しさん:2006/10/28(土) 23:28:00
そんなんはできるんかいなww
468初心者:2006/10/28(土) 23:38:32
どちら様教えて、VC++プログラミングするときにひとつのボタン押して
他の.exeファイル実行できるようにどうすればいいですか??
469デフォルトの名無しさん:2006/10/28(土) 23:41:16
>>468
スレ違い
あと日本語でおk
470デフォルトの名無しさん:2006/10/28(土) 23:52:09
>>468
マルチは氏ね
471カッパ:2006/10/29(日) 09:45:51
charはカタカナでなんと読みますか?
472デフォルトの名無しさん:2006/10/29(日) 09:46:36
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
2と17と5の倍数を入力した時のみ
終了するプログラムを作りなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] borland
 [3.3] C言語
[4] 期限: 10月30日の12時まで
[5] その他の制限: 特に無し。

よろしくお願いします。
473デフォルトの名無しさん:2006/10/29(日) 09:55:16
>>472

#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;
}
474デフォルトの名無しさん:2006/10/29(日) 10:46:42
>>473
そんないいげんなソースよく公開できるな
匿名ならではw
475デフォルトの名無しさん:2006/10/29(日) 11:04:53
>>474
そんないいかげんな日本語(ry
476デフォルトの名無しさん:2006/10/29(日) 11:09:57
>>474
具体的箇所を示さずオナニーできるのが匿名ならでわなのだw
477デフォルトの名無しさん:2006/10/29(日) 11:22:10
>>476
全くエラー処理してねーじゃん
478デフォルトの名無しさん:2006/10/29(日) 11:23:44
エラー処理ww
479デフォルトの名無しさん:2006/10/29(日) 11:25:21
>>477
具体的箇所(ry
480デフォルトの名無しさん:2006/10/29(日) 11:30:29
>>471
チャーなりキャラクターなり好きに呼べ
481デフォルトの名無しさん:2006/10/29(日) 11:31:32
[1]授業単元:情報処理
[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] 期限:本日中
よろしくお願いします。
482デフォルトの名無しさん:2006/10/29(日) 11:38:42
なんだろう・・・標準関数使ったら殺される勢いなのかな・・・?
483デフォルトの名無しさん:2006/10/29(日) 11:58:25
>>482
よし、じゃああえて標準関数で
>>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);
}
484デフォルトの名無しさん:2006/10/29(日) 12:58:42
>>472を教えて下さい。
485デフォルトの名無しさん:2006/10/29(日) 13:01:25
>>484
>>473で問題ないよ
486デフォルトの名無しさん:2006/10/29(日) 15:02:30
>>472あれじゃ意味違ってくるだろ
487デフォルトの名無しさん:2006/10/29(日) 15:10:20
そもそも問題文が曖昧。
488デフォルトの名無しさん:2006/10/29(日) 15:35:04
公倍数なら&&つけりゃええやん
489デフォルトの名無しさん:2006/10/29(日) 18:12:49
#include <stdio.h>
main()
{
int *x;
*x=1;

printf("x=%o *x=%d\n",x,*x);
}


これを実行しろって問題なんだけど、コンパイルできませんでした。
なぜコンパイルできないのですか?
テンプレ無視ってスマソ
490デフォルトの名無しさん:2006/10/29(日) 18:15:41
>>489
return 0?
491デフォルトの名無しさん:2006/10/29(日) 18:17:39
>>489

こんなカンジかな。

#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;
}
492デフォルトの名無しさん:2006/10/29(日) 18:21:46
>>489
xがどこにも指定されてない。
#include<stdio.h>
int main()
{
int a=1;
int *x;
*x=a;
x=&a;
printf("x=%o *x=%d\n",x,*x);
return 0;
}
493デフォルトの名無しさん:2006/10/29(日) 18:47:45
>>489
俺の環境(gcc-4.1.1)ではコンパイルできた。
494saga:2006/10/29(日) 19:21:26
*x=a;
x=&a;

順番逆じゃない佐賀?
495489:2006/10/29(日) 19:37:31
>>493
どうなったんですか?
496デフォルトの名無しさん:2006/10/29(日) 19:39:58
>>495
セグメンテーション違反です (core dumped)
497489:2006/10/29(日) 19:40:49
>>496
それってどういう意味なんですか?
498デフォルトの名無しさん:2006/10/29(日) 19:42:19
>>497
プログラムが不正なメモリ操作をしたので強制終了、くらいの意味。
499デフォルトの名無しさん:2006/10/29(日) 19:48:24
>>494
*x=a;自体いらないんだぜ
500デフォルトの名無しさん:2006/10/29(日) 19:55:34
>>489
コンパイルエラーは?
まともなC89コンパイラなら通すはずだと思うんだが。
501492:2006/10/29(日) 19:56:47
>>499 こんな感じ?
#include<stdio.h>
int main()
{
int a=1;
int *x;
x=&a;
printf("x=%o *x=%d",x,*x);
return 0;
}
502デフォルトの名無しさん:2006/10/29(日) 21:06:35
CのプログラムをC++に書き直してもらえませんか??
503デフォルトの名無しさん:2006/10/29(日) 21:08:44
CのプログラムをC++に書き換えてもらえませんか??
504デフォルトの名無しさん:2006/10/29(日) 21:41:41
>>503
普通は書き換える必要はありません。
505デフォルトの名無しさん:2006/10/29(日) 21:41:50
[1] 授業単元:コンピューター実習1
[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] その他の制限:特になし
506デフォルトの名無しさん:2006/10/29(日) 22:26:17
>>505
#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;
}
507デフォルトの名無しさん:2006/10/29(日) 22:26:54
つづき
void 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;
}
}
508デフォルトの名無しさん:2006/10/30(月) 01:07:34
[1] プログラミング
[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] 途中までやったんで続きお願いします。最大公約数は出せました

509508:2006/10/30(月) 01:08:49
#include<stdio.h>
void 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を代入する*/
}
これに埋めて下さい。よろしくお願いします
510デフォルトの名無しさん:2006/10/30(月) 01:58:44
再帰つかえよ
511デフォルトの名無しさん:2006/10/30(月) 02:55:02
void gcdprint(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 = 1; i < g; i++)
{
if (g & i == 0)
{
printf("%d\n", i);
}
}
}
512デフォルトの名無しさん:2006/10/30(月) 03:01:29
>>508 低速版
void 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);
}
}
513デフォルトの名無しさん:2006/10/30(月) 03:02:47
>>508 高速版
void 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);
}
514デフォルトの名無しさん:2006/10/30(月) 12:33:02
[1] 授業単元:プログラミング
[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日まで

ご教授宜しくお願い致します。
515デフォルトの名無しさん:2006/10/30(月) 12:48:54
>>514
#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;
}
516デフォルトの名無しさん:2006/10/30(月) 12:49:56
>>515
それだと「変換して」ないのでは?
517515:2006/10/30(月) 12:49:58
訂正。
× char c;
○ int c;
518デフォルトの名無しさん:2006/10/30(月) 12:50:07
>>514
/* 問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;
}
519デフォルトの名無しさん:2006/10/30(月) 12:50:40
>>514
/* 問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;
}
520デフォルトの名無しさん:2006/10/30(月) 15:00:57
[1] 授業単元:プログラミング
[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] 期限: 明後日まで

よろしくお願い致します。
521デフォルトの名無しさん:2006/10/30(月) 18:12:07
[1] 授業単元:プログラミング
[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文、関数まで習いました。

よろしくお願いします。

522デフォルトの名無しさん:2006/10/30(月) 18:40:00
523デフォルトの名無しさん:2006/10/30(月) 18:41:58
def_func(add,+)
def_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;}
524デフォルトの名無しさん:2006/10/30(月) 18:50:49
>>522 ありがとうございました。
525デフォルトの名無しさん:2006/10/30(月) 19:30:41
>>516
「置換」でなく「変換」しろとおっしゃいますか(;´Д`)
526デフォルトの名無しさん:2006/10/30(月) 20:08:56
[1] 授業単元:情報処理(テーマ:配列)
[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] 期限: 無期限
527508:2006/10/30(月) 22:08:11
>>512-513
ありがとうございます。
528508:2006/10/30(月) 22:11:35
>>511もでした。ありがとうです
529デフォルトの名無しさん:2006/10/30(月) 22:31:58
10分法のアルゴリズムにより、x^3-10=0の非線形方程式の解を求めるプログラムを作成せよ。
なお、許容誤差をε=10^-7とし、区間幅がεを下回ったところで計算を打ち切ること。
(for文とwhile文を使用すること)
530デフォルトの名無しさん:2006/10/30(月) 22:45:24
>>526
画面をスクロールアウトさせるのに必要な改行の数を書け。

>>529
>>1読め。
531526:2006/10/30(月) 22:55:37
>>530
改行の数に指定はないんで3個でお願いします
532529:2006/10/30(月) 23:13:09
[1] 授業単元:非線形方程式の解法

[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文を使用すること
533デフォルトの名無しさん:2006/10/30(月) 23:25:16
>>532

#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;    
}
534デフォルトの名無しさん:2006/10/30(月) 23:58:23
[1] 授業単元:C言語実習
[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>@で優先。
535デフォルトの名無しさん:2006/10/31(火) 00:05:16
[1] 授業単元:プログラミング
[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が刺す座席の予約者名を返す

536535の続き:2006/10/31(火) 00:07:08
もう一つのADTは車両全体を現す。
typedef 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日正午
537デフォルトの名無しさん:2006/10/31(火) 00:20:39
>>535
ADTって何だよ?
538デフォルトの名無しさん:2006/10/31(火) 00:32:53
>>537
階層的ADTってやつみたいです
539デフォルトの名無しさん:2006/10/31(火) 00:37:49
(aggregate|abstract|algebraic) data type
か?
540デフォルトの名無しさん:2006/10/31(火) 00:39:34
連レスすみません。
たぶん、ADTは構造体のことだと思います。
541デフォルトの名無しさん:2006/10/31(火) 01:18:36
>>331
理科大だな
542デフォルトの名無しさん:2006/10/31(火) 10:58:21
[1] 授業単元:情報制御
[2] 問題文:
問題 マウスの左ボタン右ボタンを押したときの左右それぞれの反応時間を
   保存するプログラム

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] C++ 6.0
[4] 期限: 11月4日
 
  よろしくお願いします
543デフォルトの名無しさん:2006/10/31(火) 12:19:41
>>542
C++ 6.0?
544デフォルトの名無しさん:2006/10/31(火) 12:31:54
545544:2006/10/31(火) 13:11:39
546デフォルトの名無しさん:2006/10/31(火) 13:31:52
[1] 授業単元:プログラミング
[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){
547542:2006/10/31(火) 13:52:08
そうです C++ VC 6.0 >543
548デフォルトの名無しさん:2006/10/31(火) 15:02:37
質問です。
クラスAからfriend指定したクラスBがあるとします(BからAのprivateメンバアクセスを許す)
この時、Bの派生クラスからもクラスAのprivateメンバにアクセス可能でしょうか?
549デフォルトの名無しさん:2006/10/31(火) 15:12:00
スレ違いな上にすぐに検証できる内容だな
550デフォルトの名無しさん:2006/10/31(火) 15:55:00
>>542
反応時間って何の反応時間?
もぐら叩きみたいな感じにするのか?
それとも、「マウス右クリック」→「メニュー」 がでるまでの時間とか?
マウスボタンを押した時刻を記録していくのか?
さっぱり分からん
551デフォルトの名無しさん:2006/10/31(火) 16:04:48
>>532
10分法について解説plz
解説してあるサイトの URL でもおk
552デフォルトの名無しさん:2006/10/31(火) 16:08:03
>>534
「サーバが見つかりませんでした」と出て問題文が見えないよ
553デフォルトの名無しさん:2006/10/31(火) 16:11:46
>>551
>>533 で答え出てる
554デフォルトの名無しさん:2006/10/31(火) 17:33:27
555デフォルトの名無しさん:2006/10/31(火) 17:41:52
[1] 授業単元:Cプログラミング
[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)}
556デフォルトの名無しさん:2006/10/31(火) 17:45:05
#include <stdio.h>
typedef 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();
557デフォルトの名無しさん:2006/10/31(火) 17:46:59
main(){
char 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);
}
558デフォルトの名無しさん:2006/10/31(火) 17:48:40
void append_job( job *tmp_job ){
if( 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){

}
559デフォルトの名無しさん:2006/10/31(火) 17:49:57
[3] 環境
 [3.1] OS:Unix
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限:今週中
連続カキコ失礼しました。よろしくお願いします。
560デフォルトの名無しさん:2006/10/31(火) 18:04:59
>>550
マウスボタンを押したときの時刻じゃないかなと勝手な想像妊娠
561デフォルトの名無しさん:2006/10/31(火) 18:05:03
>>559
void append_job( job *tmp_job )
void remove_job( job *tmp_job )
のバグは放っておいておk?仕様?っていうかバグ取りしろってか!
562デフォルトの名無しさん:2006/10/31(火) 20:13:39
>>561
バグもあるんですか・・・。
run_srtn関数だけじゃなくプログラム全体を修正する問題みたいです
563デフォルトの名無しさん:2006/10/31(火) 20:39:01
asciiコードをstring型に変換するクラスなどご存じの方はいませんか?
564542:2006/10/31(火) 20:52:41
返事遅れてすみませんでした
  
 課題は  部屋に3台のスピーカーが左、中、右と配置されています
      音は3回出ますが、
      真中のスピーカーから2回音が鳴り、3回目で左右どちらか
      から音が鳴ります もし左から音がすれば、マウス左ボタンを
      右の音なら右ボタンを押します  この時、3番目の音と
      マウスを押したときの反応時間を出す課題です

   どなたか分かりますか? おそらく、プロシージャーを
   変えると出来る?と思うのですが。。。よろしくお願いします

  
565デフォルトの名無しさん:2006/10/31(火) 21:05:54
>>563
stringのコンストラクタにcharだけを受け取るものがある。
explicitは付いていないのでキャスト演算子も可。
566デフォルトの名無しさん:2006/10/31(火) 21:11:14
>>542
音を出す制御は必要無い?もし必要なら適当なダミーの関数いれたほうがいい?
それともマウスボタンをクリックした時刻を記録するだけでおk?どっち?
例.
enum{SPEAKER_CENTER, SPEAKER_RIGHT, SPEAKER_LEFT};
sound(SPEAKER_CENTER);
みたいなのをいれるか?ってこと

クリックのイベントを取るのは適当なウインドウを作って、ウインドウでのイベント取得でいいの?
それともAPIフックして、PCで他の作業中(ワープロ打ちながらとか)であっても反応しないとダメ?
専用のウインドウを作るとしたら全画面?サイズ指定あり?

>>564 の書き方からすると、元になるソースコードがありそうだけどアップロードできない?
567デフォルトの名無しさん:2006/10/31(火) 21:13:14
564>>すみません、質問を間違えました。

クラスじゃなくて、stringか何かのメソッドでありますでしょうか?
568デフォルトの名無しさん:2006/10/31(火) 21:14:21
間違えました。上の質問は>>565に対してでした。
569デフォルトの名無しさん:2006/10/31(火) 21:22:15
>>563,567-568
>>565 氏が書いてあるけど、コンストラクタじゃだめなの?
570デフォルトの名無しさん:2006/10/31(火) 21:36:36
>>566 氏はエスパー検定二段以上と予想される。
要求定義を聞き出すのって難しい・・・
571デフォルトの名無しさん:2006/10/31(火) 21:49:27
C++で、STLを使って、名前、住所、電話番号、年齢を入力して、それらを格納し、出力ができるプログラムを作っていう宿題です。
よろしくお願いします。
572デフォルトの名無しさん:2006/10/31(火) 21:50:58
573デフォルトの名無しさん:2006/10/31(火) 22:00:15
>>571
意味がわからんので適当に超解釈を入れて書いた。
もし、超解釈が希望と違ってもめんどいからなおさん。

#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"));
}
574デフォルトの名無しさん:2006/10/31(火) 22:01:24
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):STLを用いて、名前、年齢、住所、電話番号を入力、格納、出力ができるプログラムを作れ。(STLは何をしようしてもよい)
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: VC++EE
 [3.3] 言語: C++
[4] 期限: 来週の月曜日
[5] その他の制限: STLはvector, list の基本的なことをならいました。クラスは使ってお願いします。
575デフォルトの名無しさん:2006/10/31(火) 22:29:55
>>574
入力、格納、出力だけでいいのかな。
iostream 使ったの久しぶりだ…

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2858.txt
576デフォルトの名無しさん:2006/10/31(火) 23:09:10
>>573 >> 575

ありがとうございます!!
これで宿題は完成しました。
感謝☆
577542:2006/10/31(火) 23:14:13
>>566

音を出す制御は完成しています。  適当なダミー関数は入れても大丈夫です
 三番目の音を基準に0とし、マウスのボタンが押されるまでのわずかな時間です.

>enum{SPEAKER_CENTER, SPEAKER_RIGHT, SPEAKER_LEFT};
>sound(SPEAKER_CENTER);
 

>クリックのイベントを取るのは適当なウインドウを作って、ウインドウでのイベント取得でいいの?

  はい、それで良いです。

>専用のウインドウを作るとしたら全画面?サイズ指定あり?

  特に指定はありません。全画面で無くても良いです。マウスでの反応時間
  を取っている間はPCは使われない事とします。 
  
  実はほぼプログラムは出来ていますが、アップロードのやり方が分かりません
  全文載せようとしても文字数オーバーになってしまいます。どうしたらよろしいでしょうか?
 
  説明不足ですがよろしくお願いします  Eメールアドレス 載せときます
578デフォルトの名無しさん:2006/10/31(火) 23:56:35
>>573
>>574
横スレですが、勉強になりました。
STLが、何なのか分からなかったので一から調べてみました。
コンテナの種類には、複数あってそれぞれに適したクラスが既に用意されているのね。
C++って結構便利なのねぇ。
579デフォルトの名無しさん:2006/11/01(水) 00:37:08
[1] 授業単元:プログラミング
[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] その他の制限: ポインタまでは習っています。それまでの範囲でお願いします。

よろしくお願いします。

580デフォルトの名無しさん:2006/11/01(水) 01:04:34
>>579
インデントが汚い。コンパイルすら通らない。コードから何をしたいのか掴むのは不可能。
まずこのコードはどんな動作をして欲しいのか日本語で説明したほうが良い。
581デフォルトの名無しさん:2006/11/01(水) 01:19:44
>>580
失礼しました。
問題は0〜360度を18度ずつ進むSinカーブを
アスタリスクで縦に表示するプログラムを作成するものです。
説明下手なので分りにくければ、Sinカーブをアスタリスクで縦に表示するプログラムを作成すると考えて下さい。
よろしくお願いします。

582デフォルトの名無しさん:2006/11/01(水) 01:20:11
エスパー求む、って感じだな。
583579:2006/11/01(水) 01:31:46
自分の説明下手が恨めしいorz
プリントをうpできる環境も無いし・・・
大人しく諦めます、お手数お掛けしました。
584582:2006/11/01(水) 01:36:10
わりいわりい。581読む前に書き込んじゃった。

ほいこれ・・・ってもういないか。

#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;
}
585デフォルトの名無しさん:2006/11/01(水) 02:10:42
>>542
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2862.cpp
#include のあたりだけ C++ の表現だけど全然 C++ の意味がない orz
適当に書きなおしてね
586デフォルトの名無しさん:2006/11/01(水) 04:10:02
こんな感じにしたいって事なのか?

    *
    ***
    *****
    ******
    *****
    ***
    *
  ***
 ****
*****
 ****
  ***
    *
587デフォルトの名無しさん:2006/11/01(水) 07:09:18
[1] 授業単元: プログラミング演習

[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; から始まるようにと言われています。
588デフォルトの名無しさん:2006/11/01(水) 07:17:38
#include <iostream>
using 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;
  }
}
589デフォルトの名無しさん:2006/11/01(水) 07:30:42
>>587
#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;
}
590デフォルトの名無しさん:2006/11/01(水) 08:05:52
すいません。587のやつ、

     // 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}に移す。

っていうふうにお願いできますか?
(途中に足りない所があれば自分で追加するようにと言われてます)
591デフォルトの名無しさん:2006/11/01(水) 08:21:51
>>590
条件の後だしウゼーーーーーーー
#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;
    }
}
592デフォルトの名無しさん:2006/11/01(水) 08:37:30
条件の後だし、大変申し訳なかったです。
ありがとうございました。
593デフォルトの名無しさん:2006/11/01(水) 08:41:13
すいません、587みたいな学校の課題に役に立ちそうなC++の初心者向けの本があったらどなたか教えてもらえませんか?
594デフォルトの名無しさん:2006/11/01(水) 09:29:08
>>587>>591のまま提出するのか
まあいいか
595デフォルトの名無しさん:2006/11/01(水) 09:59:11
>571の宿題って棒H○Lの宿題じゃ・・・
596デフォルトの名無しさん:2006/11/01(水) 11:23:17
[1] 授業単元:情報処理 VC++
[2] 問題文(含コード&リンク):waveファイルのヘッダー情報を取得して、表示する。
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: Microsoft Visual C++ 2005
[4] 期限: 今週中
[5] その他の制限: バイナリで読み込むのだが、そのバイナリの値を表示する必要はないとのこと。

表示するヘッダー情報は、ファイル容量・フォーマット(PCMとか)・チャンネル数・周波数・ビット数です。
597デフォルトの名無しさん:2006/11/01(水) 11:24:32
>>596に追記
ダイアログベースMFCです。
598PIC:2006/11/01(水) 13:22:00
ここはPICマイコンのプログラム作成の宿題も可能なんでしょうか?
599デフォルトの名無しさん:2006/11/01(水) 14:24:58
IOのインターフェイスさえ公開して、ハードウェアの制限も明記してくれれば、
できる*かも*しれない。

メモリは4kまでとか、intは16bitとか色々な制限あると思うんだが…
600デフォルトの名無しさん:2006/11/01(水) 15:59:23
>>596
その手の問題は解答がつかない可能性が高いです。
なんせ、ここの人等は
文字列を逆順にしたり、四則演算程度の算数
等、なんの役にも立たないプログラムなら得意ですからねw
601デフォルトの名無しさん:2006/11/01(水) 16:19:38
これはひどい自演
602デフォルトの名無しさん:2006/11/01(水) 16:23:38
自演かもしれんが、的を射てる
603デフォルトの名無しさん:2006/11/01(水) 16:26:09
toybox問題には変わりないと思うんだぜ
604デフォルトの名無しさん:2006/11/01(水) 17:16:10
構造体の名前さえ分かれば
fread(&wave_info, sizeof(wave_info), 1, fp);
SetDlgItemInt(dlgWnd, dlgItem, wave_info.???, TRUE)
でできるじゃん

Hit&Blow の方が余程面倒だよ
605291,393 卒論:2006/11/01(水) 17:58:16
>291 や >393 でお世話になりました卒論のものです。
その節はありがとうございました。

以前の入力データは問題なく行えました。追加で、このようなデータもあるのですが
以下の条件で変更を行いたいのですが。

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 の名前変更ルールでリネームを行った
ファイルを出力したいのですが。

すれ違いですが、すみませんがよろしくお願いします。
606デフォルトの名無しさん:2006/11/01(水) 18:28:16
>>605
awk または gawk で
/^[1-9]+.*$/{
if(!($1 in already_print)){
already_print[$1]=1;
print
}
}

例)a.awkの内容は上記のプログラム通り。余計な改行は入れないこと(動作が変わるので)
gawk -f a.awk a.txt > b.txt
607デフォルトの名無しさん:2006/11/01(水) 18:33:54
>>605
その程度のデータ処理なら、>>606みたいにUNIXコマンドを使って処理した方が楽だよ。
608デフォルトの名無しさん:2006/11/01(水) 18:45:42
609291,393 卒論:2006/11/01(水) 19:04:21
>392

のようなプログラムで処理ということはできませんでしょうか?
610579:2006/11/01(水) 19:14:01
>>584さんありがとう御座います!
そして本当に申し訳ないのですが、>>584さんの作ってくれた
プログラムの実行結果の左側に
コレを↓足していただけないでしょうか?条件の後出しになってしまい申し訳ありません。
角度
 0:
18:
36:
54:
72:
90:
108:
126:
144:
162:
180:
198:
216:
234:
252:
270:
288:
306:
324:
342:
360:
611デフォルトの名無しさん:2006/11/01(水) 19:17:40
>>605 >>609
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2863.c

使い方
./a.exe < 入力ファイル > 出力ファイル


./a.exe < a.txt > b.txt

なんで C,C++ にこだわるのやら…
612デフォルトの名無しさん:2006/11/01(水) 19:19:53
>>610
puts(line);

printf("%3d:%s\n", t, line);
613579:2006/11/01(水) 19:51:36
>>612
実行してみたのですが、縦の数値が360まで表示されず
342で止まってしまいます・・・
614291,393 卒論:2006/11/01(水) 19:54:07
>611

ありがとうございます。

すみません。。
615291,393 卒論:2006/11/01(水) 20:01:03
>611
このようなエラーが出る原因はなんでしょうか?

error C2440: '=' : 'void *' から 'struct tag_print_data *' に変換することはできません。(新しい動作 ; ヘルプを参照)
'void*' から非 'void' 型への変換には明示的なキャストが必要です。

あと質問なのですが、>606は同じ結果になるということなんでしょうか?
616デフォルトの名無しさん:2006/11/01(水) 20:02:45
>615

new_member=malloc(sizeof(print_data));

ここでエラーが出ているようなのですが。。
617デフォルトの名無しさん:2006/11/01(水) 20:03:47
.cppでコンパイルしている馬鹿がいるに一票
618デフォルトの名無しさん:2006/11/01(水) 20:05:21
>>615
new_member=malloc(sizeof(print_data));

new_member=(print_data*)malloc(sizeof(print_data));
619デフォルトの名無しさん:2006/11/01(水) 20:09:42
(d[0]==1 && d[1]==1 && d[2]==1) って(d[0]&&d[1]&&d[2]==1) っていう風に書いても大丈夫ですか?
宿題というか宿題の一部みたいなもので・・・よろしくお願いします。
620デフォルトの名無しさん:2006/11/01(水) 20:14:41
>>619
d[0] および d[1] が 1 か 0 の値しか取らないのであれば、大丈夫。
あとは自分で試せば分かる
621291,393 卒論:2006/11/01(水) 20:16:33
>618

ありがとうございます
622デフォルトの名無しさん:2006/11/01(水) 20:16:45
>>619
想定する値にもよるけど。多分無理。
!(~-d[0]|~-d[1]|~-d[2])なら可
623デフォルトの名無しさん:2006/11/01(水) 20:20:59
>>620
なるほど。1以外の値もとるんでこういう風にはかけないんですね。てかこういう書き方自体しないみたいですね。
>>622
 ~ と − の意味がわかりません><
624291,393 卒論:2006/11/01(水) 20:38:03
>618
で作成された↓のデータ。>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
625291,393 卒論:2006/11/01(水) 20:42:03
>624

今回は入力データが↓のように変わっていますが、ほかは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((←この行なし)
626デフォルトの名無しさん:2006/11/01(水) 20:57:09
>>624
char 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)

オレってスルー力皆無だな
627デフォルトの名無しさん:2006/11/01(水) 21:04:46
宿題じゃなくて仕事の下請けだなぁw
628デフォルトの名無しさん:2006/11/01(水) 21:29:50
このスレ見てたら問題出てから回答までのスピードが半端じゃなく早いことがあるね。
かなりできる人が暇つぶしでもしてるんだろうな…
629デフォルトの名無しさん:2006/11/01(水) 21:57:00
宿題は自分がやらなきゃ意味がないと説教するのはもう古いのか。
ここで宿題訊くような奴は端からマになろうなんて思ってないから
一時しのぎで人のを写しても別に問題ないのだろうな。
630デフォルトの名無しさん:2006/11/01(水) 21:57:35
>626

ありがとうございました
631デフォルトの名無しさん:2006/11/01(水) 22:28:52
[1] 授業単元:コンピュータシュミレーション
[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を使っています)
632デフォルトの名無しさん:2006/11/01(水) 22:33:05
>>631
view.cppって何?
VBAでやれば?
633デフォルトの名無しさん:2006/11/01(水) 22:34:54
[1] 授業単元:情報処理
[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] その他の制限: 基礎的な知識で出来るプログラミングでおねがいします。
634デフォルトの名無しさん:2006/11/01(水) 23:05:10
>>633 多分整数じゃなくて正数
#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;
}
635デフォルトの名無しさん:2006/11/01(水) 23:07:10
2重ループでは出来ないのでしょうかね?
636デフォルトの名無しさん:2006/11/01(水) 23:10:44
637デフォルトの名無しさん:2006/11/01(水) 23:14:36
forが3つあっても2重ループなんですか?
初歩的な質問ですいません。
638デフォルトの名無しさん:2006/11/01(水) 23:15:59
>>596
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2865.zip

授業でVC2005が使えるのか。うらやますぃ。
うちの大学は予算が少ないからなぁ。
639デフォルトの名無しさん:2006/11/01(水) 23:16:52
>このスレ見てたら問題出てから回答までのスピードが半端じゃなく早いことがあるね。
去年提出したソースかも。
640デフォルトの名無しさん:2006/11/01(水) 23:25:18
>>638
内の大学はBCB3だった
6〜7年前の話
641デフォルトの名無しさん:2006/11/01(水) 23:31:08
>>634についてですけど、このプログラミングの説明も必要なんで、
できたら解説をお願いします。
642デフォルトの名無しさん:2006/11/01(水) 23:32:37
後出し良くないアル
643デフォルトの名無しさん:2006/11/01(水) 23:40:06
>>642
すいません。
644デフォルトの名無しさん:2006/11/01(水) 23:49:17
どうしても解説をして欲しいです。
今後、後出ししません。
お願いします<m(__)m>
645デフォルトの名無しさん:2006/11/01(水) 23:49:24
>>633,>>641
x≦y の時
(x+1)^3-x^3 ≦ (y+1)^3-y^3
なので
x←x+1 の時、y←y 又は y←y-1 のどちらかで追従できる
646デフォルトの名無しさん:2006/11/01(水) 23:51:00
>>645
ありがとうございます
プログラミング能力が凄いですね
感謝です。
647デフォルトの名無しさん:2006/11/02(木) 00:39:13
1] 授業単元: プログラミング
[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日まで]
648デフォルトの名無しさん:2006/11/02(木) 00:50:19
>>647
#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;
}
649デフォルトの名無しさん:2006/11/02(木) 01:06:57
ここはVC++でもおk?
650デフォルトの名無しさん:2006/11/02(木) 01:17:19
おk
651デフォルトの名無しさん: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] その他の制限:なし
652デフォルトの名無しさん: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] その他の制限:なし
653デフォルトの名無しさん:2006/11/02(木) 01:39:58
VC++おkなんですか!助かった!

[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です。

ほんとにお願いします( ・∀・)!先生、卒業がしたいです・・・
654デフォルトの名無しさん:2006/11/02(木) 01:41:45
655デフォルトの名無しさん:2006/11/02(木) 01:52:16
>>651
#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;
}
656デフォルトの名無しさん:2006/11/02(木) 01:53:49
>>651
#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;
}
657デフォルトの名無しさん:2006/11/02(木) 02:00:50
>>655
>>656
ありがとうございます。非常に助かりました。
658デフォルトの名無しさん:2006/11/02(木) 02:08:38
>>652
#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;
}
659デフォルトの名無しさん:2006/11/02(木) 02:19:12
<<658
本当にありがとうございます。実行イメージを下のようにするには
どうすればよいですか?ほんと初心者でわからなくて、、教えてく
ださい、お願いします。
The figure is drawn.
1. Triangle
2. Rectangle
Please input the number ... 1 ←「...」の後ろはキーボード入力部
Please input height ... 5 ←「...」の後ろはキーボード入力部

* *
* *
* *
*********
三角形は正三角形のような形で
-----------------------------
(メニューとして「2」、段数として「5」を入力した場合)
*****
* *
* *
* *
*****
660デフォルトの名無しさん:2006/11/02(木) 02:20:49
[1] 授業単元:プログラミング
[2] 問題文:生成した乱数をファイルに出力するプログラムを拡張し2つの乱数を生成し出力するプログラムを作成する。
      それらの乱数データを配列に読み込み、その配列の行列の和と積を求め、結果をファイルに出力するプログラムを作成せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限:11/3
[5] その他の制限:使えるようであればmalloc()、strtok()を活用するとの事です。

よろしくお願いします。
661デフォルトの名無しさん:2006/11/02(木) 02:21:09
<<659
すみません、図形がずれました。
三角形は正三角形
四角形は普通の四角形です。
662デフォルトの名無しさん:2006/11/02(木) 02:25:36
>>680
>生成した乱数をファイルに出力するプログラム
とりあえずこれあげないと作れねーだろ
663658:2006/11/02(木) 02:34:56
>>659 ごめ問題読み違えてた
#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;
}
664デフォルトの名無しさん:2006/11/02(木) 02:39:38
>>660
>乱数データを配列に読み込み、その配列の行列の和と積を求め、
配列の行列???
665デフォルトの名無しさん:2006/11/02(木) 02:43:14
>>663
本当にありがとうございました!!これで提出に間に合います。
666デフォルトの名無しさん:2006/11/02(木) 02:46:00
>>653
>>654 で回帰直線の求め方は分かるんじゃないかな

なんで VC 多いんだろう。参加できねーよ
makefile 〜.rc 〜.cpp
でうpしても使い方分かってくれなさそうだし… orz
667660: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;

}
問題文そのまま書いたんですけど・・・多分配列の行列っていうのは乱数を読み込ませた配列の値を使って行列計算をしろって
ことだと思うんですけど・・・どうでしょうか?
668デフォルトの名無しさん:2006/11/02(木) 04:36:47
>>666
へへへ、ダンナ。そういうことができないからここで聞かせてもらってるんでゲスぜ。
先生方が思っている以上にオイラの能力はありやせんぜ。
どなたか >>653 を作成してくれませんか?ボタンクリックのとこだけでいいんですよ( ;・∀・)
669デフォルトの名無しさん:2006/11/02(木) 04:54:54
>>668
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2867.zip
作ってから気付いたんだが、二値化画像からデータを取るんだよね?
これだとクリックしてプロットした点をデータとして使うからちょっと感じが違うんだけども。
670デフォルトの名無しさん:2006/11/02(木) 09:32:44
すいません教えてください。色々調べたのですが、混乱中です。
C++ではなく、Cでウィンアプリを作れと言われたのですが、
これはMFCっていうのは使ってもいいのでしょうか?
あと、開発環境はVSでもおkなんでしょうか??
しかも、CでDB接続とかもできるんでしょうか???
CとC++の情報を切り離せずに混乱しております。
助けて!
671デフォルトの名無しさん :2006/11/02(木) 09:48:31
>>670
猫でもわかるのサイトか本みんさい
全部C言語だから。
あと、MFCはAPIをラップしたクラスだからC++になります。
猫でもの本とか買って、適当に載ってるソースコピペして
いじったらいいじゃな〜い。
672デフォルトの名無しさん:2006/11/02(木) 10:38:13
>>648
助かりました!ありがとうございました!!
673デフォルトの名無しさん: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日まで
674 ◆xQTfY.P6Xs :2006/11/02(木) 11:18:23
1] 授業単元: プログラム言語基礎
[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は偶数");
}
}
これを応用して作れだそうです。

どうかよろしくお願いします
675デフォルトの名無しさん:2006/11/02(木) 11:19:27
【添付ファイルの内容】
Excel を用いて計算結果のグラフを描く
描画データの準備:
 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) を選ぶと、文書中にグラフが挿入される。
676デフォルトの名無しさん:2006/11/02(木) 11:27:31
>>673
どうでもいいがj0,j1はCの標準関数じゃねー
677デフォルトの名無しさん:2006/11/02(木) 11:28:30
[1] 授業単元: プログラミング
[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

これを出力するようなプログラムを教えてください。
678デフォルトの名無しさん:2006/11/02(木) 11:29:22
すいません、表がちょっとずれました。
679デフォルトの名無しさん: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
680デフォルトの名無しさん:2006/11/02(木) 11:40:27
>>677
表のフォーマットがよくわからんからその辺すこし適当。
#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;
    }
}
681デフォルトの名無しさん:2006/11/02(木) 11:57:29
>>674
#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;
}
682 ◆xQTfY.P6Xs :2006/11/02(木) 12:03:33
>>681さん 
 
ほんとうにありがとうございました。 いきなり課題とかだされて全くわからなくてこまっていたんです。ほんとうにありがとうございます。 
683デフォルトの名無しさん:2006/11/02(木) 12:24:02
当日、1日、2・3日前ならともかく、まだ1週間以上期限があるなら、
じっくり自分で考えてみた方が自分のためにもなるし、
出された回答を理解するだけより、よっぽど勉強になると思うんだ。
684デフォルトの名無しさん:2006/11/02(木) 12:45:30
すいません。677の者ですが、680の回答の#include<iterator> #include<algorithm> #include<iomanip> #include<functional> とかはまだ習ってないので、怒られます。
まことに勝手ながら<iostream>しか習ってません。setwとかcharとかも習ってません。
条件の後出しですいませんが、

//除数
//被除数
//商
//(1)計算表の第1行を表示
//(2)計算表の第2行を表示
//(3)計算表の第3行を表示
 //(4)各被除数について以下の処理を繰り返す(反復)
  //(4-1)当該被除数を表示する
  //(4-2)各除数について、被除数を除数で割った商を表示する
  //(4-3)改行する

おおまかに、このアルゴリズムでお願いできませんでしょうか?

685デフォルトの名無しさん:2006/11/02(木) 12:49:23
>>638
ありがとうございます!
今からじっくり見させていただきます。
686デフォルトの名無しさん: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
ズレませんように
687デフォルトの名無しさん:2006/11/02(木) 16:30:07
684、ずっと考えても出来ません。

教えてもらえませんか?
688デフォルトの名無しさん:2006/11/02(木) 16:40:47
テスト
689デフォルトの名無しさん:2006/11/02(木) 16:53:47
>>669
>>653です。
おお。早い!
そうです、こんな感じですが2値化画像を参照して開くんで、とりあえず簡単な1本の完璧でない直線の画像(BMP)をリソースに登録してそれを表示して
そのにょろにょろ直線を直線にするプログラムがいいですね。。。
あと直線も画面の端から端ではなく、線分の一番左のX座標から右のX座標までの線分にしていただけませんか?
しかし、ここの先生方の馬力はすごいですね。お願いします><
690デフォルトの名無しさん:2006/11/02(木) 16:57:54
>>689
あっ!ちなみに線分は細線化されてますので太さは「1」です><
691デフォルトの名無しさん:2006/11/02(木) 23:08:42
いやいや、689先生もたいしたものですよ
692デフォルトの名無しさん:2006/11/02(木) 23:10:29
そんな・・・、691さんほどではありません><
693デフォルトの名無しさん:2006/11/02(木) 23:12:09
>>634
実行したのですが、何も表示されなかったのですが
どうすれば?
694デフォルトの名無しさん:2006/11/02(木) 23:22:31
>>689
http://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
それが正しい動作
695デフォルトの名無しさん:2006/11/02(木) 23:25:22
>>694
答えは無いってことですか?
696デフォルトの名無しさん:2006/11/02(木) 23:35:27
>>695
問題文くらい読まないのか?
697デフォルトの名無しさん:2006/11/02(木) 23:39:07
問題読みましたよ
反例があるっぽいんですけど。
698デフォルトの名無しさん:2006/11/02(木) 23:46:49
>フェルマーは、x^n+y^n=z^n (x,y,z,n:整数)においてn≧3に対して、
> この式を満たすものはないと断言した。これはつい最近になって証明された。
699デフォルトの名無しさん:2006/11/02(木) 23:54:47
つまり、反例がでないってのが答えなんですね
なるほど
700デフォルトの名無しさん:2006/11/02(木) 23:58:09
>>694
先生・・・すさまじいです。。。オイラの卒論なんて一週間でできちゃいそうですね。
ほんとに感謝感激です。ありがとうございました。
701デフォルトの名無しさん:2006/11/03(金) 00:41:32
694の方 ありがとうございました 手助け感謝します
702デフォルトの名無しさん:2006/11/03(金) 03:18:18
[1] 授業単元: 分割コンパイル、ポインタ
[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問ありますが、よろしくお願い致します。
703デフォルトの名無しさん:2006/11/03(金) 04:05:17
>>269が未だに解けてません。検定の前まででいいのでお願いします。
704デフォルトの名無しさん :2006/11/03(金) 06:36:34
>>702
int 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]);
}
705デフォルトの名無しさん:2006/11/03(金) 09:30:21
[1] 授業単元:プログラミング
[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] その他の制限: 構造体、ポインタを使用
706デフォルトの名無しさん:2006/11/03(金) 09:39:53
[1] 授業単元:計算科学
[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
ヒントです。利用して下さい。
707デフォルトの名無しさん:2006/11/03(金) 10:11:48
>>703
>>386 のはどこがいけない?
708デフォルトの名無しさん:2006/11/03(金) 10:24:16
>>705 うっかり間違いが多いな

・ノード追加
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 )
709デフォルトの名無しさん:2006/11/03(金) 10:40:05
>>708
ありがとうございます
ちゃんと正常動作できました
710デフォルトの名無しさん:2006/11/03(金) 10:51:24
>>706
hist[(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;
}
711デフォルトの名無しさん:2006/11/03(金) 11:04:48
>>703 >>386 のここだけ修正すればいけるんじゃない?
return (double)rand()/(RAND_MAX-1);

return (double)rand()/(RAND_MAX+1);
712703:2006/11/03(金) 12:49:47
>>386
>>707
>>711
ごめんなさい。見逃してました…
ありがとうございました!これから解析してみます。
713デフォルトの名無しさん:2006/11/03(金) 13:51:43
>>704ありがとうございます。
しかし、正常動作しないので、>>702の問題答えてくれる方よろしくお願いします。
1と2、分けて書いてくれると有難いです。
714デフォルトの名無しさん:2006/11/03(金) 14:02:59
俺なんてまだwhile文を習ったレベルだよ。
715デフォルトの名無しさん:2006/11/03(金) 14:12:59
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):2 つの整数 a と b を入力し, 小さい方を出力するプログラムを条件演算子を用いて作成せよ
[3] 環境
 [3.1] OS: Windows98
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2006年11月3日16:00まで
716デフォルトの名無しさん :2006/11/03(金) 14:32:54

(a >b) ? printf("%d",b) : printf("%d",a);;
717デフォルトの名無しさん:2006/11/03(金) 14:53:04
>>716
美しくない
718デフォルトの名無しさん:2006/11/03(金) 14:59:07
[1] 授業単元:計算機システム
[2] 問題文1整数のビットパターンを表示するプログラムを作成せよ
     2単浮動小数点数のビットパターンを表示するプログラムを作成せよ
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:borland C++ 5.5 
[3.3] 言語:C++
[4] 期限:今日中 11/3
719デフォルトの名無しさん:2006/11/03(金) 15:01:04
>>716
普通はこうじゃね?
printf("%d",a>b?b:a);
720デフォルトの名無しさん:2006/11/03(金) 15:04:16
>>716  ありがとうございます。助かりました。
721デフォルトの名無しさん :2006/11/03(金) 15:08:13
#include <bitset>
722デフォルトの名無しさん :2006/11/03(金) 15:09:20
久々ありがとうって言われちゃった
嬉しいからあげちゃお
723デフォルトの名無しさん:2006/11/03(金) 15:24:54
>>718
問題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;
}
724デフォルトの名無しさん:2006/11/03(金) 15:53:37
>>718
#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;
}
725デフォルトの名無しさん:2006/11/03(金) 17:33:33
[1] 授業単元:C言語演習
[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] 期限:明日の朝まで。
726デフォルトの名無しさん:2006/11/03(金) 18:22:25
#define BIT 32

int 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;
}
727デフォルトの名無しさん:2006/11/03(金) 19:26:59
[1] 授業単元:アルゴリズム(並び替えと探索)
[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] その他の制限:今までは制御構造、ポインタ、構造体など、
今回はクイックソート、バブルソート、バイナリサーチまで習いました。
728デフォルトの名無しさん:2006/11/03(金) 19:52:19
>>726
ありがとうございます。参考になりました。
729デフォルトの名無しさん:2006/11/03(金) 20:48:05
>>723
>>723
どうもありがとうございます。
730デフォルトの名無しさん:2006/11/03(金) 21:14:44
731727:2006/11/03(金) 21:30:34
>>730
素早い返答ありがとうございます。
非常に助かりました。
732デフォルトの名無しさん:2006/11/03(金) 22:15:24
>>731
すまんfreeの順序間違えた。
free(p->word);
free(p);
にしといて
733デフォルトの名無しさん:2006/11/03(金) 23:00:16
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):正の整数値を読み込み、その数を逆順に表示するプログラムを作成せよ
  例えば、1234が入力されたら4321と出力するする
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 11月7日
[5] その他の制限: while文を使う

10で割ってその余りを表示していくらしいんですがうまくいきません
734デフォルトの名無しさん:2006/11/03(金) 23:05:01
>>733
#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;
}
735デフォルトの名無しさん:2006/11/03(金) 23:36:43
>>734
ありがとうございます
こんなに早く答えてもらえるとは
736デフォルトの名無しさん:2006/11/03(金) 23:44:36
[1] 授業単元:OpenGLとアニメーション
[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
737デフォルトの名無しさん:2006/11/04(土) 09:54:05
[1] 授業単元:プログラミング
[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などが漸化式の様に連動していかない(数値として変化していってない)みたいで、どういう風に記述したらいいのかわかりません。
数日前にもこの課題を答えて頂いたんですが、ビルドできませんでした。
参考にはなったんですが、自分はアホなのでこんな風につまづいてます。
738デフォルトの名無しさん:2006/11/04(土) 09:59:30
737に入りきれないと思ったので補足です。

最初のところは、
#include <iostream>
using namespace std;
void main(){          しか習ってません。

あと cout cin int for while if…else  くらいしか習ってません。       
739デフォルトの名無しさん:2006/11/04(土) 10:10:37
>>737
自分で書いたところまで晒してくれ
740デフォルトの名無しさん:2006/11/04(土) 10:12:27
>>737
google:フィボナッチ
741デフォルトの名無しさん:2006/11/04(土) 12:34:52
なぜ、いつもgoogleなの?
別にyahooでもinfoで変わらなくね?
742デフォルトの名無しさん:2006/11/04(土) 12:43:41
737の者です。739の返事を遅れてすいません。
#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;
}
}
743デフォルトの名無しさん:2006/11/04(土) 12:48:01
742のコンパイル結果です。
------ ビルド開始: プロジェクト: 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とかになってるんですかね?
744デフォルトの名無しさん:2006/11/04(土) 12:54:35
コンパイラの言葉に耳を傾けてあげてください。・゚・(ノД`)・゚・。
745デフォルトの名無しさん:2006/11/04(土) 14:21:23
>>742
> 自分で、やってみると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を出力しよう。
746デフォルトの名無しさん: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;}
747デフォルトの名無しさん:2006/11/04(土) 15:58:45
>>746
ちょwwwおまwwww
748デフォルトの名無しさん:2006/11/04(土) 16:17:36
>>746
特定した
749秋葉の大学生&rlo;望志んさ屋トフソ:2006/11/04(土) 19:19:48
こんばんわ。C++暦2日目の学生です。

乱数で0が出るまでの回数をtemp[]配列に記憶しておき,それを1万回試行してtemp[]の平均を求める。
http://ipoko.skr.jp/ransuu.cpp.txt
というプログラムを考えたのですが,なぜか最初の1回だけランダムな数字が出て
残りの9999回は全部0になってしまいます。

何故でしょうか?誰か教えてくださいm(__)mペコ
750デフォルトの名無しさん:2006/11/04(土) 19:25:59
>>749
j = 0;

j = 0; s=1;
751秋葉の大学生&rlo;望志んさ屋トフソ:2006/11/04(土) 19:27:54
>>750
アッー!
なるほど、どうもありがとうございましたw
752デフォルトの名無しさん:2006/11/04(土) 20:17:20
大学生の方にお願いです。
あまりにもレベルの低い宿題を晒さないでください。

大学いってもその程度ができないのかと思うと中学生ながら絶句してしまいます。
753デフォルトの名無しさん:2006/11/04(土) 20:21:06
中学生でプログラムの授業があるのは少数派です
754デフォルトの名無しさん:2006/11/04(土) 20:27:20
>>753
13年前に中学生だった俺でも授業でやったよ。(N88-BASICだったが)
最近なら程度の差はあれやってるんじゃないかな。
755デフォルトの名無しさん:2006/11/04(土) 20:33:58
普通科高校だと99%の学校はプログラムやらない
大学に入るまでにやるのは高専・商業科・専門の低収入組くらい
756デフォルトの名無しさん:2006/11/04(土) 20:35:04
私立でもやってないよ
757デフォルトの名無しさん:2006/11/04(土) 20:41:02
>>754
さりげなく数学の教科書にはあるが・・・・やってない
758デフォルトの名無しさん:2006/11/04(土) 20:49:35
別に授業でなくても、プログラミングが趣味なんてヲタクな中高生じゃねーの
759デフォルトの名無しさん:2006/11/04(土) 20:51:03
俺の家にパソコンが登場したのは大学に入ってから
760デフォルトの名無しさん:2006/11/04(土) 20:51:58
プログラミングが好きな人の9割は負け組みです
頭が良い人の9割は勝ち組です
また将来の勝ち組は子供時代にプログラミングに対して興味を持ちません
761デフォルトの名無しさん:2006/11/04(土) 20:57:17
>>752
ここで聞くような奴はそもそもプログラミングを職業にするような奴ではなく、
ただ課程として履修しないといかんからやってるだけの奴なんだと気づけ。
出来ないんじゃなくて、出来る必要のない、出来なくても何の問題なく生きていける人種なのさ。
そしてそのための時間を彼らは(彼らの社会的地位を高めるような)別のことに使ってるのさ。
762デフォルトの名無しさん:2006/11/04(土) 20:57:39
まぁ、そういうのを2chで偉そうに言う奴の9割は負け組
763デフォルトの名無しさん:2006/11/04(土) 20:58:22
で,宿題まだー?
764デフォルトの名無しさん:2006/11/04(土) 20:59:12
まだなのさ。
765デフォルトの名無しさん:2006/11/04(土) 21:05:19
>>761
出来なくても何の問題もないことないじゃん。
過程として履修しないと卒業できないんだろ?
766デフォルトの名無しさん:2006/11/04(土) 21:07:52
それじゃあおねがいします
[2] 問題文(含コード&リンク): 正の整数値を読み込み、その数だけ*を連続して表示するプログラムを作成せよ。
例えば、3が入力されたら***と表示すること。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 7日
[5] その他の制限: while文で
767デフォルトの名無しさん:2006/11/04(土) 21:08:36
>>765
でも多くの大学で「過程」ではなく「成果物」が重要
とりあえず出来てればいい
768デフォルトの名無しさん:2006/11/04(土) 21:13:40
>>766
今考えただろその問題
769デフォルトの名無しさん:2006/11/04(土) 21:15:05
>>765
そりゃ行く学校による。
さわり程度にプログラミングの講義やって終わりにして
就職先はプログラミングとは何の関係もないところなら、
宿題でそこそこの回答を提出して成績稼いだほうが結果的にお得。

それを分かってて、それでもなおここの連中は回答し続けるのさ。
なぜならそこに問題があるからだ。
770デフォルトの名無しさん: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;
}
で大丈夫でしょうか?
771デフォルトの名無しさん:2006/11/04(土) 21:21:08
std::accumulateを使いたくなる
772デフォルトの名無しさん:2006/11/04(土) 21:30:31
>>768
違います
773デフォルトの名無しさん:2006/11/04(土) 21:33:59
>>770
double y;

double y=0.0;
774秋葉の大学生&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
775秋葉の大学生&rlo;望志んさ屋トフソ:2006/11/04(土) 21:50:12
あ、CPUとメモリも載せておきます

演算装置:Athlon64-3600+
メインメモリ:DDR SDRAM 1024GB
776デフォルトの名無しさん:2006/11/04(土) 21:52:13
static double temp[20000]; とかにしてみれば?
多分スタックオーバーフローが生じてる
777デフォルトの名無しさん:2006/11/04(土) 21:52:49
>>766 釣られてみる
#include<stdio.h>

int main(void)
{
int c;

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

while (c-- > 0)
putchar('*');

return 0;
}
778デフォルトの名無しさん:2006/11/04(土) 21:53:58
>>774
さっきの>>749のことか?
temp[10000];で10000個のメモリしか確保してないんなら
20000にしたら不正アクセスで落ちるのは当然だぞ。
779秋葉の大学生&rlo;望志んさ屋トフソ:2006/11/04(土) 21:54:21
http://ipoko.skr.jp/ransuu.cpp.txt

n=20000ちょいくらいで実行させてみてください
他にもエラーで強制終了する人いますか?


自分で使うプログラムだからいいけど
例えば,仕事とかで顧客に納品するアプリやシステムでこういうことが起こったら
どう対処するべきなんですか?(顧客側の計算機のスペックのせいで台無しになったら・・・)
780秋葉の大学生&rlo;望志んさ屋トフソ:2006/11/04(土) 21:55:19
>>776-778

アッー!
なるほど、どうもありがとうございましたw
781秋葉の大学生&rlo;望志んさ屋トフソ:2006/11/04(土) 21:57:44
C++では

int temp[n];

ってのは使えないんですか?Cでも使えたかなぁ・・・?
782秋葉の大学生&rlo;望志んさ屋トフソ:2006/11/04(土) 21:58:17
動的に確保するしかないのか
malloc()とかって使えるのかなぁ
783_:2006/11/04(土) 21:58:50
>>779
もしかしてwin32consolアプリでやってる?
DOS窓は286でも使えるように(今回の場合、仮想86モードだろうけど)、すなはちセグメント切り替えできない、すなはち64KBの壁があって、
それ以上のプログラムははじかれると思ったけれど・・
784_:2006/11/04(土) 22:00:50
>>782
麻呂はC++仕様
785秋葉の大学生&rlo;望志んさ屋トフソ:2006/11/04(土) 22:04:34
2万回でやると
27780前後の乱数に収束する
DOS窓でやってます
787デフォルトの名無しさん:2006/11/04(土) 22:05:51
余談

>擬似乱数を生成するrand関数を使います。この関数は、0以上RAMD_MAX以下の乱数を返します。
>なお、RAND_MAXの値は処理系に依存しますが、少なくとも32,767であることが保証されます。

http://www.bohyoh.com/CandCPP/FAQ/FAQ00062.html
788デフォルトの名無しさん:2006/11/04(土) 22:10:03


C++のrand()関数で返ってくる値の最大値RAND_MAXが分からない

そこで統計的に近似させることが出来るのではないかと考えた。



【モデル】

1.0〜RAND_MAXの中から任意のある値を決め

2.その数が 何回目のrand()で返ってくるか。

3.1〜2を何回も繰り返す。
789_:2006/11/04(土) 22:10:41
ごめんmalloc(C,C++)とnew(C++)まちがえたwwwwwww
790デフォルトの名無しさん:2006/11/04(土) 22:10:45
>>783
WIN32コンソールアプリはDOSアプリとは違い、
64KBの壁はない。
791デフォルトの名無しさん:2006/11/04(土) 22:11:25
WIN32コンソールアプリとDOSアプリの違いが分からない。
792デフォルトの名無しさん:2006/11/04(土) 22:13:28
>>791
そうか。死ね。
793デフォルトの名無しさん:2006/11/04(土) 22:14:45
>>786
> 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
794デフォルトの名無しさん:2006/11/04(土) 22:14:50
ウェブ検索結果  WIN32コンソールアプリとDOSアプリ  で検索した結果 1〜1件目 / 約1件 - 0.56秒(検索結果の見方)


http://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

795_:2006/11/04(土) 22:15:28
>>790
なるほど
ところでWIN32コンソールアプリもコンパイル時にFARCALLやってくれるのかな
796デフォルトの名無しさん:2006/11/04(土) 22:15:46
>>345の気をつけますというのは>>343に対してです(汗


342 名前:秋葉の大学生♂?望志んさ屋トフソ 投稿日:2006/11/04(土) 19:31:28
Cはそれなりに得意ですが
CとC++の違いがまだ分からないです。
勉強に当たって何に気をつければいいとかありますか?

343 名前:デフォルトの名無しさん 投稿日:2006/11/04(土) 19:35:16
罠が増えてるので気をつけましょう
788=796=797
798デフォルトの名無しさん:2006/11/04(土) 22:20:51
[1] 授業単元:ソーティング
[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言語初心者です。
頑張ってみたものの、コンパイルは通っても実行するとエラーが出てしまいます。
799デフォルトの名無しさん:2006/11/04(土) 22:21:21
http://www.jurapun.com/Tutorial/Batch/index.htm
「MS-DOSプロンプト」はWindowsではMS-DOSアプリケーションだけでなく、Win32コンソールアプリケーションを動作させるための環境でもあります。
このWin32コンソールアプリケーションは、見た目はMS-DOSアプリケーションと変わりませんが、中身はれっきとしたWin32アプリケーションです。
よって、MS-DOSアプリケーションとは違ってセグメント(64KB)境界を気にしないでアプリケーションが組めるわけです。

バッチ
800デフォルトの名無しさん:2006/11/04(土) 22:22:09
>>798
ちょwwwおまwwww本日かよ!
801デフォルトの名無しさん:2006/11/04(土) 22:22:31
main()関数でかいからCよりC++のほうが好き???
802デフォルトの名無しさん:2006/11/04(土) 22:22:51
>>800さん
ギリギリまでがんばったんですが、わからなかったんです・・・
803デフォルトの名無しさん:2006/11/04(土) 22:23:21
メールやWEB等のインターネットによる提出だと
24:00までが〆切ってのも結構あうr
804デフォルトの名無しさん:2006/11/04(土) 22:25:42
>>802
単語の文字数や単語数の限界値は?
805デフォルトの名無しさん:2006/11/04(土) 22:26:02
>>798
別なところで質問して答え貰ってただろw
806デフォルトの名無しさん:2006/11/04(土) 22:27:14
タンゴ で思い出した!
yahoo映画れびゅーで
フラガールって人気あるけど面白いの?
807デフォルトの名無しさん:2006/11/04(土) 22:27:14
>>804さん
明確な指定はないです
一応単語数は100語に指定してあります

>>805さん
恐らく同じ授業取っている別人ではないかと・・・
808デフォルトの名無しさん:2006/11/04(土) 22:27:55
>>807
おまえ、小林じゃねーか!
どうしたんだよ、おい
809デフォルトの名無しさん:2006/11/04(土) 22:28:01
>>798
>>730じゃね?
810デフォルトの名無しさん:2006/11/04(土) 22:28:49
これは酷い( ^ω^)
811デフォルトの名無しさん:2006/11/04(土) 22:29:21
なんだ答え出てるじゃん
812デフォルトの名無しさん:2006/11/04(土) 22:29:51
しかもmain関数がコンパクトで分かりやすいな
813デフォルトの名無しさん:2006/11/04(土) 22:30:08
>>809さん
あ、はい
出来ればtree構造を使えという指定を使うとこれですね
私がやったのは使わない方法なので・・・
814デフォルトの名無しさん:2006/11/04(土) 22:30:38
だが個人的にmainを最後に書くのは好かない
815デフォルトの名無しさん:2006/11/04(土) 22:33:04
>>809
大学何年生?
816デフォルトの名無しさん:2006/11/04(土) 22:33:22
>>813
大学何年生で出る宿題?
817デフォルトの名無しさん:2006/11/04(土) 22:33:29
>>814
俺はmainを最後に書く派。
プロトタイプ宣言面倒じゃね?
818デフォルトの名無しさん:2006/11/04(土) 22:34:24
>>816さん
2年です
819デフォルトの名無しさん:2006/11/04(土) 22:36:12
プログラミングの宿題なんて先生や上司しだいで
天と地ほど難易度に差が出てくる
820デフォルトの名無しさん:2006/11/04(土) 22:36:28
>>807
http://l.huu.cc/board/
ここに答えあるよ
821デフォルトの名無しさん:2006/11/04(土) 22:37:58
    ????????????????
   ??????????■?■????
  ??????■〓??      ?????
  ????■??           ????
  ???????          ??????
 ?????? ???????  ? ?  ???
??????????  ? ?  ???? ???
■???????  ???? ??     ??
?????????      ?? ??    ■
■????????      ????     ??
??????????      ?????   ?これがコピペできないとPC関連の仕事は難しい
 ??????????   ??■?  ?
 ????????????       ??
   ????????■????? ??▲
822デフォルトの名無しさん:2006/11/04(土) 22:39:37
>>817
あれは書く癖つけたほうがよくないか一応
823730,809:2006/11/04(土) 22:41:21
>>815
聞いても何の役にも立たんと思うけど、俺は2回生だな。


mainを最後に書いてるのはぶっちゃけプロトタイプ宣言面倒だから。
なんか1ファイルで収まるレベルの課題だと、真面目に書くのだるいんだよな。
824デフォルトの名無しさん:2006/11/04(土) 22:42:04
奇遇だな
俺も2年生だ
825デフォルトの名無しさん:2006/11/04(土) 22:43:07
>>823
ぶっちゃけも何もそれ以外の理由はないだろうなw
826デフォルトの名無しさん:2006/11/04(土) 22:43:21
書く癖はつけておいたほうがいいかもな
といWinnyのソースコード見て思った

Winnyのmain.cはヘッダファイルでまとめちゃって
どこいっちゃてるかもう沸け分からないけど
827798:2006/11/04(土) 22:44:15
みなさん迅速な対応ありがとうございます!
先ほど教えていただいたソースをがんばって理解していじってみます
828デフォルトの名無しさん:2006/11/04(土) 22:45:52
普通のアプリケーションなら書くべきだけど、宿題レベルなら省略しても問題ないだろ
829デフォルトの名無しさん:2006/11/04(土) 22:45:58
>>826
ありゃバイナリから再構成したものだから全体的にむちゃくちゃ。
830デフォルトの名無しさん:2006/11/04(土) 22:47:32
>>828
確かに
すいません さっきの大学生ですが
http://ipoko.skr.jp/ransuu.cpp.txt

int型の配列を25000個なら確保できるけど,
30000個以上だとプログラム実行させても強制終了しちゃいます

これの原因は何でしょうか?
832デフォルトの名無しさん:2006/11/04(土) 22:52:41
>>831
スタックオーバーフロー
833デフォルトの名無しさん:2006/11/04(土) 22:53:06
>>831
釣りキター
48氏(C/C++)のオリジナルではないが

Winnyの機能を元に逆アセンブリされたソースコード
http://ipoko.skr.jp/winny2_src_noyounamono.zip
>>832-833
あ、ちなみにソースコードの
int temp[];のところで3万以上を入力しても駄目なんです><
836デフォルトの名無しさん:2006/11/04(土) 22:56:12
>>834
ここは宿題スレだ。用事が済んだのなら帰ってくれ。
というよりint temp[3万以上];
としたソースをコンパイルして実行させると強制終了しちゃいます。

ユーザが入力する前に・・・
838デフォルトの名無しさん:2006/11/04(土) 23:00:03
>>837
キーワードが>>832に示されている。
ぐぐれ。
839デフォルトの名無しさん:2006/11/04(土) 23:00:56
>>837
>>776みてねーのか
840デフォルトの名無しさん:2006/11/04(土) 23:04:04
スタックがスパッツとかストックの親戚だとおもてる悪寒
すなおにヒープで確保しろとおも
>>839
え?
int temp[1000000];とかにすると強制終了します
842デフォルトの名無しさん:2006/11/04(土) 23:07:03
winnyってDephiって聞いたことあるんだが違ったのか
843デフォルトの名無しさん:2006/11/04(土) 23:07:44
>>837
ソフト屋さん志望してないなら
ヒープ・スタックの区別なんて知る必要ないよ
(逆読みってことはそういうことだよね)
844デフォルトの名無しさん:2006/11/04(土) 23:08:34
>>841
もうお前添え字1000個超えたらヒープからもってくるようにしろ
これは命令です
845デフォルトの名無しさん:2006/11/04(土) 23:08:34
私、mixiのとあるC言語コミュに加入していたのですが、そこの管理人があまりに横柄&失礼な文を書くので退会してきました(^_^;)

初心者の人が虫食い状態のソースを埋めて完成させる簡単な課題を丸投げしていたのですが…

わざと理解できないように難しく書き直したり、きちんとお礼を言っている質問者に対して『この程度の事が分からないのはやる気がないだけ、そんな人間にお礼を言われる筋合いもないし、虫酸が走る』とまで書いていました…。

分かる人には大した事の無いことだったとしても、分からない人にはそうでないのですから、もう少し常識ある態度が取れないのかな…と思った訳です。
846デフォルトの名無しさん:2006/11/04(土) 23:09:25
実は、他の掲示板でも似たような事があり、非常に不愉快な気分になった事もありました。初心者&入門者用と謳っていながら、分かる人が知識をひけらかし、分からない人を中傷するような感じだったんです。

こういうのを見た後に、ここのサイトにやってきたので、余計に素晴らしいなと思ったんですよね(笑)

私の拙い知識でも役に立つ人がいるのならば…と、今後を驕ることなく書き込みしていきたいと思ってますよ(^-^)
847デフォルトの名無しさん:2006/11/04(土) 23:10:09
>>845
もしかしてその発言した奴はKusa○○○eじゃないのか。
848デフォルトの名無しさん:2006/11/04(土) 23:10:16
>>845
わかってないですね
その人にはあなたには分かっている「常識」が分かっていなかったんですよ?
なんで分かりやすく「常識」を教えてあげなかったんですか
結局あなたも一緒じゃないですか!!
849デフォルトの名無しさん:2006/11/04(土) 23:10:55
べろべろば〜♪
850デフォルトの名無しさん:2006/11/04(土) 23:12:11
ネットの人間なんて他人を誹謗中傷することで相対的に自分をよく見せようと思ってるやつばかりだよ
851デフォルトの名無しさん:2006/11/04(土) 23:12:53
>>847
○○○○kab○
852デフォルトの名無しさん:2006/11/04(土) 23:13:03
PGにはそうゆうタイプの人間多いよ
853デフォルトの名無しさん:2006/11/04(土) 23:13:57
kusakabeをブックーマークしますた
854デフォルトの名無しさん:2006/11/04(土) 23:15:17
>>845
>>846
そういう真面目さは裏切られるのがオチなのでお勧めしない。
個別の疑問に優しく答えて欲しいならそれ相応の金を払って家庭教師でも雇えばいい。
タダで人から何でもかんでも教わろうという考えが既に虫のいい考えだ。
855デフォルトの名無しさん:2006/11/04(土) 23:16:49
>>854
m9(^Д^)プギャー
856デフォルトの名無しさん:2006/11/04(土) 23:17:19
>>773
あ、そうですね。ありがとうございます。
857デフォルトの名無しさん:2006/11/04(土) 23:19:14
面白い宿題ならわりと食いつく。
(そういう宿題はめったにないけど。)

GIVE&TAKEの精神で。
ネタを提供するかわりに回答を教えてもらうと。
一方通行は健全じゃないよな。
858デフォルトの名無しさん:2006/11/04(土) 23:22:11
このスレの場合、からかいながらも真っ当な(ときには間違いもあるが)ヒントを出してる
ってところでちゃんと宿題の助けにはなってると思う。
単に答えを教えて、それに大してありがとうってだけでは誰のためにもなってないわけで、
一見して穏やかなようでもそれが正しいとは思えない。
859デフォルトの名無しさん:2006/11/04(土) 23:38:19
ところで宿題が数問すっとばされてるのは気のせいか
860デフォルトの名無しさん:2006/11/04(土) 23:39:38
>>845-846
言いたいことは分かるが常識ある人間ならこんなところで陰口をたたくのはやめような
861デフォルトの名無しさん:2006/11/04(土) 23:41:16
すいません さっきの大学生ですが
http://ipoko.skr.jp/ransuu.cpp.txt

int型の配列を25000個なら確保できるけど,
30000個以上だとプログラム実行させても強制終了しちゃいます

配列の宣言のところで
int temp[3万以上]; としたソースをコンパイルして実行させると強制終了しちゃいます。


これの原因は何でしょうか?
862デフォルトの名無しさん:2006/11/04(土) 23:41:54
流れ早いぞ
863デフォルトの名無しさん:2006/11/04(土) 23:41:59
原因は大宇宙の神秘♪
864デフォルトの名無しさん:2006/11/04(土) 23:42:34
Ransuu::RandomToukei()
{
int n, s=9999, temp[1000000]; //30000以上にすると強制終了?
float sum = 0.0;
865デフォルトの名無しさん:2006/11/04(土) 23:43:09
>>861
言語の意味的には間違ってないと思う。
だけど、現実には無制限にメモリを使えるわけじゃないんだ。
スタックからあまりたくさん確保するのは基本的に避けよう。
866デフォルトの名無しさん:2006/11/04(土) 23:44:25
スタック領域 <<きっと超えられない容量の壁<< ヒープ領域
867デフォルトの名無しさん:2006/11/04(土) 23:44:35
>>861
だからilinkのオプションに/S:0x8000000 (=8MB) でも付けてみろって。
マルチすんな。ますます誰も答えなくなるぞ。
868デフォルトの名無しさん:2006/11/04(土) 23:46:31
1000000×4byte=4MB
869デフォルトの名無しさん:2006/11/04(土) 23:47:12
質問した相手が悪かったんだろう。これからは質問する前に
Ku○○○○○eがいないかどうか確かめて、もしいたらそこには
何も書き込まない事だな。
870デフォルトの名無しさん:2006/11/04(土) 23:52:26
>>555
意味不明
解説キボン

>>660
行列の大きさが不明
指定しる!

>>673
ベッセル関数 j0() j1() の取る引数が不明

>>736
VCなんて持ってない

ってところかな…
871デフォルトの名無しさん:2006/11/05(日) 00:06:46
>>870
推測だけど多分
double j0(double)
double j1(double)
872デフォルトの名無しさん:2006/11/05(日) 00:10:17
>>870 多分>>555はこういうこと。
入力は
仕事の到着する時間 仕事開始から終了まで必要な時間
となる。んで、仕事番号は 0 から順番に勝手に付けろ、と。

出力の前半は要するに入力したデータをフォーマットだけ入れてそのまま出力。
後半は、最後の仕事終了時刻が最も早くなるようにスケジュールを組み、その状況をしめす。
"JOB #"は仕事番号、"Arr"は仕事が到着する時刻、"Fin"はその仕事が終了する時刻、
"Svc"は仕事にかかる時間、"TA"は仕事に実質的にかけた時間(終了時間-到着時間)
873デフォルトの名無しさん:2006/11/05(日) 00:11:06
>>673
#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;
}
874デフォルトの名無しさん:2006/11/05(日) 00:55:47
IT化だから最近の子供は凄いのか〜とか思うのは間違い!!
最近の子供はコンピュータがブラックボックス化してしまたせいで
コンピュータの仕組みについては何も知らない

MS-DOS?Windows3.1?コマンドライン?(謎)って感じ

昔に比べて自分でプログラム作る必要は無くなったし
自作する必要も無くなった(自作PCと既製PCの値段の差が無くなってきている!)

(まぁインターネットサーフェインやHP作成はちょっと昔の子供より出来そう?だが)

商業高校の掲示板とかスレとか見てみ?
情報をたくさん勉強してるはずなのに何も知らないよ?

資格もワープロ検定やパソコン検定などエンドユーザ側の試験ばかり(それはそれで悪くはない・・?)
875デフォルトの名無しさん:2006/11/05(日) 00:57:06
スタック領域って決まってたんだ…始めて知った(初級者)
メモリあるだけ使えるのはヒープだけの特権なのね
876デフォルトの名無しさん:2006/11/05(日) 00:58:15
スタック知ってる時点で初心者じゃない気がする
877デフォルトの名無しさん:2006/11/05(日) 01:02:45
ポインタの本の最初の方に書いてあったから知ってるだけとです
どんなアルゴリズムなのか全然わからんとです…('A`)

スレ違いすみませんでした
学校で習ってるわけじゃないので質問したことはないけど、色々勉強になるのでROMせてもらってます
878デフォルトの名無しさん:2006/11/05(日) 01:12:55
え?
スタックやキューの大きさって自分で決められないの?
今までかってに配列宣言してたけど
879デフォルトの名無しさん:2006/11/05(日) 01:38:30
変にでかい値じゃなけりゃ(・ε・)キニシナイ!!
880デフォルトの名無しさん:2006/11/05(日) 02:54:53
>>878
> スタックやキューの大きさって自分で決められないの? 
↑と↓の展開の速さが釣りを表しています
> 今までかってに配列宣言してたけど 
きっと余程急いでいたのでしょう・・・
881デフォルトの名無しさん:2006/11/05(日) 04:16:15
              ∧        l'vヘ
         ハ ┌( ;/ ト, ,、 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       )ハ
       ヽ )   ((        )ノ      /
       ノ/     ')    _/
882デフォルトの名無しさん:2006/11/05(日) 04:16:40
>>365
そりゃ、スタックオーバーフローだろうな。
temp配列の領域をスタックに置いているから、ある程度以上のインデックスを超えると
リンカで用意しているスタック領域を超えて、メモリ領域を壊しまくる。か、MMUによってアクセス例外が起きる。
普通ある程度大きな領域を必要とする場合は、ヒープ領域にとる。
int* temp = new int[1000000]; //領域確保
... 処理
delelte[] temp; //使い終わったら必ず領域開放
883デフォルトの名無しさん:2006/11/05(日) 04:17:41
>>861
そりゃ、スタックオーバーフローだろうな。
temp配列の領域をスタックに置いているから、ある程度以上のインデックスを超えると
リンカで用意しているスタック領域を超えて、メモリ領域を壊しまくる。か、MMUによってアクセス例外が起きる。
普通ある程度大きな領域を必要とする場合は、ヒープ領域にとる。
int* temp = new int[1000000]; //領域確保
... 処理
delelte[] temp; //使い終わったら必ず領域開放
884秋葉の大学生&rlo;望志んさ屋トフソ:2006/11/05(日) 04:20:26
>>883
ありがとうございました。
スタックがそんなところに存在して
あの場所で宣言すると勝手にリンカのスタックに入ってしまい
しかもゴチャゴチャした制約があったなんて知りませんでした
勉強になります

885デフォルトの名無しさん:2006/11/05(日) 04:42:30
問題:年代と月のインデックス(1-12)を読み込み、
曜日ごとに整理された表(カレンダー)を表示するプログラムを製作せよ
886デフォルトの名無しさん:2006/11/05(日) 04:44:30
887デフォルトの名無しさん:2006/11/05(日) 10:47:30
[1] 授業単元:情報処理
[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のプログラムに渡す所で迷っています。
どなたかお願いします。
888デフォルトの名無しさん:2006/11/05(日) 15:13:53
保存してないデータを別プログラムから読み出せ、とは書いてないから
問題文のプログラムにFFTのルーチン書き加えたりして、そのままbufを読みに行けば?
889デフォルトの名無しさん:2006/11/05(日) 17:56:49
[1] 授業単元:Cプラクティス
[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
ここまでは書いたのですが、うまく動きません。
よろしくお願いします。
890デフォルトの名無しさん:2006/11/05(日) 18:40:44
>>889
勝つ条件は?
それと
>先手は意図的に偶数番目、奇数番目どちらかのカードを取りつづけることが出来る。
ここもよくわからないんだけどランダムに並んだカードの端からしか取れないのに
どうやって意図的に選べるんだ?
891デフォルトの名無しさん:2006/11/05(日) 19:41:59
>>890
勝つ条件抜けてました。すいません。
取ったカードに書かれた数字の和が大きいほうが勝ちです。

1 2 3 4 5 6
とあるときに、自分が偶数番目である6を取った場合、1 2 3 4 5 となり、相手は1か5の奇数番目を取るしかなくなる。
で、相手がどちらを取ったとしても左右の端どちらかは必ず偶数番目なので、また偶数番目をとることができる。
同様に一番最初に奇数番目を取った場合も同じ。
こうやって先手は偶数番目、奇数番目どちらかを意図的にとりつづけることが出来る、ってわけです。
892デフォルトの名無しさん:2006/11/05(日) 20:13:41
脳内コンパイラしか通していないが・・・

enum {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;}
893デフォルトの名無しさん:2006/11/05(日) 20:27:39
>>891
偶数奇数で交互に並んだランダムな数列という事ですね。
894デフォルトの名無しさん:2006/11/05(日) 20:28:40
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):3つの整数をキーボードから入力し、switch文を用いて大きい順に並べるプログラムを作成しなさい。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Borland C(V5.5)
 [3.3] 言語:C
[4] 期限:11月06日 12:00まで
[5] その他の制限: 本当に基本的なプログラムでお願いします。

いろんなサイトを参考にしましたが、自分の頭じゃどうプログラムを組めばいいのか全くわかりませんorz
895デフォルトの名無しさん:2006/11/05(日) 21:17:01
>>894
if (a < b) swap(&a, &b);

switch (a < b) { case 1: swap(&a, &b);}
ぐらいしか思いつかんのだが・・・。
896デフォルトの名無しさん:2006/11/05(日) 21:22:40
なんで苦し紛れでswitch文を使う必要があるんだよ
897デフォルトの名無しさん:2006/11/05(日) 21:25:35
int main(void)
{

switch(
898デフォルトの名無しさん:2006/11/05(日) 21:33:08
>>894
とりあえず問題文考えた奴殴ってこい
899デフォルトの名無しさん:2006/11/05(日) 21:33:25
a、b、cの3つの変数なら最大8種類までの大小関係があるに過ぎないから、
switch文も8個の条件を書けばいい。
900デフォルトの名無しさん:2006/11/05(日) 21:42:13
abc
acb
bac
bca
cab
cba
6種類じゃなくて?
901デフォルトの名無しさん:2006/11/05(日) 21:47:54
>>900
イコールとなる時があるのを忘れてる
902デフォルトの名無しさん:2006/11/05(日) 21:48:34
あ、イコールがあると10種類か
903デフォルトの名無しさん:2006/11/05(日) 21:51:37
なら
abc
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通り
ではなくて?
904903:2006/11/05(日) 21:52:16
間違えた13通り
905デフォルトの名無しさん:2006/11/05(日) 21:55:30
gdgdだなww
906894:2006/11/05(日) 21:56:26
すみません、せっかくレスしていただいたのに全くと言っていい程進んでないですorz

>>898
この講義の担当教員はかなり生徒の評判が悪いです。
質問しに行って話しているといきなり「何でこんなことも分からないんだ!?」と
いきなり怒りだしたりと、あまり講義を受けたいと思う人じゃないです。
でも必修科目で選択の余地無しなんです('A`)
907デフォルトの名無しさん:2006/11/05(日) 22:04:24
#include <stdio.h>
void 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;
}
うーん・・・中途半端。
908デフォルトの名無しさん:2006/11/05(日) 22:06:55
TRUEが1って保証されてたっけ
909デフォルトの名無しさん:2006/11/05(日) 22:08:10
書いてるうちに訳が分からなくなってきた orz
switch ( (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;
}
910デフォルトの名無しさん:2006/11/05(日) 22:09:24
>>908
> TRUEが1って保証されてたっけ

さあ?
まあ、詳しくは規格書みてくれ。
911デフォルトの名無しさん:2006/11/05(日) 22:12:33
trueが1になるように書けばいいじゃん。
(a > b ? 1:0) + (a > c ? 1:0) * 2 + (b > c ? 1:0) * 4

912デフォルトの名無しさん:2006/11/05(日) 22:14:13
>>909
比較演算子は1か0を返す

>>911
やめてくれ。冗長過ぎて気持ち悪い。
913912:2006/11/05(日) 22:14:58
>>909じゃなくて>>908宛ね。
914デフォルトの名無しさん:2006/11/05(日) 22:15:59
どんどん壊れていってるな。
switchの呪い、恐るべし。
915デフォルトの名無しさん:2006/11/05(日) 22:17:49
>>889
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2878.c

先手は勝つように選択、後手は適当に選択するようにした。
引き分け時の動作は確認してない。
仕様がびみょうにわからんので期待通りの動作かしらん。
916デフォルトの名無しさん:2006/11/05(日) 22:20:54
>>915
あぁ…、22行目いらん。
あと153行目の300とかいう数字はマクロにしといて下さい。
917デフォルトの名無しさん:2006/11/05(日) 22:23:47
>>910->>912
俺の認識ではNo
0か非0かだと思った
( ( a > 1 ) == 1 ) は良くない
( ( a > 1 ) != 0 ) と書くべき・・・・だったと

ただTUREとtureは違うとも....
918917:2006/11/05(日) 22:25:09
>ただTUREとtureは違うとも....
!! 
TRUEとtrue ね
919デフォルトの名無しさん:2006/11/05(日) 22:31:19
>>894
解答例とか公開されるの?
オレも模範解答が知りたい
920デフォルトの名無しさん:2006/11/05(日) 22:34:40
C99 6.5.8の6
Each of operators < (less than), ... shall yield 1 if the specified relation is true ...
921894:2006/11/05(日) 22:36:37
模範解答はおそらく公開されると思います。
しかし、たまに前回の課題について何もふれないまま講義が進み
次の課題が出たりすることもあるのであまり期待はしないでください。
922デフォルトの名無しさん:2006/11/05(日) 22:37:39
>>917
不正確な認識は仕様書を読んで改めよ。

if 文の中で非ゼロが評価された場合真、
ゼロが評価された場合偽になるのは正しいが、
それとは別に比較演算子は 1, 0 を返す。
923デフォルトの名無しさん:2006/11/05(日) 22:42:43
if(b >= a){
if(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;
}

うーむ・・・
924デフォルトの名無しさん:2006/11/05(日) 22:44:04
>>921
把握した


…スマートな方法は無さそうだが
925デフォルトの名無しさん:2006/11/05(日) 22:48:27
[1] 授業単元:プログラミング
[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(・・・);
検索した値の構造体のすべての値を表示
}

上記のは例みたいなものなので、できればこれに近い形のプログラムをお願いします。
926923:2006/11/05(日) 23:06:14
間違いまくりorz
927デフォルトの名無しさん:2006/11/05(日) 23:12:14
>>925
#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;
}
928925:2006/11/05(日) 23:19:34
>>927

即レス、ありがとうございました。
929887:2006/11/05(日) 23:20:49
>>888
ありがとうございました。図々しいですがもう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]その他の制限: なし

お願いします。
930デフォルトの名無しさん:2006/11/06(月) 00:29:51
>>929
凄い難しいことやってるのね。
大学って凄いね。
931デフォルトの名無しさん:2006/11/06(月) 00:44:00
東京大学情報学部の課題だけあってさすがにレベル高いな
932デフォルトの名無しさん:2006/11/06(月) 01:10:04
>>929
課題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);
}
933894:2006/11/06(月) 01:17:31
int a,b,c;
printf("一つ目の整数値-->");
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文で組んでみたのですが
ちょっと自信がないので確認していただけないでしょうか?お願いします。
934デフォルトの名無しさん:2006/11/06(月) 01:22:09
>>933
重箱の隅つつくみたいだけど、表示形式がそれだとa=bのときは?
935894:2006/11/06(月) 01:24:27
しまった、忘れてましたorz
936デフォルトの名無しさん:2006/11/06(月) 01:34:20
[1] プログラミング
[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] どんな感じにするか次に書くので埋めて下さい。
937936:2006/11/06(月) 01:35:24
#include<stdio.h>

double 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;
}

よろしくお願いします。
938デフォルトの名無しさん:2006/11/06(月) 01:36:05
>>936
期限が…
939936:2006/11/06(月) 01:37:28
・・2006年です。><
940デフォルトの名無しさん:2006/11/06(月) 01:37:31
西暦10000年問題が心配です
941デフォルトの名無しさん:2006/11/06(月) 01:42:30
>>936
#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;
}
942936:2006/11/06(月) 02:31:54
>>941
ありがとうございます。
あとこのプログラムが動かないんですが誰か間違い探しお願いします。
本とか見て考えても分かりません。

#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;
}

長いから続きで
943936:2006/11/06(月) 02:32:27
void gcdprint(int a,int b)
{
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は正常に動作しました。
944デフォルトの名無しさん:2006/11/06(月) 02:34:08
>>1読んでソース春場所勘がエロ
945936:2006/11/06(月) 02:35:43
たしかに問題文がありませんでした。
実は>>508に出した奴です。
提出日勘違いで1週間先だったようです。
946デフォルトの名無しさん:2006/11/06(月) 02:43:12
>>942 どう動かないのか詳しく書いてくれないとエスパー回答しかできないぞ
ってことでエスパー回答
for(i=2;i<g;i++)

for(i=2;i<g;i++)
947946:2006/11/06(月) 02:44:00
訂正
for(i=2;i<=g;i++)
948946:2006/11/06(月) 02:45:48
さらに訂正
for(i=1;i<=g;i++)
ミス多すぎ。もうダメ。寝よう Zzz
949デフォルトの名無しさん:2006/11/06(月) 02:54:56
次スレではもっとレベルの高い出題を願います。
中学生でもできるようなものを教えてもらって恥ずかしくないのですか?
950デフォルトの名無しさん:2006/11/06(月) 02:57:59
>>929
('A` 家のVMにdspデバイスが無いっぽいので実験できねぇ・・・ムチャクチャ楽しそうだ
951デフォルトの名無しさん:2006/11/06(月) 03:03:06
中学でプログラミングなんてオタク以外やりません
952デフォルトの名無しさん:2006/11/06(月) 03:05:19
今時は小学校でもプログラミング教えてるぞ
953デフォルトの名無しさん:2006/11/06(月) 03:06:48
>>950
('∀` とおもったらcygwinさんが/dev/dspをサポーチしてくれてた!!!やった!楽しスwwwwwwwwwwww
954936=942:2006/11/06(月) 03:14:33
>>946
そうでした。
動かしてみたら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) を作成
だけが正常に表示されて他は出ません。

アドバイスか添削お願いします。
955デフォルトの名無しさん:2006/11/06(月) 03:17:30
>>936,>>942,>>954
コンパイラの吐くメッセージの事を言ってるならコピペしてよ
void printf_cd(int,int);

void print_cd(int,int);
956デフォルトの名無しさん:2006/11/06(月) 03:23:12
>>953
どうせコンパイルでき、実行できただけ喜んでんだろw
957デフォルトの名無しさん:2006/11/06(月) 03:30:05
>>894
結局のところ、if文とswitch文を正しく把握してるかどうか試されてるだけだと思うぞ。
エレガントな書き方ではないが、if文をswitch文に置き換えることは可能だし。

あと、自力で考えないでこんなところに丸投げしてる奴に、教授を非難する資格はないよ。
958デフォルトの名無しさん:2006/11/06(月) 03:39:55
>>894
通常は教員としての仕事は評価されない上に、
簡単な問題に対する質問に時間をとられて研究できなくなると
教員にとっての死活問題になるからなぁ…

ここの住人からすれば面白くない問題を出したという意味で、
叩かれても仕方ないけどね
959デフォルトの名無しさん:2006/11/06(月) 03:46:11
>>956
音鳴ったスwwww
やべぇwwww
Win32API使うのなんて目じゃないくらいに簡単wwwww

うは、これでUDP broadcast使ってネット越しに音流せるwwww
960デフォルトの名無しさん:2006/11/06(月) 04:18:35
ヲタ発見
961デフォルトの名無しさん:2006/11/06(月) 04:30:21
(^ω^) フヒヒ
       何とでも言うがいいぉ
         どうせボクの足元にも及ばない愚民の鳴き声なんだぉ
      フヒヒヒヒッヒ
962デフォルトの名無しさん:2006/11/06(月) 04:33:44
(^ω^) 愚民共にお礼を言うぉ
       参考サイトはここだぉ
/dev/dsp on cygwin
http://www.sixnine.net/cygwin/cygwin-doc/devices.html
963デフォルトの名無しさん:2006/11/06(月) 06:57:48
コマンドからいくつか引数を取って
一つの文字列につきメモリをその都度動的に確保し
逆順に並べ替えて、さらに出力行の最後の一文字目だけ大文字にして
出力するプログラム
(動的メモリ割り当て)

スレ違いと言われここに来ました
誰か教えて下さい
964963:2006/11/06(月) 07:03:07
すいませんちゃんと書きます
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):コマンドからいくつか引数を取って
一つの文字列につきメモリをその都度動的に確保し
逆順に並べ替えて、さらに出力行の最後の一文字目だけ大文字にして
出力するプログラム
[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: (gcc
 [3.3] 言語: (C
[4] 期限: 今日
[5] その他の制限:
965デフォルトの名無しさん:2006/11/06(月) 07:06:51
いってることがさっぱりわけわか

そんなプログラム作ってなんの役に立つの?

966963:2006/11/06(月) 07:20:57
動的メモリ割り当ての復習らしいです
宿題なんでやらなきゃどうしようもない
あとコマンドじゃなくてコマンドラインです
例えば
./○○○ orange appleと入力したら
egnarO
elppA
となるようなプログラムです
誰か教えて下さい
967デフォルトの名無しさん:2006/11/06(月) 07:24:25
>>964
適当に
#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;
}
/*
968デフォルトの名無しさん: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;
}
969デフォルトの名無しさん:2006/11/06(月) 07:29:47
>>967
あ、メモリリーク。C++にどっぷり毒されてるから開放忘れてた。
修正修正
    while(*++argv){
        char*p = strrev_(capitalize(strdup_(*argv)));
        if(!p){perror("main:");break;}else puts(p);
        free(p);
    }
970894:2006/11/06(月) 07:37:16
>>957
ここに課題を持込んでここの住人の人達に解いてもらい、その上で教員を
批判するような発言をする権利など無いというのは反論する余地がありません。反省します。
あと、まだ少しですが時間はあるので自分の頭を使って考えてみます。

>>958
自分はまだ研究室に配属されていないので忘れがちですが、先生方の本業は自分の研究ですから
このようなルーチンワークに時間を割かれるのを嫌うということを考えもしませんでした・・・。
971963:2006/11/06(月) 07:51:03
>>967-969
ありがとうございます
だけど自分アマチュアなんでちょっと分からない
下のやつ改造して教えてくれませんか?
(間違いは多々あるとおもいますが…)
あと他に条件で一度確保したメモリは次の文字列を処理する前に解放せよ
ってのがありました
#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);
}
972デフォルトの名無しさん:2006/11/06(月) 08:07:49
>>969
C++にどっぷりだと開放忘れる?
意味不明
C#やJAVAなんておこちゃま言語につかりすぎてるだけでは?
973デフォルトの名無しさん:2006/11/06(月) 08:21:20
今日ageて書き込んでる奴は同一人物かな
批判しかしねぇー
974963:2006/11/06(月) 08:23:17
>>967
967さん上の改造して作れませんか?
マジで分からないです
975デフォルトの名無しさん:2006/11/06(月) 10:07:53
>>941
瑣末なことだけど1/nから足していった方がよくね
mainでは有効数字5桁しかいらないからどうでもいいといえばどうでもいいが
976デフォルトの名無しさん:2006/11/06(月) 10:26:10
>>972
スマートポインタにどっぷりなんだろうよ。

>>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;
}
977デフォルトの名無しさん:2006/11/06(月) 13:45:17
問題1 整数xに1を加えた値を返す関数inc(x)と、1を引いた値を返す関数dec(x)をつくれ。

問題2 整数xを2倍した値を返す関数mult2(x)をつくれ。但し、乗算*を使ってはいけない。
    問題1で用いたinc(x)とdec(x)を用いること。
    (ヒント:inc(x)とdec(x)を同じ回数だけdec(x)が0になるまで繰り返す)

テンプレ無視ってスマソor2
978デフォルトの名無しさん:2006/11/06(月) 13:47:02
>>977
int inc(x){return x+1;}
int dec(x){return x-1;}
979デフォルトの名無しさん:2006/11/06(月) 13:47:27
>>977
何のためのテンプレなんだよ
謝りゃいいって思ってるんならとっとと辞めちまえ

というわけで>>1
980デフォルトの名無しさん:2006/11/06(月) 13:52:27
>>977
int mult2(x){pow(inc(x),2)-pow(x,2)+dec(0);}
981デフォルトの名無しさん:2006/11/06(月) 14:52:15
>>977
#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;
}
982デフォルトの名無しさん:2006/11/06(月) 15:01:20
#include <stdio.h>
int 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
983936=942:2006/11/06(月) 15:29:07
>>955
コピーのやりかたがわからなかったもので。
学校のPCだとコンパイラの表示を選択してエンター押せばできるんですが
家のやつだと同じコンパイラなのに選択すらできません。

でもそれ直したら動きました。こういうミス多いな。。何回も見たのに。
ありがとうございました。
984デフォルトの名無しさん:2006/11/06(月) 15:32:36
>>979
携帯なんだよそれくらい察しろカス
授業中なんだから早く答えろ
985デフォルトの名無しさん:2006/11/06(月) 15:40:02
>>982
その発想はなかったわ
986デフォルトの名無しさん:2006/11/06(月) 15:40:29
>>984
それは宿題ではないな
987デフォルトの名無しさん:2006/11/06(月) 15:42:36
そのうち

テスト中なんだから早く答えろ

とかレスがつく日がくるのかも
988俺のが正しい:2006/11/06(月) 15:46:53
>>977
int 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;
}
989デフォルトの名無しさん:2006/11/06(月) 15:53:28
前に「XX日OO時からテストなんでお前ら時間開けとけよ」とか言ってた奴がいたな。

>>988
xが負の場合どうするの?
990デフォルトの名無しさん:2006/11/06(月) 16:01:51
int mult2(int x){
int i,j;
i=x;
j=x;

while(i&&j){
i=inc(i);
j=dec(j);
}

return i+j;
}
991990:2006/11/06(月) 16:07:12
アホな題意を守りつつ書いたつもりなんだが
読み返してみると982がやってることとほとんど変わらないのが悲しい
992889:2006/11/06(月) 17:59:19
みなさんありがとうございます。
助かります。
993963:2006/11/06(月) 18:45:30
>>976
本当にありがとうございました
感謝です
994デフォルトの名無しさん:2006/11/06(月) 20:13:35
sqrt()関数を使わずに平方根を求めるにはどうしたらいいですか?
995デフォルトの名無しさん:2006/11/06(月) 20:18:46
>>994
級数展開でもニュートン法でもやりかたはよりどりみどり
996デフォルトの名無しさん:2006/11/06(月) 20:21:10
>>994
pow( x, 0.5)
997デフォルトの名無しさん:2006/11/06(月) 20:31:27
>>994
ニュートン法の学習的実装。
#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;
}
998デフォルトの名無しさん:2006/11/06(月) 20:51:00
新スレたったから埋めるかね
999デフォルトの名無しさん:2006/11/06(月) 20:52:05
1000デフォルトの名無しさん:2006/11/06(月) 20:52:22
埋め
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。