Definiowanie funkcji int c++ Hej! Chciałam napisać program obliczający objętości różnych figur, a żeby ułatwić sobie pracę stworzyć funkcje, które będą mi obliczały pola podstawy w zależności od wybranej figury.
I tak nie do końca rozumiejąc istotę definiowania funkcji int zaczęłam pisać funkcje obliczającą pole trójkąta równobocznego. Wyszło mi coś takiego:
int trojkatRb (int s, PtRb) { cout << "Podaj dlugosc boku trojkata: "; cin >> s;
PtRb = s*s*s*sqrt(3)/4;
return PtRb; };
Wyskakują mi błędy: 'PtRb' was not declared in this scope expected initializer before 'int'
I dodatkowo ostrzeżenie: control reaches end of non-void function [-Wreturn-type]
Teraz jak myślę, być może błędy wynikają z tego, że w wyniku jest pierwiastek... Ale sama nie wiem, na pewno nie tylko.
Z góry dziękuję za wszelką pomoc ;)
Roman300
Zauważ, że zmienna PtRb nie istnieje. ('PtRb' was not declared in this scope)
Dlaczego? W nagłówku funkcji jest błąd. int trojkatRb (int s, PtRb) Pierwsza zmienna jest deklarowana prawidłowo, druga - błędnie, bez określenia typu. Czyli powinno być: int trojkatRb (int s, int PtRb)
Ale: Ten zapis wczytuje dane przekazane funkcji, a z twojego kodu wynika, że żadne dane nie są przekazywane do funkcji.
int funkcja (int a) { return a*a; }
Funkcja wyżej dostaje zmienną a na start. By ją wywołać trzeba podać parametr a.
funkcja(5); //Zwróci 25
Natomiast twoja funkcja prosi o zmienne podczas jej działania, więc jej wywołanie wygląda:
trojkatRb();
Dlatego zmienne nie powinny być deklarowane w nagłówku fukcji, tylko w jej ciele, jak normalne zmienne.
int trojkatRb () { int s, PtRb; //Tutaj ten zapis jest ok, ale nie w nagłówku! cout << "Podaj dlugosc boku trojkata: "; cin >> s;
PtRb = s*s*s*sqrt(3)/4;
return PtRb; };
I na koniec: Funkcja będzie zwracała zaokrąglone wartości, a sqrt(3) może się nawet nie skompilować.
Dlaczego? Typ int przechowuje tylko liczby całkowite. Funkcja sqrt(3) wymaga liczby typu float/double (zmiennoprzecinkowe) do prawidłowego działania. Poprawnie wywołana funkcja sqrt:
sqrt(3.0);
Aby twoja cała fukcja zwracała dokładny wynik, należy zmienić jej typ, z int na np. float, i zmienić zmienną PtRb na ten sam typ.
Czyli:
float trojkatRb () { float s, PtRb; //Tutaj ten zapis jest ok, ale nie w nagłówku! cout << "Podaj dlugosc boku trojkata: "; cin >> s;
Dlaczego?
W nagłówku funkcji jest błąd.
int trojkatRb (int s, PtRb)
Pierwsza zmienna jest deklarowana prawidłowo, druga - błędnie, bez określenia typu. Czyli powinno być:
int trojkatRb (int s, int PtRb)
Ale:
Ten zapis wczytuje dane przekazane funkcji, a z twojego kodu wynika, że żadne dane nie są przekazywane do funkcji.
int funkcja (int a)
{
return a*a;
}
Funkcja wyżej dostaje zmienną a na start. By ją wywołać trzeba podać parametr a.
funkcja(5); //Zwróci 25
Natomiast twoja funkcja prosi o zmienne podczas jej działania, więc jej wywołanie wygląda:
trojkatRb();
Dlatego zmienne nie powinny być deklarowane w nagłówku fukcji, tylko w jej ciele, jak normalne zmienne.
int trojkatRb ()
{
int s, PtRb; //Tutaj ten zapis jest ok, ale nie w nagłówku!
cout << "Podaj dlugosc boku trojkata: ";
cin >> s;
PtRb = s*s*s*sqrt(3)/4;
return PtRb;
};
I na koniec:
Funkcja będzie zwracała zaokrąglone wartości, a sqrt(3) może się nawet nie skompilować.
Dlaczego?
Typ int przechowuje tylko liczby całkowite. Funkcja sqrt(3) wymaga liczby typu float/double (zmiennoprzecinkowe) do prawidłowego działania.
Poprawnie wywołana funkcja sqrt:
sqrt(3.0);
Aby twoja cała fukcja zwracała dokładny wynik, należy zmienić jej typ, z int na np. float, i zmienić zmienną PtRb na ten sam typ.
Czyli:
float trojkatRb ()
{
float s, PtRb; //Tutaj ten zapis jest ok, ale nie w nagłówku!
cout << "Podaj dlugosc boku trojkata: ";
cin >> s;
PtRb = s*s*s*sqrt(3.0)/4;
return PtRb;
};