【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大阪 総合校舎) 名古屋 名古屋駅前サテライトキャンパス (総合校舎スパイラルタワーズ) 設置者 学校法人 日本教育財団(旧学校法人モード学園) >>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)の違いだけ。 どうにも煮詰まったらコード晒してみて。 昨日から6-4プログラミングを8時間くらいやってようやく100点になったぞー! 次は7-4か… まだ8回には一切手を出せてない… >>234 6-4頑張ったな! これは無茶苦茶難しいやつだ。これをクリアできるとはすごい!! しかしだ、7-4はそれ以上だ。 というよりあの難しい6-4とは比較にならないくらいだよ。 数学が得意な人にとってはそうでもないのかもしれないけど。 ちなみに8回は7回と違っては簡単だから、 そっちを先にやっつけてしまうのがお奨めだよ。 >>233 早速ですがお力添えをお願いします… ca= cw= state= 0; for(; (ch=getchar())!=EOF;){ if( state==0 && isalpha(ch) ) ca++; state= (isalpha(ch) ? 1:0 ); }{ if( state==0 && isdigit(ch) ) cw++; state= (isdigit(ch) ? 1:0 ); } printf("%d\n", ca); printf("%d\n", cw); 主に原因がありそうなのはこのあたりですよね >>236 ifの中にifを入れてる構造になってるね。 中にいれないで、二つのifは並列に並べたらいい。 ※ }{の行を消すだけでそうなるよ。 そのかわりに、staitを二つ用意するんだ。 s1とs2なんて感じでいい。 数字とアルファベットでステータスの記録を別々に行うんだ。 ちょっと表現がわかりにくいかな?すまん。 わからなかったらもう一度聞いてね。 >>237 その指摘ですぐ100点いけました! 改めて言われるとなんで出来なかったのかが不思議なくらいです… 分かりやすいアドバイスをありがとうございました! >>238 238だけじゃなく今までの全てがそうなんだけど、「出来ました!」って報告が何よりも嬉しい。 それがおれのモチベーションだよ。 みんな一緒にがんばろう! 227です5−2ですがこんな感じです #include <stdio.h> #include <ctype.h> int main(int argc, char* argv[]){ int in,cw,state; in=0; cw=0; state=0; for( ; (in=getchar())!=EOF ; ) { state=(isalpha(in) ? 1 : 0 ); cw++; if( isalpha(in) && state==0) printf("state:%d\n",state); printf("CW:%d\n",cw); } printf("%d\n",cw); return 0; } エ、どの講義ですか? >>240 ごめん。もうこの時間酔っぱらってるから適切なアドバイスできないかもしれない。 if(state==0 && isalpha(in)) cw++; state=(isalpha(in) ? 1:0); } 君のコードのある部分を上記に書き換えればOK。 上記コードの意味がわかる人だろうっていうのが前提ね。 明日になればシラフでもっとまともなアドバイスができるかもしれないけど、 今日はこれで勘弁してね。 5-2 こんな感じ? #include <stdio.h> #include <ctype.h> int main(int argc, char* argv[]){ int ch; int ca; ca=0 for(; (ch=getchar())!=EOF;) { if( isalpha(ch)) ca++; if( islower(ch)) ca++; if( isdigit(ch)) ca++; } printf("%d\n",ca); return 0; } >>242 いやいや、ずいぶん悪くなってる。 >>240 に対する>>241 をもう一度読み返してみて。 if(state==0 && isalpha(in)) cw++; state=(isalpha(in) ? 1:0); } これに差し替えてって言ってるけど、それが含まれてないじゃない? すっかり酔っぱらったので、今日は店じまいです。 この後は明日返事するね。 がんばって! #include <stdio.h> #include <ctype.h> int main(int argc, char* argv[]){ int in,cw,state; in=0; cw=0; state=0; for( ; (in=getchar())!=EOF ; ) { { if(state==0 && isalpha(in)) cw++; state=(isalpha(in) ? 1:0); } printf("state:%d\n",state); printf("CW:%d\n",cw); printf("%d\n",cw); return 0; } エラー出るんだけど5−2 いみわかんねえ >>244 10行目と11行目に { がダブってるからだよ。 >>243 意や意味わかってないよ #include <stdio.h> #include <ctype.h> int main(int argc, char* argv[]){ int in,cw,state; in=0; cw=0; state=0; for( ; (in=getchar())!=EOF ; ) { if(state==0 && isalpha(in)) cw++; state=(isalpha(in) ? 1 : 0 ); } printf("state:%d\n",state); printf("CW:%d\n",cw); printf("%d\n",cw); return 0; } 書き換えたが state:0 CW:12 12とでる これstateとCWいらなくない?けしちゃだめなの? >>246 必要な出力がもうすでにでてますね。 課題に必要な出力は1個なので他を消せば終わりです そう言えばもう4-5が納期超えたんだよね。 頑張れみんな。 エラーと出たらメッセージをコピぺしよう。 知ってるお兄さん達の確認時間が省けるから。 >>246 すでに>>247 が答えてくれてるけど、stateとCWはいらないね。 それはそのコードを書いた人が変数の中身を書きだして プログラムの動きを確認しようとしているもの。 他人のコードを参考にするのはいいけど、理解せずにまるごとコピペじゃダメだよ。 >>247 さん ありがとう!とけました! 続けて5−3やってるんですけど数字を一個一個カウントしてしまってる。連なっているものを一個としてカウントさせるにはどうしたらいいんですかね・・ #include <stdio.h> #include <ctype.h> int main(int argc, char* argv[]){ int in,cw; for( ; (in=getchar())!=EOF ; ) { if( isdigit(in)) cw++; isdigit((in) ? 1 : 0 ); } printf("%d\n",cw); return 0; } >>255 ファイル名「data1.txt」を開くので、当然fopenを使うよ。 >>256 講義資料の40ページから81ページでやりかたを解説されてるよ。 全部読まなくても80, 81ページにはほとんど答が書かれてる。 >>254 福祉では難しい科目の話題は出てないね。 福祉の人の書き込み少なくなっちゃった。 来年はどうなるかわからないけど、福祉は今のところは大丈夫。 プログラミングみたいに地獄そうな教科はないよ。 どちらかというと、導入科目が情報寄りで、てんてこ舞いしてる。 >>258 いや数字の連なりを1カウントするやり方なんてどこにも書いてないが? >>258 講義資料通りにうってもコンパイルエラーが出てしまいます どこが間違ってるのでしょうか?? #include <stdio.h> #include <ctype.h> int main(int argc, char* argv[]){ int cw,state; cw=0; state=0; for( ; (ch=getchar())!=EOF ; ) { if( state==0 && isalpha(ch) ) cw++; state=(isalpha(ch) ? 1 : 0 ); } printf("%d\n",cw); return 0; } 61.1% 2-1 239名 (61.1%) コピペ 51.3% 2-4 200名 (51.3%) 変数 for文 37.7% 3-4 147名 (37.7%) 変数 for文 15.9% 4-4 62名 (15.9%) 条件分岐 20.5% 5-4 80名 (20.5%) ライブラリ 6.7% 6-4 26名 (6.7%) 配列 1.5% 7-4 6名 (1.5%) 長桁計算 2.6% 8-4 10名 (2.6%) 引数 第四回より第五回の方が合格者数多いことに注目。 第七回より第八回も同じ。 四回、七回で行き詰った人は五回、八回を先に済ませてしまおう。 うーん、6-3のプログラムの建て方がわからない。 入力がただファイルになっただけなのにもうこんがらがってしまう… 高3なんですが映像の専門卒業後ここ編入若しくは他大学入学しようかなと考えてます 安いのが一番重視している点なんですが編入で入ったとして授業ついていけなかったらどうしようとここ見て思いました… プログラミング1からでしかも編入でってのは厳しそうですかね 5-3なのですが、このプログラムだと33点しか取れません。どなたかヒントを 頂けないでしょうか。 #include <stdio.h> #include <ctype.h> int main(int argc, char* argv[]){ int in,cw,state; in=0, cw=0; state=0; for( ; (in=getchar())!=EOF ; ) { if(state==1 && isdigit(in)) cw++; state=(isdigit(in) ? 1 : 0 ); } printf("%d\n",cw); return 0; } 惜しいところまでいってるね。 ヒントを言うと答え言っちゃってるみたいなもんだから言えないけど、あと一息! >>270 うーん、そのどこがどう惜しいかがイマイチよく分からないんですよね。完全に手詰まりです >>268 この程度でむずかしそうだと思うのならついていくのは無理だと思う >>269 5-2は出来てるの? 5-2と5-3の課題を見比べて、何が違うか理解できればすぐ出来るよ 6-3難しいなあ char word[data1.txt]; みたいなことは書けないのかな? >>275 書けるよ、4-1でやったことがまたここで入ってくる >>272 そんなコメント誰も求めてねーよ。 お前は人に対して思いやりがないんだなあ、、かわいそうに 5−4なんだけど #include <stdio.h> #include <ctype.h> int main(int argc, char* argv[]){ int in,cw,ch,state; cw=0; state= 0; for( ; (in=getchar())!=EOF ; ) { if( state==0 && isalpha(ch)) cw++; if( state==0 && isdigit(in)) cw++; state= (isdigit(in) ? 1 : 0 ); state= (isalpha(ch) ? 1 : 0 ); } printf("%d\n",cw); return 0; } で採点するとセグメンテーションフォルトが発生しましたで採点してくれないんだが・・・ >>276 すいません全くわかりません #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char* argv[]){ #define fn "data1.txt" char line[data1.txt]; char word[data1.txt]; int n; char *p; FILE *f, *g; f= fopen(fn, "p"); g= stdout; fgets(word,data1.txt,stdin); ... こう書いてみましたがエラーいっぱい出てしまいました >>279 丸々写したらエラーになっちゃうよ。 4-1でやったのは複写、だけど今回はファイルを開くだけでいいんだよ、まず要らないのがあるからそれを消して見て。 >>280 は >>275 のアンカミスだね。 もうこれ答だよ。 >>268 プログラミングに興味持てそうなら大丈夫だと思うよ。ここまでのプログラムスレ化を見ればわかると思うけど。 ただ講義だけでなんとかしようとすると辛い。自分で調べるようにしないと。 >>283 激しく乱文しちゃった 言いたかったのは プログラミングに興味持てそうなら大丈夫だと思うよ。 ただ講義だけでなんとかしようとすると辛い。自分で調べるようにしないと。 ここまでのプログラムスレ化を見ればわかると思うけど。 >>278 stateは『並び』の状態であるか否かは記録する変数だよ。 英字と数字で同じいれものに記録してたら記録にならない。 別のいれものを用意するんだ。 7-1の講義で出た1/nのプログラム、あれは何を1と定義して出来上げてるのか全く分かりません… どなたか教えてください! >>286 %のことかな。 %は割り算の余りを意味します。 >>285 別の入れ物ですか?どういうこと? それとなんかセグメンテーションフォルトとかいうエラーが発生するんだけどこれなに? 採点も実行もロクにできないんだけど。 >>289 セグメンテーションエラーにはいろいろあるけど、この場合でいうとchとinの初期値が定義されていないからかな。 でも結果は多分上手くいかないと思う。 >>290 inはgetcharで値が入るからいいとして、問題となるのはchだね。chには値が入ってないのにisalphaするからセグメンテーションエラーになる。 >>289 入れ物とは変数のこと。 英字用の変数と数字用の変数をそれぞれ用意するんだ。 今のコードの変数『cw』と『state』に英字も数字もどちらも入れ込もうとしてるからそれぞれを数えるのは無理。 セグメンテーションエラーは、 変数inは in=getchar())!=EOF ここで代入されてるけど、 変数cwには何も代入されていないから。 inとchは数字と英字に変数をわけている。 だけど『cw』と『state』は・・・ ここでプログラミングの質問に対して教えてくれる人ってやっぱり元々やったことある人なのかね >>293 ずっとここで教えてきたけど、実は素人の初学者だよ。 >>288 なるほど、だからr=r%nと表記されてるところがあるのですね。 今7-1の課題を行ってますが小数点以下が反映されません… どなたか助言頂けませんか? 失礼ですが下にプログラム貼らせていただきます #include <stdio.h> int main(int argc, char *argv[]){ int n,m; int r, q, i, j, k; scanf("%d%2d\n", &n, &m); int rr[n], qq[n]; r= 1; k= 0; for(i= 1; r!=0 && k==0; i++){ rr[i]= r; r*= 10; q= r/n; qq[i]= q; r= r%n; for(k= i; k!=0 && rr[k]!=r; k--); } printf("%d",n); printf("/"); printf("%d",m); printf(" = "); printf("%d",n/m); printf("."); for(j= 1; j!=i; j++){ if( r!=0 && j==k ) printf("'"); printf("%d", qq[j]); } printf("\n"); return 0; } 6-1なのですが、このプログラムには何が足りないのでしょうか #include <stdio.h> #include <string.h> int main(int argc, char *argy[1]){ #define LINESIZE 100 char line[LINESIZE]; for(;fgets(line,LINESIZE,stdin)!=NULL;){ printf("%d> ", (int)strlen(line)-1); fputs(line, stdout); } return 0; } >>295 mとnが逆 r= 1;が間違い (後で出てくるr/nは1/nという意味になってしまう。お題はm/n) これだけでは完成しないけどかなり近づくはず。 >>296 for(;fgets(line,LINESIZE,stdin)!=NULL;){ これだけでは行番号を数えられないので、forの( )カッコ内で i=1と初期化し、繰り返す度にi++とすればiが行番号になる。 forの波カッコ{ }内の最初に行番号を出力する。3桁の幅を取って。 その次に行内の文字数を数える for(ch=0; line[ch]!='\n';ch++); このchを出力する。 こんなプログラムになりました #include <stdio.h> #include <string.h> int main(int argc, char *argy[1]){ #define LINESIZE 100 char s [42line[LINESIZE]; for(i=1; fgets(line,LINESIZE,stdin)!=NULL; i++ ){ for(ch=0; line[ch]!=`\n`;ch++); printf("%d> ", (int)strlen(line)-1); fputs(line, stdout); } return 0; }>>298 >>296 42[ Oh where, oh where has my little dog gone? 30[ Oh where, oh where can he be? 46[ With his ears cut short and his tail cut long, 26[ Oh where, oh where is he? 26[ Oh where, oh where is he? … 26[ Oh where, oh where is he? こうなるんだが? >>299 char s [42line[LINESIZE]; この行は意図がよくわからない。 "s"と"42"がどのような意味をもつのか。 どちらも必要ないのでは? for(i=1; fgets(line,LINESIZE,stdin)!=NULL; i++ ){ この行、完璧です。 for文の中で、まず最初に行番号であるiを出力すること。(3桁の幅も忘れずに) 次にコレ。 for(ch=0; line[ch]!=`\n`;ch++); ここは完璧。問題ない。 その後、 printf("%d> ", (int)strlen(line)-1); これも意図が良くわからない。 "["を出力し、次にchを出力する、そして"]"を出力する。 >>297 ご指摘ありがとうございます。 問題を理解し、m,nは逆に、r=mへと変更しました! 基礎で申し訳ないのですが、nの範囲を指定するのは for分を使えばいいのですかね…? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる