May 15, 2024, Wednesday, 135

C/Zad8 2016

From MJanik

Jump to: navigation, search

Na laboratoriach będziemy pisać program wykorzystujący operacje bitowe. Będziemy również tworzyć strukturę oraz serię funkcji zewnętrznych.


Zadanie polega na napisaniu programu, wykorzystując operacje bitowe, który dla danej grupy krwi biorcy wyznaczy grupy krwi, które mogą posiadać potencjalni dawcy, aby można było bezpiecznie przetoczyć pacjentowi krew. W programie podajemy grupę krwi biorcy i na wyjściu otrzymujemy grupy krwi zgodne z grupą krwi pacjenta. Przykład działającego programu:

 Podaj grupe krwi: 
 AB- 
 Grupa krwi: AB- 
 Grupy zgodne: 0- B- A- AB-

Zakładamy, że grupy krwi są kodowane bitowo:

 A+=101, AB-=110, 0+=001, B-=010, itd. (samodzielnie wyprowadzić kodowanie bitowe  wszystkich grup krwi)

Pełna tabela zgodności grup krwi: tabela zgodności.

Do wykonania:

  • Stwórz strukturę Pacjent zawierającą składniki:
    • uint8_t grupaKrwi, int liczbaZgodnychGrup, uint8_t *grupyZgodne.
  • Stwórz dwie funkcje powiązane ze strukturą Pacjent:
    • void UstawPacjent(Pacjent *pacjent, char *grKrwi) ustawiające składniki struktury Pacjent.
    • void WypiszPacjent(Pacjent *pacjent) wypisujące składniki struktury Pacjent. (2.5 p.)
  • Główna część zadania polega na wyznaczeniu grup krwi zgodnych z podaną grupą krwi pacjenta. Zadanie to należy wykonać przeprowadzając odpowiednie operacje bitowe w następujący sposób: grupę krwi pacjenta sprawdzamy (operacjami bitowymi) z każdą inną grupą krwi. W wyniku operacji powinniśmy dostać wartość „true” lub „false”, w zależności od tego, czy porównywane grupy krwi są zgodne, czy nie. Jeśli dana grupa krwi jest zgodna z grupą krwi pacjenta, to zwiększamy o 1 liczbę zgodnych grup krwi danego pacjenta (składowa liczbaZgodnychGrup) i dodajemy daną grupę krwi do tablicy *grupyZgodne struktury Pacjent. (2.5 p.)
  • Funkcja main pytająca o grupę krwi (powinna być wczytana z klawiatury) i wypisująca efekt działania programu na ekranie. (1 p.)

Obowiązkowo:

  • Zrozumienie, analiza treści, projekt programu + poprawność i estetyka kodu.

Sugestie:

  • Stworzyć dwie tablice globalne: odpowiadającą kolejnym liczbom w formacie uint8_t oraz kolejnym ciągom znaków odpowiadającym grupom krwi.

Proponowane funkcje pomocnicze:

  • uint8_t grupaKrwi(char *grupa) - zamieniająca grupę w formacie "AB+" na odpowiednią liczbę.
  • char* zmienNaTekstGrupa(uint8_t grupa) - zmieniającą grupę krwi zakodowaną w liczbie na odpowiedni ciąg znaków

Proponowana kolejność wykonywania zadania:

  • Przemyśleć, jakiej grupie krwi odpowiada jaka liczba naturalna.
  • Zadanie rozpocząć od wczytywania w funkcji głównej jednej grupy krwi do instancji struktury Pacjent, zapisania jej w formacie uint8_t, następnie wypisania na ekran zrozumiałego ciągu znaków.
  • Dopiero gdy poprzednia część zadania działa bez zarzutu przejść do pisania kodu sprawdzającego (oraz zapisującego do struktury) zgodne grupy krwi. Rozpocząć of trywialnego sprawdzenia czy grupa biorcy jest równa grupie dawcy.
  • Odpowiednio zmodyfikować warunek dawca == biorca. Hint: zmienić lewą stronę porównania.