Obliczanie Pola Trojkata Wzorem Heroda - programowanie obiektowe

0

Hej wam, zaczynam sie uczyć dopiero programowania obiektowego, mam problem i nie wiem jak go rozwiązać. Zacząłem pisać kod, głównie wzorując się na tym co robiliśmy na lekcji, lecz coś nie działa i zbytnio nie wiem dlaczego.
Plik main (w ktorym jest error)

#include <iostream>
#include "trojkat.h"

using namespace std;

int main()
{
    float a, b, c;
    cout << "Obliczanie pola i obwodu trojkata" << endl;
    cout << "---------------------------------" << endl;
    cout << "Wprowadz boki" << endl;
    cout << "Bok A";
        cin >> a;
    cout << "Bok B";
        cin >> b;
    cout << "Bok C";
        cin >> c;
    Trojkat pl(a, b, c);
    cout << "Pole trojkata wynosi " << pl.obliczPole() << endl;
    cout << "Obwod trojkata wynosi " << pl.obliczObwod() << endl;

    return 0;
}
#include "trojkat.h"
#include <math.h>
void Trojkat::obliczP()
{
     p = (bokA + bokB + bokC) / 2;
}
float Trojkat::obliczPole()
{
    obliczP();
    return (sqrt(p*(p-bokA)*(p-bokB)*(p-bokC)));
}
float Trojkat::obliczObwod()
{
    return (bokA+bokB+bokC);
}
Trojkat::Trojkat(float dlA, float dlB, float dlC, float parP)
{
    bokA=dlA;
    bokB=dlB;
    bokC=dlC;
    p=parP;
}

Plik h

#include <iostream>
using namespace std;
class Trojkat {
    public:
        void obliczP();
        float obliczPole();
        float obliczObwod();
        Trojkat(float dlA, float dlB, float dlC, float parP);
    private:
        float bokA;
        float bokB;
        float bokC;
        float p;
};
2

Co to znaczy coś nie działa, jaki error?

0

screenshot-20201115164351.png
w pliku main
``` Trojkat pl(a, b, c);`
``

1

Bo masz 4 argumentowy konstruktor a karmisz go tylko 3 argumentami.

2

Kod jest OK, (chyba), jak usuniesz ten błąd. Można też nieco uprościć.

class Trojkat {
    public:
        float obliczPole();
        Trojkat(float dlA, float dlB, float dlC){
          bokA = dlA;
          bokB = dlB;
          bokC = dlC;
        }
    private:
        float bokA;
        float bokB;
        float bokC;
};
float Trojkat::obliczPole()
{
    float p = (bokA + bokB + bokC) / 2;
    return (sqrt(p*(p-bokA)*(p-bokB)*(p-bokC)));
}
0

Dzięki wielkie za pomoc! Udało mi się usunąć błąd i wszystko działa poprawnie.

3

W ogole to to jest Wzor Herona.
Herod to chyba ten z biblii

1 użytkowników online, w tym zalogowanych: 0, gości: 1