Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

文字列で与えた数字をハッシュ記号(#)で大きく表示するCプログラム


文字列の形で与えられた数値 n を受け取り、その数値をハッシュ記号(#)を使って大きなサイズで表示するのが今回の課題です。

例えば、「1234」という数値が与えられたとしましょう。

この数値は次のように表現されます。

文字列で与えた数字をハッシュ記号(#)で大きく表示するCプログラム

プログラムの出力も、まさにこのような表示になることを目指します。

入力: n[] = {"2234"}
出力:

文字列で与えた数字をハッシュ記号(#)で大きく表示するCプログラム

入力: n[] = {"987"}
出力:

文字列で与えた数字をハッシュ記号(#)で大きく表示するCプログラム

問題を解くためのアプローチ

  • 最大10桁までの数値を文字列として受け取ります。
  • 0〜9の各数字について、表示したい大きなパターンを2次元の文字配列として1つずつ定義します。
  • 入力文字列を先頭から走査し、各数字に対応するパターンを順番に出力していきます。

アルゴリズム

開始
    ステップ1 -> 高さ H を 7 と定義する
    ステップ2 -> 幅 W を 8 と定義する
    ステップ3 -> 関数 int large(char num[]) の中で
        変数 i, j, k を宣言する
        0〜9の各数字に対応するハッシュ記号のパターンを、
        7行×8列の2次元char配列(zero〜nine)として定義・初期化する
        もし strlen(num) > 10 ならば
            「10桁以内の数値を入力してください」と表示する
        そうでなければ
            改行を出力する
            k = 1、j = 0 と設定する
            k <= 7 の間繰り返す(数字の高さ方向を制御)
                i = 0 から strlen(num) - 1 まで繰り返す(各桁を走査)
                    num[i] が '0' なら zero[j]、'1' なら one[j]、
                    というように、対応する配列の j 行目を出力する
                改行を出力する
                k を 1 増やす
                j を 1 増やす
    ステップ4 -> main() 関数を宣言する
        入力用の char n[] = {"2168"} を宣言・初期化する
        large(n) を呼び出す
終了

C言語による実装例

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define H 7
#define W 8
int large(char num[]) {
    int i, j, k;
    // ハッシュ記号で描画した数字パターンを格納する
    // 2次元char配列を宣言して初期化
    char zero[H][W]={" ##### ", // H=0
        " # # ", // H=1
        " # # ", // H=2
        " # # ", // H=3
        " # # ", // H=4
        " # # ", // H=5
        " ##### "},// H=6
    one[H][W]={" # ",
        " # ",
        " # ",
        " # ",
        " # ",
        " # ",
        " # "},
    two[H][W]={ " ##### ",
        " # ",
        " # ",
        " ##### ",
        " # ",
        " # ",
        " ##### "},
    three[H][W]={" ##### ",
        " # ",
        " # ",
        " ##### ",
        " # ",
        " # ",
        " ##### "},
    four[H][W]={" # ",
        " # # ",
        " # # ",
        " ##### ",
        " # ",
        " # ",
        " # "},
    five[H][W]={" ##### ",
        " # ",
        " # ",
        " ##### ",
        " # ",
        " # ",
        " ##### "},
    six[H][W]={ " ##### ",
        " # ",
        " # ",
        " ##### ",
        " # # ",
        " # # ",
        " ##### "},
    seven[H][W]={" ##### ",
        " # ",
        " # ",
        " # ",
        " # ",
        " # ",
        " # "},
    eight[H][W]={" ##### ",
        " # # ",
        " # # ",
        " ##### ",
        " # # ",
        " # # ",
        " ##### "},
    nine[H][W]={" ##### ",
        " # # ",
        " # # ",
        " ##### ",
        " # ",
        " # ",
        " # "};
    if (strlen(num) > 10)
        printf("\nYou must enter a number upto 10 digits.\nTry again!\n");
    else {
        printf("\n");
        k=1;
        j=0; // 各数字の高さ方向の行を制御
        while (k <= 7) // 高さ(7行)を制御 {
            for (i=0; i<strlen(num); i++) // 各桁を読み込む {
                if (num[i] == '0')
                    printf("%s", zero[j]);
                else if (num[i] == '1')
                    printf("%s", one[j]);
                else if (num[i] == '2')
                    printf("%s", two[j]);
                else if (num[i] == '3')
                    printf("%s", three[j]);
                else if (num[i] == '4')
                    printf("%s", four[j]);
                else if (num[i] == '5')
                    printf("%s", five[j]);
                else if (num[i] == '6')
                    printf("%s", six[j]);
                else if (num[i] == '7')
                    printf("%s", seven[j]);
                else if (num[i] == '8')
                    printf("%s", eight[j]);
                else if (num[i] == '9')
                    printf("%s", nine[j]);
            }
            printf("\n");
            k++;
            j++;
        }
    }
    return 1;
}
// main関数
int main() {
    char n[] = {"2168"};
    large(n);
    return 0;
}

コードのポイント

このプログラムの仕組みを簡単に整理すると、次のようになります。

  • H(高さ)= 7: 各数字は7行のパターンで構成されています。
  • W(幅)= 8: 各行は最大7文字+終端のNULL文字(\0)を収められるサイズです。
  • 外側のwhileループ: 行番号 j を0から6まで動かし、数字パターンの「何行目」を出力するかを制御します。
  • 内側のforループ: 入力文字列の各桁を調べ、対応する配列の j 行目を横に並べて出力します。これにより、複数桁の数字が横一列にきれいに表示されます。

なお、入力が10桁を超える場合は「10桁以内の数値を入力してください」というメッセージを表示し、処理を中断するようになっています。

出力

文字列で与えた数字をハッシュ記号(#)で大きく表示するCプログラム


  1. C言語で中実・中空の菱形(ひし形)パターンを出力するプログラム

    プログラムの概要 本記事では、C言語を使用して、下図のような中実(塗りつぶし)の菱形と中空(外枠のみ)の菱形の星形パターンをコンソールに出力する方法を解説します。 アルゴリズム 中空の菱形(Hollow Rhombus)の場合 1. ユーザーから中空菱形の行数を入力してもらう 2. 入力された行数と同じ行数を持つ中空の菱形を作成する 3. 1行目は、行数と同じ個数のアスタリスク(*)をすべて出力する 4. 2行目以降は、各行の先頭と末尾のみ「*」を出力し、その間は空白のままにする 5. 最終行に達するまで手順4を繰り返す 6. 最終行は、行数と同じ個数の「*」をすべて出力する 中実の菱形

  2. Pythonで巨大な数の階乗を計算するプログラム

    非常に大きな数 n の階乗を求めたい場面は、プログラミングにおいてよくあります。他の多くのプログラミング言語では、大きな数の階乗は整数データ型(int型など)の表現範囲を簡単に超えてしまうため、そのままでは計算できず、特別なライブラリや多倍長整数の実装が必要になります。しかし、Python には整数の桁あふれという概念がありません。Pythonは整数の大きさを自動的に検出し、必要に応じて内部的により大きな整数表現へと拡張してくれるため、標準ライブラリだけで任意の大きさの階乗を簡単に計算できます。例えば、入力が n = 50 の場合、出力は次のようになります。304140932017133780