シンタックスハイライト

出典: 謎の百科事典もどき『エンペディア(Enpedia)』
ナビゲーションに移動 検索に移動

シンタックスハイライト (英: syntax highlighting)は、プログラムコードを書く時に文字がカラフルになるアレのことである。コードが見やすくなるという効果がある。

[編集]

以下は、整数または小数を空白または改行で区切って記述してあるnumbers.txtのファイルからデータを読み込み、最大値・最小値・平均値・中央値を計算、数値を昇順にソートし、その結果をresult.txtに出力するコードである。[1]

コード(長いよ)
#include <iostream>
#include <fstream>
#include <vector>
#include <limits>
#include <iomanip>
#include <algorithm>
#include <sstream>   // 空ファイルチェック用

using namespace std;

bool isFileEmpty(ifstream& file) {
    return file.peek() == ifstream::traits_type::eof();
}

int main() {
    ifstream infile("numbers.txt");
    ofstream outfile("result.txt");

    if (!infile) {
        cerr << "入力ファイルを開けませんでした。" << endl;
        return 1;
    }

    if (!outfile) {
        cerr << "出力ファイルを作成できませんでした。" << endl;
        return 1;
    }

    // ファイルが完全に空かチェック
    if (isFileEmpty(infile)) {
        outfile << "ファイルが空です。" << endl;
        cout << "ファイルが空です。" << endl;
        return 0;
    }

    vector<double> numbers;
    double number;
    double sum = 0;
    double max_value = numeric_limits<double>::lowest();  // double用の最小値
    double min_value = numeric_limits<double>::max();

    // ファイルの読み取り(無効なデータをスキップ)
    while (infile >> number) {
        numbers.push_back(number);
        sum += number;
        if (number > max_value) max_value = number;
        if (number < min_value) min_value = number;
    }

    // 無効なデータしかなかった場合
    if (numbers.empty()) {
        outfile << "有効な数値が見つかりませんでした。" << endl;
        cout << "有効な数値が見つかりませんでした。" << endl;
        return 0;
    }

    int count = numbers.size();
    double average = sum / count;

    // 昇順にソート
    sort(numbers.begin(), numbers.end());

    // 中央値の計算
    double median;
    if (count % 2 == 1) {
        median = numbers[count / 2];
    } else {
        median = (numbers[count / 2 - 1] + numbers[count / 2]) / 2.0;
    }

    // 結果をファイルに書き出し(小数点2桁表示)
    outfile << fixed << setprecision(2);
    outfile << "最大値: " << max_value << endl;
    outfile << "最小値: " << min_value << endl;
    outfile << "平均値: " << average << endl;
    outfile << "中央値: " << median << endl;

    outfile << "昇順にソートされた数値リスト: " << endl;
    for (double n : numbers) {
        outfile << n << " ";
    }
    outfile << endl;

    infile.close();
    outfile.close();

    cout << "結果を result.txt に書き出しました。" << endl;

    return 0;
}
  1. AIに書いてもらいました。間違ってたら直してください。