Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 1 Kod przedmiotu: ES1C200 009 (studia stacjonarne) JĘZYK C - TABLICE JEDNOWYMIAROWE, ŁAŃCUCHY ZNAKÓW Spis treści 1. Opis stanowiska... 3 1.1. Stosowana aparatura... 3 1.2. Oprogramowanie... 3 2. Wiadomości teoretyczne... 3 2.1. Tablica elementów... 3 2.2. Generowanie pseudolosowe elementów tablicy... 8 2.3. Inicjalizacja elementów tablicy... 10 2.4. Łańcuchy znaków... 11 2.5. Inicjalizacja łańcucha znaków... 12 2.6. Stała znakowa... 13 2.7. Funkcje do wprowadzania i wyprowadzania znaków... 14 2.8. Funkcje z pliku nagłówkowego string.h... 15 3. Przebieg ćwiczenia... 18 4. Literatura... 21 Numer ćwiczenia INF08 5. Zagadnienia na zaliczenie... 21 6. Wymagania BHP... 22 Materiały dydaktyczne przeznaczone dla studentów Wydziału Elektrycznego PB. Autor: dr inż. Jarosław Forenc Białystok 2013 Wydział Elektryczny, Politechnika Białostocka, 2013 Wszelkie prawa zastrzeżone. Żadna część tej publikacji nie może być kopiowana i odtwarzana w jakiejkolwiek formie i przy użyciu jakichkolwiek środków bez zgody posiadacza praw autorskich. Informatyka 1 2 z 23 Instrukcja INF08
1. Opis stanowiska 0 1 2 3 4 1.1. Stosowana aparatura Podczas zajęć wykorzystywany jest komputer klasy PC z systemem operacyjnym Microsoft Windows (XP/Vista/7). 1.2. Oprogramowanie Na komputerach zainstalowane jest środowisko programistyczne Microsoft Visual Studio 2008 Standard Edition lub Microsoft Visual Studio 2008 Express Edition zawierające kompilator Microsoft Visual C++ 2008. 2. Wiadomości teoretyczne 2.1. Tablica elementów Tablica elementów jest ciągłym obszarem pamięci, w którym te elementy są umieszczone. Głównym celem stosowania tablic jest zastąpienie wielu zmiennych tego samego typu jedną tablicą. Deklarując tablicę musimy podać: typ elementów, nazwę tablicy i liczbę elementów, np. int tab[5]; średnik rozmiar tablicy nazwa tablicy typ elementów tablicy Wyrażenie podane w nawiasach kwadratowych, określające rozmiar tablicy, musi w wyniku dawać dodatnią stałą całkowitoliczbową, a ponadto musi to być wartość znana już w fazie kompilacji (nie może to być zmienna). Powyższa deklaracja definiuje tablicę pięciu elementów typu int (Rys. 1). Jest to tablica jednowymiarowa, czyli tzw. wektor. tab[0] tab[1] tab[2] tab[3] tab[4] Rys. 1. Wektor 5-elementowy. Każdy element tablicy ma swój numer zwany indeksem, element zerowy (znajdujący się na początku tablicy) ma indeks 0 (zero), zaś ostatni N-1, gdzie N - rozmiar tablicy. Wartość indeksu pokazuje o ile elementów jest dany element odległy od początku tablicy. Jako indeks może występować wyrażenie, ale w wyniku musi ono dawać liczbę całkowitą. Nazwa tablicy jest adresem jej zerowego elementu (o indeksie 0) w pamięci komputera. Odwołania do elementów tablicy (odczytanie lub zapisanie wartości) wykonuje się za pomocą dwuargumentowego operatora indeksowania [ ], np. tab[1] - odwołanie do elementu tablicy o indeksie 1 indeks elementu (drugi argument operatora indeksowania) nazwa tablicy (pierwszy argument operatora indeksowania) Zapisanie wartości 5 do elementu tablicy tab o indeksie 1: tab[1] = 5; Odczytanie elementu tablicy tab o indeksie 1 i przypisanie jego wartości zmiennej o nazwie x: x = tab[1]; Przy odwołaniach do elementów tablicy kompilator nie sprawdza, czy piszemy lub czytamy poza obszarem pamięci przydzielonej na tablicę, np. Informatyka 1 3 z 23 Instrukcja INF08 Informatyka 1 4 z 23 Instrukcja INF08
int tab[5]; tab[5] = 10; W powyższym fragmencie programu zadeklarowano 5-elementową tablicę o nazwie tab. Odwołanie tab[5] jest błędne, gdyż nie istnieje element o indeksie 5. Kompilator nie zasygnalizuje błędu, tylko w obszarze pamięci za tablicą zapisze wartość 10. Operacje na tablicach wykonywane są najczęściej przy wykorzystaniu pętli for. Załóżmy, że chcemy 5-elementową tablicę liczb całkowitych wypełnić wartością 10. Kod realizujący taką operację może mieć następującą postać: int tab[5]; tab[0] = 10; tab[1] = 10; tab[2] = 10; tab[3] = 10; tab[4] = 10; Można to samo zrobić znacznie prościej, stosując pętlę for: int tab[5], i; for (i=0; i<5; i++) tab[i] = 10; Zmienna i przyjmuje wartości od 0 do 4, czyli takie same jak kolejne indeksy elementów tablicy. W przypadku wektorów przechowujących liczby istnieje kilka, najczęściej wykonywanych, operacji. Operacje te przedstawia poniższy program. Program wykonujący wybrane operacje na wektorze liczb całkowitych. #include <stdio.h> #define N 5 int main() int tab[n]; int i, min, max; /* wczytanie elementow tablicy */ for (i=0; i<n; i++) printf("podaj liczbe nr %d: ",i+1); scanf("%d",&tab[i]); /* wyswietlenie elementow tablicy */ printf("elementy tablicy: "); for (i=0; i<n; i++) printf("%d ", tab[i]); printf("\n"); /* wyswietlenie tablicy w odwrotnej kolejnosci*/ printf("tablica w odwrotnej kolejnosci: "); for (i=n-1; i>=0; i--) printf("%d ", tab[i]); printf("\n"); /* wyszukanie elementu o najmniejszej wartosci */ min = tab[0]; for (i=1; i<n; i++) if (tab[i]<min) min = tab[i]; printf("wartosc elementu najmniejszego: %d\n",min); /* wyszukanie elementu o najwiekszej wartosci */ max = tab[0]; for (i=1; i<n; i++) if (tab[i]>max) max = tab[i]; Informatyka 1 5 z 23 Instrukcja INF08 Informatyka 1 6 z 23 Instrukcja INF08
printf("wartosc elementu najwiekszego: %d\n",max); return 0; printf("tablica w odwrotnej kolejnosci: "); for (i=n-1; i>=0; i--) printf("%d ", tab[i]); Rozmiar tablicy określony został przy użyciu dyrektywy preprocesora #define: #define N 5 dzięki czemu zmiana rozmiaru tablicy będzie wymagała tylko zmiany wartości w tej dyrektywie, a nie w każdym innym miejscu programu, gdzie pojawia się rozmiar tablicy. Dotyczy to zwłaszcza warunków w pętlach for. W programie wykonywane są następujące operacje na tablicy: - wczytanie elementów tablicy - w pętli for wyświetlamy komunikat Podaj liczbę nr, a następnie funkcją scanf() wczytujemy liczbę: for (i=0; i<n; i++) printf("podaj liczbe nr %d: ",i+1); scanf("%d",&tab[i]); - wyświetlenie elementów tablicy w jednym wierszu: - wyszukanie elementu o najmniejszej wartości - zakładamy, że zerowy element tablicy jest najmniejszy (min = tab[0]); przeglądamy pozostałe elementy tablicy; jeśli kolejny z elementów tablicy (tab[i]) jest mniejszy od dotychczasowego najmniejszego (min), to element ten staje się najmniejszym (min = tab[i]): min = tab[0]; for (i=1; i<n; i++) if (tab[i]<min) min = tab[i]; printf("wartosc elementu najmniejszego: %d\n",min); - wyszukanie elementu o największej wartości - odbywa się na takiej samej zasadzie jak wyszukanie elementu najmniejszego: max = tab[0]; for (i=1; i<n; i++) if (tab[i]>max) max = tab[i]; printf("wartosc elementu najwiekszego: %d\n",max); printf("elementy tablicy: "); for (i=0; i<n; i++) printf("%d ", tab[i]); - wyświetlenie elementów tablicy w odwrotnej kolejności - zmieniamy wyrażenia w pętli for, zmienna i będzie przyjmowała wartości od N-1 (ostatni element tablicy) do 0 (zerowy element tablicy): 2.2. Generowanie pseudolosowe elementów tablicy Elementy tablicy mogą być wygenerowane pseudolosowo, co pokazuje poniższy program. Generowanie pseudolosowe elementów tablicy. #include <stdio.h> #include <stdlib.h> #include <time.h> Informatyka 1 7 z 23 Instrukcja INF08 Informatyka 1 8 z 23 Instrukcja INF08
int main() int tab[10], i; srand(time(null)); for (i=0; i<10; i++) tab[i] = rand(); printf("%d ",tab[i]); return 0; Do generowania liczb pseudolosowych zastosowana została funkcja rand(): tab[i] = rand(); Pseudolosową liczbę całkowitą z przedziału a b otrzymamy używając funkcji rand() w następujący sposób: int x; x = rand() % (b a + 1) + a; 2.3. Inicjalizacja elementów tablicy Po zadeklarowaniu tablicy wartość jej elementów jest nieokreślona. Inicjalizacja elementów tablicy jest to nadanie wartości jej elementom od razu przy deklaracji. Inicjalizacja taka polega na umieszczeniu w deklaracji po znaku równości, ujętej w nawiasy klamrowe, listy wartości kolejnych jej elementów, np. int a[3] = 5,7,1; Funkcja ta zwraca pseudolosową liczbę całkowitą z zakresu: 0 RAND_MAX (32767). Zastosowanie jej w programie wymaga dołączenia pliku nagłówkowego stdlib.h. Przed użyciem funkcji rand() należy zainicjalizować generator liczb pseudolosowych wywołując funkcję srand(): srand(time(null)); do której przekazywana jest liczba inicjalizująca generator. Aby zapewnić unikalność generowania kolejnych liczb do funkcji srand() przekazywana jest wartość zwracana przez funkcję time(). Zastosowanie funkcji time() wymaga dołączenia pliku nagłówkowego time.h. Zmiana zakresu generowanych liczb odbywa się poprzez zastosowanie dzielenia modulo. Jeśli chcemy otrzymać liczby całkowite z zakresu 0 10, to wystarczy wartość zwracaną przez funkcję rand() podzielić modulo 11: int x; x = rand() % 11; Poszczególne elementy tablicy umieszczone są w nawiasach klamrowych i oddzielone od siebie przecinkami. Jako kolejne elementy mogą występować wyrażenia arytmetyczne. Tablice można inicjalizować tylko przy deklaracji. Jeśli wartości podanych w trakcie inicjalizacji jest mniej niż wynosi rozmiar tablicy, to pozostałe elementy tablicy wypełniane są zerami, np. int a[5] = 5,7,1; Tablica zadeklarowana bez podania rozmiaru, a zainicjowana ma liczbę elementów równą ilości inicjatorów, np. int a[] = 2,3,1,4; jest równoważne: int a[4] = 2,3,1,4; Informatyka 1 9 z 23 Instrukcja INF08 Informatyka 1 10 z 23 Instrukcja INF08
Program generujący N niepowtarzających się liczb całkowitych. #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 6 #define ZAKRES 49 int main() int lotto[n]; int i,j,x,powt; srand(time(null)); for (i=0; i<n; i++) do powt = 0; x = rand() % ZAKRES + 1; for (j=0; j<i; j++) if (lotto[j]==x) powt = 1; while (powt==1); Znaki cudzysłowu nie są częścią napisu, służą jedynie do określenia jego granic. W rzeczywistości łańcuch znaków jest tablicą, której elementami są pojedyncze znaki (tablica elementów typu char). Ostatnim elementem tablicy jest znak o kodzie 0 (stała liczbowa 0 lub stała znakowa \0 ), oznaczający koniec napisu (Rys. 2). Większość funkcji standardowych języka C dodaje automatycznie na końcu ten znak. "Pies" P i e s \0 Rys. 2. Tablica znaków. Rozmiar fizycznej pamięci przeznaczonej na napis musi być o jeden większy niż liczba znaków zawartych między znakami cudzysłowu. Deklaracja zmiennej mogącej przechowywać napis jest podobna do deklaracji zwykłej tablicy: typ zmienna[rozmiar]; Deklaracja tablicy, w której można przechowywać napisy o maksymalnej długości do 19 znaków: lotto[i] = x; char txt[20]; printf("wylosowane liczby: "); for (i=0; i<n; i++) printf("%3d, ",lotto[i]); return 0; 2.5. Inicjalizacja łańcucha znaków Deklarując łańcuch znaków możemy nadać mu wartość początkową, np. char txt[10] = "pies"; 2.4. Łańcuchy znaków Łańcuch znaków (napis, stała napisowa) jest to ciąg złożony z zera lub większej liczby znaków zawartych między znakami cudzysłowu, np. "napis" Rys. 3. Deklaracja i inicjalizacja tablicy znaków. Informatyka 1 11 z 23 Instrukcja INF08 Informatyka 1 12 z 23 Instrukcja INF08
To samo można uzyskać podając pojedyncze litery umieszczone w apostrofach, np. char txt[10] = 'P','i','e','s'; Deklarując napis można nie określać jego długości, kompilator przydzieli wtedy automatycznie odpowiedni rozmiar pamięci (uwzględniając ostatni znak \0 ): lub char *txt = "To jest napis"; Tabela 1. Wybrane kody ASCII. kod ASCII znak kod ASCII znak kod ASCII znak 48 0 65 A 97 a 49 1 66 B 98 b 50 2 67 C 99 c.................. 57 9 90 Z 122 z Pewne znaki niegraficzne mogą być reprezentowane w stałych znakowych przez sekwencje specjalne, które wyglądają jak dwa znaki, ale reprezentują tylko jeden znak: char txt[] = "To jest napis"; W powyższy sposób można nadawać wartość łańcuchowi znaków tylko przy jego deklaracji. Zatem błędnym jest poniższy zapis: '\n' nowy wiersz '\t' tabulator poziomy '\v' tabulator pionowy '\a' alarm '\\' \ (ang. backslash) '\'' apostrof '\"' cudzysłów '\?' znak zapytania char txt[10]; txt = "Pies"; Prawidłowy zapis wymaga wykorzystania funkcji strcpy() z pliku nagłówkowego string.h: char txt[10]; strcpy(txt,"pies"); Zapis A oznacza jeden znak, natomiast zapis A - dwa znaki, gdyż jest to napis kończący się znakiem \0. 2.7. Funkcje do wprowadzania i wyprowadzania znaków printf() Nagłówek: int printf(const char *format,...); - w funkcji printf() do wyświetlenia łańcucha znaków używamy: %s, zaś pojedynczego znaku - %c; 2.6. Stała znakowa scanf() Nagłówek: int scanf(const char *format,...); Stała znakowa jest to liczba całkowita. Taką stałą tworzy jeden znak ujęty w apostrofy, np. x. Wartością stałej znakowej jest wartość kodu ASCII (Tabela 1). - w funkcji scanf() do wczytania łańcucha znaków używamy: %s, zaś pojedynczego znaku - %c; Informatyka 1 13 z 23 Instrukcja INF08 Informatyka 1 14 z 23 Instrukcja INF08
gets() Nagłówek: char *gets(char *s); strchr() Nagłówek: char *strchr(const char *s, int c); - funkcja gets() wprowadza wiersz (ciąg znaków zakończony \n ) ze strumienia stdin (klawiatura) i umieszcza w obszarze pamięci wskazywanym przez wskaźnik s zastępując \n znakiem \0 ; - zwraca wskaźnik do początku wypełnianego obszaru, np. char bufor[80]; gets(bufor); puts() Nagłówek: int puts(const char *s); - funkcja puts() wypisuje na stdout (ekran) zawartość łańcucha znakowego (ciąg znaków zakończony znakiem \0 ), zastępując znak \0 znakiem \n, np. char bufor[80] = "to jest tekst"; puts(bufor); 2.8. Funkcje z pliku nagłówkowego string.h strlen() Nagłówek: size_t strlen(const char *s); - funkcja strlen() zwraca długość łańcucha znaków; - nie bierze pod uwagę znaku \0 ; - funkcja strchr() przeszukuje łańcuch s w celu znalezienia pierwszego wystąpienia znaku c; - zwraca wskaźnik do znalezionego znaku lub NULL, jeśli znak nie został znaleziony; strcmp() Nagłówek: int strcmp(const char *s1, const char *s2); - funkcja strcmp() porównuje łańcuchy s1 i s2 z rozróżnianiem wielkości liter, - zwraca 0, gdy s1=s2, wartość mniejszą od zera, gdy s1<s2 i wartość większą od zera, gdy s1>s2; strcmpi() Nagłówek: int strcmpi(const char *s1, const char *s2); - funkcja strcmpi() działa jak strcmp(), ale bez rozróżniania wielkości liter; strlwr() Nagłówek: char *strlwr(char *s); - funkcja strlwr() zamienia w łańcuchu s duże litery na małe; strrev() Nagłówek: char *strrev(char *s); - funkcja strrev() odwraca kolejność znaków w łańcuchu s; strset() Nagłówek: char *strset(char *s, int c); strcpy() Nagłówek: char *strcpy(char *s1, const char *s2); - funkcja strset() wypełnia łańcuch s znakiem c; - funkcja strcpy() kopiuje łańcuch s2 do łańcucha s1; strstr() Nagłówek: char *strstr(const char *s1, const char *s2); strcat() Nagłówek: char *strcat(char *s1, const char *s2); - funkcja strcat() dołącza do łańcucha s1 łańcuch s2; - funkcja strstr() przeszukuje łańcuch s1 w celu odnalezienia podłańcucha s2 zwracając wskazanie do elementu łańcucha s1, od którego zaczynają się znaki takie same jak w łańcuchu s2, lub NULL, gdy s2 nie występuje w s1; Informatyka 1 15 z 23 Instrukcja INF08 Informatyka 1 16 z 23 Instrukcja INF08
strupr() Nagłówek: char *strupr(char *s); 3. Przebieg ćwiczenia - funkcja strupr() zamienia w łańcuchu s litery małe na duże. Poniższy program pokazuje przykładowe wykorzystanie funkcji z pliku nagłówkowego string.h. Przykładowe operacje na łańcuchu znaków. #include <stdio.h> #include <string.h> int main() char napis1[] = "tekst w buforze"; char napis2[20]; int dlugosc; printf("napis1: %s \n",napis1); dlugosc = strlen(napis1); printf("liczba znakow w napis1: %d \n",dlugosc); strupr(napis1); printf("napis1 (duze litery): %s \n",napis1); strlwr(napis1); printf("napis1 (male litery): %s \n",napis1); strcpy(napis2,napis1); printf("napis2: %s \n",napis2); strrev(napis2); printf("napis2 (odwrocony): %s \n",napis2); return 0; W wyniku uruchomienia powyższego programu na ekranie pojawi się: napis1: tekst w buforze liczba znakow w napis1: 15 napis1 (duze litery): TEKST W BUFORZE napis1 (male litery): tekst w buforze napis2: tekst w buforze napis2 (odwrocony): ezrofub w tsket Na pracowni specjalistycznej należy wykonać wybrane zadania wskazane przez prowadzącego zajęcia. W różnych grupach mogą być wykonywane różne zadania. 1. Napisz program, który do 10 elementowej tablicy liczb całkowitych zapisze wygenerowane pseudolosowo liczby z zakresu 0, 9. Liczby nie mogą powtarzać się. Wyświetl zawartość tablicy. Podaj ile razy generowano liczbę dla kolejnego elementu tablicy. 2. Napisz program, który dla N-elementowego wektora liczb całkowitych wygeneruje pseudolosowo elementy z zakresu 0, 10, wyświetli zawartość wektora oraz obliczy ile razy każda liczba występuje w wektorze. 3. Dane są dwa N-elementowe wektory A i B zawierające wygenerowane pseudolosowo liczby całkowite z zakresu 0, 99 : - utwórz wektor C zawierający na odpowiedniej pozycji jeden z elementów wektorów A i B, wybierając ten element z wektora A lub B, który jest większy, - utwórz wektor D będący sumą wektorów A i B, - oblicz iloczyn skalarny wektorów A i B. Rozmiar wektorów (N) zadeklaruj jako stałą (#define). Wyświetl wektory A, B, C i D. 4. Tablica OCENY przechowuje średnie arytmetyczne ocen N-kandydatów na studia. Indeksy elementów tablicy są jednocześnie numerami kandydatów. Na studia przyjmowane są osoby, których średnia ocen jest większa lub równa 4,0. Napisz program, który wyświetli: - listę osób przyjętych na studia zawierającą numer kandydata i średnią jego ocen, Informatyka 1 17 z 23 Instrukcja INF08 Informatyka 1 18 z 23 Instrukcja INF08
- listę osób nie przyjętych na studia zawierającą numer kandydata i średnią jego ocen, - liczbę osób przyjętych na studia i liczbę osób nie przyjętych na studia. Średnie ocen wygeneruj pseudolosowo z zakresu następującej formuły: 2, 6, używając OCENY[i] = 4.0*rand()/RAND_MAX + 2.0; (1) 5. W pewnym pomieszczeniu przeprowadzono pomiar temperatury. Temperaturę mierzono co godzinę (od godz. 0 do 23). Wyniki pomiarów umieszczono w tablicy T. Kolejne indeksy elementów tablicy określają jednocześnie godzinę pomiaru. Zakładamy, że wyniki pomiarów nie powtarzają się. Napisz program który: - poda godzinę, o której temperatura była najwyższa oraz godzinę, o której temperatura była najniższa w ciągu całej doby, - obliczy i wyświetli średnią temperaturę w ciągu doby, - obliczy i wyświetli największą różnicę temperatur, - poda informację, czy temperatura w ciągu doby spadła poniżej zera stopni. Elementy tablicy oblicz na podstawie wzoru: T[i] = sin(i/8-10)*cos(i/8-10)*30+10; (i = 0..23) (2) 6. Tablica P przechowuje wyniki N-pomiarów wartości chwilowych napięcia na pewnym dwójniku RLC. Napisz program który: - zapisze do tablicy P wartości chwilowe napięcia zgodnie z poniższym wzorem: P[i] = 10.0*sin((i+5.0)/5.0); (3) - obliczy i wyświetli największą, najmniejszą i średnią wartość zmierzonych napięć, 7. Napisz program wyświetlający tablicę kodów ASCII (od 30 do 254). W jednym wierszu umieść 9 kodów ASCII. Na ekranie ma być wyświetlona informacja w postaci: kod znak, np. 97 - a. 8. Napisz program zamieniający liczbę dwójkową na liczbę dziesiętną. Liczbę dwójkową wczytaj z klawiatury jako napis. 9. Napisz program, który podaną przez użytkownika dodatnią liczbę całkowitą wyświetli w postaci liczby dwójkowej. 10. Napisz program wyświetlający dla zadanego x (całkowitego, dodatniego) wszystkie liczby od 0 do x w kodzie dwójkowym w postaci: 0 --> 0 1 --> 1 2 --> 10 3 --> 11 4 --> 100... 11. Napisz program, który wczytuje do łańcucha znaków tekst z klawiatury (jeden wiersz), a następnie usuwa wszystkie znaki spacji znajdujące się na początku tekstu i na jego końcu, np. " Ala ma kota " "Ala ma kota " 12. Napisz program wczytujący z klawiatury do 10 linii tekstu. Wczytywanie zostaje zakończone po wczytaniu 10 linii lub po wprowadzeniu pustego łańcucha (naciśnięcie klawisza ENTER). Wyświetl wczytane linie w kolejności od ostatniej do pierwszej. 13. Napisz program, który będzie wczytywał, wyświetlał i zliczał znaki dopóki nie zostanie wczytany znak @. Wyświetl na koniec liczbę wczytanych znaków. - obliczy i wyświetli liczbę pomiarów, dla których wartość chwilowa napięcia była większa od wartości średniej napięcia, - zastąpi w tablicy P wszystkie ujemne wartości napięcia wartością zero. Informatyka 1 19 z 23 Instrukcja INF08 Informatyka 1 20 z 23 Instrukcja INF08
14. Napisz program, który będzie wczytywał ciąg znaków składający się z zer i jedynek. Następnie program powinien wyznaczyć liczbę serii w ciągu. Seria w ciągu, to podciąg złożony z takich samych znaków. Przykład wywołania programu: Podaj ciag: 0011101010011 Liczba serii: 8 4. Literatura [1] Kernighan B.W., Ritchie D.M.: Język ANSI C. Programowanie. Wydanie II. Helion, Gliwice, 2010. [2] Prata S.: Język C. Szkoła programowania. Wydanie V. Helion, Gliwice, 2006. [3] King K.N.: Język C. Nowoczesne programowanie. Wydanie II. Helion, Gliwice, 2011. [4] Summit S.: Programowanie w języku C. FAQ. Helion, Gliwice, 2003. [5] Wileczek R.: Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows. Helion, Gliwice, 2009. 5. Zagadnienia na zaliczenie 1. Omów sposób deklarowania tablic jednowymiarowych (wektorów) w języku C oraz odwoływania się do elementów tych tablic. 2. Wyjaśnij, jak odszukać w tablicy jednowymiarowej element o najmniejszej i element o największej wartości. 3. W jaki sposób w języku C można generować pseudolosowe liczby całkowite i rzeczywiste z określonego zakresu? 4. Opisz inicjalizację elementów tablicy jednowymiarowej. 5. Opisz sposób przechowywania napisów (tekstów) w języku C. 6. Przedstaw sposoby inicjalizacji tablicy znaków. 7. Scharakteryzuj funkcje znajdujące się w pliku nagłówkowym string.h. 6. Wymagania BHP Warunkiem przystąpienia do praktycznej realizacji ćwiczenia jest zapoznanie się z instrukcją BHP i instrukcją przeciw pożarową oraz przestrzeganie zasad w nich zawartych. W trakcie zajęć laboratoryjnych należy przestrzegać następujących zasad. - Sprawdzić, czy urządzenia dostępne na stanowisku laboratoryjnym są w stanie kompletnym, nie wskazującym na fizyczne uszkodzenie. - Jeżeli istnieje taka możliwość, należy dostosować warunki stanowiska do własnych potrzeb, ze względu na ergonomię. Monitor komputera ustawić w sposób zapewniający stałą i wygodną obserwację dla wszystkich członków zespołu. - Sprawdzić prawidłowość połączeń urządzeń. - Załączenie komputera może nastąpić po wyrażeniu zgody przez prowadzącego. - W trakcie pracy z komputerem zabronione jest spożywanie posiłków i picie napojów. - W przypadku zakończenia pracy należy zakończyć sesję przez wydanie polecenia wylogowania. Zamknięcie systemu operacyjnego może się odbywać tylko na wyraźne polecenie prowadzącego. - Zabronione jest dokonywanie jakichkolwiek przełączeń oraz wymiana elementów składowych stanowiska. - Zabroniona jest zmiana konfiguracji komputera, w tym systemu operacyjnego i programów użytkowych, która nie wynika z programu zajęć i nie jest wykonywana w porozumieniu z prowadzącym zajęcia. - W przypadku zaniku napięcia zasilającego należy niezwłocznie wyłączyć wszystkie urządzenia. Informatyka 1 21 z 23 Instrukcja INF08 Informatyka 1 22 z 23 Instrukcja INF08
- Stwierdzone wszelkie braki w wyposażeniu stanowiska oraz nieprawidłowości w funkcjonowaniu sprzętu należy przekazywać prowadzącemu zajęcia. - Zabrania się samodzielnego włączania, manipulowania i korzystania z urządzeń nie należących do danego ćwiczenia. - W przypadku wystąpienia porażenia prądem elektrycznym należy niezwłocznie wyłączyć zasilanie stanowiska. Przed odłączeniem napięcia nie dotykać porażonego. Informatyka 1 23 z 23 Instrukcja INF08