Jak zapętlić zapytanie w konsoli programu

0

Oto mój program, chciałbym by po uzyskaniu 1 wyniku, komputer zapytał o wszystko jeszcze raz, w celu policzenia kolejnej funkcji, co mam zrobić???

 
#include <iostream>
#include <cstdio>
#include <math.h>

using namespace std;

int main()
{
    float x,y;								// argument i wartość
    float a,b,c;							// współczynniki 
    float t,u;								// miejsca zerowe
    float p,q;								// unikalne współczynniki funkcji
    float delta;

    // tu user wpisze sobie wartości na potem
    cout<<"	Podaj wybrana postac rownania: "
	      "1.ogolna ""2.kanonicza  3.iloczynowa"<<endl;
    int postac;
    cin >> postac;

    switch(postac)
    {
    case 1:
        cout<<"Podaj a:";
        cin>>a;
        cout<<"Podaj b:";
        cin>>b;
        cout<<"Podaj c:";
        cin>>c;
        break;
    case 2:
        cout<<"Podaj a:";
        cin>>a;
        cout<<"Podaj p:";
        cin>>p;
        cout<<"Podaj q:";
        cin>>q;
        break;
    case 3:
        cout<<"Podaj a:";
        cin>>a;
        cout<<"Podaj t:";
        cin>>t;
        cout<<"Podaj u:";
        cin>>u;
        break;
    }


   
		
		if(a==0)
		{
			goto koniec;
			}
    

        // liczenie delty
        delta=pow(b,2)-4*a*c;
        cout<<"Delta tego rownania kwadratowego wynosi:"<<delta<<endl;

        if(delta>0)
        {

            t=((-b)-sqrt(delta))/2*a;
            u=((-b)+sqrt(delta))/2*a;
            cout<<"Nasze rownanie kwadratowe ma 2 miejsca zerowe" <<endl;
            cout<<"Pierwszemu miejscu zerowemu odpowiada wartosc"<<t<<endl;
            cout<<"Drugiemu miejscu zerowemu odpowiada wartosc"<<u<<endl;


        }
        else if(delta==0)
        {
            t=(-b)/2*a;
            cout<<"Nasze rownanie kwadratowe ma jedno miejsce zerowe";
            cout<<"jest nim"<<t<<endl;
        }
        else if(delta<0)
        {
            cout<<"Nasze rownanie kwadratowe nie ma miejsc zerowych"<<endl;
        }
	

    //skrajne wartosci naszej funkcji
    if(a<0)
    {
        p=b/(2*a);
        q=-delta/(4*a);
        cout<<"Najwieksza wartosc q wynosi"<<q <<"dla p rownego"<<p <<endl;
    }
    else if(a==0)
    {
        cout<<"Nasze rownianie jest liniowe"<<endl;
    }
    else if(a>0)
    {
        p=b/(2*a);
        q=-delta/(4*a);
        cout<<"Najmniejsza wartosc q wynosi"<<q <<"dla p rownego"<<p <<endl;
    }


    //wypisujemy postaci naszej funkcji


    if(delta>=0)
    {
        cout<<"Postac ogolna naszej funkcji to:";
        cout<<"y="<<a<<"x^2 +"<<b <<"x +"<<c<<endl;
        cout<<"Postac kanoniczna naszej funkcji to:";
        cout<<"y="<<a<<"(x+"<< p <<")^2 -"<< q<<endl;
        cout<<"Postac iloczynowa naszej funkcji to:";
        cout<<"y="<<a<<"(x-"<<t<<")(x-"<<u <<")"<<endl;
    }
    else if(delta<0)
    {
        cout<<"Postac ogolna naszej funkcji to:";
        cout<<"y="<<a<<"x^2 +"<<b<<"x +"<< c <<endl;
        cout<<"Postac kanoniczna naszej funkcji to:";
        cout<<"y="<<a<<"(x+"<<p <<")^2 -"<<q <<endl;
    }

	if(a==0)
	{
	koniec:
		cout<<"Funkcja nie jest kwadratowa"<<endl;
	}
    cin.ignore();
	getchar();
    return 0;
}
0

Wpakuj w pętlę albo w ostateczności rekurencję ogonową. Weź ten kod podziel na sensowne funkcje, http://ludzie.4programmers.net/bash/?381

0

Działa mi tylko niestety ogólna postać funkcji, czy ktoś jest w stanie powiedzieć dlaczego???

0

bo coś źle robisz. Polecam Ci jakiś książkę ewentualnie kurs.
Dlaczego taka odpowiedz? Bo to pytanie w stylu "Auto mi nie chce zapalić, może ktoś mi powiedzieć dlaczego?". Pokaż kod.

Jak chcesz to się odezwij to podeśle Ci klasę menu to nie będziesz się męczyć z utworzeniem menu i Twój program nie będzie aż tak nieczytelny

edit. Źle zrozumiałem, stąd nieporozumienie.

jak wybierzesz kanoniczna (2) to jakie wartości będą w tej linijce? (chodzi o zmienne, jakie wartości mają, powiedzmy ze wprowadziłem liczby 1,2,3)
delta=pow(b,2)-4ac;

0

Będziesz musiał wykonać inne obliczenia w zależności od tego jaką postać wybierze użytkownik . U ciebie tego nie ma, nie ważne jaka postać ty i tak wykonujesz te same obliczenia.

Może to wyglądać mniej więcej w ten sposób:

    switch(postac)
    {
    case 1:
        cout<<"Podaj a:";
        cin>>a;
        cout<<"Podaj b:";
        cin>>b;
        cout<<"Podaj c:";
        cin>>c;

        /* tutaj wyznacz deltę */

        break;
    case 2:
        cout<<"Podaj a:";
        cin>>a;
        cout<<"Podaj p:";
        cin>>p;
        cout<<"Podaj q:";
        cin>>q;
        
        /* tutaj wyznacz 'b' i 'c' i deltę */
        
        break;
    case 3:
        cout<<"Podaj a:";
        cin>>a;
        cout<<"Podaj t:";
        cin>>t;
        cout<<"Podaj u:";
        cin>>u;

        /* tutaj wyznacz 'b' i 'c' i deltę */

        break;
    }
    
    if (postac != 2) {
        /* tutaj wyznacz 't' i 'u' korzystając z 'a' i/lub 'b' i/lub 'c' i/lub delty */
    } else if (postac != 3) {
        /* tutaj wyznacz 'p' i 'q' korzystając z 'a' i/lub 'b' i/lub 'c' i/lub delty */
    }
    
    /* tutaj wypisz ile rozwiązań ma równanie i jakie są poszczególne postaci */

Może się okazać, że inaczej to trzeba będzie liczyć (w innych miejscach), podaje mniej więcej ideę jako tako.

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