创建温度直方图,没有大的“if-else”块

时间:2015-09-10 23:29:20

标签: c++ arrays

所以我所拥有的是两个阵列,每个阵列都有不同的温度读数。我有一个低阵列,包括本月的低温和包括本月高温的高阵列。我通过从文本文件中读取这些变量来获取这些变量。我的代码如下:

while ( !file.eof() )
{
    file >> high[i] >> low[i];
    i++;
}

我知道数组的大小,因为它是下面显示的文本文件中的第二行。

April 6, 2010
24
88   72
52   36
73   48
89   72
97   84
61   41
48   37
68   45
88   63
79   52
48   21
55   46
54   41
97   81
55   37
79   70
72   43
68   45
102  80
57   39
37   32
45   28
66   45
59   36

现在我必须从温度中获取计数并创建一个如下图所示的直方图。因此,如果有2个温度大于或小于49,我会在间隔标签后打印两颗星。

 < 0|
<= 9|
<=19|
<=29|*
<=39|
<=49|**
<=59|* 
<=69|
<=79|*
<=89|
<=99|
 >99|

我正在考虑将两个数组合并为一个并循环遍历它们但是我目前知道如何做到这一点的唯一方法是使用switch case或一个巨大的if else块。即使没有0到9之间的温度,我仍然需要打印“&lt; = 9 |”。我不确定如何在没有实际使用if-else的情况下创建count函数。任何想法将不胜感激。

我现在有这个代码用于我的count函数,它结合了两个数组,但就是它:

void count(float lowArr[], float highArr[], int num){
    int size = num * 2, i = 0, j =0;
    float *arr;
    arr = new float[size];

    for (i ; i < num; ++i)
    {
        arr[i] = lowArr[i];
    }
    for (j; j < num; ++j, ++i)
    {
        arr[i] = highArr[j];
    }
}

1 个答案:

答案 0 :(得分:0)

他是这样做的一种方式:

  1. 创建一个数组,其中包含直方图的正确条目数
  2. 使用每个条目的计数填写数组
  3. 打印出阵列。
  4. 对于#2,您可以使用一些数学来计算出要用于数组的索引。您可能仍需要几个if语句,但不会像您当前想的那样多:

    • 测试&lt; 0 - 递增数组[0]
    • 中的计数
    • 测试&gt; 99 - 增加数组[11]
    • 中的计数
    • 否则,请使用(temp / 10) + 1计算要填写的条目。 +1是跳过第一个数组条目(你用于&lt; 0)temp / 10将使用整数数学(假设temp是一个int)给你一个数字介于0和9之间,表示临时的“十”部分。