GitHub Codespacesで基数変換プログラムをつくろう!(C言語、Go言語、Kotlin、Rust対応)

スポンサーリンク
Go

「基数変換」は基本情報技術者試験を受験するなら、必須知識である。

そこで、10進数を2進数、8進数、16進数に変換するプログラムを4つのプログラミング言語で実装した学習用プロジェクトをご紹介しよう。

プログラミング初心者が複数の言語を比較しながら学習できるように、同じ機能を以下の4つの言語で実装している。

  • C言語 – 低レベルなプログラミングの基礎
  • Go言語 – モダンでシンプルな構文
  • Kotlin – オブジェクト指向と関数型の融合
  • Rust – 安全性とパフォーマンスの両立

開発環境:GitHub Codespaces

GitHub Codespacesでの実行手順

準備:リポジトリとCodespacesの作成

  1. GitHubにログインして、新しいリポジトリを作成
    • 右上の「+」→「New repository」
    • リポジトリ名(例:base-conversion)を入力
    • 「Public」または「Private」を選択
    • 「Create repository」をクリック
  2. Codespacesを起動
    • リポジトリページで「Code」ボタン→「Codespaces」タブ
    • 「Create codespace on main」をクリック
    • VS Codeライクな環境が開く

各言語での実行手順

C言語

フォルダとファイルの作成

フォルダ名:C_lang、ファイル名:convert.c

コードの入力

  • 左のエクスプローラーから convert.c を開く
  • 下記のC言語コードをコピー&ペースト
#include <stdio.h>

int main() {
    int num;
    
    printf("10進数を入力してください: ");
    scanf("%d", &num);
    
    printf("\n変換結果:\n");
    printf("10進数: %d\n", num);
    printf("2進数:  ");
    
    // 2進数表示(ビット演算を使用)
    if (num == 0) {
        printf("0");
    } else {
        int bits = sizeof(int) * 8;  // intのビット数
        int started = 0;  // 最初の1を見つけたかどうか
        
        for (int i = bits - 1; i >= 0; i--) {
            int bit = (num >> i) & 1;
            if (bit == 1) started = 1;
            if (started) printf("%d", bit);
        }
    }
    
    printf("\n8進数:  %o\n", num);
    printf("16進数: %X\n", num);
    
    return 0;
}

コンパイルと実行

# コンパイル(実行ファイルを作成)
gcc convert.c -o convert_c

# 実行
./convert_c
```

**入力例:**
```
10進数を入力してください: 100

実行例

変換結果:
10進数: 100
2進数:  1100100
8進数:  144
16進数: 64

Go言語

フォルダ、ファイルの作成

フォルダ名:Go、ファイル名:convert.go

コードの入力

  • convert.go を開いて下記のGoコードをペースト
package main

import (
    "fmt"
    "strconv"
)

func main() {
    var num int
    
    fmt.Print("10進数を入力してください: ")
    fmt.Scan(&num)
    
    fmt.Println("\n変換結果:")
    fmt.Printf("10進数: %d\n", num)
    fmt.Printf("2進数:  %s\n", strconv.FormatInt(int64(num), 2))
    fmt.Printf("8進数:  %s\n", strconv.FormatInt(int64(num), 8))
    fmt.Printf("16進数: %s\n", strconv.FormatInt(int64(num), 16))
}

実行

# Goは自動でコンパイルして実行
go run convert.go
```

**入力例:**
```
10進数を入力してください: 100

実行例

変換結果:
10進数: 100
2進数:  1100100
8進数:  144
16進数: 64

Kotlin

環境準備(初回のみ)

# SDKMANをインストール
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

# Kotlinコンパイラをインストール
sdk install kotlin

フォルダとファイルの作成

フォルダ名:Kotlin、ファイル名:convert.kt

コードの入力

convert.kt を開いて下記のKotlinコードをペースト

fun main() {
    print("10進数を入力してください: ")
    val num = readLine()?.toIntOrNull()
    
    if (num == null) {
        println("有効な数値を入力してください")
        return
    }
    
    println("\n変換結果:")
    println("10進数: $num")
    println("2進数:  ${num.toString(2)}")
    println("8進数:  ${num.toString(8)}")
    println("16進数: ${num.toString(16)}")
}

コンパイルと実行

# コンパイル
kotlinc convert.kt -include-runtime -d convert.jar

# 実行
java -jar convert.jar
```

**入力例:**
```
10進数を入力してください: 100

実行例

変換結果:
10進数: 100
2進数:  1100100
8進数:  144
16進数: 64

. Rust

環境準備(初回のみ)

# Rustをインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# 環境変数を読み込み
source $HOME/.cargo/env

フォルダとファイルの作成

フォルダ名:Rust、ファイル名:convert.rs

コードの入力

  • convert.rs を開いて下記のRustコードをペースト
use std::io;

fn main() {
    println!("10進数を入力してください: ");
    
    let mut input = String::new();
    io::stdin()
        .read_line(&mut input)
        .expect("入力の読み込みに失敗しました");
    
    let num: i32 = match input.trim().parse() {
        Ok(n) => n,
        Err(_) => {
            println!("有効な数値を入力してください");
            return;
        }
    };
    
    println!("\n変換結果:");
    println!("10進数: {}", num);
    println!("2進数:  {:b}", num);
    println!("8進数:  {:o}", num);
    println!("16進数: {:X}", num);
}

コンパイルと実行

# コンパイル
rustc convert.rs

# 実行
./convert
```

**入力例:**
```
10進数を入力してください: 100

実行例

変換結果:
10進数: 100
2進数:  1100100
8進数:  144
16進数: 64

プログラムの説明

それぞれの言語での特徴

C言語:

  • printfの書式指定子(%o, %X)で8進数・16進数を表示
  • 2進数はビット演算で自作

Go言語:

  • strconv.FormatInt関数で基数を指定して変換
  • シンプルで読みやすいコード

Kotlin:

  • toString(基数)メソッドで簡単に変換
  • null安全な設計

Rust:

  • {:b}, {:o}, {:X}といった書式指定子を使用
  • エラー処理が厳密

変更をコミット&プッシュ

Codespacesで作業した内容をGitHubに保存(プッシュ)する方法を説明しよう。

変更を確認

ターミナルで以下のコマンドを実行する。

git status

変更をステージングに追加

# すべての変更を追加
git add .

# 特定のファイルだけ追加する場合
git add ファイル名

コミット(変更を記録)

git commit -m "コミットメッセージ"

コミットメッセージの例:

  • git commit -m "練習用クエリを追加"
  • git commit -m "VIEWを作成"
  • git commit -m "README修正"

ポイント:

  • コミットメッセージは何を変更したか分かるように書こう
  • 日本語でOK

プッシュ(GitHubに送信)

git push

成功すると以下の通り表示される。

Enumerating objects: 14, done.
...
To https://github.com/ユーザー名/mysql-learning
   abc1234..def5678  main -> main

私のGitHubプロフィール

コメント

タイトルとURLをコピーしました