[ nikoladjile @ 14.11.2007. 20:25 ] @
Imam velikih problema oko resavanja jednog zadatka.Ako moze neko da ga resi bio bih veoma zahvalan

Napraviti program koji koristi funkciju za izracunavanje kvadratne jednacine F(x)=ax^2+bx+c (a,b,c,x)
[ X Files @ 15.11.2007. 06:25 ] @
Na kakve si probleme naišao? Pokaži kod koji si uradio.

[ nikoladjile @ 15.11.2007. 09:17 ] @
Ja umem da ga uradim ali ne umem preko funkcije
[ X Files @ 15.11.2007. 10:17 ] @
Prva dva pitanje koje sebi treba da postavis su:
1) šta treba da predaš funkciji kao argumente
2) šta funkcija treba da vrati

1) a, b, c
2) resenja kvadratne jednacine u najprostijem obliku analize su x1 i x2, mada tu postoje brojni detalji koji takodje mogu biti smatrani kao pozeljna povratna vrednost funkcije. Uzecemo da funkcija trebada vrati samo x1, x2 (a ti po zelji prosiruj sistem).

Pretpostavljam da ti je problem sto povratna vrednost nije prost tip podataka, vec ima 'vise' stvari koje treba upakovati u jednu povratnu vrednost. Tada tipicno pravis strukturu, koja moze da 'upakuje' vise prostih tipova:
Code:

struct rezultat_kvadratne_jednacine
{
   float x1, x2;
   // ... ovde se mogu ugraditi i druge informacije i time prosiriti sistem
};


Zatim, treba ti funkcija. Jedna od ideja je da prosledis kao argumente: a, b, c i adresu objekata (one strukture od malopre) gde ce rezultati biti smesteni:
Code:

void funkcija_za_racunanje_kvardatne_jednacine1( float a, float b, float c, rezultat_kvadratne_jednacine *x )
{
   // ovde treba tvoj kod koji resava x1, x2
   // ... i dodeljuje vrednosti strukturi:

   x->x1 = 2; // <--- ja sam ovde kao sracunao resenja 2 i 4 i dodelio ih objektu za smestanje rezultata
   x->x2 = 4;
}


U glavnoj funkciji:
Code:
 
int main()
{
    // <--- ovde napises kod za unos a, b, c

    // zatim kreiras objekat gde ce biti smesteni rezultati: 
    rezultat_kvadratne_jednacine rezultat;    
    
    // poziv funkcije
    funkcija_za_racunanje_kvardatne_jednacine1( a, b, c, &rezultat );
    
    cout << rezultat.x1 << "\n";
    cout << rezultat.x2 << "\n";
        
    system("PAUSE");
    return EXIT_SUCCESS;
}
[ nikoladjile @ 16.11.2007. 10:54 ] @
Ne mogu nikako preko funkcije da ga uradim.Ja samo znam na ovaj nacinAl bi mogao ti da mi uradis preko funkcije
Code:

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

main () {
  double a, b, c, /* Koeficijenti jednacine.                             */
         d,       /* Diskriminanta jednacine.                            */
         x1, x2,  /* Realni delovi korena.                               */
         y1, y2;  /* Imaginarni delovi korena.                           */
  typedef enum { REALNI, DVOSTRUKI, KOMPLEKSNI, LINEARNA, POGRESNA } Vrsta;
  Vrsta  vrsta;   /* Vrsta resenja jednacine.                            */

  printf ("Koeficijenti kvadratne jednacine? ");
  scanf ("%lf%lf%lf", &a, &b, &c);

  if (a) {
    d = b * b - 4 * a * c;
    if (d > 0) {
      vrsta = REALNI;
      x1 = (- b + sqrt (d)) / (2 * a);
      x2 = (- b - sqrt (d)) / (2 * a);
    } else if (d == 0) {
      vrsta = DVOSTRUKI;
      x1 = - b / (2 * a);
    } else {
      vrsta = KOMPLEKSNI;
      x1 = - b / (2 * a);            x2 = x1;
      y1 = sqrt (- d) / (2 * a);     y2 = - y1;
    }
  } else
    if (b) {
      vrsta = LINEARNA;
      x1 = - c / b;
    } else
      vrsta = POGRESNA;

  switch (vrsta) {
    case REALNI:
      printf ("Realni koreni su %.2f i %.2f\n", x1, x2);
      break;
    case DVOSTRUKI:
      printf ("Dvostruki realni koren je %.2f\n", x1);
      break;
    case KOMPLEKSNI:
      printf ("Kompleksni koreni su (%.2f,%.2f) i (%.2f,%.2f)\n",
              x1, y1, x2, y2);
      break;
    case LINEARNA:
      printf ("Resenje linearne jednacine je %.2f\n", x1);
      break;
    case POGRESNA:
      printf ("Podaci nemaju smisla!\n");
      break;
  }
}


[Ovu poruku je menjao X Files dana 16.11.2007. u 12:14 GMT+1]
[ X Files @ 16.11.2007. 11:32 ] @
Izvini, ali da li vi radite C ili C++ jezik?

Onda nekako ovako /netestirano/
Code:

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

// OVO JE STRUKTURA ZA SMESTANJE REZULTATA
struct rezultat_kvadratne_jednacine
{
   double x1, x2, y1, y2;
   enum VrstaKJ
   {
       REALNI,
       DVOSTRUKI,
       KOMPLEKSNI,
       LINEARNA,
       POGRESNA
   } vrsta; 
};

// OVO JE FUNKCIJA ZA RACUNANJE KJ I SMESTANJE REZULTATA U STRUKTURU ZA REZULTAT
void funkcija_za_racunanje_kvardatne_jednacine( double a, double b, double c, rezultat_kvadratne_jednacine *x )
{
   double d; /* Diskriminanta jednacine.                            */
   
   if ( a )
   {
      d = b * b - 4 * a * c;
      if ( d > 0 )
      {
         x->vrsta = rezultat_kvadratne_jednacine::REALNI;
         x->x1 = (- b + sqrt (d)) / (2 * a);
         x->x2 = (- b - sqrt (d)) / (2 * a);
       }
       else if ( d == 0 )
       {
          x->vrsta = rezultat_kvadratne_jednacine::DVOSTRUKI;
          x->x1 = - b / (2 * a);
       }
       else
       {
          x->vrsta = rezultat_kvadratne_jednacine::KOMPLEKSNI;
          x->x1 = - b / (2 * a);
          x->x2 = x->x1;
          x->y1 = sqrt (- d) / (2 * a);
          x->y2 = - x->y1;
       }
   } else
   
   if ( b )
   {
      x->vrsta = rezultat_kvadratne_jednacine::LINEARNA;
      x->x1 = - c / b;
   }
   else
   {
      x->vrsta = rezultat_kvadratne_jednacine::POGRESNA;
   }
}

int main ()
{
   double a ,b, c;
   printf ("Koeficijenti kvadratne jednacine? ");
   scanf ("%lf%lf%lf", &a, &b, &c);

   // OVDE ZELIMO REZULTATE
   rezultat_kvadratne_jednacine rezultat;    
    
   // OVO JE POZIV FUNKCIJE SA PROSLEDJEMON STRUKTUROM GDE TREBA DA BUDU REZULTATI
   funkcija_za_racunanje_kvardatne_jednacine( a, b, c, &rezultat );
   
   // OVO JE ANALIZA REZULTATAT IZ STRUKTURE I IZVESTAVANJE
   switch ( rezultat.vrsta )
   {
      case rezultat_kvadratne_jednacine::REALNI:
         printf ("Realni koreni su %.2f i %.2f\n", rezultat.x1, rezultat.x2);
         break;
      case rezultat_kvadratne_jednacine::DVOSTRUKI:
         printf ("Dvostruki realni koren je %.2f\n", rezultat.x1);
         break;
      case rezultat_kvadratne_jednacine::KOMPLEKSNI:
         printf ("Kompleksni koreni su (%.2f,%.2f) i (%.2f,%.2f)\n", rezultat.x1, rezultat.y1, rezultat.x2, rezultat.y2);
         break;
      case rezultat_kvadratne_jednacine::LINEARNA:
         printf ("Resenje linearne jednacine je %.2f\n", rezultat.x1);
         break;
      case rezultat_kvadratne_jednacine::POGRESNA:
         printf ("Podaci nemaju smisla!\n");
         break;
   }
   
   system("PAUSE");
   return EXIT_SUCCESS;
}

[ nikoladjile @ 16.11.2007. 20:36 ] @
E hvala ti puno.CAR si!!!
Nismo se bili razumeli ja radim u jeziku C(moja greska)
HVALA PUNO