05_opakovani_iteratory_ADT
Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.
Abstraktní datové typy
Přednáška 5
Karty
• Úloha:
• Programujeme karetní hru (Prší, Solitaire, Poker…)
• Jako první krok potřebujeme kód pro „obsluhu karet“
1.
Připravit si strukturu pro karty
2.
Karty do struktury uložit
3.
Připravit si funkce pro:
a) vybrání následující karty
b) přidání karty (např. z jiného balíčku)
c) zamíchání
Karty – Pole
1. Připravit si strukturu pro karty
struct TPackArray {
size_t iCount;
short iValues[CARD_MAX_COUNT];
}
2. Karty do struktury uložit
3. Připravit si funkce pro:
a) vybrání následující karty
b) zamíchání
c) přidání karty (např. z jiného balíčku)
Karty – Pole
struct TPackArray {
size_t iCount;
short iValues[CARD_MAX_COUNT];
}
a) vybrání následující karty
returnVal = struktura->iValues[0];
for (int i=0; i< struktura->iCount-1; i++)
struktura->iValues[i] = struktura->iValues[i+1];
b) přidání karty (např. z jiného balíčku):
a) na konec
struktura->iValues[struktura->iCount] = aVal;
struktura->iCount++;
b) na začátek
for (int i=struktura->iCount; i>0; i--)
struktura->iValues[i]= struktura->iValues[i-1];
struktura->iValues[0] = aVal;
struktura->iCount++;
c) zamíchání
Karty – Pole
struct TPackArray {
size_t iCount;
short iValues[CARD_MAX_COUNT];
}
c) Zamíchání
1.
Vytvořit si pomocné pole
2.
Překopírovat část karet z prostředku
3.
Na uvolněné místo nakopírovat karty z konce balíčku
4.
Za tyto karty nakopírovat karty z pomocného pole
5.
Opakujeme N-krát
Karty - Lineární seznam
struct TPackList {
struct TPackListNode *iTop;
struct TPackListNode *iLast;
}
struct TPackListNode {
struct TPackListNode *iNext;
short
iValue;
}
a) vybrání následující karty
returnCard = struktura->iTop;
returnVal
= struktura->iTop->iValue;
struktura->iTop = returnCard->iNext;
Karty - Lineární seznam
struct TPackList {
struct TPackListNode *iTop;
struct TPackListNode *iLast;
}
struct TPackListNode {
struct TPackListNode *iNext;
short
iValue;
}
b) přidání karty (např. z jiného balíčku):
a) na konec
novaKarta = (struct
TPackListNode*)malloc( …
);
novaKarta->iValue = aVal;
novaKarta->iNext = NULL;
struktura->iLast->iNext = novaKarta;
struktura->iLast = novaKarta;