[C++] Wartość średnia ze wskaźnikami i referencjami
-
- 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
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.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
-
- 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
Dwie funkcje liczące średnią na dwa sposoby - pobierając wartości oraz zmienną do zapisania średniej przez wskaźniki oraz przez referencje:
O to chodziło czy potrzebujesz też zarządzania pamięcią (new/delete)?
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';
}
-
- 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
Jesli nie byłoby problemem pokazania sposobu działania wlasnie z zarzadzaniem pamiecia to równiez poprosze
Ale i tak wielkie dzieki!
Ale i tak wielkie dzieki!
-
- 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
Ok, tutaj taki "szkolny" sposób, z użyciem wspomnianych wyżej new/delete:
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>
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;
}
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';
}