- ベストアンサー
数値の多い順に別々の処理をする場合
例えば $a = int rand(100); $b = int rand(100); $c = int rand(100); $d = int rand(100); $e = int rand(100); $f = int rand(100); $z = 5; $y = 10; という風にして、$aの数値が一番多い時は「$z + $y」を、$bの数値が一番多い時は「$z - $y」を、と数値を多い順に変数の数だけ別々の処理をしたいときはどうすれば良いのでしょうか? 数日前から気になっていて、初心者なもんでif文やwhile文で地道に長いプログラムしか答えが思いつきません>_< 短くする方法などありましたらどなたか教えてくださいm(_ _)m
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- 配列の中身を入れ替える方法を教えてください
配列の中身を入れ替える方法をどなたかおしえてください。下のプログラムはちゃんと実行されるんですが、いまいち納得できません。 特に・・・↓↓ void sort(int a[]) { int x,y,z,min; for(x=0;x<10;x++) { min=x; for(y=x;y<10;y++) { if(a[min]>a[y]) { min=y; } } z=a[min]; a[min]=a[x]; a[x]=z; } } 上の部分でなぜfor文を2回使うのか?2回目のfor文のところはなぜ y=xなのか?0ではいけないのか?よくわかりません。一番最後の入れ替え作業のところは納得できたんですが、for文のところがよくわからないのでどなたか分かる方教えてください! #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <time.h> void sort(int a[]) { int x,y,z,min; for(x=0;x<10;x++) { min=x; for(y=x;y<10;y++) { if(a[min]>a[y]) { min=y; } } z=a[min]; a[min]=a[x]; a[x]=z; } } int main(int argc, char* argv[]) { int a[10],b,c; srand((unsigned)time(NULL)); for(b=0;b<10;b++) { a[b]=rand(); c=a[b]; printf("a[%d]=%d\n",b,a[b]); } sort(a); for(b=0;b<10;b++) { printf("小さい順a[%d]=%d\n",b,a[b]); } return 0; }
- 締切済み
- C・C++・C#
- 数値の大きい順にソート
数値の大きい順にソートするにはどのようにしたらよろしいでしょうか? 例えば、 @A = ("10","5","18","6","9"); という配列があるとします。 これを @B = sort @A; とすると、 10,18,5,6,9 となってしまいます。 これを 18,10,9,6,5 のように数値の大きい順に配列Bに代入したいのですが、どうしたらよいでしょうか?よろしくお願いします。
- ベストアンサー
- Perl
- マクロで数値の小さい順に並べたい。
マクロで数値の小さい順に並べたい。 すみません、教えてください。B列に数値が順不同で記述されているのですが、その数値をA列に数値の 小さい順に並べ変えたいと思っています。それを、マクロで記述する方法を教えて頂けませんでしょうか。
- ベストアンサー
- オフィス系ソフト
- Excelで指定数値内の計算
Excelで、ある計算を行ったときの計算結果が、ある数値範囲内にしたいというときに簡単な関数はあるでしょうか。 例えば、 y=x/5 ただし、y<2の場合はy=2、y>5の場合はy=5とする。 といったときに、 A列にxの値を入れていけば、B列にその答えが出るというようにしたいのです。 if文を使えばできることはわかりますが、もっと簡単な方法はないでしょうか。
- ベストアンサー
- オフィス系ソフト
- 参照による呼び出し
参照による呼び出しで3つの整数を大きい順に並び替えるという プログラムで、 #include<stdio.h> void change(int *x,int *y,int *z);/ main(){ int a,b,c; scanf("%d %d %d",&a,&b,&c); printf("入力データ:a=%d,b=%d,c=%d\n",a,b,c); change(&a,&b,&c); printf("入れ替え後:a=%d,b=%d,c=%d\n",a,b,c); return(0); } void change(int *x,int *y,int *z){ if(*x>*y){ *a=*x; *c=*y; } else{ *a=*y; *c=*x; } if(*z>*a){ *b=*a; *a=*z; } else if(*z>*c){ *b=*z; } else{ *b=*c; *c=*z; } } のように作ったのですが、zの値が一度も使われていないとエラーが 出てしまいます。どこをどう直せばいいか教えてください。 お願いします。
- ベストアンサー
- C・C++・C#
- こういう場合、どういうロジックにすればいいですか?
お世話になります。 引数(z)で数値を受け取り、それがAにある数値と一致すればBの値を 返すというようなことをやりたいのですが、 A B 10~20 0.1 20~50 0.5 ※このようなパターンが100列続く if文で(z <= 10 || z >= 20)といった感じで判定するのは かなり大変です・・・。 なにかよい方法はないでしょうか? よろしくお願いします。
- ベストアンサー
- Java
- 問題がとけません
以下の問題が解けません。 わかる方、教えていただけないでしょうか? ・キーボードから3整数を読み込み,小さい順に出力せよ。 ヒント------------------------------------------------- キーボードから読み込む変数をa,b,c,出力する変数をx,y,z(x<y<z)とするとよい かもしれない。 プログラムの構造は次のようになる。 #include <stdio.h> int main() { int a,b,c,x,y,z; scanf("%d%d%d",&a,&b,&c); ...//ここが本体 printf("%d %d %d\n",x,y,z); return 0; } もちろん,目的が達成されるなら,上の例のようにならなくても良い。
- ベストアンサー
- C・C++・C#
- セグメンテーション違反
穴掘り方というやり方で迷路を作っています。 とりあえずすこしだけ作ってみて実行したらセグメンテーション違反が起こってしまいました。 解説お願いします。 次のサイトを参考にしています。ttp://www.ced.is.utsunomiya-u.ac.jp/lecture/2009/prog/p3/kadai4/5.html #include<stdio.h> #include<stdlib.h> #include<time.h> #define A 51 #define B 51 /*51ラ51マスの迷路*/ void initialize(int *x,int *y,int map[A][B]); /*最初のステージ作成と座標決定*/ int dig(int *x,int *y,int map[A][B]); /*道を作る*/ int main(void) { int x,y; /*現在の座標*/ int map[A][B]; initialize(&x,&y,map); dig(&x,&y,map); map[1][0] = 2; map[A-2][B-1] = 2; for(y=0;y<B;y++){ for(x=0;x<A;x++){ if( map[x][y] == 0){ printf(" "); }else if( map[x][y] == 1){ printf("■"); }else if( map[x][y] == 2){ printf("..") ; } } printf("\n"); } } void initialize(int *x,int *y,int map[A][B]) { int i,h; for(i=0;i<A;i++){ for(h=0;h<B;i++){ map[i][h]=1; } } do{ *x=rand()%A; *y=rand()%B; }while(*x!=0 && *x!=A-1 && *y!=0 && *y!=B-1); } int dig(int *x,int *y,int map[A][B]) { int r,c,dx,dy,count=0; do{ r = rand()%4; switch(r){ /*道を進める方向を決める*/ case 0: dx = 0; dy = -1; break; case 1: dx = -1; dy = 0; break; case 2: dx = 0; dy = 1; break; case 3: dx = 1; dy = 0; break; } if(*x+dx*2 <= 0 || *y+dy*2 <= 0 || *x+dx*2 >= A-1 || *y+dy*2 >= B-1 || map[*x+dx*2][*y+dy*2] == 0){ c = 0; count++; if(count ==4){ /*4方向とも進めなかったらループを抜ける*/ break; } }else if(map[*x+dx*2][*y+dy*2] == 1){ map[*x+dx][*y+dy] = 0; *x = *x + dx*2; *y = *y + dy*2; c =1; } }while(c==0); }
- ベストアンサー
- C・C++・C#
- C言語の関数の仮引数の記述
関数の仮引数の( )の中に何の変数を書いたらいいかいまいちつかめていません。関数の実行文や、もしくはmain関数の呼び出し実行文とどんな互換性があってどの変数を書いていいかわからないので教えてください。一応わかる部分を少し書きますがたとえば、変数をコピーするint copy( int a, int b )ってゆーのがあるとすれば、bをaにコピーするために必要となる変数a、bを( int a, int b )と書けばいいと思うんですがどうでしょう?仮引数部分にはmain関数に返す値となる変数だけを書くとどうなるんでしょう? なんかわかりにくくてすいませんが、答えになってなくても関係することであれば返信ください。 あとコンパイラーはCygwinで、理解度はfor文やif文や関数、配列などの基本はだいたいOKです。ポインタとかその他の応用についてはわかりません。
- ベストアンサー
- C・C++・C#
- VBA と JIS Full BASIC
下のJIS Full Basic スタイルとだいたい同じようなコードを VBA で書いたのですが Z = Sqr(x^2 + y^2) のところでエラーが出ます。どこがおかしいのでしょうか。 Function gcd(a, b) Do While b <> 0 r = a Mod b a = b b = r Loop gcd = a End Function Rem 既約なピタゴラス数を求める Sub Pythagoras() LAST = 200 LAST = 200 For x = 1 To LAST For y = x + 1 To LAST Z = Sqr(x^2 + y^2) 'ここでコンパイルエラーが出る If Int(Z) = Z Then If gcd(x, y) = 1 And gcd(x, z) = 1 And gcd(y, z) = 1 Then Debug.Print x & ", " & y & ", " & z End If End If Next y Next x End Sub ---------------------------- JIS Full Basic スタイルのコード REM ピタゴラス数 FUNCTION gcd(a,b) DO WHILE b <> 0 LET r = MOD(a,b) LET a = b LET b = r LOOP LET gcd = a END FUNCTION LET LAST = 200 FOR x = 1 TO LAST FOR y = x + 1 TO LAST LET z = SQR(x^2+y^2) IF INT(z) = z THEN IF gcd(x,y) = 1 AND gcd(x,z) = 1 AND gcd(y,z) = 1 THEN PRINT x,y,z END IF END IF NEXT y NEXT x END
- ベストアンサー
- Visual Basic
お礼
自分が考えていたプログラムの1ランク上のご意見でとても分かりやすく勉強になりました^^ ここからまた自分なりに考えてみます。