-1

このプログラミングの割り当てに問題があります。並列回路と直列回路の合計抵抗値を計算する必要があります。直列回路は機能していますが、並列回路の総抵抗を計算しようとすると、戻り値が 1.#INF になるという問題があります。これを修正する方法についての提案

    // project.cpp : Defines the entry point for the console application.
    //

    #include "stdafx.h"
    #include <iostream>
    #include <math.h>

    using namespace std;

    void menu()
    {
       cout <<"\t\t\tLab 2 Menu Driven Algorithms" << endl;
       cout <<"\t\t  Calculating Parallel and Series Resistance" << endl;
       cout <<"1)\tSeries" << endl;
       cout <<"2)\tParallel" << endl;
       cout <<"3)\tQuit" << endl;   
    }

    int series(int& num, int& sum)
    {
int answer;
num = 0;
sum = 0;

do
{
    cout << "Enter Resistor " << num+1 << " value, 0 to calculate: ";
    cin >> answer;
    cout << endl;

    sum = sum + answer;

    num++;
}
while(answer != 0);     

return sum;
    }

    double parallel (int& num, double& sum)
    {
double answer;
num = 0;
sum = 0.0;
int counter = 0;

do
{
    cout << "Enter Resistor " << num+1 << " value, 0 to calculate: ";
    cin >> answer;
    cout << endl;
    counter++;

    sum = (1/answer) + sum;
    cout << sum << endl;

    num++;
}
while(answer != 0);

return sum;
    }




    int main()
    {
char choice;
int num = 0;
int sum = 0;
double sum2 = 0.0;

menu();

cout <<"\n\nPlease enter a value from the menu: ";
cin >> choice;
cout << endl;

while (choice != '3' && choice != 'q' && choice != 'Q')
{


switch(choice)
{
    case '1': cout << "Calculating Series Resistance" << endl;
              cout << "The series resistance for the " << num-1 << " resistors is: " << series(num, sum) << " Ohms\n";
              system("pause");
              break;
    case '2': cout << "Calculating Parallel Resistance" << endl;
              cout << "The parallel resistance for the " << num-1 << " resistors is: " << parallel(num, sum2) << " Ohms\n";
              system("pause");
              break;
    default: break;

}

system("cls");

menu();

cout <<"\n\nPlease enter a value from the menu: ";
cin >> choice;
cout << endl;


} 
system("pause");

return 0;
    }
4

1 に答える 1

1

parallel()関数内のサイクルをこのように書き直して、次の値を処理しないようにする必要があります0(この場合はゼロによる除算が発生します)。

cout << "Enter Resistor " << num+1 << " value, 0 to calculate: ";
cin >> answer;
cout << endl;

while (answer != 0);     
{
    counter++; // NOTICE: This is never used for computation...

    sum = (1/answer) + sum;
    cout << sum << endl;

    num++;

    cout << "Enter Resistor " << num+1 << " value, 0 to calculate: ";
    cin >> answer;
    cout << endl;
}

変数が計算に使用されるcounterことはないので、それを取り除くことができると思います。

また、内部のループにも同様の問題があることに注意してseries()ください。ただし、ゼロによる除算を行わないという事実は、それを表示しません。

于 2013-02-18T20:04:32.940 に答える