Politechnika Wrocławska, Wydział Elektroniki,
Kierunek: Informatyka (1 rok)
Laboratorium i ćwiczenia audytoryjne
INE 1012 - INFORMATYKA 2
|
Wyniki zaliczeń są podawane na tablicy
ogloszeń.
Ogólny program zajęć dla wszystkich grup na kierunkach INF oraz EIT
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)
Studentów kierunku INFORMATYKA , którzy uczęszczają na zajęcia
prowadzone przez dr Marka Piaseckiego obowiązuje zakres tematyki (i zadań)
przedstawiony na w/w stronie dr Jeleniewskiego oraz zadania wyliczone poniżej:
Lab 1: Praca w zintegrowanym środowisku
BorlandC
Ćw. i Lab 2: Elementy
grafiki komputerowej na przykładzie biblioteki BGI.
Ćw. i Lab 3:
Podstawowe algorytmy sortowania
Ćw. i Lab 4:
Podstawowe operacje na plikach dyskowych
Ćw. i Lab 5: Dynamiczne
tablice jedno i dwuwymiarowe
Ćw. i Lab 6: Proste
struktury wiązane typu stos i kolejka
Ćw. i Lab 7:
Struktury wiązane typu lista dwukierunkowa, cykliczna,
lista list, graf
Ćw. 8: Sprawdzian końcowy
Przykładowe zadania na kolokwium zaliczeniowe
!
Szczegółowe programy
i zadania do realizacji:
-
Praca
w zintegrowanym środowisku BorlandC
LABORATORIUM:
-
widok (ekran) programisty i
widok użytkownika (User_screen),
-
wykorzystanie poleceń pracy
krokowej (Program_reset, Go_to_cursor, Trace_into, Step_over)
-
zakładanie i edycja warunków
aktywności pułapek (Breakpoint, Counter, Condition)
-
podglądanie zawartości stosu
wywołań i wartości zmiennych. (Call_stack, Watch, Evaluate/Modify)
-
Elementy grafiki komputerowej na przykładzie
biblioteki BGI.
ĆWICZENIA:
-
Inicjowanie
i zamykanie trybu graficznego,
-
Organizacja
ekranu, współrzędne punktów na ekranie,
-
Rysowanie
prostych figur geometrycznych, zmiana stylu linii i wypełnienia
-
zapamiętywanie
i odtwarzanie fragmentów ekranu, stronicowanie
-
materiały-folie prezentowane
na ćwiczeniach (PDF 166KB)
LABORATORIUM:
-
zadania
na poziomie 4.5 - 5.5:
-
animacja ruchomych obiektów na nieruchomym tle poprzez "wklejanie klatek"
i stronicowanie
-
np. gra "najdłuższy skok Małysza",
-
np. staczanie się koła (a nie studenta ;-) po równi pochyłej,
-
np. lot nietoperza
-
zadania na poziomie 3.0 - 4.0
- rysowanie wykresów funkcji ze skalowaniem
- prosta animacja poprzez przerysowywanie ze stronicowaniem
-
Podstawowe algorytmy sortowania
ĆWICZENIA:
-
Rodzaje
operacji wykonywanych na tablicach
-
dopisywanie na koniec, wstawianie "uporządkowane
-
usuwanie (ze zmianą porządku i bez)
-
wyszukiwanie
-
Dyskusja
problemu sortowania danych
-
Miary
efektywności sortowania
-
Klasyfikacja
metod sortowania:
-
przez wstawianie
-
przez wybieranie
-
przez zamianę
-
Omówienie
(na przykładach) wybranych metod sortowania
-
Schemat
programu umożliwiającego eksperymenty
z
różnymi technikami sortowania tablic
Literatura: Niklaus Wirth "Algorytmy + Struktury danych = Programy"
LABORATORIUM:
-
Napisanie
programu zawierającego własną implementację
przynajmniej
trzech różnych metod sortowania.
-
Program
powinien umożliwiać automatyczne przygotowanie
różnych
rodzajów danych poczatkowych:
-
zupełnie losowe,
-
uporządkowane rosnąco,
-
uporządkowane malejącą,
-
częściowo uporządkowane ( np. w postaci "zębów piły" )
-
ciąg danych o tej samej wartości.
-
Ostatecznym
wynikiem działania programu powinno być
przeprowadzenie
eksperymentów i porównanie szybkości
działania
różnych algorytmów dla różnych rodzajów
danych
wejściowych.
-
Na wyższą
ocenę będą oceniane programy:
-
posiadające elementy atrakcyjnej wizualizacji (np. w trybie graficznym),
-
umożliwiające porównanie efektywności tej samej metody
w zależności od kosztu porównywania i przemieszczania obiektów
(najczęściej zależy to od proporcji pomiedzy wielkością "klucza"
a wielkością samego obiektu )
-
Podstawowe operacje na plikach dyskowych
ĆWICZENIA:
-
Różnice
pomiędzy sortowaniem tablic (sortowaniem wewnętrznym)
a
sortowaniem plików (zewnętrznym)
-
Algorytmy sortowania plików (łączenie proste, naturalne, wyważone, polifazowe)
Łączenie algorytmów sortowania zewnętrznego i wewnętrznego.
Literatura: Niklaus Wirth "Algorytmy + Struktury danych = Programy"
LABORATORIUM:
-
[zadanie 0] "Przetwarzanie plików tekstowych zawierających teksty
"
Napisz program dopisujący
dodatkową ścieżkę (np. c:\java )
do wiersza ustawiającego
zmienną systemową PATH
w pliku tekstowym "autoexec.bat"
-
[zadanie 1] "Przetwarzanie plików tekstowych zawierających liczby
"
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 . . . ]
. . .
np.
Przykładowy wiersz
|
Znaczenie pól
|
Opis - uwagi |
C 8 100 200 50
|
Circle kolor x y r
|
gdzie
znak = 'C' oznacza "circle"
kolor = 8 oznacza kolor konturu koła
(x,y) = (100,200)
- współrzędne środka
r
=
50 oznacza wielkość promienia |
L 7 10 12 75 80
|
Line kolor x1 y1 x2 y2
|
gdzie
znak = 'L' oznacza "line"
kolor = 7 oznacza kolor konturu linii
(x1,y1) = (10,12) - współrzędne początku
linii
(x2,y2) = (75,80) - współrzędne końca linii |
R 3 40 52 100 200
|
Rectangle kolor x1 y1 x2 y2
|
gdzie
znak = 'R' oznacza "rectangle"
kolor = 3 oznacza kolor konturu prostokąta
(x1,y1) = (40,52) - współrzędne 1 wierzchołka
(x2,y2) = (100,200) - współrzędne 2 wierzchołka |
E 11 100 120 0 360 20 30 |
Ellipse kolor x y alfa beta Rx Ry |
gdzie
znak = 'E' oznacza "ellipse"
kolor = 11 oznacza kolor konturu elipsy
(x,y) = (100,120)
- współrzędne środka elipsy
(alfa,beta) = (0,360) - kąt początkowy
i końcowy
(Rx,Ry) = (20,30) - promień w poziomie
i w pionie |
-
[zadanie 2]" Przetwarzanie plików binarnych "
Napisz program umożliwiający
przetwarzanie (zapis i odczyt) pliku binarnego
zawierającego dowolną ilość
tablic (o dowolnej długości) zawierających
dane wybranych typów prostych:
char, int, long, float, double
zapisywane w formacie:
[nagłówek1] [licznik1]
[dane_1_tablicy] [nagłówek2] [licznik2] [dane_2_tablicy] . .
.
. . . [nagłówek_N]
[licznik_N] [dane_N-tej_tablicy]
gdzie:
Pole
|
Zawartość
|
Opis - uwagi |
nagłówek
|
jeden znak (typ char)
|
o wartościach:
'c' - dla tablicy znaków char
'i' - dla tablicy liczb int
'l' - dla tablicy liczb long
'f' - dla tablicy liczb float
'd' - dla tablicy liczb double |
licznik
|
dana typu unsigned
|
liczba całkowita równa rozmiarowi (ilości elementów) w/w tablicy |
dane_tablicy
|
ciąg bajtów
|
o długości = licznik * sizeof( typ_danych_dablicy ) |
-
Dynamiczne tablice jedno i dwuwymiarowe,
tablice wskaźników na dynamicznie tworzone
struktury
ĆWICZENIA:
-
organizacja pamięci, różnice
pomiędzy zmiennymi "wskaźnikowymi" i "dynamicznymi"
-
dynamiczna alokacja pamięci
za pomocą funkcji: malloc(), calloc(), realloc(), free()
-
dynamiczna alokacja pamięci
za pomocą operatorów: new i delete
-
dynamiczne tworzenie tablic
jednowymiarowych
-
dynamiczne tworzenie tablic
dwuwymiarowych
(rozróżnienie "tablicy
tablic" oraz "tablicy wskaźników na tablice" )
LABORATORIUM:
-
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 program prostego "edytora
tekstowego" pracującego w trybie nadpisywania
ale z możliwością dynamicznego
"wydłużania" 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.
-
Proste struktury wiązane typu stos i kolejka
ĆWICZENIA:
LABORATORIUM:
A.Napisac funkcje:
WSTAW_DO_KOLEJKI( wsk_kolejki, dane )
POBIERZ_Z_KOLEJKI( wsk_kolejki, dane )
umozliwiajace dodawanie nowych
i usuwanie starych elementow (np. liczb) do kolejki tworzonej poprzez
dynamiczną alokacje zmiennych na stercie i laczenie ich w lancuch za pomoca
wskaznikow na nastepny element).
B. Napisac program umozliwiajacy
zapamietywanie w postaci "listy elementow"
dowolnej ilosci
linii tekstu wpisywanych z klawiatury przez użytkownika
programu.
Poszczegolne
linie zapamietywac w strukturach przydzielanych dynamicznie
w trakcie dzialania.
Nalezy uwzglednic sytuacje gdy nie mozna przydzielic
pamieci na kolejny
element (z powodu braku wolnego miejsca na stercie)
Program powinien
zawierac nastepujace opcje:
- dodanie nowego tekstu,
- usuniecie wybranego tekstu (wskazanie
numerem linii lub zawartością),
- wyswietlenie zawartosci wszystkich
pamiętanych linii,
- wyswietlenie zawartosci i-tej
linii (uwaga na sytuacje gdy podane
"i" bedzie wieksze niz rzeczywista
liczba elementow),
C*. Napisac program j.w.
ale dla zapamietywania tekstow o dowolnej dlugosci
(ilosc pamieci na
zapamietanie tekstu bedzie dostosowana do dlugosci
wprowadzonego lancucha
znakow)
-
Struktury wiązane typu lista dwukierunkowa,
cykliczna, lista list, graf
ĆWICZENIA:
-
Przykłady
operacji na liście dwukierunkowej otwartej i cyklicznej
-
wstawianie na początek, koniec, na pozycji i-tej
-
wstawianie po (lub przed) elementem spełniającym zadany warunek
-
usuwanie i-tego elementu, usuwanie elementu spełniającego warunek
-
Hierarchiczne
wiązane struktury danych
-
dwupoziomowa reprezentacja w postaci "listy list"
-
proste reprezentacje drzewiaste (drzewo binarne, czwórkowe)
-
struktury drzewiaste o dowolnej ilości odgałęzień
-
struktury drzewiaste typu "grupa elementów i podgrup"
-
Grafy
-
węzły z ograniczoną ilością połączeń (z tablicą wskaźników na sąsiednie
węzły)
-
węzły z dowolną ilością połączeń (z pod-listą wskaźników na sąsiednie węzły)
-
grafy z różnymi rodzajami węzłów
LABORATORIUM:
A. Oprogramować
dwukierunkową listę cykliczną reprezentującą podstawowe
składowe
okna dialogowego wyswietlanego w trybie tekstowym.
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_D {
DANE_TEKSTU dane;
ELEMENT_D *next, *prev;
);
Należy oprogramować
pięć funkcji:
DODAJ( wsk_dialogu,
dane_tekstu );
PODŚWIETL( wsk_tekstu
);
ZGAŚ( wsk_tekstu );
NAWIGACJA( wsk_dialogu
);
USUN_LISTE( wsk_dialogu
); |
// Dodanie nowego elementu
do listy
// Wyświetlenie wyróżnionym
kolorem (lub edycja)
// Wyświetlenie
tekstu standardowym kolorem
// Oprogramowanie
interakcyjnej pracy z oknem
// dialogowym: przejście
do kolejnego tekstu
// po naciśnieciu klawisza
ENTER lub Tab
// lub odwrotnie po naciśnięciu
SHIFT+TAB
// Usunięcie wszystkich
elementów listy |
B. Oprogramować graf
reprezentujący relacje rodzinne pomiędzy ludźmi.
Dane powinny być wprowadzane w formie tekstowej (z klawiatury lub pliku
tekstowego)
w postaci zdan:
> 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.
-
Sprawdzian końcowy
Literatura:
Robert Lafore
“Programowanie w języku C przy użyciu Turbo C++”
Jerzy Grębosz
“Symfonia C++”
Andrzej Zalewski
“Programowanie w językach C i C++ z wykorzystaniem pakietu Borland C++”
Bjarne Stroustrup
“Język C++ “
Robert Sedgewick “Algorytmy
w C ++ “