[C++] Wartość średnia ze wskaźnikami i referencjami

wupetka
Użytkownik
Użytkownik
Posty: 60
Rejestracja: 17 paź 2014, o 12:51
Płeć: Kobieta
Lokalizacja: POLSKA
Podziękował: 13 razy

[C++] Wartość średnia ze wskaźnikami i referencjami

Post autor: wupetka »

Czy ktoś mógłby pomóc mi w napisaniu dwóch programów obliczających wartośc średnią z dwóch wpisanych przez użytkownika liczb. Programy powinny byc napisane na dwa nastepujące sposoby: 1)odnosząc się do adresu (używając wskaźników) 2) przy pomocy referencji?
Ostatnio zmieniony 13 cze 2015, o 17:56 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
lukequaint
Użytkownik
Użytkownik
Posty: 219
Rejestracja: 5 maja 2010, o 18:27
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 75 razy

[C++] Wartość średnia ze wskaźnikami i referencjami

Post autor: lukequaint »

Dwie funkcje liczące średnią na dwa sposoby - pobierając wartości oraz zmienną do zapisania średniej przez wskaźniki oraz przez referencje:

Kod: Zaznacz cały

#include <iostream>


void srednia_wskazniki(double *a, double *b, double *srednia)
{
    *srednia = (*a + *b) / 2.0; 
}

void srednia_referencje(double &a, double &b, double &srednia)
{
    srednia = (a + b) / 2.0;
}

int main()
{
    double a = 0;
    double b = 0;
    double srednia_wsk = 0;
    double srednia_ref = 0;
    std::cout << "podaj dwie liczby oddzielone spacja: ";
    std::cin >> a >> b;
    srednia_wskazniki(&a, &b, &srednia_wsk);
    srednia_referencje(a, b, srednia_ref);
    std::cout << "srednia_wsk: " << srednia_wsk << '\n';
    std::cout << "srednia_ref: " << srednia_ref << '\n';
}
O to chodziło czy potrzebujesz też zarządzania pamięcią (new/delete)?
wupetka
Użytkownik
Użytkownik
Posty: 60
Rejestracja: 17 paź 2014, o 12:51
Płeć: Kobieta
Lokalizacja: POLSKA
Podziękował: 13 razy

[C++] Wartość średnia ze wskaźnikami i referencjami

Post autor: wupetka »

Jesli nie byłoby problemem pokazania sposobu działania wlasnie z zarzadzaniem pamiecia to równiez poprosze
Ale i tak wielkie dzieki!
lukequaint
Użytkownik
Użytkownik
Posty: 219
Rejestracja: 5 maja 2010, o 18:27
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 75 razy

[C++] Wartość średnia ze wskaźnikami i referencjami

Post autor: lukequaint »

Ok, tutaj taki "szkolny" sposób, z użyciem wspomnianych wyżej new/delete:

Kod: Zaznacz cały

#include <iostream>

void srednia_wskazniki(double *a, double *b, double *srednia)
{
    *srednia = (*a + *b) / 2.0; 
}

int main()
{
    double *a = new double;
    double *b = new double;
    double *srednia_wsk = new double;
    std::cout << "podaj dwie liczby oddzielone spacja: ";
    std::cin >> *a >> *b;
    srednia_wskazniki(a, b, srednia_wsk);
    std::cout << "srednia_wsk: " << *srednia_wsk << '\n';
    delete a;
    delete b;
    delete srednia_wsk;
}
A niżej prawidłowy sposób, z użyciem tzw. "inteligentnych wskaźników" - same zajmują się czyszczeniem zasobów - z C++11/14 (przy czym tworzenie zmiennych typów podstawowych na stercie - tj. przez new/make_unique - to mocna przesada, są na tyle małe, że ich przekazywanie do funkcji nie jest praktycznie związane z żadnym narzutem w stosunku do wskaźników):

Kod: Zaznacz cały

#include <iostream>
#include <memory>

void srednia_wskazniki(std::unique_ptr<double>& a,
                       std::unique_ptr<double>& b,
                       std::unique_ptr<double>& srednia)
{
    *srednia = (*a + *b) / 2.0; 
}

int main()
{
    std::unique_ptr<double> a{std::make_unique<double>()};
    std::unique_ptr<double> b{std::make_unique<double>()};
    std::unique_ptr<double> srednia_wsk{std::make_unique<double>()};
    std::cout << "podaj dwie liczby oddzielone spacja: ";
    std::cin >> *a >> *b;
    srednia_wskazniki(a, b, srednia_wsk);
    std::cout << "srednia_wsk: " << *srednia_wsk << '\n';
}

ODPOWIEDZ