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