Swap
Implementirati funkciju swap na tri različita načina:
void razmeni_ref(int& x, int& y)- razmena dva cela broja preko referenci.void razmeni_pok(int* x, int* y)— razmena dva cela broja preko pokazivača.void razmeni_pokazivace_ref(int*& p, int*& q)— razmena pokazivača preko reference.void razmeni_pokazivace_pok(int **p, int** q)- razmena pokazivača preko pokazivača na pokazivače.
Ulaz
Sa standardnog ulaza učitavaju se dva cela broja a b.
Izlaz
U prvom redu ispisati vrednosti pormenljivih a i b nakon poziva razmeni_ref(a, b).
U drugom redu ispisati vrednosti promenljivih a i b nakon poziva razmeni_pok(&a, &b).
U trećem redu ispisati vrednosti na koje pokazuju pokazivači p i q promenljivih a i b nakon poziva razmeni_pokazivace_ref(p, q).
U četvrtom redu ispisati vrednosti na koje pokazuju pokazivači p i q promenljivih a i b nakon poziva razmeni_pokazivace_pok(%p, &q).
Primer
Ulaz
5 1
Izlaz
1 5
5 1
1 5
5 1
Postavka
main.cpp
#include <iostream>
namespace matf
{
// TODO (1): implementirati razmeni_ref - razmena dva cela broja preko referenci
void razmeni_ref(int& x, int& y)
{
return undefined;
}
// TODO (2): implementirati razmeni_pok - razmena dva cela broja preko pokazivaca
void razmeni_pok(int* x, int* y)
{
return undefined;
}
// TODO (3): implementirati razmeni_pokazivace_ref - razmenjuje pokazivace
// p i q (ne objekte na koje pokazuju), preko referenci na pokazivace
void razmeni_pokazivace_ref(int*& p, int*& q)
{
return undefined;
}
// TODO (4): implementirati razmeni_pokazivace_pok - razmenjuje pokazivace
// na koje pokazuju p i q, preko pokazivaca na pokazivace
void razmeni_pokazivace_pok(int** p, int** q)
{
return undefined;
}
} // namespace matf
int main()
{
int a, b;
std::cin >> a >> b;
matf::razmeni_ref(a, b);
std::cout << a << ' ' << b << std::endl;
matf::razmeni_pok(&a, &b);
std::cout << a << ' ' << b << std::endl;
int* p = &a;
int* q = &b;
matf::razmeni_pokazivace_ref(p, q);
std::cout << *p << ' ' << *q << std::endl;
matf::razmeni_pokazivace_pok(&p, &q);
std::cout << *p << ' ' << *q << std::endl;
return 0;
}
Rešenje
main.cpp
#include <iostream>
namespace matf
{
// O(1); razmenjuje vrednosti x i y preko referenci
void razmeni_ref(int& x, int& y)
{
int tmp = x;
x = y;
y = tmp;
}
// O(1); razmenjuje vrednosti na koje pokazuju x i y
void razmeni_pok(int* x, int* y)
{
int tmp = *x;
*x = *y;
*y = tmp;
}
// O(1); razmenjuje POKAZIVACE p i q (ne objekte na koje pokazuju), preko
// referenci na pokazivace.
void razmeni_pokazivace_ref(int*& p, int*& q)
{
int* tmp = p;
p = q;
q = tmp;
}
// O(1); razmenjuje POKAZIVACE na koje pokazuju p i q (ne objekte na koje
// ti pokazivaci dalje pokazuju), preko pokazivaca na pokazivace.
void razmeni_pokazivace_pok(int** p, int** q)
{
int* tmp = *p;
*p = *q;
*q = tmp;
}
} // namespace matf
int main()
{
int a, b;
std::cin >> a >> b;
matf::razmeni_ref(a, b);
std::cout << a << ' ' << b << std::endl;
matf::razmeni_pok(&a, &b);
std::cout << a << ' ' << b << std::endl;
int* p = &a;
int* q = &b;
matf::razmeni_pokazivace_ref(p, q);
std::cout << *p << ' ' << *q << std::endl;
matf::razmeni_pokazivace_pok(&p, &q);
std::cout << *p << ' ' << *q << std::endl;
return 0;
}