エレファント・ビジュアライザー調査記録

ビジュアルプログラミングで数式の変形を表すことを考えていくブロクです。

関数型言語の拡張(3)

ここでもChatGPTでプログラムの仕様を書いてもらいます。

以下のように入力しました。

次のようなプログラムを考えます。今日から一日に一回、気象観測システムからその日の天気が晴れなのか雨なのかという情報が送られてきます。このプログラムはこの情報を一日に一回受け取ります。この情報をある日受け取るとこのプログラムは、今日からその日までに受け取ったすべての情報に基づいて、次の日の天気が雨である確率を予測し、それを返します。このようなプログラムを C# で書こうと思います。このようなプログラムの仕様を書いてください

以下は引用です。

以下は、C#で記述された天気予測プログラムの仕様です。

  1. プログラムは、天気観測システムからの情報を一日に一回受け取ります。
  2. 情報は、その日が晴れか雨かを表す真偽値で提供されます。
  3. 受け取った情報を保持し、それを元に次の日の天気が雨である確率を予測します。
  4. 予測結果は、次の日の天気が雨である確率(0から1の範囲の浮動小数点数)として返されます。
  5. プログラムは、受け取った情報がない場合や予測が不可能な場合にはエラーメッセージを出力します。

これらの仕様に基づいて、C#でプログラムを記述することができます。

以下のように入力しました。

この仕様に基づいて C# のプログラムを書いてください

以下は引用です。

以下は、C#で記述された天気予測プログラムの実装例です。

using System;
using System.Collections.Generic;

class WeatherPredictor
{
    private List<bool> weatherData;

    public WeatherPredictor()
    {
        weatherData = new List<bool>();
    }

    // 今日の天気情報を追加するメソッド
    public void AddWeatherData(bool isRainy)
    {
        weatherData.Add(isRainy);
    }

    // 次の日の天気が雨である確率を予測するメソッド
    public double PredictNextDayRainProbability()
    {
        if (weatherData.Count == 0)
        {
            throw new InvalidOperationException("No weather data available.");
        }

        int rainyCount = 0;
        foreach (bool isRainy in weatherData)
        {
            if (isRainy)
            {
                rainyCount++;
            }
        }

        return (double)rainyCount / weatherData.Count;
    }
}

class Program
{
    static void Main(string[] args)
    {
        WeatherPredictor predictor = new WeatherPredictor();

        // シミュレートされた天気データの追加
        predictor.AddWeatherData(true);  // 例: 雨
        predictor.AddWeatherData(false); // 例: 晴れ
        predictor.AddWeatherData(true);  // 例: 雨
        // ...

        // 予測
        double rainProbability = predictor.PredictNextDayRainProbability();
        Console.WriteLine($"Predicted probability of rain for the next day: {rainProbability:P}");
    }
}

このプログラムでは、`WeatherPredictor`クラスが天気情報を保持し、`AddWeatherData`メソッドで新しい天気情報を追加し、`PredictNextDayRainProbability`メソッドで次の日の天気が雨である確率を計算します。`Main`メソッドでは、適当な天気データを追加し、次の日の雨の予測確率を表示します。

これはできていません。無限にデータを受け取るようにしたい(そう書いてあるのに)のですが、どう指摘すれば良いか考えてみたいと思います。

それらしい変数名を勝手につけてくれるのは良いです。ここがいちばん面倒なところなので手間が省けています。