【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大阪 総合校舎) 名古屋 名古屋駅前サテライトキャンパス (総合校舎スパイラルタワーズ) 設置者 学校法人 日本教育財団(旧学校法人モード学園) >>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分を使えばいいのですかね…? >>290 さん いや・・・今食い久野を教えてほしいんですが・・・もう時間がないので >>292 さん もう時間がないので教えてくださいそれでもわかりません。 >>303 nの範囲? 1 < n < 9500 これのことを言ってるのかな。 これは標準入力に与えられる値がこの範囲にありますよというだけで、 プログラムには何も各必要ないよ。 バカでかい数値が入力された場合を考慮する必要はないってこと。 >>305 cw1 cw2 state1 state2 とそれぞれ書き換えて。 >>306 え!? 標準入力 10000 8191 提出プログラムの標準出力 10000/81 = 123.1234'567901234 というようにnがある一定の数値を読み込めなくなったので必要だと思ってました… じゃあプログラムが根本的に違うのかな >>308 nである8191は9500以外なので問題文のとおり。 いずれにしてもそこは今作るべきプログラムに関係ないので無視して進めよう。 >>308 採点では0点になるだろうけど、そのプログラムの完成度はもう90%以上。 根本的に間違ってないので、小さなミスを修正するだけだよ。 >>308 です。 8191の所は無事に解決しました、ありがとうございます! ただ、出力が上手くいかないですね… 何故か少数第一が削除された状態で反映されてしまいます… 入力1 71 8 出力1 71/8 = 8.75 みたいな感じです、いったい何なんだ… >>312 int rr[n], qq[n]; ではなく、 int *rr, *qq; と宣言しておいて、 nを読み込んだ後に、 rr= calloc(n, sizeof(int)); qq= calloc(n, sizeof(int)); と配列を作る。 callocを使うには #include <stdlib.h> も必要。 割り算を繰り返して配列に値を入れ込むfor文の外(前)に、 1回目の割り算を事前にやっておく。 for文の中では2回目以降が実施される。 for文の上(前)に q= r/n; r= r%n; これで100点。 >>313 ここ見逃してました、おかげで100点いけましたありがとうございます! >>307 え、どういうこと?もう一度はるね #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(state1==0&&isalpha(ch)) cw++; if(state2==0&&isdigit(in)) cw++; state2= (isdigit(in) ? 1 : 0 ); state1= (isalpha(ch) ? 1 : 0 ); } printf("%d\n",cw); return 0; } >>315 if(state1==0&&isalpha(ch)) cw++; if(state2==0&&isdigit(in)) cw++; cw1, cw2に変わってない。 isdigit(ch) isdigit(in) (ch)か(in)かどちらかに統一。 int in,cw,ch,state; 追加した変数の宣言ができていない。 state2= (isdigit(in) ? 1 : 0 ); state1= (isalpha(ch) ? 1 : 0 ); なぜ1と2を逆にした? printf("%d\n",cw); cw1とcw2に変わってない。 そもそも何をやろうとしているのかわかっていない模様。英字並びを数えるコードは講義で示されている。 これを英字と数字を数える、に編集するのが狙い。 なのに出力が1個だけという時点で課題を理解してないなというのがわかるよ。 1と2というのは英字を数える入れ物と数字を数える入れ物という意味だよ。 そこをまとめてしまったり一部を逆にしたりすれば、それぞえを数えることができないよ。 上記を修正すればとりあえず100点とれるけど、なぜなのかを良く理解したほうがいいよ。 >>312 うまく出力出来ないです・・・ どこが間違ってるのか教えて下さい・・・ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる