Równanie kwadratowe, dziwny błąd spoj.

Odpowiedz Nowy wątek
2017-01-04 16:51
Mały Kret
0

http://pl.spoj.com/problems/ROWNANIE/

Ma ktoś pomysł co ten błąd może oznaczać?

#include <iostream>
using namespace std;
int main()
{
  float a,b,c;
  int i=1;
  float *delta;
  while(1)
  {
         delta =new float[i];
         cin>>a>>b>>c;
         delta[i]=b*b-4*a*c;
         if(delta[i]==0) cout<<"1"<<endl;
         else if(delta[i]<0) cout<<"0"<<endl;
         else cout<<"2"<<endl;
         i++;
  }
  return 0;
}

Pozostało 580 znaków

2017-01-04 19:04
Anonim
0

Ja bym to zrobił tak :)

int main();
      float a,b,c,D,E,T;

         {

        do  {

          cout << "Kalkulator dla funkcji kwadratowej!" << endl;

          cout << "Podaj wspolczynnik a: ";
          cin >> a;

          cout << "Podaj wspoczynnik b: ";
          cin >> b;

          cout << "Podaj wspoczynnik c: ";
          cin >> c;

          if (a==0)
    {
                cout << "To nie jest funkcja kwadratowa ";
    }

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

           if (D<0)
    {
               cout << D << endl;
               cout << "Delta nie ma pierwiastkow" << endl;
    }

           if (D==0)
    {
               cout << "Delta wynosi: " << D << endl;
               cout << "Delta ma jedno miejsce zerowe i jest nim X1: " << -b/2*a << endl;
    }

            if (D>0)
    {
               cout << "Delta wynosi: " << D << endl;
               cout << endl;
               cout << "Pierwiastek z delty wynosi: "<< sqrt(D) << endl;
               cout << "X1 rowna sie: " << -b+D/2*a << endl;
               cout << "X2 rowna sie: " << b+D/2*a << endl;
    }

               cout << endl;
               cout << endl;
               cout << "Wcisnij dowolny klawisz aby uruchomic program na nowo." << endl;
               cout << endl;

      } while (getch() != 0);

    return 0;
Z całym szacunkiem, Twój kod jest mocno średni i nie polecałbym wrzucać go jako przykład :-P - Patryk27 2017-01-04 19:11

Pozostało 580 znaków

2017-01-04 19:13
Anonim
0

@Patryk27 Dziękuje za opinie :) Jestem mocno początkujący, mógłbyś powiedzieć co byś tym kodzie zmienił?

.

Rzadko spotykana definicja zmiennych lokalnych (nie bezpośrednio wewnątrz funkcji); niepotrzebnie zadeklarowane zmienne E oraz T; zmienna D z jakiegoś powodu nazwana wielką literą (jak stała) zamiast po ludzku det (od determinant) - oprócz tego porównujesz liczby zmiennoprzecinkowe za pomocą ==; po wprowadzeniu a równego zero, radośnie dalej liczysz deltę; ctrl+c i ctrl+v dla komunikatu Delta wynosi:; no i finalnie: brakuje dopisku, że Twój program liczy deltę wyłącznie w dziedzinie liczb rzeczywistych. - Patryk27 2017-01-04 19:34

Pozostało 580 znaków

2017-01-04 22:56
Wesoły Mleczarz
0

Anonimie twój kod już w poczatkowych wierszach wykraczylby sie na spoju. Poczytaj jak na spoju wprowadzac i wyprowadzac dane. Poza tym to zadanie mozna zrobic w kilku linijkach

Pozostało 580 znaków

2017-01-05 10:17
0
#include <iostream>
#include <limits>
#include <cmath>

using namespace std;

int main()
{
    double a,b,c;
    while(cin >> a >> b >>c) {
        double delta = b*b - 4*a*c;
        if (numeric_limits<double>::epsilon() * (2*fabs(b) + 4*fabs(a) + 4*fabs(c)) + 10 * numeric_limits<double>::min() >= delta) {
            cout << '1' << end; 
        } else if (delta < 0) {
            cout << '0' << end; 
        } else {
            cout << '2' << end; 
        }
    }
    return 0;
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22, 2017-01-05 12:51
Zły wzór na deltę, z tego co widzę. - Patryk27 2017-01-05 10:22

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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