Laboratorium Piąte Programowanie w środowisku GNU/Linux

Transkrypt

Laboratorium Piąte Programowanie w środowisku GNU/Linux
Laboratorium Piąte
Programowanie w środowisku GNU/Linux
Wojciech Penar
5 maja 2012
Cel
Przyswojenie podstaw pisania i uruchamiania programów w środowisku GNU/Linux.
Wprowadzenie
Dzisiejsze ćwiczenia mają na celu wprowadzenie do pisania i uruchamiania programów w środowisku
Linux. Nastawione są na napisanie i uruchomienie szeregu “standardowych” programów, przerabianych
na rozmaitych kursach programowania. Nacisk położony jest na samodzielną kompilację i zapoznanie się
ze specyfiką uruchamiania aplikacji konsolowych w systemie Linux.
Zachęcam do generowania błędów i analizy pojawiających się komunikatów — zarówno na etapie
kompilacji jak i uruchamiania programów.
Przy wykonywaniu ćwiczeń zalecam wykorzystanie edytora tekstu z podświetlaniem (kolorowaniem)
składni. Możliwości takie dają vim, gedit (podstawowy edytor w środowisku Gnome) czy kate (standardowy edytor w środowisku KDE). Bardziej zaawansowani użytkownicy mogą spróbować zainteresować
się którymś z IDE (zintegrowanych środowisk programistycznych) wspomnianych w sekcji 3.
1
Ćwiczenia do wykonania
1. Napisz program wczytujący kilka liczb z klawiatury a następnie obliczający i wyświetlający na
ekranie ich sumę, iloczyn, itp. (np. potęgę, pierwiastek...). Zadbaj o właściwe formatowanie
(liczby całkowite, rzeczywiste).
Dla chętnych: przerób program tak, aby liczby można było podawać jako argumenty przy uruchamianiu programu1 .
2. Napisz program klasyfikujący wzrost osób tzn. pytający się o wzrost w cm a następnie wyświetlający jeden z podanych tekstów w zależności od przynależności do przedziału wartości:
niski < 150cm < średni < 180cm < wysoki
3. Napisz program wyznaczający pierwiastki (miejsca zerowe) trójmianu kwadratowego:
Ax2 + Bx + C = 0
4. Napisz program wczytujący znaki z klawiatury aż do momentu naciśnięcia klawisza ’k’. W trakcie
wczytywania należy zliczać ilość podanych znaków. Na zakończenie należy wyświetlić informacje:
• ile było podanych znaków (przed naciśnięciem ’k’)
• ile z tych znaków było dużymi literami.
1 Podpowiedź:
argc, argv.
1
5. Napisz program wczytujący kilka (np. 10) liczb rzeczywistych do tablicy, a następnie obliczający
średnią i sumę wszystkich liczb, a także wyznaczający największą i najmniejszą liczbę w tablicy.
Dla chętnych: dodaj funkcję sortowania2 oraz wyświetlania zawartości tablicy, zastanów się nad
możliwościami zapisu tablicy do pliku i jej późniejszego odczytu3 .
2
Materiały dodatkowe
Na stronie przedmiotu umieszczony jest “Wykład00” czyli coś pomiędzy wstępem w stylu “quick & dirty”,
a początkiem trochę dłuższego tekstu na temat programowania w środowisku GNU/Linux. Na chwilę
obecną jest to szkielet z minimalnym wypełnieniem, w przyszłości będzie rozbudowywany i zapewne
przyjmie bardziej konkretną formę.
Dla większości funkcji bibliotecznych dostępne są podręczniki man. Aby były dostępne, niezbędna
jest instalacja pakietów manpages-dev oraz manpages-dev-pl. Poza wszelkimi odmianami funkcji (np.
printf), znajdziemy tam opis argumentów, wartości zwracanych, a także — informację o potrzebnych
plikach nagłówkowych. Przypominam, że manuale związane z programowaniem znajdują się w sekcji 3
(man printf zwróci stronę podręcznika związaną z poleceniem printf, man 3 printf — opis rodziny
funkcji printf()).
3
Dla ciekawych świata
3.1
Środowiska programistyczne IDE
W systemie Linux dostępnych jest kilka środowisk programistycznych. Najbardziej rozbudowanym (i
znanym także z innych systemów operacyjnych z racji przenośności aplikacji napisanych w Javie) jest
Eclipse. Środowisko to (jak już wspomniałem — napisane w języku Java) standardowo wspiera Javę,
jednak po uzupełnieniu o odpowiednie dodatki (dostępne w pakietach dystrybucji) pozwala w sposób
“łatwy i przyjemny” tworzyć i uruchamiać programy w C/C++. Jego najpoważniejszą wadą jest “ociężałość” - Java i otwarta architektura powodują, że z jednej strony możliwości tego środowiska można
dowolnie rozbudowywać (np. programowanie w trybie graficznym na bazie diagramów klas znanych z inżynierii oprogramowania), z drugiej — bez przynajmniej 1GB pamięci operacyjnej można o komfortowej
pracy zapomnieć.
Innym ciekawym IDE jest MonoDevelop. Związane jest z środowiskiem Gnome, a wspiera m. in
takie języki jak C, C++ czy C#. Stosunkowo lekkie i przyjemne, ale brak wodotrysków.
Trzecim środowiskiem wartym uwagi jest KDevelop. Związany jest z środowiskiem graficznym KDE,
do odbiło się m. in. na przejściu ze wsparcia C/C++ i kilku innych języków programowania, na wsparcie
QT i C++, z bardzo dużym naciskiem na pisanie aplikacji właśnie dla środowiska KDE.
3.2
Dlaczego funkcja system() jest “zła”?
Bardzo popularnym sposobem radzenia sobie z terminalem tekstowym w środowisku Windows jest
umieszczenie na końcu programu (bądź w miejscu, gdzie chciano, by program “zaczekał”) wywołania
funkcji system("pause"); lub analogicznie system("clear"); w celu wyczyszczenia okna terminala.
Działanie takie jest uważane w najlepszym wypadku za nieeleganckie, w najgorszym — potencjalnie
niebezpieczne. Dlaczego? Zademonstruj, jak tak napisany program można wykorzystać do celów innych
niż przewidział programista4 .
2 Podpowiedź:
man qsort
czym się różni scanf() od fscanf() i czy na pewno trzeba użyć tej drugiej do odczytu pliku?
4 Najwyżej punktowana wersja: uzyskanie uprawnień administratora.
3 Podpowiedź:
2