Pole prywatne, podpowiedź

0
 #include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
class Fkwadratowa
{
      private:
              int a,b,c;
             
      public:
             float delta; //Mój wynik
             void oblicz(int, int, int); //Funkcja licząca deltę
             float mz1;
             float mz2;
             float mz3;
             void zerowe1(int, int); //Funckja licząca x0.
             void zerowe2(int, int, float);
             void zerowe3(int, int, float);
             void wstawa(int);
             void wstawb(int);
             void wstawc(int);
             
             int pokaza();
             int pokazb();
             int pokazc();
};
void Fkwadratowa::wstawa(int x)
{
     a=x;
}
void Fkwadratowa::wstawb(int h)
{
     b=h;
}
void Fkwadratowa::wstawc(int z)
{
     c=z;
}
int Fkwadratowa::pokaza()
{
    return a;
}
int Fkwadratowa::pokazb()
{
    return b;
}
int Fkwadratowa::pokazc()
{
    return c;
}

void Fkwadratowa::oblicz(int a, int b, int c)
{
     delta= (b*b)-(4*a*c);
}
void Fkwadratowa::zerowe1(int a, int b)
{
     mz1=(-b)/2*a;
}
void Fkwadratowa::zerowe2(int a, int b, float delta)
{
     mz2=(-b-sqrt(delta))/2*a;
}
void Fkwadratowa::zerowe3(int a, int b, float delta)
{
     mz3=(-b+sqrt(delta))/2*a;
}
int main()
{
    Fkwadratowa obiekt;
    int dodaj; //To pozwoli mi na prowadzenie danych i zwróci mi wartości
    cout<<"Wprowadz a:"<<endl;
    cin>>dodaj;
    obiekt.wstawa(dodaj);
    cout<<"Wprowadz b:"<<endl;
    cin>>dodaj;
    obiekt.wstawb(dodaj);
    cout<<"Wprowadz c:"<<endl;
    cin>>dodaj;
    obiekt.wstawc(dodaj);
    int a=obiekt.pokaza();
    int b=obiekt.pokazb();
    int c=obiekt.pokazc();
    obiekt.oblicz(a,b,c);
    obiekt.zerowe1(a,b);
    obiekt.zerowe2(a,b,obiekt.delta);
    obiekt.zerowe3(a,b,obiekt.delta);
    /*cout<<"Twoj wynik to:"<<obiekt.delta<<endl;*/
    if(obiekt.delta>0)
    { 
    cout<<"X1"<<obiekt.mz2<<endl;
    cout<<"X2"<<obiekt.mz3<<endl;
    }
    if(obiekt.delta<0)
    {
                      cout<<"Brak miejsc zerowych"<<endl;
    }
    if(obiekt.delta==0)
    {
                       cout<<"X0"<<obiekt.mz1<<endl;
    }
    getch();
    return 0;
}

Może mi ktoś dać wskazówkę jak zrobić prywatne pole, które obliczy mi deltę? ( na razie mam to w public ). Zacznijmy od tego, że w polu prywatnym tworzę float delta;

Następnie w public muszę napisać funkcję, która odniesie się do tego, ale, że jestem początkujący to się uczę dopiero.

Pozdrawiam!

0

WTF? Proponuje dowiedzieć się że funkcje mogą zwracać wartość. Delta nie musi więc być polem klasy, wystarczy że będziesz miał metodę która tą deltę zwróci. Tak samo miejsca zerowe.

0

wiem, że mogą zwracać wtedy nie piszę void pokazd(); tylko konkretnie typ zwracanej wartości. Czyli piszę w private int delta, a w public metodę, która zwróci mi tę deltę?

0

Ale PO CO chcesz to mieć jako pole? Bo chyba nie po to żeby przyspieszyć sobie program o te kilka cykli procesora? Zrób po prostu metodę która tą deltę oblicza i z niej korzystaj. Koniec, kropka.
A czy ona będzie publiczna czy prywatna czy chroniona to już kwestia skąd chcesz ja wołac.

0

wiem, że to by było najprostsze rozwiązanie, ale jak dostane takie coś na kolokwium to będę musiał wiedzieć jak dotrzeć do tej delty w polu prywatnym :)

0
class Fkwadratowa
{
      private:
              int a,b,c;
              float delta; //Mój wynik
      public:
             
             void oblicz(int, int, int); //Funkcja licząca deltę
             float mz1;
             float mz2;
             float mz3;
             void zerowe1(int, int); //Funckja licząca x0.
             void zerowe2(int, int, float);
             void zerowe3(int, int, float);
             void wstawa(int);
             void wstawb(int);
             void wstawc(int);
 
             int pokaza();
             int pokazb();
             int pokazc();
             float return_delta(){return delata;}
};

Może tak?

0

Zrobiłem to w ten sposób, że umieściłem deltę w sekcji prywatnej i w public napisałem do niej konstruktor :) Dlaczego nie wyświetla mi miejsc zerowych?

 #include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
class Fkwadratowa
{
      private:
              int a,b,c;
              float x0, x1, x2, deltaa;
 
      public:
             Fkwadratowa() //Konstruktor, który odnosi się do delty, x0, x1, x2 w sekcji prywatne!
             {
                  
                  deltaa=(b*b)-(4*a*c);
                  x0=-b/2*a;
                  x1=(-b-sqrt(deltaa))/(2*a);
                  x2=(-b+sqrt(deltaa))/(2*a);
             }
             float zerowe0()
             {
                 return x1;
             }
             float zerowe1()
             {
                 return x1;
             }
             float zerowe2()
             {
                 return x1;
             }
             float delta()
             {
                 return deltaa;
             }
             //float delta; //Mój wynik
             //void oblicz(int, int, int); //Funkcja licząca deltę
            /* float mz1;
             float mz2;
             float mz3;
             void zerowe1(int, int); //Funckja licząca x0.
             void zerowe2(int, int, float);
             void zerowe3(int, int, float);*/
             void wstawa(int);
             void wstawb(int);
             void wstawc(int);
            
             //int x1();
             //int delta();
             int pokaza();
             int pokazb();
             int pokazc();
};
void Fkwadratowa::wstawa(int x)
{
     a=x;
}
void Fkwadratowa::wstawb(int h)
{
     b=h;
}
void Fkwadratowa::wstawc(int z)
{
     c=z;
}
int Fkwadratowa::pokaza()
{
    return a;
}
int Fkwadratowa::pokazb()
{
    return b;
}
int Fkwadratowa::pokazc()
{
    return c;
}


int main()
{
    Fkwadratowa obiekt;
    int dodaj; //To pozwoli mi na prowadzenie danych i zwróci mi wartości
    cout<<"Wprowadz a:"<<endl;
    cin>>dodaj;
    obiekt.wstawa(dodaj);
    cout<<"Wprowadz b:"<<endl;
    cin>>dodaj;
    obiekt.wstawb(dodaj);
    cout<<"Wprowadz c:"<<endl;
    cin>>dodaj;
    obiekt.wstawc(dodaj);
    int a=obiekt.pokaza();
    int b=obiekt.pokazb();
    int c=obiekt.pokazc();
    if(obiekt.delta() > 0)
    {
                        cout<<"X1="<<obiekt.zerowe1()<<endl;
                        cout<<"X2="<<obiekt.zerowe2()<<endl;
    }


    getch();
    return 0;
}
0

Ech, zupełnie nie czujesz programowania obiektowego.
Poza tym z tego co widze to twoje zerowe() zwraca zawsze to samo (tzn zawsze x1, WTF?). Nie mówiąc o tym że twój matematyk z podstawówki pewnie dostałby zawału jakby widział takie coś...
Wiesz że nie dzielimy przez 0? A czemu nie sprawdzasz ile delta wynosi?

0

Ja wiem czy by dostał zawału, skoro rozwiązanie na kartce u mnie wygląda zupełnie inaczej? W c# wiem jak warunek w c sharp tutaj nie, zatem ograniczam się. Druga sprawa to taka, że jeżeli a=0 to już program nie spełnia swego zadania bo wyrażenie nie jest już f. kwadratową. Dobra pomońmy fakt, że w int zerowe2() powinno być x2. Dlaczego nie wsyeitla obliczeń?

0
Shalom napisał(a)

Delta nie musi więc być polem klasy, wystarczy że będziesz miał metodę która tą deltę zwróci. Tak samo miejsca zerowe.

I za każdym razem tą deltę liczyć kiedy będzie potrzebna? Chciałbym przykładowo dodać metodę zwracającą wierzchołek i mam wywołać metodę z działaniem ? Zadziała ale po co ma za każdym razem liczyć deltę? Przy obliczeniu pierwiastków również wykonywać za każdym razem działanie? Lepiej raz ją policzyć i przechować wynik.

0
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
class Fkwadratowa
{
      private:
              int a,b,c;
              float x0, x1, x2, deltaa;
 
      public:
             float zerowe0()
             {
                 return x0;
             }
             float zerowe1()
             {
                 return x1;
             }
             float zerowe2()
             {
                 return x2;
             }
             float delta()
             {
                 return deltaa;
             }
             
             //float delta; //Mój wynik
             //void oblicz(int, int, int); //Funkcja licząca deltę
            /* float mz1;
             float mz2;
             float mz3;
             void zerowe1(int, int); //Funckja licząca x0.
             void zerowe2(int, int, float);
             void zerowe3(int, int, float);*/
             void wstawa(int);
             void wstawb(int);
             void wstawc(int);
            
             //int x1();
             //int delta();
             int pokaza();
             int pokazb();
             int pokazc();
             void dane();
};
void Fkwadratowa::wstawa(int x)
{
     a=x;
}
void Fkwadratowa::wstawb(int h)
{
     b=h;
}
void Fkwadratowa::wstawc(int z)
{
     c=z;
}
void Fkwadratowa::dane()
{
     deltaa=(b*b)-(4*a*c);
     x0=-b/2*a;
     x1=(-b-sqrt(deltaa))/(2*a);
     x2=(-b+sqrt(deltaa))/(2*a);
}
int Fkwadratowa::pokaza()
{
    return a;
}
int Fkwadratowa::pokazb()
{
    return b;
}
int Fkwadratowa::pokazc()
{
    return c;
}

int main()
{
    Fkwadratowa obiekt;
    int dodaj; //To pozwoli mi na prowadzenie danych i zwróci mi wartości
    cout<<"Wprowadz a:"<<endl;
    cin>>dodaj;
    obiekt.wstawa(dodaj);
    cout<<"Wprowadz b:"<<endl;
    cin>>dodaj;
    obiekt.wstawb(dodaj);
    cout<<"Wprowadz c:"<<endl;
    cin>>dodaj;
    obiekt.wstawc(dodaj);
    int a=obiekt.pokaza();
    int b=obiekt.pokazb();
    int c=obiekt.pokazc();
    cout<<"Delta="<<obiekt.delta()<<endl;
    if(obiekt.delta()> 0)
    {
                        cout<<"X1="<<obiekt.zerowe1()<<endl;
                        cout<<"X2="<<obiekt.zerowe2()<<endl;
    }

    getch();
    return 0;
}
 

Już jestem lepiej, ale cały czas ten sam wynik, podejrzewam, że nie przekazałem zmiennych do metody void dane();
?

0

A jak ją wywołać? jak napiszę w mainie dane(); to mam 2 błędy.

0

obiekt.dane();
ty ten kod aby sam pisałeś? Bo z twoich pytań wynika, że go nie rozumiesz. Poczytaj sobie o programowaniu obiektowym w c++.

0

Tak robiłem i właśnie miałem dwa błędy, musiałem wejść do innego kompilatora. Przepraszam.

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