Alokace a výměna obsahu polí
Zadání
Napište funkci, která vymění obsah (jednotlivé prvky) dvou polí, která jsou funkci předána jako parametry. Funkci realizujte tak, aby byla co nejrychlejší. Pokud je to možné, realizujte ji tak, aby byla (univerzálně) použitelná pro výměnu prvků polí libovolného typu.
stáhněte si (viz. sekce literatura) zdrojové moduly checker (cpp a h)
Vytvořte projekt, ve kterém bude funkce main a modul check.cpp (do main vložte check.h). Pročtením úvodního komentáře v check.h zjistěte jak je možné check použít.
Ve funkci main si vytvořte proměnné pro uložení dvou polí
typu int. Pole vytvořte jako dynamické (alokujte prostor) pro 10
prvků pro každé pole. První pole naplňte hodnotami 0 až 9, druhé
pole hodnotami 20 až 29.
Program přeložte a spusťte –
pokud máte dobře propojené moduly na check, měla by se vám objevit
zpráva o využití paměti. Pokud vás checker upozorní na chybu,
opravte ji (odalokace).
Vytvořte funkci, která vytiskne místo, kde pole leží a dále obsahy polí – nejdříve prvního, potom druhého a tuto funkci zavolejte.
Nejprve v main a potom ve funkci vyměňte obsahy polí. Pro
„výměnu“ polí použijte mechanizmus z minulého cvičení.
Nebudete vyměňovat prvky v polích, ale pouze ukazatele na tato pole
(minule se vyměňovaly hodnoty typu int (či double), nyní bude postup
stejný, ale typem bude ukazatel).
Tímto postupem dokážeme vyměnit
libovolně dlouhé pole pomocí výměny dvou ukazatelů, což je podstatně
rychlejší.
Nakreslete si paměťovou mapu.
Všimněte si, že při
výměně prvků polí pomocí ukazatelů není nutné pracovat s vlastními
prvky pole. Pracuje se vlastně pouze s „adresovou částí“
ukazatele, typ není využit.
Nyní v tomtéž projektu zopakujte body 2 a 3 ale místo typu int použijte typ double (kód bude tedy dvakrát – pro vytvoření a tisk pole int a double).
Zavolejte funkci pro výměnu polí pro vytvořené pole typu
double. Funkce bude volána pro dva různé typy – int a double.
Bude fungovat? Proč? V čem by mohl být problém?
Jaký typ by byl
nejlepší pro parametry funkce a proč? (Funkce je volána s více
(dvěma) typy, bylo by dobré použít nějaký „univerzální“
typ. Vyberte z char, int, double, float, void).
Motivační obrázek pro řešenou úlohu:
V místě mezi P2 a P_Y (a P1 a P_X) je hranice mezi
volající a volanou funkcí
Vpravo jsou naznačená pole, uprostřed
jsou proměnné ve kterých jsou adresy polí a naznačené kam ukazují
před a po výměně.
Vlevo jsou proměnné ve funkci, mezi levým a
středním sloupcem jsou naznačeny „změny“ proměnných mezi
funkcí volající a volanou.
Poslední změna 2014-04-08