📘 CodingMarble Learn

問題解決の基本

コンピュータで問題を解くには段階があります。まず問題を分析し(入力・出力・ルールを確認)、アルゴリズム(有限で明確な順番のある手順)を作り、プログラミング言語でコードにし、いろいろな入力でテストし、エラーを見つけて直します(デバッグ)。アルゴリズムはフローチャート(楕円=開始・終了、平行四辺形=入力・出力、長方形=処理、ひし形=判断、矢印=流れ)や擬似コード(わかりやすい言葉で書いた手順)で表せます。問題の分割とは、大きな問題を小さな問題に分けてそれぞれ解き、あとで組み合わせることです。

🎬 ステップ別ストーリー

  1. 問題解決には5つの段階があります。分析、アルゴリズム、コード、テスト、デバッグです。
  2. 問題の分割とは、大きな問題を小さな部分に分けることです。1つずつ解いて、最後に組み合わせます。
  3. フローチャートは図形で書きます。楕円は開始か終了、平行四辺形は入力か出力、長方形は処理、ひし形は判断です。
  4. これはAとBの大きい方を表示するフローチャートです。7は4より大きいので、玉は「はい」の道を進みます。
  5. 擬似コードは、同じ手順をやさしい言葉で1行ずつ書いたものです。
  6. あなたの番です。AとBを選んで、玉がどの道を通るか見てみましょう。

ヒント:3Dをドラッグすると回せます。2本指で拡大・縮小できます。

🤔 よくある疑問をスッキリ解決

コードを書く前に、なぜアルゴリズムを書くのですか。

先に手順をよく考えておけば、正しい考えでコードが書けます。計画を直すほうが、大きなプログラムを直すよりずっと楽です。

問題の分割は大きなソフトだけのものですか。

いいえ。小さなプログラムでも、入力・処理・出力に分けると作りやすくなります。

判断になぜひし形を使うのですか。

ひし形は、出口が2つある「はい・いいえ」の質問を表します。長方形は出口が1つだけなので、道を分けることができません。

AとBが等しいときはどうなりますか。

A > B は成り立たないので、玉は「いいえ」の道を通ってBを表示します。同じ値なので結果は同じです。自由に動かして試してみましょう。

フローチャートと擬似コードは、どちらがよいですか。

小さな問題ではフローチャートのほうが見やすく、大きな問題では擬似コードのほうが早く書けて、本物のコードにも近くなります。

問題解決の手順

  1. 問題を分析する:何が与えられているか(入力)、何を求めるか(出力)、どんなルールがあるかを理解します。
  2. アルゴリズムを作る:解き方を、はっきりした順番の手順として書きます。
  3. コードにする:アルゴリズムをPythonなどの言語のプログラムに直します。
  4. テストする:いろいろな入力で動かします。0、負の数、とても大きい値などの極端な場合も試します。
  5. デバッグする:エラーを見つけて直し、もう一度テストします。

アルゴリズムには条件があります。入力と出力がはっきりしていること、手順が有限であること(必ず止まる)、手順があいまいでないこと、そして正しい結果が出ることです。

フローチャート

フローチャートは、決まった記号を矢印でつないでアルゴリズムを絵にしたものです。

フローチャートは目で見てわかりやすいですが、大きな問題では図が大きくなってしまいます。

擬似コード

擬似コードは、INPUT、COMPUTE、PRINT、IF…ELSE、WHILEなどのキーワードを使い、ふつうの言葉に近い文でアルゴリズムを書く方法です。本物のプログラミング言語ではないので、細かい書き方のルールは気にしません。

INPUT A, B
IF A > B THEN
    PRINT A
ELSE
    PRINT B

アルゴリズムには、順次(手順を順番に行う)、選択(IFによる判断)、繰り返し(ループ)の3つの組み立て方があります。

問題の分割

問題の分割(分解)とは、複雑な問題を、小さくて簡単な問題に分けることです。それぞれの部分を(別々の人や関数が)解き、最後に組み合わせます。

例:鉄道の予約システムは、列車を探す、空席を調べる、切符を予約する、支払いを受ける、切符を印刷する、に分けられます。

よいところ:理解しやすい、作業を分担できる、エラーを見つけやすい、部品をまた使える。

試験で大切なところ

よく出る問題:簡単な作業のフローチャートや擬似コードを書く(2つの数の大きい方、1からnまでの合計、偶数か奇数か、点数から成績を決める)、記号の名前を答える、問題解決の手順を並べる、例を使って問題の分割を説明する。

重要な公式と用語

例題

1. 長方形の面積を求めるアルゴリズムを書きなさい。

1. 開始。 2. 縦L と横B を入力する。 3. 面積 = L × B。 4. 面積を表示する。 5. 終了。

2. 数が偶数か奇数かを調べる擬似コードを書きなさい。

INPUT N IF N MOD 2 = 0 THEN PRINT "Even" ELSE PRINT "Odd"

3. 1から10までの合計を表示するフローチャートを説明しなさい。

開始 → 処理:sum = 0, i = 1 → 判断:i <= 10 か? → はい:処理 sum = sum + i, i = i + 1 を行い、矢印で判断に戻る → いいえ:sum を出力 → 終了。

4. 「学校の運動会を開く」を小さな問題に分けなさい。

小さな問題:種目を決める、生徒を登録する、グラウンドと道具を準備する、時間割を作る、審判をして結果を記録する、表彰する。それぞれをチームが担当し、最後に1つにまとめる。

5. A = 5、B = 12 のとき、大きい方を表示するフローチャートをたどりなさい。

開始 → 入力 A = 5, B = 12 → 5 > 12 か? いいえ → B = 12 を表示 → 終了。

6. 点数が90以上ならA、75以上ならB、それ以外はCと表示する擬似コードを書きなさい。

INPUT M IF M >= 90 THEN PRINT "A" ELSE IF M >= 75 THEN PRINT "B" ELSE PRINT "C"

よくある間違い

練習クイズ

1. フローチャートで判断を表す記号はどれですか。
2. エラーを見つけて取り除くことを何といいますか。
3. アルゴリズムは次のどれでなければなりませんか。
4. フローチャートで入力と出力に使う記号は何ですか。
5. 問題を小さな部分に分けることを何といいますか。

練習:自分で答えてみよう

答えを入力するか選んで、「チェック」を押そう。困ったらヒントを見てね。解答は答えたあとに表示されます。

よくある質問

問題解決の手順は何ですか。

問題を分析し、アルゴリズムを作り、コードにして、テストし、デバッグします。

アルゴリズムとフローチャートはどう違いますか。

アルゴリズムは手順を言葉で書いた解き方で、フローチャートは同じ手順を記号で表した図です。

問題の分割とは何ですか。

複雑な問題を小さな問題に分け、別々に解いてから組み合わせることです。

学ぶ場所

Canada (Ontario)Grade 10C. Programming
Canada (Ontario)Grade 11B. Software Development
Canada (Ontario)Grade 11B. Software Development
ItalySecondaria di secondo grado – classe 1ªComputer basics and programming
ItalySecondaria di secondo grado – classe 1ªElements of computer science
ItalySecondaria di secondo grado – classe 1ªElements of computer science
ItalySecondaria di secondo grado – classe 1ªElements of computer science
ItalySecondaria di secondo grado – classe 2ªComputer basics and programming
ItalySecondaria di secondo grado – classe 2ªElements of computer science
ItalySecondaria di secondo grado – classe 2ªElements of computer science
ItalySecondaria di secondo grado – classe 2ªElements of computer science
NetherlandsVWO 3 (onderbouw)Mathematical thinking
NetherlandsHAVO 4 (bovenbouw, 2e fase)Foundations
NetherlandsVWO 4 (bovenbouw, 2e fase)Foundations
PolandLiceum ogólnokształcące, klasa IUnderstanding, analysing and solving problems
PolandLiceum ogólnokształcące, klasa IIIDesigning and programming algorithms (I + II)
RomaniaClasa a VIII-aAlgorithms
RomaniaClasa a IX-aMilitary profile (mathematics-informatics, military)
RomaniaClasa a X-aFundamental algorithms on arrays
Spain2º ESOComputational thinking, programming and robotics
Spain3º ESOComputational thinking, programming and robotics
Spain1º BachilleratoAlgebraic Sense
Spain1º BachilleratoAlgebraic Sense
Spain1º BachilleratoAlgebraic sense and computational thinking
CBSE (India)Class 11Computational Thinking and Programming - 1
England (GCSE, A level)Year 103.1 Fundamentals of algorithms
USA (Common Core, NGSS, AP)Grade 8Algorithms and Programming
USA (Common Core, NGSS, AP)Grade 9Algorithms and Programming
USA (Common Core, NGSS, AP)Grade 10Big Idea 3: Algorithms and Programming
USA (Common Core, NGSS, AP)Grade 11Algorithms and Programming
Japan高校(専門学科)1〜3年Programming
Japan高校(専門学科)1〜3年Programming Technology
South Korea중학교 2학년Algorithms and programming
South Korea중학교 3학년Abstraction and algorithms
South Korea고등학교 3학년Abstraction and algorithms
FrancePremièreAlgorithms
FranceTerminaleAlgorithms
FranceTerminaleSpecific option — management information systems
Russia7 классAlgorithms and programming
Russia8 классAlgorithms and programming
Russia10 классAlgorithms and programming
China高一Comp.1 Ch.2 Algorithms and programs

次に学ぼう