---
# System prepended metadata

title: 北軟99 pB 觀察輸入資料的分布
tags: [北軟99]

---

# 北軟99 pB 觀察輸入資料的分布
###### tags: `北軟99`

## 題目：

當要觀察大量資料的分布情形時，可以利用讀檔方式，寫程式將許多筆資料讀進來觀測，也可以一筆資料接著一筆資料陸續讀進來，每一筆資料讀進電腦後，觀察資料分布情形。假設要讀入的資料檔檔名為 DataXY.txt，假設有三筆資料如下:

1 16 **29 89 1** 41 90 0 **55 90 0** 64 90 0 **91 75 0** 104 76 0 **121 79 0** 135 81 0 **191 116 1** 217 107 0 **239 83 0** 258 81 0 **284 89 0** 338 150 1 **433 141 0** 471 165 1

---

2 15 9 231 1 39 238 1 75 230 1 112 218 1 146 202 1 182 167 1 217 127 1 252 100 1 284 91 1 319 86 1 353 78 1 388 72 1 419 67 1 451 62 1 476 58 1

---

3 18 17 211 1 49 202 0 88 204 1 112 198 0 122 197 1 159 198 1 225 198 0 239 196 1 262 192 0 300 199 1 329 171 0 343 173 0 364 187 0 374 187 1 386 188 0 408 190 0 432 167 0 469 198 1

---

上述三筆資料中，每一筆資料格式為:每個欄位用一個空白隔開，第一欄是第幾筆資料，第二欄是這一筆資料有幾項，接下來，每三個欄位為一項資料，一項資料裡的第一個欄位表示水平軸位址，第二個欄位表示垂直軸位址，第三個欄位表示類別，有兩個類別: 1 和 0。請寫一個程式，可以將資料檔 DataXY.txt 讀入電腦中，並可以一筆一筆顯示資料分布的情形，其中，第 1 類資料用紅色 o 表示，第 0 類資料用藍色\*表示，注意:資料是累積顯示，執行範例如下: 

![](https://i.imgur.com/BnBNbXH.png)

評分：
1. 程式介面 (2.5 分)。
2. 可以一筆一筆顯示資料分布的情形(5 分)。
3. 可以繪出兩類資料分布(5 分)。
4. 每讀入一筆資料，水平和垂直座標，會隨著讀入資料不同而變動(12.5 分)。

## 想法

我們先對圖表物件做預處理。
chart物件→屬性→圖表→Series集合
新增兩個Series，並且ChartType全部設為point。

![](https://i.imgur.com/qQ1OV9H.png)

接下來，我們只需要讀資料，存成陣列，然後一一把點新增上去就好。

## 程式碼(C#)

```csharp=
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace problemB
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.ShowDialog();
            string fileName = ofd.FileName;
            if (fileName.Equals(""))
            {
                return;
            }
            string data;
            using (StreamReader fs = new StreamReader(fileName))
            {
                while ((data = fs.ReadLine()) != null)
                {
                    string[] dataArray = data.Split(' ');
                    int[] dataIntegerArray = new int[dataArray.Length];
                    for (int i = 0; i < dataArray.Length; i++)
                    {
                        dataIntegerArray[i] = Convert.ToInt32(dataArray[i]);
                    }
                    for (int i = 0; i < dataIntegerArray[1]; i++)
                    {
                        int x = dataIntegerArray[2 + i * 3];
                        int y = dataIntegerArray[2 + i * 3 + 1];
                        int group = dataIntegerArray[2 + i * 3 + 2];
                        if (group == 0)
                        {
                            chart1.Series[0].Points.AddXY(x, y);
                        }
                        else if (group == 1)
                        {
                            chart1.Series[1].Points.AddXY(x, y);
                        }
                    }
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            chart1.Series[0].Points.Clear();
            chart1.Series[1].Points.Clear();
        }
    }
}
```