Informatyka 1 Tablica elementów Deklaracja tablicy Odwołania do
Transkrypt
Informatyka 1 Tablica elementów Deklaracja tablicy Odwołania do
Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 2/20 Tablica elementów Informatyka 1 ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu Politechnika Białostocka - Wydział Elektryczny wektor Elektrotechnika, semestr II, studia stacjonarne I stopnia Rok akademicki 2014/2015 Pracownia nr 10 (08/11.05.2015) 1.2 macierz 2.5 2.0 10.0 -0.1 4.3 6.2 -5.1 0.0 12.2 4.1 -2.2 dr inż. Jarosław Forenc Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 3/20 Deklaracja tablicy Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 4/20 Odwołania do elementów tablicy [ ] - dwuargumentowy operator indeksowania int tab[5]; rozmiar nazwa typ elementów tab[1]; indeks elementu (drugi argument operatora) nazwa tablicy (pierwszy argument operatora) indeks rozmiar tablicy to wartość: – całkowita, dodatnia – znana na etapie kompilacji programu (stała liczbowa: 5, #define N 5, const int n = 5;) 0 1 2 3 4 tab[0] tab[1] tab[2] tab[3] tab[4] int tab[5]; int tab[N]; int tab[n]; indeks: – stała liczbowa, np. 0, 1, 10 – nazwa zmiennej, np. i, idx – wyrażenie, np. i*j+5 Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 5/20 Przykład dr inż. Jarosław Forenc 6/20 Odwołania do elementów tablicy #include <stdio.h> Liczba: 15, 15 int main() { int x, tab[5]; tab[1] = 15; x = tab[1]; Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 przy odwołaniach do elementów tablicy kompilator nie sprawdza poprawności indeksów 0 int tab[5]; /* zapisanie wartości do tablicy */ /* odczytanie wartości z tablicy */ 1 2 3 4 tab[5] = 10; tab[0] tab[1] tab[2] tab[3] tab[4] - błąd!!! - nie istnieje element tab[5] printf("Liczba: %d, %d\n", x, tab[1]); kompilator nie zasygnalizuje błędu i wykona operację return 0; } Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 7/20 Odwołania do elementów tablicy zapisujemy do wszystkich elementów tablicy taką samą wartość: 10 int tab[5]; int tab[5], i; tab[0] = 10; tab[1] = 10; tab[2] = 10; tab[3] = 10; tab[4] = 10; for (i=0; i<5; i++) tab[i] = 10; Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 8/20 Przykład - operacje na wektorze #include <stdio.h> #define N 10 int main() { int tab[N]; int i; /* wczytanie elementów wektora */ for (i=0; i<N; i++) { printf("Podaj liczbe nr %d: ",i+1); scanf("%d",&tab[i]); } Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 9/20 Przykład - operacje na wektorze #include <stdio.h> #define N 10 int main() { int tab[N]; int i; /* wczytanie elementów wektora */ for (i=0; i<N; i++) { printf("Podaj liczbe nr %d: ",i+1); scanf("%d",&tab[i]); } Podaj liczbe nr Podaj liczbe nr Podaj liczbe nr Podaj liczbe nr Podaj liczbe nr Podaj liczbe nr Podaj liczbe nr Podaj liczbe nr Podaj liczbe nr Podaj liczbe nr Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 10/20 Przykład - operacje na wektorze 1: 15 2: 38 3: 23 4: 96 5: 12 6: 40 7: 33 8: 67 9: 92 10: 12 /* wyświetlenie elementów wektora */ printf("Elementy wektora:\n"); for (i=0; i<N; i++) printf("%4d", tab[i]); printf("\n"); Elementy wektora: 15 38 23 96 12 40 33 67 92 12 0 1 2 3 4 5 6 7 8 9 15 38 23 96 12 40 33 67 92 12 Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 11/20 Przykład - operacje na wektorze /* suma i średnia arytmetyczna elementów wektora */ int suma = 0; float srednia; for (i=0; i<N; i++) suma = suma + tab[i]; srednia = (float) suma/N; printf("Suma: %d, srednia: %f\n", suma, srednia); Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 N = 10 dr inż. Jarosław Forenc 12/20 Przykład - operacje na wektorze /* generowanie pseudolosowe elementów wektora */ srand(time(NULL)); /* stdlib.h, time.h */ for (i=0; i<N; i++) tab[i] = rand() % 100; /* stdlib.h */ 4 82 17 96 87 79 18 10 11 25 Suma: 428, srednia: 42.799999 srand(time(NULL)); - inicjalizacja generatora 0 1 2 3 4 5 6 7 8 rand() - zwraca liczbę pseudolosową z zakresu 0 ... 32767 9 15 38 23 96 12 40 33 67 92 12 N = 10 rand() % 100 - zwraca liczbę pseudolosową z zakresu 0 ... 99 Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 13/20 Inicjalizacja wektora Łańcuch znaków (ciąg znaków, napis, C-string) – ciąg złożony z zera lub większej liczby znaków zawartych między znakami cudzysłowu "Pies" int tab[5] = { 1, 2, 3 }; - błąd kompilacji int tab[] = { 1, 2, 3, 4, 5 }; Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 14/20 Łańcuchy znaków w C int tab[5] = { 1, 2, 3, 4, 5 }; int tab[5] = { 1, 2, 3, 4, 5, 6 }; Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 Implementacja - tablica, której elementami są pojedyncze znaki (typ char) Ostatni znak (\0, liczba zero) oznacza koniec napisu dr inż. Jarosław Forenc 15/20 Łańcuchy znaków w C W rzeczywistości w tablicy zamiast znaków przechowywane są odpowiadające im kody ASCII Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 16/20 Łańcuchy znaków w C - deklaracja Deklaracja zmiennej przechowującej napis char nazwa_zmiennej[rozmiar]; Przykład: chat txt[10]; Tablica txt może przechowywać napisy o maksymalnej długości do 9 znaków Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 17/20 Łańcuchy znaków w C - inicjalizacja Inicjalizacja łańcucha znaków dr inż. Jarosław Forenc 18/20 Łańcuchy znaków w C Inicjalizacja możliwa jest tylko przy deklaracji char txt[10]; txt = ”Pies”; /* BŁĄD!!! */ char txt1[10] = "Pies"; char txt2[10] = {'P','i','e','s'}; char txt3[10] = {80,105,101,115}; Pozostałe elementy tablicy otrzymują wartość zero Przypisanie zmiennej txt wartości ”Pies” wymaga zastosowania funkcji strcpy() z pliku nagłówkowego string.h char txt[10]; strcpy(txt,”Pies”); char txt4[] = "Pies"; char *txt5 = "Pies"; Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 dr inż. Jarosław Forenc 19/20 Łańcuchy znaków w C - string.h strcpy() - kopiuje jeden łańcuch znaków do drugiego Informatyka 1, studia stacjonarne I stopnia Rok akademicki 2013/2014, Pracownia nr 10 Wyświetlenie i wczytanie tekstu Wyświetlenie tekstu funkcją printf() wymaga specyfikatora formatu %s strlen() - zwraca długość łańcucha znaków (bez ’\0’) strcat() – dołącza jeden łańcuch znaków do drugiego char napis[15] = ”Jan Kowalski”; printf(”Osoba: %s\n”, napis); strcmp() – porównuje dwa łańcuchy strcmpi() – porównuje dwa łańcuchy (nie rozróżnia wielkość liter) strlwr() – zamienia wielkie litery na małe strupr() – zamienia małe litery na wielkie dr inż. Jarosław Forenc 20/20 Wczytanie tekstu funkcją scanf() char napis[15]; scanf(”%s”, napis); brak znaku &