Laboratorium 5 – struktury

  1. (1p.) Zdefiniuj strukturę pozwalającą przechowywać dane pojedynczego elementu wybranej bazy danych np. katalogu książek w bibliotece, spisu samochodów w autokomisie, zestawienia miesięcznych wydatków studenta, itp.Następnie zdefiniuj N-elementową (pseudo-dynamiczną) tablicę w/w struktur pozwalającą przechowywać dane wielu elementów (ale nie więcej niż N) z dodatkowym licznikiem informującym o ilości wpisanych danych.
  2. (2p.) Napisz funkcje pozwalające wczytywać i wyświetlać zawartość bazy.
    Uwaga: w/w tablice lub struktury powinny być przekazywane jako parametry funkcji !
    • (+1p.) zdefiniuj operatory strumieni istream i ostream.
    • (+1p.) napisz funkcje do zapisywania zawartości bazy do pliku i wczytywania z pliku.
  3. (3p.) Napisz funkcję pozwalającą wyszukać w bazie elementy o zadanych parametrach np. samochód marki FIAT, rocznik nie starszy niż 1990,  o cenie z zadanego przedziału.

Dodatkowe zadania „dla zaawansowanych”:

  1. (2p.) Napisz funkcję umożliwiającą edycję/poprawianie danych pojedynczych elementów bazy. Np zmianę ceny samochodu w autokomisie, aktualizację adresu w bazie danych personalnych, itp
  2. Napisz funkcję umożliwiającą interaktywne przeglądanie zawartości bazy.
    Uwzględnij przypadki, gdy dane zapisane w bazie nie zmieszczą się na jednym ekranie (np. katalog 1000 tytułów ksiażek i nazwisk autorów).
    • (2p.) w najprostszym przypadku (przeglądanie bazy od pierwszego do ostatniego elementu) wystarczy wprowadzenie tzw. stronicowania,
    • (4p.) najbardziej uniwersalnym rozwiązaniem jest umożliwienie „sterowania” przeglądaniem za pomocą strzałek na klawiaturze tzn:
      • klawisz  „<-”  oznacza: wyświetl poprzedni element bazy
      • klawisz   „->”  oznacza: wyświetl następny element bazy
      • klawisz   „ESC” oznacza: zakończ przeglądanie

Zadanie alternatywne

  1. (6p.) Zdefiniuj strukturę definiującą liczby ułamkowe (ułamki zwykłe) oraz funkcje operujące na niej. Powinny być zdefiniowane funkcje do wczytywania wartości, wyświetlania (+1p. za zdefiniowanie operatorów strumieni), czterech działań arytmetycznych (+0,5p. za zdefiniowanie operatorów) oraz skracanie ułamka i wydzielania części całkowitej. Przydadzą się też pomocnicze funkcje: NWD, NWW i sprowadzające do wspólnego mianownika.
//alg. Euklidesa
int NWD(int a, int b)
{  int pom;

  while(b!=0)
  {
    pom = b;
    b = a%b;
    a = pom;  
  }
  return a;
}

//lub rekurencyjnie
int NWD(int a, int b)
{
  if (b == 0)
    return a;
  return NWD(b,a%b);
}

//NWW
int NWW(int a, int b)
{
  return a*b/NWD(a,b);
}

Przykład z operatorami