[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 08/07 07:44 / Filesize : 167 KB / Number-of Response : 621
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2010/05/26(水) 07:45:28 BE:94671825-S★(522522)]
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他の発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html
【過去ログ検索】        chomework.sakura.ne.jp/
【wiki】               www23.atwiki.jp/homework/

前スレ
C/C++の宿題片付けます 135代目
pc12.2ch.net/test/read.cgi/tech/1269438098/

369 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 21:48:51 ]
実数と整数の区別もつかないアホ
ソート部分がクソ

370 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 21:55:59 ]
>>363です
ありがとうございます

371 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 21:56:08 ]
>>363
2番目の課題を訂正します。
codepad.org/qgboBPOZ
>>369
普通のバブルソートですが、何か問題でも?

372 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 21:57:51 ]
だからそれはバブルソートじゃないって言っただろw

373 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:02:21 ]
>>372
あれ?私は en.wikipedia.org/wiki/Bubble_sort を参照したんですけれどもね。

374 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:09:35 ]
それが言いたくてわざわざ効率の悪いほう使ったのかw

375 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:10:08 ]
>>373
バブルソートは

for(j=0;j<n-1;j++){
for (i = 0; i < n - 1; i++) {
if (x[i] > x[i + 1]) {
t = x[i];
x[i] = x[i + 1];
x[i + 1] = t;
}
}
}
だろ。わざわざdo{} while()にしても比較回数が減ることはない。


376 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:16:38 ]
>>373
だから全部読めって前も言ったよな?
Optimizing bubble sortのところで何でn := newn + 1ってなってると思ってるんだ?

377 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:17:08 ]
>>375
そうですよね。>>375 であげていただいたやり方もバブルソートといいますよね。
でも >>372 はお気に召さないようなんですよ。
確かに日本語版 wiki やドイツ語 wiki では、幾分効率をあげたものが採用されているようですが、
どうオプティマイズしても計算オーダーはΟ(n^2) で変わらないのですけれども、>>372 は計算オーダーの概念がよくわかっていないらしい。
pc12.2ch.net/test/read.cgi/tech/1269438098/706 のように、ある一種のバブルソートの実装にこだわっているんです。



378 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:18:14 ]
>>376
Optimizing のところでは、長さを縮めていますが、そうでない実装も、やっぱり bubble sort でしょう?

379 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:21:35 ]
計算オーダーが同じでも明らかに効率悪い方に拘る意味が分からんw

380 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:24:12 ]
こだわっているんではなくて、計算効率がちょびっとよくなるか悪くなるかの差で、バブルソートとよんだりよばなかったりするのはおかしいといっているのです。
英語版 wiki にのっている実装もバブルソート、 >>375 のやりかたもバブルソートなんですよ。無論私のもバブルソート。

381 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:42:15 ]
ん、バブルソートですね

382 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:48:20 ]
知識とコードのアンバランスさから見て、どっかの大学講師かな。
実務経験があるようには見えないし、頭堅いのにプライドだけは高いし。

383 名前: ◆QZaw55cn4c mailto:sage [2010/06/06(日) 23:20:44 ]
>>382
今は助教というのですよ。現在の大学教員の序列を知らないところから見ると、高校生かな?

384 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:21:28 ]
高校生に負ける助教って・・・

385 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:29:08 ]
どうりで高校生なら計算オーダーの話は理解できなくてもしかたありませんね。でも重要ですからよく勉強しておくように。

386 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:29:24 ]
日本語まともに読めないクズの分際で、
なんで自分より下しか想像できないんだろうw


387 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:31:46 ]
バブルソートでも色々あるんですよ。ひとつのパターンだけ決め付けてこれはバブルソート、あれは違う、などと見識の狭いことをいってはいけません。
もっと広い感覚で物事を理解することです。



388 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:32:52 ]
実数と整数の区別もつかない盲が何言ってんだw

389 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:35:12 ]
というか本当に助教なの?せいぜい院生くらいかと思ってたんだけど。
日本語の読めなさはやばいってレベルじゃねーだろw

390 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:35:43 ]
小さなミスはその都度修正すれば済むこと。でもバブルソートがなにかを理解していなければ、ヒープソート、シェルソート、クィックソート、マージソート
その他いろいろなソートでもつまづきますよ。これらの理論では計算オーダーが重要ですからよく勉強しておくことです。

391 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:39:51 ]
なんで相手がそれらのソートを知らないことになってんだよw

392 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:40:02 ]
>>382
で講師だろうといっていたくせに、
>>389
で院生くらいだとおもっていた、
とは随分とおっしゃることがころころかわるのですね。日本語が読める読めないというより、日本語を使って思考できないのではないですか?

393 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:40:32 ]
ちょ、同一人物認定されたw

394 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:40:43 ]
>>391
計算オーダーを理解していないようですからね。

395 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:54:27 ]
すいません、できたら>>362お願い致します
流石に無理ですかね・・・

396 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:55:50 ]
>>395
スレ違いな上に、金取るぞってレベルの話なんだがw

397 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:57:10 ]
>>395
無理に決まってるだろw



398 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:57:21 ]
やっぱり無理ですよねw
じゃあだめもとで他当たってきます
ありがとうございました

399 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:58:06 ]
>>395
作者に直接言ってみれば
もちろん、単にエラーが出るとだけ。
ttp://twitter.com/_kenkun

400 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:59:34 ]
大体フィルタだろ?
フィルタのソースはAviUtilの作者とは違うだろ。

401 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 00:00:30 ]
>>399
いや、AviUtlに問題があるわけではなくて
このフィルタに問題があるんですよね
フィルタの作者はAviUtlの作者ではないんで・・
でももしかしたらAviUtl側でなんとかできるかもしれませんね
ありがとうございます。


402 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 00:01:58 ]
関係ないフィルタの不具合を報告されても困るだろw

403 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 00:18:46 ]
まぁここはご覧の通り高校生レベルの議論なんで・・

404 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 00:19:12 ]
高校生以下のおじさんもいるけどね

405 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 02:09:08 ]
高校生だったころに戻りたいな

406 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 04:04:49 ]
中学レベルの英語力すらない人が多いみたいだけどね

407 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 06:55:32 ]
that's too mad.



408 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 12:38:44 ]
>>395
せっかちだなぁ

409 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 19:02:23 ]
>>406
んじゃ、そのあんたのレスを英語で頼む

410 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 19:09:19 ]
all your base are belong to us

411 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 20:02:34 ]
ポインタを使い1〜12までの数字を入力すると英語で月の名前が出力され、
そうでない場合はunknown month と出力されるプログラム作りで困ってます。
入力例
3
5
13
11
出力例
March
May
unknown month
November

ヒントでは、
char *month_name(int n)を書き入れる事
month_name(6)はJuneである事
static char *months[] = { "January","February","March",
"April","May","June",
"July","August","September",
"October","November","December"};
を用いる事が書かれてます。

暇な人が居たらお願いします。

412 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 20:16:30 ]
>>411
char *month_name(int n)
{
if (n < 1 || 12 < n) {
return "unknown month";
}
return months[n-1];
}

413 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 20:20:27 ]
staticだから関数内にmonths[]置くんじゃないの?

414 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 20:24:16 ]
じゃあそれで

415 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 21:12:44 ]
途中経過を…プログラミングは下手ですがっ
#include <stdio.h>

static char *months[] = { "January","February","March",
"April","May","June",
"July","August","September",
"October","November","December"};
int main(void)
{
int n;
char *month_name(int n)
{if (n < 1 || 12 < n) {
return "unknown month";
}return months[n-1];
}
scanf("&lf",&n);
printf("%s",*months);
return(0);
}
これでやるとどんな数字入れても出力がJanuaryになってしまうのですが、
どこらへんを変えればいいでしょうか?

416 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 21:14:17 ]
>>415
&lf ってなんだよ

417 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 21:15:40 ]
scanf("%d", &n);




418 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 21:18:19 ]
つーか関数内に関数置くな

419 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 21:21:46 ]
>>415
なんという残念な使い方w

420 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 21:24:05 ]
>>415
ideone.com/kEyhc

scanf("&lf",&n);
printf("%s",*months); の一連の流れをおかしいと思わなかったのはまずい

421 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 21:31:08 ]
残念な頭なのでmonth_nameの中に
*months入れるのは思いつきませんでした…orz

422 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 21:37:19 ]
>>421
慣れ、馴れ。数書くうちに体にしみこむ。

423 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:08:57 ]
ケチ付けるわけではないけどif文はmainの中のほうがunkownのとき
関数を呼ばなくていいんじゃなかろうか。

424 名前: [2010/06/07(月) 22:11:27 ]
【質問テンプレ】
[1] 授業単元:C言語課題
[2] 問題文(含コード&リンク):2つの正の整数(aとb)の最大公約数をユークリッドの互除法を用いて表示するプログラムを作成せよ。ただし、0<b≦a≦32767とする。
               ≪ユークリッドの互除法≫
               ユークリッドの互除法による最大公約数(GREATEST COMMON DIVISOR:GCD)は、次のように求める。
               @2数(aとb)の中で大きい値をl、小さい値をmとする。
               Alをmで割り、あまりをrとする。
                      r=0ならば、mが最大公約数となる。
                      r≠0(0<r<m)ならばl←m、m←r として再びAの処理を行う。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:main.c Visual Studio 2008
 [3.3] 言語:C++
[4] 期限:2010年6月18日17:00まで
[5] その他の制限:(まだ本当に初心者なので)do文やif文、for文まで習いました。


期限までは時間がありますが…宜しくお願いしますm(_ _)m


425 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:29:12 ]
#include <iostream>

int main()
{
int a, b, r;

std::cin >> a >> b;

while(r = a % b) a = b, b = r;

std::cout << b;
}

426 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:09:24 ]
>>423
逆にその関数として、不正な値が渡された時はどういう挙動にしようか

427 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:10:21 ]
for(i = 0 ; i < 5 ; i++){
printf("%d,", i );
}
これで出力したら
1,2,3,4,5,
みたいに最後にもカンマがついちゃうんでfor文の外側に
printf("\b\n");
を付け加えたんだけどうまく最後のカンマが消えません
その理由とどうすればいいのか教えてください



428 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:21:48 ]
\bは書き込む位置が1文字分戻るだけだから
スペースで上書きする必要がある
printf("\b \n");

429 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:23:30 ]
なるほど
d

430 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:25:03 ]
>>427
端末側がバックスペースをサポートしていない、と思われる。
仕方がないから、
#include <stdio.h>
#define N 5
int main()
{
int i;
for (i = 1; i <= N - 1; i++)
printf("%d, ", i);
printf("%d\n", i);
return 0;
}
でごまかすしかない。

431 名前:430 mailto:sage [2010/06/07(月) 23:29:20 ]
>>428
そのような手があったんですね。これでうまくいきました。(cygwin)
#include <stdio.h>
#define N 5
int main()
{
int i;
for (i = 0; i < N; i++)
printf("%d, ", i);
printf("\b\b \n");
return 0;
}

432 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:32:36 ]
>>424
#pragma warning(disable:4996)
#include <stdio.h>
int main(void){
  int a, b, l, m, r;

  printf("整数 a と b を入力して下さい > ");
  scanf("%d %d", &a, &b);
  if(a>b) l=a, m=b; else l=b, m=a;
  while(r = l % m) l=m, m=r;
  printf("GCD = %d", m);
}

433 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:46:04 ]
>>426
#include <stdio.h>
char *month_name(int n){
static char *months[]={"January","February","March",
"April","May","June","July","August","Septmber",
"October","November","December"};
return months[n-1];}
int main(void)
{
int n;
scanf("%d",&n);
if (n<1||n>12)printf("unkown month\n");
else printf("%s\n",month_name(n));
return 0;
}
不正な値が行く場合がわかりませんので教えて下さい。

434 名前:430 mailto:sage [2010/06/07(月) 23:53:41 ]
>>433
できている、と思うのですが。

435 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:55:12 ]
しっかし無駄なstaticだ

436 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:55:25 ]
>>433
関数をライブラリとして提供した場合に、使う側に対して値チェックを強制するべきか、
それとも不正な値を渡された場合にunknown monthを返却する仕様とするのかという話。

で、使用者に対して値チェックを強制した場合、使用者の不手際により
不正な値が渡されることを考慮しなければならない。
その際、メモリアクセス違反で落ちるライブラリでよしとするのか?ということ。

例外機構があれば例外を投げるのも手だけれど、Cではどうするのか。
型をboolにし、out引数を追加するのもありだよね。
でも今回はプロトタイプが指定されている。

その上での考えを教えてほしい。

437 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:57:16 ]
NULLを返却するのは?
結局関数の中で範囲チェックすることになるけど。



438 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:58:00 ]
>>435
これstatic消したら関数抜けた時に戻り値のアドレスが破棄されるんじゃないの?

439 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 00:00:30 ]
>>438
リテラルのアドレスが返るから問題ない

440 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 00:11:50 ]
>>438
sizeof(months) == sizeof(char *) * 12

441 名前:デフォルトの名無しさん [2010/06/08(火) 00:16:14 ]
[1] 授業単元: 情報数学
[2] 問題文(含コード&リンク):
次の連立一次方程式をガウスザイデル法とSOR法で解け
{2 , -1 , 0} {x1} {-1}
{-1 , 2 , -1} * {x2} = {2}
{0 , -1 , 2} {x3} {1}
なお、反復回数を20、x1-3の初期値x1-3^0を0、SOR法の・をそれぞれ1.2と1.5で計算せよ。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 本日中、出来ればお昼までにお願いします。

442 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 00:20:40 ]
>>440
要するに、予約語staticをつけなくとも、
monthsはその各々の要素が文字列リテラルの先頭へのポインタであるから
静的領域に確保されると。


443 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 00:27:51 ]
それって規格で決まってたっけ?
そうでなくても、いちいち呼ばれるたびに確保するような処理系なさそうだけどさ。

444 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 00:35:16 ]
>>436
いろいろとありがとうございました。
今回は不正な値を渡された場合にunknown monthを返却する仕様のつもりです。
使用者に対しての値チェックのやり方はどれがいいかまだよくわかりません。
難しいですね。

445 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 00:58:11 ]
>>442-443
文字列リテラルがstatic const char[]か?ならYes 6.4.5 文字列リテラル
文字列リテラルを指すポインタ非可変長配列がstaticか?ならchar const * const []であってもNo 6.2.4 オブジェクトの記憶域期間

446 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 01:03:04 ]
>442>443
横レスだけど
months自体は自動変数だから、スタックに置かれるよ。関数が返しているのは
スタック変数を指すポインタではなく、静的領域に置かれている文字列リテラルの
ポインタ。

447 名前:443 mailto:sage [2010/06/08(火) 01:34:03 ]
>>445
d




448 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 08:57:28 ]
[1] 授業単元:プログラミング演習2
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10651.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:6月9日12時まで
[5] その他の制限:

libstation.aが無いのでやりずらいかもしれませんが、形だけでもお願いします。



449 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 10:20:42 ]
>>441をお願いします。

450 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 10:44:00 ]
>>449
とりあえずガウスザイデル法のみ

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10652.txt

451 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 11:08:42 ]
>>449
SOR法

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10653.txt

452 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 12:04:27 ]
>>451
ありがとうございます。

453 名前:デフォルトの名無しさん [2010/06/08(火) 13:17:45 ]

[1] 授業単元: 上級プログラミング
[2] 問題文(含コード&リンク):

1、VisualC++2008のWindowsフォームアプリケーションのプロジェクトを作成し、DataGridViewを作成なさい。列は
A,B,C の3列とする。
2、列Aに入力された4桁の数値を日付形式に変換し表示する様にしなさい(○月○日)。
3、sample.txtの内容を読み取り、その内容を使って列Bにオートコンプリートを実装しなさい。

sample.txtの内容は
あいうえお
abcde
12345
と言う様に、1行に1単語とする。

[3] 環境
[3.1] OS: Windows
[3.2] VC++2008
[3.3] 言語: C/C++
[4] 期限: 6/12
[5] その他の制限:とくに制限はありません

1はできますが2以降がよくわかりません。
2はプロパティでCellStyleを設定しましたが動いてくれませんでした。
3は調べてみたのですが、C++での実装はのっていなかったので・・・
よろしくお願いします。



454 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 13:21:57 ]
C++/CLIの宿題スレってないの?

455 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 13:43:20 ]
>>448
適当に見繕ってttp://codepad.org/Hzoa3JtQ

456 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 14:00:14 ]
(1) 【main 関数のみ】
int型配列 x[101] を定義し、キーボードから人数 N と N 人分の点数を入力し、平均点と
偏差値を計算し、結果を画面に出力するプログラムを作成せよ。
◆ 条件
 人数 N に負の値や101以上の値が入力されたときには、再入力するものとす
る。
 点数 x[i] に負の値や100点を超える値が入力されたときには、再入力する
ものとする。
◆ 偏差値 Ti の計算式
10( xi   )
Ti   50

ただし
N
1
x
 i
N i 1
N
1
 (x
  )2
i
N i 1
ここに、N :データの数 xi :個々の点数 μ:平均 σx:標準偏差


457 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 14:01:04 ]
実行例
Input N (0<N<101):0 ← 入力エラー
Input N (0<N<101):5
Input x[1] (0<=x<=100):200 ← 入力エラー
Input x[1] (0<=x<=100):30
Input x[2] (0<=x<=100):50
Input x[3] (0<=x<=100):-1 ← 入力エラー
Input x[3] (0<=x<=100):60
Input x[4] (0<=x<=100):80
Input x[5] (0<=x<=100):90
平均点 62.0
No. 1 点数 30 偏差値 35.0
No. 2 点数 50 偏差値 44.4
No. 3 点数 60 偏差値 49.1
No. 4 点数 80 偏差値 58.4
No. 5 点数 90 偏差値 63.1




458 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 14:02:48 ]
(2) 【平均点と偏差値を計算する関数の作成】
(1)のプログラムにおいて、平均点と学力偏差値を計算する部分を関数 seiseki に改
めたプログラムを作成せよ
◆ 条件
 データの入力と結果の出力はmain関数で行う。
 人数 N に負の値や101以上の値が入力されたときには、再入力するものと
する。
 点数 x[i] に負の値や100点を超える値が入力されたときには、再入力す
るものとする。
 main関数から関数seisekiに
データの数 N
N人分の点数 x[]
を渡し、関数seisekiからmain関数に
平均点 μ
偏差値 T[]
を受け渡す。
ただし、平均点は戻り値を用いて返す。



459 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 14:06:09 ]
3)【ポインタを用いた平均点と偏差値の計算】
(2)で作成したプログラムの関数 seiseki の中
次のプログラム例を参考にして、
の配列要素をポインタを用いて表すプログラムを作成せよ。
#include <stdio.h>
float average( int N, float *h);
int main(void){
float ave, height[101];
int i,N;
printf("Input N:");
scanf("%d",&N);
for(i=1; i<=N; i++){
printf("身長 ");
scanf("%f",&height[i]);
}
ave = average(N,height);
printf("平均 %6.1f \n",ave);
return 0;
}
float average( int N, float *h){
int i;
float av, total=0.0;
for(i=1; i<=N; i++){
total = total + *(h+i);
}
av = total/N;
return av;
}



460 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 14:35:27 ]
>>456
wakaran

461 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 14:42:29 ]
>>459
問題文が日本語になっていない
コードも直接貼ってるから読みにくい

462 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 14:51:41 ]
>>448
ありがとうございます。
セグメンテーション違反になりましたが、ここからは自分で頑張ってみます。

463 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 15:31:47 ]
>>456-458
codepad.org/JjTL3Zwl

(1)は input と main_q1関数だけ。
実行するときは、main_q1はmainに関数名を直すのが必要です。

(2)は コピペでも動く。main_q1関数は不要なので、消しても良い。

・偏差値はわからないから、wikipediaのを参考に。
・stdevの求め方は、2乗の平均 - 平均の2乗にした。
・データ入力の際に、avgも求められるが、題意から分けた。

464 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 15:38:36 ]
配列サイズが101だから、iは1からなんじゃね?

465 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 15:50:30 ]
>>463
Fortranな先生かな。
ttp://codepad.org/wUR2oqj6

466 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 16:10:08 ]
勝手に例の表記や条件を変えるヤツってなんなの?

467 名前:デフォルトの名無しさん [2010/06/08(火) 17:23:12 ]
>>354
すげぇ、てか制御式の中にscanf入れることできるのかー。
>>348
の人は何故だめなのかな。



468 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 17:30:20 ]
>>348
scanf("%c",&c);
で改行をよみこんでしまうから
後の条件式を総スルーしちゃう。
よってbは0で初期化されたまま

あと実際に動かすと
1
+
1
=
1
となってしまう。
これは
1
+
は計算するように書かれているけど
1
=
は計算するように書かれてないから。

469 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 17:44:47 ]
>>348を書き直すと
#include<stdio.h>
int main(void){
int a=0,b = 0;
char c=' ';
char prevc=' ';
while(c != '='){
scanf("%d%*c",&a);
scanf("%c",&c);
if (c == '+'){b += a; prevc='+';}
else if(c == '-'){b -= a; prevc='-';}
else if (c == '=')
{
if(prevc == '+' || prevc == ' ') b+=a;
else if(prevc == '-' || prevc == ' ') b-=a;
}

}
printf("%d\n", b);
}






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<167KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef