デバッグは一応終わりました… ダミークラスつくるのはちょっと方針上あきらめました。 コンパイルが通ったやつです。 ↓ import java.util.*; public class Game{ private int N; /* nxn の正方格子の定義 */ private int x,y; /* 正方格子のX座標 Y座標 */ private int see; /* 見える範囲のマス数 */ /* 5方向の箱を作ります */ int[] mode_dir=new int[5]; /* ハンターを監視するための箱を作ります */ int[][][] Hunt=new int[N+2][N+2][3]; Hunter[] h=new Hunter[3];
もうかれこれ2時間くらい迷ってます・・・ 問1. 0から100万までの自然数をrand関数を使って50万個作りファイルに保存せよ。 (これはできた) 問2. 問1で作ったファイルを、選択ソート、挿入ソート、バブルソートをそれぞれ使って ソートしてソート結果をファイルに出力せよ。 timeコマンドで実行時間を計測すること。 問2なんですが、ソートのやつは全部できたんですが、timeコマンドで実行時間を 計測する方法がわかりません。 使い方 time a.exe としか説明がありません。
↑ ちなみにC++を使ってます
955 :
デフォルトの名無しさん :01/12/11 16:43
>>953 言語名を書けよ。
Cなら、
/* CLOCK.C: プログラムの実行時間を入力するように要求してから、
* その時間の間、経過時間の表示を継続します。
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void sleep( clock_t wait );
void main( void )
{
long i = 600000L;
clock_t start, finish;
double duration;
/* 指定された時間の遅延を設ける */
printf( "3 秒の遅延\n" );
sleep( (clock_t)3 * CLOCKS_PER_SEC );
printf( "終了!\n" );
/* イベントの持続時間の計測 */
printf( "%ld 回のループの時間は ", i );
start = clock();
while( i-- )
;
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "%2.1f 秒です。\n", duration );
}
/* 指定されたミリ秒間だけ待機する */
void sleep( clock_t wait )
{
clock_t goal;
goal = wait + clock();
while( goal > clock() )
;
}
・・・・だそうだ。MSDNライブラリより抜粋。
>>953 timeで時間計測で悩むなよ・・・
やってみりゃわかるべ。
timeはa.exeの実行時間を測ってくれるだけだよ。
>>956 例えば僕のファイル名はkadai1.exeです。
time kadai1.exeと入力するんですよね?
それをどこに入力するのかわからないんですが・・・
>>957 kadai1.exe を実行してたところ
学校だと標準でtimeコマンドが用意されてたりして。
960 :
デフォルトの名無しさん :01/12/11 17:34
>>958 プログラムが終了してしまってPress any key to continueと出るので
ボタン押したら消えてしまいます。
scanfを使うのですか?
962 :
デフォルトの名無しさん :01/12/11 17:37
965 :
デフォルトの名無しさん :01/12/11 17:46
1000get
#include <stdio.h> #include <math.h> main() { int i,j,k,m,n,na; float a[10][10],b[10],x[10],e,eps,dd,gb,gg,gx,es; scanf("%d",&n); for(m=1;m<=n;m++){ for(k=1;k<=n;k++){ scanf("%f",&a[m][k]); } scanf("%f",&b[m]); } gb=1;gx=1;es=1; na=400;eps=1.0e-7; for(m=1;m<=n;m++){ if(a[m][m]!=0){ x[m]=b[m]/a[m][m]; } else{ gb=0; } } for(i=1;i<=n;i++){ dd=0; for(j=1;j<=n;j++){ if(j!=i){ dd=dd+fabs(a[i][j]); } else{ } } if(fabs(a[i][i])>dd){ } else{ gx=0; } } if((gb==0)||(gx==0)){ printf("条件を満たさない"); } else{ printf("収束状態\n"); k=0; printf("回数:%d\n",k); for(m=1;m<=n;m++){ printf("x[%d]=%f\n",m,x[m]); }
while(es>eps){ k=k+1; e=0; for(i=1;i<=n;i++){ gg=b[i]; for(j=1;j<=i-1;j++){ gg=gg-a[i][j]*x[j]; } for(j=j+1;j<=n;j++){ gg=gg-a[i][j]*x[j]; } gg=gg/a[i][i]; e=e+fabs(x[i]-gg); x[i]=gg; } printf("回数:%d\n",k); for(i=1;i<=n;i++){ printf("x[%d]=%f\n",i,x[i]); } printf("E=%g\n",e); if(k>=na){ es=0; } else{ es=e; } } if(e<eps){ printf("根\n"); for(m=1;m<=n;m++){ printf("x[%d]=%f\n",m,x[m]); } printf("回数:%d\n",k); printf("E=%g",e); } else{ printf("収束しない\n"); } } }
次の連立方程式の解をガウス・ザイデル法で解けという問題で
>>966-967 の
プログラムを作ったのですが条件を満たさない≠ナ終了してしまいます。
何がおかしいのでしょうか?
式
5*(x1)+7*(x2)+6*(x3)+5*(x4)=23
7*(x1)+10*(x2)+8*(x3)+7*(x4)=32
6*(x1)+8*(x2)+10*(x3)+9*(x4)=33
5*(x1)+7*(x2)+9*(x3)+10*(x4)=31
970 :
デフォルトの名無しさん :01/12/11 19:05
main関数の二つめのscanfでBusエラーがでます。 よろしくお願いします。 #include<stdio.h> int *key; int *array[10]; int linear_search(int key) { int i,n; n=sizeof(array)/sizeof(int); for(i=0;i<n;i++){ if(*array[i]==key){ return i; } } return -1; } main() { int i,n; for(i=0;i<10;i++){ printf("input data>"); scanf("%d",&array[i]); } printf("input key>"); scanf("%d",&key); printf("%d",*array[1]); n=linear_search(*key); printf("index=%d\n",n); }
>>970 int *key;
int *array[10];
を
int key;
int array[10];
に
で、
printf("%d",*array[1]);
n=linear_search(*key);
を
printf("%d",array[1]);
n=linear_search(key);
に
In article
>>970 , デフォルトの名無しさん/970 wrote:
> main関数の二つめのscanfでBusエラーがでます。
そんなもん使うからだ。
>>968 入力を間違えてるんじゃない?
if((gb==0)||(gx==0)){
の前で、printfでa[][]の内容を全て表示させてみたら?
じゃあ、mainのすぐあとに、 key = malloc( sizeof( int ) ); for(i=0; i<(sizeof( array)/sizeof(int*)); i++) array[i] = malloc( sizeof( int ) ); とか入れて、 scanf("%d",&array[i]); とかを scanf("%d",array[i]); とかにすれば〜? #劣化したJAVAみたいな感じやな。
>>975 えーっとね、じゃあポインタとかの意味はわかってる?
だったら、まずポインタっていうのは場所を表しているのはわかる?
その指してる場所をintならint型のスペースとして保存しないと駄目。
これだと、ポインタ定義してるだけだから、そのポインタ自身はどこも
指してない。
だから、このプログラムは、scanfをする前に各ポインタ変数型ごとに
int型のスペースを作成して、その場所を指すようにする。で、その後、
scanf("%d",&array[i]);とかはscanf("%d",array[i]);みたいな形で読み
にいくわけ。
あえて正解書かないので、がんばってください。
ちょっと
こまってるんですけど・・ #include<stdio.h> main() { int a[100],i=0,x,s=0 ; while(scanf("%d",a)!=EOF){ i++; } for(x=0;x<i;x++){ scanf("%d",&a[x]); } for(x=0;x<i;x++){ printf("%d\n",a[x]); s+=a[x]; } printf("%d\n",s); } 配列要素の合計もとめたいんですけど 自分で作った上の奴では合計がでなくて困っています。 どなたか助けてもらえませんか。
>>979 うーん・・・、
どういう感じで入力を与えたいのかな?
何か入力で失敗している気するね、そのコード見てる限り。
でも、合計が出ないっていうことは、各要素についてはちゃんと出力
できてるのかな?
while(scanf("%d",a)!=EOF){ i++; } がおかしいんでない? while(scanf("%d",&a[i])!=EOF){ i++; } でいけるんかなあ。確認とれる状況じゃないのでごめん。
ああぁあできましたぁ!! そのとおりやれば合計でました。 レイサン、ななしさんありがとうございます。(^0_0^) ばかなんでi に気づきませんでした・・・。
>>982 解決したようなので、蛇足かもしれないけど
while (scanf("%d",&a[i])!=EOF){
i++;
}
と
for(x=0;x<i;x++){
scanf("%d",&a[x]);
}
は、どちらか一方書いときゃいいんじゃない?
while ... の方は配列のマックスを越える可能性が
ある一方、for の方は scanf の返り値をチェックし
てないので、どっちを残すかは迷うとこだけど(w
ああ、なんでループ二回も回してるのか分かった。 ひょっとして最初のループは要素数を数えてるの?
あぁ。そこなんですけど実は・・ そのあとにも課題があってその配列をソートする関数をつくらないと だめなんですよ。だから一応i で 要素数はわかるかなとおもって。 またそのへんが不安なんですが・・ どもありがとうございます。
つか、2個目のループの中のscanfは常に失敗するから意味なしだろ。 境界チェックを怠っていることと合わせて減点30
乗算のチューリングマシン教えてください。
>>987 なんか、ちょっと前にもマルチポストしてたね君。
わかんなくてさ。。。
In article
>>988 , デフォルトの名無しさん/sage/988 wrote:
>
>>987 > なんか、ちょっと前にもマルチポストしてたね君。
はつみみです。
992 :
デフォルトの名無しさん :01/12/12 00:56
ありがとうございます やっぱり2とか#使わないと無理ですかね?
>>990 加算はわかるので
それを繰り返すにはどうすればいいですか?
995 :
デフォルトの名無しさん :01/12/12 01:14
>やっぱり2とか#使わないと無理ですかね? そんなことか。区切り文字以外に 0-9もつかって十進掛け算にせよ。
なぜ、
>>988 の書きこみにクサカベがレスしてるんだ。
ちょっと考えればわかりますね:)
999
--------終了---------
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。