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>
- Napisz program, który zapisze kilka liter do pliku tekstowego
"litery.txt"
-
Napisz program, który wyświetli na
ekranie swój własny kod źródłowy.
-
Napisz program, policzy średnią
arytmetyczną ze wszystkich liczb rzeczywistych
zapisanych w pliku tekstowym (o nieznanej długości).
-
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:
- 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>.
- 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.
-
Napisz program, który dopisze kilka
dodatkowych liczb float do pliku binarnego
utworzonego w zadaniu (a).
-
Napisz funkcję, która skopiuje do
drugiego pliku ostatnie 5 liczb
z pliku tworzonego w zadaniach (a) lub (b)
-
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)
-
Napisz funkcję, która usunie i-tą
liczbę z pliku tworzonego w zadaniu (a)
Zadanie dodatkowe:
- 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
-
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
-
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.
-
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.
-
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:
-
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
- 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.
-
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:
- 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
- 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)
-
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.
|