C言語の課題ができません助けてください

このエントリーをはてなブックマークに追加
1名無し募集中。。。
お願いします
2名無し募集中。。。:2008/10/29(水) 19:10:05.71 O
おことわりだ
3名無し募集中。。。:2008/10/29(水) 19:10:56.95 0
どこがわからないの?
4名無し募集中。。。:2008/10/29(水) 19:11:10.39 0
というわけでみんなで課題を解いていきましょう
5名無し募集中。。。:2008/10/29(水) 19:11:35.02 0
お断りします
  お断りします
  ∞ノ_,ハヽ
  ノソ*^ o゚)
 ((⊂ノ  ノつ))
   (_⌒ヽ
εニ≡ )ノ`J
6名無し募集中。。。:2008/10/29(水) 19:11:44.31 0
Q言語ならわかるよ^^
7名無し募集中。。。:2008/10/29(水) 19:12:41.42 0
問題は
3 つの読み込み用ファイル(math.datとeng.datとprog.dat)に数学、工学、プログラミングの
各科目の成績が記録されている。以下の機能を持つプログラムをつくりなさい。

* 3 つのファイルを開いてそれぞれの科目の成績を読み込む(データの最後にはデータの終了を示す -1 という数字が付加されている。-1 自体は成績ではない)
* 3 つの科目を通じた平均点を求める(3つのファイルの同じ行にある成績の平均を求める)
* 平均点に基づいて成績評価を行う(評価基準は第二回の演習問題3と同じとする)
* 平均点と評価を出力用ファイル prog03out.dat に出力する

です
8名無し募集中。。。:2008/10/29(水) 19:14:29.58 0
すげー簡単じゃねーか
9名無し募集中。。。:2008/10/29(水) 19:14:29.74 0
第二回の演習問題3を教えろ馬鹿
10名無し募集中。。。:2008/10/29(水) 19:14:39.17 0
>>1
JAVAでおk?
11名無し募集中。。。:2008/10/29(水) 19:15:08.77 0
gets()使おうぜ
12名無し募集中。。。:2008/10/29(水) 19:16:08.45 0
他のレポートとかは苦痛だったけど
Cの課題は一番楽しかったなあ
13名無し募集中。。。:2008/10/29(水) 19:16:32.40 0
ジャヴあは駄目ですごめんなさい
第二回の演習問題3の評価は
# 0〜34 : F
# 35〜49 : D
# 50〜64 : C
# 65〜79 : B
# 80〜100 : A です
14名無し募集中。。。:2008/10/29(水) 19:17:11.65 O
全く理解できないけど独学でプロムラミングって覚えられる?
15名無し募集中。。。:2008/10/29(水) 19:17:32.61 0
覚えられるよ、そういうのが好きならば
16名無し募集中。。。:2008/10/29(水) 19:18:15.57 0
とりあえず途中までやってみたんで教えてください
#include<stdio.h>
#include<stdlib.h>
char grade(int);
main(){
FILE *fpin1, *fpin2, *fpin3, *fpout;
int n,m,ave,val1,val2,val3;
ファイルオープンは省略しました
while(1){
fscanf(fpin1,"%d",&val1);
fscanf(fpin2,"%d",&val1);
fscanf(fpin3,"%d",&val1);
ave = ( val1 + val2 + val3 ) / 3;
if(val1 == -1) break;
fprintf(fpout,"%d\n",ave);
}
fclose(fpout);
fclose(fpin1);
fclose(fpin2);
fclose(fpin3);
}
char grade(int s)
{
if(s>=80 && s<=100)return A;
else if (s>=65 && s<=79)return B;
else if (s>=50 && s<=64)return C;
else if (s>=35 && s<=49)return D;
else if (s>=0 && s<=34)return F;
}
17名無し募集中。。。:2008/10/29(水) 19:18:22.18 0
入出力のフォーマット規定がなくて作れるわけねえだろ
18名無し募集中。。。:2008/10/29(水) 19:19:06.22 0
ほとんどの人は独学じゃね?
19名無し募集中。。。:2008/10/29(水) 19:19:14.51 0
配列とかポインタとか構造体とかどこまで習ったのさ
20名無し募集中。。。:2008/10/29(水) 19:20:01.30 0
まずフラスコを3つ、試験管を5本用意しなきゃ
21名無し募集中。。。:2008/10/29(水) 19:20:37.38 0
入力ファイルはこんな感じです
< input file >
math.dat eng.dat prog.dat
90 55 83
54 32 88
11     8 100
・ ・ ・
・ ・ ・
-1 -1 -1
22名無し募集中。。。:2008/10/29(水) 19:20:53.87 0
>* 3 つのファイルを開いてそれぞれの科目の成績を読み込む(データの最後にはデータの終了を示す -1 という数字が付加されている。-1 自体は成績ではない)

EOF教えろよw
23名無し募集中。。。:2008/10/29(水) 19:21:20.78 0
* 3 つのファイルを開いてそれぞれの科目の成績を読み込む
 →ファイル入力
* 3 つの科目を通じた平均点を求める(3つのファイルの同じ行にある成績の平均を求める)
 →平均点の計算分かるよな?w
* 平均点に基づいて成績評価を行う
 →昇順に並べる
* 平均点と評価を出力用ファイル prog03out.dat に出力する
 →ファイル出力
24名無し募集中。。。:2008/10/29(水) 19:21:41.99 0
改行コードはなんだよ!
25名無し募集中。。。:2008/10/29(水) 19:21:52.92 0
出来てるじゃん
それじゃあダメだなのか
261:2008/10/29(水) 19:21:59.15 0
>>17
出来ない人に用はないです
邪魔なだけなので書き込まないで下さい
27名無し募集中。。。:2008/10/29(水) 19:22:12.54 0
入出力ストリームが4個もあるんだが
28名無し募集中。。。:2008/10/29(水) 19:22:18.54 0
char grade(int s)
{
if(s>=80 && s<=100)return 'A';
else if (s>=65 && s<=79)return 'B';
else if (s>=50 && s<=64)return 'C';
else if (s>=35 && s<=49)return 'D';
else if (s>=0 && s<=34)return 'F';
}
29名無し募集中。。。:2008/10/29(水) 19:22:24.32 0
それでこんな感じでファイルに出力したいです
< output file >
76.0 B
58.0 C
39.7 D

30名無し募集中。。。:2008/10/29(水) 19:22:36.01 0
まずval2とval3をちゃんと読み込め
31名無し募集中。。。:2008/10/29(水) 19:22:59.92 0
とりあえず return A; とかを return 'A'; とかに
32名無し募集中。。。:2008/10/29(水) 19:23:04.05 0
>>22
どう見てもFORTRANの課題をそのまま流用してるな
33名無し募集中。。。:2008/10/29(水) 19:23:28.85 0
この問題のどうしようもなさに気付かない>>1がもっとも出来ない人間なのだが
34名無し募集中。。。:2008/10/29(水) 19:24:15.99 0
>>26の発言を受けて俺(>>17ではない)やーめた^^
35名無し募集中。。。:2008/10/29(水) 19:24:18.98 0
fprintf(fpout,"%d\n",ave);

fprintf(fpout,"%d %c\n",ave,grade(ave));
36名無し募集中。。。:2008/10/29(水) 19:24:41.63 0
そ も そ も 自 分 で 解 け
37名無し募集中。。。:2008/10/29(水) 19:24:51.06 0
fprintf(fpout,"%d %c\n",ave, grade(ave));
38名無し募集中。。。:2008/10/29(水) 19:25:05.96 0
>>30>>31
ごめんなさい直しました
39名無し募集中。。。:2008/10/29(水) 19:25:24.91 0
>>28
switch使え
40名無し募集中。。。:2008/10/29(水) 19:25:50.08 0
>>34
あれは偽物です><
41名無し募集中。。。:2008/10/29(水) 19:26:04.62 0
42名無し募集中。。。:2008/10/29(水) 19:27:00.07 0
43名無し募集中。。。:2008/10/29(水) 19:27:08.89 0
結果は変わらないけど-1かの判断は平均出す前にしたいな
44名無し募集中。。。:2008/10/29(水) 19:27:25.74 0
char grade(int s)
{
if(s>=80)return 'A';
if (s>=65)return 'B';
if (s>=50)return 'C';
if (s>=35)return 'D';
return 'F';
}
45名無し募集中。。。:2008/10/29(水) 19:27:42.49 0
>>39
ワロタ
46名無し募集中。。。:2008/10/29(水) 19:27:55.32 0
#include<stdio.h>
#include<stdlib.h>
char grade(int);
main(){
FILE *fpin1, *fpin2, *fpin3, *fpout;
int n,m,val1,val2,val3;
float ave;
ファイルオープンは省略しました
while(1){
fscanf(fpin1,"%d",&val1);
fscanf(fpin2,"%d",&val1);
fscanf(fpin3,"%d",&val1);
ave = (float)( val1 + val2 + val3 ) / 3;
if(val1 == -1) break;
fprintf(fpout,"%f %c\n",ave,grade(ave));
}
fclose(fpout);
fclose(fpin1);
fclose(fpin2);
fclose(fpin3);
}
char grade(float s)
{
if(s>=80 && s<=100)return 'A';
else if (s>=65 && s<=79)return 'B';
else if (s>=50 && s<=64)return 'C';
else if (s>=35 && s<=49)return 'D';
else if (s>=0 && s<=34)return 'F';
}
47名無し募集中。。。:2008/10/29(水) 19:28:16.32 0
もう出来たようだな
48名無し募集中。。。:2008/10/29(水) 19:28:27.43 0
>>39
switch (s) {
case 100:
case 99:
case 98:
case 97:
case 96:
case 95:
case 94:
case 93:
case 92:
case 91:
case 90:

疲れた
49名無し募集中。。。:2008/10/29(水) 19:29:33.84 0
char grade(float);

だった
50名無し募集中。。。:2008/10/29(水) 19:30:46.48 0
char grade(int s)
{
static char cgrade[] = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAA";
return cgrade[s];
}
51名無し募集中。。。:2008/10/29(水) 19:30:57.46 0
ありがとうございます
できました
52名無し募集中。。。:2008/10/29(水) 19:31:35.71 0
そしたらaveもfloatにして
/3も/3.0にして
%dも%.1fかなんかにしないとな
53名無し募集中。。。:2008/10/29(水) 19:31:49.57 0
>>50
ワラタ
54名無し募集中。。。:2008/10/29(水) 19:33:16.71 0
>>48
ご苦労
55名無し募集中。。。:2008/10/29(水) 19:36:22.94 0
float使ったら出来なくなりました助けてください
56名無し募集中。。。:2008/10/29(水) 19:36:23.45 0
インデント入れろ
57名無し募集中。。。:2008/10/29(水) 19:38:18.72 0
>>56
こぴぺして書込んだらスペース消えちゃうんです
許してください
58名無し募集中。。。:2008/10/29(水) 19:38:33.41 0
今のソースをかけ
59名無し募集中。。。:2008/10/29(水) 19:40:23.57 0
じゃあ新しい課題
DirectXなりMAYAなりなんでも使っていいから面白いゲームを作れ
60名無し募集中。。。:2008/10/29(水) 19:40:53.84 0
あ、RPGつくーる禁止ね!
61名無し募集中。。。:2008/10/29(水) 19:42:06.88 0
羊池
62名無し募集中。。。:2008/10/29(水) 19:42:26.80 0
こうしたんですけど
FILE *fpin1, *fpin2, *fpin3, *fpout;
int n,m,val1,val2,val3;
float ave;

while(1){
fscanf(fpin1,"%f",&val1);
fscanf(fpin2,"%f",&val2);
fscanf(fpin3,"%f",&val3);
ave = (float)( val1 + val2 + val3 ) / 3.0;
if(val1 == -1) break;
fprintf(fpout,"%f %c\n",ave,grade(ave));
}
fclose(fpout);
fclose(fpin1);
fclose(fpin2);
fclose(fpin3);
}
char grade(float s)
{
if(s>=80 && s<=100)return 'A';
else if (s>=65 && s<=79)return 'B';
else if (s>=50 && s<=64)return 'C';
else if (s>=35 && s<=49)return 'D';
else if (s>=0 && s<=34)return 'F';
}
63名無し募集中。。。:2008/10/29(水) 19:44:04.72 0
fscanf(fpin1,"%d",&val1);
fscanf(fpin2,"%d",&val2);
fscanf(fpin3,"%d",&val3);
のままでいい
64名無し募集中。。。:2008/10/29(水) 19:45:03.56 0
fprintf(fpout,"%0.1f %c\n",ave,grade(ave));
65名無し募集中。。。:2008/10/29(水) 19:45:25.86 0

w
66名無し募集中。。。:2008/10/29(水) 19:46:18.84 0
>>63
直しました
変なことしててすいません
67名無し募集中。。。:2008/10/29(水) 19:47:11.11 0
ちなみに開発環境は?
MS-DOS?
68名無し募集中。。。:2008/10/29(水) 19:47:39.26 0
>>64
キレイになりましたありがとうございます
69名無し募集中。。。:2008/10/29(水) 19:48:00.65 0
34.33..とかの場合どうするんだ?
(s>=0 && s<35)とかにしないと値が帰らないことがあるよ
70名無し募集中。。。:2008/10/29(水) 19:48:13.09 0
VAX11
71名無し募集中。。。:2008/10/29(水) 19:48:36.33 0
>>67
Solaris使ってます
72名無し募集中。。。:2008/10/29(水) 19:48:41.48 0
動きゃいいんじゃないの
さっさとコンパイルしる
73名無し募集中。。。:2008/10/29(水) 19:49:11.61 0
ものすごいGUIつけようぜ
コモンダイアログでファイル開けるようにしようぜ!
74名無し募集中。。。:2008/10/29(水) 19:49:28.05 0
char grade(float s)
{
if(s>=80 && s<=100)return 'A';
else if (s>=65 && s<80)return 'B';
else if (s>=50 && s<65)return 'C';
else if (s>=35 && s<50)return 'D';
else if (s>=0 && s<35)return 'F';
}


75名無し募集中。。。:2008/10/29(水) 19:49:35.27 0
>>44方式にしとけ
76名無し募集中。。。:2008/10/29(水) 19:49:43.45 0
char grade(float s)
{
if(s>=80)return 'A';
else if (s>=65)return 'B';
else if (s>=50)return 'C';
else if (s>=35)return 'D';
else return 'F';
}
77名無し募集中。。。:2008/10/29(水) 19:50:13.05 0
elseとか無駄
78名無し募集中。。。:2008/10/29(水) 19:50:48.38 0
アセンブリで超高速処理しよう
79名無し募集中。。。:2008/10/29(水) 19:51:02.24 0
>>69
直しました
ありがとうございます
80名無し募集中。。。:2008/10/29(水) 19:51:47.32 0
>>77
オプチマイザが最適化してくれる
81名無し募集中。。。:2008/10/29(水) 19:52:10.18 0
じゃあ>>44でいきます
82名無し募集中。。。:2008/10/29(水) 19:52:18.34 0
いやタイプの無駄w
83名無し募集中。。。:2008/10/29(水) 19:52:54.49 0
浮動小数点を扱う時は境界値に注意しる
84名無し募集中。。。:2008/10/29(水) 19:53:53.35 0
とりあえずmalloc使おう
85名無し募集中。。。:2008/10/29(水) 19:54:59.13 0
ぬぅるぅぽぉ〜
86名無し募集中。。。:2008/10/29(水) 19:55:59.26 0
なんとかできました
87名無し募集中。。。:2008/10/29(水) 19:56:32.39 0
では次の課題に取り掛かりましょうか
88名無し募集中。。。:2008/10/29(水) 19:58:17.62 0
課題とか単純でいいよなw
89名無し募集中。。。:2008/10/29(水) 19:58:18.12 0
できたよー
real math,eng,pro,hei
character g
open(10,file='math.dat')
open(11,file='eng.dat')
open(12,file='prog.dat')
open(13,file='prog03.dat')

100 continue
read(10,*)math
if(math.eq.-1)goto 200
read(11,*)eng
if(eng.eq.-1)goto 200
read(12,*)pro
if(pro.eq.-1)goto 200

hei=(math+eng+pro)/3

if(hei.le.34)g='E'
if(hei.gt.34.and.hei.le.49)g='D'
if(hei.gt.49.and.hei.le.64)g='C'
if(hei.gt.64.and.hei.le.79)g='B'
if(hei.gt.79)g='A'
150 format(4f6.1,A3)
write(13,150)math,eng,pro,hei,g

goto 100
200 stop
end
90名無し募集中。。。:2008/10/29(水) 19:58:21.90 0
これ今さらだけど三つのデータ数が同じという前提なのね
91名無し募集中。。。:2008/10/29(水) 19:58:41.07 0
古そうなfortranだな
92名無し募集中。。。:2008/10/29(水) 20:01:55.52 0
>>1の課題だけだと何かさびしいからGUIにしようぜ
93名無し募集中。。。:2008/10/29(水) 20:04:00.26 0
誰かせっかくだからVB版,java版,COBOL版,pascal版もつくってくれw
94名無し募集中。。。:2008/10/29(水) 20:04:39.64 0
がんばって
95名無し募集中。。。:2008/10/29(水) 20:06:59.61 0
せっかくなんで次の課題も書いておきます
1
# 今週のハンドアウトの最後にテキストファイル(data.in)を読み取って
逆から表示するプログラムがあったが、これをファイル(ファイル名mydata.out)に書出すように修正せよ。
なお、最後の行の後に改行を挿入する。
(提出ファイル名: prog04a.c)
2
自分の作成した出力結果(mydata.out)と解答(data.out) の2つのファイルをプログラム中で開き、一致するかどうかを調べ、一致したかどうかを出力するプログラムを作成せよ。
(提出ファイル名: prog04b.c)
96名無し募集中。。。:2008/10/29(水) 20:07:50.75 0
> -1 自体は成績ではない

ワロタw 偏差値低そうな学校だなw
97名無し募集中。。。:2008/10/29(水) 20:09:52.24 0
2なんてファイルの内容を全部charの配列にぶちこんで
strcmpかけりゃいいだけじゃないの?
98名無し募集中。。。:2008/10/29(水) 20:10:50.82 0
俺もできたよー

#!/usr/bin/perl
use Strict;
sub grade {
my($s) = @_;
return 'F' if $s < 35;
return 'D' if $s < 50;
return 'C' if $s < 65;
return 'B' if $s < 80;
return 'A';
}
open(MATH, 'math.dat') || die;
open(ENG, 'eng.dat') || die;
open(PROG, 'prog.dat') || die;
open(OUT, '>', 'prog03.dat') || die;
for (;;) {
my($math,$eng,$pro,$hei);
$math = <MATH>;
last if $math < 0;
$eng = <ENG>;
last if $eng < 0;
$prog = <PROG>;
last if $prog < 0;
$hei = ($math + $eng + $prog) / 3;
printf OUT "%.1f %s\n", $hei, &grade($hei);
}
exit;
99名無し募集中。。。:2008/10/29(水) 20:11:03.94 0
prog04a.exe > mydata.out
100名無し募集中。。。:2008/10/29(水) 20:12:02.61 0
いまどきFORTRAN書ける人が狼にいるとは
どんだけおっさん板だよw
101名無し募集中。。。:2008/10/29(水) 20:12:17.55 0
>>99
ワロタw

おれそーゆー発想ないわー
ちょっと感心した
102名無し募集中。。。:2008/10/29(水) 20:12:48.07 0
じゃあ2はdiffかけりゃいいだけだなw
103名無し募集中。。。:2008/10/29(水) 20:12:52.71 0
あれこの前fortranの課題のスレなかったっけ?
104名無し募集中。。。:2008/10/29(水) 20:14:49.49 0
狼ならFORTRAN,COBOL,PASCAL,N88BASICあたりでも十分スレが成り立つ
105名無し募集中。。。:2008/10/29(水) 20:14:55.63 0
prog04a.exe > mydata.out
echo. >>mydata.out
106名無し募集中。。。:2008/10/29(水) 20:15:36.67 0
いまどきfortranの課題を出す学校なんてあるんか?
107名無し募集中。。。:2008/10/29(水) 20:16:08.31 0
おお最後の改行忘れてたw
108名無し募集中。。。:2008/10/29(水) 20:16:29.16 0
それで1はこうしてみたんですが何から直せばいいですか
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000

main()
{
char buf[MAX];
int i, n, c;
FILE *fpin,*fpout;
ファイルオープン略
for(n = 0 ; n < MAX ; n++){
if((c = fgetc(fpin)) == EOF) break;
buf[n] = (char)c;
}
if(n == MAX){
printf("Buffer overflow !\n");
exit(3);
}

for(i = n - 2 ; i >= 0 ; i--){
fprintf(fpout,"%c",buf[n]);
}
printf("\n");

fclose(fpin);
fclose(fpout);
}
109名無し募集中。。。:2008/10/29(水) 20:20:31.92 O
>>2 のjava 版

ファイル読み込みはファイル読み込み共通部品クラス、
合計と平均の計算は統計計算共通部品クラスを作成して呼び出すとする。

これはどう?
110名無し募集中。。。:2008/10/29(水) 20:27:15.74 0
jLabel.setText("おことわりだ");
111名無し募集中。。。:2008/10/29(水) 20:35:11.40 0
1できたのですが2がまったくわかりません
助けて
112名無し募集中。。。:2008/10/29(水) 20:38:13.81 0
open(MATH, 'math.dat') || die;

これどういう意味?
113名無し募集中。。。:2008/10/29(水) 20:39:42.73 0
openに失敗したら終了とかじゃないの
114名無し募集中。。。:2008/10/29(水) 20:55:15.87 0
俺その課題とほとんど同じプログラム以前課題で作ったんだがそんままあげていいというのなら
115名無し募集中。。。:2008/10/29(水) 21:26:22.99 0
あげてください
116名無し募集中。。。:2008/10/29(水) 22:08:06.85 0
FORTRANにOPEN()なんてないだろ
装置番号の指定はBATCHファイルに書いとけ
117名無し募集中。。。:2008/10/29(水) 22:29:55.10 0
FORTRANのOPENは77からかな
118名無し募集中。。。:2008/10/29(水) 22:30:44.98 0
JCLか
119名無し募集中。。。:2008/10/29(水) 22:52:06.64 0
FORTRANってソースがえらい簡単なのに
計算はCより速いんだっけ
120名無し募集中。。。
FORTRANは単精度はそのまま単精度で計算するけど
昔はCは必ず倍精度で計算したのでその分遅かった
いまのintelとかでは倍精度で計算した方が速かったりする