Wątek przeniesiony 2014-11-17 10:35 z C/C++ przez ŁF.

Wykorzystanie funkcji

0

Czy obliczanie l w funkcji ma sens czy wszystko lepiej zapisać w main? Mógłby ktoś powiedzieć gdzie jest błąd w funkcji tworzaca?

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

int tworzaca(float n)
{
        int r=0;
        int h1=0;
        float l=0;

        l=sqrt(h1*h1+r*r);

        return l;
}

int main()
{
        int r=0;
        int h1=0;
        int wynik=0;
        float l=0;


        printf("Podaj promień\n");
        scanf("%d", &r);
        printf("Podaj wysokość\n");
        scanf("%d", &h1);

        wynik=3.14*r*(r+l);

        printf("Pole powierzchni stożka wynosi: %d\n", wynik);
        printf("%f\n",l);
        return 0;
}

 
2
  1. Funkcje zwiększają czytelność
  2. Funkcje nie pobierają zmiennych telepatycznie, trzeba przekazać poprzez parametry
  3. Taka funkcja już istnieje i nazywa się hypot
0

Dzięki a można ją gdzieś zobaczyć?

0

a w c?

0

link przeczytałeś? Od C99

0

double hypot (double x , double y);

Tyle a co z resztą?

0

Jaką resztą?

0

Chodzi mi o jej wnętrze jak jest zbudowana

0

Już lepiej?

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

float tworzaca(float h1, float r)
{
        float l;

        l=sqrt(h1*h1+r*r);
}

int main()
{
        int r=0;
        int h1=0;
        float wynik=0;
        float l=0;


        printf("Podaj promień\n");
        scanf("%d", &r);
        printf("Podaj wysokość\n");
        scanf("%d", &h1);

        wynik=3.14*r*(r+l);

        printf("Pole powierzchni stożka wynosi: %f\n", wynik);
        printf("%f\n",tworzaca(h1, r));
        return 0;
}
                     
0

Lepiej ale nadal źle.

  1. funkcja musi zwrócić wartość poprzez return;
  2. nie potrzebujesz tymczasowej zmiennej return może zwrócić wynik wyrażenia.
  3. nie musisz tworzyć funkcji która już istnieje, ten hypot nie trzeba pisać on już jest, tak jak sqrt
0

Wielkie dzięki, poprawiłem wszystko i już działa ale chciałem się dowiedzieć czy zapis jest poprawny, chodzi mi w szczególności o :

 wynik=pi*r*(r+tworzaca(h1, r));
#include<stdio.h>
#include<math.h>
#define pi 3.14

float tworzaca(float h1, float r)
{
        float l;

        l=sqrt(h1*h1+r*r);

        return l;
}

int main()
{
        int r=0;
        int h1=0;
        float wynik=0;
        float l=0;


        printf("Podaj promień\n");
        scanf("%d", &r);
        printf("Podaj wysokość\n");
        scanf("%d", &h1);

        wynik=pi*r*(r+tworzaca(h1, r));

        printf("Pole powierzchni stożka wynosi: %f\n", wynik);
        printf("%f\n",tworzaca(h1, r));
        return 0;
}
 
1

I do kogo pisałem :/
Masz trzy "poprawne" warianty:
1.

float tworzaca(float h1, float r)
  {
   return sqrt(h1*h1+r*r);
  }
float tworzaca(float h1, float r)
  {
   return hypot(h1,r);
  }
#define tworzaca(a,b) hypot(a,b)

Zaś jedynym naprawdę poprawnym jest użycie funkcji z biblioteki bezpośrednio.
Polskie (dowolne narodowe) nazwy w programie to też wielkie zło.

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