タグ

第16回 安全なプログラム構築のためのエラー処理

はじめに

前回は、コンパイル前に行われる前処理プログラムについて学びました。

これまでの講座では、

  • 変数
  • 条件分岐
  • 繰り返し処理
  • 配列
  • 関数
  • ポインタ
  • 構造体
  • ファイル操作
  • 動的メモリ確保

など、C++でプログラムを作成するための基本的な機能について学んできました。

しかし、実際にプログラムを使用すると、必ずしも作成者が想定した通りに動くとは限りません。

例えば、

  • ユーザーが間違った値を入力する
  • 存在しないファイルを開こうとする
  • 計算できない処理を行う

などの問題が発生する場合があります。

このような問題に対応するために必要なのがエラー処理です。

タグ

第15回 コンパイル前に処理を行う前処理プログラム

はじめに

前回は、プログラム実行中に必要なメモリを確保する動的メモリ確保について学びました。

これまでの講座では、

  • 変数
  • 条件分岐
  • 繰り返し処理
  • 配列
  • 関数
  • ポインタ
  • 構造体
  • ファイル操作
  • メモリ管理

など、C++でプログラムを作成するための基本的な機能について学んできました。

しかし、C++のプログラムは、書いたコードがそのまますぐ実行されるわけではありません。

プログラムを実行するまでには、いくつかの処理が行われています。

その中の一つが前処理です。

前処理を理解することで、

  • #includeの意味
  • #defineの役割
  • ヘッダファイルの仕組み

など、これまで何となく使用していた機能を正しく理解できるようになります。

タグ

第14回 実行中にメモリを確保する動的メモリ確保

はじめに

前回は、プログラムで扱うデータを保存するためのファイル操作について学びました。

ファイルを利用することで、プログラム終了後もデータを保存できるようになりました。

今回は、プログラム実行中に必要な大きさのメモリを確保する動的メモリ確保について学びます。

これまで変数や配列を作成するときは、プログラムを書く時点で必要な大きさを決めていました。

例えば、

int score[100];

では、100個の整数を保存できる配列を作成しています。

しかし、この方法には問題があります。

例えば、

  • 実際には10人分しか必要ない
  • 100人以上になる可能性がある

という場合、あらかじめ適切な大きさを決めることが難しくなります。

そこで、プログラムの実行中に必要な分だけメモリを確保する仕組みを使用します。

これが動的メモリ確保です。

タグ

第13回 ファイルの操作

はじめに

前回は、異なる種類のデータをまとめて管理するための構造体について学びました。

構造体を使用することで、

  • 名前
  • 年齢
  • 点数

など、関連する複数のデータを一つのまとまりとして扱えるようになりました。

しかし、これまで作成したプログラムには大きな問題があります。

それは、

プログラムを終了すると、保存していたデータが消えてしまう

ということです。

例えば、次のようなプログラムを考えます。

int score = 100;

このscoreという変数は、プログラムを実行している間は値を保持しています。

しかし、プログラムを終了すると、変数のデータは失われます。

そこで使用するのがファイルです。

ファイルを利用すると、プログラムの外部へデータを保存し、後から読み込むことができます。

タグ

第12回 複数のデータをまとめる枠組みの構造体

はじめに

前回は、配列とポインタの関係について学びました。

配列を使用すると、同じ型のデータをまとめて管理できます。

例えば、

int score[5];

のように、複数の整数を一つの名前で管理できます。

しかし、現実のデータは同じ種類の情報だけで構成されているとは限りません。

例えば、学生の情報を管理する場合を考えてみましょう。

学生には、

  • 名前
  • 年齢
  • 点数

など、異なる種類のデータが必要になります。

名前は文字列、年齢は整数、点数も整数です。

このような異なる型のデータをまとめて管理するために使用するのが構造体です。

今回の到達目標

  • 構造体とは何かを説明できる。
  • 構造体を定義できる。
  • 構造体の変数を作成できる。
  • メンバへアクセスできる。
  • 構造体と配列を組み合わせて使用できる。

構造体とは

タグ

第11回 配列とポインタについて

はじめに

前回は、変数のアドレスを扱うためのポインタについて学びました。

ポインタを使用すると、変数が保存されている場所を取得したり、その場所に保存されている値を操作したりできます。

一方、第7回では複数のデータをまとめて管理する配列について学びました。

配列とポインタは一見すると別々の機能に見えます。

しかし、C++ではこの2つには深い関係があります。

今回は、配列とポインタがどのように関係しているのかを学びます。

今回の到達目標

  • 配列とポインタの関係を理解する。
  • 配列の先頭アドレスを取得できる。
  • ポインタを使用して配列の要素へアクセスできる。
  • 関数へ配列を渡す方法を理解する。

配列とメモリ

まず、配列がどのように管理されているのかを考えてみましょう。

例えば、次の配列があります。

int data[3] = {10, 20, 30};

この配列は、複数の値を順番に管理しています。

タグ

第10回 他の変数からも書き換え可能なポインタの実装

はじめに

前回は、特定の処理をまとめて再利用するための関数について学びました。

関数を使用すると、処理を分割して整理できます。

しかし、関数を使う中で次のような問題が発生することがあります。

例えば、

void change(int x) {    x = 100; }

という関数を作り、

int num = 10; change(num);

と呼び出した場合、元のnumの値は変化しません。

これは、関数へ渡された値がコピーされているためです。

では、どうすれば別の場所から変数そのものを操作できるのでしょうか。

そこで使用するのがポインタです。

タグ

第9回 特定の処理をまとめる関数の実装

はじめに

前回は、文字の並びを扱うための文字列について学びました。

ここまでで、C++では

  • 変数によるデータの保存
  • 条件分岐による処理の選択
  • 反復処理による繰り返し
  • 配列による複数データの管理
  • 文字列による文字データの管理

など、基本的な処理を実装できるようになりました。

しかし、プログラムが大きくなると新しい問題が発生します。

例えば、同じ計算処理を何度も使用する場合、そのたびに同じコードを書く必要があります。

int result1 = 10 + 20; int result2 = 30 + 40; int result3 = 50 + 60;

このように同じような処理を何度も書くのは、管理が大変になります。

そこでC++では、特定の処理をまとめて再利用するための関数を使用します。

タグ

第8回 文字列

はじめに

前回は、同じ型のデータをまとめて管理する配列について学びました。

これまで学習してきたデータ型では、整数や小数、1文字を扱うことができました。

例えば、

  • 年齢
  • 身長
  • 成績

などはintdoubleで扱うことができます。

しかし、

  • 名前
  • あいさつ
  • メッセージ

などの文字の並びを扱うことはできません。

このような複数の文字が並んだデータを扱うために使用するのが文字列です。

今回の到達目標

  • 文字列とは何かを説明できる。
  • std::stringを使用して文字列を扱える。
  • 文字列の入力と出力ができる。
  • 文字列を連結できる。
  • 文字列の長さを取得できる。

文字列とは

タグ

第7回 同じ型のデータをまとめる配列の実装

はじめに

前回は、同じ処理を繰り返し実行する反復処理について学びました。

しかし、プログラムでは同じ種類のデータを複数扱いたい場面がよくあります。

例えば、5人分のテストの点数を管理したい場合を考えてみましょう。

これまで学習した内容だけで書くと、次のようになります。

int score1 = 80; int score2 = 75; int score3 = 90; int score4 = 68; int score5 = 95;

このように変数を増やしていけば管理できますが、人数が30人、100人と増えていくと、変数を用意するだけでも大変になります。

このようなときに使用するのが配列です。

今回の到達目標

  • 配列とは何かを説明できる。
  • 配列を宣言できる。
  • 配列へ値を保存できる。
  • 添字(インデックス)を使用して要素を取り出せる。
  • 配列と反復処理を組み合わせて使用できる。

配列とは