problem z programem w C - równanie kwadratowe

0

Witam! Proszę o pomoc z tym programem.

 
#include <stdio.h>
#include <math.h>
#include<stdlib.h>
main ()
{
    float a,b,c,d,x1,x2,x0;
    printf("Wpisz wartosc a\n");
    printf("Wpisz wartosc b\n");
    printf("Wpisz wartosc c\n");
    scanf("%f %f %f",&a,&b,&c);
    d=(b*b)-(4*a*c);
    x1=(((-b)+ sqrt(d))/(2*a));
  	x2=(((-b)- sqrt(d))/(2*a));
    x0=(-b)/(2*a); 
    x2=((-b)/(2*a));
    if(d>0)
    	{
		printf ("Pierwszy pierwiastek wynosi:\n",x1);
    	printf ("Drugi pierwiastek wynosi:\n",x2);
		}
    else
    if (d<0)
    {printf ("Brak pierwiastka\n");}
    else
    if(d=0)
    	{
		printf (" Pierwiastek wynosi:\n",x0);
		}
    system("PAUSE");
    return 0;
} 

nie chce obliczyć pierwiastków i jeszcze jest tak gdy go uruchomię:
wpisz wartość a
wpisz warość b
wpisz wartość c
i pod spodem podajemy liczby

Czy mógłbym prosić o zmodyfikowanie całego kodu ?

0

Ten program robi dokładnie to o co go prosisz...

Czy mógłbym prosić o zmodyfikowanie całego kodu ?

Dodałem komentarze w całym kodzie.

#include <stdio.h>
#include <math.h>
#include<stdlib.h>
main ()
{
    float a,b,c,d,x1,x2,x0;
    printf("Wpisz wartosc a\n"); // wypisujesz tekst
    printf("Wpisz wartosc b\n"); // wypisujesz tekst
    printf("Wpisz wartosc c\n"); // wypisujesz tekst
    scanf("%f %f %f",&a,&b,&c); // pobierasz trzy liczby. Dziwisz się że to tak działa.
    d=(b*b)-(4*a*c);
    x1=(((-b)+ sqrt(d))/(2*a)); // w tym momencie wyliczasz pierwiastki z liczby być może ujemnej.
          x2=(((-b)- sqrt(d))/(2*a));
    x0=(-b)/(2*a); 
    x2=((-b)/(2*a));
    if(d>0)
            {
                printf ("Pierwszy pierwiastek wynosi:\n",x1); // piszesz "pierwszy pierwiastek wynosi" i przekazujesz nieużywany nigdzie parametr. Hint: "Wynosi %f \n"
            printf ("Drugi pierwiastek wynosi:\n",x2); // to samo
                }
    else
    if (d<0)
    {printf ("Brak pierwiastka\n");}
    else
    if(d=0) // zastanów się dobrze nad tym warunkiem. Hint: = != ==
            {
                printf (" Pierwiastek wynosi:\n",x0); // to samo
                }
    system("PAUSE");
    return 0;
} 
 
0
//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream>
#include <conio.h>
#include <math.h>
//---------------------------------------------------------------------------

using namespace std;

//---------------------------------------------------------------------------
double a,b,c,Delta,x1,x2,x0;


int main()
{
  cout<<"Liczymy rownanie kwadratowe ax^2 + bx + c = 0"<<endl;
  cout<<"Podaj a: \t";
  cin>>a;
  cout<<"Podaj b: \t";
  cin>>b;
  cout<<"Podaj c: \t";
  cin>>c;

  Delta = (b*b) - (4 * a * c);
  x1 = (-b - sqrt(Delta))/(2*a);
  x2 = (-b + sqrt(Delta))/(2*a);
  x0 = (-b)/(2*a);

  if (Delta>0)
  {
	  cout<<"x1= "<<x1<<"\tx2= "<<x2;

	if (Delta = 0)
	{
		cout<<"x0 = "<<x0;
	}

  }
  else
  {
	cout<<"Brak rozwiazan";
  }



  getch();
}

 
0

poprawiony kod, ale dalej dobrze pierwiastków nie oblicza :

#include <stdio.h>
#include <cmath>
#include<stdlib.h>
main ()
{
    float a,b,c,d,x1,x2,x0;
    printf("Wpisz wartosc a\n");
    scanf("%f",&a);
    printf("Wpisz wartosc b\n");
    scanf("%f",&b);
    printf("Wpisz wartosc c\n");
    scanf("%f",&c);
    d=(b*b)-(4*a*c); 
    if(d>0)
    	{
		x1=(-b)+ sqrt(d)/(2*a);
  		x2=(-b)- sqrt(d)/(2*a);	
		printf ("Pierwszy pierwiastek wynosi %f \n");
		scanf("%f",&x1);
    	printf ("Drugi pierwiastek wynosi: %f \n");
    	scanf("%f",&x2);
		}
    else
    if (d<0)
    	{
		printf ("Brak pierwiastka\n");
		}
    else
    if(d==0)
    	{
		x0=(-b)/(2*a);	
		printf (" Pierwiastek wynosi:%f \n");
		scanf("%f",&x0);
		}
    system("PAUSE");
    return 0;
} 


0

printf ("Pierwszy pierwiastek wynosi:\n");
scanf("%f",&x1);

Zastanów się co tu robisz.
Przeczytaj co Ci wcześniej MSM napisał w hintach w komentarzach.

0

w moim poprzednim poście jest już kod zmieniony

1
                printf ("Pierwszy pierwiastek wynosi %f \n");
                scanf("%f",&x1);
            printf ("Drugi pierwiastek wynosi: %f \n");
            scanf("%f",&x2);

Czy tutaj nie ma być wyświetlany tekst?

1

Czemu w tego typu programach nikt choćby w ramach ćwiczenia nie zadaje sobie trudu żeby policzyć też pierwiastki zespolone?

Dexter
Tak jak kolega wyżej napisał, po policzeniu chcesz tylko wypisać pierwiastki (printf), nie ma tam potrzeby niczego wczytywać (scanf), bo niby co jest potrzebne?

0

Czemu w tego typu programach nikt choćby w ramach ćwiczenia nie zadaje sobie trudu żeby policzyć też pierwiastki zespolone?

Ponieważ takie programy są zazwyczaj na pierwszym roku studiów, lub piszą je Ci, którzy jeszcze nie skończyli szkoły średniej. A 95% dzisiejszych licealistów nie ma pojęcia o liczbach zespolonych, nigdy o nich nie słyszało i jest dla nich niepojęte, że ujemna delta wcale nie oznacza końca zabawy. A jak ktoś jest studentem pierwszego roku, to z kolei w większości przypadków miał te liczby zespolone na matmie, ale nie czuje się z nimi na tyle blisko, żeby ich swobodnie używać.

0

ja kombinowałem, ale nie chce mi liczyć pierwiastków! To jak mam zrobić, aby było dobrze?

0

Przeczytaj dowolny kurs C i zrozum do czego służy printf i scanf.
Bo teraz to helloworda nie umiesz napisać, ale helloworda ze zmienną już nie ;-P
Zresztą bgoz dał Ci gotowe rozwiązanie.

0
 
#include <stdio.h>
#include <cmath>
#include<stdlib.h>
main ()
{
    float a,b,c,d,x1,x2,x0;
    printf("Wpisz wartosc a\n");
    scanf("%f",&a);
    printf("Wpisz wartosc b\n");
    scanf("%f",&b);
    printf("Wpisz wartosc c\n");
    scanf("%f",&c);
    d=(b*b)-(4*a*c); 
    x1=((-b)+ sqrt(d))/(2*a);
	x2=((-b)- sqrt(d))/(2*a); 
	x0=(-b)/(2*a);
    if(d>0)
    	{ 
		printf ("Pierwszy pierwiastek wynosi %f \n");
		scanf("%f",&x1);
    	printf ("Drugi pierwiastek wynosi %f:\n");
    	scanf("%f",&x2);
    	
    if (d==0)
    	{
		printf (" Pierwiastek wynosi:%f \n");
		scanf("%f",&x0);
		}
}
    else
    	{	
		printf ("Brak pierwiastka \n");
		}
    system("PAUSE");
    return 0;
} 

1

No i wszystko działa. Podaj mu pierwiastki, to będą policzone. ;-P Albo przeczytaj do cholery dokumentację printf().

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.