Spis treści JĘZYK C - TABLICE JEDNOWYMIAROWE, ŁAŃCUCHY ZNAKÓW. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Podobne dokumenty
Spis treści JĘZYK C - TABLICE JEDNOWYMIAROWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05Z

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF10Z

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF22

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

JĘZYK C - TABLICE DWUWYMIAROWE,

Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY. Metodyki i techniki programowania

Spis treści JĘZYK C - TABLICE DWUWYMIAROWE, OPERACJE NA TABLICACH. Metodyki i techniki programowania

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE. Informatyka 1

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Spis treści JĘZYK C - TABLICE DWUWYMIAROWE, OPERACJE NA TABLICACH. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - OPERATORY BITOWE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

Spis treści JĘZYK C - TABLICE DWU- I WIELOWYMIAROWE, OPERACJE NA TABLICACH. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE, INSTRUKCJA WARUNKOWA IF. Informatyka 1

Spis treści JĘZYK C - INSTRUKCJA SWITCH, OPERATORY BITOWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05

BHP JĘZYK C - INSTRUKCJE ITERACYJNE

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE. Metodyki i techniki programowania

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - ŚLEDZENIE WYKONANIA PROGRAMU, DEBUGGER. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

dr inż. Jarosław Forenc

Spis treści JĘZYK C - PLIKI BINARNE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF30

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Spis treści JĘZYK C - TABLICE JEDNOWYMIAROWE, ŁAŃCUCHY ZNAKÓW. Metodyki i techniki programowania. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści JĘZYK C - FUNKCJE. Metodyki i techniki programowania. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia MITP10

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE, ZAGNIEŻDŻANIE IF-ELSE.

13 JĘZYK C - OPERATOR WARUNKOWY,

Język C, tablice i funkcje (laboratorium, EE1-DI)

Spis treści JĘZYK C - WSKAŹNIKI, DYNAMICZNY PRZYDZIAŁ PAMIĘCI. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Język C, tablice i funkcje (laboratorium)

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 11. Elektrotechnika, semestr II rok akademicki 2008/2009

2 Przygotował: mgr inż. Maciej Lasota

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Podstawy programowania

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

ŁAŃCUCHY W JĘZYKU C/C++

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 7- sem.iii. M. Czyżak

Języki programowania obiektowego Nieobiektowe elementy języka C++

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

Podstawy programowania w języku C++

Tablice deklaracja, reprezentacja wewnętrzna

Programowanie strukturalne i obiektowe

Spis treści JĘZYK C - INSTRUKCJE ITERACYJNE FOR, WHILE I DO WHILE, ZAGNIEŻDŻANIE PĘTLI FOR, INSTRUKCJE CONTINUE, BREAK, I GOTO.

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

1 Podstawy c++ w pigułce.

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku

Spis treści PROGRAMOWANIE OBIEKTOWE W JĘZYKU C++: FUNKCJE ZAPRZYJAŹNIONE Z KLASĄ, PRZEŁADOWANIE OPERATORÓW. Informatyka 2

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

lekcja 8a Gry komputerowe MasterMind

Spis treści JĘZYK C - INSTRUKCJA SWITCH, OPERATORY BITOWE. Metodyki i techniki programowania. Instrukcja do pracowni specjalistycznej z przedmiotu

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Inicjacja tablicy jednowymiarowej

Tablice, funkcje - wprowadzenie

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Podstawy programowania 1

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Języki i metodyka programowania. Wprowadzenie do języka C

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Programowanie w języku Python. Grażyna Koba

Programowanie w C Typ wskaźnikowy do typu znakowego i operacje na łańcuchach

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

1 Podstawy c++ w pigułce.

Lab 9 Podstawy Programowania

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Spis treści OPERACJE WEJŚCIA-WYJŚCIA W JĘZYKU C++. STEROWANIE FORMATEM, MANIPULATORY. Informatyka 2

tablica: dane_liczbowe

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Tablice wielowymiarowe. Przykład tablica 2-wymiarowa. Przykład. Przykład 3-wymiarowy. Tak naprawdę nie istnieją w C! Rozważmy tablicę o rozmiarze 3x2

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Podstawy Programowania C++

Stałe i zmienne znakowe. Stała znakowa: znak

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

WYKŁAD 1 - KONSPEKT. Program wykładu:

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Podstawy programowania skrót z wykładów:

Programowanie w C Wartości pseudolosowe i pomiar czasu

Politechnika Białostocka

Podstawy Programowania

Spis treści TRYB GRAFICZNY SYSTEMU WINDOWS - PODSTAWY OBSŁUGI WYBRANEGO ŚRODOWISKA PROGRAMISTYCZNEGO. Informatyka 2

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Pliki. Informacje ogólne. Obsługa plików w języku C

Programowanie w języku C++ Agnieszka Nowak Brzezińska Laboratorium nr 2

Wskaźniki w C. Anna Gogolińska

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Transkrypt:

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