トップページ⇒tech
1001コメント375KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
みなさま、ごきげんよう。
わからない宿題は私におまかせくださいませね。

【注意点】 -------------------------------------------------
・問題はしっかりと解いてもらう方にわかりやすいように
 問題文などの省きはやめ、エラーなどは適切に書きましょう
 全文を書いてしまうか、分かりやすくまとめましょう。

・後になって問題につけたしをするのはやめましょう。
 解いてもらっている方に失礼になってしまいます。
------------------------------------------------------------

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

【歴代スレは>>2-10】
0232仕様書無しさんNGNG
>>231
213だけど、どうがんばっても行数が収まらなかったんで、考え方だけ伝えておくよ。
構造体は、下のようになる。
struct TestScore {
double kokugo, suugaku, eigo;
};
XYZの三人だから、配列を使うのがいいだろ。struct TestScore students[3];
あとは各々配列と構造体要素にscanfでもなんでも使って代入、平均値計算しておわり。
構造体にdoubleをつかってるのは、平均値を管理するのにも使いたいから。
0233デフォルトの名無しさんNGNG
>>232
>>1のうpろだ使えばいいじゃん
0234仕様書無しさんNGNG
>>233
ああ、なるほどね。

>>231
ほれ。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=77
0235202NGNG
>>234
サンクス!
0236デフォルトの名無しさんNGNG
☆★☆★ 日本語プログラミング言語『ひまわり』 ☆★☆★

日本語で『こんにちはと、言う。』と入力すれば
ダイアログに『こんにちは』と出るプログラミング言語登場!!
PNGもサポートしてるので、かなりおすすめです!!
また、【『http://www.xxxx.xx/』を、『index.htm』へ、HTTPダウンロード。】
とすれば自動的にダウンロードできる優れ物です!!

↓日本語プログラミング言語『ひまわり』
http://hima.chu.jp/index.htm
↓日本語プログラミング言語『ひまわり』スレッド
http://pc5.2ch.net/test/read.cgi/tech/1083053283/l50
0237デフォルトの名無しさんNGNG
初心者でぜんぜんわからないのでお願いします。
計算しなさい。
1!
3!
7!
:
(2n+1)!
どうかお願いします。
0238デフォルトの名無しさんNGNG
>>237
それちょっとまえに答え出なかったか?
#include <stdio.h>
int factorial(int n)
{
/*このスレのどっかにあるから探せ。*/
}
int main(void)
{
int i, n;
scanf("%d", &n);
for (i = 0; i <= n; i++)
printf("%d! = %d\n", 2 * i + 1, factorial(2 * i + 1));

return 0;
}
0239デフォルトの名無しさんNGNG
int factorial(int i)
まあ引数がiになってるやつのほうが再帰使ってなくていいかな。
0240デフォルトの名無しさんNGNG
総て異なる自然数a,b,c,dについて
x=a^4+b^4=c^4+d^4を満たす組み合わせのうち
xが最小となるa,b,c,dを求めよ。

わかりません、教えてください。
0241デフォルトの名無しさんNGNG
>>195
コンパイラの互換性を良くした。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=78
0242デフォルトの名無しさんNGNG
Cのint型で
unsigned int で0〜4294967296
まで入るのはありますけど
0〜-4294967296まで入るのは無いんですか?
0243242NGNG
age
0244デフォルトの名無しさんNGNG
>>184
今号のCマガ見たら?
乱数使うけど迷路について載ってるよ
0245デフォルトの名無しさんNGNG
>>242
ー(マイナス)は自分で管理シロ!
0246デフォルトの名無しさんNGNG
うるう年は考えないで、月と曜日を入力すれば1ヶ月分のカレンダーが表示
されるプログラムがわかりません。for文を使ったりいろいろやってみましたが
ド初心者なものでやっぱりわかりません…。どなたかC言語の簡単でわかり易い
プログラムを教えてください!お願いします!

表示月を入力してください。 >5
1:日 2:月 3:火 4:水 5:木 6:金 7:土 >6
*** 5月 ***
日 月 火 水 木 金 土

↑一応ここまでできています…。
0247デフォルトの名無しさんNGNG
ここまで出来ています、ってネタを書き込んでいるのはいつも同じ人間か?
0248デフォルトの名無しさんNGNG
>>246
どうでもいいけど、問題の意味が分からない。
問題文は、全部書いて。
0249デフォルトの名無しさんNGNG
>>240
数学板へGO
0250246NGNG
抜けてました…。ごめんなさい! 問題文は
「表示する月とその月の1日の曜日を入力すると、1ヶ月分のカレンダーを表示する
プログラムを作りなさい。ただし、うるう年は考えないこととする。」 です。
0251名無しさん@お腹いっぱい。NGNG
>>240
とりあえず総当たりするしかないだろ。
0252デフォルトの名無しさんNGNG
http://www.asahi-net.or.jp/~uc3k-ymd/Sketch/Life/life01.html
上のリンク先の内容のことをCで書きたいんですけどよくわかりません。
教えていただけないでしょうか?
0253デフォルトの名無しさんNGNG
>>246
#include <stdio.h>
#include <stdlib.h>
#define BUFSIZE 256
main(){
  int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
  int month, start, i;
  char buf[BUFSIZE];
  fputs("表示月を入力してください。  >", stdout);
  if(NULL == fgets(buf, BUFSIZE, stdin)) return 1;
  month = atoi(buf);
  if(month < 1 || month > 12) return 1;
  fputs("1:日 2:月 3:火 4:水 5:木 6:金 7:土 >", stdout);
  if(NULL == fgets(buf, BUFSIZE, stdin)) return 1;
  start = atoi(buf);
  printf("*** %d月 ***\n日  月  火  水  木  金  土\n", month);
  for(i = 0; i < 4 * (start - 1); i++) putchar(' ');
  for(i = 0; i < days[month - 1]; i++){
    printf("%2d  ", i + 1);
    if((start + i) % 7 == 0) putchar('\n');
  }
}
0254デフォルトの名無しさんNGNG
#include <stdio.h>
int main(void){
int i, m, d;
int cal[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
printf("表示月を入力してください。>"); scanf("%d", &m);
printf("1:日 2:月 3:火 4:水 5:木 6:金 7:土 >"); scanf("%d", &d);
printf("\n日 月 火 水 木 金 土\n%*s", (d - 1)*3, "");
for (i = 0; i < cal[m]; i++){
printf("%2d ",i + 1);
if ((d++) % 7 == 0) puts("");
}
return 0;
}
0255253NGNG
ごめん、ちと訂正+α
#include <stdio.h>
#include <stdlib.h>
#define BUFSIZE 256
int main(){
  int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
  int month, start, i;
  char buf[BUFSIZE];
  fputs("表示月を入力してください。  >", stdout);
  if(NULL == fgets(buf, BUFSIZE, stdin)) return 1;
  month = atoi(buf);
  if(month < 1 || month > 12) return 1;
  fputs("1:日 2:月 3:火 4:水 5:木 6:金 7:土 >", stdout);
  if(NULL == fgets(buf, BUFSIZE, stdin)) return 1;
  start = atoi(buf);
  if(start < 1 || start > 7) return 1;
  printf("*** %d月 ***\n日  月  火  水  木  金  土\n", month);
  for(i = 0; i < 4 * (start - 1); i++) putchar(' ');
  for(i = 0; i < days[month - 1]; i++){
    printf("%2d  ", i + 1);
    if((start + i) % 7 == 0) putchar('\n');
  }
  return 0;
}
0256246NGNG
>>253,254様
助かりました…。本当にありがとうございます!
0257超超初心者NGNG
超初心者の大学生ですが、配列a,bの和を出そうとすると変な値が出て
しまうんですが、手詰まり状態です。誰か助けてくれませんか?
「単精度実数型の配列aを四行三列で宣言します。各要素の値は、行と
列の和とします。たとえば2行3列は2+3=5とします。もう一つ、
別の配列bを宣言します。こちらの要素は、m行n列の場合、nーmと
します。まず、二つの配列を表示し、その後、二つの配列の和を表示します。表示するときは、小数点以下2桁まで表示します」
0258デフォルトの名無しさんNGNG
変な値って?
0259デフォルトの名無しさんNGNG
>>257
コードだせ!
0260デフォルトの名無しさんNGNG
行列の計算がわかっていない悪寒。
0261超超初心者NGNG
行列自体はもち、わかるんですけど
sumがどうのこうのがわからんのです
0262デフォルトの名無しさんNGNG
お前の言ってることが分からん。
0263デフォルトの名無しさんNGNG
>>261
超能力者が現れるのを待つか、わかりやすく説明してください。
0264超超初心者NGNG
申し訳ございません
0265デフォルトの名無しさんNGNG
標準入力からカンマ区切りの整数値を入力として受け取るコードをscanf
で作りたいのですが下のプログラムではどのように書いたらよろしいのですか?
超初心者なので教えて下さる方おねがいします
int main()
{
int a[50];
int n;
int i;

scanf("%d")

for(i = 0;i < n; ++i){
printf("a[%d] = %d\n",i,a[i]);
}
0266デフォルトの名無しさんNGNG
scanf("%d"); て、あんた・・。
Cの教科書とか無いのか?
0267名無しさん@お腹いっぱい。NGNG
>>257
おおかた、配列どうしの和を計算するのに、
配列名どうしを加算してんだろ。
double aa[4][3], bb[4][3];
aa + bb;
みたいに。
0268デフォルトの名無しさんNGNG
scanf使いたくねーな。。。
#include <stdio.h>
int main(void)
{
int a[50], n = 5, i;
for(i = 0;i < n; ++i) scanf("%d,", a + i);
for(i = 0;i < n; ++i) printf("a[%d] = %d\n", i, a[i]);
return 0;
}
0269デフォルトの名無しさんNGNG
最後に指定された回数分、それまでの文字列を繰り返し表示し、"quit"が
入力されるまで継続するプログラム作りたいのですが、初心者でわかりません。
(例)
% a.out
prom> xxxx 3
xxxx
xxxx
xxxx
prom>xxx yyy zzz 5
xxx yyy zzz
xxx yyy zzz
xxx yyy zzz
xxx yyy zzz
xxx yyy zzz
prom> quit
%

prom>は自分で表示させます。
教えてくださる方お願いします。
0270超超初心者NGNG
>>267
a[4][3]+b[4][3];みたいなことしていました
どうもすみません

0271デフォルトの名無しさんNGNG
>>267 はよく分かったな。すげーよ。
0272デフォルトの名無しさんNGNG
#include <stdio.h>

int factorial(int i)
{
int j,k=1;
for(j=1;j<=i;j++)
k*=j;
return k;
}

int main()
{
unsigned int n,i;
printf("1!,3!,・・・+(2n+1)!を求める。\nnを入力 : ");
scanf("%d",&n);
for(i=1;i<=2*n+1;i+=2)
printf("%d! = %d\n",i,factorial(i));
return;
}

これでnに8をいれるとマイナスの値が出るのは何ででしょうか?
違うところの指摘をお願いします。
0273デフォルトの名無しさんNGNG
>>270
ソース全部書いてよ。長かったら>>1のところにでも。
0274名無しさん@お腹いっぱい。NGNG
>>272
n=8ってことは、17!でしょ?
桁あふれ。
0275デフォルトの名無しさんNGNG
>>272
オーバーフロー。int型で計算できる範囲を超えている。
0276デフォルトの名無しさんNGNG
ありがとうございます!!
あと、それを使って、標準入力からカンマ区切りの整数値を入力として受け取り(入力終了はEOF),
大きい方から順にカンマ区切りで標準出力に出力するプログラムを作成せよという問題
なのですが、ただ、配列に入るだけになってしまいます。どうすれば改善されるのでしょうか?
#include <stdio.h>
void shellsort(int[],int );
int main()
{
int a[50];
int n=10;
int i;

for(i = 0;i < n; ++i) scanf("%d,", a + i);
for(i = 0;i < n; ++i) printf("a[%d] = %d\n", i, a[i]);
shellsort(a,n);
return 0;
}
void shellsort(int v[], int n)
{
int gap, i, j, temp;
for(gap = n/2; gap > 0; gap /= 2)
for(i = gap; i<n; i++)
for(j=i+gap; j >= 0 && v[j]<v[j+gap]; j+=gap) {
temp = v[j];
v[j] = v[j+gap];
v[j+gap] = temp;
return ;
}
}
0277IEEE規格のによる実数表現NGNG
長さが32の0と1の列  se7e6e5・・・e1e0d1d2d3・・・d23 を入力して、このビット列を表す実数値(実数表現の
仕方はIEEE規格754に従うものと仮定する)
          (−1)のs乗×(1+M)×2のE乗  if −127<E<128
      {   (−1)のs乗×M×2の(E+1)乗  if E=−127
          Inf(無限大)              if E=128、M=0
          NaN(非数、Not a Number)        if E=128、M≠0   

ここで、M=煤ii=1から23)di×2の−i乗、E=煤ii=0から7)ei×2のi乗−127

を出力するCプログラムを作成せよ。なおその際pow関数は使わず作れ。


という問題です。見にくいですがどうかお願いします。
0278デフォルトの名無しさんNGNG
cに_tempnamってのがあるけど、
c++に対応するものってないのかな?
_tempnamはmallocで確保した領域を返すから
freeで開放しなくちゃだめ。
c++のコードに突然freeが出てきてちょっとやだ。
0279デフォルトの名無しさんNGNG
>>269
#include <stdio.h>
#include <string.h>
int main(void){
int i, num;
char buf[128], str[100];
for(;;){
printf("prom>");
fgets(buf, sizeof buf, stdin);
if (sscanf(buf, "%s %d", str, &num) != 2){
if (!strcmp(str, "quit")) break;
else continue;
}
for (i = 0;i < num; i++) puts(str);
}
return 0;
}
0280279NGNG
あ、すまんこれじゃだめだ。
0281名無しさん@お腹いっぱい。NGNG
>>279
それだと、%sは空白をデリミタにするからまずくない?
0282デフォルトの名無しさんNGNG
>>269
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define BUFSIZE 256
main(){
  char buf[BUFSIZE], *p;
  int i, n;
  for(;;){
    printf("prom> ");
    fgets(buf, BUFSIZE, stdin);
    if(!strcmp(buf, "quit\n")) break;
    for(p = buf + strlen(buf) - 1; ;p--){
      if(p == buf){break;}
      else if(!isdigit(*p) && !isspace(*p)){p++;break;}
    }
    n = atoi(p);
    *p = '\0';
    for(i = 0; i < n; i++) printf("%s\n", buf);
  }
}
0283デフォルトの名無しさんNGNG
>>278
それは,CじゃなくPOSIX(UNIX規格)。
あきらめろ。
0284282NGNG
バグってた。文字列が1文字のときに何も表示されない。
0285282NGNG
こうかな。センスねーなー。美しくない。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define BUFSIZE 256
main(){
  char buf[BUFSIZE], *p;
  int i, n;
  for(;;){
    printf("prom> ");
    fgets(buf, BUFSIZE, stdin);
    if(!strcmp(buf, "quit\n")) break;
    for(p = buf + strlen(buf) - 1; ; p--){
      if(!isdigit(*p) && !isspace(*p)){
        p++;
        break;
      }
      else if(p == buf){
        break;
      }
    }
    n = atoi(p);
    *p = '\0';
    for(i = 0; i < n; i++) printf("%s\n", buf);
  }
}
0286282NGNG
ああ、重大なバグを見つけちゃった・・。もう止めときます。スレ汚し失礼しました・・・
0287184NGNG
質問してる本人が亀レスですみません。
>>208
棒倒し法ですか 自分もこれで作成したのですが
伸ばしていこうとした所に すでに壁があった場合 残りの場所に
置く方法がいまいち分かりません ソース見たのですが 結構知らない文とかもあって難しいです・・・
自分はこんな風にしたんですが・・・ これで一応正解は一通りになるんですが なんかいまいちな気がして

ransu=rand()%3;
switch(ransu)
{
case 0:
   if(map[i-1][j]!=1){
      map[i-1][j]=1;
      break;
   }
case 1:
   if(map[i+1][j]!=1){
      map[i+1][j]=1;
      break;
   }
case 2:
   map[i][j+1]=1;
   break;
}

また、ルールの関係上 正解ルートは1本じゃないほうがいい気もしますし
どう思われますか?

また 探索の方もいまいちわかりません どんなアルゴリズムなのですか?
今 再起でやってるんですが 再起だと処理時間遅いですかね?

どうかお時間ある方はちょっと考えてみてもらえませんか?
0288デフォルトの名無しさんNGNG
>>276
入力終了EOFでカンマ区切りってのがよくわからんな。
1,
3,
こういうふうに入力するってことか?
あとそのシェルソートはおかしくないか?
0289デフォルトの名無しさんNGNG
>>277
どなたかどうかお願いします!!
0290デフォルトの名無しさんNGNG
計算しなさい。
1+(1+2)2乗×2+(1+2+3)2乗×3+・・・+(1+2+・・・+n)2乗×n
見にくくてすみません。
初心者でよくわからないのでお願いします。
0291279NGNG
>>269
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void){
int i, num;
char buf[128], *p = buf, *q = buf;
for(;; p = buf, q = buf){
printf("prom>");
fgets(buf, sizeof buf, stdin);
while(*++p != '\n') if(isspace(*p)) q = p;
if (sscanf(q, "%d", &num) != 1){
if (!strcmp(buf, "quit\n")) break;
else continue;
}
*q = '\0';
for (i = 0;i < num; i++) puts(buf);
}
return 0;
}
0292名無しさん@お腹いっぱい。NGNG
>>289
もう寝るから、明日のお昼前でいいならうpするよ。
0293デフォルトの名無しさんNGNG
>>292
お願いします!!
0294デフォルトの名無しさんNGNG
>>290
#include <stdio.h>
int siguma(int n){
int i, sum = 0;
for (i = 1; i <= n; i++) sum += i;
return sum;
}
int main(void){
int sum = 0, n, i;
scanf("%d", &n);
for (i = 1; i <= n; i++) sum += siguma(i) * siguma(i) * i;
printf("%d", sum);
return 0;
}
0295デフォルトの名無しさんNGNG
>>289
そういう捨て台詞はもっとマンドクサーな奴に残せよ(藁

>>293
#include <stdio.h>
int main() {
int n;
enum { S=24, E=8 };
double s=0;
int e=0;
char buf[S+2];
fgets(buf,sizeof(buf),stdin);
for(n=0;n<E;++n){ e += (buf[n]=='1')*(1<<(E-1-n)); }
for(n=0; n<S; ++n){ s += (buf[n+E]=='1')*1.0/(1<<n); }
for(n=0; n<((1<<(E-1)-1); ++n) s /= 2;
for(n=e; n>0; --n) s *= 2;
printf("%e\n", s);
}
0296295NGNG
あ,マズー。訂正。レス番も間違えてるし。
鬱だ…

#include <stdio.h>
int main() {
int n;
enum { S=24, E=8 };
double s=0;
int e=0;
char buf[E+S+2]; //←訂正
fgets(buf,sizeof(buf),stdin);
for(n=0;n<E;++n){ e += (buf[n]=='1')*(1<<(E-1-n)); }
for(n=0; n<S; ++n){ s += (buf[n+E]=='1')*1.0/(1<<n); }
for(n=0; n<((1<<(E-1)-1); ++n) s /= 2;
for(n=e; n>0; --n) s *= 2;
printf("%e\n", s);
}
0297デフォルトの名無しさんNGNG
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=66
↑のソースなのですがちゃんと動かすにはどこを修正すればよいでしょうか・・・
0298デフォルトの名無しさんNGNG
>297
素直に作り直した方がよさげ
ストライク、スペアは"次の"フレームが必要だが、それを考慮してないし
0299デフォルトの名無しさんNGNG
>>298
一応考慮してあるようだよ。

>>297
とは言うものの、ストライク取ったフレームの点数は確定するまでは表示しない方がいい。
それに、ストライクのときに10/0を入力させるのも今一つ使い勝手が悪い。
先に全部入力させて、計算は後からにすればストライク/スペア周りの処理がすっきるするのでは?
途中経過を表示するのはそれができてから改めて作ればいい。
0300184NGNG
ファイルに記録してある迷路を解くプログラムを以下のようにつくりました
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=79
今 ゴールできるすべての経路を表示するようにしてあります
今 このなかで最短経路の道順にだけ配列の値を0→4にしたいのです
配列に正解経路にだけ4を格納したら もう すべての経路を表示させる必要はなく
マップの横 縦の幅と 正解ルートに4を格納したマップを出力するだけでいいです
5 5
1 1 1 1 1
2 4 4 4 1
1 0 1 4 1
1 0 1 4 3
1 1 1 1 1
この方法を考えていただけませんか?

ちなみにマップを作るプログラムはこれです
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=80

両方とも実行時にコマンドプロンプトでファイルに入出力します。
0301デフォルトの名無しさんNGNG
>>300
問題のソースは、これでいいかな?
http://www.isse.kuis.kyoto-u.ac.jp/acm-japan/icpc99/problems/ant/ant.html
0302184NGNG
連投 すみません
さきほどの解くほうのプログラム
if(sucs==1)
    map[tate][yoko]=4;
if(map[tate][yoko]==5)
    map[tate][yoko]=0;

は要らないですね 消してください。
また現在のプログラムだと 迷路が大きくなりすぎると
pathの値が大きくなりすぎためか 実行できなくなります
どうすればいいのでしょうか お願いします 助けてください。
0303184NGNG
>>301
すみません 英語読めません
問題の元のテキストはこれです
http://49uper.com:8080/img-s/1874.jpg
http://49uper.com:8080/img-s/1875.jpg
0304184NGNG
まず迷路のすべての経路をこのプログラムで計算すると
多くなりすぎる気がするんですよね 迷路を 39×39
なんかにするだけでも pathすごい数いくし・・・
実際にはもと大きい迷路も扱うんです それこそ100超えるようなものも・・・
あ ちなみに迷路は正方形とはかぎりません 奇数×奇数なら長方形もありえます
あと もう学校行かないと行けないんです また昼ごろ顔出します
実はこれ今日提出なんで結構やばいのですが
0305デフォルトの名無しさんNGNG
ファイル入力でt[]を読み込み、その変数の値をプリント文で表示させると言った
プログラムなんですが、
#include<stdio.h>
void main(){double t[N];int nt=4;nt=4;
FILE *in;
in=fopen("ファイル場所","r");
if(in=NULL) printf("ファイルが見つかりません。パスを確認して下さい。\n");
else{for(i=1;i<=nt;i++) fscanf(in,"%lf",&t[i]);}
fclose(in);}
といった風にプログラム打ったんですけど、
未定義のシンボル N、おそらく不正な代入、未定義のシンボル i、'nt' に代入した値は使われていない
とエラーが出て、もうどうすればよくわからないんです。
どどうすればいいのか教えてほしいです、お願いします。
0306デフォルトの名無しさんNGNG
#include<stdio.h>
#define N 5
void main(){double t[N];int i,nt=4;;
FILE *in;
in=fopen("ファイル場所","r");
if(in=NULL) printf("ファイルが見つかりません。パスを確認して下さい。\n");
else{for(i=1;i<=nt;i++) fscanf(in,"%lf",&t[i]);}
fclose(in);}
0307デフォルトの名無しさんNGNG
> if(in=NULL)
これも直せ
0308仕様書無しさんNGNG
>>277
はい。結果が合ってるかどうか知らん&結果の出し方がこれでいいのかもわからんけど。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=81
0309デフォルトの名無しさんNGNG
宿題を丸投げする奴は氏ね。
はっきりいって、生きている価値なし。
いや、肉体労働やって、税金や年金は納めてもらおうかな。
俺のために働けや、虫けらども。
0310デフォルトの名無しさんNGNG
>>309
宿題丸投げスレで(ry
0311仕様書無しさんNGNG
>>309
そういうスレだしな。
ここでもらった回答を参考に、自分でカスタマイズしたり作り直したりすればいいと思う。
0312デフォルトの名無しさんNGNG
>>311
おまえ、いい奴だな。
0313デフォルトの名無しさんNGNG
>79 (迷路)
passの値は全く問題ない。
時間がかかるのは組み合わせ爆発と、同じルートの繰り返しによる。
試しに、壁の全く無い大部屋を通らせてみ。小さいものでもハマると思う。

ソースの美しさに欠けるが一応書いてみた。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=82
迷路に印をつけながら進んで、最後に逆から辿る、いわゆるパンくず法。
cleanupの前にオリジナルのoutputを実行すると何をやってるか分かると思う。
0314313NGNG
79…ソース貼り付け掲示板のレス番書いてどうするorz
>313 は >184宛て。
0315デフォルトの名無しさんNGNG
#include <stdio.h>

int main(){
struct game{
int win[6],lose[6],draw[6];
};
struct game gm={
68,52,75,78,60,63,
65,77,59,54,73,70,
2,4,1,3,2,2
};

int i,avr[7];

for(i=0;i<=6;i++)
avr[i]=(gm.win[i]/((gm.lose[i]+gm.draw[i])-gm.draw[i]));

for(i=0;i<=6;i++)
printf("%c : %f\n",'a'+i,(float)avr[i]);

return 0;
}

構造体に関しての質問なのですが、
7つのチーム(a〜f)の勝数、負数、引き分け数を

勝率=勝数/全試合-引き分け数

の式で計算し、各チームの勝率を求めるプログラムなのですが、
↑のプログラムだと上手くいきません、、、
何方かどこが悪いのか教えていただけないでしょうか?
0316デフォルトの名無しさんNGNG
構造体の意味がないんだけど。。。
0317デフォルトの名無しさんNGNG
>>315
なんか釣りっぽいけど。
・int / int は int だ
・(float)8 が 7.7 になるようなことはない
0318デフォルトの名無しさんNGNG
>>315
>struct game{
>int win[6],lose[6],draw[6];
>};

どう見ても6つしかない訳だが…
0319仕様書無しさんNGNG
>>318
まあ、初心者にありがちなわけだよ。
「Cでは0から数えはじめる」と習うので、7つ必要なら6と宣言してしまう。
変数の型というのも理解できない。整数→実数への自動変換があると考えている。
「プログラムに書いたことがすべて」ということを理解していなくて、「そのへんはうまいこと勝手にやってくれるんじゃないかな。Windowsなんだし」とか意味不明な期待をする。
0320デフォルトの名無しさんNGNG
#include < iostream.h>
struct siken{
char simei[20];
int sugaku, buturi, eigo, gokei;
};
siken input_data( void);
void output_data( siken);
void main( void)
{
siken data[100];
int n, i;
cout << "何人入力しますか"; cin >> n;
if ( n <= 100){
i=0;
while( i < n){
data[i] = input_data();
i++;
}
i=0;
while( i< n){
output_data( data[i]);
i++;
}
}
}
0321320NGNG
siken input_data( void){
siken data;
cout << "名前"; cin >> data.simei;
cout << "数学の点数"; cin >> data.sugaku;
cout << "物理の点数"; cin >> data.buturi;
cout << "英語の点数"; cin >> data.eigo;
data.gokei = data.sugaku + data.buturi + data.eigo;
return ( data);
}
void output_data( siken data){
cout << "名前:" << data.simei << endl;
cout << "数学の点数" << data.sugaku << endl;
cout << "物理の点数" << data.buturi << endl;
cout << "英語の点数" << data.eigo << endl;
cout << "合計" << data.gokei << endl;
}
0322320NGNG
(1) 上記のプログラム、構造体siken に学籍番号を追加しよう.メンバ名は,gakuseki とし,大きさ8 の文字配列とす
ること.上記 で作成したプログラムを,学籍番号が入った新しい構造体で動くように修正する
こと.
(2) (1)で作成した構造体を使用して,入力したすべてのデータを学籍番号の昇順に出力する次の仕様
の関数を作成し,プログラムを実行せよ.
(注意)学籍番号には数字だけでなく文字も含まれる場合がある.
(3) 各科目の平均点を計算する次の仕様の関数を作成し,プログラムを実行せよ.
double average_data(int sw, siken data[], int n);
第1 引数:sw が1 ならば数学,2 ならば物理,3 ならば英語,
4 ならば合計 の平均点を求める.
第2 引数:siken 型の配列
第3 引数:配列の全要素数
戻り値:各教科の平均点(倍精度実数型)
(4) 各人の合計点の偏差値を求めて,全員の偏差値を出力する次の仕様の関数を作成し実行せよ
void deviation_data( siken data[], int n);
第1 引数:siken 型の配列
第2 引数:配列の全要素数
戻り値:なし
0323320NGNG
という問題なのですが、
よろしくお願いします。

長々としている上に見づらくて申し訳ないです。
0324デフォルトの名無しさんNGNG
#include <stdio.h>

int main(){
  struct game{
  int win,lose,draw;
 } gm[] = {
  {68,52,75}, {78,60,63},
  {65,77,59}, {54,73,70},
  {2,4,1}, {3,2,2}
 };

 int i;
 for (i=0;i<6;i++) 
  printf("%c : %f\n",'a'+i,(double)gm[i].win/(gm[i].lose+gm[i].win));
 return 0;
}
struct game {...} とstruct game gmの2つはこういう風にまとめられる。
int win[6], lose[6],draw[6]だと>>316の言う通り構造体の意味がない。
チームのデータを1つの変数として扱うための構造体がある。それをA〜Fでまとめて扱うんでgmを配列にするってイメージで。
さらに定義と同時に初期化すればこのように最外周の配列に限り要素数を省ける。(これは文章の7つ、A〜Fの6つ、どっちでもいいようにw)
avrは直接printfの引数に勝率計算の式を書いたんで消滅。
ところで全試合-引き分け数==勝ち数+負け数だろ。ここ間違ってどうする。
それとprintfとかの可変個引数ではfloatも呼び出すときにdoubleにされるんで一応doubleにしておいた。
0325デフォルトの名無しさんNGNG
>>319
フ━━━( ´_ゝ`)━━━ン!!
0326デフォルトの名無しさんNGNG
キーボードから数値を入力して、その数値に10を加えた値までを表示するプログラム
おねがいします。
for使った奴で
0327仕様書無しさんNGNG
>>320
ほらよ。(4)は偏差値計算の仕方わすれたから、パスな。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=83
0328デフォルトの名無しさんNGNG
>>252
おめー次のページ見てみたのかよ
0329仕様書無しさんNGNG
>>326
// http://pc5.2ch.net/test/read.cgi/tech/1085149383/326
#include <stdio.h>

int main() {
double aa;
printf("入力して> "); fflush(stdout);
scanf("%lf", &aa);

for(int nn = 0; nn <= 10; nn++) {
printf("%g + %d = %g\n", aa, nn, aa+nn);
}
return 0;
}
0330320NGNG
>>327
ありがとうございました。
まだ私の知識に無いやり方もありましたが
勉強してみようと思います。
0331デフォルトの名無しさんNGNG
1.関数方程式f(x) = x2 . a = 0 を,Newton 法
で解くアルゴリズムを書きなさい.
2.特に,a = 2 として,√2を実際に求める過程を
書きなさい.求める精度は,5桁とします

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