【2018年4月開学】東京通信大学Part.3
■ このスレッドは過去ログ倉庫に格納されています
公式サイト https://www.internet.ac.jp/ 前スレ 【2018年4月開学】東京通信大学Part.2 [無断転載禁止](c)2ch.net https://mao.5ch.net/test/read.cgi/lifework/1523608385/l50 Part.1 https://mao.5ch.net/test/read.cgi/lifework/1504958052/ 東京通信大学 ・学部 学科 情報マネジメント学部情報マネジメント学科 人間福祉学部 人間福祉学科 ・キャンパス 東京 新宿駅前キャンパス(総合校舎コクーンタワー) 大阪 大阪駅前サテライトキャンパス (大阪モード学園・HAL大阪 総合校舎) 名古屋 名古屋駅前サテライトキャンパス (総合校舎スパイラルタワーズ) 設置者 学校法人 日本教育財団(旧学校法人モード学園) いちおうここのURLとログを大学に送っておいたわ 答え教えてくれとか、ここでやる事じゃないと思う わかるまで留年したっていいんだよ 質問してる人に言いたい。 コーディングしているpcで「ggrks」この単語を検索しなさい。それから質問したらええ。 >>102 Mとmは別の文字(変数)として扱われるよ。 今回は最大値はM、最小値をmとして計算に使ってる。 最大はMAX、最小はMinimumでどちらも頭文字がエム。 なので大文字小文字で最大値と最小値を表現している。 xとyでもいいし、MAXとMINと書いても良い。 講義の中で教授がMとmを使ってるから学生はそれに合わせてるだけ。 intのあとの順番には意味はないよ。 >>123 言うほど多い量の課題は出てないよ。 お題4問を1週間でやればいいんだから、かなり緩いレベル。 問題はこのスレに出てるように、列挙された数字から 最大値と最小値と合計を書きだす、といった程度のもの。 コードを見ると初心者にはちんぷんかんぷんだろうけど、 講義の中でほとんど完成されたコードが提示されていて、 必要な箇所を変更するだけ、という方式。 こんなの負担でもなんでもないよ。 >>133 別にわざわざ送らなくったって教授陣や大学関係者もとっくにここを見てるよ。 あたり前だろ。 教授の方針は「学生同士掲示板で助け合って解決してみなさい」って感じだよ。 だから誰も答をまるまるコピペしたりしないし、わからない人にわかるように丁寧に説明してる。 2(5)chのくせにクソ真面目すぎるのは粋じゃないけど、大学側としては微笑ましい光景だろう。 今日の報告。 19/14 19:15 2-1 233名 (59.7%) コピペ 2-4 189名 (48.5%) 変数 for文 3-4 128名 (32.8%) 変数 for文 4-4 34名 (8.7%) 条件分岐 5-4 34名 (8.7%) ライブラリ 6-4 9名 (2.3%) 配列 7-4 4名 (1.0%) 長桁計算 >>97 そんなデータがあったとは! 2-1が割合(%)でみるとほぼ同じ値になってきた。 第五回第六回を比較すると、 締切近くならないとケツに火がつかない人が多いってのがわかるね。 >>138 おおっ。データの近似性の驚き。人はなかなか変わらんですね。 >>136 課題の量だけでなく、主に言いたいのは内容のこと。 本当に、通学制では90分✖8回の授業でこれだけの内容を教えられたのか。学生とのやり取りがない分、映像60分と対面授業90分を同等として。 駆け足すぎて授業の何倍もの時間を自習に割かないと、初心者はついていけない。初級なのに。 課題については、未経験者が授業+小テスト+自習で大学が基準としている時間の1.5〜2倍くらいで過半数の学生が解ける程度なら、4題は受け入れられる。ただし、他教科では実習がある場合、大学が基準とする時間に合わせて授業を減らしているものもある。 通学制の大学生は生活の中心が大学だが、通信制では本業のある社会人も多いはず。時間を作って計画立てて受講しようにも、初級プログラミングのせいで他の学習計画まで崩れてしまう。 自分は経営8情報2くらいの気持ちで入学したから、より勉強したい教科の妨げにしか感じない。 動画15分✕4本と小テスト30分が基本構成です ※演習はサービス残業になります >>142 if( d<m ) M= m;【向きが逆】 ここ間違った。逆じゃなくてdをmに代入、ね。 4-4で詰んじゃった どうやって差分と併合組み合わせるんだろうどちらかしか表示されないや >>144 scanf("%d",&x); if(x==1){ これでどう? >>145 ええと講義の併合のところをまるまる写してるんですけど int df, dg; int ef, eg; ef= fscanf(f,"%d", &df); eg= fscanf(g,"%d", &dg); while( ef==1 && eg==1){ if( df==dg ){ printf("%d\n",df); ......以下略 最初の宣言でint x;を追加してwhileの中にscanf("%d",&x);とif(x==1){を書くということでしょうか トンチンカンなこと言ってたらすいません >>146 単にそれを書けばいいってわけじゃないよ。条件分岐を使うって察してほしかった。 scanf("%d",&x); 【標準入力の値をxに読み取る】 if(x==1){ 【もし読み取った値が1なら以下の処理を行う】 ---講義内で提示された併合のプログラム---- }else if(x==-1){ 【もし標準入力の値がマイナス1だったら】 ---講義内で提示された差分のプログラム---- } こんな感じ。書き方はいろいろあるけど、併合と差分を同時にやるんじゃなくて、どちらをやるか最初に決めてしまうんだ。 もちろんxはfでもnでも何の文字でもいいよ。 11月8日 21:00 2-1 234名 (60.0%) コピペ 2-4 191名 (49.0%) 変数 for文 3-4 129名 (33.1%) 変数 for文 4-4 38名 (9.7%) 条件分岐 5-4 36名 (9.2%) ライブラリ 6-4 9名 (2.3%) 配列 7-4 4名 (1.0%) 長桁計算 福祉のほうで入学考えてるのですが数学は必須ですか? >>147 すごい!!ありがとうございます合格できました! >>143 #include <stdio.h> int main(int argc, char *argv[]){ int m, M, s, i, d; scanf("%d", &M); m= M; s=M; for(i= 1; scanf("%d", &d)== 1; i++){ s+= d; if( d>M ) d= M; if( d<m ) m= M; } printf("%d\n", M); printf("%.3f\n",(double) s/i); printf("%d\n", m); return 0; } 20てんだけど? >>149 数学は必須じゃないよ。 [数学入門、数学応用、物理学概論、生物学概論、予防医学、生命と人間] の中から2つ以上を選択すればいい。 >>151 20点と表示された場所のすぐ下に、「成功例」が一つと、 「失敗例」が4つ表示できるようになってる。 タブで切り替えてそれぞれを見てみよう。 正解の出力例と、自分のプログラムの出力が表示されるので、 どこが違うのか見ると一目瞭然。 dをmに代入ができてないんだなってすぐにわかる。 その箇所を修正すればいいんだ。 >>151 いってるいみがわからん。 なぜdなんだ? Mにmを、Mにsをじゃないのか? #include <stdio.h> int main(int argc, char *argv[]){ int m, M, s, i, d; scanf("%d", &M); m= M; s=M; for(i= 1; scanf("%d", &d)== 1; i++){ s+= d; if( d>M ) M= d; if( d<m ) M= d; } printf("%d\n", M); printf("%.3f\n",(double) s/i); printf("%d\n", m); return 0; } M=mだとmをMに代入するという方向でいいんだよな? if( d<m ) M= d; dがmより小さい時、Mにdを入れる? Mって最大値として使ってるんじゃないの? 甘えん坊が多すぎ、 仮にも大学。 何でここまで手取り足取りが 当然みたいな人間がいるのだろう。 ここまで教えるってサービスの次元を 超えてると思う。 情報処理系の夜間高校でも入り直して 勉強し直したらどうか? >>158 5チャン見てるやつが何いってるの? お前も同類だよここに書き込みなんかしてる時点でwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww >>158 本来なら学校で教えるべき内容を、学校が教えてないんだよ。 ゼロから自習しようにも締切があって時間足りないし。 >>151 s+= d;【読み込んだ値dを合計値に加算する/正しい】 if( d>M ) d= M;【読み込んだ値dがMより大きい場合、dにMの値を代入する/間違い】 if( d<m ) m= M;【読み込んだ値dがmより小さい場合、mにMの値を代入する/間違い】 >>154 s+= d;【読み込んだ値dを合計値に加算する/正しい】 if( d>M ) M= d;【読み込んだ値dがMより大きい場合、Mにdの値を代入する/正しい】 if( d<m ) M= d;【読み込んだ値dがMより大きい場合、Mにdの値を代入する/間違い】 >Mにmを、Mにsをじゃないのか? これはscanfの次の行の事を言ってるんだろ。 今間違ってるのはそこじゃなくて条件分岐のとこだよ。 >>154 ついでに、 [m= M; s=M;]これを「Mにmを、Mにsを」と言ってるのもまだ方向を間違ってる。 正しくは「mにMを、sにMを」だ。 [m= M; s=M;]これ自体は間違ってないから修正しなくていい。 この命令が何をやってるのかが十分に理解できてないので、 代入についてもう一度勉強しなおしておこう。 #include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]){ #define fn "data1.txt" #define gn "data2.txt" FILE *f, *g; f= fopen(fn, "r"); g= fopen(gn,"r"); if( f==NULL){ printf("NG:%s\n",fn); exit(-1); } g= fopen(gn, "r"); if( g==NULL){ printf("NG:%s\n",gn); exit(-1); } int cf, cg; while( (cf= fgetc(f))!=EOF && (cg= fgetc(g))!=EOF ){ if( cf!=cg ) break; } printf("\n"); printf("cf: "); if(cf==EOF)printf("EOF\n");else printf("%c\n",cf); printf("cg: "); if(cg==EOF)printf("EOF\n");else printf("%c\n",cg); if( !(cf==EOF && fgetc(g)==EOF) ) printf("%s and %s differ.\n", fn,gn); fclose(f); fclose(g); return 0; } (続き) でコンパイルして txt1と2をそれぞれ作成して追加をして実行したらそれぞれの文字が違うと表示された。ここまではよし。 さらにそれを採点すると0点。なぜ? 条件には、 data1.txt, data2.txt が共に尽きた時 same content data1.txt と data2.txt とで異なる文字が現れた時 different characters appear と記載あるがこれは標準入力にこの英語をかけって事? 4−2です >>159 >u9S9qZh40 正直、このコメント見て教える気がなくなった。 助けようという有識者は、発言見てから判断する良いと思うよ。 私はおりました。 >>164 >>165 data1.txt, data2.txt が共に尽きた時 「same content」と出力せよ data1.txt が先に尽きた時 「shorter: data1.txt」と出力せよ data2.txt が先に尽きた時 「shorter: data2.txt」と出力せよ data1.txt と data2.txt とで異なる文字が現れた時 「different characters appear」と出力せよ という意味だよ。 printf("cf: ");【cf: と出力する/間違い】(なぜ?) if(cf==EOF)printf("EOF\n");【data1.txtが先に終わったら「EOF\n」と出力する】(なぜ?) 出力する文字列が正しくないから0点なんだ。 printfのあたりを全て見直せばOK。 点数が表示されるところのすぐ下で失敗例を見ることができるから、 それを見れば何が間違ってたのかすぐにわかる。 課題文がわかりにくくても、これを見れば何を求められているのかすぐにわかるよ。 166 気持ちはわかるけどここはわからない人間に対して批判をするようなところではないから君は降りてもいいと思うよご自由に。 もっと広い心を持てると良かったね。 >>167 さん #include <stdio.h> #include <stdlib.h> int main(int argc, char* argv[]){ #define fn "data1.txt" #define gn "data2.txt" FILE *f, *g; f= fopen(fn, "r"); g= fopen(gn,"r"); if( f==NULL){ printf("NG:%s\n",fn); exit(-1); } g= fopen(gn, "r"); if( g==NULL){ printf("NG:%s\n",gn); exit(-1); } int cf, cg; while( (cf= fgetc(f))!=EOF && (cg= fgetc(g))!=EOF ){ if( cf!=cg ) break; } printf("\n"); printf("cf: "); if(cf==EOF)printf("EOF\n"); printf("%c\n",cf); printf("cg: "); if(cg==EOF)printf("EOF\n"); printf("%c\n",cg); if( !(cf==EOF && fgetc(g)==EOF) ) printf("%s and %s differ.\n", fn,gn); fclose(f); fclose(g); return 0; } どうですか? >>169 どうもこうも、前のとほとんど変わってないじゃん。 printf("cf: "); if(cf==EOF)printf("EOF\n"); printf("%c\n",cf); このコードを日本語で書くと、 「cf: 」と出力して、もしdata1.txtが先に尽きた時「EOF\n」と出力し、data1.txtの文字列を出力する。 となる。 お題は、data1.txt が先に尽きた時「shorter: data1.txt」(data1.txtのほうが短かった)と出力せよ。 まったく違う。 以降も全て同じで、お題で求められている出力と全く違う出力をしてるので合格しないよ。 「cf: EOF」とか、「data1.txt and data2.txt differ.」などと出力せよとはお題に書かれていない。 採点をやったとき、点数が表jいされているすぐ下にある失敗例を見ると何が間違ってるのかすぐにわかるよ。 171さん いや、失敗等見ても何が違うのか全然わかりませんよ、、できる人はわかると思いますけど。 >>172 169のコードだとエラーになるので164のコードで説明すると、 失敗例1(二つのファイルが同じだったとき) 【作ったプログラムの出力】 cf: EOF cg: 【正解の出力】 abcde fgh i same content これだけ見れば、二つのファイルが同じだったときにはファイルの中の文字列を出力して、 改行して、「same content」と出力するのが正しいんだとわかる。 それに対して、 cf: EOF cg: と出力してるから正しくない。 「data1.txtが短い時は"cf: EOF\ncg:"と出力する」ってコードが書けてるんだから、 出力する文字列を正しくするだけでいいんだよ。 data1.txtが短いときは、"shorter: data1.txt"と出力するんだよ。 条件分岐で4パターンの出力を作ってね。 他の失敗例も同じように見比べるんだよ。 >>173 尽きた場合ってのが良くわかりません意味が。 実行を何回も押して行くと急にかわるんですか? FILE *f, *g; f= fopen(fn, "r"); g= fopen(gn,"r"); if( f==NULL){ printf("NG:%s\n",fn); exit(-1); } g= fopen(gn, "r"); if( g==NULL){ printf("NG:%s\n",gn); exit(-1); } int cf, cg; while( (cf= fgetc(f))!=EOF && (cg= fgetc(g))!=EOF ){ if( cf!=cg ) break; } printf("\n"); printf("cf: "); if(cf==EOF)printf("EOF\n"); printf("%c\n",cf); printf("cg: "); if(cg==EOF)printf("EOF\n"); printf("%c\n",cg); if( !( cf=EOF\ncg:&& fgetc(g)==EOF) ) printf("%s and %s differ.\n", fn,gn); fclose(f); fclose(g); return 0; } てこと? >>174 二つのファイルに書かれた文字列を一文字目から順に比較して、同じ文字であるかどうかを判断する。 data1.txtの内容が「ABCDE」 data2.txtの内容が「ABC」 だっとしたら、data2.txtが先に尽きている、ということ。 比較すべき文字が先に無くなることをお題では尽きるって言ってる。 講義では「おしまいになる」と言ってる。 もしかして、 printf("cf: "); この命令がどういう意味かわからないで書いてる? これは「cf: 」という文字列を標準出力に書き出せって意味だよ。 11/11 17:00 2-1 234名 (60.0%) コピペ 2-4 193名 (49.5%) 変数 for文 3-4 134名 (34.4%) 変数 for文 4-4 47名 (12.1%) 条件分岐 5-4 50名 (12.8%) ライブラリ 6-4 13名 (3.3%) 配列 7-4 1名 (0.3%) 長桁計算 8-4 5名 (1.3%) 引数 2-1コピペの上昇が止まった。 第八回が公開された。7回よりもずっと簡単。 >>178 ついに2-1が60%到達ですね。 7ー4は厳しそうな感じ。 ありがとうございます。 >>178 ついに2-1が60%到達ですね。 7ー4は厳しそうな感じ。 ありがとうございます。 普段IT関連企業で仕事している人間が Cの演習となるとこんなにももろいものなのか こんな問題をあっさりクリアできないと、前途多難だな Cだからできないんだつて言つてるやつ Cに責任なすりつけるのかよ >>177 だから要するにこのこぴぺはなにも書き換える必要はないって事? 言ってる意味がわからないよ。 どこを変えればいいのだから結局。 txtの中身?1をabcde 2をabcにして先に2が尽きることにして実行すればいいの? >>184 printf("cf: "); これの意味がわかってるとして書くよ。 条件分岐をもっと検討しなければいけないのは当然なんだけど、その前に出力する文字列を正しくしなければ、その先の話にすすめない。 課題文に、「cf: 」と出力せよとは書かれていない。 課題文に、「EOF\n」と出力せよとも書かれていない。 課題文に、「cf: 」と出力せよとは書かれていない。 課題文に、「EOF\n」と出力せよとも書かれていない。 課題文に、「cf: 」と出力せよとは書かれていない。 課題文に、「EOF\n」と出力せよとも書かれていない。 課題文に、「cf: 」と出力せよとは書かれていない。 課題文に、「EOF\n」と出力せよとも書かれていない。 かたくなにこれを出力しようとする限り合格は得られない。 出力すべき文字列は 「same content」 「shorter: data1.txt」 「shorter: data2.txt」 「different characters appear」 この四つ。これらを条件によって使い分ける。 「same content」とは、内容が同じだったよ、って意味。 「shorter: data1.txt」はdata.txtのほうが短かったって意味。「different characters appear」は異なる文字列だったって意味。 cf: EOF\nと書き出すのではなく、shorter: data1.txtと書き出すの。 "EOF\n"を"shorter: data1.txt"に書き換えるの。 最初からずっとそう言ってるよ。 >>185 ありがとう、ここまで教えてくれて。 どうかんがえても言われてることがわからないや。 留年確定であきらめるわ。 >>183 Cの問題ではないな。そもそもプログラミング適性が無いってこった。 >>186 あきらめんな。 書き換えるってのはこうやるの。 誤 printf("EOF\n") 正 printf("same content\n"); 「EOF\n"」を「same content\n"」に書き換える、そのまんまだろ。 他にもあと3つ printf("shorter: data1.txt\n"); printf("shorter: data2.txt\n"); printf("different characters appear\n"); これら四つを用意して、 もし二つのファイルが同じなら 「same content\n」と出力くする。 -------------------- if(cf==EOF && fgetc(g)==EOF) printf("same content\n"); -------------------- こう書く。 他に、もしdata1.txtが短かった場合、data2.txtが短かった場合、 長さに関係なく文字列が異なった場合、のそれぞれについて if〜 を使って出力を変えるんだ。 >>186 つづき 後半の話は難しいからまだ後でいい。 とにかく printf("EOF\n") というまったく求められていない出力を printf("same content\n"); printf("shorter: data1.txt\n"); printf("shorter: data2.txt\n"); printf("different characters appear\n"); に書き換える。 それができれば次の話(条件分岐の話)ができる。 >>181 このスレの前の方にSEになれってという指導があったけどそれはあってるけど、誰かがプログラミングをやらなければならないという前提でこのレベルだとこの国は終了ですね。 プログラミングできないSEってお笑いしかない。 >>190 その通り。 文科省は平成になってから日本の教育を根底からダメにしてきた。 1ヶ月ちょっとに詰め込む内容と課題量じゃないだろって話 政治の批判ならよそでやってくれ >>191 文科省だけでないよ。丸投げしソフトハウスを買い叩くITゼネコン、受注欲しさにバーゲンセールする営業とそれを承認する経営。 こんなんだからデベロッパーがいなくなった。北米だとプログラマーはそれなりの地位で給与もいい。 こんなに苦労しても報われない。 だからプログラミングできない自称SE様に流れてしまう事象もあると思う。 >>193 そうだね。 日本が落ちぶれた原因がそこにある。 円安にしないと生き残れない日本企業。 円安にすると、日本国民が貧乏になるのに。 >>186 この大学に留年はないのでは? 他大学生ですか? 5-1の数字の出力の仕方がどうしてもわからん for(ch= 0; ch<=128; ch++) count[ch]= 0; for(; (ch= getchar())!=EOF;){ count[isdigit(ch)]++; if( islower(ch) ) count[tolower(ch)]++; if( isupper(ch) ) count[toupper(ch)]++; } ってやったらエラーになっちゃった >>196 isdigitやislowerなどは一切必要ないよ。 これらは数字だったら真を返す、小文字だったら真を返す、といった関数。 おそらく課題文を読み間違えてる。 数字が何個だったか、小文字が何個だったかを数えるのではない。 出現した各文字の個数を数えるんだ。数字が全部で何個だったかは必要ない。 第五回講義資料の98ページにほとんど答に近いコードが書かれてるよ。 少しは編集が必要だけど、すぐにわかるだろう。 >>197 ありがとうございます!おかげでできました! 自分で考えると斜め上のこと書いちゃうな(´・ω・`) 今更だけど… 4-1の標準出力が「NG:date.txt」とずっと表示されてるのに、点数が100点で合格になっているのが個人的にすごいモヤモヤする。 何を基準にこの点なのか理解できない >>199 4-2を受講しないでやってたから意味がわかってなかった。スレ汚し失礼 >>188 さん ありがとう。今日仕事休みだから試してみる。ギリギリまで粘ってみるよ。 君みたいな同じ学生がいるとは。 やめろとかこんなのもわからないのかとか批判しかしないで初学を馬鹿にするやつらとは人間性が違うな本当に。 >>197 ,198 横からすいません! と言うことは5-1はある一定の文字列から記号を省くのではなく、「数字」「大文字」「小文字」と定義をして出力するのでしょうか?どうしても記号が邪魔で悩んでます… >>203 よく戻ってきたね。 第四回の課題は実際難しくて、第五回になるとまた簡単になるよ。(講義の中に答が示されてる) 煮詰まったら次の問題を先にやるのも悪くないよ。 締切を過ぎても「再提出」ができるから焦ることはない。 if(cf==EOF && fgetc(g)==EOF) { printf("same content\n"); } これの意味 cf=EOF【data1.txtの文字列が尽きたら(最後まで読み込んでいたら)】 &&【かつ】 fgetc(g)==EOF【data2.txtの文字列が尽きたら(最後まで読み込んだら】 printf("same content\n");【same content改行と出力する】 だよ。 cf==EOFをcf!=EOFに変えると、【data1.txtの文字列が尽きていなかったら】になる。 がんばれー >>205 5-1なんだがよくわからない。 #include <stdio.h> int main(int argc,char *argv[]){ int c[128]; int ch; for(ch= 0; ch!=128; ch++) c[ch]= 0; for(; (ch=getchar())!=EOF;){ [tolower(ch)]++; } for(ch='a';ch<='z';ch++){ if(c[ch]!=0) printf("%c:%d\n",ch,c[ch]); } 講義のを打ってコンパイルしたら何でかエラーが出るんだけど・・・ >>204 そうじゃない。また問題を読み間違ってる。 「数字」「大文字」「小文字」を数えるのではなく、 0は何回出てきたか 1は何回出てきたか 2は何回出てきたか 〜 9は何回出てきたか Aは何回出てきたか Bは何回出てきたか Cは何回出てきたか 〜 Zは何回出てきたか aは何回出てきたか bは何回出てきたか cは何回出てきたか 〜 zは何回出てきたか これを数えるんだ。 >>197 をもう一度読み返して。 >>207 それってこの過大にある左の入力画面の? 1 1 2 1 3 1 4 1 B 1 K 1 a 1 c 2 d 1 e 3 h 2 k 2 l 1 m 1 n 1 o 4 r 1 s 1 t 2 u 1 y 1 をみて 例えば1は1回、Bは1回、tは2かいとかってこと? そんなコード講義でどこで教えてるの? >>206 最初に #include <stdio.h> #include <ctype.h> が抜けている。 最後に return 0; } が抜けている。 [tolower(ch)]++; この行が講義のと違ってるよ。一文字抜けてる。 #include <stdio.h> #include <ctype.h> int main(int argc, char *argv[]){ int count[128]; int ch; for(ch= 0; ch!=128; ch++) count[ch]= 0; for(; (ch= getchar())!=EOF;){ count[tolower(ch)]++; } for(ch= '1'; ch<='9'; ch++){ if( count[ch]!=0 ) printf("%c %d\n", ch,count[ch]); } for(ch= 'A'; ch<='Z'; ch++){ if( count[ch]!=0 ) printf("%c %d\n", ch,count[ch]); } return 0; } >>209 まさにその通り。 講義資料の86ページから99ページまでで教えてるよ。 98, 99ページにはほとんど答が書いてあるから、それを軽く編集するだけでできあがる。 講義内のコードはaからzまでのぶん。 これに0から9までとAからZまでを付け加えればいいんだ。 >>211 数字は1から9じゃなくて0から9ね。 count[tolower(ch)]++; これは大文字を小文字に変換する命令。 課題は大文字と小文字を同じに扱うんじゃなくて別の文字として扱えと言ってる。だからこれはいらない。 そして、aからzまでのコードを付け加える。 今のままだと、AからZまでを数えるコードは書かれてるけど、その前に大文字を小文字に変換してるからAからZまで存在しないことになってて数えられていない。 count[ch]++; に書き換えてみて。 #include <stdio.h> #include <ctype.h> int main(int argc, char *argv[]){ int count[128]; int ch; for(ch= 0; ch!=128; ch++) count[ch]= 0; for(; (ch= getchar())!=EOF;){ count[ch]++ } for(ch= '0'; ch<='9'; ch++){ if( count[ch]!=0 ) printf("%c %d\n", ch,count[ch]); } for(ch= 'a'; ch<='z'; ch++){ if( count[ch]!=0 ) printf("%c %d\n", ch,count[ch]); } for(ch= 'A'; ch<='Z'; ch++){ if( count[ch]!=0 ) printf("%c %d\n", ch,count[ch]); } >>214 さすがにコード見れなきゃ答えようがない。 >>215 最後に return 0; } が抜けている。 count[ch]++ の後ろに一文字足りない。 >>207 これ以上ないくらいわかりやすいです。 お陰で解けました、ありがとうございます >>220 大文字と小文字の順番が逆。 採点コーナーの失敗例を見ればすぐにわかるよ。 #include <stdio.h> #include <ctype.h> int main(int argc, char *argv[]){ int count[128]; int ch; for(ch= 0; ch!=128; ch++) count[ch]= 0; for(; (ch= getchar())!=EOF;){ count[ch]++; } for(ch= '0'; ch<='9'; ch++){ if( count[ch]!=0 ) printf("%c %d\n", ch,count[ch]); } for(ch= 'A'; ch<='Z'; ch++){ if( count[ch]!=0 ) printf("%c %d\n", ch,count[ch]); } for(ch= 'a'; ch<='z'; ch++){ if( count[ch]!=0 ) printf("%c %d\n", ch,count[ch]); } return o; } in countって出て40点変わらないよ・・・・ >>223 と>>224 は同じ人だよな? >>223 は100点が取れる完成プログラムだから、 こういうのは貼り付けるのは良くないから控えるようにしよう。 でもそのままだとコンパイルエラーが出るはず。 エラーメッセージをGoogle翻訳にでもかければ、 どこが間違ってるのか(何行目の何という文字が間違ってるのか)すぐにわかるよ。 それを修正すれば、もう100点だ。 出来たプログラムは貼り付けないでね。 すいません… 今5-4やってますが、(課題略) 実行を押すと数字並びの所(というか下)の結果が全て「0」になってしまいます。 試しに数字並びのプラログラムを上へ、英字を下へ入力すると今度は数字並びの結果(↑)はしっかり出て、逆に英字並び(↓)は「0」に… これはどういうことなのかわかりますかね? 5-2をやってるんですが 採点が0点です CW:1〜CW:58と下にずらっと出ます 何が間違いなんでしょうか・ >>227 詳しく見ないとわかりませんが… 恐らく英字並びではなく単語をカウントしてないですかね? 後、5-2の答えは既に授業にそのまま出てますよ。 >>226 if(〜)の文を数字と英字の二つ用意してると思うけど、両方を同じfor文の中に入れてるかな? for文を二つ作るのではないよ。 >>227 根本的にいろいろ間違ってそうなので。コード晒してみて。 まだ答に近くなってないみたいだから大丈夫だよ。 >>229 指摘ありがとうございます! for2つを1つにしてみましたが、 依然結果は変わりません… いれるというのは for分から{if〜}{if〜}で繋げるという意味ですよね? >>233 一応だけど、プログラムには本人のクセが必ず出るから、 誰が書いたものなのかわかりやすいんだ。 5chに書いた人が誰なのかわかってしまうから、 あっちに書くのかコッチにかくのかどちらかにしておいたほうがいいよ。 >>231 その通りだよ。 >for分から{if〜}{if〜}で繋げる これで間違っていない。 そこまでできていれば100点になるはずだけど。 結果が変わらないとは不可解。 二つのif文の違いは、isalpha(ch)かisdigit(ch)の違いだけ。 どうにも煮詰まったらコード晒してみて。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる