Andrzej LemaÅ„ski  Website
  Katedra Fizyki CiaÅ‚a StaÅ‚ego     WydziaÅ‚ Fizyki i Informatyki Stosowanej     Akademia Górniczo-Hutnicza  
[pic]

[pic]   Organizacja ćwiczeÅ„, tematyka zajęć





1. Organizacja zajęć. Programujemy w c. NarzÄ™dzia.    powrót

UWAGA: sposob przesyłania prac z laboratorium.
Link do strony: Wysyłka prac
Archwizowanie kilku plików do skompresowanego jednego pliku z rozszerzeniem zip:
$ cd nazwa_katalogu_z_plikami
$ zip nazwa_pliku_zgodna_z_wzorcem_bez_rozszerzenia *.cpp *.h
można też tak
$ zip nazwa_pliku_zgodna_z_wzorcem_bez_rozszerzenia A.cpp B.h
generowanie sumy kontrolnej
$ md5sum nazwa_pliku_zgodna_z_wzorcem.zip



2. Programujemy w c. Make, valgrind, gdb.    powrót

UWAGA: przykładowy kod.
Link do pliku: lab02.c
1. Korzystając z kompilatora, valgrind i gdb odnaleźć błedy w dostarczonym programie.
2. Poprawić kod.
3. Dopisać funkcję, która wypełnia w tablicy struktur pierwsze wolne miejsce.
4. Dopisać funkcję, która usuwa dane z tablicy i zwalnia miejsce.
5. W main pokazać użycie tych funkcji.



3. Programujemy w c. Może już nieco w C++.    powrót

1. Korzystając z struktury z poprzednich zajęć napisać funkcję,
     która wypeÅ‚ni strukturÄ™ danymi a strukturÄ™ zapamiÄ™ta w tablicy.
     Dane do struktury pobieramy z standardowego wejÅ›cia.

2. Napisać funkcję, która podobnie jak w punkcie pierwszym
     przypisze elementom struktury dane odpowiedniego typu.

3. W main pokazać użycie tych funkcji.

Uwaga: można stosować funkcje standardowej biblioteki C oraz poznane metody i obiekty C++ (np cin, cout, new delete).



4. Programujemy w C++. Tworzymy klasÄ™, a także użyjemy jej obiekty.    powrót

UWAGA: przykładowy kod.
Link do pliku: lab04.cpp
1. Zaprojektować klasę Estring, która udostępni nam interfejs do posługiwania się ciągami znaków.
     w standardowej bibliotece jest taka, nazywa siÄ™ std::string,
     ale jej nie wolno nam używać.
     Napiszemy wÅ‚asnÄ…, trochÄ™ innÄ….

2. Napisać funkcje, których nazwy występują w podobnym kodzie.
     operatorPlus,append, c_str,substr, swap.

3. Nie zapomnieć o stosownych konstruktorach i destruktorze.
     ale to siÄ™ nie da zapomnieć, jeżeli ma zadziaÅ‚ać podany kod.

4. W main użycie tych funkcji prowadzi do wyniku.
abc
abc123
abc123qaz
abc123
ert
789
12345



5. Programujemy w C++. Kontynuacja projektowania klasy.    powrót

UWAGA: przykładowy kod.
Link do pliku: lab05.cpp
1. Uzupełnić klasę Estring z poprzednich zajęć, która udostępni nam dalsze publiczne funkcje.
     W dalszym ciÄ…gu nie wolno nam używać klasy std::string z standardowej biblioteki,

2. Napisać funkcje, których nazwy występują w podanym kodzie.
sygnatury tych funkcji sÄ… nastepujÄ…ce:

     Estring& assign ( const Estring& str);
funkcja ta zastępuje napis kopią napisu z argumentu str, zwraca *this.

     Estring& replace ( size_t pos1, size_t n1, const Estring& str );
funkcja ta zastępuje część napisu o n1 ilości znaków od pozycji pos1 zawartością napisu z argumentu str, zwraca *this.

     Estring& insert ( size_t pos1, const Estring& str);
funkcja ta wpisuje napisu z argumentu str, od miejsce pos1 odsuwając część napisu na koniec, zwraca *this.

     typ size_t mozna zastÄ…pić typem unsigned int lub unsigned long int.

3. Nie zapomnieć o stosownych konstruktorach i destruktorze.
     ale to siÄ™ nie da zapomnieć, jeżeli ma zadziaÅ‚ać podany kod.

4. W main użycie tych funkcji prowadzi do wyniku.
abc
0123456789
0123progra
0123123progra



6. Programujemy w C++. Operatory.    powrót

Uwaga: rozwiązanie wysyłane po zakończeniu zajęć, będzie oceniane
z uwzględnieniem tego faktu.

1. Napisać klasę, która może reprezentować wektor pewnej wielkości fizycznej
     ( np. przesuniÄ™cie, siÅ‚a ).

2. Napisać operatory dodawania, odejmowania, mnożenia i porównania wektorów.

3. Nie zapomnieć o fakcie, że wektor ma reprezentować konkretną wielkość,
     czyli także poprawne jednostki.

4. W main pokazać użycie napisanych operatorów.
D = A + B + C
D += A; E = A*B
F = C - A - B
if( A == B ) {}
if( A != B ) {}



7. Programujemy w C++. Dziedziczenie.    powrót

Uwaga: rozwiązanie wysyłane po zakończeniu zajęć, będzie oceniane
z uwzględnieniem tego faktu.

UWAGA: przykładowy kod.
Link do pliku: lab07.cpp
1. Napisać klasę Instrument, która reprezentuje instrument muzyczny.
     ( np. instrument smyczkowy ).
     klasa ma być zaprojektowana do dziedziczenia.

2. Napisać klasy Skrzypce i Altówka dziedziczÄ…ce po klasie Instrument ,      klasy te muszÄ… mieć metodÄ™, która wykonuje      wÅ‚aÅ›ciwÄ… część partytury.
     partytura to ciÄ…g znaków o zmiennej iloÅ›ci przechowywanej
     w pamiÄ™ci przydzielanej przez operator new


4. Wynikiem działania przykładowego kodu ma być wyświetlony na konsoli tekst.
imitujÄ…cy nuty
class Skrzypce ahcc
class Skrzypce cde
class Altowka gaha
class Altowka fgc



8. Programujemy w C++. Klasy.    powrót

Uwaga: rozwiązanie wysyłane po zakończeniu zajęć, będzie oceniane
z uwzględnieniem tego faktu.

UWAGA: przykładowy kod.
Link do pliku: lab08.cpp
1. Napisać klasę PIterator, która pozwala na iterację po zbiorze elementów PersonSet
     obiektów klasy Person.

2. Napisać najprostszą wersję klasy Person przechowujacą nazwisko
3. Napisać najprostszą wersję klasy PersonSet przechowujacą w dowolny sposób obiekty klasy Person


4. Wynikiem działania przykładowego kodu mają być wyświetlone nazwiska.
umieszczone w zbiorze Personset



9. Programujemy w C++. Klasy. Operatory.    powrót

Uwaga: rozwiązanie wysyłane po zakończeniu zajęć, będzie oceniane
z uwzględnieniem tego faktu.

UWAGA: przykładowy kod.
Link do pliku: lab09.cpp
1. Uzupełnić, poprawić lub napisać na nowo klasę PIterator,
     która pozwala na iteracjÄ™ po zbiorze elementów PersonSet
     obiektów klasy Person.

2. Uzupełnić, jeżeli zachodzi potrzeba wersję klasy Person przechowujacą nazwisko
Link do pliku: Person.cpp
Link do pliku: Person.h
3. Uzupełnić wersję klasy PersonSet przechowujacą obiekty klasy Person
Link do pliku: PersonSet.cpp
Link do pliku: PersonSet.h


4. Wynikiem działania przykładowego kodu mają być wyświetlone nazwiska.
     umieszczone w zbiorze Personset
5. Uwaga: funkcje begin() i end() powinny być zdefiniowane w klasie PersonSet,
     to wynika z kodu funkcji main() w pliku lab09.cpp.
6. Operatory *, !=, ++ to operatory klasy PIterator.
7. Brak komentarzy jest celowy. Kod jest wyczyszczony z instrukcji sprawdzajÄ…cych
     np. przekroczenie zakresu.



10. Programujemy w C++. Szablony.    powrót

Uwaga: rozwiązanie wysyłane po zakończeniu zajęć, będzie oceniane
z uwzględnieniem tego faktu.

UWAGA: przykładowy kod.
Link do pliku: lab10.cpp
1. Napisać klasę base_ptr,
     która realizuje zadania inteligentnego wskaźnika,
     ze zliczaniem referencji.


2. Wynikiem działania przykładowego kodu ma być wyświetlony na konsoli tekst.
test_base_ptr::value_type is const: 0
[Dostep przez ->] 1
Type: test, object: 1, reference count: 2
Type: test, object: 8, reference count: 3
Type: test, object: 3, reference count: 1
test_const_ptr::value_type is const: 1
[Dostep przez -> i *] 3 3
Type: test, object: 3, reference count: 1
[Dostep przez *] test string
Type: std::string, object: test string, reference count: 1000
Type: std::string, object: test string, reference count: 2
Type: std::string, object: test string, reference count: 1
Type: std::string, object: NULL, reference count: 0



11. Programujemy w C++. Szablony.    powrót

Uwaga: rozwiązanie wysyłane po zakończeniu zajęć, będzie oceniane
z uwzględnieniem tego faktu.

UWAGA: przykładowy kod.
Link do pliku: lab11.cpp
1. Napisać klasę iterator (uogólniony wskaźnik), która pozwala na iterację
po zbiorze elementów template <typename T> PSet
     obiektów typu T.
2. Skorzystać z wyników ćwiczeń 8-10.



3. Wynikiem działania analogicznego do przykładowego kodu ma być wyświetlona zawartość klasy T.



12. Programujemy w C++. Strumienie. Operacje I/O.    powrót

Uwaga: rozwiązanie wysyłane po zakończeniu zajęć, będzie oceniane
z uwzględnieniem tego faktu.

Napisać klasę - przykład prostej bazy opartej o plik tekstowy.
     Obiekt tej klasy bÄ™dzie odpowiedzialny za wczytanie zawartoÅ›ci pliku
     i umieszczeniu jej w tablicy obiektów pewnego typu.

1. Napisać klasę przechowującą zbiór danych - jeden rekord bazy danych.
     Obiekty tego typu zawierajÄ…: nazwisko, imiÄ™, nr telefonu, mail, ilość punktów,
     wartość punktów ( liczba zmiennoprzecinkowa)
2. Napisać funkcję, która nadaje wartości zmiennym w obiektach klasy z pkt.1
     wartoÅ›ci te wczytywane sÄ… z klawiatury.
3. Napisać klasę, która posiada funkcję wczytującą z pliku wartości zmiennych,
     i inicjuje tymi wartoÅ›ciami obiekt klasy z pkt.1,
     po czym umieszcza obiekt w tablicy.
     Pojedyncza linia w pliku to zawartość jednego obiektu z pktu.1
4. Posiada funkcję zapisującą do pliku zawartość wymienionej tablicy.
     Pojedyncza linia w pliku to zawartość jednego obiektu z pktu.1

5. Posiada funkcję wyświetlającą zawartość wymienionej tablicy.
     w Å‚adny sformatowany sposób.

6. W main, korzystajÄ…c z napisanych klas,
     utworzyć tablicÄ™ obiektów,
     zapisać jej zawartość do pliku,
     wczytać zawartość pliku do innej tablicy,
     utworzyć jeszcze jeden obiekt i nadać wartoÅ›ci zmiennym korzystajÄ…c z funkcji pkt.2,
     umieÅ›cić ten obiekt w tablicy,
     tablicÄ™ ponownie zapisać do pliku,
     wyÅ›wietlić zawartość tablicy.



13. Programujemy w C++. Strumienie. Operacje I/O.    powrót

Uwaga: rozwiązanie wysyłane po zakończeniu zajęć, będzie oceniane
z uwzględnieniem tego faktu.

Napisać klasy obudowujące odczyt i zapis do pliku.
    
     .

1. Napisać klasę odczytującą zawartość pliku tekstowego.
     Obiekty tej klasy posiadajÄ… konstruktor, którego argumentem jest
     nazwa pliku ( lub peÅ‚na nazwa razem z nazwami katalogów )
2. Obiekty tej klasy posiadają funkcję, która odczytuje pełną linię tekstu
     i zwraca w postaci obiektu klasy string.
     wartoÅ›ci te wczytywane sÄ… z klawiatury.
3. Otwarcie pliku następuje przy pierwszym odczycie,
     zamkniÄ™cie pliku w chwili usuniÄ™cia obiektu,
     sytuacje bÅ‚edne sygnalizowane sÄ… wyjÄ…tkami.
4. Napisać podobną klasę zajmującą się zapisem.

5. W main, wykorzystać klasy do rozwiązania problemu,
     toczy siÄ™ eksperyment, który dostarcza serii dwóch typów danych,
     każdy pojedynczy pomiar charakteryzuje siÄ™:
     nazwÄ… mierzonego parametru, liczbÄ… porzÄ…dkowÄ…,
     jednostkÄ… mierzonej wartoÅ›ci, wartoÅ›ciÄ… pomiaru.
     Pomiary te należy zapisać do pliku, zapisy bÄ™dÄ… wymieszane.
     Odczytać pomiar jednego typu
     i wyÅ›wietlić na ekranie w kolumnach:
     liczba porzÄ…dkowa, wartość, jednostka,
     kolumny powinny być sformatowane.



14. Programujemy w C++. Kontenery STL.    powrót

Uwaga: rozwiązanie wysyłane po zakończeniu zajęć, będzie oceniane
z uwzględnieniem tego faktu.

Wykorzystanie biblioteki STL.


1. Napisać klasę P przechowującą wartości Nazwisko, Imie, Pesel.
2. Napisać funkcję, której argumentami są dwie listy obiektów typu P,
     funkca ta Å‚Ä…czy zawartość obu argumentów.
     usuwa wartoÅ›ci powtarzajÄ…ce siÄ™,
     sortuje wg wartoÅ›ci Pesel,
     zwraca w postaci listy.

3. W main, napisać test pokazujący skuteczność rozwiązania.



line
Ostatnia modyfikacja: Poniedziałek, 4 maja 2015