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 &