C/C++の宿題は私におまかせくださいませ 23代目

このエントリーをはてなブックマークに追加
640639:04/05/31 02:47
ありゃ。1900 とかやるとおかしいな。ちょい修正。

#include <stdio.h>

int main()
{
int nowYear;
int nowCentury, nextCentury = 1;
int cntDownNextCentury;

printf("現在の西暦を入力してください\n");
scanf("%d", &nowYear);
if (nowYear%100 != 0)
{
nowCentury = nowYear/100+1;
cntDownNextCentury = 101 - (nowYear % 100);
}
else
{
nowCentury = nowYear/100;
--nowCentury;
cntDownNextCentury = 1;
}
nextCentury += nowCentury;
printf("現在の世紀は: %d 世紀\n次の世紀は: %d 世紀\n次の世紀まであと %d 年", nowCentury, nextCentury, cntDownNextCentury);
return 0;
}
641デフォルトの名無しさん:04/05/31 02:48
>>639
早速の対応ありがとうございます。助かりました。
642デフォルトの名無しさん:04/05/31 02:53
>>640 
わざわざ修正まで、どうもです。
>>640
紀元前は?
負の数を紀元前にでもしてけろ。面倒なのでコードはパス('A`)
645489:04/05/31 16:01
495さんには悪いんですがプログラムがわかりません。
当方、C言語をならったばっかの大学生なんで。

キーボードから入力された 8個の整数値を配列へ格納し、
値の大きい順に表示をするプログラムを作成せよ。

#include <stdio.h>

main()
{
int i, h,max ;
int a[8],b[8];

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

max = a[0];
for(h = 0; h < 8; h++ )
for(i = 0; i < 8; i++ ){
646489:04/05/31 16:02

if(a[i] > max)
{
max = a[i] && b[h] > a[i];
b[h] >= a[i] max;
b[h] = max;
max <= a[i] && max <= b[h-1];
}
}
printf("値の大きい順に表示\n");
printf("%d\n", max);



課題として配列を用いて作成するレポートです。
for文以下でa[i]、b[h]の配列で表示結果をだしたいのですがif文以下の条件式がよくわからないです。
あとprintfの内容とか。

どうすればいいでしょうか?

意味が分からない。a[] と b[] は何のための配列なのか、それぞれ詳しく説明しろ。
b[8] はいらない。

#include <stdio.h> 
main() { 
  int i, j, tmp; 
  int a[8];
  for(i = 0; i < 8; i++){ 
    printf("a[%d] = ", i); 
    scanf("%d",&a[i]);
    for(j = i; j > 0; j--){
      if(a[j] > a[j - 1]) {
        tmp = a[j];
        a[j] = a[j - 1];
        a[j - 1] = tmp;
      }
    }
  }
  printf("値の大きい順に表示\n"); 
  for(i = 0; i < 8; i++)
    printf("%d\n", a[i]);
  return 0;
}
649645:04/05/31 16:25
>>647 説明不足ですみません。a,bそれぞれわけようと思いました。
   b[h]がa[i]の最大値がより小さくa[i-1]より大きいとかやってるうちに
   わけわかんなくなって....

>>648 修正ありがとうございます。tmpやj--はどういういまいなんでしょうか?
新しい要素を取得するたびにバブルソートで大きい順に並べ替えている。
tmp はスワップのためのテンポラリ。
j-- はj の値のデクリメント。
651645:04/05/31 16:36
>>650 バブルソートですか。習ってないですけど教科書にありました。
   スワップはわかりません。どういったものでしょう?
   最後のreturnは繰り返しってことですか?
return 0は正常終了しますよって意味
if 節の後に else break; 入れたい。
定積分の値を台形則を用いて求める

という課題をやっているのですが下記のソースではコンパイルは通るものの
うまく動かないので、何が悪いのか分からず困っています。
使用しているコンパイラはborland c++5.5.1 for win32です。
どうかよろしくお願いします。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=68
>>654
コンパイルし直していないが、パッと見てわかる分だけ。
Cで ^ は累乗ではなく XOR を表わす。勘違いはBASICの影響か?
e=10^(-2); → e=10e-2;
(1+4*x-2)^(1/2) → sqrt(1+4*x-2)
ついでなので、一般に累乗を計算する時は pow 関数を使う。
656デフォルトの名無しさん:04/05/31 18:47
デバッグプリントくらいは覚えろよ。
あげてもた。スマン。
>651
swap
【名】 取り替え、交換(品)
【自動-1】 場所{ばしょ}[もの]を交換{こうかん}する

>tmp はスワップのためのテンポラリ
訳)変数tmpは(a[j]とa[j-1]の)値の入れ替えのために値を一時的に記録しておくためのもの
659デフォルトの名無しさん:04/05/31 20:46
#include <stdio.h>

int main(){
char *str="language";
char *cpy;
int i=0;
cpy=str;

while(*(str+i)!='\0'){
printf("%c",*(str+i));
i+=2;
}

i--;

while(*(str+i)<=*cpy)
printf("%c",*(str-2));


return 0;
}

languageをlnug(ひとつ飛ばし)と表示させた後、今度は逆から eaga
をポインタを使って表示させるプログラムのはずなのですが、上手にいきません。
どこが悪いのか教えていただけないでしょうか?
660659:04/05/31 20:47
スイマセン、上げてしまいました。
>>660
while(*(str+i)<=*cpy) 比較してる値はなんだと思う?

printf("%c",*(str-2)); どこをさしてると思う?
662659:04/05/31 21:01
*(str+i)
はstr[7]番目を指していると思います。
-2でcpyの1番目になるまでstr-2が続くと思ってやってましたが・・・
str[i]の値からどう引いて行くのか分からなかったので、-2を入れました。
デクリメントって知ってる?
while()の終了条件は何なのか、よく考えて書いてみれ。
665659:04/05/31 21:26
>>660,664
問題が分かりました。
助言どうもありがとうございます。
ファイルの中のそれぞれの図形文字(空白を含む)を数え、
その出現回数の一覧を出力するプログラムを作れ。
という問題が分かりません。
どなたか教えていただけないでしょうか?
またエスパー待ちかよ。
668デフォルトの名無しさん:04/05/31 22:37
図形文字とは?
>>666
「ヒストグラム」でググってみ
その昔、PC-9801というパソコンで(ry
僕にも、その問題が分かりません。
#include<stdio.h>
int main(void)
{
int month;
printf("何月ですか?:");
scanf("%d",&month);
switch(month){
case 3: printf("春です。\n"); break;
case 4: printf("春です。\n"); break;
case 5: printf("春です。\n"); break;
case 6: printf("夏です。\n"); break;
case 7: printf("夏です。\n"); break;
case 8: printf("夏です。\n"); break;
case 9: printf("秋です。\n"); break;
case 10: printf("秋です。\n"); break;
case 11: printf("秋です。\n"); break;
case 12: printf("冬です。\n"); break;
case 1: printf("冬です。\n"); break;
case 2: printf("冬です。\n"); break;
}
return(0);
}
何月ですか?:神無月
Segmentation Fault
674デフォルトの名無しさん:04/05/31 23:29
#include<stdio.h>
int main(void)
{
int month;
printf("何月ですか?:");
scanf("%d",&month);
switch(month){
case 3: printf("春です。\n"); break;
case 4: printf("春です。\n"); break;
case 5: printf("春です。\n"); break;
case 6: printf("夏です。\n"); break;
case 7: printf("夏です。\n"); break;
case 8: printf("夏です。\n"); break;
case 9: printf("秋です。\n"); break;
case 10: printf("秋です。\n"); break;
case 11: printf("秋です。\n"); break;
case 12: printf("冬です。\n"); break;
case 1: printf("冬です。\n"); break;
case 2: printf("冬です。\n"); break;
default: printf("そんな月ありませんよ!\n"); break;
}
return(0);
}
【出雲地方限定】
何月ですか?:神有月
Segmentation Fault
以下の文章をC言語で書けと言う問題なんですがうまく出来ないので先輩方の解答を教えてください。

1)N個の要素数をもつ整数型の配列array[N]と数値データの入った変数Xがある。
  配列arrayの中に変数Xと等しいものがあるかを調べる。等しいものがあればその個数を表示する。
2)N子の要素数をもつ整数型の配列array[N]gaある。この配列を逆順に入れ替える。

簡単なプログラムだと思うんですが厨房の私には少し分からない部分があるんでよろしくお願いします。
>>676
型が指定されていないのでとりあえずintにしておくが。

1)
int i,count = 0;
for(i=0;i<N;i++) if(array[N] == X) count++;
if(count > 0) printf("%d個あった\n",count);
else printf("見つからんかった\n");

2)
int i,temp;
for(i=0;i<N/2;i++) {
temp = array[i];
array[i] = array[N-i-1];
array[N-i-1] = temp;
}
>>677
先輩レスサンクスです!!
if(array[i] == X)じゃ?
揚げ足鳥スマソ
680677:04/06/01 01:15
>>679
いや、揚げ足ではなくて、ちゃんとした指摘。
もうねるぽ
>以下の文章をC言語で書けと

#include<stdio.h>
int main(void){
printf("1)N個の要素数をもつ整数型の配列array[N]と数値データの入った変数Xがある。\n");
printf("  配列arrayの中に変数Xと等しいものがあるかを調べる。等しいものがあればその個数を表示する。\n");
printf("2)N子の要素数をもつ整数型の配列array[N]gaある。この配列を逆順に入れ替える。\n");
return 0;
}

揚げ足取りとはこうやるのだ。
>>681
才能をひしひしと感じるw
あえてprintfつかうなら

#include<stdio.h>
int main(void){
printf("%s\n%s\n%s\n"
,"1)N個の要素数をもつ整数型の配列array[N]と数値データの入った変数Xがある。"
,"  配列arrayの中に変数Xと等しいものがあるかを調べる。等しいものがあればその個数を表示する。"
,"2)N子の要素数をもつ整数型の配列array[N]gaある。この配列を逆順に入れ替える。");
return 0;
}

だよな。
#include<stdio.h>
int main(void){
printf("%s",
"1)N個の要素数をもつ整数型の配列array[N]と数値データの入った変数Xがある。"
"  配列arrayの中に変数Xと等しいものがあるかを調べる。等しいものがあればその個数を表示する。"
"2)N子の要素数をもつ整数型の配列array[N]gaある。この配列を逆順に入れ替える。\n");
return 0;
}
で充分。
俺ならputs()を使う。
そりゃそうだ。
687654:04/06/01 10:31
>>655さん、 >>656さんありがとうございました。
完成させてからお礼をと一晩頑張ってみましたが未だに思い通りには動いてくれません_| ̄|○

が、大分近づいているように感じるのでもう少し悩んでみようと思います。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=69
688たすけて!!!:04/06/01 10:54
問題

1. 整数型配列 data 内の, data[0] から data[n-1] までの総和を返す関数 int sum(int data[], int n) を作れ.

2. 整数型配列 data 内の data[0] から data[n-1] までの値の中で,最大の値を返す関数 int max(int data[], int n) を作れ.

3. 整数型配列 data 内の data[0] から data[n-1] までの中で,2番目に大きな値をもつ要素の添字を返す関数 int secondBiggestIndex(int data[], int n) を作れ.

ただし,同じ値の要素が複数個ある場合には,添字の順序で早い方の要素の値がより大きいと見なす.このことにより,2番目の大きい要素,というものが一意的に定まる.次の具体例を参照のこと(2番目に大きいと見なされる要素を赤くしている).
{1, 2, 3, 2, 3, 3}   (三つある3は 3 > 3 > 3 と見なされる)
{1, 3, 2, 1, 2, 1}   (二つある2は 2 > 2 と見なされる)

そして,作った関数を用いて次の計算をして,その結果を求めよ.
すいませんわからないのでお願いします。
C言語でやってください。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=225