1 :
デフォルトの名無しさん :
2006/11/21(火) 12:24:11 BE:37868922-2BP(12)
ありがd
3 :
デフォルトの名無しさん :2006/11/21(火) 13:51:13
[1] 授業単元:プログラミング [2] 問題文:1から1000までの数値のうち、素数だけを抜き出して表示するプログラムを作成せよ。 ここでは、素数であるか否かを判定する関数を作成して使用すること。 《実行例》 1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:できるだけ早くお願いします。 [5] その他の制限:自分で作ったものでsqrt()ライブラリ関数を使ったのですが、ライブラリ関数は使わず&簡単なプログラムでお願いします。
>>3 ・1は素数じゃない。
・自分で作ったプログラムを晒せ。sqrt()を使わないようにするだけならごく簡単な修正で済むはずだ。
できるだけ早くっていつまでだよ
>>3 出力はインラインアセンブラか・・・欝だ・・・
9 :
3 :2006/11/21(火) 14:11:25
あ、すみません。1は素数ではないですね>_<” 期限はだいたいなんですけど、きょう辺りにできれば・・・と思います。
#include<stdio.h> int IsPrime(int n){ int i; if(n<2) return 0; else if(n==2) return 1; if(n%2==0) return 0; for(i=3;i*i<=n;i+=2) if(n%i==0) return 0; return 1;} int main(){int i,j=1;for(i=1;i<=1000;i++) if(IsPrime(i)){printf("%3d ",i);if(j%10==0)printf("\n");j++;}return 0;} 空気読まずに貼ってみる。素数判定はWikipediaのコピペだ
#include<stdio.h>
int main(void){
int i, j, k, n, a;
int **p;
printf("please input! n = ");
scanf("%d\n",a);
p = (int **) malloc(sizeof(int *)*a);
for(i=0; i<=a; i++){
p[i]=(int*) malloc(sizeof(int *)*a);
for(i=0; i<=a; i++)
p[i][j]=0;
}
k = n*n-1;
for(i=0; i<n/2+n%2; i++) {
for(j=i; j<=n-i-1; j++) p[i][j] = k--;
for(j=i+1; j<n-i-1; j++) p[j][n-i-1] = k--;
for(j=n-i-1; j>i; j--) p[n-i-1][j] = k--;
for(j=n-i-1; j>i; j--) p[j][i] = k--;
}
for(i=0; i<a; i++)
printf("\n");
for(j=0; j<a; j++)
printf("%5d",p[i][j]);
return 0;
}
上記のプログラムは前スレ
>>507 を完成させたものですが、セグメンテーション違反になります。
どうすればいいでしょうか?
>>11 スレ違い。
・scanf()の引き数間違い
・2番目のmalloc()の引き数間違い
>>11 scanf("%d\n",a); <- ここがあやしい
>>??? 螺旋状に数値を表示 #include<stdio.h> #include<stdlib.h> int is_minus_one(int value[], int n, int x, int y){ if(x<0 || x>=n || y<0 || y>=n) return 0; return (value[n*y+x]==-1); } int main(void){ int dx_list[]={ 1, 0,-1, 0}; int dy_list[]={ 0, 1, 0,-1}; int x=0, y=0, dx, dy, i, j, n=5, direction=0; int *value; value=malloc(sizeof(int)*n*n); for(i=0;i<n*n;i++) value[i]=-1; dx=dx_list[direction];dy=dy_list[direction]; for(i=0;i<n*n;i++){ value[n*y+x]=i; if(!is_minus_one(value, n, x+dx, y+dy)){ direction=(direction+1)%4; dx=dx_list[direction];dy=dy_list[direction]; } x+=dx;y+=dy; } for(i=0;i<n;i++){ for(j=0;j<n;j++) printf(" %3d", value[n*i+j]); printf("\n"); } free(value); return 0; }
>>3 別解。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int prime[]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,
41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89,
97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223,
227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281,
283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359,
367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433,
439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593,
599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659,
661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743,
751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827,
829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, };
int isPrime(int n){if(n<=1000){int i;for(i=0;prime[i]<=n;i++)if (n==prime[i]) return 1;}return 0;}
int main(){int i,j=1;for(i=1;i<=1000;i++) if(isPrime(i)){
printf("%3d ",i);if(j%10==0)printf("\n");j++;}return 0;}
1] 授業単元: 基礎プログラミング
[2] 問題文(含コード&リンク): nの値を12とし、nの近似値を求めるプログラムを作成せよ。詳しくは、リンク先の画像をご覧ください。
http://up.kabubu.net/cgi/img2/16802.jpg [3] 環境
[3.1] OS: Win XP HOME
[3.2] コンパイラ名とバージョン:Microsoft Visual C++ 2005 Express Edition
[3.3] 言語: C++
[4] 期限: 本日中にできればありがたいです。。。
よろしくお願いします。
>>17 #include<stdio.h>
int kaijo(int n){
if(n<2)return 1;
return n*kaijo(n-1);}
int main(){
int n,k;double e=1;
printf(" n n! 1/n! e 誤差\n");
for(n=1;n<=12;n++){
k=kaijo(n);e+=1./k;
printf("%2d %9d %.10f %.10f %.10f\n",n,k,1./k,e,2.7182818285-e);}}
nの近似値求めるんだから printf("12");でいいじゃん
>>11 nを入力するのに、なんでnじゃなくてaに入れるんだ。
>>11 0で埋めてるつもりなんだろうがループカウンタをiにしてるせいで
未初期化のjを配列の添字にしてしまってる予感
>>11 前スレ515は中心から外に大きくなってくと思ってたのでそこを修正
#include<stdio.h>
int main(void){
int i, j, k, n;
int **p;
printf("please input! n = ");
scanf("%d",&n);
p = (int **) malloc(sizeof(int *)*n);
for(i=0; i<n; i++) p[i]=(int*) malloc(sizeof(int)*n);
k = 0;
for(i=0; i<n/2+n%2; i++) {
for(j=i; j<=n-i-1; j++) p[i][j] = k++;
for(j=i+1; j<n-i-1; j++) p[j][n-i-1] = k++;
for(j=n-i-1; j>i; j--) p[n-i-1][j] = k++;
for(j=n-i-1; j>i; j--) p[j][i] = k++;
}
for(i=0; i<n; i++) {
for(j=0; j<n; j++) printf("%3d", p[i][j]);
putchar('\n');
}
return 0;
}
>>16 やっぱりそうきたよねぜったいそうくるとおもった
25 :
前スレ590 :2006/11/21(火) 19:43:12
>>11 俺のも見ろよ〜
再帰はいやか〜
#include <stdio.h> #define N 9 //サイズ
void print(int ary[N][N]);int right(int ary[N][N],int x,int y, int n, int past);int up(int ary[N][N],int x,int y, int n, int past);
int down(int ary[N][N],int x,int y, int n, int past);int left(int ary[N][N],int x,int y, int n, int past);void answer(int ary[N][N], int n);
int main(){ int ary[N][N] = {0}; int n = 0; answer(ary, n); print(ary); return 0;}void answer(int ary[N][N], int n){ int i,j;
for(j =0,i = 1; i <= (N/2 + 1) ; i++,j++){ n = right(ary,j,j,n, i); n = down(ary,i ,N-i,n, i); n = left(ary,N-i,N - i - 1,n, j); n = up(ary,N - i - 1,j, n,j);
}} int right(int ary[N][N],int y,int x, int n, int past){ if(x > N - past || y > N || x < 0 || y < 0)return n; ary[y][x] = n ; right(ary, y, x+1, n +1 , past );
} int down(int ary[N][N],int y,int x, int n, int past){ if(x > N || y > N - past || x < 0 || y < 0)return n; ary[y][x] = n; down(ary, y+1,x , n+1 , past );
} int left(int ary[N][N],int y,int x, int n, int past){ if(x > N || y > N || x < past || y < 0)return n; ary[y][x] = n; left(ary, y, x-1, n+1 , past );
} int up(int ary[N][N],int y,int x, int n, int past){ if(x > N || y > N || x < 0 || y <= past)return n; ary[y][x] = n; up(ary, y-1, x, n+1 , past );
} void print(int ary[N][N]){ int *p = &ary[0][0],i; for(i = 1,p = &ary[0][0]; p <= &ary[N-1][N-1]; p++,i++){ printf("%3d ", *p);
if(!(i % N))putchar('\n');}}
スルーしておいてやれ。
[1] 授業単元: [2] 問題文(含コード&リンク):中置記法で入力された数式を前置記法 及び後置記法で出力するプログラムを作る [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: ([2006年12月4日まで [5] その他の制限: とくになし
29 :
デフォルトの名無しさん :2006/11/21(火) 19:50:28
[1] 授業単元:プログラミングT [2] 問題文 [要求仕様] キーボードより2以上の整数を入力し、その入力した整数が2つの素数の和 として表せるかどうかを調べてその全ての組み合わせを出力し、 最後に組み合わせの数を出力するプログラムを作成せよ。また入力値が2より 小さい時には、警告として「入力ミスです。」と表示してプログラムを終了 するようにせよ。 [強制条件] 関数mainとは別に素数判定に関る関数を用いること。なお入出力は関数main で行うこと。 [ヒント] 関数isprimeを利用するとよい。 int isprime(int n){ int i; if(n<=1) return0; for(i-2;i*i<=n;i++) if(n%i==0) return 0; return 1; } [表示結果] input 30 30は素数7と素数23の和です。 30は素数11と素数19の和です。 30は素数13と素数17の和です。 和が30になる2つの素数の組み合わせは3つあります。
30 :
デフォルトの名無しさん :2006/11/21(火) 19:51:59
[3] 環境 [3.1] OS:unix [3.2] gcc [3.3] 言語:C [4] 期限: 2006年11月22日15時まで [5] その他の制限: 関数を習い始めたばかりなのでできるだけ簡単なもの にしていただけると嬉しいです。
>>29 #include <stdio.h>
int isprime(int n){
int i;
if(n<=1)
return 0;
for(i=2;i*i<=n;i++)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int c=0,i,n;
printf("input\n");
scanf("%d",&n);
if(n<2){
printf("入力ミスです。\n");
return 1;
}
for(i=2; i<=n/2; i++)
if((isprime(i)==1)&&(isprime(n-i)==1)){
printf("%dは素数%dと素数%dの和です。\n",n,i,n-i);
c++;
}
printf("和が%dになる2つの素数の組み合わせは%dつあります。",n,c);
return 0;
}
>>31 ありがとう御座います。
まさか、こんなに早く答えていただけるとは思いませんでした。
33 :
デフォルトの名無しさん :2006/11/21(火) 21:26:17
お願いします [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):鶴と亀の足の総数(亀は4本、鶴は2本と考える)が与えられると、考えうるそれぞれの頭数の全てのケースを列挙、出力し、 最後にケースの総数を出力するプログラムを作成せよ。入力された総数に対して解がない場合は”解なし”と表示すること。 実行例 亀と鶴の足の総数を入力せよ:24 鶴=0 亀=6 鶴=2 亀=5 鶴=4 亀=4 鶴=6 亀=3 鶴=8 亀=2 鶴=10亀=1 鶴=12亀=0 7通りあります [3] 環境 [3.1] OS:Windows [3.3] 言語:C++ [4] 期限:明日
[1] 授業単元:情報処理工学 [2] 問題文 ファイル名:kadai01.c ◆『家』と『雪だるま』の絵を描くプログラムを作成しなさい。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:viエディタ [3.3] 言語:C言語 [4] 期限:2006年 12月4日(月) [5] その他の制限:これより示す「kadai01.c」のプログラムを修正してお願いします。 一般的な家と雪だるまの絵であれば、どのようなものでも構いません。 クリスマスが近いということもあるので、個性あふれるものをお願いします。 尚、プログラムが長いため3回くらいに分けて書き込みます。
"kadai01.c"に挿入されているプログラム「Canvas.c」 #include <stdio.h> #include <math.h> char pixel[XSIZE][YSIZE]; Canvaslnit(char moji){ int x,y; for(y=0;y<YSIZE;y++)for(x=0;x<XSIZE;x++) pixel[x][y]=moji; } CanvasPrint(){ int x,y; for(y=0;y<YSIZE;y++){ for(x=0;x<XSIZE;x++) printf("%c",pixel[x][y]); printf("\n"); } } Circle(char moji, int x0, int y0, int r){ int x,y; float t; for(t=0; t<6.28; t+=0.01){ y=r*cos(t)/2+y0; x=r*sin(t)+x0;
>>33 #include<stdio.h>
int main(){int c=0,i,n;printf("亀と鶴の足の総数を入力せよ:");
scanf("%d",&n);if(n%2)printf("解なし\n");else{for(i=0;i<=n;i+=2)
if((n-i)%4==0){printf("鶴=%d 亀=%d\n",i/2,(n-i)/4);c++;}
printf("%d通りあります\n",c);}return 0;}
そして今C++じゃないことに気がついた orz
プログラム中にc++使ってるから許してくれ
『kadai01.c』 #define XSIZE 80 #define YSIZE 25 #include <stdio.h> #include <math.h> #include "Canvas.c" main() { Canvaslnit('.'); Circle('*', XSIZE/2, YSIZE/2,12); boxf('a',20,20,24,24); line('&',24,24,60,10); CanvasPrint(); }
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):ファイルを読み込み、各行が逆順に出るようなプログラムを書きなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:mingw-jp [3.3] 言語:C、C++ [4] 期限:2006年11月24日 [5] その他の制限:
>>34 >個性あふれるものをお願いします。
お前の個性を出せよwww
>>41 個性あふれ過ぎて家にも雪ダルマにも見えないの作ればいいんじゃね?
>>42 そうしたらアップしたファイルへのリンクを貼ってくれるともっと分かりやすいんだ
>>45 Circle()が途中で切れてるぜ?というかファイルがあるならそれうpれってことだと思うんだ
>>45 それはひょっとしてギャグでやっているのか
48 :
デフォルトの名無しさん :2006/11/21(火) 22:27:56
>>36 すみませんC++でやってもらえるとありがたいです
>>48 #include<iostream>
using namespace std;
int main(){int c=0,i,n;
cout<<"亀と鶴の足の総数を入力せよ:";
cin>>n;if(n%2)cout<<"解なし"<<endl;
else{for(i=0;i<=n;i+=2)if((n-i)%4==0){
cout<<"鶴="<<i/2<<"亀="<<(n-i)/4<<endl;
c++;}cout<<c<<"通りあります"<<endl;}return 0;}
C++に直しただけだけど。
>>46 ファイルは学校のPCに保管してあるので、今は手元にないんです。
先生が配布したプログラムはCircle()は途中で終わっているので、
何とも・・・OTL
ちなみにこの状態で実行すると、「kadai01.c」は描きかけの状態で出てきます。
これを修正して「家」と雪だるまを描くプログラムを作れってのが今回の課題です。
>>47 ここの板初心者なもんで、色々とわからない点がありまして・・・
最近のエスパー能力は失われたプログラムを復元するものが要求されるのか
>>46 Circle()の続きがわかりました。こうですね。
"kadai01.c"に挿入されているプログラム「Canvas.c」
#include <stdio.h>
#include <math.h>
char pixel[XSIZE][YSIZE];
・・・・途中略・・・・
y=r*cos(t)/2+y0;
x=r*sin(t)+x0;
if((x<XSIZE)&&(y<YSIZE))pixel[x][y]=moji;
}
}
これが「Canvas.c」です。
迷惑かけてしまいスミマセン・・・
54 :
デフォルトの名無しさん :2006/11/21(火) 23:53:14
[1] 授業単元:基本プログラミング [2] 問題文(含コード&リンク):X=a*a*b*cのように定義されたXがある。ただしa,b,cは2以上の正の整数とする。 Xに値が読み込まれると上式を満たすa,b,cの組み合わせを全て列挙、出力し、さらにその組み合わせの総数を出力するプログラムを作成せよ。 解の範囲を要領よく限定すること。ただし、解が存在しない場合は「0通り」と出力し、プログラムはXに0が読み込まれるまで繰り返し返すものとする。 [3] 環境 [3.1] OS:Windows [3.3] 言語:C++/ [4] 期限:明日 [5] 多重ループまでやりました。
>迷惑かけてしまいスミマセン・・・ そう思うのなら最初から自力でやれよ。
いちいち文句を付ける奴は何なんだ? ここに依頼してくる奴に教育でも施してる積もりか?
[2] 問題文(含コード&リンク): 下のプログラムに付け足して以下のプログラムを作成せよ。 繰り返し構文を用いて、リストの先頭から順番に学籍番号と数学の点数を 表示する。 ・リストを先頭からたどっていくポインタst_pを宣言して使用し、まず st_p = st_firstとする。 ・リストの最後ではnext == NULLとし、これを利用する。 #include<stdio.h> struct student{ char g[8]; /*学籍番号*/ int x; /*数学の点数*/ struct student *next }; int main(void){ struct student *st_a, st_b; struct student *st_first; st_a = (struct student *)malloc(sizeof(struct student)); st_b = (struct student *)malloc(sizeof(struct student)); /*値の代入部は省略*/ st_first = st_a; st_a->next = st_b; st_b->next = NULL; [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日の朝10時
>>56 最近依頼の量>>解答の量になってるからなあ
基本的な宿題をここに解かせた奴はその後の宿題全部ここに解かせて
ますます依頼の量を増やすだけだろ
>>54 #include <iostream>
using namespace std;
int main()
{
int i, j, k, x, c;
while(1){
cout << "Xを入力してください(0で終了します):";
cin >> x;
if(x==0) break;
c = 0;
for(i=2; i<x; i++) {
for(j=2; j<x/i; j++) {
for(k=2; k<x/(j*i); k++) {
if(x==i*i*j*k) {
cout << "a = " << i << " b = "<< j << " c = " << k << endl;
c++;
}
}
}
}
if(!c) cout << "0通り" << endl;
else cout << c << "通り" << endl;
}
return 0;
}
60 :
59 :2006/11/22(水) 00:20:59
forの中がおかしいな。 for(i=2; i*i<=x/4; i++){ for(j=2; j<=x/(i*i)){ for(k=2; j<=x/(i*i*j){
>>58 なんでそれが依頼者に文句をいうことの理由になるのか分からない。
それに、そもそも回答が追い付かなかったところで、困るのは依頼者であって
回答者じゃないだろ。回答者は好きなときに好きなだけ答えれば良いんだから。
本当のところをいうと、確かに俺も今のこのスレは余裕がなさすぎて、
事務的過ぎて、つまらないと思うが、それに対して何かできるわけでもない。
62 :
59 :2006/11/22(水) 00:30:54
よく考えたらループは2重でいいじゃないか。 それは自分でなんとかしてくれ。
まぁ自力でやるやらないはおいといて、 お願いします ありがとうございましたくらいは欲しいよな 回答が本当にそれでよかったのか気になるし。
だから過去の宿題検索(ry
>>57 st_p = st_first;
while(st_p) {
puts(st_p->g);
printf(" %d ", st_p->x);
st_p = st_p->next;
}
>>65 作ってもいいが依頼者は絶対使わないし無意味だと思う
>67 是非作ってくれ。期待してる。
>>67 ウィキでキーワード検索できたら重宝するけどなー
77スレも消費してたら似たような宿題が頻出してるだろうに・・
それとも質問者にも回答者にも丸投げの美学みたいなものがあるのかな
70 :
59 :2006/11/22(水) 01:24:06
2重ループ版 for(i=2; i*i<=x/4; i++) { for(j=2; j<=x/(i*i*2) { if(x/(i*i*j)>=2 && x%(i*i*j)==0){ cout << "a = " << i << " b = "<< j << " c = " << k << endl; c++; } } } >55,>56,>58,>61.>63,>64,>65,>67,>68 なんのためにこのスレにいるの?
>>61 どうせ助けるんなら丸投げするような奴よりは
自分なりに考えたけど分からなかったという奴を助けたい
丸投げとか過去スレとか返事/礼なんて、それこそ過去に何度も論議されてんだよ スレの無駄だから過去ログ探せ糞ども
73 :
59 :2006/11/22(水) 01:33:27
バカなこと書いてたら修正し忘れた。 k → x/(i*i*j)
>>70 面白い問題を見つけて、解いて、コードを自慢するため。
>>71 もちろんそれはお前の勝手だが、やはり依頼者に文句をいう理由にはなっていないような。
77 :
57 :2006/11/22(水) 02:07:03
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク):
以下の2つのファイルを2つの方法でクロマキー合成せよ。
:ファイルはこれです。→
ttp://uploda.en.tc/index.cgi?md=fl&file=1164137430%2e%2erar (1)RGBで変換
(2)HSVで変換
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: Vsual C++ 2005
[3.3] 言語: C++
[4] 期限: 明日まで。
[5] その他の制限: (1),(2)は別々なので。プログラムを始めて半年超くらいなので,よろしくお願いします。(^^;
>>71 そもそも宿題代行しても依頼者は助からない。
必要な能力が身に付かない上に、能力に応じた評価を得られないんだから。
ここで宿題に回答するのは丸投げ厨に対する最高の嫌がらせだ。
>>79 ここで質問するような奴はプログラミング能力を必要としていないだろうし
課題さえ提出すれば評価は得られる
だいたい2chだから質問者回答者共に変に煽ったりする奴がいても不思議ではないし
そんなの気にしても意味ないと思う
一番言いたいことは
性帝が何を偉そうに!
ってことだ
81 :
デフォルトの名無しさん :2006/11/22(水) 10:57:34
[1] 授業単元: プログラミング [2] 問題文:最大10件の整数を格納する配列を宣言する。 -1が入力されるまで、もしくは、最大件数(10件)までループで入力を行い、 それを逆順に表示するプログラムを作成せよ。 #include<stdio.h> #define max 10 int main(){ int array[max]; int i; printf("*****Enter Number*****\n"); for(i=0;i<10;i++){ printf("Num(%.2d):",i+1); scanf("%d",&array[i]); if(array[i]==-1) break; } printf("\n*****Display Number*****\n"); for(i=10;i>=0;i--){ printf("Num(%.2d):%6d\n",i+1,array[i]); } return 0; } 自分でこんなカンジに作ってみたのですが、だめでした。 修正をお願いします。。。 もし根本的に間違っていたらよろしくお願い致します。 [3] 環境 [3.1] OS:windows xp [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 今日中 [5] その他の制限:ポインタはここでは使用してはいけないそうです。
>81 for(i=10;i>=0;i--) → for(;i>=0;i--) -1が表示されてもいいならこれで
83 :
81 :2006/11/22(水) 11:16:59
そういうことでよかったんですか! できれば-1だけを表示させたくないんですが。。。 それは可能でしょうか?
81のだと最後まで入れるた時にarray[10]を呼んじゃうからダメだ。 for(i-=1;i>=0;i--) に修正すれば-1も表示されなくなる
81じゃなくて82ね
86 :
81 :2006/11/22(水) 11:21:08
本当ですね! ありがとうございます♪
>>80 能力に見合わない評価は何の役にも立たないどころか有害でしかない。
まあ学生さんには分からないかも知れんがね。
> そう かんけいないね 殺(ry ゆず(ry
89 :
デフォルトの名無しさん :2006/11/22(水) 12:02:19
遺伝的アルゴリズムを用いて次の問題を解きなさい f(x)=x{sin(10πx)+2cos(10πx)+1.0 (-1≦x≦2) f(x)の値を最大にするxの値とf(x)の値を求めよ。
90 :
デフォルトの名無しさん :2006/11/22(水) 12:04:51
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク):
以下の2つのファイルを2つの方法でクロマキー合成せよ。
:ファイルはこれです。→
ttp://uploda.en.tc/index.cgi?md=fl&file=1164137430%2e%2erar (1)RGBで変換
(2)HSVで変換
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Vsual C++ 6.0
[3.3] 言語: C
[4] 期限: 今週中
[5] その他の制限: ・数字以外は入力を受付けない
・一等6桁、二等下5桁、三等下4桁、四等下2桁
・自分の葉書番号は何度でも入力可にする
・上位の等が当たったら下位の等は当たらないようにする
以上です、宜しくお願いします
同じ問題を見たような・・・ 何回貼ってもやってもらえるとは限らないぞ
92 :
デフォルトの名無しさん :2006/11/22(水) 12:56:30
>>90 画像処理とお年玉年賀宝くじを組み合わせた課題か.....
93 :
デフォルトの名無しさん :2006/11/22(水) 18:29:14
4次方程式の数値解、そして解析解との比較。
せんせー。数値解と解析解の意味がわかりませんー。
あれ?俺言葉の使い方間違ってるかも??
98 :
78 :2006/11/23(木) 00:43:38
>>90 は私の質問ではないので。
つか、90さん、ファイルの中身がどうあれ、私に断りもなくファイルのリンクを
貼るのは、いかがなもんでしょうか?
100 :
78 :2006/11/23(木) 00:55:37
分かったらさっさと答えんかいボケナスども
>>100 先生に断りもなくファイルをアップして公開のは、いかがなもんでしょうか?
分かったらさっさと削除せんかいボケナス!
102 :
デフォルトの名無しさん :2006/11/23(木) 02:15:03
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):ファイルを読み込み、各行が逆順に出るようなプログラムを作る。 条件・一行の文字数や、行数の制限を行わない事。 ・同じファイルを二回以上オープンしない事。 ・メモリに異常が発生した場合は、検知し、確実に異常終了させる事。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:mingw-jp [3.3] 言語:C++ [4] 期限:2006年11月24日 [5] その他の制限:
>>102 #include <iostream>
#include <fstream>
#include <string>
#include <vector>
int main()
{
std::ifstream ifs("ファイル名");
std::string str;
std::vector<std::ios::pos_type> vpos;
std::ios::pos_type tmp;
while (tmp = ifs.tellg(), std::getline(ifs, str))
vpos.push_back(tmp);
ifs.clear();
std::vector<std::ios::pos_type>::reverse_iterator ipos = vpos.rbegin();
while (ipos != vpos.rend()) {
ifs.seekg(*ipos);
std::getline(ifs, str);
std::cout << str << std::endl;
++ipos;
}
}
メモリの異常を検知って、何気に無茶なことを書いてるな。
メモリが足りなくなったら、程度に読み替えておけばいいんじゃね? vectorやstringは勝手に例外投げるし、敢えてtryブロックにする 必要もないかと。
106 :
デフォルトの名無しさん :2006/11/23(木) 03:06:55
:-)
107 :
デフォルトの名無しさん :2006/11/23(木) 03:24:20
>・メモリに異常が発生した場合は、検知し、確実に異常終了させる事。 確実に『異常終了』かよwwwww
確実にOSでもクラッシュさせるかw
109 :
デフォルトの名無しさん :2006/11/23(木) 03:35:59
abort()使えって意味だろ?
マンドクサ('A`)誰かやってくれ
SIGなんちゃら受け取って死なせりゃええやん
つ 電源ボタン
HDDのパーティションでも破壊する?
>一行の文字数や、行数の制限を行わない事。 何気にマンドクサイな。 つか1行が2GB以上あったらむりぽ。
>>105 メモリが足りなくなることはメモリに異常が発生したとは言わない。
メモリセルが突然死したりすることをメモリに異常が発生したと言うのだ。
>>101 お前、ホント迷惑。
質問がスルーされるからやめてくんない??
まぁ、それが目当てなんだろうけどさ。
>>116 鳥付ければいいってものじゃないです><
>>116 100 も 116 も本当の 78 であるかは甚だ疑問だが、101 は、
リンク自体は自由に属し制限することができないのにそれを制限しようとしたり、
問題文のコピーは著作権法で制限されているのにそれを無視するといった、
自分に都合の良いダブルスタンダードをからかっているのでは。
>>78 rar が解凍できね。
圧縮形式を zip か lzh にしてくれないかな?
もしくは rar を解凍するコードを貼ってくれてもおkだけどな。
肖像権とかは問題ないのか?あれ
>>122 ひょっとして、肖像権に問題ありそうなのか
同じような課題2つに、更に78トリ付二人もいるしね
やっぱり、
>>78 世代は
>>118 の "自分に都合の良いダブルスタンダード"を持つ世代
なのかも
124 :
デフォルトの名無しさん :2006/11/23(木) 13:51:45
>>78 ができない、俺が言うことではないと思うが、
自由に発言することは結構だが、他人に迷惑かけんのはやめなよ。
125 :
デフォルトの名無しさん :2006/11/23(木) 13:57:53
>>123 んな事言ったら、ココに質問に来るやつら、
全員、都合の良いやつらだぉ(^ω^)
>>125 言葉遣いがどうあろうと、人の善意をタダで利用するという意味で募金詐欺と大差ない。
ただ、善意を利用するということが暗黙の了解であるだけマシというだけ。
質問者を貶しても心を痛める必要は全くない。
>>125 でも丸投げするだけならダブルスタンダードではない。
社会で通用する考え方かどうかはともかく、自己矛盾はしてない。
>>78 が自分の写真を使ってるなら問題にならないけど、
そうじゃないなら勝手にアップロードしてバラまくのは問題じゃないかな?
それともフリーな写真素材かなんかを使ってるんだろうか
>>126 不正は質問者と回答者の間で起きてるんじゃない、出題者と質問者の間で起きてるんだ!
ぉぃおぃ、ダブルスタンダードとか、 他で、やってんくんない??君ら。
ダブルスタンダードってこういうこと? #include<stdio.h> #include<stdlib.h>
むしろこんな感じ? #include <sys/socket.h> #include <winsock2.h>
>>102 #include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
int main(int argc, char* argv[])
{
if (argc != 2) return 1;
std::ifstream ifs(argv[1]);
std::string line;
while (std::getline(ifs, line)) {
std::copy(line.rbegin(), line.rend(), std::ostream_iterator<char>(std::cout));
std::cout << std::endl;
}
return 0;
}
>>135 それじゃ文字単位で逆になるだけだろ。
各行を逆に表示しなきゃならない。今の所まともに動くのは
>>103 だけ
漢字はどうすんの?
漢字は逆の意味にすればいいんじゃね?
かなり大変そうだな
wifstreamを使えば十分だろ。
行の入れ替えなら漢字は問題にならない。
>>142 行の入れ替えはいいが、今行毎に文字を逆にするんではないかという
話になっている
>>102 の "各行が逆順に出る"をどのように解釈するか
A. ファイルの行を後ろから表示(ファイルの最初の行を最後に表示、そして、最後の行を最初に表示、stack)
B.1行の文字列を逆順に表示 (12345 -> 54321)
漏れは、Bと解釈したが、喪前らどうよ
>>144 AともBとも解釈できるがBなら他に適切な表現があると思う
だからA派
おれもA派、文字を逆にじゃなくて行を逆になんで
B
Aっぽいな 行数の制限を行わないとか書いてあるし
各行(それぞれひとつずつ)を逆にすると俺は解釈したからB派 というかAでもBでも課題としてはありそうだから解釈に困るなw
>> クロマキー系 とりあえず、先頭の54バイトをコピーした後、 (1)3バイトごとに処理。 (2)YUV変換をかます。
151 :
デフォルトの名無しさん :2006/11/23(木) 21:59:15
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3019.txt このプログラムは有向グラフの閉オイラーパス(一筆書き)を求めるものであるが、無向グラフにも対応させよ。
ヒント
if(current[v]!=0){
push(current[v]);
while(top!=0){
while(current[v]!=0 && searched[(current[v]+1/2]!=0)
current[v]=adjlist[current[v]];
if(current[v]!=0){
a=current[v];
current[v]=adlist[a];
push(a);
}
else a=pop;
}
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: borland
[3.3] 言語: C
[4] 期限: 土曜
[5] その他の制限:
ヒントみても全然わからないです。よろしくお願いします!
>>151 てめー期限が土曜なんてありえねー課題出してんじゃねー
ぶっ殺すぞ
絶対解いてやんねー
>>78 クロマキーピクセルの(r,g,b)分布が(64,64,128)より青側にあるから
if ( R < 64 && G < 64 && B >= 128 ) {
で背景と人物のピクセルを切り替えればよい。
154 :
151 :2006/11/23(木) 23:16:24
>>152 本当に土曜なんだよ。
お前みたいな異端児には頼まないから他の方よろしくお願いします。
2006年はいらないとしても11月25日って書けばいいだろうに・・・ 出来れば時間も書いて欲しい。00:00でもいいけど。
156 :
151 :2006/11/23(木) 23:33:00
出来れば時間に余裕を持っておきたいので、なるべく今夜中に お願いします。さっさとやらんかいボケどもめ
157 :
デフォルトの名無しさん :2006/11/23(木) 23:35:27
>>154 ピーーーッ
>・・なんだよ とか お前みたいな異端児には頼まないから
他人の善意に期待してるんだから、こんなこと書くよる回答する気なくなるよ
本当に土曜なんです、よろしくお願いします と書く!
世渡りうまくなれよ
158 :
157 :2006/11/23(木) 23:38:26
他人の善意に期待してるんだから、こんなこと書くよる回答する気なくなるよ **訂正** 他人の善意に期待してるんだから、こんなこと書くと回答する気なくなるよ
159 :
151 :2006/11/23(木) 23:49:08
>>158 しがない俺にアドバイスをありがとうございます。
ねくらでひねくれてて友達もいなくて課題を誰にも相談することができなくて困ってるんです。
ageで依頼する奴が、人を煽る際にsageで書くなんて現実性がない。 たぶん、質問者成りすまし。 まぁ俺は答える気が最初からないからどうでもいいけど
だよな。俺が151って名前にすりゃ、それでわかんなくなっちゃうんだから大抵の暴言等は成りすまし。
全部自演にしか見えないよ
まぁトリップをつけてない質問者が悪いんだけどな
77代目スレは荒れてるな
まさに荒らしの思う壺って所か
荒れてるね お願いしますの言葉より、解答ソースを書き込んだ後の ありがとうございましたって言葉の方が俺は欲しいな。
いい加減ループはやめようか
ループなしで課題をやれとな!?
全部アンロールとかそれはそれで地獄
ループがなければ再帰をつかえばいいじゃない。 マリーアントワネット
何でそんなややこしいことせなあかんのや! おんどりゃぶっとばすぞ!
173 :
◆D2Ir/QRV8E :2006/11/24(金) 00:42:55
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):標準入力で入力された20個の数字をバブルソート
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 日曜くらいまでにはお願いします。。。
[5] ちょっと端折りますが・・・
お願いします。
256桁までという仕様なんですがとりあえずint型の範囲で作ってます。
main、input、bubblesortの3つの関数を作ってます。
void bubbleSort(int **sortNumber, int length); char *input(void); int main()てな感じです。
マイナスの値のソートと文字列の判定が上手くいきません。
input関数でcharポインタを返して、バブルソート関数でmainでatoiでint型にしたポインタ配列を渡すのは途中経過を見せた時に変えちゃダメと言われたのでその辺を考慮してお願いします。。。
ソースを見せたいのですが
>>1 が死んでて、直で載せると改行が多すぎになるので困ってます。。。
>>173 アップローダを使え
なにをどうゆう風にしたいのかいまいちわかんね
>>171 ここの解答者はマリーアントワネットか。
釣り師の人に注文。面白そうな問題にしてね。
あ、出来上がってるところまでのソースもつけてくれると嬉しいな。
178 :
◆D2Ir/QRV8E :2006/11/24(金) 01:30:17
>>173 20個の数字(つまり0〜9)?
256桁(つまり10の256乗)まで?
まあエスパーにとっては序の口なんだろうが…
180 :
デフォルトの名無しさん :2006/11/24(金) 02:07:31
>>718 問題がないので省略って部分もちゃんと書いて
こっちでコンパイルしようと思ってもできないからね
182 :
デフォルトの名無しさん :2006/11/24(金) 02:14:22
荒れてるなあ
if (*(sortNumber + nSortCnt) < *(sortNumber + nSortCnt -1)) { intのポインタの大小比較したってしかたあるめい。 void bubbleSort(int *sortNumber, int length); void bubbleSort(int *sortNumber, int length) { char *input(void) { return pNum; →?int * } /* 文字列の1文字目が\0の場合はループから抜ける */→?
>>179 最大桁数256桁の数値20個ど思ふ
256桁には漏れも驚いたよ、long long intでも遠く及ばないし
尋常じゃない桁数なので、入力された文字列を数値変換しないで
文字列比較でソートしたほうが良いような気がするが
数値変換しなければならなそうなんで、頭の良い香具師に期待上げだな
>>178 /* ここは問題無いようなので省略 */
こういうときは↑の部分に問題あることが多いからなあ
nNum の型と対応が取れているかどうかも確認したいので、全部晒せとしかいえない
>>180 256桁なんかはよくある
例えばRSAなんか1024ビットだから10進数で300桁超だからな
stdafx.hって言われてもよう
血液型がRHだと珍しい人扱いってのも分からん話だな 教官はアホなのだろうか
そもそも血液型で括るのがおかしい
>if(a||A) ( ゚Д゚ )
>>187 何とコメントしていいものやら・・・・・・
>>192 つまりダメダメってことですか・・・orz
>>188 #include<stdio.h>から上はVC++2005が勝手に付けたんで
そのままupしちゃいました、無視して下さい。
>>191 小文字と大文字のどちらでも動くようにって言われたもんですから・・・
取りあえず良くわかりません
enumをcharにしてみよう
>>194 charにしました。何を入力して「貴重面な〜」が出ます・・・
あと、人数nに関しては、値を指定してないので変な数字が出るんですが、
そのやり方が分かりません。(a++とかを一体どこに・・・?)
printf("几帳面な人。%d人目。\n",++anum); とかでええんちゃうーん
カウンタ初期化するのを忘れずに
>>196 なるほど、分かりました。
ただやっぱり何を入力しもて「几帳面〜」が出て、数字も変な
ままです・・・
すいませんが宜しくお願いします。
>>197 return 0;でいいんですよね・・・?
基礎からやりなおせ。
string.hを使っているということは、それ相応の理由があると思います。 strcmpでも使ってみたらいかがでしょうか? それとprintf文の中で、a++を使っていますが aには元から0ではないので、初期化するということです。
#include<stdio.h> int main(void){ int i, j, k, n, a;//変数宣言 int **p;//アドレス宣言 printf("please input! n = ");//入力を促すメッセージ出力 scanf("%d",&a);//aとして入力された数字を取り込む。 p = (int **) malloc(sizeof(int *)*a);//mallocで行のスペース作成 for(i=0; i<=a-1; i++){//行の列指定 p[i]=(int*) malloc(sizeof(int)*a);//mallocで列のスペース作成 for(j=0; j<=a-1; j++)//列の行指定 p[i][j]=0; } n=a; k = 0;//kは0からスタート for(i=0; i<n/2+n%2; i++) { for(j=i; j<=n-i-1; j++) p[i][j] = k++; for(j=i+1; j<n-i-1; j++) p[j][n-i-1] = k++; for(j=n-i-1; j>i; j--) p[n-i-1][j] = k++; for(j=n-i-1; j>i; j--) p[j][i] = k++; } for(i=0; i<a; i++,printf("\n")) for(j=0; j<a; j++) printf("%5d",p[i][j]); return 0; } このプログラムのkは0からスタート以降の意味がよくわかりません。 どなたか解説お願いします。
いやそこを自分で考えないでどこで頭使うんだ?
>>201 #include <stdio.h>
#include <string.h>
void main(void) {
char blood[3];
int n = 0;
printf("血液型を入力して下さい。\n");
while (scanf("%2s", &blood) != EOF) {
if(!strcmp(blood, "a") || !strcmp(blood, "A")) printf("几帳面な人。%d人目。\n", ++n);
else if(!strcmp(blood, "b") || !strcmp(blood, "B")) printf("マイペースな人。%d人目です。\n", ++n);
else if(!strcmp(blood, "ab") || !strcmp(blood, "AB")) printf("不思議な人。%d人目です。\n", ++n);
else if(!strcmp(blood, "o") || !strcmp(blood, "O")) printf("面倒見のいい人。%d人目です。\n", ++n);
else if(!strcmp(blood, "rh") || !strcmp(blood, "RH")) printf("珍しい人。%d人目です。\n", ++n);
else printf("嘘は良くないね。\n");
}
return 0;
}
>203 kが0からスタートしてることと、k++の意味を考えて実際に実行してみれば判らないか?
台形公式によると定積分値は b h ∫ f(x)= ―[ f(a0)+f(an) + 2( f(a1)+f(a2)+..+f(an-1)] a 2 b−a 但し、h=―――― a@=a+ih と近似できる。 n n=1000としてこの公式を使って 1 4 ∫ ―――― dx の近似値の作成Cプログラムが 0 1+(x*x) わかりませんどなたかお願いします。
【質問テンプレ】 [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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
209 :
203 :2006/11/24(金) 12:48:09
動作自体はわかるんですけど、各行のfor文がどう動いてその結果になったかがわからないんです。
>>207 #include <stdio.h>
double f(double x) {
return 4 / (1 + x * x);
}
int main(void) {
int n = 1000, i;
double a = 0., b = 1., h = (b - a) / n, s = 0.;
for (i = 1; i < n; ++i) s += f(a + i * h);
s *= 2;
s += f(0) + f(n);
s *= h / 2;
printf("%f", s);
return 0;
}
>209 それは動作がわかるとは言わない。 動作がわかるならforがどう動いてるかもわかるはず。 iは外側から数えていくつめの四角かを意味する。 jはその四角の各辺を移動するのに用いられてる。 forはそれぞれ上辺、右辺、下辺、左辺に順番にkを1ずつ増やしながら入れている。
>>207 #include<stdio.h>
double f(double x)
{
return 4/(1+x*x);
}
double f_integral(double a, double b, long n)
{
double h, ai;
double ret=0.0;
long i;
h=(b-a)/n;
for(i=0;i<=n;i++)
{
ai=a+i*h;
ret+=f(ai);
}
ret-=(f(a)+f(b))/2;
ret*=h;
return ret;
}
int main(void)
{
printf("%f\n", f_integral(0, 1, 1000));
return 0;
}
213 :
203 :2006/11/24(金) 13:02:54
>>211 ありがとですw
まだ始めたばかりなのでよく分からなくてスイマセン;
214 :
212 :2006/11/24(金) 13:05:54
先に答え出てたか… orz
215 :
宿題丸投げ厨房一同 :2006/11/24(金) 16:12:47
回答を提供してくれる偉大な香具師に感謝age 回答を御提供まことに有難うございます、これからもよろしくお願いいたします。
振込先とかはないんですか? これって無料なんですか?
>>216 ギブ&テイクだよ
あなたが教えられるレベルに成長した時に後輩たちを育てればいい
>>217 は何気に名言。
俺も何年か前はここで質問してた側だったぜ。
育てるつもりなら丸投げに回答なんかしねえよw 宿題丸投げしてて成長なんかするわけねえだろ。アホかwww
>>219 それは否定できないな
PGになる人間の淘汰も兼ねてるとは思う
本人次第なんだよね
評価は欲しいけど技術を向上させるつもりはない依頼者と、 とくに評価は関係なく、コーディングの練習のためにモチベーションの 得やすい例題を欲している回答者の間で、ギブ&テイクが成立している。
評価は欲しいけど技術を向上させるつもりはない依頼者と、 そのようなクズを隔離したい利用者の間で、ギブ&テイクが成立している。
アホか
224 :
デフォルトの名無しさん :2006/11/24(金) 19:34:22
_____________________________________________________ 。。。 。。。。。。 。。。。。 。 。。。。。。 。 。。。 。。。。。。 。。。。。 。。。 。。。。。。。 。。。。。。。。 。。。。。。。 _____________________________________________________ 上みたいに道に人(。)が左右に行き交うプログラムで (↑ここまでは作成済み) あとY軸毎(列毎)の人の速度Vx[i]の平均を求めて、 縦軸Vx[i]の平均、横軸yのグラフを描きたいです。 お願いします。
226 :
224 :2006/11/24(金) 19:50:44
[1] 授業単元: 情報処理演習 [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS:mac os X [3.2] コンパイラ名とバージョン: project builder(たぶんC++builderと同じようなもんです) [3.3] 言語: C++
説明よーわからんし作成済みうp
授業単元:C言語 問題文(含コード&リンク):7ならべ 環境 OS:Windows コンパイラ名とバージョン:Microsoft Visual C++ 2005 Express Edition 言語:C言語 期限:2006年12月1日まで その他の制限:COM3人と対戦 パス3回 ジョーカーあり 勝敗判定をする どうか宜しくお願いします
229 :
207 :2006/11/24(金) 20:26:50
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): fgetsの返り値を利用して、ファイルの最後まで読み込んで画面に出力する ようにせよ。 #include <stdio.h> #define COLSIZE 80 int main(int argc, char *argv[]) { char buffer[COLSIZE + 1]; FILE *fp; fp = fopen("files.c", "r"); while(){ printf("%s", buffer); } fclose(fp) return 0; } files.cというのはファイル名です。 頑張って考えたのですが、while()の()に入るものが解りません。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 月曜までです。 よろしくお願いします。
232 :
151 :2006/11/24(金) 21:37:07
荒らしっぽい書き込みは自分じゃないです。 あと期限が水曜日に延びました。 もしよろしければお願いします
233 :
224 :2006/11/24(金) 21:39:15
235 :
230 :2006/11/24(金) 21:55:14
>>231 レスありがとうございます。
#include <stdio.h>
#define COLSIZE 80
int main(int argc, char *argv[])
{
char buffer[COLSIZE + 1];
FILE *fp;
fp = fopen("files.c", "r");
while(fp == NULL){
fgets(buffer, COLSIZE + 1, fp);
printf("%s", buffer);
}
fclose(fp);
return 0;
}
こんな感じになるんじゃないかなーと思うのですが違いますよね?
実際、実行しても何も表示されませんし。
while(s == NULL)も(fp == EOF)もダメでした。
while fgets でぐぐれ
237 :
224 :2006/11/24(金) 22:01:36
>>234 すいません、C++じゃなくてobject-Cっていうやつです
>>235 返り値を誤解してるのでは。例えば、
p = fgets(buffer, COLSIZE, fp);
上の例で言うと、『p に』『fgets() の返り値が』代入される。
buffer や fp は fgets() の返り値ではない。
(ちなみに、p の型が何かはマニュアルの書式欄から読み取れるはず。)
objective-Cで教えてるとこなんてあるんだ、びっくりなんだぜ でもスレ違いな
241 :
235 :2006/11/24(金) 22:17:44
理解できました。 ありがとうございます。 #include <stdio.h> #define COLSIZE 80 int main(int argc, char *argv[]) { char buffer[COLSIZE + 1]; FILE *fp; fp = fopen("files.c", "r"); while(fgets(buffer, COLSIZE + 1, fp) != NULL){ printf("%s", buffer); } fclose(fp); return 0; } ですよね? もう一つ、お聞きしたいのですが、 読み込むファイル名をfgets関数を使って標準入力から読み込むようにして、 files.c以外だけでなく任意のファイルを読み込めるようにプログラムを変更 せよ。fgets関数で取り込むと改行記号も保存されるため、そのままでは ファイル名として使用できない。改行記号を\0に置換する処理を行う必要が ある。(strlenを使用しなさい。) という問題なのですが、さっきのと違って考えても解りません。 strlenの使い方は解るのですが、これをどう活用させたら良いのかとか、 改行記号を\0に置換する処理とか、よく解りません。
[1] 授業単元:配列 [2] 問題文(含コード&リンク):3次元配列の確保せよ この問題に対して以下のようにしました。 P =(double ***)calloc(ALL,sizeof(double **)); if(P ==NULL) exit(1); for(i=0 ; i < ALL ; i++){ P[i] = (double **)calloc(NN,sizeof(double *)); if (P[i]==NULL) exit(1); for (j=0 ; j < NN; j++){ P[i][j] = (double *)calloc(NN,sizeof(double)); if (P[i][j]==NULL) exit(1); } } ALL=8760,NN=99です。この数値は変更不可で、この配列確保を7回繰り返さなければなりません。 4回目になると勝手に計算が終わってしまいます。 多分、ALL=8760が大きいためと思うのですが・・・。うまく配列を確保する方法よろしくお願いします。 [3] 環境 [3.1] OS: Win XP HOME [3.2] コンパイラ名とバージョン:Microsoft Visual C++ 2005 Express Edition [3.3] 言語: C [4] 期限: 出来れば明日中にお願いします
>>241 改行は文字列の最後についている。
文字列の長さが分かれば、最後の文字の位置が分かる。
最後の文字の位置を '\0' で上書き(代入)すると改行が消える。
>>242 8760 * 99 * 99 * 8Byte = 655MB
655 * 7 = 4585MB
結論
そのOSとコンパイラじゃ無理
>>242 こういう事がしたいんだろ?
double ***P;
int i, j;
P =(double ***)calloc(ALL, sizeof(double **));
if(P ==NULL) exit(1);
for(i=0 ; i < ALL ; i++) {
P[i] = (double **)calloc(NN, sizeof(double *));
if (P[i]==NULL) exit(1);
for (j=0 ; j < NN; j++){
P[i][j] = (double *)calloc(1, sizeof(double));
if (P[i][j]==NULL) exit(1);
}
}
246の計算通りだとすると245はAMD64か何かを使ってるんだろうか?
にしても4G以上メモリを積んだマシンなのか?
>>249 物理メモリがそんだけある必要はないだろう。
仮想メモリも合わせて4G越えという線もあるだろうし、FreeBSDのように実際に 使用されるまでメモリの確保さえしないOSもある。
やっぱり無理ですかね・・・? 色々調べてみてcallocではなくfarcalloc使う?とかあったんですけど、根本的に無理な雰囲気ですねorz
>>252 >ALL=8760,NN=99です。この数値は変更不可で、この配列確保を7回繰り返さなければなりません。
これは問題文そのままか?
原文そのままを書くこと。
トリップ付けます。 説明がなくて申し訳ないです。 状況としては、プログラム上で3次元配列を7つ用いなければならなくて、今まで24時間を扱っていたのが 365日分*24時間=8760で計算してみる上で 「3次元配列の確保をせよ」という課題です。
よし次はエスパーが来るのを待って99の謎を解いてもらおう
うるう年も欲しいな
>>257 主記憶上に確保するのが無理なら、ファイルを配列の変わりに使えよ。
その都度アクセスしてもHDDならそんなに遅くないだろ。
日本語能力の足りない人間は 問題文をそのままコピペするのが最低限の誠意だと思うんだ お前の足りない頭でどう考えたかなんてどうでもいい
実は宿題でもなんでもなく、単に自分が困った事を聞いてるだけちゃうんかと。 それで問題文が出せないんちゃうんかと。
授業単元:配列ってのもなんか怪しいしなあ。 まあどちらにしろ、本当に8760 * 99 * 99のdouble型の3次配列を7個確保しなきゃ いけないんだとしたら、メモリ足りないんだからあきらめろ。
鬱にならないでください もしなったらまた相談しにきてください。
>>262 スレ違いでしたか・・・。どうもスイマセン。
誘導ありがとうございます。そちらで質問し直します。
↑は自分です、失礼しました・・・
って、もう去ってたのか。
>>205 有難うございました!まだまだ勉強不足のようなので、
初めから勉強し直したいと思います!
>>268 ファイル上に領域を確保してる。
MapViewOfFile (unix 系では mmap) を使うと、ファイルをメモリ上に対応付ける事ができ、
該当するメモリへの読み書きが直接ファイルに対する読み書きになる。
技術的にはスワップファイルと同じ仕組み。
free() する場合と違い、対応付けを解除しても内容はファイル上に保持されるので、アクセス
する必要のある配列を必要のある期間だけ対応付け、必要がなくなったら即対応付けを解除
することで、アドレス空間を節約できる。(なので一度に7配列アクセスしたら当然破綻する)
# ちなみにかつての 16bit Windows は同じような仕組みで少ない実メモリをやりくりしてた。
272 :
デフォルトの名無しさん :2006/11/25(土) 05:12:21
[1] 授業単元: コンピューター実習 [2] 問題文:以下のサンプルを参考に、文字で cos カーブ、sin カーブを描くプログラムの作成 #include <stdio.h> #include <math.h> // cc -lm #define PI 3.1415926 int main( void ) {int deg; for (deg=0 ; deg <= 360; deg += 20) printf("%3d: %6.3lf %6.3lf\n",deg ,cos( (double)deg * PI / 180.0 ) ,sin( (double)deg * PI / 180.0 )); } 0 * + 15 * + 30 * + 45 + 60 + * 75 + * 90 + * 105 + * 120 + * 135 + * 150 + * 165 + * 180 + * 195 + * 210 + * [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11月29日
>>272 /* cc -lm */
#include <stdio.h>
#include <string.h>
#include <math.h>
#define PI 3.1415926
int main(void){
int deg;
for (deg=0 ; deg <= 210; deg += 15){
const int x1=(int)(sin(deg*PI/180.0)*25);
const int x2=(int)(cos(deg*PI/180.0)*25);
int i;
printf("%3d ",deg);
for(i=-25;i<=25;++i)
putchar(i==x1?'*':i==x2?'+':' ');
puts("");
}
return 0;
}
[1] 授業単元: コンピューター実習 [2] 問題文:入力した文字を元に、それを拡大したアスキーアートを描くプログラムの作成 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:11月29日
[1] 授業単元:UNIXプロセス管理
[2] 問題文(含コード&リンク):
簡単なパイプを実現するシェルプログラムを作りなさい。
@ ls | more
. . .
@
のようにコマンドを'|'でつなげると、前のコマンドの
標準出力を後ろのコマンドの標準出力とします。
簡単のため、コマンドは2つだけとします。
パイプの実現にはpipeシステムコールを
使います。
int fds[2];
pipe(fds);
write(fds[1], . . . .);
read(fds[0], . . .);
[3] 環境
[3.1] OS:UNIX
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:2006年11月25日23:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
ポインタ、構造体、システムコールなどは習いました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3033.txt 授業でやった↑のサンプルを改造して作るらしいです。
>>151 まず、サンプルの実行結果だけど、
-----
input the number of vertices n and the number of edges m
4 3
input tail and head of an edge m times
1 2
1 3
2 3
adjacency list
1: 1 2
2: 3
3:
4:
path: a tail head
1: 10 0 0
2: 1 1 2
3: 3 2 3
-----
隣接リスト(adjacency list)で1に対して1、2って正しいのか?
2、3が正しいと思うんだが、
それと最期のpath: と a って何? a[1]=10になってるしサンプルバグってね?
278 :
277 :2006/11/25(土) 13:04:25
それから、無向グラフにした場合は隣接リスト表示するだけでOK?
279 :
277 :2006/11/25(土) 13:24:07
>>276 #include <fcntl.h>
このファイルも自前だろ。晒せ。
281 :
241 :2006/11/25(土) 14:21:31
>>243-244 レスありがとうございました。
#include <stdio.h>
#include <string.h>
#define COLSIZE 80
int main(int argc, char *argv[])
{
char buffer[COLSIZE + 1], new[COLSIZE + 1];
FILE *fp;
fgets(new, COLSIZE + 1, stdin);
a[strlen(new)] = '\0';
fp = fopen("new", "r");
fgets(buffer, COLSIZE + 1, fp);
while(fgets(buffer, COLSIZE + 1, fp) != NULL){
printf("%s", buffer);
}
fclose(fp);
return 0;
}
考えた結果こうなったのですが違ってますよね?
どこが違うのでしょうか?
>>281 ところどころに出てくる
> COLSIZE + 1
には何か特別な意味があるのか?
>>281 1.
>fp = fopen("new", "r");
"new" では、「newという内容の文字列」になってしまう。
指定したいのは new という「変数」。
2.
一番目の文字を指す時 new[ ? ] の ? に入る数字は?また長さ一の文字列の最後の文字はどこにある?
二番目の文字を指す時 new[ ? ] の ? に入る数字は?また長さ二の文字列の最後の文字はどこにある?
・
n 番目の文字を指す時 new[ ? ] の ? に入る数字は?また長さ n の文字列の最後の文字はどこにある?
284 :
282 :2006/11/25(土) 14:42:56
ああ、COLSIZE+1は終端文字も含めてか
>>281 >a[strlen(new)] = '\0';
new[strlen(new)] = '\0'; もしくは
new[strlen(new)-1] = '\0';
fopen() 直後のfgetは余計
[1] 授業単元:プログラミング [2] 問題文:2つの最大40桁の自然数を読み込み、その和を返すプログラムを作れ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名: gcc [3.3] 言語: C [4] 期限:来週の木曜日(11月30日)まで [5] その他の制限:構造体、ポインタを軽くならったところです。 入力は文字列で行い、それを型変換し計算するという流れになるかと思いますが、 文字列の扱いに困っております。
>>287 適当に書いてみた。
#include<stdio.h>
#include<string.h>
void std_reverse(char*begin,char*end){
char c;while(begin != end && begin != --end)c=*begin,*begin++=*end,*end=c;
}
char*my_strrev(char*p){std_reverse(p,p+strlen(p));return p;}
int main(void){
char a[41]={0},b[41],c,*p=a,*q=b;
scanf("%s%s",a,b);
my_strrev(a);my_strrev(b);
for(c=0;*p||*q||c;c=*p > '9',*p++ -= c * 10)
*p = (*p?*p:'0') + (*q?*q++-'0':0) + c;
puts(my_strrev(a));
return 0;
}
>new[strlen(new)] = '\0'; もしくは 少なくともこれは全く無意味だな。
もしくはの意味わかるか?
>>292 もしかして、真偽値を確かめてから偽なら後を実行するというアレか!?
実験まで強要するとは憎いやつじゃ
>>292 その文脈でもしくはと書く以上、
:私にはどちらを依頼人が望んでいるかは分からないが、
:依頼人の望む動作は A と B のどちらかであるように私には思える。
と解釈するのが常識的であって、つまり本人は A にも B にも意味があると
思っていると判断されて当然では。
逆に、私はわざとやったとは考えてないが、もし本人が、一方は全くのハズレで
意味がないと重々承知した上でわざとこのように書いたのなら、その軽重は
別として、相手を混乱させてやろうといった意思があったことになるのでは。
問題 「もしくは」を使って文章を作りなさい 回答 彼は頼もしくはない
[1] 授業単元: プログラミングT [2] 問題文: 文字列と数字を与え、文字列の長さが数字より大きいかどうかを判定し、 その後に文字列の長さがどれだけ数字より大きいかを求めて表示するようなプログラムを作成せよ。 文字列の長さの方が小さい場合は何もせず終了せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名: gcc [3.3] 言語: C [4] 期限: 11/29まで [5] その他の制限: まだ始めたばっかなんで全然わかりません。
ポインタがわからないんだが、どうすればいい? スレ住人おすすめの本かサイトを教えてくれ。
>>301 brainf*ckがいいんじゃないか?
ぐぐってみろ
[2] 問題文: 受け取った引数xの全桁の合計値を返す関数 int sum_dgt(int x) {/* */} を作り実行しなさい。 例えばx=234のときは9となる。(正の整数とする) [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名: gcc [3.3] 言語: C [4] 期限: 11/28まで おねがいします
304 :
281 :2006/11/25(土) 18:43:33
>>284 はい、そういうことです。
>>283 氏と
>>285 氏のレスで解りました。
ありがとうございます。
ただ、
>>285 氏の
>fopen() 直後のfgetは余計
というので、なぜfopen() 直後のfgetが必要ないのかは、
いまいち解りませんが。
305 :
151 :2006/11/25(土) 19:19:11
>>277 点数が4で
辺数が3のグラフって閉路がなくないですか?
もう151は来るな 死んでくれ
307 :
151 :2006/11/25(土) 19:23:17
暴言吐いていたのは自分じゃないですよ。それは信じて下さい
どこ大? 俺より下だったら答えてあげる
310 :
151 :2006/11/25(土) 19:29:11
慶應です。
俺ポン大なんだよね 死ねよKO
312 :
151 :2006/11/25(土) 19:31:58
310は自分じゃないです。あーなんでこんなに偽物が・・・ 慶應ではないです 特定されると嫌なので書きたくないですが、慶應よりは下です
俺は苦労してポン大しか入れなかったというのに ボンボンというだけで慶應に入って おまけに卒業に必要な単位は他人任せか 腐れ外道が
314 :
151 :2006/11/25(土) 19:36:09
日大って猿でも受かるんじゃないんですか? 幼稚舎にいた頃、アルバイトで来ていた日大の学生さんを見て、日大はお猿さん養成所も同然だと母が言ってましたが。
どれかひとつぐらいは こっそり本人が書いたんじゃないかと思えてきたよw
NG推奨名前:151
内容: [1] 授業単元:情報処理工学1 [2] 問題文(含コード&リンク): 下記 [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン:VC++ [3.3] 言語: C++ [4] 期限: 明日まで [5] その他の制限: class Vector{ public: void f(){cout << "f()" << endl;} }; int main(){ vector<Vector*> vec; Vector *v; for(int i = 0; i < 10; i++) { v = new Vector; vec.push_back(v); } for(vector<Vector*>::Iterator i = vec.begin(); i < vec.end(); i++) i.***->f(); } というプログラムを作ってるんですが、動的にクラスを確保して、それを次々にvectorに格納して、最後に表示をするっていうふうにしたんです。 ですが、***の部分をどうやったらいいのか、わかりません。クラスではなく、整数であれば、i をそのまま使えばいいんですけど、クラスだとうまくいきません。 どうしたらいいでしょうか??
どうでもいいがとりあえず今未解決の課題はどれだけあるんだ 前スレのは知らんがこのスレのを消化していこうぜ 下らん流れはさっさと断ち切るに限る
今更遅いかもしんないっすけど、トリップつけます
323 :
デフォルトの名無しさん :2006/11/25(土) 19:50:57
>>303 //受け取った引数xの全桁の合計値を返す関数
int sum_dgt(int x)
{
int digit = 1;
int sum = 0;
int i ;
int xx ;
int xxx = x;
for(i = 1; x > 1 ;i++){
x /=10;
digit *= 10;
}
for(;digit > 0; digit/=10){
xx = xxx;
xx /= digit;
sum += xx;
xxx-=xx*digit;
}
return sum;
}
>>322 自分のも含めて頂いてありがとうございます。てっきりスルーされると思いました。
みんな期限迫りすぎだろw もっとゆとりを持って依頼に来てくれよw
>>90 はファイルがもうないから消していいと思われ
330 :
デフォルトの名無しさん :2006/11/25(土) 20:06:56
>>300 #include <stdio.h>
#include <string.h>
//'\0'は数えないものとする
void Compar(int x, char s[])
{
unsigned int len;
len = strlen(s);
if(x <= len)
printf("文字の長さと数値の差は%d \n",len - x);
else
return;
}
332 :
323,300 :2006/11/25(土) 20:10:57
すぐ出来るやつだけやった。
現在、WindowsXP Pro+ VS2005 Proを使って開発中です。 1を入力されるとIMEがONになって、'あ' と表示するプログラムの作成中です。 以下のコードではIMEがONになってくれなくて、'a' と表示されます。 ご指摘お願いします。 void fnConvert(MSG *pMsg) { static int iCnt= 1; if( (pMsg->wParam == 0x31) && (pMsg->message == WM_KEYDOWN) ) { pMsg->wParam= 0x41; break; } }
お疲れ。 俺は274でもやるか 本人降臨してほしいが
C++ってインスタンスじゃなくクラスを確保するんだ
>>326 しかし宿題出された瞬間にここに出されても萎えるという
338 :
デフォルトの名無しさん :2006/11/25(土) 21:03:07
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): あるテキストファイルに含まれるA〜Zの個数をカウントするプログラムをつくれ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: lcc [3.3] 言語: C [4] 期限: 11月28日まで お願いします。どう検索すればいいかも分からないので教えていただきたいです。 答えがほしいですが、ヒントをいただければ自分でも努力はします。
>>338 fgetc()を使ってEOFになるまで一文字ずつ読み込み、isalpha() && isupper()が
真になる時に配列count[26]のうち対応する文字のカウントを+1する。
>>338 質問されても面倒なので答えを書いておく
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
int chr[26] = {0}, c, i;
FILE *fp;
if ((fp =fopen("count1.c", "r")) == NULL) /* ファイル名は適宜変更 */
exit(1);
while ((c = fgetc(fp)) != EOF)
if (isalpha(c) && isupper(c))
chr[c - 'A']++; /* Windows上で動かす事を前提とする */
for (i = 0; i < 26; i++)
printf("%c : %dcount(s)\n", i + 'A', chr[i]);
return 0;
}
あ、最後にfclose(fp); してから return 0; しといてね
342 :
デフォルトの名無しさん :2006/11/25(土) 21:23:57
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): テキスト(英文)を読み込んで単語を全て取り出し、重複する単語は1つにまとめ、その単語がいくつあったかabc順に並べて表示するプログラムを書きなさい。(.,"などは含まない) [3] 環境 [3.1] OS:WindowsXP [3.2] lcc [3.3] 言語:C [4] 期限:2006年11月26日24:00まで プログラミング初心者です。申し訳ありませんがどなたかお願いします。
>>340 に補足
#include <stdio.h>
#include <ctype.h>
#define NUMBER 26
main(int argc, char **argv){FILE *fp; int i, c, chr[NUMBER]={0};
if((fp=fopen(argv[1],"r")) == NULL) puts("need 1 parameter");
else {
while ((c=fgetc(fp))!=EOF) if (isalpha(c)) chr[toupper(c)-'A']++;
fclose(fp);}
for (i=0; i<NUMBER; i++) printf("%c: %3d time%s\n",i+'A',chr[i], chr[i]>1?"s":"");
getchar();return 0;}
345 :
287 :2006/11/25(土) 21:30:50
>>288 ありがとうございます。が、なんか文字化けしちゃって私の環境では見れませんね・・・
わざわざ張ってくださったのに申し訳ないです
>>289 これはこれは、わざわざ作ってくださってありがとうございます
しかし私のポインタの知識が未熟なせいか、今現在はまだ読み解けない部分がありますね
けれども、これはとても参考になります。ほんとにありがとうございました
ランディ・バースは44番
聞いてねぇーよ
ごめん俺が聞いたんだ。 ホント悪かった。
351 :
287 :2006/11/25(土) 21:58:09
>>346 すみません知りませんでした
一応ググって復元してみたら無事プログラムソースを見ることができました
お手数かけまして申し訳ありません
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): y=sin2x*cosx(0≦x≦π/4)をgnuplotで図示せよ。 gnuplotの関数表示機能は使わず、C言語でプログラムを組んで、その出力 データをgnuplotで読み込んで図示させること。刻み数は1000とする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 来週の火曜日の20時までです。 [5] その他の制限:特になし。 出力データをファイルに書き込み、gnuplotでそのファイルを読み込み グラフを表示させる、といことです。 よろしくお願いします。
ところでいつか丸投げされてた遺伝的アルゴリズムの問題解こうと思うんだが 俺遺伝的アルゴリズムやったことないんだ 計算結果はdoubleで返すことを期待されてると思うんだが double型にビット演算ってできないよな? 何か良いアイデア知ってる火といないかな
>>319 class Vector {
public:
void f(){ std::cout << "f()" << std::endl; }
};
int main()
{
std::vector<Vector*> vec;
Vector *v;
for (int i = 0; i < 10; i++) {
v = new Vector;
vec.push_back(v);
}
for (std::vector<Vector*>::iterator i = vec.begin(); i < vec.end(); ++i)
(*i)->f();
}
>>352 gnuplotに読み込ますデータの仕様くらい用意してから書き込めよ。
>>356 お こんな要素があったのか バッチリだな
ありがとう
358 :
352 :2006/11/26(日) 00:55:37
>>355 すいません、
>gnuplotに読み込ますデータの仕様くらい用意してから書き込めよ。
というのは、出力データをどんな感じでファイルに書き込むか、という
ことですか?
xiとyiとしたら
0.0000 0.14356
0.0100 0.16344
. .
. .
. .
という感じです。
>>352 #include<stdio.h>
#include<math.h>
#define N 1000
double f(double x){
return sin(2*x)*cos(x);
}
int main(void){
double x, dx=(M_PI/4)/N;
int i;
for(i=0;i<=N;i++){
x=i*dx;
printf("%f %f\n", x, f(x));
}
return 0;
}
360 :
デフォルトの名無しさん :2006/11/26(日) 02:23:49
greeting all:
excuse me for writing in English, i haven't installed japanese IME
so i can't type in japanese
i'm working on my project in my computer science class and
found a very interesting result. that is recursive merge-sort
function is faster than non-recursive version.
i posted the same question on cprogramming.com so that
the details and my source code is provided at
http://cboard.cprogramming.com/showthread.php?p=612918#post612918
361 :
353 :2006/11/26(日) 04:03:12
うん 出来たっぽい さすがに人に見せられるレベルじゃないのでもう少し手を入れるが もし締め切りが近かったらアレなので89はまだいたら締め切り示せ
362 :
228 :2006/11/26(日) 06:42:23
>>228 訂正
コンパイラ名とバージョン:VC 6.0
で未解決なのでお願いします
363 :
その1 :2006/11/26(日) 09:13:28
>>89 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <float.h>
#include <math.h>
#define N 500//世代内の個体数
#define G 1000//最大世代数
#define Kousa 0.5//交差率。0〜1
#define Totuzen 0.1//突然変異率。0〜1だが小さめに設定すること
#define Pi 3.14159265358979
union uGENE
{
int i[2];
double d;
};
double hyouka (double x);
void kousa(int *a,int *b);
void mutation(int *a,int *b);
int mycomp(const void *_a, const void *_b);
int choice(int i);
364 :
その2 :2006/11/26(日) 09:14:14
void main(void){ int g,i; union uGENE future[N+1]; double r,present[N]; srand((unsigned) time(NULL)); for(i=0;i<N;i++) present[i]=3.0*((double)rand()/RAND_MAX)-1.0; for(g=0;g<G;g++){ printf("%d世代目計算中・・・\n",g); qsort(present, N, sizeof(double), mycomp); for(i=0;i<N;i++) { r = (double)rand()/RAND_MAX; future[i].d=present[choice(i)]; if(r<Kousa){ //交叉 future[i+1].d=present[choice(i+1)]; kousa(future[i].i,future[i+1].i); kousa(future[i].i+1,future[i+1].i+1); i++; } else if(r<Kousa+Totuzen){ //突然変異 mutation(future[i].i,future[i].i+1); } //何もしなければコピーになる } //世代交代 for(i=0;i<N;i++) present[i]=future[i].d; } qsort(present, N, sizeof(double), mycomp); printf("x=%fの時f(x)は%f",present[0],hyouka(present[0])); }
365 :
その3 :2006/11/26(日) 09:15:20
//評価関数。xが定義域に無い時はマシンエプシロンを返す。 //評価関数はx{sin(10πx)}+2cos(10πx)+1.0をそのまま用いるが //0以下の場合はマシンエプシロンの10倍を返す。 double hyouka (double x){ if(x<-1||x>2) return DBL_EPSILON; double y,tmp; tmp=10.0*Pi*x; y=x*sin(tmp)+2*cos(tmp)+1.0; if (y<=0) return DBL_EPSILON*10; else return y; } //交叉関数。一様交叉を行う void kousa(int *a,int *b){ //交叉するビットを示すマスクを作る unsigned int mask=0; //マスクの各ビットにランダムに0/1を入れる for(int i=0;i<32;i++){ mask+=rand()%2; mask<<=1; } //aとbで内容が同じビットは交叉する必要がない mask=mask&(*a^*b); *a^=mask; *b^=mask; }
366 :
その4 :2006/11/26(日) 09:16:00
//突然変異関数。どこか1ビットをランダムに反転させる。 void mutation(int *a,int *b){ unsigned int mask=1; int r=rand()%64; if(r>=32){ r-=32; mask<<=r; *a^=mask; } else{ mask<<=r; *b^=mask; } } int mycomp(const void *_a, const void *_b) { double a = *(double *)_a; double b = *(double *)_b; double tmp=hyouka(b)-hyouka(a); if (tmp<0) { return -1; } else if (tmp > 0) { return 1; } else { return 0; } }
367 :
その5 :2006/11/26(日) 09:20:36
int choice(int n){ //エリート選択 if(n==0||n==1) return n; //投げやりなランキング選択 for(int i=0;i<N-1;i++){ if(rand()%2==0) return i; } return N-1; } これで終了。 作っておいてなんだがそんなに性能良くない。 とりあえず交叉の元になる個体に同じ物が二つ選ばれるというバグ(笑)があるので 取り除いたらもう少し性能が良くなると思います。(直すつもりだったのに忘れてた) あとchoice関数を物凄い適当に作ってあるんでここらをいじっても良くなるはず。 やる気があったら改良するかも。
ああ、バグ直したら大分性能良くなった まあこれくらいは自力でやって
[1] 授業単元:計算科学 [2] 問題文 連続な値をとる確率変数Yp_ _ _ _,Ynが独立同分布(iid) p(x)=1( 0≦x <1) p(x)=0(それ以外) に従うとしよう. double get_uniform_random() そのままですね. 連続な値をとる確率変数Xnを Xn=(1/N)×(Y1+…+Yn) で定める. N? 1000 サンプル数? 100 シード? 128478 と入力すると, X1000のサンプルを100個生成して, # N X_Nのサンプル平均 X_Nのサンプル分散 1000 0.502346 0.000868 と出力するプログラムを作ってください。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Visual Studio.NET2003 [3.3] 言語: C [4] 期限: 2006年11月28日09:00まで
370 :
デフォルトの名無しさん :2006/11/26(日) 10:21:44
342どなたかお願いします。時間がありません…
371 :
デフォルトの名無しさん :2006/11/26(日) 10:40:21
Cかぁ、面倒くさいな
372 :
デフォルトの名無しさん :2006/11/26(日) 10:45:33
お願いします(><)
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 3つの整数を各辺の長さとして、その3つの辺の組が (1)正三角形を出力できるなら「equilateral triangle」と出力し、 (2)(一般的な)三角形が形成できるなら「triangle」と出力し、 (3)三角形が形成できなければ「not triangle」と出力する プログラムを作成せよ。 もし可能ならば、上の条件に加えて (4)直角三角形を形成できるなら「right-angled triangle」と出力し、 (5)二等辺三角形を形成できるなら「isosceles triangle」と出力し、 (6)三角形を形成できるならばその面積Sを出力するプログラムを作成せよ。 例: 4,4,4・・・equilateral triangle (S=6.928) 6,5,7・・・triangle (S=14.697) 6,2,2・・・not triange ヒント: 3つの整数をa,b,cとすると、三角形を形成する条件は、|b-c|<a<b+c 面積Sはへロンの公式より、s=(a+b+c)/2とするとS=(s(s-a)(s-b)(s-c))^1/2 [3] 環境 [3.1] OS:linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: 2006年11月28日16:00まで どう考えてもわかりません。どうかお願いします。
>>370 というか英文の仕様が無いと作りづらいかも。
・英文中に出てくる記号は",(カンマ)" ".(ピリオド)"" (空白)"のみ?
":(コロン)"とかは出てこない?
・改行は分離子と見なしていい?例えば
I am progr
ammer
という文ならprogrammerを単語とみなすのか?
progrとammerをそれぞれ単語とみなすのか?
>>337 ありがとうございます。
コンパイルする際にエラーが出ましたが、なんとか頑張って修正してみます。
>>370 つーか全く同じ問題が前スレか前前スレで解答されてた気がするんだわ
379 :
352 :2006/11/26(日) 14:34:20
>>359 解答ありがとうございます。
359さんが作って下さったプログラムについて、少し疑問があるのですが…。
課題の前の説明に「刻み数を小さくすれば実際の曲線に近いデータになる。」
と書いてあるのですが、352さんが作って下さったプログラムの場合だと、
刻み数を大きくすればする程、出力する数も増えて、実際の曲線に近い
データになるような気がするのですが…。
自分自身が刻み数というものを何か解ってなく、現在、学校じゃないので
gnuplotを使用できないというのもあって、実際は、どうなの解りませんが
疑問に思ったので。
>>379 >課題の前の説明に「刻み数を小さくすれば実際の曲線に近いデータになる。」
本当にそう書いてある? 刻み「幅」を小さくすれば、なら納得いくのだけど。
382 :
デフォルトの名無しさん :2006/11/26(日) 15:20:25
>>376 英文はなんでもよいそうです。
英文にでてくる文字の中で単語のみを抜き出すプログラムです。
英文中に出てくる記号は",(カンマ)" ".(ピリオド)"" (空白)"":(コロン)"";(セミコロン)"です。
・改行は分離子と見なしてよいそうです。
383 :
379 :2006/11/26(日) 15:50:27
>>380 はい、課題の前の説明には「刻み幅」と書いてあります。
「課題には刻み数は1000とする。」と書いてあります。
刻み数=刻み幅と思っているのですが違うのですか?
違うなら刻み数と刻み幅はどう違うのでしょうか?
↑ どこのアホだよ、わからないことを紙に書いて 整理してから書き込めばわかることだろ。 馬鹿は馬鹿なりのプログラムの書き方ってのがある、 それすらしない奴はもしかして自分の頭だけで 物事全て考えられると思ってるのか? そういうのって思い上がりだよ。
>>381 それ1行に1単語とか制約つきじゃまいか?
世の中には助かった人たちだけでなく、助からなかった人たちもいるのだ。
>>385 main関数のwhile文をこう書き換えればよし。
while(scanf("%*[^a-zA-Z]"),scanf("%79[a-zA-Z]",buf)==1){
まぁ単語長に制限ついてるけど実用上は問題ないでしょ。
>>383 まず一つ言っておく
煽りでもなんでもなく小学生でも分かることだから今後自分の勉強への態度を変えたほうが良いぞ
━━━━━━━━━━━━━━━━━━━━
↑これを刻み数10で分割すると(10個に分割する)
━━━━━━━━━━━━━━━━━━━━
└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘
こうなる。
一方刻み数5で分割すると(5個に分割する)
━━━━━━━━━━━━━━━━━━━━
└──┘└──┘└──┘└──┘└──┘
こうなる。
分割する数が減れば、1個1個の幅(刻み幅)は増える。
当たり前だな
要するにキャベツの千切りは相当細かいってこった
>>377 後学のために、どういうエラーが出たか教えてくれないか?
392 :
デフォルトの名無しさん :2006/11/26(日) 16:24:59
>>383 喪前が100mを歩かなければならないとする。
で、100m歩くときの歩数(刻み数)と歩幅(刻み幅)の関係を考えでみろ
歩数x歩幅=100m
歩数が多い、歩幅が小さいになるだろ
>>389 見ろ
>>391 ちょうど今修正してる段階で気づきましたが、
こちらの手違いでした、申し訳アリマセンOTL
ここでやって貰った回答見ると、先生やTAの方が答えてるんじゃないかってちょっと怖くなる・・・・。 提出したら不可がきたりとか・・・・。
>>388 そりゃまた随分乱暴だな・・・( ^ω^)
いいけどよ、俺の宿題じゃねーしw
>>393 見返してて気づいたけど、一筆書きをする方の58行目のコメント
「全ての節点の次数が偶数だった」
は嘘なので削除しておいてくれ。
399 :
デフォルトの名無しさん :2006/11/26(日) 16:56:09
342お願いします
本当は自力でやりたかったんですけどどうしても分からないので。 [1] プログラミング [2] , 次のようにデータ 0 をターミネータとするものに書き換えよ. * 例えば, 配列 a に 4 個のデータ 10, 11, 12, 13 を記憶する場合には, a[0]=10, a[1]=11, a[2]=12, a[3]=13, a[4]=0 のように記憶する (0 がデータの終わりを表す). データ数を別途他の変数で記憶することはしない. * void array_input(int *a) … データ数は入力しない. 最初から0番目のデータ, 1番目のデータ, …, を順に入力し, 0 を入力した時点で終了するようにする. 引数は配列 (の先頭アドレス) a だけで, データ数は特にセットしない. * void array_print(int *a), void array_reverse(int *a) … 配列 (の先頭アドレス) a のみ渡し, データ数は渡さない. * main は次のようになる. [3] [3.1] winXP sp2 [3.2] cygwin [3.3] C [4] 11月30日 [5] 元のやつを書き換える問題なんですけど、途中までやってます。 それの問題のあるところを教えてくれたら助かります。
本当は自力でやりたかったんですけどどうしても分からないので。 [1] プログラミング [2] , 次のようにデータ 0 をターミネータとするものに書き換えよ. * 例えば, 配列 a に 4 個のデータ 10, 11, 12, 13 を記憶する場合には, a[0]=10, a[1]=11, a[2]=12, a[3]=13, a[4]=0 のように記憶する (0 がデータの終わりを表す). データ数を別途他の変数で記憶することはしない. * void array_input(int *a) … データ数は入力しない. 最初から0番目のデータ, 1番目のデータ, …, を順に入力し, 0 を入力した時点で終了するようにする. 引数は配列 (の先頭アドレス) a だけで, データ数は特にセットしない. * void array_print(int *a), void array_reverse(int *a) … 配列 (の先頭アドレス) a のみ渡し, データ数は渡さない. * main は次のようになる. [3] [3.1] winXP sp2 [3.2] cygwin [3.3] C [4] 11月30日 [5] 元のやつを書き換える問題なんですけど、途中までやってます。 それの問題のあるところを教えてくれたら助かります。
ごめんなさい。なんか2chブラウザがおかしいことになって 自分の書き込み表示されないで402 403が出てきたので 投稿されていないと思いました。これのおかしい所お願いします。 i=0;とかが変だと思うのですが。 #include <stdio.h>#define ARRAY_MAX 32 void array_input(int *a){ int i;int *p; i=0; while (*a){ printf("%d 番目の要素 = ", i); scanf("%d", &a[i]);} } void array_print(int *a){ int i; printf("{"); while (*a){ if (0<i){ printf(",");} printf("%d", a[i]);} printf("}\n");} array_reverse(int *a) { int i=0; int temp=0; while (*a){ a[i] = a[i];} } int main(void){ int a[ARRAY_MAX]; array_input(a); array_print(a); array_reverse(a); array_print(a); return 0; }
>>405 色々とおかしい
とりあえず元々の書き換え前のを出したほうがはやいぜ?
407 :
デフォルトの名無しさん :2006/11/26(日) 17:23:21
>>400 381は求められてる出力と違うみたいです。
・単語を全部取り出し重複する単語は1つにまとめる。
・それぞれの単語の出現した数を数えて表示する。
・単語をアルファベット順に並べる
ということが求められています。
面倒かと思いますが本当に申し訳ないのですがどなたかお願いします。
#include <stdio.h>#define ARRAY_MAX 32 void array_input(int *a, int *n){ int i, size; printf("配列のサイズ = "); scanf("%d", &size); for (i=0; i<size; i++){ printf("%d 番目の要素 = ", i); scanf("%d", &a[i]);} *n = size;} void array_print(int *a, int n){ int i; printf("{"); for (i=0; i<n; i++){ if (0<i){ printf(",");} printf("%d", a[i]);} printf("}\n");} array_reverse(int *a, int n) { int i=0; int temp=0; for(i=0;i<n/2;i++){ temp = a[i];a[i] = a[n-i-1];a[n-i-1] = temp;}} int main(void){ int a[ARRAY_MAX]; int n; array_input(a, &n);array_print(a, n);array_reverse(a, n);array_print(a, n); return 0;} 書き換え前。ターミネートされてないやつです。これは正常に動きます。 行数の都合で無理に改行して見難くてごめんなさい。2時間ほど自力で考えましたが力不足ですね。
たった2時間で諦めるなとまず言いたい
>>401 まず長さを取得して、それを使って書き換え前の関数を呼べば良い。
>>410 2時間本気で悩むのはなかなかできることじゃないと思うが。
悩んでどうする 考えんだぉ(^ωー)
>>412 実践の時間として2時間は長いが
努力の時間としては2時間は短い
高ければ高い壁の方が、登ったとき気持ち良いもんな
レシピないっすよ
417 :
383 :2006/11/26(日) 18:07:22
>>389 さんと
>>392 さんの説明で解りました。
刻んだ時の数と刻んだ時の幅ってことだったのですね。よく考えたら、
そのままですね。
ありがとうございました。
418 :
デフォルトの名無しさん :2006/11/26(日) 18:10:54
>>408 初歩的な話で申し訳ないのですが実行できなくて・・・
コンパイルは成功するのですがそれからどうすれば良いか・・・
基礎的なことがわからなくて申し訳ありません。
cpadを使っているのですがどうやったら実行結果を見れるのでしょうか??
>>415 この時代遅れの努力家めが。
世の中全てはコストパフォーマンスだ。
限られた時間を最大限自分の楽しみに使い面倒なことは全て他人任せにするのが今のトレンドなんだよ。
>>401 だって今頃異性といちゃいちゃしながらアホども早く答えてくんねーかなーと笑っていたりするんだよ。
そんなわけでタダで利用されるだけの可哀想な負け組みの自分は
コピペすればすぐ動くことをモットーにして今日も初心者スレでひつまぶし。
#include <stdio.h>
#define ARRAY_MAX 32
void array_input(int*a)
{int i,size;printf("配列のサイズ = ");scanf("%d",&size);
for(i=0;i<size;i++){printf("%d 番目の要素 = ",i);scanf("%d",&a[i]);}a[size]=0;}
void array_print(int*a)
{int i;printf("{");for(i=0;a[i]!=0;i++){if(0<i){printf(",");}printf("%d",a[i]);}printf("}\n");}
void array_reverse(int*a){int i,n=0;int temp;while(a[n]!=0)n++;for(i=0;i<n/2;i++){temp=a[i];a[i]=a[n-i-1];a[n-i-1]=temp;}}
int main(void){int a[ARRAY_MAX];array_input(a);array_print(a);array_reverse(a);array_print(a);return 0;}
[1] 授業単元:C言語講座 [2] 問題文(含コード&リンク): 九九の表を作成せよ。ただし形は、下の様 な形にすること。 .....1....2.....3.....4.....5.....6.....7.....8.....9 1..1....2.....3.....4.....5.....6.....7.....8.....9 2..2....4.....6.....8..10..12..14...16..18 3..3....6.....9...12..15..18..21..24..27 4..4....8...12..16..20..24..28..32..36 5..5..10..15..20..25..30..35..40..45 6..6..12..18..24..30..36..42..48..54 7..7..14..21..28..35..42..49..56..63 8..8..16..24..32..40..48..56..64..72 9..9..18..27..36..45..54..63..72..81 .はスペースは思ってください。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 明日の朝の11時 [5] その他の制限: 2重ループ?(forを2回使うやつ)を使う
test
>>354 すみません。あの、エラーになりした。
error C2040: 'i' : 'class Vector ** ' は 'int' と間接操作のレベルが異なります。
error C2446: '<' : 'class Vector ** ' 型から 'int' 型への変換ができません。
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
error C2040: '<' : 'int' は 'class Vector ** ' と間接操作のレベルが異なります。
error C2100: 間接指定演算子 (*) の使い方が不正です。
error C2227: '->f' : 左側がクラス、構造体、共用体へのポインタではありません。
というのが出ました。
どうしたらいいでしょうか?
#include <stdio.h> int main(void){ int i,j; printf(" "); for(j=1;j<10;j++)printf("%3d",j); printf("\n"); for(i=1;i<10;i++){ printf("%d",i); for(j=1;j<10;j++) printf("%3d",i*j); printf("\n"); } }
424 :
420 :2006/11/26(日) 19:10:03
>>423 ありがとうございます。
助かりました〜。
>>418 コマンドプロンプト、リダイレクト・・・後はわかれ
[1] 授業単元: プログラミングC
[2] 問題文(含コード&リンク):
ファイルから行列を読み込み,ガウスの消去法を行いなさい.ただし,データは matrixを使用すること
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3041.txt matrix
1.0 2.0 -12.0 8.0 3.0 30.0
5.0 4.0 7.0 -2.0 6.0 10.0
-3.0 7.0 9.0 5.0 9.0 20.0
6.0 -12.0 -9.0 3.0 1.0 50.0
9.0 1.0 -5.0 14.0 -11.0 80.0
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: borland C++ Compioler
[3.3] 言語:C言語
[4] 期限: 火曜日
問題は?のところを書き換えるようになっています。
よろしくお願いします。
427 :
319 :2006/11/26(日) 23:30:28
すみません。どうやったらいいのか教えていただけないでしょうか?
>>354 さんが書いていただいたプログラムですと、
error C2040: 'i' : 'class Vector ** ' は 'int' と間接操作のレベルが異なります。
error C2446: '<' : 'class Vector ** ' 型から 'int' 型への変換ができません。
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
error C2040: '<' : 'int' は 'class Vector ** ' と間接操作のレベルが異なります。
error C2100: 間接指定演算子 (*) の使い方が不正です。
error C2227: '->f' : 左側がクラス、構造体、共用体へのポインタではありません。
というエラーが出ました。ここの部分が解決できたら宿題が完成します。
教えて欲しい所は、クラスを動的確保して、vectorに格納。で、vectorを使って格納したクラスの関数を使いたいです。
宿題をやっていただくというのに、申し訳ないのですが、
よろしくお願いします。
>>427 コンパイラは何使ってるの?ソースは本当に
>>354 のままか?
gcc3.4.2(MinGW)で普通にコンパイルできて実行できるのだが。
まさか #include <iostream> #include <vector> using namespace std; が抜けてるとか、そういうオチはやめてくれよ。
>>428 VC++6.0を使ってます。
今、自分の書いたところを確認したですが、VC++だけしか書いていませんでした。
すみませんでした。
>>429 残念ながらオチませんでしたw
>>427 for (int i = 0; i < 10; i++) {
を
for (int j = 0; j < 10; j++) {
に変更したらどうなる?
# これで通るようなら、コンパイラを窓から投げ捨てろ状態な訳だが。
>>431 変更したら通りしました!!!!
みなさん、ありがとうございます!!
ですが、なぜ変更したら通ったでしょうか?
>>431 あー何かVC6はスコープが他のC++コンパイラと違うとかあったな。
そこまで面倒みきれんわ。
434 :
デフォルトの名無しさん :2006/11/27(月) 00:00:51
>>432 VC6.0はfor文のスコープ規則が古い仕様なのでforを突き抜けるから
よくある回避策としては
#define for if(0){}else for
ってのをファイルの先頭に突っ込むとかいう手がある。
>>432  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」
―――――――――――――‐┬┘
|
____.____ |
| | | |
| | ∧_∧ | |
| |( ´∀`)つ ミ |
| |/ ⊃ ノ | | VC++6.0
 ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄ |
|
そんなコンパイラ、窓から投げ捨てろ!
436 :
432 :2006/11/27(月) 00:02:25
なるほど。そういう事です。 わかりました! ありがとうございました!
>>419 すみません、そのプログラムは動くのですが
問題はd番目の要素 と最初から入力させるのではなくて
0を入力させた時点で終わるようなものを作りたいです。
>>438 void array_input(int *a)
{
int i;
for(i=0;;i++) {
printf("%d 番目の要素 = ", i);
scanf("%d", &a[i]);
if(a[i] == 0) break;
}
}
void array_print(int *a)
{
int i;
printf("{%d",a[0]);
for(i=1; a[i]!=0; i++) printf(",%d", a[i]);
printf("}\n");
}
void array_reverse(int *a)
{
int i, j, temp;
for(i=0; a[i]!=0; i++);
for(j=0; j<i/2; j++) {
temp = a[j];
a[j] = a[i-j-1];
a[i-1-j] = temp;
}
}
[1] プログラミング言語 [2] テキストファイルに書いた英文を読み込み、単語の長さを調べてその頻度を調べるプログラム を作る。ただし空白、タブ、改行は文字列に含まず、ピリオド、コンマは0文字とする。 (20文字以上は1まとめとする) [例] 0文字 1文字 2文字 … 20文字以上 3 4 6 0 [3] 環境:Windows XP 言語:C++ [4] 期限: ([2006年11月29日13:00まで] よろしくお願いします。
>>441 ありがとうございます。しかし実行するとエラーが発生してしまいますた_| ̄|○ il||li
>>443 どういうエラー?
それから、fopenの第二引数で"wb"とすべきところを"w"と書いたので
直しておいてくれ。
>>444 wbは直しました!
d:\cprog\08rect\08rect.c(4): error C2059: 構文エラー : '型'
d:\cprog\08rect\08rect.c(7): fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
と出ます。
本当に苦手ですいません。
>>445 なんて酷いメッセージだ。何が悪いのか分からん。
当て推量だが、2箇所あるmaxをmax_of_twoで置換してみたら直るかも知れん。
>>442 #include <algorithm>
#include <iostream>
#include <fstream>
#include <map>
#include <string>
int main(int argc, char* argv[]) {
if (argc != 2) return 1;
std::ifstream input(argv[1]);
if (!input) return 1;
const char delimiters[] = " \t,.";
std::map<int, int> dic;
std::string line;
while (std::getline(input, line)) {
dic[0] += std::count(line.begin(), line.end(), ',') + std::count(line.begin(), line.end(), '.');
std::string::size_type start_index = line.find_first_not_of(delimiters);
while (start_index != std::string::npos) {
std::string::size_type end_index = line.find_first_of(delimiters, start_index);
if (end_index == std::string::npos) end_index = line.length();
if (end_index - start_index != 0) ++dic[end_index - start_index < 20 ? end_index - start_index : 20];
start_index = line.find_first_not_of(delimiters, end_index);
}
}
for (int i = 0; i < 20; ++i) std::cout << i << "文字: " << dic[i] << std::endl;
std::cout << "20文字以上: " << dic[20] << std::endl;
return 0;
}
すいません、関数の戻り値を数値配列にすることは可能ですか? 可能であれば方法を教えていただきたいのですが
>>448 > 数値配列
初耳の言葉だ
もっと説明モトム
>>449 例えば、void test(double matrix[10][10], double *matrixPtr[10][10])
ってイメージで、matrix[10][10]を関数に入力して、
計算した結果をmatrixPtr[10][10]に出力するって感じです。
多分根本的なところが間違ってると思われますが、
void型の関数で不特定多数の、main関数で使える値を出すには
どうすればいいんでしょうか?
かなり日本語喋れってかんじだと思いますが、どうかよろしくお願いします・・・
>>450 渡された配列の中身を書き換えるだけなら、わざわざ double *matrixPtr[10][10]
ってポインタ配列にする意味がわからん。mallocで確保でもするのか?
値を変更するためにポインタにしなきゃいけないと思ってるんじゃない? 配列を引数にするってことがどういうことかわかってないんだろ。
453 :
442 :2006/11/27(月) 10:44:03
<<447 早速の返答ありがとうございます。 でもこれって#include <stdio.h>だけで作れないですか? 最初の[5]で書いとくべきだったんですけどすみません。 多分、単語を切り取って文字数を出力し、文字数mを添字とする配列要素を インクリメントしていく、という流れになると思うんですが・・・ 本当に申し訳ないですが、よろしかったらお願いします。
>>453 C++って書いておいてそれはねーだろw
455 :
デフォルトの名無しさん :2006/11/27(月) 13:54:15
これはひどいwwwwww
ワロタ
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 20061109のように日付を入力すると、曜日を出力するプログラムを作成せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:わかりませんがCygwinというものを使っています [3.3] 言語:C [4] 期限:11月中 [5] 習っている内容からすると、putchar,getcharを用いて作成しなければいけないようです よろしくお願いします
>>457 使用する暦の種類と適用期間が分からないとやりようがない。
宇宙世紀でお願いします。
宇宙世紀に曜日の概念なんかあるんか?
461 :
457 :2006/11/27(月) 16:41:01
西暦で、適用期間は特に指定されてないので適当に決めていいと思います・・・
せめて日付から曜日を決定する計算式くらい出せよ
コズミックイラで
>>461 #include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
char buf[100];
fgets(buf, sizeof(buf), stdin);
char cmd[100];
sprintf(cmd, "/bin/date -d '%s' +%%A", buf);
return system(cmd) >> 8;
}
>>460 宇宙世紀1年には地球の人口が90億に達するそうだ
現在の傾向のまま人口が推移するとあと30年後ぐらい
// 非環境依存版 #include <time.h> #include <string.h> #include <stdlib.h> #include <stdio.h> int main() { char buf[100]; fgets(buf, sizeof(buf), stdin); struct tm tmp; sscanf(buf, "%4d%2d%2d", & tmp.tm_year, & tmp.tm_mon, & tmp.tm_mday); tmp.tm_year -= 1900; tmp.tm_mon -= 1; tmp.tm_hour = tmp.tm_min = tmp.tm_sec = 0; mktime(& tmp); strftime(buf, sizeof(buf), "%A", & tmp); fputs(buf, stdout); return 0; }
467 :
デフォルトの名無しさん :2006/11/27(月) 17:18:31
469 :
467 :2006/11/27(月) 17:33:44
>>468 すみませんでした。main関数内の
encode_caesar(*str);
decode_caesar(*str);
について「ポインタの型が合わない」だったかのエラーが出ていました。
変に引数なんかをいじると関数内でさらに複数行に渡ってエラーが出たりします。
エラーがあいまいなのは家に帰ってしまってCを動かせる環境にないためですorz
>>461 ユリウス暦かグレゴリオ暦かくらい書け。
>>457 cygwinでコンパイルしてるときなんてコマンド打ってんだよ
コマンド名からコンパイラ名くらい分かるだろ?
#include <stdio.h>
int youbikeisan(int date);
void main(){
int date;
scanf("%d",&date);
char youbi[][3]={"土","日","月","火","水","木","金"};
printf("その日は%s曜日です\n",youbi[youbikeisan(date)]);
}
int youbikeisan(int date){
int h,y;
h=date/1000000;
y=(date%1000000)/10000;
return (y+(y/4)+(h/4)-h*2+(13*((date%10000)/100+1)/5)+date%100)%7;
}
[1] 授業単元:データ構造とアルゴリズム [2] 問題文 この状態から以下の関数を参考にしてリストの追加と削除ができるようにプログラムを追加する。出力のたびにリストの追加と挿入を「追加しますか?削除しますか?」と確認されるようにする。 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限:2006年11月28日午後2時 [参考プログラム] int InsertMigi(node *current,int data){ /*currentで示されるノードの直後にデータを挿入する*/ node *p = CreateNode();//要素を入れる箱を用意 if(current == end){ q = end->next; } q->number = data; q->next = current->next; current->next = q; return(EXIT_SUCCESS); } int Remove (node *current){ node *q; q = current->next; if(q == end){end = current;} current->next=q->next; free(q); return(EXIT_SUCCESS); }
[問題文] #include<stdio.h> #include<stdlib.h> typedef struct Node_template{ int number; struct Node_template *next; }node; node *start = NULL; int push(int data){ node *ptr = start; start = (node *)malloc(sizeof(node)); if(start == NULL){ fprintf8stderr,"Nomore memory"); exit(1); } start->number = data; start->next =ptr;[ return(EXIT_SUCCESS); }
[問題文続き] int main(void){ int input_data; int i; node *p; while(fprintf(stdout,"\n Enter an integar") ,scanf("%d",&input_data) == 1 ){ push(input_data); } fprintf(stdout,"\nMemory Image\n"); i = 0; for(p = start;p != NULL;p = p->next){ fprintf(stdout,"[%3d] = %5d\n",i,p->number); i=i+1; } return(EXIT_SUCCESS); }
477 :
467 :2006/11/27(月) 21:00:34
>>476 バグだらけ…orz
いやしかし大変助かりました。そういえば数字や記号が来た場合の処理に全く思考が及んでいませんでしたが、
isalphaという関数は初めて知りました。勉強になりました。
ありがとうございました。
478 :
デフォルトの名無しさん :2006/11/27(月) 23:17:47
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): nを100000にして、 納i=0,n](-1)^i/i! を計算し、その逆数を 表示しなさい。 つまり 1/x=納i=0,n](-1)^i/i! のxを求めるということです。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:なるべく早めにお願いします。 [5] まだ習い始めたばかりでよくわからないのですが、 whileを使うみたいです。 なるべく簡単におねがいします。 よろしくお願いします。
>>479 君の行っている大学はわかったが問題がどこにあるのかサッパリわからないのだが
481 :
479 :2006/11/27(月) 23:52:54
>>479 問題が何なのかさっぱり分かりません
まったくわからないのでお願いします
483 :
478 :2006/11/27(月) 23:54:49
付けたしはまずいですよね?
とりあえず学校に通報するという事でOK?
勝手にやってろ
通報しても意味無い。ここで教えてもらっても リアルで人にやってもらっても同じなんだし 建前はここも匿名板なんだから殺人とかじゃないとチャラ
>>487 何を勘違いしているんだ?
ここは教えるところなんかじゃないぜ
489 :
デフォルトの名無しさん :2006/11/28(火) 00:46:47
自分でやった方が自分のためになると思うけど 一応ヒント アドレス士官
ここは宿題がやりたくてやりたくてたまらない人が集うスレであって 宿題を持ってきたやつがどうなろうと知ったこっちゃない
とりあえず和歌山大学の学生は無条件で落とすことに決定。
492 :
デフォルトの名無しさん :2006/11/28(火) 00:49:56
新卒落とされたね
そして本人は公務員にしか眼中が無いという展開
494 :
デフォルトの名無しさん :2006/11/28(火) 00:52:12
別に中小企業に落とされたとしても 痛くも痒くもないですよw
495 :
デフォルトの名無しさん :2006/11/28(火) 01:08:20
1]win 2]gcc Cのみ 3]2006'11'30 映像を取り込み、 その映像を基にして 長さを調べて表示する プログラムを作成しろ よれしくおねがいします
少し前に書き込みしたのですがどなたかお願いします。 もし問題に不手際があったらそれだけでも教えてもらえるととても助かります
>>478 一応出来たけど答はいくらになればいいの?
499 :
デフォルトの名無しさん :2006/11/28(火) 01:14:50
>>495 写真に載っている物質の長さを求めるらしいです。
対象物とレンズの距離が毎度違うと思うので
分かりません
どうやってはかるの?
500 :
デフォルトの名無しさん :2006/11/28(火) 01:16:24
2次元の映像に奥行きを求める?
501 :
デフォルトの名無しさん :2006/11/28(火) 01:19:09
言い忘れてました。 ヒシャタイ の実寸らしい
502 :
デフォルトの名無しさん :2006/11/28(火) 01:22:38
市販されている3Dソフトの応用らしいのですが 意味がサッパリなので悩んでます
>>495 はっきり言う
それは億単位の案件になるので
たった2日では無理です。
申し訳無い
504 :
デフォルトの名無しさん :2006/11/28(火) 01:31:09
>>503 学校の宿題ですよw
大学内のみの流通のみで
物理学部に提供するらしい。
とりあえず
>>495 は
>>1 を声に出してよく読んで、テンプレを元にして書き直し
大学のみの流通とは言え他者に提供するのなら それは既に宿題ではないんではないだろうか
>>497 exp(1.0)だろ、常識的に考えて。
>>497 小さい方から足してるだろうな?積み残しが出るぞ。
>>509 e^1は1/0!+1/1!+1/2!+1/3!・・・だろ?
478の課題は
1/0!-1/1!+1/2!-1/3!・・・の逆数を求めろって言ってるぜ
>>510 ちゃんと100000から計算していってるよ
おまえら糞か ハヤクシロや
>>511 おいおい。寝ぼけてるのか?
exp(x) = 1 + x + x^2/2 + x^3/3 + ...
exp(-1) = 1 - 1 + 1/2! - 1/3! + ...
1/exp(-1) = exp(1)
>>514 あ、なるほどな
ののしるがいいさ さげすむがいいさ
という訳でバグ取れたから貼るか
>>478 #include <stdio.h>
#define N 100000
main(){
double i=N,y=1;
while(i>=1) y=1-y/i--;
printf("%f\n",1/y);
}
517 :
デフォルトの名無しさん :2006/11/28(火) 02:31:52
デフゥルトゥイラネだろ
519 :
デフォルトの名無しさん :2006/11/28(火) 02:45:48
[1] 授業単元:コンピュータプログラミング [2] 問題文(含コード&リンク):正整数nと実数xを入力して、多項式 1+x+xの二乗+xの三乗+…+xのn乗 を計算するプログラムつくりなさい。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2006年11月29日 [5] その他の制限:関数定義使う
520 :
デフォルトの名無しさん :2006/11/28(火) 03:00:30
ループだけじゃん
>>519 #include <stdio.h>
double keisan(double x,int n);
main(){
double x;
int n;
printf("xを入力してください\n");
scanf("%lf",&x);
printf("nを入力してください\n");
scanf("%d",&n);
printf("f(%f,%d)の答えは%fです。",x,n,keisan(x,n));
}
double keisan(double x,int n){
double y=1;
for(int i=0;i<n;i++) y=1+x*y;
return y;
}
522 :
デフォルトの名無しさん :2006/11/28(火) 03:46:25
ブブー
523 :
デフォルトの名無しさん :2006/11/28(火) 03:48:25
計算式おかしい。 ループかけるまえに 1を宣言して ループしたのを足していけばいいんだお
524 :
デフォルトの名無しさん :2006/11/28(火) 03:50:17
y=1+x;
>>523 n=1の時
y=1+x
n=2の時
y=1+x*(1+x)
n=3の時
y=1+x*(1+x*(1+x))
・
・
・
526 :
516 :2006/11/28(火) 04:31:48
この方が良いな
>>478 #include <stdio.h>
#define N 100000
main(){
double i=N+1,y=1;
while(--i) y=1-y/i;
printf("%f\n",1/y);
}
527 :
516 :2006/11/28(火) 05:28:09
最終版。
>>478 に俺に感謝する心が1バイトでもあるなら是非これを提出して欲しい
#include <stdio.h>
#include <float.h>
#define Nmax 100000
double tenkai(double n){
double i=n+1,y=1;
while(--i) y=1-y/i;
return y;
}
double kousuu(void){
double y=1;
int i=1;
while(i<N&&y>DBL_EPSILON) y/=++i;
return i;
}
void main(){
double n=Nmax;
double n2=kousuu();
if (n2<N) printf("n=%.0fまで計算した結果%.16f\n愚かにも",n2,1/tenkai(n2));
printf("n=%.0fまで計算した結果%.16f\n",n,1/tenkai(n));
}
528 :
516 :2006/11/28(火) 05:48:15
あ しまったNの名前変えたの忘れてた while(i<N&&y>DBL_EPSILON) y/=++i; ↓ while(i<NMAX&&y>DBL_EPSILON) y/=++i;
すみません、周りの人もわからないっていっててもうお手上げなんです。 どなたか解いてもらえないでしょうか。
>>529 前の日の晩に質問するなんて無謀な
今から知り合い増やそう
>>473-475 ってほとんど答えそのものだろ
node root;
// idx番目の要素を操作対象に設定
node *target = &root;
for(i=0;i<idx;i++)
target = target->next;
// 追加
InsertMigi(target, n);
// 削除
Remove(target);
printfやscanfくらい自分で書け
532 :
478 :2006/11/28(火) 09:13:53
皆さんいろいろとありがとうございます! ですが…わからないものばかりで… defineやらreturnやらvoidというのは習ってないんです。 すみません。 100000はscanfから読み込んでやるはずだったんですが、 説明不足ですみません。 答えは 2.71828に近づきます。 もしよろしければ、もう一度おねがいしたいのですが…
defineはともかく、returnとvoidを習ってないってのはありえなくない?
>>532 習ってないからといって使っていけないというわけでもないし、ぐぐれば理解できるだろ
scanfで読み込むように書き直すくらい自分でできるだろうし
535 :
478 :2006/11/28(火) 09:36:21
>>533 えっ!?そうなんですか…でも本当に習ってないんです。
>>534 わかりました。なんとかやってみます。
「習ってない」をNGワードに。
>>531 // idx番目の要素を操作対象に設定をどこにいれていいのかわからないです
何度もすみません
538 :
デフォルトの名無しさん :2006/11/28(火) 12:47:36
[1] 授業単元:計算機演習2 [2] 問題文(含コード&リンク):4個の1桁の数字からなる順列を乱数で生成 キーボードから4個の数字の順列を入力 生成した順列と入力の順列を比較 位置が合っている場合はhit,位置が間違っている場合はblowとし、 ヒット数とブロー数を表示させる 順列があたるまで入力を繰り返すプログラムを作りなさい [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 12月5日 12時まで [5] その他の制限: long random(void)まではヒントが与えられています。 宜しくお願いします。
random() なんてあったっけ
関数つくれって事だろ
[1] 授業単元: Cによるプログラミング実習II [2] 問題文(含コード&リンク): キーボードから入力された文章を単語単位で切り出し 総単語数と各単語の文字数を表示する Cプログラムを書きなさい。単語の区切りは半角スペースのみとする。 但し、単語数の上限は30、1単語数の最大の文字数は20と仮定する。 【実行例】 文を入力してください: This is an apple 合計4単語です。 各文字数は This:4文字 is:2文字 an:2文字 apple:5文字 [3] 環境 [3.1] OS:Windows XP SP2 Pro [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:2006年12月01日19:00 [5] その他の制限: 文字の入力には gets 関数を使うこと 関数の中身はブラケット演算子なしでポインターだけで書く よろしくお願いいたします。
543 :
a :2006/11/28(火) 14:23:34
整数値を要素にもつk 行m 列行列A とm 行n 列行列B を定義し,それらの要素をキーボー ドから入力させ,C = A×B を計算して画面表示するプログラムを作成しなさい.ただし,k,m, n については,k≠m,m≠n,k≠n,k≧2,m≧2,n≧2 を満たす任意の値を設定してよい
[1] 授業単元:Cプログラミング演習 [2] 問題文:疑点法を用いてf(x)=x-cosx=0の近似解を小数点以下15桁まで求めるCプログラム 擬点法とは f(a1)f(b1)<0 となるような近似解の組 x=a1 x=b1 から出発して、漸化式 bk*f(ak)− ak*f(bk) xk=―――――――――― (k=1,2,3,・・・) f(ak) − f(bk) (ak,xk) if f(ak)*f(xk)<0 (ak+1,bk+1)= (xk,bk) otherwise により、次々とより良い近似解x=xk(k=1,2,3・・) をもとめていこうとするものです。このプログラムは f(xk)=0 or x1,x2,x3・・が十分に収束したと判断できる 時点で終了する今回の出発点は a1=0,b1=1とします [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: Cのみ [4] 期限: 2006年12月08日12:00まで [5] その他の制限: int型、double型、数学的関数を使う。constは使わない。 for,do-while構文習得。増分・減分演算子習得。 最初に#define f(x) ((x)-cos(x)) #define EPSILON (1e-15) を使う Simpsonの公式は習った。
545 :
544 :2006/11/28(火) 15:27:46
皆さん宜しくお願いします。
>>544 VCC++だと#define EPSILON (1e-15)が解決できなかったので
代わりにfloat.hのDBL_EPSILON使ってある
気に入らなかったら自分で直して
#include <stdio.h>
#include <math.h>
#include <float.h>
#define f(x) ((x)-cos(x))
void main(){
double x=1,xBefore=0,a=0,b=1,fa=f(a),fb=f(b);
while(f(x)!=0&&fabs(x-xBefore)>DBL_EPSILON){
xBefore=x;
x=(b*fa-a*fb)/(fa-fb);
if(fa*f(x)<0) {
b=x;
fb=f(b);
}
else {
a=x;
fa=f(a);
}
}
printf("x=%.15fの時f(x)=%.15f\n",x,f(x));
}
547 :
546 :2006/11/28(火) 16:50:06
改良版 #include <stdio.h> #include <math.h> #include <float.h> #define f(x) ((x)-cos(x)) void main(){ double x=1,xBefore=0,a=0,b=1,fa=f(a),fb=f(b),fx=f(x); while(fx!=0&&fabs(x-xBefore)>DBL_EPSILON){ xBefore=x; x=(b*fa-a*fb)/(fa-fb); fx=f(x); if(fa*fx<0) { b=x; fb=fx; } else { a=x; fa=fx; } } printf("x=%.15fの時f(x)=%.15f\n",x,f(x)); }
548 :
デフォルトの名無しさん :2006/11/28(火) 19:20:49
[1] 授業単元: データ構造とアルゴリズム [2] 問題文(含コード&リンク): ファイルを読み込み、各行が逆順に出るようなプログラムを書きなさい。作成したプログラムに対して、空の入力と、作成したプログラム本体のソースコードを入力し、出力結果を報告しなさい。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: mingw-jp [3.3] 言語: C++ [4] 期限: 明日の午後8時(2006年11月29日(水)) [5] その他の制限: 一行の文字数や、行数の制限を行わない。 同じファイルを二回以上オープンしない。但し、メモリに異常が発生した場合は、検知し、確実に異常終了させる。 分かる方、いたらお願いします!!
>メモリに異常が発生した場合は、検知し、確実に異常終了させる そりゃ不可能だ。 仮にメモリ異常が単にmalloc()/new失敗と言う意味に解釈したとしても、 その状況で確実に異常終了できるかどうかは実はOS次第だからな。
[1] 授業単元: コンピュータプログラミング [2] 問題文: 点数をいれるとSABCDを出力するプログラムを作りなさい。ただし 100〜90点 S 89〜80 A 79〜70 B 69〜60 C 59点以下 D とする。以下の実行結果を参考にして考えよ。 ./kadai 70 80 85 1教科目はBです。 2教科目はAです。 3教科目はAです。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラとバージョン: gcc [3.3] 言語:C言語 [4] 期限:11月29日20時まで 当方プログラミング歴2ヶ月で今回の課題がさっぱりわからないので 誰か分かる方がいらっしゃいましたら助力お願いします。
553 :
537 :2006/11/28(火) 20:17:27
あの後もう一度必死に頭使ってみたら、なんとか理解できて課題を完成させることができました。 ありがとうございました
>>551 #include<stdio.h>
const char *hyouka(int value){
if(value>100) return "unknown";
if(value>=90) return "S";
if(value>=80) return "A";
if(value>=70) return "B";
if(value>=60) return "C";
return "D";
}
int main(int argc, char *argv[]){
int i, value;
for(i=1;i<argc;i++){
sscanf(argv[i], "%d", &value);
printf("%d教科目は%sです。\n", i, hyouka(value));
}
return 0;
}
unknownカッコヨス
>>426 お願いできないでしょうか。行列に2次元配列が使われておらず、全く理解できないのです。
期限には間に合いませんがよろしくお願いします。
559 :
デフォルトの名無しさん :2006/11/28(火) 22:11:46
>>548 new()が使われてない場合はこれじゃだめかも。
#include <string>
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
void putReverse(ifstream& infile)
{
string s;
try{
while(!infile.eof()){ getline(infile, s); cout << string(s.rbegin(), s.rend()) << endl;}
}
catch(bad_alloc){
cerr << "メモリ確保失敗";
infile.close();
abort(); //エラーコード返すとかじゃなく、お望み通り異常終了。
}
}
int main(int argc, char* argv[])
{
if(argc != 2){ cerr << "読み込むファイルを一つ指定してください"; return -1;}
ifstream inFile(argv[1]);
if(inFile.fail()){ cerr << "ファイルを開けません"; return -2;}
putReverse(inFile);
return 0;
}
1.教授が問題を作る。 2.模範解答をTAに作るように命令。 3.TAがここで問題を丸投げ。 4.生徒が問題を受け取る。 5.生徒がここで問題を丸投げ。 ← いまここ
(((( ;゚Д゚)))ガクガクブルブル
563 :
デフォルトの名無しさん :2006/11/28(火) 22:29:41
[1] 授業単元: 計算機 [2] 問題文(含コード&リンク):∫ e^x/x dx(x:1→3)の値を台形およびシンプソンの公式により求めよ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 11/30 [5] その他の制限: 等分数は2から倍々と増やしていき、積分値が変化しなくなるまで行うこと。 等分数を最初に設定して計算することは出来たのですが、 制限の>>等分数は2から倍々と増やしていき、積分値が変化しなくなるまで行うこと。 これのやり方が分かりません。 誰か分かる方がいらっしゃいましたらよろしくお願いします。
>>563 なんでだよwww
>等分数を最初に設定して計算することは出来た
ここが一番の山じゃねーか
もう終わったようなもんだろwwwwwwwww
あとはforループで、2^iで分割して、
今の値-前の値の絶対値が十分小さかったら終了でいいじゃん
>>554 質問者じゃないけど、こういうのもアリですかね?
const char* hyouka(int value)
{
switch (value / 10) {
case 10:
case 9:return "S";
case 8:return "A";
case 7:return "B";
case 6:return "C";
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:return "D";
default:return "unknown";
}
}
[1] 授業単元: プログラミングII [2] 問題文(含コード&リンク): 出版社M社で自社のライトノベル・DVD購入者に対し懸賞を行うことになった。 応募券を切り取り、ハガキに貼ってを送ってきた人に対し 10人にオリジナル図書カードを 50人にオリジナルストラップを 100人にオリジナルステッカーをプレゼントすることになった。 公平を期すためにC言語で乱数を用い当選者を決定させたい。 ここで応募してくる人は過去の傾向からみて1000人以下であると考えられる。 ※なおライトノベル、DVD両方の応募券がついている客は DVDのみの応募券、ライトノベルのみの応募券がついているユーザーの2倍の当選確率である。 ※なお、同一人物(同じ名前)での2重当選はありえない。(当選は1人1回である) ※またA君、B君、C君は前回の懸賞で特賞が当たっているため、今回応募があっても当選しない。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Boland [3.3] 言語: C [4] 期限: 2006.12.01 [5] その他の制限: なし よろしくお願いいたします。
[1] 授業単元:C言語入門 [2] 問題文(含コード&リンク): y=sin(2x)×cos(x)について区間0≦x≦π/4での積分値を計算するプログラム を作成せよ。 計算結果として、積分範囲・刻み数・積分結果を出力させること。 刻み数は #define n 20 とする。 πはM_PIとする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 明日の朝10時00分までです。 [5] その他の制限: 特にないです。 よろしくお願い致します。
>>569 問題文そのまま?
なんか色々省略してない?
>>572 A君B君C君をはじけばいいらしいです。
D君以降は適当にDVDのみ、ノベルのみ、両方適当でいいっていってました
>>574 とくに省略はしていません
>>571 じゃぁ先生にこんな問題文じゃ解けないって突き返せ
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
以下は入力された整数値の大小に基づいて2分木を生成するものである。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3050.txt すべてのノードの左の子と右の子を交換する関数void ReverseTree(struct BTREE *ptr)
を再帰呼び出しによって実現せよ。この手続き後にTraverseTreeを実行すると数値は降順に表示されるはずである。
また、指定データと同じ値のデータを持つノードの個数を出力するint CountData(struct BTREE *ptr,int searchdata)を
再帰呼び出しによって完成させよ。
Reverse Tree
[3] 環境
[3.1] OS: Windows Xp
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 明日夜
[5] その他の制限:
お願いします!
>>573 台形公式でよければ
>>212 を少し変更すればおk
return 4/(1+x*x);
↓
return sin(2*x)*cos(x);
printf("%f\n", f_integral(0, 1, 1000));
↓
printf("%f<x<%f %d %f\n", 0., M_PI/4, n, f_integral(0., M_PI/4, n));
>>577 void ReverseTree(struct BTREE *ptr) {
struct BTREE *temp;
if (ptr == NULL) return;
ReverseTree(ptr->left);
ReverseTree(ptr->right);
temp = ptr->left;
ptr->left = ptr->right;
ptr->right = temp;
return;
}
int CountData(struct BTREE *ptr, int searchdata) {
if (ptr == NULL) return 0;
return CountData(ptr->left, searchdata) + CountData(ptr->right, searchdata) + (ptr->data == searchdata);
}
>>564 ありがとうございます。
for文の中を前の値==今の値とかやって悩んでましたw
>>573 #include <math.h>
#include <stdio.h>
#define n 20
double f(double x) {
return sin(2 * x) * cos(x);
}
int main(void) {
int i;
double a = 0., b = M_PI / 4, h = (b - a) / n, s = 0.;
for (i = 1; i < n; ++i) s += f(a + i * h);
s *= 2;
s += f(0) + f(n);
s *= h / 2;
printf("%f", s);
return 0;
}
>>569 応募者が賞品の数より少ない場合、
1.A君、B君、C君でも当選する?
2.賞品の当選の優先順位は決まってる?
ちなみに全員ハズレにするのもアリ?
>>582 お前、ふだんからいい仕事してるんだろうな
>>548 #include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
int main(int argc, char* argv[]) {
if (argc != 2) return 1;
std::ifstream ifs(argv[1]);
std::string line;
while (std::getline(ifs, line)) {
std::copy(line.rbegin(), line.rend(), std::ostream_iterator<char>(std::cout));
std::cout << std::endl;
}
return 0;
}
↑と↓を実行して、求める結果が得られた方を提出せよ。
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <list>
#include <string>
int main(int argc, char* argv[]) {
if (argc != 2) return 1;
std::ifstream ifs(argv[1]);
std::string line;
std::list<std::string> list;
while (std::getline(ifs, line)) list.push_back(line);
std::copy(list.rbegin(), list.rend(), std::ostream_iterator<std::string>(std::cout, "\n"));
return 0;
}
585 :
573 :2006/11/29(水) 00:22:07
>>578 ありがとうございます。
講義で台形公式の話をしていたので、台形が公式で十分というか台形公式の
方が良いです。
ただ、エラーが出てコンパイルできません。
>>581 ありがとうございます。
しかし、値が1つしか表示されません。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): int型で有効長lenの配列arrに対し、要素を巡回的に後にずらす関数 arr_cycle(arr, len) を作成する。 例えば、 arr[] = {0, 1, 2, 3} のとき、この関数によって arr[] = {3, 0, 1, 2} と更新される。最後の要素を先頭に挿入すればよい。 [3] 環境 [3.1] OS: windows XP [3.2] コンパイラ名とバージョン:bcc32 [3.3] 言語: C言語 [4] 期限: 明日昼12時 [5] その他の制限: 授業で配列に入ったばかり。
588 :
587 :2006/11/29(水) 00:28:40
日付変わってるのに気がつきませんでした。 11月29日昼12時まででお願い致します。
589 :
585 :2006/11/29(水) 00:31:22
申し訳ないです。
double f_integral(double a, double b, long n)
の部分に構文エラーが4つあります。
')' が '定数' の前にありません。
'{' が '定数' の前にありません。
'<不明>'
')'
です。
#define n 20
を追加したからでしょうか?
>>578 さんが教えて下さった
return 4/(1+x*x);
↓
return sin(2*x)*cos(x);
と
printf("%f\n", f_integral(0, 1, 1000));
↓
printf("%f<x<%f %d %f\n", 0., M_PI/4, n, f_integral(0., M_PI/4, n));
以外に何を変更して良いか解らなくて。
>>589 課題
・nが変数として使われてるのに#define n 20なんかしたらどうなるか考えてみる
>>582 >>応募者が賞品の数より少ない場合、
>>1.A君、B君、C君でも当選する?
当選しません
>>2.賞品の当選の優先順位は決まってる?
決まっていません
>>ちなみに全員ハズレにするのもアリ?
アリです
よろしくお願いいたします。
>>591 #include<stdio.h>
int main(void){
printf("当選者ナシ\n");
return 0;
}
593 :
589 :2006/11/29(水) 00:51:52
>>590 あ、確かに変数として使われてますね。
そのエラーは納得できたのですが、講義では数値積分法には台形公式による
方法があります、と言っていただけで、具体的にどのようなものなのか
教わってないので、
>>578 さんが教えて下さったプログラム(
>>212 のプロ
グラム)の意味が全く解らなくて…。
>>593 そのエラー直して解けたんならイインジャマイカと言ってみるt。
597 :
581 :2006/11/29(水) 00:57:25
598 :
593 :2006/11/29(水) 01:11:41
>>594 あ、詳しく説明されてますね。課題が完成しても、これからも使いそうなの
で、そこで少し勉強しようと思います。ありがとうございます。
>>595 >>581 さんのも台形公式だったのですか。
>>596 まだ、完成してないです。
>>597 いえいえ。ありがとうございます。
#include<stdio.h>
#include <math.h>
#define M_PI 3.14
double f(double x) {
return sin(2*x)*cos(x); }
double f_integral(double a, double b, long n) {
double h, ai;
double ret=0.0;
long i=20; h=(b-a)/n;
for(i=0;i<=n;i++) {
ai=a+i*h; ret+=f(ai); }
ret-=(f(a)+f(b))/2; ret*=h;
return ret; }
int main(void) {
printf("%f<x<%f %d %f\n", 0., M_PI/4, n, f_integral(0., M_PI/4, n));
return 0; }
修正してみて、コンパイルしたらメイン関数の中でnが定義されてません、
と表示されたので、メイン関数で
int n;
を追加したら、コンパイルは通ったのですが一つしか表示されません。
これは、for文で20回表示するようにしたら完成、ということなのでしょうか?
599 :
581 :2006/11/29(水) 01:22:36
>>573 やり直し。台形公式。
#include <math.h>
#include <stdio.h>
#define n 20
double f(double x) {return sin(2 * x) * cos(x);}
double trapezoidal(double a, double b, int d) {
double s = 0., h = (b - a) / d; int i;
for (i = 1; i < d; ++i) s += f(a + i * h);
s *= 2; s += f(a) + f(b); s *= h / 2;
return s;
}
int main(void) {
printf("積分範囲:%f...%f, 刻み数:%d, 積分結果:%f\n", 0., M_PI / 4, n, trapezoidal(0, M_PI / 4, n));
return 0;
}
>>587 #include <stdio.h>
typedef int T;
void swap(T* x, T* y) {T temp = *x; *x = *y; *y = temp;}
void arr_cycle(T* arr, unsigned int len) {
unsigned int n = 1;
T *first, *last;
n = len - n % len;
for(first = arr, last = arr + n; ; ) if (first == last || first == --last) break; else swap(first++, last);
for(first = arr + n, last = arr + len; ; ) if (first == last || first == --last) break; else swap(first++, last);
for(first = arr, last = arr + len; ; ) if (first == last || first == --last) break; else swap(first++, last);
}
void print_array(int* t, unsigned int n) {
unsigned int i;
for(i = 0; i < n; i++) printf("%d", t[i]);
printf("\n");
}
int main(void) {
int arr[] = {0,1,2,3};
arr_cycle(arr, sizeof(arr) / sizeof(arr[0]));
print_array(arr, sizeof(arr) / sizeof(arr[0]));
return 0;
}
601 :
598 :2006/11/29(水) 01:37:08
602 :
587 :2006/11/29(水) 01:50:03
>>594 Sleipnir利用者なんかは本当に一部機能を制限されてるからな
知らずにGoogleフル機能だと思ってたら泣ける
>>587 void arr_cycle(int *arr, int len)
{
int i, temp;
temp = a[len-1];
for(i=len-1;i>0;i--) arr[i] = arr[i-1];
a[0] = temp:
}
[1] 授業単元:プログラミング [2] 問題文:0から9999までの整数をキーボードから入力し、それが何桁であるかを 表示するプログラムを書く。 [3] 環境 [3.1] OS:WindowsXP [3.2] lcc [3.3] 言語:C [4] 期限:2006年11月29日18:00まで どうかよろしくお願いします。
>>605 #include<stdio.h>
#include<math.h>
void main(){
int x;
scanf("%d",&x);
printf("%d桁\n",(int)log10(x)+1);
}
>605 #include <stdio.h> int main(void) { int i, n; scanf("%d", &n); for(i=0; n; i++, n/=10); printf("%d桁", i); return 0; }
608 :
デフォルトの名無しさん :2006/11/29(水) 08:27:55
>>607 printf("%d桁\n", n); の間違い?
あとn/=10だと一桁少なく出るのでは。
609 :
544 :2006/11/29(水) 08:48:54
>>546 ありがとうございます。今日、改良したものを試して
みます。
610 :
607 :2006/11/29(水) 08:56:11
>>608 理解できないなら、せめて実行してから文句つけてくれ。
612 :
デフォルトの名無しさん :2006/11/29(水) 10:21:34
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3051.txt この整数値の昇順リストを作成するプログラムを、指定データ(下記deletedata)と同じデータを持つセルをすべて
消去する関数void DeleteAlist(struct LIST **ptr, int deletedata)を作成せよ。
指定データを持つセルの先頭のものを消去する関数を参考にせよ
void Deletelist(struct LIST **ptr, int deletedata){
if((*ptr)==NULL){
printf("no such data \n");
}else if((*ptr)->data == deletedata){
struct LIST *tmp;
printf("data found\n");
tmp=(*ptr)->nextptr;
free(*ptr);
*ptr=tmp;
}else DeleteList(&((*ptr)->nextptr),deletedata);
}
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 今日夜
[5] その他の制限:
お願いします。。
これ実際にやったら、詐欺っぽいよなぁ。 >>>応募者が賞品の数より少ない場合、 >>>1.A君、B君、C君でも当選する? >当選しません
614 :
605 :2006/11/29(水) 11:08:49
>>606 ,607
助かりました、本当にありがとうございます。
615 :
デフォルトの名無しさん :2006/11/29(水) 11:14:22
>>612 コンパイルも通してねぇけど
void DeleteAlist( struct LIST** ppList, int iDelKey )
{
LIST** ppCur;
LIST* pTmp;
ppCur = ppList;
while( *ppCur ) {
if( (*ppCur)->data == iDelKey ) {
pTmp = (*ppCur)->nextptr;
free( (void*)*ppCur );
*ppCur = pTmp;
}
else {
ppCur = &((*ppCur)->nextptr);
}
}
}
616 :
615 :2006/11/29(水) 11:17:12
ごめん。やっぱこっち。 void DeleteAlist( struct LIST** ppList, int iDelKey ) { LIST* pTmp; while( *ppList ) { if( (*ppList)->data == iDelKey ) { pTmp = (*ppList)->nextptr; free( (void*)*ppList ); *ppList = pTmp; } else { ppList = &((*ppList)->nextptr); } } }
617 :
598 :2006/11/29(水) 13:10:53
>>599 もう提出したので良いのですが疑問に思ったので質問です。
刻み数を10とか少し変えただけで積分結果が結構変わりますが
こんなもんなんでしょうか?
気になるならシンプソン法とかもっと精度の良い方法に変えれ
積分なんだから刻み数を減らせば精度がさがるに決まってる。
620 :
617 :2006/11/29(水) 14:30:04
でも刻み数を100000ぐらいにすると積分結果が0.00000001ぐらいになるんです。 これっておかしくないですか?
621 :
デフォルトの名無しさん :2006/11/29(水) 14:53:08
整数値を要素にもつk 行m 列行列A とm 行n 列行列B を定義し,それらの要素をキーボー ドから入力させ,C = A×B を計算して画面表示するプログラムを作成しなさい.ただし,k,m, n については,k≠m,m≠n,k≠n,k≧2,m≧2,n≧2 を満たす任意の値を設定してよい 分かる方、よろしくお願いします。
>>523 はズレてないだろ
間違ってるのは>521だから
626 :
デフォルトの名無しさん :2006/11/29(水) 16:20:16
キーボードから1行の文章とキーワードを入力し、キーワードが文章中に含まれているかどうかを 調べるプログラムを作成せよ。1行の文章中にキーワードが含まれているときには、その位置を表示します。 例えば、キーワードが"calculus"のとき、次のように表示します。 The development of calculus is a good example. ^ また、キーワードが含まれていない場合には、"not found"を表示します。 これをC言語でプログラミングってどうやるんですか? 三日かけてもわかりませんでした
>>626 関数の使い方の授業なら
strstr() (#include <string.h>)
を使う。
アルゴリズムの授業ならBM法でも実装しろ
[2]キーボードから1行の文章とキーワードを入力し、キーワードが文章中に含まれているかどうかを 調べるプログラムを作成せよ。1行の文章中にキーワードが含まれているときには、その位置を表示します。 例えば、キーワードが"calculus"のとき、次のように表示します。 The development of calculus is a good example. ^ また、キーワードが含まれていない場合には、"not found"を表示します。 [3]C言語(emacs) [4]2006年11月30日 [5]ポインターまで習ってます
632 :
629 :2006/11/29(水) 17:23:45
まだif for while文 1、2次配列、文字列、ポインターしかならってないんですけどそれだけでできませんか?
>>629 #include <stdio.h>
int __________(char *buf,char *w)
{
int i,c;
for (c=0;*buf != '\0';buf++,c++){
for (i=0;*(buf + i) == *(w + i);i++){
if (*(w + i + 1) == '\0'){
return c;
}
}
}
return -1;
}
int main(void)
{
char buf[256],word[64];
int i,j;
gets(buf);
gets(word);
if ((i = __________(buf,word)) > -1){
for (j=0;j < i;j++){
putchar(' ');
}
printf("^\n");
}else{
printf("not found.\n");
}
return 0;
}
[1] プログラミング言語C [2] テキストファイルに書いた英文を読み込み、単語の長さを調べてその頻度を調べるプログラム を作る。ただし空白、タブ、改行は文字列に含まず、ピリオド、コンマは0文字とする。 (20文字以上は1まとめとする) [例] 0文字 1文字 2文字 … 20文字以上 3 4 6 0 [3] 環境:Windows XP 言語:C [4] 期限: ([2006年11月30日9:00まで] [5] if for while文 1、2次配列位しか習ってないです。それ以外も使っていいことに なってますがまだ初心者なのでできるだけ簡単なものにしていただけると助かります。
635 :
629 :2006/11/29(水) 17:58:45
>>634 #include<stdio.h>
#include<ctype.h>
int main(void){int c,i,j=0;int res[21];
for(i=0;i<21;i++){res[i]=0;}
while((c=getchar())!=EOF){if(c=='.'||c==','){res[0]++;j=0;}
else{if(j==0){if(isalpha(c)){j=1;}else;}else{if(isalpha(c)){j++;}
else {if (j<20){res[j]++;} else {res[20]++;}j=0;}}}}
for(i=0;i<21;i++){printf("%-2d文字:%-4d回\n",i,res[i]);}
return 0;}
637 :
デフォルトの名無しさん :2006/11/29(水) 18:21:53
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):jinkou.txtのデータを用いる。キーボードで範囲を入力し、その範囲内の人口の都道府県名を出力するプログラムをかけ。 jinkou.txtは 北海道 5659 青森 1462 岩手 1402 : 沖縄 1349 となっています。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: lcc [3.3] 言語: C
>>637 県名と数字を区切っているものは何?
とかこういうやりとりをするのがめんどくさいからjinkou.txtどこかにうぷれカス
639 :
デフォルトの名無しさん :2006/11/29(水) 18:52:42
[1] 授業単元: プログラミング [2] 問題文: 一次配列(要素はint型、要素数は30)に格納されている要素を値の小さい順に並べ替える。 配列の初期値は以下のものを使う。 {636, 80, 246, 766, 881, 383, 244, 671, 503, 331, 444, 723, 916, 287, 492, 719, 476, 187, 704, 115, 774, 334, 618, 625, 582, 938, 427, 831, 899, 909} [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:(gcc 3.4 VC 6.0等) [3.3] 言語:C++ [4] 期限:12/1 Fri [5] その他の制限:一応アルゴリズムは指定されていて以下の通りです。 データ構造 ソート対象の配列(要素のデータ型は整数型。要素数は定数N) ソート済み位置(整数型) 現在位置(整数型) 最小値(整数型) 最小値の位置(整数型) アルゴリズム 1. ソート済み位置を、配列先頭の要素番号-1から1ずつ増やしながら、 配列末尾の要素番号-1になるまで以下の処理を繰り返す。 1-1. ソート済み位置+1の位置に格納されている要素を最小値とし、その 値と位置を保存する。 1-2. 現在位置をソート済み位置+2から配列の末尾まで変えながら以下の 処理を繰り返す。 1-2-1. 現在位置の要素が最小値よりも小さいならば、その値と位置 を最小値と最小値の位置に代入する。 1-3. 最小値の要素とソート済み位置+1の要素を交換する。 2. 配列の各要素を表示する。 よろしくお願いします
>>639 つれづれなるままに
#include <stdio.h>
#define N 30
void ssorti(int *buf,int n){int i,j,k,tmp;for(i=0;i<n-1;i++)
{k=i;for(j=i+1;j<n;j++)if(buf[k]>buf[j])k=j;if(k!=i){tmp=buf[i];buf[i]=buf[k];buf[k]=tmp;}}}
int main(){int i;int array[N]=
{636, 80, 246, 766, 881, 383, 244, 671, 503, 331,
444, 723, 916, 287, 492, 719, 476, 187, 704, 115,
774, 334, 618, 625, 582, 938, 427, 831, 899, 909};
ssorti(array,N);for(i=0;i<N;i++)printf("%d ",array[i]);return 0;}
641 :
599 :2006/11/29(水) 19:59:43
>>620 おかしくはなりませんでしたよ?
積分範囲:0.000000...0.785398, 刻み数:10, 積分結果:0.429572
積分範囲:0.000000...0.785398, 刻み数:20, 積分結果:0.430616
積分範囲:0.000000...0.785398, 刻み数:100000, 積分結果:0.430964
Maximaによる結果:integrate(sin(2*x)*cos(x), x, 0, %pi/4);→2/3-sqrt(2)/6==0.43096440627115
642 :
546 :2006/11/29(水) 20:00:44
改良版 #include <stdio.h> #include <math.h> #include <float.h> #define f(x) ((x)-cos(x)) void main(){ double x=1,xBefore=0,a=0,b=1,fa=f(a),fb=f(b),fx=f(x); while(fx!=0&&fabs(x-xBefore)>DBL_EPSILON){ xBefore=x; x=b+(b-a)*fb/(fa-fb); //変更箇所 fx=f(x); if(fa*fx<0) { b=x; fb=fx; } else { a=x; fa=fx; } } printf("x=%.15fの時f(x)=%.15f\n",x,f(x)); }
>>616 ありがとうございます。
動作について解説して頂けると今後のために役に立ちます。お願いできませんか?
[1] 授業単元: プログラミング [2] 問題文: 数字を2つ入力し、総積を計算しなさい。 例) 2と6の場合 2*3*・・・*6 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: VC++2005 [3.3] 言語: C [4] 期限: 出来れば今日中に・・・ 宜しくお願いします。
645 :
634 :2006/11/29(水) 20:35:33
>>636 さん
ありがとうございます。このプログラムなら何をやっているかがなんとか分かるので助かります。
でもこれだと読み込むテキストファイルの指定がないので動かないのですが…
>>645 多分リダイレクトしろって事じゃない?
後、いろいろアレなコードだから(英単語に続いて.や,があると英単語がカウントされない、とか)提出するには気を付けて。
>>644 #include <stdio.h>
void main(){
int a,b,di=1,c=1;
printf("ちんこ\n");
scanf("%d",&a);
printf("まんこ\n");
scanf("%d",&b);
if(a>b) di=-1;
for(int i=a;i*di<=b*di;i+=di) c*=i;
printf("うんこ%d\n",c);
}
648 :
645 :2006/11/29(水) 20:55:42
<<646 アドバイスありがとうございます。,や.の問題も自分でも直せるようもう少し頑張ってみます。
649 :
デフォルトの名無しさん :2006/11/29(水) 21:27:30
650 :
デフォルトの名無しさん :2006/11/29(水) 21:29:29
>>644 #include<stdio.h>
int keisan(int a,int b);
main(){
int num1,num2;
printf("初めの数字を入力してください");
scanf("%d",&num1);
printf("終わりの数字を入力してください");
scanf("%d",&num2);
printf("総積:%d",keisan(num1,num2));
}
int keisan(int a,int b){
int i, ans=a;
for(i=a+1; i<=b; i++){
ans *= i;
}
return ans;
}
651 :
デフォルトの名無しさん :2006/11/29(水) 21:30:50
すいません
>>640 の回答はC++ではないですよね。
C++でお願いできませんか?
652 :
151 :2006/11/29(水) 21:30:59
151をお願いします・・・
653 :
デフォルトの名無しさん :2006/11/29(水) 21:39:44
三つのIPネットワーク N0:192.168.0.0/24 N0:192.168.1.0/24 N0:192.168.3.0/24 があり、二つのルータR1、R2で接続されている。 R1はN0,N3に接続しており、それぞれネットワークインターフェースne0に IPアドレス192.168.0.130、同gifに同192.168.3.1が与えられている。 この時、R2の経路表は例えば以下のように表示できる。 ただし、メトリック(Metric)が1である経路には、 データリンク層を用いて通信可能であることを示すものとする。 Network Destination Netmask Gateway Interface Metric 192.168.0.0 255.255.255.0 192.168.3.1 gif2 2 192.168.1.0 255.255.255.0 192.168.1.66 ep0 1 192.168.3.0 255.255.255.0 192.168.3.2 gif2 1 問1 R1とR2に距離ベクトル型経路制御を導入して動作させることを考える。 R1の経路表を示せ。
>>653 >N0:192.168.0.0/24
>N0:192.168.1.0/24
>N0:192.168.3.0/24
三つともN0なんですか?
>R1はN0,N3に接続しており
N3が未定義です。
あとスレ違いです。
>>651 コンパイルしてみれば分かると思うが、
>>640 はそのままで正しいC++プログラムだ。
俺の趣味でC++風に書き直すとこんな感じ。
#include <algorithm>
#include <iostream>
const int N = 30;
void ssorti(int *buf, int n)
{
for(int i = 0; i < n - 1; i++)
{
int k = i;
for(int j = i + 1; j < n; j++)
if(buf[k] > buf[j])
k = j;
std::swap(buf[i], buf[k]);
}
}
int main()
{
int array[N] = { 636, 80, 246, 766, 881, 383, 244, 671, 503, 331,
444, 723, 916, 287, 492, 719, 476, 187, 704, 115,
774, 334, 618, 625, 582, 938, 427, 831, 899, 909
};
ssorti(array, N);
for(int i = 0; i < N; i++)
std::cout << array[i] << " ";
std::cout << "\n";
}
656 :
620 :2006/11/29(水) 21:52:31
>>641 実際は
for (i = 1; i < d; ++i) {
s += f(a + i * h);
}
s *= 2;
s += f(a) + f(b);
s *= h / 2;
ですよね?
でも、自分は
for (i = 1; i < d; ++i) {
s += f(a + i * h);
s *= 2;
s += f(a) + f(b);
s *= h / 2;
}
としてました。
これが原因だったようです。
自分のミスなのに、おかしい等と文句言って申し訳ありませんでした。
657 :
655 :2006/11/29(水) 21:58:00
あ、ostream_iteratorを使うのを忘れた。 まあ、ループもたまには良いでしょう。
<<634 自分も似たような宿題があるのでやってみましたがうまく動きません。一応プログラム貼りつけとくので もし634さんがプログラムが完成してたら、どこが間違ってるか教えて下さい。 他の方でも分かる方がいらっしゃったらご指導お願いします。 #include <stdio.h> #include <stdlib.h> void main(void){ FILE *fp; int c=0; int d=0; int freg[20]; (fp = fopen("infile.txt", "r")) == NULL; while ((c = getc(fp)) != EOF) { switch (c) { case ' ': freg[d]++; d=0; break; case '\n': break; case '\t': freg[d]++; d=0; break; case ',' : freg[d]++; freg[0]++; d=0; break; case '.' : freg[d]++; freg[0]++; d=0; break; default: d++; }} printf("ファイル名: infile.txt\n"); printf("%d ",freg[20]); fclose(fp); }
少なくともfregは21いるのではないだろうか
661 :
658 :2006/11/29(水) 22:26:42
>>659 言われてみればそうですねort
早速fregは21にして、dが20以上の時はfreg[20]が+1なるように改良してみたんですが
やはり実行すると1245112という意味不明な数字がでるだけです…
もっと根本的なところ間違ってませんかね?
fregの内容が不定のまま操作している。 数を数えたいなら0で初期化するべし。
663 :
599 :2006/11/29(水) 23:23:09
>>656 いや、分かってもらえてよかった。中身を研究して、精進してください。
664 :
656 :2006/11/29(水) 23:25:57
665 :
658 :2006/11/29(水) 23:45:30
>>662 アドバイスありがとうございます。おかげで無事できました。
何か初歩的なこと忘れまくりでしたねort
でも659さんや662さんのおかげで凄く勉強になったと思います。
ほんとにありがとうございました。
666 :
616 :2006/11/29(水) 23:46:08
>>643 ちゃんと動いたかな?
解説しろって言われてもなぁ...当たり前のコードだからなぁ...
お前さんが疑問と思う点を書いてくれれば説明してやれるかも知れん。
そうなんだよな。 回答してる側にとっては当たり前すぎてどうわからんのかわからん場合はよくある。 質問してる側もどこが分からんのか分からんくらいに全体的にわからんのかもしれんが、 今後の役に立てようという気概があるくらいならもうちょっとつっこんだ質問をしてくれないと困ると思う。
669 :
デフォルトの名無しさん :2006/11/30(木) 00:42:46
800+100=1600
イチヂク
この問題何度目だよ…
前スレで3回ぐらい出てたっけ? ここまで来ると釣りにしか思えないな。
>>669 俺の記憶が正しければ君でその問題を丸投げするのは
4人目なんだ
3人目なんかちゃんともう解答済みだと教えてやったのに
「教えてくれるのか教えてくれないのかハッキリしてください」
と逆切れしていたぞ
ひでえ学校だなwww
みんな丸投げしてたら評価さがるだろ 俺のところはクローンがあったら 点数をクローンの数で割るとか言ってたけど 偶然同じになったらどうするのかね ここで見たことある問題あったし
>>668 >636のコードで This is a pen. を入力した時の実行結果
0 文字:1 回
1 文字:1 回
2 文字:1 回
3 文字:0 回
4 文字:1 回
pen(3文字)がカウントされていない。
if(c=='.'||c==','){の後にif(j)res[j<21?j:20]++;が必要。
>>669 void initialize(int account[]) {
int i;
for (i = 0; i < 5; i++) {
account[i] = 0;
}
}
void daily_input(int account[]) {
char* hinmoku[] = {"りんご", "みかん", "イチゴ", "ナシ", "イチジク"};
int i;
for(i = 0; i < 5; i++) {
printf("%s :", hinmoku[i]);
scanf("%d", account + i);
}
}
void daily_output(int account[]) {
char* hinmoku[]={"りんご", "みかん", "イチゴ", "ナシ", "イチジク"};
int i;
for(i = 0; i < 5; i++) {
printf("%s :%d\n", hinmoku[i], account[i]);
}
}
>>677 それだとinputがおかしくね?
という訳で前書いたのを手を入れてコピペ
rand()使ってるから適当に初期化してね
void initialize(int account[]){
for(int i=0;i<=4;i++) account[i]=0;
}
void daily_input(int account[]){
char* hinmoku[]={"りんご","みかん","イチゴ","ナシ","イチジク"};
int tmp;
for(int i=0;i<=4;i++){
printf("%s :",hinmoku[i]);
scanf("%d",&tmp);
account[i]+=tmp;
if(rand()%100==1) account[i]+=700
}
}
void daily_output(int account[]){
char* hinmoku[]={"りんご","みかん","イチゴ","ナシ","イチジク"};
for(int i=0;i<=4;i++){
printf("%s :%d\n",hinmoku[i],account[i]);
}
}
679 :
676 :2006/11/30(木) 01:42:39
>>668 30分待ってみたけど反応が無いな。もう寝ちゃったかな。
他にも指摘すると、if(j==0){の分岐(不要)とか、そもそもリダイレクトの指定じゃ無いだろ、とか。
まだ回答するには早いんじゃないかな。挑戦も大事だけどじっくり基礎を固めて力をつけてからでも遅くないと思うよ。
ガウスの消去法とか、誰がやってもてきとーなの拾ってきても変わらんぜ?
682 :
デフォルトの名無しさん :2006/11/30(木) 04:18:42
>>637 です。
県名と数字はひとつの空白スペースで区切られています。
お願いします。
684 :
638 :2006/11/30(木) 04:42:29
.,Å、 .r-‐i'''''''''''i''''‐-、 o| o! .o i o !o .|\__|`‐´`‐/|__/| |_, ─''''''''''''─ ,、 / _ / \ / ノ( \ ____ / i | ⌒ ● {+++} ● | キングブチキレス !  ̄ ノ 丶_ ノ
一つのスペースと言いながら637の例には複数スペース使ってたり ケンカ売ってるとしか思えない
686 :
629 :2006/11/30(木) 07:45:48
[1]プログラム演習 [2]n×nの正方形状に並んだ点からなる地図があり、各店は陸か水(海、湖、川) のどちらかを表してるとします。地図の周囲を海とみなし、海から縦方向または 横方向に水を現す点を結合してる点を海に表す点に置き換えるプログラムを作成しなさい。 例えば、陸をa、水をb、海をcで表すと左の地図は右の地図に書き換えられます。 bbaaabaaab ccaaacaaac aaaaabaaba aaaaacaaba aaaaaaabaa aaaaaaabaa aaabbbbaaa aaabbbbaaa aaababaaaa aaababaaaa aaabbbaaaa aaabbbaaaa aaaaaabbaa aaaaaaccaa abbbbaabba accccaacca abaabaaabb acaacaaacc aaaabaaaaa aaaacaaaaa [3]C言語(emacs) [4]今日中 [5]for,while,if文 ポインター 文字列 1,2次配列
>>686 for(i=0;i<N;i++) {
if(map[0][i] == 'b')
map[0][i] = 'c';
if(map[N-1][i] == 'b')
map[N-1][i] = 'c';
if(map[i][0] == 'b')
map[i][0] = 'c';
if(map[i][N-1] == 'b')
map[i][N-1] = 'c';
}
while(1) {
int f = 1;
for(i=1;i<N-1;i++) {
for(j=1;j<N-1;j++) {
if(map[i][j] == 'b') {
int k;
int di[4] = {-1, 0, 0, 1};
int dj[4] = {0, -1, 1, 0};
for(k=0;k<4;k++) {
if(map[i+di[k]][j+dj[k]] == 'c') {
map[i][j] = 'c';
f = 0;
}
}
}
}
}
if(f)
break;
}
>>687 二重ポインタさえわかればできるの?
二重ポインタ講座でも始めるか
690 :
デフォルトの名無しさん :2006/11/30(木) 08:56:01
>>687 ひでえな。循環リストじゃないしダミーリストもないので面倒なんだよなー
694 :
デフォルトの名無しさん :2006/11/30(木) 12:05:16
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):整数値を要素にもつ k行m列行列A とm行n列行列B を定義し,それらの要素をキーボー ドから入力させ,C = A×Bを計算して画面表示するプログラムを作成しなさい.ただし,k,m, n については,k≠m,m≠n,k≠n,k≧2,m≧2,n≧2を満たす任意の値を設定してよい. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:12月1日まで [5] その他の制限: なし 授業で触れなかったのでわからなくて・・・よろしくお願いします。
695 :
デフォルトの名無しさん :2006/11/30(木) 12:24:37
>>694 授業で何を触れなかったの?
どこまで習ってるの?
697 :
デフォルトの名無しさん :2006/11/30(木) 12:46:07
>>697 一次元配列はわかってるんだな
それなら簡単だ
k行m列の配列は
int a[k][m];
と宣言して、i行j列へ5を代入したければ
a[i][j] = 5;
一次元配列と扱い方に大きな違いはない
k, m, nは
#define k 2
などと書いておくといい
699 :
デフォルトの名無しさん :2006/11/30(木) 14:34:32
698>> #define k 2 と書いておくとどんなメリットがあるんですか?
そういや昔「k2」ってお笑いコンビが居たな。勝俣ともう一人。 あのカタワレは何処行ったのかね?
[1] 授業単元:Cプログラミング演習 [2] 問題文:多項式f(x)=Cn×Iのn乗+Cn-1×Iの(n-1)乗+...+C1×I +C0×Iの0乗 の次数nと多項式の係数Cn,Cn-1,..,C1,C0を順に読み込み、 変数I=0.0、0.1、0.2,・・、0.9、1.0に対する多項式f(x)の値を計算して見やすい形に 出力するCプログラム [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:Cです [4] 期限:12月3日まで [5] その他の制限:配列の問題です。 for構文を必ず使い、 f(x)=((...((CnI+Cn-1)I+Cn-2)...)I+C1)I+C0 と単純な効率の良いプログラム計算するようなもの。つまり fx←Cn fx←fx*I+Cn-1 というような代入を参考にして考えてみる。
702 :
701 :2006/11/30(木) 14:49:23
すいませんがよろしくお願いします。
>>699 #define k 2
とすると、コンパイル前に自動的にkを2に置き換えてくれる。
int k = 2;
int m = 3;
int a[k][m];
上のように配列の要素数に変数の値を使用すると、コンパイルが通らない可能性があるから、
#defineを使う。
ワロタ
わかってない子の説明は意味がない法則
マジックナンバーの説明かと思ったら斜め上飛んでいった
>>701 #include <stdio.h>
#include <math.h>
#include <stdlib.h>
double func( int iN, double* pCn, double dX )
{
double dRet = 0.0;
int i;
for( i = iN; i >= 0; i-- ) {
if( i )
dRet += ( (*pCn) * pow( dX, (double)i ) );
else
dRet += *pCn;
pCn++;
}
return dRet;
}
// Tobe continue
int main( void ) { int iN, i; double *pCn; double *pTmp; double dX; printf( "N: " ); scanf( "%d", &iN ); if( iN < 1 ) return 0; pCn = (double*)malloc( sizeof( double) * iN ); if( ! pCn ) return 1; pTmp = pCn; for( i = iN; i >= 0; i-- ) { printf( "C%d: ", i ); scanf( "%lf", pTmp ); pTmp++; } printf( "x: f(x)\n" ); for( i = 0; i <= 10; i++ ) { dX = (double)i * 0.1; printf( "%lf: %lf\n", dX, func( iN, pCn, dX ) ); } free( (void*)pCn ); return 0; }
709 :
sage :2006/11/30(木) 16:21:27
[1] 授業単元:プログラミング論 [2] 問題文(含コード&リンク):自身の氏名の漢字の内部コードを16進数、及び2進数で出力せよ [3] 環境 [3.1] OS:WINDOWS [3.2] コンパイラ名とバージョン:Vsual C++ 2005 [3.3] 言語:C++ [4] 期限:2006/12/1(明日),A.M.8:00頃←細かくてすみません [5] その他の制限:整数を2進数に出力すること、文字コードを16進数に出力することはできます。 「氏名の漢字」は漢字であれば何でも構いません。 制限でも触れたように整数を2進数に出力すること、文字コードを16進数に出力することは出来るのですが、同時に行うことが出来ません。 明日のお昼に提出の課題で、家にはギリギリ8時ごろまでいられます。 よろしくお願いいたします。
>>709 続けて処理すれば、「同時」にしなくてもいいんジャマイカ?
>同時に行うことが出来ません。 分けてやればいいだろ 常識的に考えて・・・
>709です。ごめんなさい。あがってました↓ 出力結果に 「○」の16進表現は〜、2進表現は〜。 「×」の16進表現は〜、2進表現は〜。 という風に表示出来たらなって思ってたのですが、諦めて16進と2進、それぞれ別々に表示したほうが作るのも簡単ですよね。 本当に初心者でごめんなさい><
いやだから もういいや
[1] 授業単元: プログラム理論 [2] 問題文:使用される文字列が英大文字26文字のみの場合の文字列探索法(BM法) のプログラム。ただし、英大文字以外の文字がテキストまたはパターンに入力された ときは、再入力を求めること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C よろしくおねがいします。
[1] 授業単元: コンピュータプログラミング [2] 問題文:キーボードから読み込んだ整数n以下の素数をすべて求め、1行に12個数値を表示せよ。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 2006年12月3日まで [5] その他の制限: 制限は特に無いです。 すみません、よろしくお願いします。
716 :
デフォルトの名無しさん :2006/11/30(木) 17:43:29
>>715 >1行に12個数値を表示せよ。
1行に12個ずつ って意味だよな?
>>716 はい、そういうことです。よろしくお願いします。
>>715 #include <stdio.h>
int isprime(int value){
int i;
if(value%2==0) return (value==2);
for(i=3;value/i>=i;i+=2)
if(value%i==0)
return 0;
return 1;
}
int main(void){
int i, n;
int prime_count=0;
printf("Input positive number :");
scanf("%d", &n);
for(i=2;i<n;i++){
if(isprime(i)){
printf(" %d", i);
prime_count++;
if(prime_count%12==0)
printf("\n");
}
}
return 0;
}
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3051.txt この整数値の昇順リストを作成するプログラムを、指定データ(下記deletedata)と同じデータを持つセルをすべて
消去し、消去するデータがあったときはdata foundと1回表示し、ないときにはno such data
と1回表示するvoid DeleteAlist(struct LIST **ptr, int deletedata)を再帰を用いることによって作成せよ。
指定データを持つセルの先頭のものを消去する関数を参考にせよ。
void Deletelist(struct LIST **ptr, int deletedata){
if((*ptr)==NULL){
printf("no such data \n");
}else if((*ptr)->data == deletedata){
struct LIST *tmp;
printf("data found\n");
tmp=(*ptr)->nextptr;
free(*ptr);
*ptr=tmp;
}else DeleteList(&((*ptr)->nextptr),deletedata);
}
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 明日
[5] その他の制限:
昨日も聞いたんですが、
条件が追加され、出題されました。お願いします。。
720 :
デフォルトの名無しさん :2006/11/30(木) 20:16:25
>>719 以下と差し替えて DeleteAlist() の戻り値が0なら no such data, 1以上なら data found と表示すればよろし
int DeleteAlist( struct LIST** ppList, int iDelKey )
{
LIST* pTmp;
int iDelNum = 0;
while( *ppList ) {
if( (*ppList)->data == iDelKey ) {
pTmp = (*ppList)->nextptr;
free( (void*)*ppList );
*ppList = pTmp;
iDelNum++;
}
else {
ppList = &((*ppList)->nextptr);
}
}
return iDelNum;
}
722 :
デフォルトの名無しさん :2006/11/30(木) 21:35:55
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
整数 ID の二分木を表示する関数(簡単なものがスライドにあるのでそのまま打ち込んでも良いが、もっと見やすく拡張したほうが良い)と
二分探査木を作る関数(スライドにもあるが改変しても良い)を作り、二分探査木に以下のようなデータを入力した結果を表示せよ。
データは並んでいる順に入力すること。
(ア)1,2,3,4,5,6,7
(イ)1,7,2,6,3,5,4
(ウ)4,2,1,6,3,5,7
ソース
ttp://www.geocities.jp/c_prog2011/tree_1.txt [3] 環境
[3.1] OS: Windows XP Home Edition SP2
[3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2005 Academic Edition
[3.3] 言語: C
[4] 期限: 2006年12月6日23:59まで
[5] その他の制限: 線形リストの基本は学んだが二分木は初めてです。
よろしくお願いします。
>>721 int DeleteAlist( struct LIST** ppList, int iDelKey )
{
LIST* pTmp;
int iDelNum = 0;
if( ppList == NULL )
return 0;
while( *ppList ) {
if( (*ppList)->data == iDelKey ) {
pTmp = (*ppList)->nextptr;
free( (void*)*ppList );
*ppList = pTmp;
iDelNum++;
}
else {
ppList = &((*ppList)->nextptr);
}
}
DeleteAlist(NULL, int iDelKey);
return iDelNum;
}
>>725 あ、ごめん
下から三行目のintいらない
コンパイルできないならエラーメッセージくらい書いた方がいいよ
>>726 int 消しました。まだエラーでます
エラー E2451 F:\borland\bcc55\list\list.c 11: 未定義のシンボル LIST(関数 DeleteAlist )
エラー E2451 F:\borland\bcc55\list\list.c 11: 未定義のシンボル pTmp(関数 DeleteAlist )
エラー E2140 F:\borland\bcc55\list\list.c 12: ここでは宣言はできない(関数 DeleteAlist )
だそうです
11行目と12行目はこうなってます
LIST* pTmp;
int iDelNum = 0;
struct
>>727 struct LIST* pTmp;
自分でコンパイルしてないから何とも言えんけど
731 :
720 :2006/11/30(木) 22:40:45
すまん。再帰の部分見落としてたわ。 まぁ、回答してくれた人がいるみたいなので良かったな。 だけど、これを再帰で書いた奴が居たら書き直させるわ。 再帰にして解り易くなる訳でもねぇしデメリットしかねぇじゃん。 ちゅことで俺なら、『こんなん再帰で書かせるなボケ』と講師に言うかな。
再帰の方がわかりやすいという気持ちも理解できる。 結局は慣れの問題じゃないだろうか。
[1] 授業単元:データとアルゴリズム [2] 問題文(含コード&リンク): ビットベクトルによる集合表現を用いて、2つ の集合に対する要素の追加・削除・和集合、積集合、差集合を求めるプログラム を作れ。 [3] 環境 [3.1] OS: Windows Xp [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 明日 [5] その他の制限: なし よろしくお願いします。
734 :
701 :2006/11/30(木) 23:46:07
>>707 すいません
func、#include <stdlib.h>、pow
は習っていないので、これを使わないC言語
をお願いします。
わからない→教科書調べる→習っていなくても使えそうなのがあったら使う なんら問題ないじゃないか
問題ないどころか評価があがるかもしれないぞ!
習ってないのを使えば講師の心情を悪くする
「てめぇーなにおれのおしえてねーもんつかってんだよぉぅああん?」
と
>>701 の心境をエスパー
-lmつけないでコンパイルしたら実行時エラーが出るんです><; と見たがどうか?
>>733 阪大の授業より抜粋
コンピュータ基礎&基礎演習
ttp://www3.sys.es.osaka-u.ac.jp/iwai/cs/ /* 和集合 */
int Union(int A, int B) {
return A | B;
}
/* 積集合 */
int Intersection(int A, int B) {
return A & B;
}
/* 差集合 */
int Difference(int A, int B) {
return A & ~B;
}
/* 追加 */
int insert(int set, int atom) {
set |= (1L << (atom - 1));
return set;
}
/* 削除 */
int erase(int set, int atom) {
set &= ~(1L << (atom - 1));
return set;
}
742 :
707 :2006/12/01(金) 01:11:52
>>734 func は単なる関数の名前だ。この先も習う事は無いだろう。
ちゅかお前は文法も習ってないのかと小一時間....
pow が使えないなら
double poorPow( double x, int y )
{
double dRet = 1.0;
int i;
for( i = 0; i < y; i++ )
dRet *= x;
return dRet;
}
を func() の前に入れて
pow( dX, (double)i ) を poorPow( dX, i ) に直せ。
#include <math.h> は不要になる。
続く
743 :
707 :2006/12/01(金) 01:15:42
続き
<stdlib.h> を使いたくないなら
>>708 を以下の様に修正。
double *pCn; を
double aCn[256];
double *pCn = aCn;
に直す。
pCn = (double*)malloc(... と次の行を削除。
free(... の行を削除。
これで #include <stdlib.h> も不要となる。
>>707 は問題を読み直すべき
>>701 #include <stdio.h>
int main(void)
{
int i,j,n;
double x,fx;
double c[11];
printf("次数 : "); scanf("%d",&n);
if(n<0 || n>10){
printf("入力できる次数は0から10まで\n");
return 0;
}
for(i=n; i>=0; i--){
printf("C%d : ",i); scanf("%lf",&c[i]);
}
for(j=1; j<=10; j++){
x = j/10.0;
fx = c[n];
for(i=n-1; i>=0; i--){
fx = fx*x+c[i];
}
printf("f(%.1f) = %f\n",x,fx);
}
return 0;
}
再帰するとすぐオーバーフローを起こすMSXを使ってた俺は 再帰恐怖症
748 :
707 :2006/12/01(金) 02:30:56
>>744 確かにそっちの方が模範解答だわな。
問題ちゃんと読んで無いのも事実だし。
でもプログラムなんて同じ答えが出りゃいいじゃん...
>>748 フッ
懸命になってようやく解いた解答を一言の元に否定されて
傷ついてやがんの
下手糞なコードを書くのは、まぁ初心者だろうから仕方ないが、 同じ答えが出ればいいだろと言って技術を向上させる意思が皆無なのは救いようがないな
何が上手なコードで何が下手なコードなのか最近わからなくなってきたよ ホーナー法なんて常識だろと思ってたんだがこのスレでは知らない人が二人ほどいたようだった。 ただコードの実行速度を速くしたいって、もう数値解析とかCGとか暗号の分野だけの気がするんだよな 普通にanx^n+a(n-i)x^(n-1)+…+a0 で計算した方が読みやすくていいコードなんじゃないかって 気がしてきた
宿題丸投げするスレでコードの実行速度がどうこう言っても仕方ないんじゃない?
問いから外れてないかぎりは作る側の勝手だろ
>>753 受け取る側はどんなもの受け取っても自分で作ったものより良ければそれでいいだろうけど
解答する側はそれなりにテーマ決めて臨んでるんじゃないかねえ
756 :
707 :2006/12/01(金) 06:55:13
なんか叩かれてるなぁ...別に良いけど。
>>750 懸命になってとか決め付けるなよ。
3分も掛かってないしコンパイルもしてないんだから。
>>751 下手と言われる筋合いは無いよ。
何らかの式を提示された場合、式の演算内容を f() としてまぁバカ正直に書くのは職業上の習慣だから。
まぁ問題をちゃんと読んで無いのは認めるけどね。
>>753 暇潰しだからなぁ...テーマとか言われても...
>>756 たいした事言われてないのに一々レスするから必死に見える
ほっとけばいいのに
758 :
707 :2006/12/01(金) 07:07:37
付け足し。
>>752 ホーナー法って言うんだ。常識なの?知らんかったよ。
けど、これってただの漸化式処理の事だよね。
応用範囲が狭そうだから名前付ける様なもんかなぁ..
コード速度の話はホーナー法?の方が早いでしょ。
上で書いたけど3分で書いたコードだからあんまり責めないでね。
速度を早くする作業は結構あるよ。画像解析とかだとちょっとした工夫で数10倍早くなるから。.
ううむ・・・(^ω^;)
760 :
デフォルトの名無しさん :2006/12/01(金) 07:32:14
[1] 授業単元: プログラミング入門 [2] 問題文(含コード&リンク): 整数配列dataにnum個のデータが「小さい順に整列 済みで」格納されている。(data[0]〜data[num-1])。目的とする整数(target)を入力したときに、 整数配列内の何番目にあるか出力せよ。(二分探索) [3] 環境 [3.1] OS: (Windows xp) [3.2] コンパイラ名とバージョン: (gcc 3.4) [3.3] 言語: (C) [4] 期限: (12/4/2006 までです。) [5] その他の制限: (二分探索で求め、変数としてlow,high,midをつかっていただけると幸いです)
変数名まで指定するのかよw
言い訳する時間を勉強に費やして技術力上げればいいのにw だからこういう奴は救いようがないんだよ。
>>758 ホーナー法はアルゴリズム論では常識。これを知らないと、
ちゃんとした勉強してきてないんだなあと一発で分かる。
応用範囲が狭そうというのは視野が狭い。
ホーナー法は、+ と * を一般の二項演算としたとき、これらが分配的
すなわち a * (b + c) = (a * b) + (a * c) を満たすなら適用可能。
たとえば + と min、max と min、などでも使える。
これを意識して、プログラムの自動変換の分野では、ホーナー法が
適用できるように、演算子を分配的にする手法などが研究されている。
見つからなかった時の処理について書いていないので 絶対見つかるものとする(unkunk a[num]に数列は格納済み nに探す数字を入れる int low=0,high=num-1,mid=(low+high)/2; while(a[mid]!=n){ if(a[mid]<n) low=mid; else high=mid; mid=(low+high)/2; } printf("%d",mid);
配列のdata[0]って何番目っていうのかな。
0番目
>>765 ああそうか
printf("%d",mid+1);
768 :
デフォルトの名無しさん :2006/12/01(金) 08:32:01
isalhaと isgraph それぞれを使ったらどうなりますか?
0かそれ以外が返ってくる
我ながらひどいなww書き直すか
>>760 mainは検証用だから適当に書き直す
#include <stdio.h>
int nibuntansaku(int n,int data[],int low, int high){
int mid=(low+high)/2;
if(data[mid]==n) return mid;
else if(high-low==1){
if(data[high]==n) return high;
else return -1;
}
else if(data[mid]<n) return nibuntansaku(n,data,mid+1,high);
else return nibuntansaku(n,data,low,high-1);
}
void main(){
int data[]={1,2,3,5,6,7,8,9};
int low=0,high=8,n;
scanf("%d",&n);
int tmp=nibuntansaku(n,data,low,high);
if(tmp!=-1) printf("%d番目\",tmp+1);
else printf("notfound\n");
}
771 :
デフォルトの名無しさん :2006/12/01(金) 09:04:09
やっぱこうしといて ×else if(high-low==1){ ○else if(high-low<=1){
寝ぼけてる時に書くもんじゃないな 失礼した ×else return nibuntansaku(n,data,low,high-1); ○else return nibuntansaku(n,data,low,mid-1);
>>760 適当に作ったから動作保証は無しで。
#include<stdio.h>
int bs(int *data,int target,int low,int high){
int mid=(high+low)/2;
if(high<low)return -1;
if(data[mid]==target)return mid;
else if(target<data[mid])return bs(data,target,low,mid-1);
else return bs(data,target,mid+1,high);}
int main(){
int data[] = {1,2,3,4,6,7,8,9,10,11};
int num = 10,target,ans;
scanf("%d",&target);
ans = bs(data,target,0,num-1);
if(ans!=-1)printf("%d番目\n",ans+1);
else printf("見つかりませんでした\n");return 0;}
775 :
デフォルトの名無しさん :2006/12/01(金) 10:34:28
>>775 struct person s[4];
int x[4];
↓
struct person s[5];
int x[5];
>>775 このソースは冗談だろ?
冗談だと言ってくれ!
>>775 鼻からコーヒーふきだしちゃったじゃないか!!!1111111
どうしてくれるんだ!!!!!!!11
なんだか小学生がプログラミングしたみたいだなぁ。 でも何も分からなかったらこんなもんなのかもね…
配列を信用してないことだけは分かった
-― ̄ ̄ ` ―-- _ だめぽ・・・・・ , ´ ......... . . , ~  ̄" ー _ _/...........::::::::::::::::: : : :/ ,r:::::::::::.:::::::::.:: :::.........` 、 , ´ : ::::::::::::::::::::::::::::::::::::/ /:::::::::::::: : ,ヘ ::::::::::::::::::::::: : ヽ ,/:::;;;;;;;| : ::::::::::::::::::::::::::::::/ /::::::::::::::::::: ● ::::::::::::::::: : : :,/ と,-‐ ´ ̄: ::::::::::::::::::::::::::::::/ /:::::::::::r(:::::::::`'::::::::::::::::::::::く (´__ : : :;;:::::::::::::::::::::::::::/ /:::::::::::`(::::::::: ,ヘ:::::::::::::::::::::: ヽ  ̄ ̄`ヾ_::::::::::::::::::::::し ::::::::::::::::::::::: : ●::::::::::::::::::::::: : : :_> ,_ \:::::::::::::::::::::::::::::::::::::::::::::: `' __:::::::::-‐ ´ (__  ̄~" __ , --‐一~ ̄ ̄ ̄  ̄ ̄ ̄
人数が増えて(ry
これ以上何も言うまい。 駄作ではあるがこれでも持って帰って今まで悪い夢でも見ていたんだろうとみんなで思おうじゃないか。 そう、全て悪い夢だったのさ。 #include <stdio.h> #include <stdlib.h> #define FILENAME_READ "data.txt" #define FILENAME_WRITE "data_new.txt" #define NAMESIZE 40 #define REALLOC_UNIT 10 struct person{int age;float height;char name[NAMESIZE];}; int main(){int i,j,k,n;FILE *fp;struct person *s,tmp; if((fp=fopen(FILENAME_READ,"r"))==NULL){fprintf(stderr,"Fileopen failed (read:"FILENAME_READ").\n");return 1;} n=0;s=(struct person*)malloc(sizeof(struct person)*REALLOC_UNIT); while(fscanf(fp,"%d %f %s",&(s[n].age),&(s[n].height),s[n].name)!=EOF) {n++;if(n%REALLOC_UNIT==0)s=(struct person*)realloc(s,sizeof(struct person)*(n+REALLOC_UNIT));}fclose(fp); for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(s[k].age>s[j].age)k=j;if(k!=i){tmp=s[i];s[i]=s[k];s[k]=tmp;}} for(i=0;i<n;i++)printf("%d %f %s\n",s[i].age,s[i].height,s[i].name); if((fp=fopen(FILENAME_WRITE,"w"))==NULL){fprintf(stderr,"Fileopen failed (write:"FILENAME_WRITE").\n");return 1;} for(i=0;i<n;i++)fprintf(fp,"%d %f %s\n",s[i].age,s[i].height,s[i].name);fclose(fp);return 0;}
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):10個の倍精度実数型データをキーボードから入力し、 それらのデータを小さい順に並べ替えて画面表示するプログラムを作成しなさい。ただし、 次に示すステップを満たす事とし、入力するデータの中に必ず1種類以上の同じ数値を含むこと (1)入力されたデータを1次配列double data[10]に格納する (2)すべての入力が終了した後で、配列を操作してデータの並べ替えを行う (3)データの並べ替えが終了した後で、画面表示を行う [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:12月3日まで [5] その他の制限: なし よろしくお願いします
>>784 #include <stdio.h>
#include <stdlib.h>
#define N 10
int div(double *pa, int l, int r){
int pv = r--;
double tmp;
while(1){
while(pa[l] < pa[pv]){ l++; }
while(pa[r] > pa[pv] && l < r){ r--; }
if(l >= r){ break; }
tmp = pa[l]; pa[l] = pa[r]; pa[r] = tmp;
}
tmp = pa[l]; pa[l] = pa[pv]; pa[pv] = tmp;
return l;
}
int sort(double *pa, int min, int max){
int pv;
if(min >= max){ return 0; }
pv = div(pa, min, max);
sort(pa, min, pv - 1); sort(pa, pv + 1, max);
return 1;
}
int main(void){
double data[N];
int i;
for(i = 0; i < N; ++i){ printf("num%d... ", i + 1); scanf("%lf", &data[i]); }
sort(data, 0, N - 1);
for(i = 0; i < N; ++i){ printf("%lf ", data[i]); }
return 0;
}
786 :
783 :2006/12/01(金) 13:07:03
788 :
714 :2006/12/01(金) 14:00:52
あの〜〜 完全にスルーされているのですが・・・・・・ よろしくおねがいします。
789 :
デフォルトの名無しさん :2006/12/01(金) 14:09:44
>>739 それは無いだろ。
実際には屑揃いの中に割とマシな奴が居ると見て貰える。
>>789 だから、教わるほうが屑なら教えるほうも屑という設定を勝手に作って
>>701 の心境をエスパーするという冗談なのさ。
>>788 そりゃ締め切り書かなきゃスルーされる確率も上がるだろ
常識的に考えて…
また解答側は全ての問題に答える義務があるわけではない
つまらなそうと思えば当然スルーされる
BM法 cでググれば答えがいくらでも出てくるものをわざわざ
やるのはめんどくさいんだよ
>>789 割とマシだと思われてたのに、次の授業では宿題でやったことと同じ事が出来なかったら
悲惨じゃん
やらないのならイチイチ文句言うな
794 :
752 :2006/12/01(金) 16:14:35
>>754 ,758
別にホーナー法使ってないプログラムにケチをつけたわけじゃないよ
俺自身も752に書いてるようにホーナー法とか最適化手法なんて
もうバッドノウハウなのかなあと思いかけてるくらいだし
ホーナー法使ったプログラムを書いたらホーナー法知らない人にケチをつけられたってだけ
>>763 なるほど 勉強になったわ
トンクス
つまりアレか 片方が必死なのかと思ったらもう一方も必死なんだな
796 :
デフォルトの名無しさん :2006/12/01(金) 18:53:51
1] 授業単元:Cプログラミング演習 [2] 問題文: 以下の要求(1)〜(6)を満たすクイックソートのプログラムを実現しなさい. (1)軸要素の選び方については,以下の3方法が利用できるようにすること. (a) ランダムに一つを選ぶ. (b) データの先頭,最後,真中の位置の3要素の中央値を選ぶ. (c) データの先頭から見て最初に得られた2つの異なる値の大きいほうをとる. (2)軸要素で分割した部分配列のサイズ(要素数)が小さくなった場合には, 基本的なソート方法を用いて並び替えること. (3)プログラム終了時にデータ総数と比較回数を表示すること. また,分割の回数および基本的ソート方法が用いられた回数も表示すること. いずれも「分かりやすく」表示するように工夫すること. (5)プログラム実行は,次のような引数付きで行えること. (ここでは,プログラムファイル名をquick81.cとし, これをコンパイルしてquick81という実行形式ファイルを作成したとする.) % quick81 inputfile outputfile pivot_selection basic_sort small_number debug_mode inputfile : ソートするデータが入ったファイルの名前. outputfile : ソート後のデータを出力するファイルの名前 pivot_selection : a,b,c のいずれかの文字で上の軸要素の選び方に対応する. basic_sort : b,s,i のいずれかの文字.それぞれ,バブル,選択,挿入ソートに 相当する.分割した部分配列のサイズが小さくなった場合に用いるソート方法を設定する. small_number : 正の整数.この数字より部分配列のサイズが小さくなったら,上で指定した基本的なソート方法を用いる. debug_mode : vあるいはnの文字。vの場合は,データの分割の仕方が分かりやすいように、軸要素とそれにより分割された部分配列のサイズを 逐次出力させるようにすること. n の場合は上の出力はしない. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:12月3日
797 :
デフォルトの名無しさん :2006/12/01(金) 19:05:02
[1] 授業単元:プログラミング基礎 [2] 2 3 1 2 1 1 2 2 のような正方行列のデータを読み込んで上の行列をA、下の行列をBとしてA*BとA+Bを求めよ。 [3] 環境 [3.1] Linux [3.2] gcc [3.3] C [4] 期限: 12/2 [5] mallocを用いる事。今回のデータは2行2列ですが、行列のサイズはどの数字でも対応できるものでお願いします。
799 :
デフォルトの名無しさん :2006/12/01(金) 19:19:20
inputfile : ソートするデータが入ったファイルの名前. ファイル中のデータの並べ方は問わない.データ数は1000個です outputfile : ソート後のデータを出力するファイルの名前 ファイル中のデータの並べ方は,inputfileと同じにすること. pivot_selection : a,b,c のいずれかの文字 上の軸要素の選び方に対応する. basic_sort : b,s,i のいずれかの文字.それぞれ,バブル,選択,挿入ソートに 相当する.分割した部分配列のサイズが小さくなった場合に用いるソート方法を 設定する. small_number : 正の整数.この数字より部分配列のサイズが小さくなったら, 上で指定した基本的なソート方法を用いる. debug_mode : v あるいは n の文字 vの場合は,データの分割の仕方が分かりやすいように, 軸要素とそれにより分割された部分配列のサイズを 逐次出力させるようにすること. n の場合は上の出力はしない.
>797 //mallocでの正方行列の確保 int i; int **p; p = (int **)malloc(n*sizeof(int *)); for(i=0; i<n; i++) p[i] = (int *)malloc(n*sizeof(int)); //和 int i, j; int **a, **b, **c; for(i=0; i<n; i++) { for(j=0; j<n; j++) c[i][j] = a[i][j] + b[i][j]; } //積 int i, j, k; int **a, **b, **c; for(i=0; i<n; i++) { for(j=0; j<n; j++) { c[i][j] = 0; for(k=0; k<n; k++) c[i][j] += a[i][k] * b[k][j]; } } 後は適当になんとかして。
>>799 言い方が悪かった
inputfileの区切り文字は何?
802 :
デフォルトの名無しさん :2006/12/01(金) 20:55:51
区切り文字は空白だと思います
803 :
デフォルトの名無しさん :2006/12/01(金) 21:38:20
大学の講義の[C言語」という時間の課題として {1〜10までの乱数を10個発生させて表示させる。ただし、1度出た数字は除外する。} という課題を出されたのですが、教科書を見ながら解いても 同じ数字が重複して表示されてしまうプログラムになってしまいどうしていいかわかりません。 どなたか手ほどきをおねがいします
>>803 教科書を見ながら解いた結果を貼るか、
>>1 を読んで書き直して丸投げするか
好きな方を選べ
>>803 こんなんじゃねぇ?
int data[10];
int i, cnt = 0;
while( cnt < 10 ) {
data[cnt] = rand() % 10 + 1;
for( i = 0; i < cnt; i++ )
if( data[i] == data[cnt] )
break;
if( cnt == i ) cnt++;
}
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3051.txt この整数値の昇順リストを作成するプログラムを、指定データ(下記deletedata)と同じデータを持つセルをすべて
消去し、消去するデータがあったときはdata foundと1回表示し、ないときにはno such data
と1回表示するvoid DeleteAlist(struct LIST **ptr, int deletedata)を再帰を用いることによって作成せよ。
指定データを持つセルの先頭のものを消去する関数を参考にせよ。
void Deletelist(struct LIST **ptr, int deletedata){
if((*ptr)==NULL){
printf("no such data \n");
}else if((*ptr)->data == deletedata){
struct LIST *tmp;
printf("data found\n");
tmp=(*ptr)->nextptr;
free(*ptr);
*ptr=tmp;
}else DeleteList(&((*ptr)->nextptr),deletedata);
}
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 明日
[5] その他の制限:
昨日も聞いたんですが、
また条件を言われました。void型は変えずに、関数のなかで、deletedataとnosuchdataを表示しないといけないと言われました。
何度もすいませんが、お願いします
>void型は変えずに ?
ソートとリストで腹の中がパンパンだぜ
>>806 return の変わりに条件判定とprintf文を書けば良いだけでないの?
810 :
デフォルトの名無しさん :2006/12/02(土) 00:23:33
[1] 授業単元:Cプログラミング演習 [2] 問題文:50個の整数データを読み込み、それらを小さい順に出力する cプログラムを作成せよ。バブル整列法は使ってはいけない。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: Cのみ [4] 期限: 2006年12月23日12:00まで よろしくお願いします。
>>803 #include<stdio.h>
#include<stdlib.h>
int main(void){
int i,j;
int a[10];
srand(time(NULL));
printf("0-10:\n");
for(i=0;i<10;i++){
a[i] = 0;
}
j=1;
while(j<=10){
i = rand() % 10;
if(a[i]==0){
a[i] = j;
j++;
}
}
for(i=0;i<10;i++){
printf("%d\n",a[i]);
}
}
812 :
715 :2006/12/02(土) 00:49:31
>>718 レス遅くなってスミマセン。ありがとうございました!
813 :
デフォルトの名無しさん :2006/12/02(土) 01:22:03
>>803 int i,k=0,shaffle;
int rar[10];
for(i = 0; i< 9; i++)
rar[i] = i+1;
scanf("%d",&shaffle);
srand((unsigned)time(NULL));
while(k <= shaffle){
i = rand() % 10;
if(i>=0){
temp = Value[i];
Value[i] = Value[i-1];
Value[i-1] = temp;
}
k++;
}
適当にこんな感じでも良いでしょ
814 :
デフォルトの名無しさん :2006/12/02(土) 01:23:52
うわ!なんか似たソースのっかってるし!! びっくりだ
shuffle
>>803 int d[10];
int r,w;
int i;
srand((unsigned)time(NULL));
for( i=0; i < 10; i++)
d[i] = i + 1;
for( i = 0 ; i < 10; i++){
r = i + rand() % (10 - i);
w = d[i];
d[i] = d[r];
d[r] = w;
}
>813 なんか色々とおかしくない?
818 :
813 :2006/12/02(土) 06:26:50
おかしいね 何も見ずに書き込んだらやっぱだめだね
>>810 コンパイルはしてないけどな。あと、データ読むところは書いてない。
#include <stdlib.h>
int compare(const int *a, const int *b);
int main(void)
{
int data[50];
int i;
/* ここいらでデータを読む */
/* ソート */
qsort(data, 50, sizeof(int), (int (*)(const void*, const void*))compare);
/* 表示 */
for (i = 0; i < 50; i++) {
printf("%d\n", data[i]);
}
}
int compare(const int *a, const int *b)
{
return *a - *b;
}
820 :
デフォルトの名無しさん :2006/12/02(土) 10:39:00
パスカルの法則で 1 11 121 1331 14641 のように出力されるようにするにはどのように作ればいいですか。
>>820 どのようにって
・n段目の左からm番目の数字が(n-1)段目の(m-1)番目とm番目の数字和 (n>=3, 2<=m<=n-1)
・n段目の左端(m=1)と右端(m=n)の数字が1
になるように作ればいいと思うよ
822 :
701 :2006/12/02(土) 12:06:39
>>707 >>744 ありがとうございます。なにしろC言語を習い始めて
まだ二ヶ月もたってない初心者なもので・・
1年なら普通だろ
二ヶ月やって
>>701 ができないなら、これからの課題も全部ここに丸投げだな
へへん。 プログラミングだけが人生じゃないさ。 難問奇問な宿題はさっさと丸投げして人生を楽しもう。
プログラマを顎で使って今までごめんなさい orz 自分で勉強してみて難しさが分かりました orz これからは期限守らなくても大目に見ますね。
>810 多分題意に反すると思うけど #include <stdio.h> #define N 5 int main(void) { int i, j, k, n,, a[N]; for(i=0; i<N; i++) { scanf("%d", &n); for(j=0; j<i; j++) { if(a[j]>n) { for(k=i; k>j; k--) a[k] = a[k-1]; break; } } a[j] = n; } for(i=0; i<N; i++) printf("%d ", a[i]); return 0; }
#define N 5 →#define N 50
831 :
デフォルトの名無しさん :2006/12/02(土) 15:26:00
796の問題難しくないですか?
796の問題難しくないですよ!
難しくは無いがめんどくさい inputfile : ソートするデータが入ったファイルの名前. ファイル中のデータの並べ方は問わない.データ数は1000個です outputfile : ソート後のデータを出力するファイルの名前 ファイル中のデータの並べ方は,inputfileと同じにすること. これを見る限り区切り文字がスペースだろうとコンマだろうと改行記号だろうと 対応しなくてはならないようだ どうも質問者は分かってなかったみたいだが とりあえず関数は全部書いたけどmain作るのがめんどくさくて絶賛放置中
834 :
デフォルトの名無しさん :2006/12/02(土) 15:47:12
区切り文字はスペースで統一するらしいです。さきほど先生にうかがいました
835 :
832 :2006/12/02(土) 15:49:09
833さん、頭いいですね!
>>834 >ファイル中のデータの並べ方は,inputfileと同じにすること.
じゃあこれは何を意味するの?
あとファイル内のデータは数値?文字列?
あと比較回数を表示することってあるけど軸選びに使う比較も回数に含めるの?
838 :
デフォルトの名無しさん :2006/12/02(土) 16:01:26
それは含めないらしいです。あとファイル中のデータの並べ方は,inputfileと同じにすること. ていうのは、inputfileに入っているデータと同じ数字が入っているならいいらしいです。あとファイル内のデータは数字です
あと何を伝えて無いんだ?
840 :
デフォルトの名無しさん :2006/12/02(土) 16:19:08
これで全部伝えました。遅くなってすみませんでした
そうか。では先生をここに呼んで来い。
842 :
デフォルトの名無しさん :2006/12/02(土) 16:27:22
すみません。先生はもういないです
泣いた
844 :
デフォルトの名無しさん :2006/12/02(土) 16:34:27
自分はC言語が苦手で796の問題がぜんぜんわからないのでぜひお願いします
845 :
デフォルトの名無しさん :2006/12/02(土) 16:38:25
>>796 今からやるから期待しないで待ってろ
21時までに書き込み無かったら俺からの回答は諦めろ
848 :
831 :2006/12/02(土) 17:38:22
833さん、僕も今さっき関数ができたんですけどmainがどうしてもできません。 できそうですか?
849 :
デフォルトの名無しさん :2006/12/02(土) 17:38:58
847さん、ぜひお願いします
851 :
848 :2006/12/02(土) 17:49:03
void bubblesort(int h, int k, int *A) { int i, j; int test; /* test==1; すでに整列済み */ for(i=h; i<k; i++) /* バブル操作の反復 */ { test=1; for(j=k; j>=i+1; j--) if(A[j]<A[j-1]) {swap(j, j-1, A); test=0;} if(test==1) return; } return; } まだバブルソートしかできてません
852 :
847 :2006/12/02(土) 17:49:37
Main以外出来てるのならすぐだろうよ。そのデータ読んでmy_qsortみたいな関数を呼ぶだけで。 それを晒してくれよ。Mainなら書くよ
853 :
847 :2006/12/02(土) 17:50:38
もう何がなんだか・・
855 :
848 :2006/12/02(土) 17:53:50
バブルソートはできたんですけど796のほかの関数とかmainがまったくわかりません。
人それを全くできてないと云う
スタックオーバーフロー
とりあえず796は暇ならinputfileでも作ってどこかにうpしておいてくれ 締め切り日曜みたいだし847からの解答が無ければ俺がのんびり解こう
860 :
796 :2006/12/02(土) 19:05:04
正気か?
862 :
847 :2006/12/02(土) 19:32:29
まずは謝ろう。問題を流し読みしてただのクイックソートじゃんとなめてた。すまない。
これは面倒くさいな。とりあえず前言撤回。俺はやってないことにしておいてくれ。
ということで、
>>859 にまかせた。
と、ここまで期待させておいて
>>796 を絶望の底へ陥れる自作自演乙
864 :
796 :2006/12/02(土) 20:04:44
マジでお願いします
( 嫌 生 人 こ ) ) だ .き .を れ( ( お て .疑 以 ) ) ! い .い 上( ,, -──- 、._ ( く .な ) -"´ \ .) .の .が ( / ヽ.( .は .ら .) / ヽ〜、_ _( | _ノ ヽ、_ .| `,〜〜〜´ l o゚⌒ ⌒゚o l ` 、 (__人__) / `ー 、_. ` ⌒´ / /`''ー─‐┬''´ / 丶. i | ./ 丶、_)|_ノ|_ .|  ̄ヽ._ ´ ヽ ヽ、 _/´`ヽ /  ̄  ̄ ̄
失敗
裏切りを経験するのも人生には必要なのかもしれないな。 他に方法がないからと言って判断を完全に預けてしまうのは 独立した個人としての人格の尊厳に関わるのではないだろうか。
/ /ヘ/ / / / / // / / ヽ \ \ \ ./ _/ / / / / / / / / ∧_ヽ \ ヽ. ヽ // /! / .l l /,.-‐'フフヽ.// / /´ヽヽ `>.、 .! ',`ヽ 〉 / / |/ | l// // /.: / ノ /. :.:.ヽ \\ `ト、 | | / { ./ || l/ /ン-‐<、 ://:/ ./: :,ィ─ヽ-\ヽ. | | | |′ \、.--|l-‐''"_,. -‐''",. =,=¬ミ、/: : :/ /: : : ノ゙,ニ==ミ、 | | | | /  ̄|| ̄ {: :く ト-' } : : / ./: : : : : ト-' } // / j l ! / .!', \:.` ゝ -‐' .// ー-- ./ / /j | / / ', ヽ \ゝ、 ノ : : ! ノ/ .//ノ' ./ .∧ \ \ -┐ ∠ -‐''" / / /,ハ = ゝヘ、_ ゝ、 __ノ) /〃/ / // ヽ〃 ヾ ヽ ̄ ̄ 、_,.. -−'' ´ ̄ / /</ ケヒヒッ / ,r'"´ ̄了ゝ、rー、 ヽ ` ー──‐ '' ´ /liヾ/ 人生は裏切りの連続ですぅ / / ゝ, -‐'7`ーイ__.」、 \ ー / | / , f´ ̄/ / ノ/ヽゝン‐.、V丶、 /| | / 之/ / / ヽ ヽノ1ヽ-、.`丶、 _,. -‐'"´ /|ヾ 「l〃| / 「 / / / ', | ヽ \  ̄ / / |= =l / .ゝ/ // .i l , -イ ヽ. ヽ ,イヽ / |〃il ヾl ,r/ / || L.、| l `丶、 f | `ヽ、 | ! /./ / || ヽjヾ||〃l ,. ‐-、ヽl _ \| ヽ / / / || ノj= =|/ , --ヘ}⌒}´_\ \ 、 ヾ r ヽ
何の責任を負ってるわけでもないのに裏切りといわれても困るお^^;
>>869 信じていたのに
この言葉はお約束ですな
872 :
796 :2006/12/02(土) 21:10:27
>>870 はい、ありがとうございました。おかげで助かりました。
/\ /\ / \ / \ / ゙'----''"´ ヾ / `:、 / `: | i | ノ ' | | .,___., .,___., i 、 ''"´`:、 υ / キミ達のこと 信じてたのに........クスン `丶,:' 、. . )___Д____,,.,_,,.;''" / / ο
875 :
デフォルトの名無しさん :2006/12/02(土) 22:24:45
[1] 授業単元:ソートの準備 [2] 問題文: 配列に格納されたデータをソートするプログラムを作成するにあたり、 以下の機能を持つ関数を作成しなさい。 乱数を生成し配列要素に格納する init_array(int *pa, int n) 配列要素を1行で画面に出力する output_array(int *pa, int n) 指定された2つアドレスのデータを交換する swap(int *x, int *y) [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: Visual Studio.NET2003 [3.3] 言語: C [4] 期限: 2006年12月4日09:00まで
>>875 # include <stdio.h>
# include <stdlib.h>
void init_array(int *pa, int n)
{
while(--n >= 0) pa[n] = rand();
}
void output_array(int *pa, int n)
{
int i;
for(i = 0; i < n; i++)
printf("%d ", pa[i]);
printf("\n");
}
void swap(int *x, int *y)
{
int t = *x;
*x = *y;
*y = t;
}
877 :
◆s2cIPM3PTs :2006/12/02(土) 23:05:15
>>877 問題文の読み込むってファイルから?
ファイルから読むんなら関数使っちゃうよね?
ユーザ定義関数を利用しない、って意味じゃないかと。
880 :
◆s2cIPM3PTs :2006/12/02(土) 23:38:13
>>878 >>879 すいません。879さんの言うとおりです。
881 :
デフォルトの名無しさん :2006/12/03(日) 00:06:48
[1]授業単元:アルゴリズム論演習 [2]問題文:入力した年月日が、その年の1月1日から通算何日目かを表示するプログラムを 閏年を判別する関数、通算を求める関数、main関数に分けて作成せよ。 [3]環境 [3-1]OS:Windows XP [3-2]コンパイラ名とバージョン:Visual Studio.NET2003 [3-3]言語:C++ [4]期限:12月7日
882 :
デフォルトの名無しさん :2006/12/03(日) 00:14:00
[1]授業単元:アルゴリズム論演習 [2]問題文:44,44と-0,1111×(10の2乗)を足した値をscanf関数を用いずに 表示するプログラムを作成せよ。ただし、数値は入力すること。 [3]環境 [3-1]OS:Windows XP [3-2]コンパイラ名とバージョン:Visual Studio.NET2003 [3-3]言語:C++ [4]期限:12月7日
>>882 #include <stdio.h>
int main(void){
float a,b;
char buf[1024];
fgets(buf,sizeof(buf),stdin);
sscanf(buf,"%f %f",&a,&b);
printf("%.2f\n",a+b);
return 0;
}
>>882 >44,44と-0,1111×(10の2乗)
俺の脳がコンパイルエラーを返した
ぐぼぉっ、よくみたらC++か。適当に書き換えてきまつw
やはりトラップか
>891 1.平均と等しい数値が平均より小さい数になる。 2.sa_maxが初期化されてない
うーん……?? Q1 while ((c = getc(fp)) != EOF) { putchar(c); } これ↑だとEOFを検出したらすぐ終了するのに while (feof(fp)==0) { c = getc(fp); putchar(c); } これ↑だとEOFを出力してしまうのはなぜ…? Q2.ファイルの終わりに'\0'を書き込む必要はないのですか? 基本的な質問でごめん、誰か教えてくれないかな…。
895 :
デフォルトの名無しさん :2006/12/03(日) 06:06:30
さすがにこの時間じゃ誰も見てないかな…。
896 :
デフォルトの名無しさん :2006/12/03(日) 06:36:27
二次元配列で int a[600][600]; とかって確保しようとしたら実行してもすぐ終了してしまう。 大きな領域の二次元配列を確保することは出来ないのでしょうか?
>>896 600*600*4バイト以上だよね
スタック上じゃなくヒープ上に確保した方がいいのでは
>>894 feofはファイルの終端を越えて読み出しを行った場合にゼロ以外を返す。
なので、最後の一文字を読んだ時点ではまだゼロ。
他の言語じゃ終端でEOFになるのが多いから間違えやすい。
ファイルシステムがファイルの長さの情報を持ってるから不要。
むかしCP/MというOSがファイルの長さの情報をブロック単位でしか持っていなかったので
テキストファイルの場合終端に ^Z(0x1a)を付けていたことがあるがこれは例外。
MS-DOSにもこの風習が残っていた。
>>897 Windows上の場合は変数を保存出来る領域に制限があるんですか。
UNIXマシンだと問題なかったような…。
>>898 なるほど…。
よく分かりました。サンクス!
全然関係ないけど、この本いいな、なんか… 「やさしいC 高橋 麻奈」
>>899 コンパイルオプションにスタックサイズを与えればいいけど
そこまで考えているようじゃないのでヒープって言っちゃった
狙って付けたなこのタイトルは。
「はじめてのC 椋田實」よりはいいかな。
Cは習いましたがAすら実行できません(´・ω・`)
まずアセンブラからはじめよ という中国の諺がある
907 :
◆s2cIPM3PTs :2006/12/03(日) 12:23:40
908 :
◆s2cIPM3PTs :2006/12/03(日) 12:57:08
>>908 オーバーフローとか気にしてないけど、
初級レベルならこの程度書いとけば充分だろう。
脳内コンパイルしかしてないから不備があっても勘弁な。
int countbetween(int data[],int n,int a,int b) {
int count=0;
for(int* p=&data[n-1]; p>=data; p--)
if(a<=*p && b>=*p) count++;
return count;
}
double avragearray(double data[],int n) {
double total=0;
for(int i=0; i<n; i++) total+=data[n];
return total/n;
}
int uruu(int year) {
return
year%400==0 ? 1 :
year%100==0 ? 0 :
year%4 ==0 ? 1 : 0;
}
Assembler BrainFuck C です
>909 data[n]
913 :
722 :2006/12/03(日) 14:30:24
二分(探査)木のわかりやすい参考サイトを教えてくだしあ><
[1] 授業単元: C言語基礎 [2] 問題文(含コード&リンク): fscanf printf exit atoi fopen pow の関数の(戻り値の)型・引数の型・有限であればその個数・必要な ヘッダファイル・リンク時に必要なオプションを調べよ。 manコマンドを用いて man 3 fscanfとしたのですが、英語が解らず無理でした。 テンプレの【C 関数検索 man on WWW】でも検索してみたのですが、 完全に載ってませんでした。 これらが完全に載っているサイトがあれば教えて頂けると助かります。 よろしくお願いします。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 火曜日の朝9時00分まで [5] その他の制限:
916 :
◆s2cIPM3PTs :2006/12/03(日) 16:48:36
>>909 ありがとうございました(^^)。
参考にさせていただきます。
918 :
デフォルトの名無しさん :2006/12/03(日) 17:34:38
[1] 画像処理 [2] ブレゼンハムのアルゴリズムを用いて、ウインドウ内に線分を描画するプログラムを作成しなさい。 仕様(マウスの左ボタンだけで操作する。候補線を表示する。) マウスの左ボタンクリック 線分の始点座標の指定、及び線分の描画開始 マウスの移動 始点から線分を絶えず候補として描画。(古い線分は消す) マウスの左ボタンクリック 線分の終点座標の確定。線分を描画。 ただし、ライブラリの点を描画するAPI関数を使って線分を引くこと。直線を引くAPI関数を使ってはならない。 ウインドウのクリア機能や,線に色をつける機能などをつけると,高得点になる。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ: VC++ 6.0 [3.3] 言語: C++ [4] 期限: 06年12月06日(水)提出 [5] その他の制限: 特になし よろしくお願いします。
920 :
# :2006/12/03(日) 17:49:09
>>920 main関数とかprintf関数とか利用できないのは厳しすぎるなぁ。
922 :
# :2006/12/03(日) 18:04:52
>>921 定義関数以外という意味です。
main関数、printf関数は使えます。
説明不足ですいません。
>>922 めんどいんでとりあえず4だけ
#include<stdio.h>
int main(){
int n,m;
int odd=0,even=0,odd_n=0,even_n=0,i;
printf("n = ");scanf("%d",&n);
for(i=0;i<n;++i){
scanf("%d",&m);
if(m%2 != 0)
odd += m,++odd_n;
else
even+= m,++even_n;
}
printf("総和 = %d\n平均 = %f\n",odd+even,1.*(odd+even) / n);
printf("奇数\n");
printf("\t個数 = %d\n",odd_n);
if(odd_n == 0)printf("\t個数が0なので平均を求められません\n");
else printf("\t平均 = %f\n",1.*odd / odd_n);
printf("偶数\n");
printf("\t個数 = %d\n",even_n);
if(even_n == 0)printf("\t個数が0なので平均を求められません\n");
else printf("\t平均 = %f\n",1.*even / even_n);
}
>>920 /* 1 */
#include<stdio.h>
int main(void){
int n;
printf("Input positive number:");
scanf("%d", &n);
printf("Sum of even number(s): %d\n", (n/2)*(n/2+1));
printf("Sum of odd number(s): %d\n", ((n+1)/2)*((n+1)/2));
return 0;
}
/* 2 */
#include<stdio.h>
#include<stdlib.h>
int main(void){
int m, n;
printf("Input two positive numbers:");
scanf("%d %d", &m, &n);
if(m==n) n++;
printf("Sum of number(s): %d\n", (m+n)*(abs(m-n)-1)/2);
return 0;
}
いい加減C/C++にも"Hello World!"を出力する関数を標準装備させたほうがいいと思う
1] 授業単元: プログラム演習 [2] 問題文(含コード&リンク): 以下の関数を実装するプログラムを作成せよ。 ・標準入力から読み込んだ数字の最頻値を出力する関数 ・読み込んだ数字に対する度数分布表を作成・出力する関数 <表> 階級 | 度数 | 度数を*の数で表示| 度数が出現する確率 0-10 10-20 20-30 30-40 40-50 50-60 60-70 70-80 80-90 90-100 [3] 環境 [3.1] OS: Unix [3.2]gcc [3.3] 言語: C [4] 期限: 12/4 18:00
よろしくお願いいたします。
>>927 10が入力されたら
0-10 と 10-20 の両方の度数が増えるのか?
930 :
# :2006/12/03(日) 18:52:53
>>927 #include<stdio.h>
int main(void){
int count[101]={};
int part_total, total=0;
int value;
int i, j;
while(fscanf(stdin, "%d", &value)==1){
if(value>=0 && value<=100)
count[value]++;
total++;
}
for(i=0;i<=90;i+=10){
part_total=0;
for(j=0;j<=10;j++)
part_total+=count[i+j];
printf("%3d-%-3d %2d ", i, i+10, part_total);
for(j=0;j<part_total;j++)
printf("*");
printf(" %f\n", (double)part_total/total);
}
return 0;
}
>>718 vol1
#include <stdio.h>
#define STK_MAX (1024)
int stk[3][STK_MAX];
int sp[3] = { -1, -1, -1 };
int count = 0;
void push( int si, int val ) {
if( sp[si] >= STK_MAX ) return;
sp[si]++;
stk[si][sp[si]] = val;
}
int pop( int si ) {
if( sp[si] < 0 ) return -1;
sp[si]--;
return stk[si][sp[si]+1];
}
void show( void ) {
int i, j;
for( i = 0; i < 3; i++ ) {
printf( "%d: ", i + 1 );
for( j = sp[i]; j >= 0; j-- )
printf( "%d, ", stk[i][j] );
printf( "\n" );
}
printf( "\n" ); count++;
}
933 :
デフォルトの名無しさん :2006/12/03(日) 19:20:18
>>718 じゃなくて
>>918 だった Vol2
void move( int n, int src, int dst, int wrk ) {
int tmp;
if( n > 1 )
move( n - 1, src, wrk, dst );
tmp = pop( src );
push( dst, tmp );
show();
if( n > 1 )
move( n - 1, wrk, dst, src );
}
int main( void ) {
int i, max = 7;
for( i = max; i >= 1; i-- )
push( 0, i );
show();
move( max, 0, 1, 2 );
printf( "Total %d move\n", count - 1 );
return 0;
}
max は5だっけ?
934 :
931 :2006/12/03(日) 19:57:10
>>927 問題よく読んでなかったスマソ
#include<stdio.h>
void saihin(int count[], int count_num){
int i, maximum_count=0, maximum_index=0;
for(i=0;i<count_num;i++){
if(count[i]>maximum_count){
maximum_count=count[i];
maximum_index=i;
}
}
printf("%d\n", maximum_index);
}
void hyou(int count[], int total){
int i, j, part_total;
for(i=0;i<=90;i+=10){
part_total=0;
for(j=0;j<=10;j++) part_total+=count[i+j];
printf("%3d-%-3d %2d ", i, i+10, part_total);
for(j=0;j<part_total;j++) printf("*");
printf(" %f\n", (double)part_total/total);
}
}
int main(void){
int count[101]={}, value, total=0;
while(fscanf(stdin, "%d", &value)==1){
if(value>=0 && value<=100) count[value]++;
total++;
}
saihin(count, 101);
hyou(count, total);
return 0;
}
>>925 そんなわけのわからない関数はHQ9+以外ではいらんだろ。
936 :
915 :2006/12/03(日) 21:02:30
>>917 レスありがとうございます。
そこのman on WWWでも検索したのですが、
もちろん、それぞれの関数自体はあるんですけど、
宿題で必要な内容がほとんど載ってないんですよ。
>>936 > 宿題で必要な内容がほとんど載ってないんですよ。
じゃあほとんど分かったてことだな
後はイモヅル式にググれカス
>>939 変数宣言する個所の先頭に static と書いてみるといいんじゃないかな
ヘボくてごめん、無償版を使っているのだけれど >メニューの [ プロジェクト | プロジェクトオプション | リンカ | 予約スタックサイズ ] といわれても、borland/bcc55/フォルダのどこをどう弄ればいいのか分からないんだ…。
Borland C++Compiler 5.5使ってるのに、Borland C++Builderのページ見ても解決するわけがないだろう。 bcc32 -lS:スタックサイズ(16進数) hoge.c
>>942 bcb5tool.hlp で ilink32 の /S オプションの項をみるといいよ
945 :
674 :2006/12/03(日) 22:49:24
それ名城大学だ うちの大学、2chやWikiで片付けてる奴かなり多いんよ
946 :
デフォルトの名無しさん :2006/12/03(日) 22:51:09
げ、アンカー入れるつもりが名前欄に・・・674、スマン
>>922 >>923 で3もカバーしてるけど一応。
#include <stdio.h>
int main(void)
{
int num, odd = 0, even = 0, sum = 0, limit, i;
printf("入力する個数:");
scanf("%d", &limit);
for(i = 1; i <= limit; i++)
{
printf("%d個目:", i);
scanf("%d", &num);
sum += num;
if(num % 2 == 0)
even++;
if(num % 2 != 0)
odd++;
}
printf("総和:%d\n平均:%d\n", sum, sum / (even + odd));
printf("偶数:%d\n奇数:%d\n", even, odd);
return 0;
}
>>943-944 なるほどー!
実行するときに
% bcc32 -lS:0x00200000 hoge.c
とかすると設定を弄ってコンパイル出来るのか!
あと使ってるエディタソフトに「コンパイルオプションの設定」とあって
テキストスペースがあったのが意味が分からなかったけれど、この
「-lS:0x00200000」の部分を指していた訳ですね。
助かりました。サンクスコ
>>936 man の読み方が分ってないんじゃないか?
例えば pow を調べるとする。
man on WWW で引いたページの『書式』の項には
------------------------------
#include <math.h>
(4)
double pow(double x, double y)
(1) (2) (3)
(途中略)
-lm でリンクする。
(5)
----------------------------
とある。(括弧つき数字は説明のために私が書いた物で、マニュアル中にはない。)
(1)が関数の戻り値の型
(2)、(3)それぞれが引数の型を示し、2個書いてあるので個数=2になる
(4) が必要なヘッダファイル
(5)がリンク時に必要なオプション
と、あなたの要求した項目は全て載ってるわけだが。
質問しようとしたら、全く同じ質問があってびびったw しかし、そのまま提出したら、ほぼ確実にばれちまいそうですな。 参考にさせていただきます。
951 :
950 :2006/12/03(日) 23:24:25
次スレ立てるのは950ですか? もしそうなら、自分は立てられないので代わりにどなたかお願いします。
>>950 質問する前にスレを読み返した君はエライ
953 :
936 :2006/12/03(日) 23:26:41
>>949 あ、そういうことだったのですか…。完全に見方が解ってませんでした。
「関数の戻り値は○○です。」と書いてあるのかと思ってました。
どうもありがとうございました。
んなもん適当で
955 :
デフォルトの名無しさん :2006/12/03(日) 23:38:06
[1] 授業単元:プログラミング [2] 問題文:四則演算を作成しなさい [3] 環境 [3.1] OS:WindowsXP [3.3] 言語:C++/ [4] 期限:明日 [5] 最近c++を習い始めました。1.2-1.1の答えが0.1ではなく0.09999になります。 このド素人にアドバイスお願いします。
>>955 浮動少数点での計算は十中八九誤差が出ます
それだけ
>>955 printf("%.1f",hoge);
960 :
デフォルトの名無しさん :2006/12/04(月) 00:07:44
[1] 授業単元:アーキテクチャー [2] 問題文: C言語の配列とポインターを使って、文字列をひとつ入れて それぞれの文字が入っているアドレスを出力しなさい。 また、整数データの列を定義してそれぞれの整数が入っている アドレスを出力しなさい 。 [3] 環境 [3.1] OS:WindowsXP [3.3] 言語: C [4] 期限: 12月4日10時半
>>960 なんでポインタ使わんといかんのかいみわからん
#include <stdio.h>
#include <string.h>
int main()
{
int i;
int *phoge,hoge[] = {1,1,2,3,5,8,13,21};
char *pfuga,fuga[] = "mojiretu";
phoge = hoge;
for(i = 0;i < strlen(fuga);i++){
printf("&fuga[%d] = %p\n",i,(phoge+i));
}
printf("\n");
pfuga = fuga;
for(i = 0;i < sizeof(hoge)/sizeof(int);i++){
printf("&hoge[%d] = %p\n",i,(pfuga+i));
}
return 0;
}
963 :
# :2006/12/04(月) 01:38:04
964 :
# :2006/12/04(月) 01:42:01
問題の番号間違えました(−−;)。 関数の方が4,5になっています。 すいません(汗)。
誰か「C/C++の宿題は流石兄弟におまかせ 27代目」のdatを持ってないか? 持ってたら欲しいんだが。にくちゃんねるにも見当たらない。
にくちゃんねるにあるじゃん
968 :
デフォルトの名無しさん :2006/12/04(月) 02:20:05
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): キーボードから入力した文章を単語単位で切り出し 総単語数と各単語の文字数を表示せよ。単語の区切りは半角スペース。 単語数の上限は50、一単語の最大文字数は30と仮定 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:bcc32 [3.3] 言語:C [4] 期限:12月5日まで [5] その他の制限:文字入力にはgets関数を使用。ポインタだけでかければ 更に可 お願いします。半角スペースがわかりません。。
' ' ←半角!
970 :
デフォルトの名無しさん :2006/12/04(月) 02:33:06
>>969 それでエラー出たんです。。。
ってか難しくて無理ぽ。。。
半角スペースとは0x20のことだ
>>919 候補表示中にポインタがウィンドウ外に行ったとき、
ウィンドウ外をクリックされたときの挙動はどうしたらいい?
>>963 逆順ってなんだ?
ヒストグラムのやつはデータに制限無いのか?
>963 逆順ってこれでいいか? 2. #include <stdio.h> int main(void) { int i, n, m; scanf("%d", &m); i = m; n = 0; while(i) { n = n * 10 + i % 10; i /= 10; } printf("%d\n", n); if(m>n) printf("mがnより大きい\n"); else if(m<n) printf("nがmより大きい\n"); else printf("nとmは等しい\n"); return 0; }
>963 0の桁を指定してないからこれだと0にしてある。 3. int keta(int n) { int i; if(n>=0) { for(i=0; n; i++, n/=10); return i; } else { n = -n; for(i=0; n; i++, n/=10); return i + 1; } }
978 :
デフォルトの名無しさん :2006/12/04(月) 06:09:08
1 2 3 4 5 6 7 8 9 ------------------------------------------------- 1 | 1 2 3 4 5 6 7 8 9 2 | 2 4 6 8 10 12 14 16 18 3 | 3 6 9 12 15 18 21 24 27 4 | 4 8 12 16 20 24 28 32 36 5 | 5 10 15 20 25 30 35 40 45 6 | 6 12 18 24 30 36 42 48 54 7 | 7 14 21 28 35 42 49 56 63 8 | 8 16 24 32 40 48 56 64 72 9 | 9 18 27 36 45 54 63 72 81 をつくるプログラムをCでお願いします
>>978 こういう質問をすると、たいがい掛け算九九の計算手順をとらずに
数字をそのまま並べて表示するプログラムを書く人が出てくる、間違いないw
”つくる”が難しいな
”表示する”なら簡単だなんだけどね
>>978 >>979 ではご期待に応えて
#include <stdio.h>
int main()
{
printf("1 2 3 4 5 6 7 8 9\n"
"-------------------------------------------------\n"
"1 | 1 2 3 4 5 6 7 8 9\n"
"2 | 2 4 6 8 10 12 14 16 18\n"
"3 | 3 6 9 12 15 18 21 24 27\n"
"4 | 4 8 12 16 20 24 28 32 36\n"
"5 | 5 10 15 20 25 30 35 40 45\n"
"6 | 6 12 18 24 30 36 42 48 54\n"
"7 | 7 14 21 28 35 42 49 56 63\n"
"8 | 8 16 24 32 40 48 56 64 72\n"
"9 | 9 18 27 36 45 54 63 72 81\n");
return 0;
}
>>978 #include<stdio.h>
void main(){
for (int i=0;i<3;i++) printf(" ");
for (i=1;i<10;) printf(" %d",i++);
printf("\n");
for (i=0;i<30;i++) printf("-");
int j,y;
for(i=1;i<10;i++){
printf("\n%d | ",i);
y=0;
for(j=1;j<10;j++){
y+=i;
if(y<10) printf(" ");
printf("%d ",y);
}
}
printf("\n");
}
984 :
983 :2006/12/04(月) 07:11:07
訂正 #include<stdio.h> void main(){ for (int i=-2;i<1;i++) printf(" "); while(i<10) printf(" %d",i++); printf("\n"); for (i=0;i<30;i++) printf("-"); int j,y; for(i=1;i<10;i++){ printf("\n%d | ",i); y=0; for(j=1;j<10;j++){ y+=i; if(y<10) printf(" "); printf("%d ",y); } } printf("\n"); }
985 :
983 :2006/12/04(月) 07:17:38
再訂正 #include<stdio.h> void main(){ for (int i=-2;i<1;i++) printf(" "); while(i<10) printf(" %d",i++); printf("\n"); for (;i<40;i++) printf("-"); int j,y; for(i=1;i<10;i++){ printf("\n%d | ",i); y=0; for(j=1;j<10;j++){ y+=i; if(y<10) printf(" "); printf("%d ",y); } } printf("\n"); }
訂正 #include<stdio.h> void main() { int i,j,y; printf(" |"); for(i=1;i<=9;i++) printf(" %2d",i); printf("\n--+"); for (i=0;i<28;i++) printf("-"); for(i=1;i<=9;i++){ printf("\n%d |",i); y=0; for(j=1;j<=9;j++){ y+=i; printf(" %2d",y); } } printf("\n"); }
987 :
デフォルトの名無しさん :2006/12/04(月) 08:12:05
[1] 授業単元:プログラミング [2] 問題文:次のようなプログラムを作れ。 1. 数値を順番に読み込んで二次元の配列に格納する。 2. その配列を画面に出力する。 3. 次に、2つの整数を読み込む。 4. 二次元配列のうち、読み込んだ整数に対応する二つの行の内容を交換する。 5. 配列を画面に出力する。 配列の読み込み、交換、出力はそれぞれ関数にすること。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限:2006年12月5日17:00 [5] その他の制限:授業では配列までやりましたが、特に制限はないです。 自分では期限内にできそうにないのでよろしくお願いします。
>987 二次元配列のサイズは?
数値を順番に読み込むって 何から読み込むのか書いてないのは なんだかなー 問題文に書いてあるとおりなんだろうからどうしようもないのかもしれんが
992 :
987 :2006/12/04(月) 09:01:13
二次元配列のサイズに規定はありません あと、読み込む数値は全てキーボードからの入力です
993 :
デフォルトの名無しさん :2006/12/04(月) 09:15:25
x + y = 1, x, y >= 0の条件の下で(2x + y)^2 + (x - y)^2 + (x + 2y)^2の最小値を求める という問題の変数を増やした場合 x(1) + ・・・+ x(n) = 1, x(i) >= 0の条件の下でΣ{i=1,m} (Σ{j=1,n} a(i,j) * x(j))^2の最小値 はどのように解いたらいいのかわかりますか?いいサイトあったら教えてください パソコン、プログラム使って解ける方法教えてください
[1]プログラム演習 [2] 一定の文字からなる列sを読み込み、以下の条件を満たす同じ個数の文字からなる列tを出力するプログラムを作りなさい。 ただし、以下での単語とは空白以外の文字からなる列のこととする。 1,s中の単語は同じ順番で t に現われる 2,t中では単語は一つの空白に区切られる 3,t中に最初の単語の最初の文字から最後の単語の文字までは列全体のちゅうおうに位置し、前後は空白である 例えば文字の列 _This___is__a____good___program___ を入力すると ______This_is_a_good_program______ が出力される。ここで、_は空白を表すものとする。 [3]C言語 [4]12/7 [5]for,while,if文 ポインター 文字列 1,2次配列 関数の書き方
>>993 二次計画問題。
数理計画とか凸計画とか線型計画とかの本で「二次計画」
という言葉を探すといいと思うよ。
アルゴリズムとしては、線型計画に帰着するのと、
凸計画として降下法系のを使うのの二つがあるが、後者のほうが実装は楽。
996 :
デフォルトの名無しさん :2006/12/04(月) 09:46:13
>>995 ありがとうございます
変数が2次なんですけど出来ますか?
0よりは小さくならず、無限には大きくならないので最小値は必ず一つあるはずなんですが
998 :
デフォルトの名無しさん :2006/12/04(月) 09:57:14
>>997 しかも最小値を与えるx(i)を決定したいんですが...出来ますか?
本が手に入らないんですが...いいサイトないですか?検索してみますけど
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。