Wyłączający się program obliczający deltę

0

Witam!
Nie programowałem już od dłuższego czasu i mam do was pewną prośbę , ale najpierw kod:

#include <stdio.h>
#include <math.h>

int main()
{
  double a,b,c,d,pd,x1,x2;


  printf("Podaj a: ");
  scanf("%lf",&a);

  printf("Podaj b: ");
  scanf("%lf",&b);

  printf("Podaj c: ");
  scanf("%lf",&c);

  d = (b*b) - 4*a*c ;
  pd = sqrt(d);

  printf("Delta wynosi: %.2lf \n",d);  
  printf("Pierwiastek z delty wynosi: %.2lf \n",pd);

  x1= (-1)*b - pd /2*a;
  x2= (-1)*b + pd/2*a;

  printf("x1 wynosi : %.2lf , a x2 : %.2lf",x1,x2);

  system("pause");

  return 0;
}

Jak widać, to prosty programik obliczający deltę , tyle , że mam dziwny problem - napisałem go w Code blocksie i w samym programie niby się kompiluje i jest okej, ale powstały przy zapisie plik .exe od razu się wyłącza po podaniu argumentów - nie rozumiem do końca dlaczego, skoro umieściłem na końcu komendę system("pause"). Gdzie może leżeć problem? Dziwna sprawa, ponieważ po uruchomieniu ponownie komputera znowu niby .exe się kompiluje...Czy w samym kodzie jest jakiś błąd , który powoduje takie wadliwe działanie ?

Pozdrawiam!

dodanie znacznika <code class="c"> - fp

0

Kod wygląda ok. A pod jakim systemem to uruchamiasz?

1
  x1= (-b-pd)/(2*a);
  1. Nie sprawdzasz czy możesz wyliczyć pierwiastek.
  2. Nie sprawdzasz czy nie dzielisz przez zero.
0

Witam!
Na wstępie dziękuje za szybkie odpowiedzi. Używam Windowsa 7 , ale wydaje mi się , że to nie wina systemu. A więc poprawiłem program, tylko zastanawia mnie jedna rzecz ( być może wyjdę na głupka), ale uwaga co do dzielenia przez zero jest dobra i zła - oczywiście nie dzielimy przez zero i to nie ulega najmniejszym wątpliwościom , ale właśnie , gdy podzielimy przez zero, wtedy miejsce zerowe również będzie równe zeru, co jest ważne, jeżeli rozwiązujemy tę funkcję. Jednak chyba rozumiem, czemu mi to doradzono - sprawdziłem(zamiast zera wypisuje jakieś -1. z literami..). Poprawiłem kod, tylko jedna rzecz mnie zastanawia - w kodzie dodałem ifa , który przy a=0 wypisuje "brak miejsc zerowych" , czy powinienem to zmienić , by wypisywał "Miejsce zerowe wynosi x=0" ? Oto kod:

#include <stdio.h>
#include <math.h>

int main()
{
  double a,b,c,d,pd,x1,x2;


  printf("Podaj a: ");
  scanf("%lf",&a);

  printf("Podaj b: ");
  scanf("%lf",&b);

  printf("Podaj c: ");
  scanf("%lf",&c);

  d = (b*b) - 4*a*c ;
  pd = sqrt(d);
  x1= (-b-pd)/(2*a);
  x2= (-b+pd)/(2*a);
  printf("Delta wynosi: %.2lf \n",d);
  if(d<0 || a==0){
    printf("Brak miejsc zerowych \n");
    system("pause");
    return 0;
    }

  printf("Pierwiastek z delty wynosi: %.2lf \n",pd);

  if(d==0){
    printf("x wynosi: %.2lf \n",x1);
    system("pause");
  }

  if(d>0){
  printf("x1 wynosi : %.2lf , a x2 : %.2lf \n",x1,x2);
  system("pause");
  }

  return 0;
}
 
1

Zarówny wypisanie 'brak miejsc zerowych' jak i 'miejsce zerowe x = 0' nie będzie poprawne (ten drugi przypadek nie zawsze). Przecież w przypadku a = 0 masz równanie liniowe, które może mieć miejsce zerowe i nie koniecznie to miejsce jest równe zero.

1
zajkowsky napisał(a):
...
  if(d<0 || a==0){
    printf("Brak miejsc zerowych \n");
...

Nie zupełnie, jeżeli a==0 to przy nie zerowym b jest miejsce zerowe x1=-c/b

0

Więc od zacytowanego przez Ciebie ifa usunąć warunek a==o , dorobić nowego mniej więcej w ten sposób :

 
x1=c/b;
if(a==0 || b!=0)
 printf("x wynosi %.2lf",x1);
0

Okej ,dziękuje za dyskusje i pomoc ! Pozdrawiam i temat można zamknąć ! :)

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