Zmienna referencyjna w kodzie + pytanie o wskaźnik.

0

Cześć

Mam problem w jednym z zadań które mam wykonać. Muszę napisać funkcję PoleKola, przyjmującą jako argumenty zmienną typudouble(promień koła) oraz zmienną wskaźnikową(pole koła). FunkcjaPoleKola ma obliczać pole koła o podawanym promieniu. Do funkcji PoleKolamam dodać kolejny argument - zmienną referencyjną(obwód koła) i zmodyfikować funkcję tak, by wyliczała też obwód koła.

Udało mi się napisać coś takiego:

#include <iostream>
using namespace std;

void PoleKola(double r, double *pole_Kola, double obwod_kola);

int main() {

double r;

cout << "Podaj promien kola: ";
cin >> r;

PoleKola(r, 0, 0);

return 0;
}

void PoleKola(double r, double *pole_Kola, double obwod_kola) {

double pole,obwod;

pole_Kola=&pole;

pole = r * r * 3.14;

obwod = 2 * 3.14 * pole;

cout << "Pole = " << *pole_Kola<<endl;
cout << "Obwod = " << obwod;

}

Na internecie wyczytałem, że zmienną referencyjną tworzy się w taki sposób typ & nazwaZmiennejTypuReferencyjnego = nazwaZmiennej; jednak nie mam pojęcia jakby należało zmodyfikować kod, by uzyskać coś takiego. Dodatkowo w poleceniu jest treść o wskaźniku, ale również nie jestem pewien poprawności swojego wykonania.

Pozdrawiam

2

Trochę namieszane jest w tej funkcji. Np wystarczy zrobić

*pole_Kola = r * r * 3.14;

Tu wszystko w jednym przykładzie https://pl.wikibooks.org/wiki/C%2B%2B/Referencje#Przekazywanie_argument%C3%B3w_przez_referencj%C4%99

0

Dziękuję za pomocne odpowiedzi. Udało mi się napisać coś takiego i wygląda na to, że program działa poprawnie. Mógłby ktoś jeszcze rzucić okiem na kod, czy aby na pewno wszystko jest napisane w poprawny sposób?

#include <iostream>
using namespace std;

void PoleKola(double r, double *pole_Kola, double & obwod_kola)
{

*pole_Kola = r * r * 3.14;
obwod_kola = 2 * r * 3.14;

}

int main()
{
    double r, pole, obwod_kola;
    double *pole_Kola;

    pole_Kola = &pole;

    cout << "Podaj promien kola: ";
    cin >> r;

    PoleKola(r, pole_Kola, obwod_kola);
    cout << "Pole = " << *pole_Kola << endl;
    cout << "Obwod = " << obwod_kola;

    return 0;
}

1

Jest ok, tylko main() nie potrzebujesz dodatkowego wskaźnika pole_Kola - wystarczy, że do funkcji przekażesz &pole tak jak w linkach wyżej.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.