5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

宿題見てやるよ

1 :デフォルトの名無しさん:01/10/23 20:55
カワイイ弟のために宿題を見てやろう。
ただし、「考え方」を教えてやるから「答え」は自分で見つけろよ。

麻衣スレ
http://piza2.2ch.net/test/read.cgi/tech/982853418/

952 :933(生徒):01/12/10 04:12
デバッグは一応終わりました…
ダミークラスつくるのはちょっと方針上あきらめました。
コンパイルが通ったやつです。
 ↓
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];

953 :生徒K:01/12/11 16:40
もうかれこれ2時間くらい迷ってます・・・

問1.
0から100万までの自然数をrand関数を使って50万個作りファイルに保存せよ。
(これはできた)

問2.
問1で作ったファイルを、選択ソート、挿入ソート、バブルソートをそれぞれ使って
ソートしてソート結果をファイルに出力せよ。
timeコマンドで実行時間を計測すること。

問2なんですが、ソートのやつは全部できたんですが、timeコマンドで実行時間を
計測する方法がわかりません。

使い方
time a.exe
としか説明がありません。

954 :生徒K:01/12/11 16:42

ちなみに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ライブラリより抜粋。

956 :デフォルトの名無しさん:01/12/11 17:05
>>953
timeで時間計測で悩むなよ・・・
やってみりゃわかるべ。
timeはa.exeの実行時間を測ってくれるだけだよ。

957 :生徒K:01/12/11 17:26
>>956

例えば僕のファイル名はkadai1.exeです。
time kadai1.exeと入力するんですよね?
それをどこに入力するのかわからないんですが・・・

958 :デフォルトの名無しさん:01/12/11 17:31
>>957
kadai1.exe を実行してたところ

959 :デフォルトの名無しさん:01/12/11 17:33
学校だと標準でtimeコマンドが用意されてたりして。

960 :デフォルトの名無しさん:01/12/11 17:34
>>953
ストップウオッチで測れば。

961 :生徒K:01/12/11 17:35
>>958

プログラムが終了してしまってPress any key to continueと出るので
ボタン押したら消えてしまいます。
scanfを使うのですか?

962 :デフォルトの名無しさん:01/12/11 17:37
>>962
再帰関数。

963 :デフォルトの名無しさん:01/12/11 17:39
>>961
DOS窓

964 :デフォルトの名無しさん:01/12/11 17:40
>>961は新スレには絶対来るな

965 :デフォルトの名無しさん:01/12/11 17:46
1000get

966 :名無し:01/12/11 18:11
#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]);
}

967 :名無し:01/12/11 18:12

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");
}
}
}

968 :名無し:01/12/11 18:23
次の連立方程式の解をガウス・ザイデル法で解けという問題で>>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

969 :_:01/12/11 18:51
>>966-967

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

971 ::01/12/11 19:11
>>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);


972 :Kusakabe Youichi:01/12/11 19:13
In article >>970, デフォルトの名無しさん/970 wrote:
> main関数の二つめのscanfでBusエラーがでます。

そんなもん使うからだ。

973 ::01/12/11 19:15
新規質問はこっちにね。
http://pc.2ch.net/test/read.cgi/tech/1007902384/l50

974 ::01/12/11 19:19
>>968
入力を間違えてるんじゃない?
if((gb==0)||(gx==0)){
の前で、printfでa[][]の内容を全て表示させてみたら?

975 :970:01/12/11 19:21
>>971,>>972

いや、ポインタ配列を使わないとだめなんです。

976 :デフォルトの名無しさん:01/12/11 19:31
じゃあ、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みたいな感じやな。

977 ::01/12/11 19:32
>>975
えーっとね、じゃあポインタとかの意味はわかってる?
だったら、まずポインタっていうのは場所を表しているのはわかる?
その指してる場所をintならint型のスペースとして保存しないと駄目。
これだと、ポインタ定義してるだけだから、そのポインタ自身はどこも
指してない。
 だから、このプログラムは、scanfをする前に各ポインタ変数型ごとに
int型のスペースを作成して、その場所を指すようにする。で、その後、
scanf("%d",&array[i]);とかはscanf("%d",array[i]);みたいな形で読み
にいくわけ。
 あえて正解書かないので、がんばってください。

978 :竹村さん:01/12/11 20:55
ちょっと

979 :竹村さん:01/12/11 21:00
こまってるんですけど・・
#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);
}
配列要素の合計もとめたいんですけど
自分で作った上の奴では合計がでなくて困っています。
どなたか助けてもらえませんか。

980 ::01/12/11 21:20
>>979
うーん・・・、
どういう感じで入力を与えたいのかな?
何か入力で失敗している気するね、そのコード見てる限り。
でも、合計が出ないっていうことは、各要素についてはちゃんと出力
できてるのかな?

981 :デフォルトの名無しさん:01/12/11 21:47
while(scanf("%d",a)!=EOF){
i++;
}

がおかしいんでない?

while(scanf("%d",&a[i])!=EOF){
i++;
}

でいけるんかなあ。確認とれる状況じゃないのでごめん。

982 :竹村さん:01/12/11 22:16
ああぁあできましたぁ!!
そのとおりやれば合計でました。
レイサン、ななしさんありがとうございます。(^0_0^)
ばかなんでi に気づきませんでした・・・。

983 :デフォルトの名無しさん:01/12/11 22:27
>>982
解決したようなので、蛇足かもしれないけど

while (scanf("%d",&a[i])!=EOF){
i++;
}



for(x=0;x<i;x++){
scanf("%d",&a[x]);
}

は、どちらか一方書いときゃいいんじゃない?
while ... の方は配列のマックスを越える可能性が
ある一方、for の方は scanf の返り値をチェックし
てないので、どっちを残すかは迷うとこだけど(w

984 :983:01/12/11 22:31
ああ、なんでループ二回も回してるのか分かった。
ひょっとして最初のループは要素数を数えてるの?

985 :竹村さん:01/12/11 22:36
あぁ。そこなんですけど実は・・
そのあとにも課題があってその配列をソートする関数をつくらないと
だめなんですよ。だから一応i で 要素数はわかるかなとおもって。
またそのへんが不安なんですが・・
どもありがとうございます。

986 :デフォルトの名無しさん:01/12/11 23:56
つか、2個目のループの中のscanfは常に失敗するから意味なしだろ。
境界チェックを怠っていることと合わせて減点30

987 : :01/12/12 00:39
乗算のチューリングマシン教えてください。

988 :デフォルトの名無しさん:01/12/12 00:50
>>987
なんか、ちょっと前にもマルチポストしてたね君。

989 : :01/12/12 00:52
わかんなくてさ。。。

990 :デフォルトの名無しさん:01/12/12 00:56
>>987
足し算を繰り返せばよい。

991 :Kusakabe Youichi:01/12/12 00:56
In article >>988, デフォルトの名無しさん/sage/988 wrote:

> >>987
> なんか、ちょっと前にもマルチポストしてたね君。

はつみみです。

992 :デフォルトの名無しさん:01/12/12 00:56
http://www.google.co.jp/search?q=cache:Nljhgee1AuQ:www.ic.kanagawa-it.ac.jp/yamamoto/applet.htm+%E4%B9%97%E7%AE%97%E3%80%80%E3%83%81%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%9E%E3%82%B7%E3%83%B3&hl=ja&ie=utf8

993 : :01/12/12 00:59
ありがとうございます

やっぱり2とか#使わないと無理ですかね?

994 : :01/12/12 01:13
>>990
加算はわかるので
それを繰り返すにはどうすればいいですか?

995 :デフォルトの名無しさん:01/12/12 01:14
>>994

for or while

996 :デフォルトの名無しさん:01/12/12 01:16
>やっぱり2とか#使わないと無理ですかね?
そんなことか。区切り文字以外に
0-9もつかって十進掛け算にせよ。

997 :デフォルトの名無しさん :01/12/12 01:17
なぜ、>>988 の書きこみにクサカベがレスしてるんだ。
ちょっと考えればわかりますね:)

998 :デフォルトの名無しさん:01/12/12 01:19
もう燃料切れです。こちらへどうぞ
http://pc.2ch.net/test/read.cgi/tech/1007902384/

999 :デフォルトの名無しさん:01/12/12 01:22
999

1000 :デフォルトの名無しさん:01/12/12 01:23
--------終了---------  

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

303 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)