Beach Williams
Beach Williams

Reputation: 153

Method declaration issue

The program should read n resistances and a voltage from the keyboard and then calculate the equivalent resistance and the current. My problem is that it calculates based only on the last entered resistance. Is it possible to declare a method inside a function? or should I give up this completely unpractical approach

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

using namespace std;

class rez {
    float r;
public:
    void set(int n);
    float val() { return r; }
};

void rez :: set(int n) {           //n is the number of resistances
    int i;
    for (i = 1; i <= n; i++) {

        cout << "R" << i << "=";  
        cin >> r;
    }

}

float serie(rez r1,int n)
{
    float s=0;
    int i;
    for (i = 1; i <= n; i++)
    {
        s = s+ r1.val();
    }
    return s;
}

float para(rez r1, int n)
{
    float s = 0;
    int i;
    for (i = 1; i <= n; i++)
    {
        s = s + (1/r1.val());
    }
    return 1/s;
}


int main()
{
    char c, k = 'y';    // 'c' selects series or para
    rez r1;               
    int n;
    cout << "number of resis:";
    cin >> n;
    cout << endl;
    while (k != 'q')
    {
            r1.set(n);
            float i, u;
            cout << "\n Vdc= ";
            cin >> u;
            cout << endl;

        cout << "series or para(s/p)?"<<endl;
        cin >> c;
        switch (c)
        {
        case('s'):cout <<"\n equiv resistance = "<< serie(r1,n)<<endl;
            i = u / serie(r1, n);
            cout << "curr i = " << i << " amp";
            break;
        case('p'):cout << "\n equiv res = " << para(r1, n)<<endl;
            i = u / para(r1, n);
            cout << "cur i = " << i << " amp";
            break;
        }



        cout <<endl<< "\n another set?(y/q)?"<<endl;
        cin >> k;

    }
    return 0;
}

Upvotes: 0

Views: 51

Answers (1)

Jesse Laning
Jesse Laning

Reputation: 490

It is because when you read in the resistances you are setting the value of the total resistance each time not adding to the total resistance.

void rez :: set(int n) {           //n is the number of resistances
    int i;
    for (i = 1; i <= n; i++) {

        cout << "R" << i << "=";  
        cin >> r; // <- this sets the value of r, it does not add to it
    }

}

To fix this you should create a temporary variable to store the input resistance and then add it to the total resistance

void rez :: set(int n)
{
    int i;
    for (i = 1; i <= n; i++)
    {
        float input;
        cout << "R" << i << "=";  
        cin >> input;
        r += input;

    }
}

Upvotes: 1

Related Questions