Laboratorium 1: Wprowadzenie do środowiska

Sprawy organizacyjne

Podstawowe informacje:

  • Laboratorium jest częścią zajęć ze Wstępu do programowania. Szczegółowe zasady zaliczania przedmiotu ogłasza wykładowca.

  • Obecność na zajęciach jest obowiązkowa.

  • Pierwszych pięć tygodni zajęć laboratoryjnych poświęcamy na zapoznanie się ze środowiskiem pracy programisty i opanowanie umiejętności programowania w języku C w stopniu podstawowym.

  • W dalszej części semestru studenci samodzielnie pracują nad rozwiązaniem czterech zadań zaliczeniowych. Za każde z nich można zdobyć maksymalnie 20 pkt. Zadanie czwarte jest zadaniem poprawkowym. Jego oceną można poprawić najsłabszą ocenę z zadań od 1 do 3. Łącznie można więc zdobyć maksymalnie 60 pkt. Wykładowca uwzględni je, wystawiając ostateczną ocenę z przedmiotu.

  • Pracujemy w środowisku systemu operacyjnego Linux kompilując programy za pomocą kompilatora gcc.

Czas trwania zajęć może nie wystarczyć do napisania programów zaliczeniowych. Studenci, którzy chcą programować w domu, mają dwie możliwości.

  • Najprostszym rozwiązaniem jest zdalna praca na koncie wydziałowym. Pod Windows można to robić za pomocą programu PuTTY. Przyda się też dołączony do niego program PSCP pozwalający na przesyłanie plików.

  • Osoby, które nie mają możliwości pracy zdalnej, np. z powodu braku dostępu do Internetu, mogą zainstalować kompilator gcc na swoim komputerze.

Nie gwarantujemy, że wszystko, co będziemy robili na zajęciach laboratoryjnych, da się powtórzyć pod Windows. Studenci, którzy chcą mieć w domu możliwie wierną kopię środowiska, w którym prowadzone są zajęcia, mogą rozważyć instalację Linuxa. Nie oznacza to konieczności rezygnacji z Windows - oba systemy mogą współistnieć na jednym komputerze. Uprzedzamy jednak - instalacja nowego systemu operacyjnego nie zawsze jest łatwa.

Rozpoczęcie i zakończenie pracy

Po uruchomieniu lub zresetowaniu komputera, na ekranie pojawi się menu, z którego wybieramy system operacyjny (Linux). Następnie, w oknie dialogowym wpisujemy login i hasło, by uzyskać dostęp do indywidualnego konta użytkownika. Konta te zostały założone dla każdego studenta przed rozpoczęciem zajęć. Loginy i hasła powinny być znane.

Pracę kończymy, wybierając z menu Programy polecenie Zakończ sesję i dalej Wyloguj, Uruchom ponownie lub Wyłącz.

Podstawowe pojęcia

Zaczniemy od wprowadzenia pojęć, którymi będziemy się posługiwali w dalszej części zajęć. Uprzedzamy: pewne kwestie będą przedstawiane w uproszczeniu.

plik

Plik to zestaw danych, zwykle stanowiący logiczną całość. Programy również przechowywane są w postaci plików.

system plików

System operacyjny organizuje pliki w system plików.

katalog

W systemie plików pliki grupowane są w katalogi.

drzewo katalogów

Katalogi tworzą strukturę drzewiastą nazywaną drzewem katalogów.

katalog główny

Korzeniem drzewa katalogów jest katalog główny.

katalog domowy

Każdy użytkownik ma w systemie plików swój własny katalog nazywany katalogiem domowym.

katalog aktualny

Podczas pracy z systemem plików dla każdego użytkownika jest określony katalog aktualny, czyli katalog, w którym użytkownik się znajduje.

ścieżka dostępu

Plik, z którego chcemy skorzystać wskazujemy, podając ścieżkę dostępu. Ścieżka składa się z ciągu nazw katalogów rozdzielonych znakami '/'. Jeśli ścieżka zaczyna się od '/', to opisuje drogę do pliku od katalogu głównego, wpp. od katalogu aktualnego.

W ścieżce dostępu może wystąpić '~' oznaczające katalog domowy użytkownika, '.' oznaczające katalog aktualny i '..' oznaczające katalog, w którym znajduje się katalog aktualny.

Operacje w systemie plików, posługiwanie się konsolą

Prosimy o otworzenie okna konsoli przez wybranie z menu Programy części Terminale i dalej Konsola.

Konsola to program wykonujący polecenia wprowadzane przez użytkownika. Przydadzą się nam:

ls

Wyświetla zawartość aktualnego katalogu. Z opcją -l podaje dodatkowe informacje o elementach katalogu, m. in. rozmiar pliku, prawa dostępu.

Polecenie ls można wywołać z argumentem wskazującym, o których elementach katalogu chcemy uzyskać informacje. W argumencie tym znak '?' zastępuje dowolny znak a '*' dowolny ciąg znaków. Np. polecenie ls -l *.c poda informacje o plikach, których nazwa ma rozszerzenie .c.

pwd

Podaje katalog aktualny.

cd nazwa

Zmienia katalog aktualny na katalog o podanej nazwie.

cp nazwa1 nazwa2

Tworzy kopię pliku nazwa1 nadając jej nazwę nazwa2.

mv nazwa1 nazwa2

Zmienia nazwę pliku nazwa1 na nazwa2.

rm nazwa

Usuwa plik nazwa.

mkdir nazwa

Tworzy katalog o nazwie nazwa.

rmdir nazwa

Usuwa katalog o nazwie nazwa.

touch nazwa

Zmienia datę ostatniej modyfikacji pliku o podanej nazwie. Jeśli plik nie istnieje, tworzy go.

cat nazwa

Wypisuje na wyjście zawartość pliku nazwa.

Argumentem polecenia cat może też być wiele nazw plików. Wypisywana jest wówczas zawartość każdego z nich.

echo napis

Wypisuje swój argument.

man polecenie

Podaje opis wskazanego polecenia.

Naciskanie strzałek w górę i w dół pozwala na przeglądanie historii wprowadzanych poleceń. Oszczędza to pracy, gdy chcemy ponownie wykonać polecenie. Pisanie poleceń ułatwia też klawisz tabulacji, którego naciśnięcie powoduje uzupełnienie nazwy pliku.

Prosimy o przećwiczenie opisanych powyżej poleceń.

Przygotowanie środowiska pracy programisty

Kompilacja to tworzenie programu wykonywalnego na podstawie kodu źródłowego. Narzędzie, które taką operację wykonuje, nazywamy kompilatorem. Na zajęciach laboratoryjnych ze Wstępu do programowania posługujemy się kompilatorem gcc.

Kompilator gcc będziemy uruchamiali w tzw. trybie wsadowym, np. za pomocą polecenia gcc nazwa.c, gdzie nazwa.c to nazwa pliku z kodem źródłowym.

Innym sposobem pracy z kompilatorem jest posłużenie się tzw. zintegrowanym środowiskiem programistycznym, będącym połączeniem kompilatora, edytora tekstu i innych narzędzi. Na razie nie będziemy z takich środowisk korzystali.

Praca programisty polega na wielokrotnym powtarzaniu cyklu "edycja kodu źródłowego - kompilacja programu - testowanie". By proces ten przebiegał sprawnie, warto otworzyć na ekranie dwa okna. Jednym z nich będzie okno konsoli, w którym programy kompilujemy i testujemy. W drugim oknie uruchamiamy edytor tekstu.

Na początek dobrym wyborem jest edytor KWrite, który można znaleźć w menu Programy i dalej Akcesoria, Edytory i KWrite. Ma on wszystkie niezbędne operacje edycyjne, podświetla składnię programów w C, potrafi numerować wiersze (trzeba wybrać odpowiednią opcję). Oczywiście w przyszłości można zmienić ten edytor na inny.

Edytowanie i kompilowanie programu

Prosimy o wpisanie w edytorze tekstu programu:

#include <stdio.h>
 
int main(void) {
    printf("Cześć !\n");
    return 0;
}

i zapisanie go w pliku o nazwie czesc.c.

Prosimy o jego samodzielne wpisanie a nie skopiowanie z okna przeglądarki do edytora tekstu.

Przechodzimy do okna konsoli i wpisujemy polecenia:

gcc czesc.c
ls -l

Jeśli nie było błędów, powstanie plik a.out. To program wykonywalny (w Linuxie pliki z programami wykonywalnymi nie mają rozszerzenia .exe).

Kompilator można też uruchomić poleceniem:

gcc czesc.c -o czesc

Program wykonywalny zostanie wówczas zapisany w pliku o nazwie czesc. Dalej będziemy zakładali taki właśnie sposób uruchomienia kompilatora.

Uruchamiamy program:

./czesc

Osobom, które dotąd korzystały z systemu Windows, dziwna może się wydawać konieczność poprzedzania nazwy programu znakami './' wskazującymi, że chodzi nam o program z katalogu aktualnego. Jest to spowodowane względami bezpieczeństwa. Gdyby system operacyjny domyślnie uruchamiał programy z aktualnego katalogu, byłoby możliwe podszycie się pod któryś z programów "standardowych" przez program pozostawiony w katalogu, w którym znalazł się użytkownik.

Zobaczymy, co się dzieje, gdy program jest błędny. Prosimy o usunięcie średnika po return 0 i ponowne skompilowanie programu. Dostaniemy komunikat:

czesc.c: In function ‘main’:
czesc.c:6:1: error: expected ‘;’ before ‘}’ token
 }
 ^

Poprawmy błąd i ponownie skompilujmy program.

Zadanie 1: Największa liczba błędów

Operacją edycyjną nazwiemy usunięcie jednego znaku lub wstawienie znaku do tekstu. Prosimy o znalezienie operacji edycyjnej na kodzie źródłowym zapisanym w pliku czesc.c, która spowoduje największą liczbę komunikatów o błędach.

Uruchamianie programu, standardowe wejście i wyjście

Prosimy o wpisanie poniższego programu:

#include <stdio.h>
 
int main(void) {
    int x;
 
    scanf("%d", &x);
    printf("%d\n", 2 * x);
    return 0;
}

i zapisanie go w pliku o nazwie dwarazy.c.

Kompilujemy program poleceniem:

gcc dwarazy.c -o dwarazy

i uruchamiamy za pomocą:

./dwarazy

a następnie wpisujemy jakąś liczbę całkowitą i naciskamy klawisz Enter.

Każdy program ma źródło danych nazywane standardowym wejściem i miejsce, w które kieruje wyniki, nazywane standardowym wyjściem. Domyślnie wejściem programu jest klawiatura a wyjściem okno konsoli.

Za pomocą znaku '>' można zmienić (przekierować) wyjście programu. Prosimy o uruchomienie:

./dwarazy > plik.txt

Wynik programu dwarazy trafi do pliku o nazwie plik.txt. Jego zawartość możemy obejrzeć za pomocą polecenia cat:

cat plik.txt

Przekierowanie za pomocą '>' wyniku programu do pliku, który już istnieje, spowoduje zamazanie jego zawartości. Jeśli chcemy tego uniknąć, możemy się posłużyć '>>', np.

./dwarazy >> plik.txt

Wynik programu zostanie wówczas dopisany na koniec pliku o podanej nazwie.

Wejście programu przekierowujemy za pomocą '<', np.

./dwarazy < plik.txt

W jednym poleceniu można też przekierować jednocześnie wejście i wyjście programu:

./dwarazy < plik.txt > inny.txt

Wyjście jednego programu można połączyć z wejściem innego za pomocą '|'. Prosimy o przetestowanie polecenia:

./dwarazy | ./dwarazy

a następnie:

./dwarazy | ./dwarazy | ./dwarazy | ./dwarazy

Prosimy też o uruchomienie:

echo 5 | ./dwarazy

Zadanie 2: Nieprawidłowy wynik programu

Jaka jest najmniejsza nieujemna liczba całkowita, dla której program dwarazy daje wynik niezgodny z oczekiwaniami ?

Praca samodzielna

Czas, który pozostanie do końca zajęć, można wykorzystać na pracę samodzielną. Zachęcamy zwłaszcza do zapoznania się z opcjami edytora KWrite i programu Midnight Commander, który można znaleźć w menu Programy, dalej Akcesoria i Menedżery plików, albo po prostu wpisać mc na konsoli.

Można też sprawdzić inne dostępne narzędzia, np. edytory tekstu. Być może znajdzie się tam taki, który będzie nam odpowiadał bardziej, niż KWrite. Warty polecenia jest np. edytor Kate.

Prosimy o uruchomienie przeglądarki internetowej, np. za pomocą polecenia Programy, Sieć, Przeglądarki WWW i dalej Iceweasel i zajrzenie na strony wazniak.mimuw.edu.pl, smurf.mimuw.edu.pl i moodle.mimuw.edu.pl.

Przypominamy o konieczności wylogowania się na zakończenie zajęć.