Politechnika Wrocławska, Wydział Elektroniki, Kierunek: Elektronika i Telekomunikacja (1 rok)
Laboratorium ETE 0225 - INFORMATYKA 2
( prow. dr Marek Piasecki

Ogólny program zajęć dla wszystkich grup laboratoryjnych i ćwiczeniowych przedmiotu INFORMATYKA 2
został przygotowany przez dr Tadeusza Jeleniewskiego i znajduje się na stronie:

http://sprocket.ict.pwr.wroc.pl/~jeleniew/jezyk-cpp/INE-program.htm

Na w/w stronie znajdują się również podstawowe materiały uzupełniające
(listingi przykładowych programów, ilustracje, przykładowe zadania)


Zadania do realizacji w grupach prowadzonych przez dr M.Piaseckiego:

LAB_1  ,  LAB_2  ,  LAB_3  ,  LAB_4  ,  LAB_5  ,  LAB_6  ,  LAB_7

Lab.

TEMATYKA  ZAJĘĆ

1

Napisz program konsolowy (z tekstowym interfejsem użytkownika) w języku C++
( FILE > NEW > OTHER... > CONSOLE WIZZARD > C++ / Console application ),
który wczyta N liczb rzeczywistych z klawiatury (N jest również wczytywane)
a następnie:
 - policzy wartość średnią i wartość maksymalną z podanych liczb,
 - uporządkuje (posortuje) wczytane liczby w/g rosnących wartości.

Wykonaj ćwiczenie polegające na krokowym wykonywaniu wybranych fragmentów
wykonanego programu, z podglądaniem zawartości zamiennych
(np. zawartości tablicy, wartości zmiennych sterujących pętli, itp.)
W tym celu wykorzystaj podopcje menu RUN
 - Step Over
 - Trace Into
 - Run to Cursor
 - Add Breakpoint
oraz
 - Add Watch
 - Evaluate/Modify

2

Wykonaj program ilustrujący podstawowe możliwości grafiki komputerowej
w postaci dialogowej aplikacji GUI (z graficznym interfejsem użytkownika).

Do zbudowania szkieletu aplikacji wykorzystaj polecenie "FILE > NEW > APPLICATION"
a do rysowania figur geometryczych wykorzystaj metody własności "Canvas" głównego formularza.

W zależności od stopnia zaawansowania studenta, program powinien:
a) rysować statyczny dwuwymiarowy wykres wybranej funkcji nieliniowej
    np. wykres wielomianu zadanego stopnia o losowanych współczynnikach.
b) animować płynny ruch po ekranie kilku podstawowych figur
     np. piłeczki odbijające się od krawędzi okna,
           lub symulacja ruchu piłki staczającej się po równi pochyłej
c) realizować dowolną prostą grę komputerową
    w której użytkownik steruje ruchem obiektów geometrycznych
    za pomocą myszki lub klawiatury
    np. "strzelanie" kursorem myszki do losowo pojawiających się okręgów 
3 Implementacja i eksperymenty z wybranymi algorytmami sortowania tablic

Przykładowe algorytmy sortowania do wyboru:
    - sortowanie bąbelkowe,
    - mieszane,
    - przez selekcję/wybór,
    - przez wstawianie,
    - przez zliczanie,
    - przez łączenie/scalanie,
    - szybkie,
    - kopcowe/stogowe.

W ramach laboratorium należy wybrać i oprogramować przynajmniej 2 różne algorytmy sortowania
np. bąbelkowe, przez wstawianie i szybkie.
a następnie przeprowadzić pomiary czasu sortowania dla różnych ilości sortowanych elementów.

Wybrane algorytmy należy zaimplementować dla tablic liczb lub w trudniejszej wersji dla tablic struktur.
(w przypadku tablic struktur sortowanie powinno przebiegać według wybranych pól struktury
np. tylko wg pola nazwisko, lub w/g kryterium łączącego wartości kilku pól
np. najpierw wg nazwiska, a w przypadku identycznych nazwisk dodatkowo wg imienia).

Wykonując badania porównawcze należy dla każdego algorytmu wypełniać tablice identycznymi ciągami wylosowanych wartości rozpoczynając losowanie dla każdego z sortowań po ustawieniu generatora liczb losowych za pomocą funkcji srand np.srand(3).

Dodatkowo można sprawdzić wpływ rodzaju danych wejściowych: nieposortowanych, posortowanych częściowo lub całkowicie posortowanych

4

Plikowe operacje wejścia wyjścia - przetwarzanie plików tekstowych.
W zadaniach należy wykorzystać odpowiednie funkcje z biblioteki <stdio.h>
      np.:  fopen( ), fclose(), fputc( ), fgetc( ), fprintf( ), fscanf( ), fputs( ), fgets( ) 
lub metody obiektowych strumieni: ifstream, ofstream, fstream z biblioteki <fstream.h> 

  1. Napisz program, który zapisze kilka liter do pliku tekstowego "litery.txt"
  2. Napisz program, który wyświetli na ekranie swój własny kod źródłowy.

  3. Napisz program, policzy średnią arytmetyczną ze wszystkich liczb rzeczywistych
    zapisanych w pliku tekstowym (o nieznanej długości).

  4. Napisz program rysujący na ekranie (w trybie graficznym)
    obrazek składający się z zestawu figur opisanych w pliku tekstowym "rysunek.txt"
    w następującym formacie:
         [char Figura1][int Kolor1][int parametr11 parametr12 . . . ]
         [char Figura2][int Kolor2][int parametr21 parametr22 . . . ]
    Przykładowy plik: rysunek.txt oraz opis jego zawartości.

Zadanie dodatkowe:

  1. Napisz funkcję, która wczyta do pamięci komputera wyniki remanentu w sklepie odzieżowym
    zapisane na dysku w pliku tekstowym "remanent.txt".
    Dane te będą zapisane w postaci 5 elementowych wierszy zawierających:
    numer_katalogowy, nazwa_towaru, litera_rozmiaru, ilość_sztuk, cena.
    Każdy z towarów powinien być w osobnym wierszu a poszczególne elementy wiersza
    powinny być pooddzielane znakami tabulacji.

Wskazówki do wykonania ćwiczeń z laboratorium 4 i 5 za pomocą strumieni obiektowych
(z biblioteki <fstream.h>) można znaleźć w książce "C++ Builder dla każdego"
w podrozdziale "Wprowadzenie do operacji wejścia-wyjścia" str. 136-145.

5

Plikowe operacje wejścia wyjścia - przetwarzanie plików binarnych
W zadaniach należy wykorzystać funkcje: fwrite( ), fread( ), fseek( ) z biblioteki <stdio.h>.

  1. Napisz program, który zapisze do pliku binarnego dziesięć liczb typu float wczytanych z klawiatury,
    oraz drugi, który odczyta zawartość tego pliku i wyświetli ją na ekranie.
  2. Napisz program, który dopisze kilka dodatkowych liczb float do pliku binarnego
    utworzonego w zadaniu (a).

  3. Napisz funkcję, która skopiuje do drugiego pliku ostatnie 5 liczb
    z pliku tworzonego w zadaniach (a) lub (b)

  4. Napisz funkcję: bool ZamienLiczbe( char* nazwa_pliku, float nowa_wartosc, unsigned i )
    która zamieni (nadpisze) wartość i-tej liczby w pliku tworzonym w zadaniu (a)

  5. Napisz funkcję, która usunie i-tą liczbę z pliku tworzonego w zadaniu (a)

Zadanie dodatkowe:

  1. Zmodyfikuj funkcje z w/w zadań (a,b,c,d,e) 
    aby elementem zapisywanym/odczytywanym/poprawianym/usuwanym z pliku była struktura
    zawierająca wybrane dane opisujące pracownika:
    struct TPracownik
       { char nazwisko[30];
         char adres[50];
         char plec;
         int staz_pracy;
         float pensja; };

6

Dynamiczne tablice jedno i dwuwymiarowe

  1. Napisz program umożliwiający wykonywanie operacji na dwuwymiarowej tablicy liczb double
    o dowolnej ilości wierszy i kolumn (dynamicznej tablicy wskaźników na dynamiczne tablice liczb double).
    Oprogramuj następujące operacje:
      - Tworzenie i usuwanie dynamicznej tablicy o rozmiarze N-wierszy i M-kolumna
         (gdzie N i M są wczytywane z klawiatury lub pliku tekstowego).
      - Wczytywanie zawartości tablicy z klawiatury i z pliku tekstowego.
      - Wyświetlanie zawartości tablicy na ekranie i zapis do pliku tekstowego.
      - Zamiana miejscami dwóch dowolnych wierszy Zamiana miejscami dwóch dowolnych kolumn

  2. Napisz funkcje tworzącą dynamiczną N - elementową tablice wskaźników na 50-cio znakowe łańcuchy. (tzn. dwuwymiarową tablicę znaków). Następnie napisz funkcję wczytującą zawartość tych łańcuchów z klawiatury. Ilość tekstów N powinna być wczytywana z klawiatury.

  3. Napisz funkcje tworzącą N - elementową dynamiczną tablicę wskaźników
    na dynamicznie tworzone struktury STUDENT (opisujące dane studenta).
    Następnie wypełnij tę złożoną strukturę danymi wczytywanymi z klawiatury.

  4. Napisz funkcję tworzącą dynamiczną N-elementową tablicę wskaźników
    na dwuwymiarowe macierze liczb long o rozmiarze 10x10
    (Wartość N powinna być parametrem tej funkcji)
    Następnie wczytaj zawartość tej struktury danych z klawiatury.

Zadanie dodatkowe:

  1. Napisz program prostego "edytora tekstowego" pracującego w trybie nadpisywania
    ale z możliwością dynamicznego dodawania nowych linii do edytowanego tekstu.
    Do reprezentacji wpisywanego tekstu wykorzystaj strukturę danych
    w postaci dynamicznej tablicy tablic osiemdziesięcio-znakowych.
    W najprostszym przypadku można przyjąć, że ilość wpisywanych wierszy
    nie przekroczy ilości wierszy wyświetlanych na ekranie komputera.

7

Struktury wiązane typu stos i kolejka

  1. Napisz program zawierający funkcje:
       -  WSTAW_DO_KOLEJKI( wsk_kolejki, dane )
       -  POBIERZ_Z_KOLEJKI( wsk_kolejki, dane )
    umożliwiające dodawanie nowych i usuwanie starych elementów (np. liczb)
    do "kolejki" tworzonej poprzez dynamiczną alokację zmiennych na stercie
    i łączenie ich w łańcuch za pomocą wskaźników na następny element.
  2. Napisz program umożliwiający zapamiętywanie w postaci "dynamicznej listy elementów"
    dowolnej ilości linii tekstu wpisywanych z klawiatury przez użytkownika programu,
    przy założeniu, że maksymalna długość linii będzie mniejsze lub równa 80 znaków.

    Program powinien zawierać następujące opcje:
      - dodanie nowego tekstu do listy,
      - usuniecie wybranego tekstu (wskazanie numerem linii lub zawartością),
      - wyświetlenie zawartości wszystkich pamiętanych linii,
      - wyświetlenie zawartości i-tej linii
         (uwaga na sytuacje gdy podane "i" będzie większe niż rzeczywista liczba elementów),

Zadanie dodatkowe:

  1. Napisz program analogiczny do zadania (b) ale dla zapamiętywania tekstów o dowolnej długości
    (tzn. ilość pamięci na zapamiętanie tekstu będzie dostosowana do jego rzeczywistej długości)

(*)

Struktury wiązane typu lista dwukierunkowa, cykliczna, lista list, graf

  1. Oprogramuj dwukierunkową listę cykliczną reprezentującą podstawowe składowe okna dialogowego.
    W najprostszym przypadku można przyjąć, że tymi składowymi są tylko teksty
    wyświetlane różnymi kolorami w różnych miejscach ekranu:
       struct DANE_TEKSTU
           { char tekst[100]; // lub: char * tekst;
              int x,y; // współrzędne tekstu na ekranie
              int kolor, tlo; // kolor znaku i tła
              int mozna_edytowac; // informacja czy to jest tekst statyczny czy "okno edycyjne" };

         struct ELEMENT_LISTY
             { DANE_TEKSTU dane;
                ELEMENT_LISTY *nastepny, *poprzedni; };

    Należy oprogramować pięć funkcji:
      - Dodanie nowego elementu do listy,
      - Wyświetlenie elementu wyróżnionym kolorem (lub edycja)
      - Wyświetlenie tekstu standardowym kolorem
      - Usunięcie wszystkich elementów listy,
      - Operację interakcyjnej pracy z oknem dialogowym
          (np.przejście do kolejnego elementu po naciśnięciu klawisza ENTER lub Tab
           lub przejście do poprzedniego elementu po naciśnięciu SHIFT+TAB)
  2. Oprogramuj graf reprezentujący relacje rodzinne pomiędzy ludźmi.
    Dane powinny być wprowadzane w formie tekstowej (z klawiatury lub pliku tekstowego)
    w postaci zdań:
        >  OSOBA  PESEL_1   Nazwisko_1   Imię_1   Plec_1
        >  OSOBA  PESEL_2   Nazwisko_2   Imię_2   Plec_2
        >  OSOBA   . . .
        >  OSOBA  PESEL_N   Nazwisko_N   Imię_N   Plec_N
    oraz opisu bezpośrednich relacji:
        > RELACJA   PESEL_4   SYN   PESEL_7
        > RELACJA   PESEL_3   CORKA   PESEL_2
        > RELACJA   PESEL_7   OJCIEC   PESEL_4
        > RELACJA   PESEL_12   MATKA   PESEL_4
    Należy oprogramować dwie funkcje pozwalające dodawać nowe osoby i nowe relacje
    oraz trzecią funkcję wyświetlającą wszystkich najbliższych krewnych zadanej osoby.

Materiały: