• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcje są pomijane

0 głosów
87 wizyt
pytanie zadane 5 dni temu w C i C++ przez Mateusz525 Nowicjusz (120 p.)

Witam,mam problem dotyczący funkcji w programowaniu obiektowym c++
Wszystko się kompiluje aczkolwiek podczas interakcji z programem funkcje się nie wykonują i są pomijane
Jak prawidłowo powienien działać kod:

Program pyta które do którego zagadnienia przejść :

-fibonnaci,gdy wpisze 1

-euler,gdy wpisze 2

-pitagoras,gdy wpisze 3

po wpisaniu któryś z wartości automatycznie powinna odpalić się funkcja,która będzie kazała wpisać daną ilość liczb do tablicy typu deque,a po tej funkcji program zadaje pytanie czy ma obliczyc wynik dla danego ciagu

jesli wpisze 0 to nie a jak 1 to obliczy

zadna z funkcji sie nie wywoluje,probowalem juz na pare sposobow.

Bardzo prosiłbym o pomoc

Ponizej kod

#include <iostream>
#include <deque>
using namespace std;


class Start
{
friend class Fibonnaci;
friend class Euler;
friend class Pitagoras;
private:
    std::deque<int>liczba2;
    std::deque<int>n2;
    std::deque<int>a2;
    std::deque<int>b2;
public:
    void wybor();
    void wybor_fibonnaci();
    void wybor_euler();
    void wybor_pitagoras();
    Start(std::deque<int>liczba,std::deque<int>n2,std::deque<int>a2,std::deque<int>b2);

};

class Fibonnaci:public Start
{
public:
    void fibonnaci_dodaj(std::deque<int>liczba1);
    void fibonnaci_oblicz(std::deque<int>liczba1);

};

class Euler:public Start
{

public:
    void euler_dodaj(std::deque<int>liczba);
    void euler_oblicz(std::deque<int>liczba);
};

class Pitagoras:public Start
{
public:
    void pitagoras_dodaj(std::deque<int>bok1,std::deque<int>bok2);
    void pitagoras_oblicz(std::deque<int>bok1,std::deque<int>bok2);
};
#include <iostream>
#include <math.h>
#include <windows.h>
#include "headers.h"
using namespace std;

void Start::wybor() {
    int a;
    cout << "wybierz opcje wyboru\n";
    cout << "--------------------" << endl;
    cout << endl;
    cout << "Wpisz 1 aby przejsc do fibonnaciego" << endl;
    cout << "Wpisz 2 aby przejsc do Eulera" << endl;
    cout << "Wpisz 3 aby przejsc do Pitagorasa" << endl;
    cout << endl;
    cout << "--------------------" << endl;
    do {
    cin >> a;
        if(a<1 || a>3) {
            cout << "Podaj prawidlowa liczbe!"<< endl;
        }
    } while (a<1 || a>3);
    switch(a) {
        case 1 : wybor_fibonnaci();
        break;
        case 2 : wybor_euler();
        break;
        case 3 : wybor_pitagoras();
        break;
}
}

void Start::wybor_fibonnaci() {
    Fibonnaci fibonnaci_dodaj(Start liczba2);
    int wybor_funkcji;
    cout << "Czy chcesz otrzymac obliczenia dla wybranej przez ciebie liczby w nastepnym kroku? (wpisz 1 jesli tak lub 0 jesli nie)";
    cout << endl;
    cin >> wybor_funkcji;
    if (wybor_funkcji == 1) {
        Fibonnaci fibonnaci_oblicz(Start liczba2);
    }
    else if (wybor_funkcji == 0) {
            system("cls");
            wybor();
    }
}

void Start::wybor_euler() {
    Euler euler_dodaj(Start n2);
    int wybor_funkcji;
    cout << "Czy chcesz otrzymac obliczenia dla wybranej przez ciebie liczby w nastepnym kroku?";
    cin >> wybor_funkcji;
    if (wybor_funkcji == 1) {
        Euler euler_oblicz(Start n2);
    }
    else if (wybor_funkcji == 0) {
            system("cls");
            wybor();
    }
}

void Start::wybor_pitagoras() {
    Pitagoras pitagoras_dodaj(Start a2,Start b2);
    int wybor_funkcji;
    cout << "Czy chcesz otrzymac obliczenia dla wybranej przez ciebie liczby w nastepnym kroku?";
    cin >> wybor_funkcji;
    if (wybor_funkcji == 1) {
        Pitagoras pitagoras_oblicz(Start a2,Start b2);
    }
    else if (wybor_funkcji == 0) {
            system("cls");
            wybor();
    }
}

void Fibonnaci::fibonnaci_dodaj(std::deque<int>liczba1) {
    int wybor;
    int dlugosc;
    int a;
    cout << "Podaj dlugosc tablicy";
    cin >> dlugosc;
    liczba2.get_allocator().allocate(dlugosc);
    do {
    cout << "Chcesz dac liczby do tylu kolejki czy na sam jej przod? (wybierz 1 jesli chcesz pchnac do tylu lub 2 jesli do przodu) " << endl;
    cin >> wybor;
    } while(wybor > 2 || wybor < 1) ;
    if (wybor == 1) {
        cout << "Podaj liczby ktore chcesz pchnąć na tył kolejki" << endl;
        for (int i = 0;i<dlugosc;i++) {
            cin >> a;
            liczba2.push_back(a);
        }
    }
    else if (wybor == 2) {
        for (int i = 0;i<dlugosc;i++) {
            cin >> a;
            liczba2.push_front(a);
        }

    }
}


void Euler::euler_dodaj(std::deque<int>liczba) {
    int wybor;
    int dlugosc;
    int a;
    cout << "Podaj dlugosc tablicy " << endl;
    cin >> dlugosc;
    n2.get_allocator().allocate(dlugosc);
    do {
    cout << "Chcesz dac liczby do tylu kolejki czy na sam jej przod? (wybierz 1 jesli chcesz pchnac do tylu lub 2 jesli do przodu) " << endl;
    cin >> wybor;
    } while(wybor > 2 || wybor < 1) ;
    if (wybor == 1) {
        cout << "Podaj liczby ktore chcesz pchnac na tyl kolejki" << endl;
        for (int i = 0;i<dlugosc;i++) {
            cin >> a;
            n2.push_back(a);
        }
    }
    else if (wybor == 2) {
        for (int i = 0;i<dlugosc;i++) {
            cin >> a;
            n2.push_front(a);
        }

    }
}

void Pitagoras::pitagoras_dodaj(std::deque<int>bok1,std::deque<int>bok2) {
    int wybor_liczby;
    int dlugosc;
    int liczby;
    cout << "Podaj dlugosc tablicy";
    cin >> dlugosc;
    a2.get_allocator().allocate(dlugosc);
    b2.get_allocator().allocate(dlugosc);
    do {
    cout << "Chcesz dac liczby do tylu kolejki czy na sam jej przod? (wybierz 1 jesli chcesz pchnac do tylu lub 2 jesli do przodu) " << endl;
    cin >> wybor_liczby;
    } while(wybor_liczby > 2 || wybor_liczby < 1) ;
    if (wybor_liczby == 1) {
        cout << "Podaj liczby ktore chcesz pchnąć na tył kolejki dla pierwszego boku" << endl;
        for (int i = 0;i<dlugosc;i++) {
            cin >> liczby;
            a2.push_back(liczby);
        }
        cout << "Podaj liczby,które chcesz pchnąć na tył kolejki dla drugiego boku" << endl;
    }
    else if (wybor_liczby == 2) {
        cout << "Podaj liczby ktore chcesz pchnąć na przód kolejki dla pierwszego boku" << endl;
        for (int i = 0;i<dlugosc;i++) {
            cin >> liczby;
            a2.push_front(liczby);
        }
        cout << "Podaj liczby ktore chcesz pchnąć na przód kolejki dla drugiego boku" << endl;
        for (int i = 0;i<dlugosc;i++) {
            cin >> liczby;
            a2.push_front(liczby);
        }

    }
    Start wybor();
}

void Fibonnaci::fibonnaci_oblicz(std::deque<int>liczba1) {
    int dlugosc = liczba2.size();
    int wynik;
    int wybor_liczby;
    cout << "Wybierz Która liczbę chcesz obliczyć dla ciągu fibonnaciego\n";
    do {
        cin >> wybor_liczby;
    }while(wybor_liczby> dlugosc);
    if (liczba2.at(wybor_liczby) > 1) {
        wynik = (liczba2.at(wybor_liczby) - 1) + (liczba2.at(wybor_liczby) - 2);
    }
    else if (liczba2.at(wybor_liczby) == 1)  {
        wynik = 1;
    }
    else if (liczba2.at(wybor_liczby) == 0) {
        wynik = 0;
    }
    cout << "Wynik to: " << wynik << endl;
    Start wybor();
}

void Euler::euler_oblicz(std::deque<int>liczba) {
    int dlugosc = n2.size();
    int wynik;
    int wybor_liczby;
    cout << "Wybierz Która liczbę chcesz obliczyć dla ciągu Eulera\n";
    do {
        cin >> wybor_liczby;
    }while(wybor_liczby>dlugosc);
    wynik = pow(n2.at(wybor_liczby),2) - n2.at(wybor_liczby) + 41;
    cout << "Wynik dla ciagu eulera to: " << wynik << endl;
    Start wybor();
}

void Pitagoras::pitagoras_oblicz(std::deque<int>bok1,std::deque<int>bok2) {
    int dlugosc = a2.size();
    int wynik;
    int wybor_liczby;
    cout << "Wybierz Która liczbę chcesz obliczyć dla Pitagorasa\n";
    do {
        cin >> wybor_liczby;
    }while(wybor_liczby > dlugosc);
    wynik = pow(a2.at(wybor_liczby),2) + pow(b2.at(wybor_liczby),2);
    cout << "Przeciwprostokątna wynosi: " << wynik << endl;
    Start wybor();
}

Start::Start(std::deque<int>liczba0,std::deque<int>n20,std::deque<int>a20,std::deque<int>b20) {
    liczba2 = liczba0;
    n2 = n20;
    a2 = a20;
    b2 = b20;
}




#include <iostream>
#include "headers.h"
using namespace std;

std::deque<int>Fibo;
std::deque<int>Eul;
std::deque<int>A_p;
std::deque<int>B_p;

int main()
{
    Start p1(Fibo,Eul,A_p,B_p);
    p1.wybor();
    return 0;
}


 

komentarz 4 dni temu przez j23 Mędrzec (172,940 p.)
Dlaczego debugera nie użyjesz?
komentarz 4 dni temu przez TOWaD Bywalec (2,900 p.)
edycja 4 dni temu przez TOWaD

@Mateusz525, ? Fibonnaci fibonnaci_dodaj(Start liczba2);  Moim zdaniem dziwna składnia. Co to jest deklaracja? definicja? funkcji, konstruktor?

1 odpowiedź

0 głosów
odpowiedź 2 dni temu przez TOWaD Bywalec (2,900 p.)

Pozwoliłem sobie napisać program "aby automatycznie odpaliła się jakaś funkcja", a nie do psucia. Możliwe mało ingerując w headersF.cpp, ale przebudowując dość gruntownie main.cpp i headers.h.

#include <iostream>
#include <vector>
#include "headers.h"
using namespace std;
int menu();
int main()
{
    Fibonnaci f;
    Euler e;
    Pitagoras p;

    std::vector<ciagi*>tab ={&f,&e,&p};

    for (int i=menu();i!=-1;i=menu())tab.at(i)->wybor();
    return 0;
}

int menu() {
    int a;
    cout << "wybierz opcje wyboru\n";
    cout << "--------------------" << endl;
    cout << endl;
    cout << "Wpisz 0 aby zkonczyc program" << endl;
    cout << "Wpisz 1 aby przejsc do fibonnaciego" << endl;
    cout << "Wpisz 2 aby przejsc do Eulera" << endl;
    cout << "Wpisz 3 aby przejsc do Pitagorasa" << endl;
    cout << endl;
    cout << "--------------------" << endl;
    do {
    cin >> a;
        if(a<0 || a>3) {
            cout << "Podaj prawidlowa liczbe!"<< endl;
        }
    } while (a<0 || a>3);
 return --a;
}
#ifndef HEADERS_H
#define HEADERS_H
#include <deque>

class ciagi {
public:
    ciagi(){};
    virtual ~ciagi();
   // void wybor();
    virtual void wybor();
    virtual void dodaj()=0;
    virtual void oblicz()=0;
    int dlugosc (int d);
protected:
    int wybor_liczby;
    int mdlugosc;
    int mwybor;
};

class Fibonnaci:public ciagi {
public:
    void dodaj();
    void oblicz();
    virtual ~Fibonnaci(){};
    private:
    std::deque<int>liczba;
};

class Euler:public ciagi {
public:
    void dodaj();
    void oblicz();
    virtual ~Euler(){};
private:
    std::deque<int>liczba;
};

class Pitagoras:public ciagi {
public:
//    void pitagoras_dodaj(std::deque<int>bok1,std::deque<int>bok2);
//    void pitagoras_oblicz(std::deque<int>bok1,std::deque<int>bok2);
    void dodaj();
    void oblicz();
    virtual ~Pitagoras(){};
private:
    std::deque<int>bok1;
    std::deque<int>bok2;
};
#endif // HEADERS_H
#include "headers.h"
#include <iostream>
#include <math.h>
#include <windows.h>

using namespace std;
ciagi::~ciagi(){};
void ciagi::wybor() {
        dodaj();
    int wybor_funkcji;
    cout << "Czy chcesz otrzymac obliczenia dla wybranej przez ciebie liczby w nastepnym kroku? (wpisz 1 jesli tak lub 0 jesli nie)";
    cout << endl;
    cin >> wybor_funkcji;
    if (wybor_funkcji == 1) {
        this->oblicz();
    } else if (wybor_funkcji == 0) {
        system("cls");
    }
}
int ciagi::dlugosc(int d) {

    if (d==0) {
        std::cerr<< "Brak danych, dodaj elementy"<<std::endl;
        return -1;
    }
    do {
        cout << "Podaj liczbe z zakresu ["<<1<<"-"<<d<<"]:";
        cin >> wybor_liczby;
        wybor_liczby--;
    } while(wybor_liczby > (d-1) || wybor_liczby < 0);
    return wybor_liczby;
}
void Fibonnaci::dodaj() {
    int wybor;
    int dlugosc;
    int a;
    cout << "Podaj dlugosc tablicy: ";
    cin >> dlugosc;
    //  liczba.get_allocator().allocate(dlugosc);
    do {
        cout << "Chcesz dac liczby do tylu kolejki czy na sam jej przod? (wybierz 1 jesli chcesz pchnac do tylu lub 2 jesli do przodu) " << endl;
        cin >> wybor;
    } while(wybor > 2 || wybor < 1) ;
    if (wybor == 1) {
        cout << "Podaj liczby ktore chcesz pchn?? na ty? kolejki" << endl;
        for (int i = 0; i<dlugosc; i++) {
            cin >> a;
            liczba.push_back(a);
        }
    } else if (wybor == 2) {
        for (int i = 0; i<dlugosc; i++) {
            cin >> a;
            liczba.push_front(a);
        }

    }
}
void Euler::dodaj() {
    int wybor;
    int dlugosc;
    int a;
    cout << "Podaj dlugosc tablicy: " << endl;
    cin >> dlugosc;
   // liczba.get_allocator().allocate(dlugosc);
    do {
        cout << "Chcesz dac liczby do tylu kolejki czy na sam jej przod? (wybierz 1 jesli chcesz pchnac do tylu lub 2 jesli do przodu) " << endl;
        cin >> wybor;
    } while(wybor > 2 || wybor < 1) ;
    if (wybor == 1) {
        cout << "Podaj liczby ktore chcesz pchnac na tyl kolejki" << endl;
        for (int i = 0; i<dlugosc; i++) {
            cin >> a;
            liczba.push_back(a);
        }
    } else if (wybor == 2) {
        for (int i = 0; i<dlugosc; i++) {
            cin >> a;
            liczba.push_front(a);
        }

    }
}
void Pitagoras::dodaj() {
    int wybor;
    int dlugosc;
    int liczby;
    cout << "Podaj dlugosc tablicy: " << endl;
    cin >> dlugosc;
  //  bok1.get_allocator().allocate(dlugosc);
  //  bok2.get_allocator().allocate(dlugosc);
    do {
        cout<<"\ndlugosc"<<dlugosc;
        cout<<"\ndlugosc"<<bok1.size();
        cout << "\nChcesz dac liczby do tylu kolejki czy na sam jej przod? (wybierz 1 jesli chcesz pchnac do tylu lub 2 jesli do przodu) " << endl;
        cin >> wybor;
    } while(wybor > 2 || wybor < 1) ;

    if (wybor== 1) {
        cout << "Podaj liczby ktore chcesz pchn?? na ty? kolejki dla pierwszego boku" << endl;
        for (int i = 0; i<dlugosc; i++) {
            cin >> liczby;
            bok1.push_back(liczby);
            cout << "\nsize: "<< bok1.size()<< endl;
        }
        cout << "Podaj liczby,które chcesz pchn?? na ty? kolejki dla drugiego boku" << endl;
         for (int i = 0; i<dlugosc; i++) {
            cin >> liczby;
            bok2.push_back(liczby);
        }
    } else if (wybor == 2) {
        cout << "Podaj liczby ktore chcesz pchn?? na przód kolejki dla pierwszego boku" << endl;
        for (int i = 0; i<dlugosc; i++) {
            cin >> liczby;
            bok1.push_front(liczby);
        }
        cout << "Podaj liczby ktore chcesz pchn?? na przód kolejki dla drugiego boku" << endl;
        for (int i = 0; i<dlugosc; i++) {
            cin >> liczby;
            bok2.push_front(liczby);
        }

    }

}
void Fibonnaci::oblicz() {
    int wynik;
    wybor_liczby=dlugosc(liczba.size());
    try {
        if (liczba.at(wybor_liczby) > 1) {
            wynik = (liczba.at(wybor_liczby) - 1) + (liczba.at(wybor_liczby) - 2);
        } else if (liczba.at(wybor_liczby) == 1)  {
            wynik = 1;
        } else if (liczba.at(wybor_liczby) == 0) {
            wynik = 0;
        }
        cout << "Wynik to: " << wynik << endl;
    } catch (std::bad_alloc) {
         std::cerr << "bledne dane, przekroczony rozmiar tablicy" << std::endl;
    }

}
void Euler::oblicz() {
    int wynik;
    cout << "Wybierz wyraz ciagu chesz obliczyc: \n";
    wybor_liczby=dlugosc(liczba.size());
    try {
        wynik = pow(liczba.at(wybor_liczby),2) - liczba.at(wybor_liczby) + 41;
        cout << "Wynik dla ciagu eulera to: " << wynik << endl;
    } catch (std::bad_alloc) {
        std::cerr << "bledne dane, przekroczony rozmiar tablicy" << std::endl;
    }
}
void Pitagoras::oblicz() {
    int wynik;
    cout << "Wybierz która liczb chcesz obliczyc dla Pitagorasa: \n";
    wybor_liczby=dlugosc(std::min(bok1.size(),bok2.size()));
    try {
        std::cout<< bok1.at(wybor_liczby)<<"^2+"<<bok2.at(wybor_liczby)<<"^2=";
        wynik = pow(bok1.at(wybor_liczby),2) + pow(bok2.at(wybor_liczby),2);
        cout << "Przeciwprostokatna wynosi: " << wynik << endl;
    } catch (std::bad_alloc) {
        std::cerr << "bledne dane, przekroczony rozmiar tablicy" << std::endl;
    }

}

 

Podobne pytania

0 głosów
1 odpowiedź 109 wizyt
0 głosów
1 odpowiedź 104 wizyt
pytanie zadane 20 września 2015 w C i C++ przez tomasztopolewski Początkujący (430 p.)
0 głosów
3 odpowiedzi 258 wizyt
pytanie zadane 4 stycznia 2021 w Matematyka, fizyka, logika przez MateuszFisch Początkujący (250 p.)

87,940 zapytań

136,519 odpowiedzi

304,382 komentarzy

58,305 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...