如何避免使用数组?

时间:2011-08-10 00:06:08

标签: c++

我的教授希望我们编写一个程序,而不使用像这样的数组或向量:

  

使用计算和打印停车费的功能编写程序,这些功能是为将车辆停放在车库中的每位客户计算的。

     

停车费率:

     
      
  • 一个停车场收取最低5美元的停车费,最多停车5个小时。
  •   
  • 车库每小时额外收费0.50美元或每小时超过五小时
  •   
  • 任何给定的24小时期间的最高费用为10.00美元。假设一次24小时不停车。
  •   
     

您应输入为每位客户停放的小时数。您的程序应以整齐的表格格式打印结果,并应计算并打印收据总数。

     

程序输出应如下所示:

car------Hours------Charge

1--------2.00--------$5.00 

2--------5.00--------$5.00

3--------5.30--------$5.50

etc.

total: 3---12.30----$15.50

我只能做到这一点:

include <iostream>
include <conio.h>
include <cmath>
include <iomanip>
using namespace std;
double calculate(double);
int main()
{
    double hours,charge;
    int finish;
    double sumhours;
    sumhours=0;
    finish=0;
    charge=0;
    int cars;
    cars=0;

    do
    {
        cout<<"Enter the number of hours the vehicle has been parked: "<<endl;
        cin>>hours;
        cars++;
        sumhours+=hours;
        finish=cin.get();
        if(hours>24)
        {
            cout<<"enter a time below 24hrs."<<endl;
            cars--; 
            sumhours=sumhours-hours;
        }
    }
        while(finish!=EOF);

        double total=calculate(hours);
        cout<<total<<": "<<(cars-1)<<": "<<sumhours;


    while(!_kbhit());
    return 0;
}

double calculate(double time)
{
    double calculate=0;
    double fees;

    if(time<=5)
        return 5;
     if(time>15)
        return 10;

     time=ceil(time);
     fees=5+(.5*(time-5));

    return calculate;

}

5 个答案:

答案 0 :(得分:3)

由于这是作业,这里有一个算法:
1.打印头。
2.清除运行总计变量 3.虽然不是文件的结尾 3.1阅读记录。
3.2打印记录内容
3.3 将记录字段值添加到运行总计变量(提示!提示!)
3.4。最终而
4.打印运行总计变量。

您可能需要使用运行总计变量进行一些额外的计算,尤其是平均值。

编辑1:正在运行的总变量示例

int sum = 0; // This is the running total variable.
const unsigned int QUANTITY = 23;
for (unsigned int i = 0; i < QUANTITY; ++i)
{
    cout << "Adding " << i << " to sum.\n";
    sum += i;
}
cout << "Sum is: " << sum << "\n";
cout.flush();

在此示例中,仅存储数据“i”。 sum变量是一个运行总计。 寻找你的任务中的相似之处。

编辑2:检测cin输入结束的示例

char reply = 'n';
while (tolower(reply) != 'y')
{
   cout << "Do you want to quit? (y/n)";
   cout.flush();
   cin >> reply;
   cin.ignore(1000, '\n'); // Eat up newline.
}
cout << "Thanks for the answer.\n";
cout.flush();

答案 1 :(得分:2)

由于您无法使用数组或向量,我认为您应该在处理每辆车时打印停车数据。伪代码:

While more cars:
    Read data for next car
    Calculate cost
    Print data
    Add to running totals
End while
Print totals

答案 2 :(得分:1)

在每次迭代时,生成相关输出,但不将其流式传输到std::cout。而是将其流式传输到std::stringstream对象。然后,最后,将该对象流式传输到std::cout。只需保持输入值的运行累积即可完成数学运算。

当然,这假定在这项家庭作业的背景下使用std::stringstream不被视为“作弊”。

答案 3 :(得分:0)

您可以尝试将值存储在链表结构中而不是数组中。链接列表非常适合动态存储。 试试本教程http://www.cprogramming.com/tutorial/lesson15.html

答案 4 :(得分:0)

我的建议是使用递归方法,该方法首先接受输入,询问是否还有输入。如果有更多输入,则它会自行调用。如果没有更多输入,它会输出当前的汽车,然后返回到目前为止在结构中添加的总和。

这种方法的唯一问题是它会以输入的反向输出输入的汽车,但是没有数组或文件可以保存到。