配列(1) 第9回目 [6月15日、H.16(‘04)] 本日のメニュー 1)前回の課題について 2)前回の宿題について 3)配列 4)課題 プログラミング演習('04) 2018/10/12 第9回目 [6月15日、H.16(‘04)] 配列(1) 本日のメニュー 1)前回の課題について 2)前回の宿題について 3)配列 4)課題 PE04-09.ppt PE04-09.ppt
プログラミング演習('04) 2018/10/12 前回の課題 ファイル名は en8-****.c 教科書の List 4-17、4-18、4-19を良く復習してから、次の各演習を順に処理するプログラムを字下げに注意して作れ。スタイルも評価対象とする。 ・演習4-16、演習4-17(80頁)、 ・演習4-18(81頁) 提出はいつもと同様、リスト印刷とファイル転送 ファイル名の **** は学籍番号の二桁目と下3桁 例:学生番号 034987 ならば xxx-3987.c PE04-09.ppt
縦長・横長の四角形の表示 /* hen1, hen2 に値を入力する*/ if( hen1 > hen2 ) { tate=hen1; yoko=hen2; } else { tate=hen2; yoko=hen1; } for ( i=1; i<=tate; i++) { for ( j=1; j<=yoko; j++) putchar('*'); putchar('\n'); } < *** *** *** *** *** ***** ***** *****
三角形・逆三角形の表示 /* ln に段数を入力する*/ for ( i=1; i<=ln; i++ ) { for ( j=1; j<=i; j++) putchar('*'); putchar('\n'); } i=ln; i>=1; i-- i=1; i>=ln; i++ i=ln; i>=1; i-- for ( j=1; j<=ln-i; j++) putchar(' '); * ** *** **** **** *** ** * * ** *** **** **** *** ** *
ピラミッドの表示 /* dan に段の値を入力する*/ for ( i=1; i<=dan; i++) { for ( j=1; j<=dan-i; j++) putchar(' '); for ( j=1; j<=2*i-1; j++) putchar('*'); putchar('\n'); } * *** ***** *******
課題の提出について ・*がいっぱい出力される。 無限に出力される → 無限ループになっている。 → 無限ループになっている。 for(初期設定式;継続条件式;再設定式) で、 継続条件式の書き方がおかしい 不等号の向きが逆、式の間違え ・入力した二つの値の大小関係を調べていない ・縦長、横長が逆になっている → 横長にする ・三角形の上下が逆 → 画面上側を直角にする ・ピラミッドが右(左)側半分しか出力されない ・段数や*の数が多すぎる、少なすぎる。余分なスペースがある。段がずれている。
前回の宿題 ファイル名は hw8-****.c ◎前回の宿題の発展問題 プログラミング演習('04) ファイル名は hw8-****.c 2018/10/12 前回の宿題 条件を満足する整数は、 6 28 ???? ???? ◎前回の宿題の発展問題 整数 n を順に変えて、約数の和が n のちょうど2倍となるような整数を4つ見つけ出せ。 6の約数は 1 2 3 6 であるから、 1+2+3+6 = 12 → 2x6 28の約数は 1 2 4 7 14 28 であり、 1+2+4+7+14+28 = 56 → 2x28 締め切り: 6月12日(土) 午後1時 リストの提出は、オープン利用室のレポート入れ aucopy でのファイル転送フォルダーは、 [森下伊三男]-[プログラミング演習] PE04-09.ppt
int n, m, sum; /* 4個の完全数を求める */ for ( n=1; n<=10000; n++) { /* 4個の完全数を求める */ for ( n=1; n<=10000; n++) { sum = 0; for ( m=1; m<=n; m++) if ( n % m == 0 ) sum += m; if ( 2*n == sum ) printf(" %d ",n); } 初期値の代入を 忘れない! 約数の合計 を計算する この方法では、 4個目が10000以上だと求まらない! 約数の合計が n の2倍 かどうかを チェックする 6 28 496 8128
int n=1, m, cnt=0, sum; do { /* 別解(forを用いない) */ sum = 0; for ( m=1; m<=n; m++) if ( n%m == 0 ) sum += m; if ( 2*n == sum ) { printf(" %d ",n); cnt++; } n++; } while ( cnt <= 3 );
宿題の提出について ・無限ループ、5個目探し → 4個求めたら停止する ・繰り返す範囲の間違え → インデンテーション → 複合文 { } を適切に使う ・宿題の提出者数が少ない。 ・探す上限を10000にしてしまった。 ・個数の数え方が問題:毎回 0 に初期化している ・うまくプログラムを作るには、 → 全体の流れを、まず、言葉で紙に書いてみる → それぞれの部分をプログラム言語に置き換える → 繰り返し範囲、選択構造などを確認する
プログラミング演習('04) 2018/10/12 今日の課題 ファイル名は en9-****.c 教科書の List 5-1~5-8 を良く復習してから、次の各演習を順に処理するプログラムをインデンテーションや変数名等に気を配って作成せよ。 ・演習5-1、演習5-2(91頁)、 ・演習5-4(93頁)、演習5-5(95頁) 提出はいつもと同様、リスト印刷とファイル転送 ファイル名の **** は学籍番号の二桁目と下3桁 例:学生番号 034987 ならば xxx-3987.c PE04-09.ppt
プログラミング演習('04) 2018/10/12 今日の宿題 [提出はいつもの通り] ◎ 教科書のList5-19を参考にして、1から n までの間のすべての素数を求めよ。(最大10000ぐらい) 1)上限値(n)の値は初め に入力する 2)素数は1行に10個づつ 出力する 3)素数の個数を出力する 4)乗除回数を出力する 上限値を入力せよ:200 200以下の素数は、 2 3 5 7 11 ・・・ 31 37 41 43 47 ・・・ ・・・ 179 181 191 193 197 ・・・ 素数の数は 46 個です。 乗除の回数: 492 ファイル名:hw9-****.c 締め切り: 6月19日(土) 午後1時(厳守) PE04-09.ppt