Co ma zwracać funkcja licząca równanie kwadratowe?

0

Witam,

Jeśli zrobiłem, że miejsca zerowe oblicza mi z funkcji to co w niej zwracać ? Bo funkcja powinna coś zwracać prawdą ? Jako parametry podaje liczby a,b,c.

0

Nie jest prawdą, że funkcja musi coś zwracać - może nic nie zwracać (wtedy piszesz void). W Twoim przypadku możesz w niej wypisać te miejsca zerowe i wtedy będziesz miał void, zwrócić ich liczbę albo zwrócić wartości tych miejsc zerowych. Sam zdecyduj co Ci najbardziej odpowiada.

1
scanf("%f,&c");

zamiana znacznika <quote> na <code class="c"> - @furious programming

0

Bo wczytujesz tak:

scanf("%f,&c");

zamiast tak:

scanf("%f", &c);
0

A jeśli chciałbym ten program napisać za pomocą wskaźników. To co jest tu nie tak:

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

void rownanie(float *a, float *b, float *c);
int main()
{
    float *a,*b,*c;
    printf("Podaj wartosc a: ");
    scanf("%f",&a);
    printf("Podaj wartosc b: ");
    scanf("%f",&b);
    printf("Podaj wartosc c: ");
    scanf("%f",&c);

    rownanie(a,b,c);

    return 0;
}
void rownanie(float *a, float *b, float *c)
{
    float x0,x1,x2,delta;

    if(a == 0)
    {
        if(b == 0)
        {
            if(c == 0)
            {
                printf("Nieskonczenie wiele rozwiazan");
            }
            else
            {
                printf("Popraw dane\n");
            }
        }
        else
       {
          x0 = -(*c)/ (*b);
          printf("Rownanie to ma jedno miejsce zerowe: %f",x0);
       }
    }
    else
    {
        delta = (*b) * (*b) - 4 * (*a) * (*c);
        printf("delta = %f\n",delta);

        if(delta == 0)
        {
            x0 = -(*b) / 2 * (*a);
            printf("Rownanie ma jedno rozwiazanie x0 = %f",x0);
        }
        if(delta < 0)
        {
            printf("Rownanie nie ma rozwiazan");
        }
        if(delta > 0)
        {
            x1 = -(*b) - sqrt(delta) / 2*(*a);
            x2 = -(*b) - sqrt(delta) / 2*(*a);

            printf("Rownanie ma dwa miejsca zerowe x1 = %f i x2 = %f",x1,x2);
        }
    }
}
0
  1. float *a; - zmienna wskazuje na nie przydzieloną pamięć.
  2. scanf("%f",&a); - niepoprawne użycie wskaźnika, wpisujesz liczbę fłoat jako adres w pamięci - śmieci
    Rozwiązanie tego zadania za pomocą wskaźników mija się z celem.
0

trzeba zmodyfikować początek programu w taki sposób: ?

float aa,bb,cc;
    float *a = &aa,*b = &bb,*c = &cc;
    printf("Podaj wartosc a: ");
    scanf("%f",&aa);
    printf("Podaj wartosc b: ");
    scanf("%f",&bb);
    printf("Podaj wartosc c: ");
    scanf("%f",&cc); 
0

może być, ale wywal ten drugi wiersz.

0
    float aa,bb,cc;
    float *a = &aa,*b = &bb,*c = &cc;
    printf("Podaj wartosc a: ");
    scanf("%f",a);
    printf("Podaj wartosc b: ");
    scanf("%f",b);
    printf("Podaj wartosc c: ");
    scanf("%f",c); 

tak
dalej korzystasz z aa,bb,cc

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