Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Najprostsza struktura w programie do obliczania miej zerowych funkcji kwadratowe

Ostatnio zmodyfikowano 2015-12-14 21:51
Autor Wiadomość
bugifromkorea
Temat założony przez niniejszego użytkownika
Najprostsza struktura w programie do obliczania miej zerowych funkcji kwadratowe
» 2015-12-14 20:11:02
Witam. Sporo czasu spędziłem dzisiaj nad walką z program do obliczania miejsc zerowych funkcji kwadratowej samo napisanie programu nie sprawiło mi problemu, lecz dopisanie do niego struktur już tak. Jeśli mógłby ktoś przejrzeć kod i wyłapać błędy byłbym wdzięczny :), nie chodzi mi o jakąś super poprawność program ma po prostu się kompilować i podawać poprawne wyniki.
C/C++
#include <iostream>
#include <math.h>
#include <string>
#include <conio.h>
using namespace std;


struct dane
{
   
    float a;
    float b;
    float c;
    float x;
    float x1;
    float x2;
    float delta;
};
struct dane wczytaj()
{
    struct dane p;
    cout << "podaj a:" << endl;
    cin >> p.a;
    cout << "podaj b:" << endl;
    cin >> p.b;
    cout << "podaj c:" << endl;
    cin >> p.c;
    return p;
   
   
}
void oblicz_delte( struct dane p )
{
    p.delta = p.b * p.b - 4 * p.a * p.c;
    if( p.delta < 0 )
         cout << " brak rozwiazan rzeczywistych" << endl;
   
}


void oblicz_miejsca_zerowe( struct dane p )
{
   
    p.x = - p.b / 2 * p.a;
    p.x1 =( - p.b - sqrt( p.delta ) ) / 2 * p.a;
    p.x2 =( - p.b + sqrt( p.delta ) ) / 2 * p.a;
}

void wyswietl_miejsca_zerowe( struct dane p ) {
   
    if( p.delta == 0 ) {
       
        cout << " jest jedno miejsce zerowe:" << p.x1 << endl;
    }
    if( p.delta > 0 ) {
       
        cout << "Sa dwa miejsca zerowe:" << p.x1 << endl << p.x2 << endl;
    }
}
P-141980
mateczek
ja bym zrobił klasę z metodami !!!
» 2015-12-14 21:51:42
C/C++
#ifndef FUNCKWARDRATOWA_H
#define FUNCKWARDRATOWA_H
#include<cmath>
#include<iostream>
using namespace std;
class funcKwardratowa
{
    float a, b, c;
    float delta;
    float x1, x2;
    void obliczDelte() {
        delta = b * b - 4 * a * c;
    }
public:
    funcKwardratowa( float _a, float _b, float _c ) {
        a = _a;
        b = _b;
        c = _c;
    }
   
   
    void obliczZerowe() {
        obliczDelte();
        if( delta > 0 ) {
            x1 = - b - sqrt( delta ) - 2 * a;
            x2 = - b - sqrt( delta ) - 2 * a;
            cout << "dwa miejsca zerowe " << x1 << " " << x2 << endl;
        } else if( delta == 0 ) {
            x1 = - b /( 2 * a );
            cout << "jedno miejsce zerowe " << x1 << endl;
        } else if( delta < 0 ) {
            cout << "brak miejsc zerowych" << endl;
        }
    }
   
   
};

użycie

C/C++
#include<iostream>
#include<funckwardratowa.h>
using namespace std;
int main()
{
    int a, b, c;
    cin >> a >> b >> c;
    funcKwardratowa func( a, b, c );
    func.obliczZerowe();
}
oczywiście zależy do czego Ci potrzebna by była ta klasa !!!


A teraz wracając do twojego kodu. to raczej nie ma prawa działać!! bo przekazujesz do luźnych funkcji argument przez wartość a potem go zmieniasz !!! oczywiscie brak całości kodu (funkcji main) i nie wiem co chciałeś osiągnąć!!!

C/C++
void oblicz_delte( dane p )
{
    p.delta = p.b * p.b - 4 * p.a * p.c;
    if( p.delta < 0 ) //zmiana jest bez sensu !!! bo i tak na nic nie wpłynie argument jest przekazany przez wartość
         cout << " brak rozwiazan rzeczywistych" << endl;
   
}


jeśli już miało by zadziałać to musiało by być
C/C++
void oblicz_delte( dane & p )
{
    p.delta = 4; //teraz coś zmienisz !!!
}
P-141989
« 1 »
  Strona 1 z 1