Problem ze składnią

0

Mam do napisania program ktory liczy pierwiastki funkcji kwadratowej ktory pyta o wspolczynniki funkcji kwadratowej a,b,c nastepnie po wpisaniu wspolczynnikow a,b,c rozpatruje kilka przypadkow

  1. czy wsp "a" jest rozny od zera ?
  • jesli tak,jest rozny od zera to przechodzimy do delty ,
  • jesli nie to wywala napis "podaj wsp a rozny od zera"
  1. delta wieksza od zera
    -jesli tak to oblicza miejsca zerowe
  • po obliczeniu ma zapytac czy kontynuowac czy konczy, jesli kontynuujemy to wracamy do kroku pierwszego
    -jesli nie to przechodzi do kroku nr 3
  1. czy delta rowna zero
    -jesli tak to oblicza miejsce zerowe
    -po obliczeniu ma zapytac czy kontynuowac czy konczy, jesli kontynuujemy to wracamy do kroku pierwszego (jesli nie to koniec programu)
    -jesli odp na pyt nr 3) brzmi nie tzn ze jest mniejsza od zera i ma wyswietlic napis "brak rozwiazan w zakresie liczb rzeczywistych"

napisalem program ktory poprawnie oblicza miejsca zerowe, ale tylko oblicza, bez pytan czy kontynuowac czy tez nie, wiec pomyslalem sobie ze skoro robi to wszystko poprawnie (wykorzystuje warunek if) to ten caly dzialajacy algorytm umieszcze w petli typu do-while oraz do kazdego tych przypadkow dopisze

printf("\n tak=t, nie=n, dalej liczyc ? ");
     znak = getche();

a na prawie samym koncu dopisze while (znak == 'n');

printf("\nkoniec");
getche();

natomiast problem polega na tym ze wywala mi błąd o tresci "expected 'while' at end of input|"

#include <stdio.h>
#include <math.h>
main ()
{
float a,b,c,x1,x2,x,delta;
char znak = 'n';
clrscr();

printf("Podaj wspolczynnik a\n");
scanf("%3f",&a);
printf("Podaj wspolczynnik b\n");
scanf("%3f",&b);
printf("Podaj wspolczynnik c\n");
scanf("%3f",&c);

do
{

delta=b*b-4*a*c;
if(a==0)
    {
    printf("podaj wspolczynnik a wiekszy od zera\n");
    printf("\n tak=t, nie=n, dalej liczyc ? ");
    znak = getche();
}
else if( delta>0 )
{
printf("delta = %f\n",delta);
printf("rownanie posiada dwa rozwiazania\n");
x1=(((-1)*b-sqrt(delta))/(2*a));
printf("X1 = %2f\n",x1);
x2=(((-1)*b+sqrt(delta))/(2*a));
printf("X2 = %2f\n",x2);
printf("\n tak=t, nie=n, dalej liczyc ? ");
znak = getche();

}
else if(delta==0)
{
    x1=((-1)*b)/(2*a);
    printf("delta = %f\n",delta);
   printf("rownanie posiada jedno rozwiazanie x1=%f",x1);
   printf("\n tak=t, nie=n, dalej liczyc ? ");
     znak = getche();
}
else
{
    printf("delta = %f\n",delta);
    printf("brak rozwiazania rownania kwadratowego w zakresie liczb rzeczwysitych");
    printf("\n tak=t, nie=n, dalej liczyc ? ");
     znak = getche();
     
}while  (znak == 'n');

printf("\nkoniec");
getche();

return 0;
}
1

Formatuj kod a sam zobaczysz którego znaku Ci brakuje

0

co dokladnie oznacza "expected 'while' at end of input|" ?

2

Oznacza że konstrukcja do {} while wygląda właśnie tak a nie inaczej, a u ciebie brakuje klamry } przed while bo piszesz kod lodówką i nie umiesz go sformatować więc pomyliłeś klamrę zamykajacą else z klamrą zamykającą do while

0

Niby jak brakuje klamry } przed while skoro w wklejonym przeze mnie kodzie , wiersz 53 klamra } występuje przed while , jeśli patrzymy od lewej strony
jak formatowac tekst w codeblocks ? na razie to mam kilkanascie godzin programowania za sobą

2

@Cinek_Polska: xD No dobra ale zobacz z czym ta klamra jest sparowana. Czy aby nie czasem z klamrą w else? ( ͡° ͜ʖ ͡°) Obrazek poglądowy:

if (cośtam)
{ // 1

} // koniec 1

I podobnie:

if (cośtam)
{ // 1
  if (cośtam)
  { // 2

  } // koniec 2
} // koniec 1

Weź sobie tak ponumeruj klamry skoro nie umiesz sformatować kodu. Code blocks ma guzik do sformatowania kodu w pliku.

1

jak formatowac tekst w codeblocks ?

W oknie edytor Code::Blocks kliknij prawym klawiszem myszy i z menu kontekstowego
wybierz opcję "Format use AStyle"

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