PRM, Laboratorium nr 6, semestr letni 2014/2015


Tematyka: Dekompozycja prostych problemów, prawidłowe wyodrębnienie i użycie funkcji.

Zadanie 1. Proste algorytmy sortowania

  1. Utworzyć nowy projekt l6z1 i do głównego pliku projektu skopiować zawartość pliku źródłowego lab6.c
  2. Ile razy wykonana zostanie funkcja wykonać każdy z algorytmów sortowania dla 4 elementowego ciągu odwróconego (np. 4,3,2,1) i już posortowanego (np. 1, 2, 3, 4)?
  3. Jaka wartość znajdzie się na końcu tablicy tablica po pierwszej iteracji pętli while z linii 17-34? Czy ta obserwacja może pozwolić na przyspieszenie algorytmu?
  4. Dlaczego w linii 50 najpierw sprawdzany jest warunek na zmienną j, a następnie dopiero jest wywoływana funkcja porownaj?
  5. Jaka prosta modyfikacja pozwoli zmienić porządek sortowanie obydwu algorytmów z rosnącego na malejący?

Zadanie 2. Sortowanie kart

  1. Utworzyć nowy projekt l6z2 i do głównego pliku projektu skopiować zawartość pliku źródłowego z pierwszego zadania.
  2. Zmodyfikować program, tak aby umożliwiał sortowanie pięciu kart z tablicy
              
            char* karty[] = {"R10" /*kaRo 10*/, "KD" /* Kier dama*/ , "T9"/*Trefl 9*/, 
                             "PW" /*Pik walet*/, "K8"/* Kier 8*/};
                
          
    Każda karta jest reprezentowana przez kolor (pierwszy znak): oraz symbol (znaki od 2 do końca):

Porządek sortowania: karty w pierwszej kolejności powinny być posortowane wg kolorów w następującym porządku:

        P, T, R, K
        
W ramach jednego koloru porządek jest następujący:
          2, 3, ..., 10, W, D, K, A
        

Wskazówki:

Zadanie 3.

Zmodyfikować program z zadania 2, tak aby umożliwiał weryfikację, czy dany zestaw kart tworzy układ Strit oraz Poker.

Strit jest to układ 5 kart o następujących po sobie symbolach (wg porządku podanego w zadaniu 2). Przykład: K8, T9, R10, KW, TD

Poker jest to Strit z kart o tym samym kolorze. Przykład: K9, K10, KW, KD, KK

Przygotować dwie funkcje:
    int czy_strit(char* karty[], int rozmiar)
    int czy_poker(char* karty[], int rozmiar)
  
które zwracają 1 gdy karty tworzą dany układ, 0 w przeciwnym przypadku. Przetestować działanie funkcji dla następujących zestawów kart:
    
    char* strit[] = {"R10", "KD", "T9", "PW", "K8"};
    char* poker[] = {"KW", "K9", "KD", "KK", "K10"};
    char* nic[] =   {"R2", "K7", "KA", "KK", "T5"};
    
  
Założenia: