0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プログラム思考を鍛える

Last updated at Posted at 2024-10-17

プログラム思考をつけたいなら普段からスプレッドシートを使え!

いきなりですが、スマートフォンアプリの電卓使ってませんか?
プログラミングをやりたいなら電卓は禁止です。
では何を使うのか?
その答えは、スプレッドシートです。
Excelはパソコンを使っていれば、今はMicrosoft IDを取ることを矯正されます。
Microsoft IDがあるとMicrosoft 365とOneDriveが無料で使え、Excel Onlineが無料で使えます。
プログラマでは考えにくいですが、PCは持ってないよという人はgoogleアカウントがあればgoogle spreadsheetが使えます。

プログラム思考を鍛える例1

シングルトイレットペーパーの単価を考える。
物価高の昨今、物の値段を考えることは重要です。
ということでトイレットペーパーの単価比較をスプレッドシートで考えてみましょう。
トイレットペーパーは、1ロールで売られていることは少なく、通常は1パックに複数ロール入っています。
単価を考える際は、1パックの値段/ロール数で1ロールの単価が分かります。
1ロールはすべて同じ長さではないので、1mあたりの長さで計算する必要があることがわかります。
なので単価計算は、1パックの値段/(ロール数×1ロールの長さ)で計算に必要なのは1パックの値段・パック中のロール数・1ロールの長さのデータのを集て計算式を入れたシートを作っておけばデータの内容を書き換えるだけで比較デーキルシートが出来上がります。
これでトイレットペーパー単価の比較アプリケーションが出来上がったことになります。

プログラム思考を鍛える例2

割り勘計算を考えてみます。
食事会でよくあるのは割り勘計算です。
考慮すべき内容を、成人男性の参加者数、成人女性の参加者数、子供の参加者数、お釣りを考慮して支払い単位(100円単位で支払うなど)を考慮するとするならば・・・
計算ルールとして
成人男性の支払いを100%:成人女性の支払いを90%:子供の支払いを50%に設定
成人男性が5人、成人女性が6人、子供が5人参加した食事会の支払総額が23,000円
だったとします。
この条件でまずは何を求めるべきかというと1%あたりの支払金額がいくらになるかです。
1%あたりの支払金額は、
支払総額/(成人男性参加者数×100+成人女性参加者数×90+子供の参加者数×50)
となるり
23000/(5×100+6×90+6×50)=23000/1340=17.164...
という端数が出ます。
これで計算する場合、端数を考慮すると
成人男性の支払額は 100×23000/1340=1716.417...という1円以下の端数が出ます。
この端数を切ってしまうと支払額が足りなくなるので切り上げ処理をすると、
成人男性の金額は1717円で更に100円単位支払いにするには17を切り上げる処理となるので1800が支払額になります。
これと同様に成人女性の支払額は90×23000/1340=1600円
子供の支払額は50×23000/1340=900という計算になります。
これを整理すると・・・
必要な情報として、
成人男性の参加者数、成人男性の支払い割合
成人女性の参加者数、成人女性の支払い割合
子供の参加者数、子供の支払い割合
および支払い単位
という情報があれば計算できて、計算例の1340という数値は
成人男性の参加者数×成人男性の支払い割合+成人女性の参加者数×成人女性の支払い割合+子供の参加者数×子供の支払い割合で計算されています。
これを1つのセル(支払い割合総計という名前とします)に計算し、このセルの結果で総支払金額を割ると1%の支払額が端数付きで出ます。
ここまで計算できると端数付きの支払額は
端数付き成人男性の支払額 = 払額総額 × 成人男性の支払い割合 / 支払い割合総計
同様に
端数付き成人女性の支払額 = 払額総額 × 成人女性の支払い割合 / 支払い割合総計
端数付き子供の支払額   = 払額総額 × 子供の支払い割合   / 支払い割合総計
で計算できて
この端数を切り上げる処理は、RoundDown関数を使うと
RoundDown((端数付き成人男性の支払額+支払い単位)/支払い単位 , 0) × 支払い単位 で切り上げ処理ができますので
成人男性の支払額 = RoundDown((端数付き成人男性の支払額+支払い単位−1)/支払い単位 , 0) × 支払い単位
成人女性の支払額 = RoundDown((端数付き成人女性の支払額+支払い単位−1)/支払い単位 , 0) × 支払い単位
子供の支払額   = RoundDown((端数付き子供の支払額  +支払い単位−1)/支払い単位 , 0) × 支払い単位
で求めることができ支払い単位の端数の総計がお釣りとして幹事さんに帰ってくることになります。

以上の例から考察すると

1.プログラム思考を鍛えるには具体的な計算をやってみる
2.計算に必要な要素を整理する
3.そこから計算の手順をまとめて式をたてる
4.スプレッドシートにたてた式を配置していく
という手順でスプレッドシート上にアプリケーションができていくことになりプログラム思考を鍛えることができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?