C/C++の宿題片付けます 130代目

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2009/10/15(木) 16:36:01
以下を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;
}
953デフォルトの名無しさん:2009/10/15(木) 17:10:14
>>952
> for(k=0; k<(n*(n-1))-1; k++) a[(n*(n-1))-1] = k;

意図が見えないが… a[] の添え字はこれで良いの?
※ a[k] = k じゃないの?
954デフォルトの名無しさん:2009/10/15(木) 17:16:30
変な数字になるのは>>953の言うとおりだけど、シャッフルのところもおかしいぞ。
lがn-1からだと配列全体をシャッフルできない。
955デフォルトの名無しさん:2009/10/15(木) 17:25:22
あ・・・そうですね。
直してみました。
しかしこれでも一つ変な数字がうまれてしまいます・・・。
というか、何故この変な数字がうまれるかが理解できない・・・。

#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;
}
956デフォルトの名無しさん:2009/10/15(木) 17:35:31
int a[n*(n-1)-1] は
a[0] 〜 a[n*(n-1)-2] までしか器がない
のに
シャッフル部でいきなり a[l] → a[n*(n-1)-1] の配列外の他所の数字を操作しようとしてる
957デフォルトの名無しさん:2009/10/15(木) 17:41:10
あー、だからよそから変な数字をひっぱってきてしまっていたんですね。
分かりやすい説明で馬鹿な脳ミソでも理解できました。早速直してみます。ありがとうございました。
958デフォルトの名無しさん:2009/10/15(木) 17:47:53
なんで素直に>754の通りにしとかないんだw
959770:2009/10/15(木) 17:52:50
お気に障ったなら申し訳ございません
どなたか>>926の解答を何卒よろしくお願いいたします。
960デフォルトの名無しさん:2009/10/15(木) 18:08:00
>>959
あ?謝ってさらに要求って馬鹿か?
961デフォルトの名無しさん:2009/10/15(木) 18:08:13
>>942
そうそう、単に楽しんでいるだけで、別に宿題貼る人のことなど考えておりません。
962デフォルトの名無しさん:2009/10/15(木) 18:40:03
それ以前に770の一問目、文字コード表の対応間違ってないか
俺の勘違いかもしれないけど
963デフォルトの名無しさん:2009/10/15(木) 18:59:29
>>962
合ってたよ
964デフォルトの名無しさん:2009/10/15(木) 23:48:05
age
965デフォルトの名無しさん:2009/10/16(金) 01:05:37
>>926
>>770
http://codepad.org/bGHxD3g1
第一引数:分類結果のファイル
このファイルの書式は >>841 にあわせています。
966965:2009/10/16(金) 01:48:05
忘れておりましたがコードは Shift-JIS: JIS X 0208 です。
967965:2009/10/16(金) 06:57:43
ん、>>965 はバグってますね。しばしお待ちを。
968965:2009/10/16(金) 07:15:02
勘違いしておりました。 >>965 は今のところ問題ないようです。
969770:2009/10/16(金) 13:37:36
>>965

ありがとうございます!動作確認後また連絡させていただきます。
970770:2009/10/16(金) 13:45:51
>>965
動作確認できました!本当にありがとうございました!
971770:2009/10/16(金) 14:22:38
お手数おかけして恐縮ですが、よろしければ簡単なプログラムの流れなど、
ご解説願えませんでしょうか?
972デフォルトの名無しさん:2009/10/16(金) 14:31:03
>>971
      ハ,,ハ
     ( ゚ω゚ )  お断りします
    /    \
  ((⊂  )   ノ\つ))
     (_⌒ヽ
      ヽ ヘ }
 ε≡Ξ ノノ `J
973770:2009/10/16(金) 14:40:15
>>972
了解しました。作成どうもありがとうございました。
974デフォルトの名無しさん:2009/10/16(金) 17:03:33
[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] その他の制限:特にありません
よろしくお願い致します。
975デフォルトの名無しさん:2009/10/16(金) 19:34:22
>>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です
977デフォルトの名無しさん:2009/10/16(金) 19:44:36
例の2行目、n0 12で合ってる?
978デフォルトの名無しさん:2009/10/16(金) 19:45:08
>>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;
}
979976:2009/10/16(金) 20:15:11
ごめんなさい。例の2行目、n0 12ではなくて
n1 12です。
980976:2009/10/16(金) 20:17:24
>>978でコンパイルをかけてみたら、
6行目構文エラー : ';' が ')' の前にありません。と出ました…
981デフォルトの名無しさん:2009/10/16(金) 20:30:14
>>980
コピペもできないのかよw
982976:2009/10/16(金) 21:22:02
とりあえず、コンパイルは通りましたが、
結果には
n1=36
としか出てきません
983デフォルトの名無しさん:2009/10/16(金) 21:31:24
おい・・・まさか、本当にコピペできない人か?
978見ながら1文字ずつ打ち込んでるんじゃないだろうな
984デフォルトの名無しさん:2009/10/16(金) 21:39:51
そのコンパイルすらワーニング無視してるだろw
985デフォルトの名無しさん:2009/10/16(金) 21:48:18
なるほど。セミコロン足りないからって
for(i=0;i++;)にしちゃったのね
986デフォルトの名無しさん:2009/10/16(金) 21:52:28
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9982.txt
[3] 環境
 [3.1] OS: Windows/vista
 [3.2] コンパイラ名とバージョン: Visual C++ 2008
 [3.3] 言語: C++
[4] 期限: 2009年10月22日
[5] その他の制限:txt内に書いてあるとおりに書いてくだされば。
よろしくお願いします
987デフォルトの名無しさん:2009/10/16(金) 21:56:51
>>976はプログラミングの最初歩からやり直せ・・・
988デフォルトの名無しさん:2009/10/16(金) 21:57:25
>>986
widthとheightって画像ファイル自体の幅と高さってことでおk?
989デフォルトの名無しさん:2009/10/16(金) 22:06:41
このスレで推奨してる
ビルド環境セットってなんかないの?
990デフォルトの名無しさん:2009/10/16(金) 22:07:41
ほぉ、コロンをコロッンと忘れてしまったのか
991デフォルトの名無しさん:2009/10/16(金) 22:17:55
>>989
別になくね。
回答者は好きなやつでやるし、出題者は学校で指定されてるだろうし。
992デフォルトの名無しさん:2009/10/16(金) 22:19:49
>>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

宜しくお願い致します。
994デフォルトの名無しさん:2009/10/16(金) 22:51:45
>>988
そうです。答えるのに遅れて申し訳ない。。
995デフォルトの名無しさん:2009/10/16(金) 22:59:40
>>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;
}
996976:2009/10/16(金) 23:51:49
コピペしたら、そういう風に出てしまって
997976:2009/10/16(金) 23:57:51
今コンパイルかけたら出たんですが、様子がおかしかったんですかね。
;;って2つ入れるのってOKなんですか?
998デフォルトの名無しさん:2009/10/17(土) 00:04:50
>>997
べつにいい

>>993
あんまりよく読んでないけど

/// 1
#include <iostream>
int main()
{
char c;
while (1) {
std::cin >> c;
c += 1;
std::cout << c << std::endl;
}
return 0;
}
999デフォルトの名無しさん:2009/10/17(土) 00:06:08
        まもなくここは 乂1000取り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )
1000デフォルトの名無しさん:2009/10/17(土) 00:06:30
>>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;
}
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。