Jak przejść do początku prog., jeżeli nie jest speł. war.?

Witam,

Muszę napisać prosty program liczący pierwiastki trójmianu kwadratowego z uwzględnieniem równania liniowego.

Oto kod:

#include 

#include 


using namespace std;


int main()				

{

  float a,b,c,d,x0,x1,x2,xl; 

  char e;


  while ((a!=0) and (b!=0) and (c!=0))

                                       {


  cout<
  cout<<"Program liczy pierwiastki trojmianu kwadratowego"<
  cout<<"Podaj A: ";

  cin>>a;

  cout<<"Podaj B: ";

  cin>>b;

  cout<<"Podaj C: ";

  cin>>c;

  cout<

  d=b*b-4*a*c;


  if(a==0){

           cout<<"Rownanie liniowe !"<
           cout<<"Policzyc wartosc 'x' dla rownania liniowego? T/N";

           cout<
           cin>>e;

           e=toupper(e);


            if(e=='T'){

                        if((b==0) and (c!=0))cout<<"Rownanie sprzeczne !";

                        if((b==0) and (c==0))cout<<"Rownanie tozsamosciowe - Nieskonczenie wiele rozwiazan.";

                        else {

                               xl=-c/b;

                               cout<<"x= "<
                             }

                      }

          }

  else{

       if(d<0)cout<<"Brak rozwiazan.";

       if(d==0){

                 x0=-b/2*a;

                 cout<<"x= "<
               };

       if(d>0){

                x1=-b-sqrt(d)/2*a;

                x2=-b+sqrt(d)/2*a;

                cout<<"x1= "<
                cout<<"x2= "<
              }

      }


  getchar();

  getchar();

  system("cls");


                                       }

  return 0;

}

Jak zrobić coś takiego, że gdy zmienna ‘e’ jest różna od “T”, program wracał na sam początek ?

jeżeli przez sam początek rozumieć

while ((a!=0) and (b!=0) and (c!=0))

to wystarczy

continue;

w momencie kiedy e != ‘T’ Przy okazji: nie inicjujesz wartości zmiennych w funkcji main (które znajdują się na stosie), a zaraz potem sprawdzasz warunki dotyczące tych zmiennych w

while ((a!=0) and (b!=0) and (c!=0))

to że akurat twój kompilator przy danych ustawieniach kompilacji je zeruje sprawia ze to działa, ale nie ma on takiego obowiązku (czytaj: c++98 / c++03 / c++11 nic takiego nie nakazują) Przy okazji 2:

system("cls");

jest nieprzenośne (specyficzne dla windows), sama funkcja system jest oczywiście dostępna na innych platformach, ale jej argument jest interpretowany przez shella / wiersz polecen a tu już są duże rozbieżności.

Dzięki za rady.

Zrobiłem tak, jak pisałeś, jednak w momencie, gdy e!=‘T’ , program się zamyka, nie wiem czemu.

Czasami przy specyficznych współczynnikach, też się zamyka, nie wiem czemu. Ma to miejsce np. gdy a=5 b=3 c=8.

Wiesz może czemu tak się dzieje ?

Jest to przypadek, gdy:

if(d<0)cout<<"Brak rozwiazan.";

Wychodzi z pętli i kończy działanie, a nie chcę, żeby tak było. I jeszcze jedno pytanie, czy w C++ jest odpowiednik pascalowego

clrscr

?

Bo masz rację z tym, że to nieprzenośne.

while ((a!=0) and (b!=0) and (c!=0))

Nie słyszałem o takiej wersji koniunkcji no ale może czegoś nie wiem, natomiast już o takiej tak :

while ((a!=0) && (b!=0) && (c!=0))

Zamyka się przez warunek while, który mówi że każdy ze współczynników ma byc rózny od zera. Masz dwa wyjścia: albo zmień warunek na coś typu while (ok), i w momencie gdy chcesz przerwać program ustawiaj ok = false, albo przed zrobieniem wspomnianego continue zeruj współczynniki.

http://www.cplusplus.com/reference/clibrary/ciso646/

Wszystko śmiga już tak, jak chciałem.

Dzięki Witos. :slight_smile: