以下をcygwinでコンパイルして実行すると変な数字の羅列が吐き出されてしまいます。 問題点等ありましたらご指摘ください。 #include <stdio.h> #include <stdlib.h> #define n 4 int main(void) { int k, l, l2, temp, a[n*(n-1)-1]; srand(time(NULL)); for(k=0; k<(n*(n-1))-1; k++) a[(n*(n-1))-1] = k; for(l=n-1; l>0; l--) { l2 = rand() / (RAND_MAX + 1.0) * (l + 1); temp = a[l2]; a[l2] = a[l]; a[l] = temp; } for(k=0; k<n*(n-1)-1; k++) printf("%d ", a[k]); return 0; }
>>952 > for(k=0; k<(n*(n-1))-1; k++) a[(n*(n-1))-1] = k;
意図が見えないが… a[] の添え字はこれで良いの?
※ a[k] = k じゃないの?
変な数字になるのは
>>953 の言うとおりだけど、シャッフルのところもおかしいぞ。
lがn-1からだと配列全体をシャッフルできない。
あ・・・そうですね。 直してみました。 しかしこれでも一つ変な数字がうまれてしまいます・・・。 というか、何故この変な数字がうまれるかが理解できない・・・。 #include <stdio.h> #include <stdlib.h> #define n 4 int main(void) { int k, l, l2, temp, a[n*(n-1)-1]; srand(time(NULL)); for(k=0; k<(n*(n-1))-1; k++) a[k] = k; for(l=n*(n-1)-1; l>0; l--) { l2 = rand() / (RAND_MAX + 1.0) * (l + 1); temp = a[l2]; a[l2] = a[l]; a[l] = temp; } for(k=0; k<n*(n-1)-1; k++) printf("%d ", a[k]); return 0; }
int a[n*(n-1)-1] は a[0] 〜 a[n*(n-1)-2] までしか器がない のに シャッフル部でいきなり a[l] → a[n*(n-1)-1] の配列外の他所の数字を操作しようとしてる
あー、だからよそから変な数字をひっぱってきてしまっていたんですね。 分かりやすい説明で馬鹿な脳ミソでも理解できました。早速直してみます。ありがとうございました。
なんで素直に>754の通りにしとかないんだw
959 :
770 :2009/10/15(木) 17:52:50
お気に障ったなら申し訳ございません
どなたか
>>926 の解答を何卒よろしくお願いいたします。
>>942 そうそう、単に楽しんでいるだけで、別に宿題貼る人のことなど考えておりません。
それ以前に770の一問目、文字コード表の対応間違ってないか 俺の勘違いかもしれないけど
964 :
デフォルトの名無しさん :2009/10/15(木) 23:48:05
age
966 :
965 :2009/10/16(金) 01:48:05
忘れておりましたがコードは Shift-JIS: JIS X 0208 です。
967 :
965 :2009/10/16(金) 06:57:43
ん、
>>965 はバグってますね。しばしお待ちを。
968 :
965 :2009/10/16(金) 07:15:02
勘違いしておりました。
>>965 は今のところ問題ないようです。
969 :
770 :2009/10/16(金) 13:37:36
>>965 様
ありがとうございます!動作確認後また連絡させていただきます。
970 :
770 :2009/10/16(金) 13:45:51
>>965 様
動作確認できました!本当にありがとうございました!
971 :
770 :2009/10/16(金) 14:22:38
お手数おかけして恐縮ですが、よろしければ簡単なプログラムの流れなど、 ご解説願えませんでしょうか?
>>971 ハ,,ハ
( ゚ω゚ ) お断りします
/ \
((⊂ ) ノ\つ))
(_⌒ヽ
ヽ ヘ }
ε≡Ξ ノノ `J
973 :
770 :2009/10/16(金) 14:40:15
>>972 了解しました。作成どうもありがとうございました。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): new と deleteを使ったプログラムの作成 人数、名前、点数を入力し、横棒グラフを表示するプログラムを作りなさい。 ただし、グラフは5点刻みとし、点数は0点から100点の範囲とする。 <実行画面> 人数 > 3 1人目の名前 > A 1人目の点数 > 80 2人目の名前 > B 2人目の点数 > 55 3人目の名前 > C 3人目の点数 > 95 名( 点 )| 50 100 --------+---------+---------+ A ( 80)|**************** B ( 55)|*********** C ( 95)|******************* 平均 77|*************** 以下の変数をmain関数内に定義し、new とdelete で動的にメモリを確保、解放する。 char* nameAr; // 名前の配列 名前は1文字(1バイト)とする int* markAr; // 点数の配列 int* barAr; // 棒グラフの長さの配列 [3] 環境 [3.1] OS:Windows XP [3.2] Visual Studio 2005 [3.3] 言語:C++ [4] 期限:2009/10/23 [5] その他の制限:特にありません よろしくお願い致します。
>>974 #include<iostream>
#include<iomanip>
using namespace std;
int main(void){
int num=0;
cout << "人数 > ";
cin >> num;
char *nameAr=new char[num];
int *markAr=new int[num], *barAr=new int[num];
for(int i=0;i<num;i++){
cout << i+1 << "人目の名前 > ";
cin >> nameAr[i];
cout << i+1 << "人目の点数 > ";
cin >> markAr[i];
barAr[i]=markAr[i]/5;
}
int sum=0;
cout << "名( 点 )|" << setw(10) << 50 << setw(10) << 100 << endl;
cout << setw(9) << setfill('-') << '+' << setw(10) << '+' << setw(10) << '+' << endl;
for(int i=0;i<num;i++){
cout << " " << nameAr[i] << "(" << setw(3) << setfill(' ') << markAr[i] << " )" << "|";
cout << setw(barAr[i]) << setfill('*') << "" << endl;
sum+=markAr[i];
}
int average=(sum*2+num)/num/2;
cout << "平均" << setw(4) << setfill(' ') << average << "|";
cout << setw(average/5) << setfill('*') << "" << endl;
delete [] nameAr;
delete [] markAr;
delete [] barAr;
}
976 :
デフォルトの名無しさん :2009/10/16(金) 19:37:57
ユーグリッドの互除法のプログラムを作っているんですが(C++) 1 入力をm0、n0(m0>=n0)とする 2 n0が0ならば、m0を出力して終了 3 m0がn0で割り切れればn0を出力して終了 4 m0をn0で割ったあまりをn1として、m1=n0とする。3に戻る 例 m0 48 n0 36 m1 36 n0 12 n1=12 #include <iostream> #include <cmath> using namespace std; int main() { までは行きますが… 出力→cout 入力→cinです
例の2行目、n0 12で合ってる?
>>976 #include<iostream>
using namespace std;
int main(void){
int m=48, n=36, t, i;
for(i=0;;i++)
{
cout << "m" << i << " " << m << " n" << i << " " << n << endl;
if(!(t=m%n)) break;
m=n;
n=t;
}
cout << "n" << i << "=" << n << endl;
}
979 :
976 :2009/10/16(金) 20:15:11
ごめんなさい。例の2行目、n0 12ではなくて n1 12です。
980 :
976 :2009/10/16(金) 20:17:24
今
>>978 でコンパイルをかけてみたら、
6行目構文エラー : ';' が ')' の前にありません。と出ました…
982 :
976 :2009/10/16(金) 21:22:02
とりあえず、コンパイルは通りましたが、 結果には n1=36 としか出てきません
おい・・・まさか、本当にコピペできない人か? 978見ながら1文字ずつ打ち込んでるんじゃないだろうな
そのコンパイルすらワーニング無視してるだろw
なるほど。セミコロン足りないからって for(i=0;i++;)にしちゃったのね
>>976 はプログラミングの最初歩からやり直せ・・・
>>986 widthとheightって画像ファイル自体の幅と高さってことでおk?
このスレで推奨してる ビルド環境セットってなんかないの?
ほぉ、コロンをコロッンと忘れてしまったのか
>>989 別になくね。
回答者は好きなやつでやるし、出題者は学校で指定されてるだろうし。
>>989 標準的なソースがコンパイル出来ればどれでも。
中にはバージョンやらサポートしていないものを
妙に毛嫌いする人もいるしね・・・Visual C++があればそれでも
構わないが。BCCを薦めると妙に噛み付く人がいるしw
あと使用しているOSにもよるし。UNIXなら標準搭載の
コンパイラを使えば良いしぃ〜。
993 :
デフォルトの名無しさん :2009/10/16(金) 22:35:07
[1] 授業単元:c言語 [2] 問題文 課題文1 文字を一文字入力して、文字コードが一個次の文字を表示するプログラムを作成せよ。 課題文2 文字を一文字入力して、入力文字が a-z の範囲のときのみ、次のアルファベットを表示すプログラムを作成せよ。 ただし、zを入力した場合は a を表示し、a-z以外の文字を入力した場合は入力した文字をそのまま表示すること。 例: aを入力 → b を出力 bを入力 → c を出力 zを入力 → a を出力 3を入力 → 3 を出力 $を入力 → $ を出力 Aを入力 → A を出力 課題文3 文字を一文字入力して、入力された文字が、英字の小文字であるか、英字の大文字であるか、数字であるか、それ以外の文字であるか判別して、判別結果を表示するプログラムを作成せよ。 [3] 環境 Windows, 言語:C++ [4] 期限:10/23 宜しくお願い致します。
>>988 そうです。答えるのに遅れて申し訳ない。。
>>976 #include <iostream>
using namespace std;
int main(){
int m=48, n=36, t, i;
while(m!=n)
{
cout << "m" << i << " " << m << " n" << i << " " << n << endl;
if(m>n) m-=n; else n-=m;
i++;
}
cout << "n" << i << "=" << n << endl;
}
996 :
976 :2009/10/16(金) 23:51:49
コピペしたら、そういう風に出てしまって
997 :
976 :2009/10/16(金) 23:57:51
今コンパイルかけたら出たんですが、様子がおかしかったんですかね。 ;;って2つ入れるのってOKなんですか?
>>997 べつにいい
>>993 あんまりよく読んでないけど
/// 1
#include <iostream>
int main()
{
char c;
while (1) {
std::cin >> c;
c += 1;
std::cout << c << std::endl;
}
return 0;
}
まもなくここは 乂1000取り合戦場乂 となります。 \∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!! ,,、,、,,, /三√ ゚Д゚) / \____________ ,,、,、,,, /三/| ゚U゚|\ ,,、,、,,, ,,、,、,,, ,,、,、,,, U (:::::::::::) ,,、,、,,, \オーーーーーーーッ!!/ //三/|三|\ ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ∪ ∪ ( ) ( ) ( ) ) ,,、,、,,, ,,、,、,,, ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧ ,,、,、,,, ( ) ( ) ( ) ( )
>>993 /// 2
#include <iostream>
int main()
{
char c;
while (1) {
std::cin >> c;
if ('a' <= c && c <= 'y') c += 1;
else if ('z' == c) c = 'a';
std::cout << c << std::endl;
}
return 0;
}
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。