Informatyka
Informatyka (EDS1B1007) (EDS1B1007)
Informatyka
Informatyka (EDS1B1007) (EDS1B1007)
Politechnika Białostocka
Politechnika Białostocka -- Wydział Elektryczny Wydział Elektryczny
Elektrotechnika, semestr III, studia stacjonarne I stopnia, dualne Elektrotechnika, semestr III, studia stacjonarne I stopnia, dualne
Rok akademicki 2020/2021 Rok akademicki 2020/2021 Rok akademicki 2020/2021 Rok akademicki 2020/2021
Pracownia nr 6 (18.11.2020) Pracownia nr 6 (18.11.2020)
dr inż. Jarosław Forenc
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 2/16
Język C
Język C -- deklaracja tablica dwuwymiarowej deklaracja tablica dwuwymiarowej
float tab[3][4]; 0 1 2 3
float tab[3][4];
nazwa liczba kolumn
typ elementów liczba wierszy
0 1 2 3
0 1 2
indeks kolumny
indeks wiersza
Rozmiar tablicy (liczba wierszy, liczba kolumn) to wartość:
– całkowita, dodatnia
– znana na etapie kompilacji programu
(stała liczbowa: 5, #define N 5, const int n = 5;)
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 3/16
Język C
Język C -- odwołania do elementów macierzy odwołania do elementów macierzy
[ ] - dwuargumentowy operator indeksowania
indeks (numer) kolumny
nazwa tablicy
[ ] dwuargumentowy operator indeksowania
tab[1][2];
Indeks:
indeks (numer) wiersza
– stała liczbowa, np. 0, 1, 10
– nazwa zmiennej, np. i, idx
– wyrażenie, np. i*j+5
Brak sprawdzania poprawności indeksów!
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 4/16
Język C
Język C -- inicjalizacja elementów macierzy inicjalizacja elementów macierzy
0 1 2
int T[2][3] = {{1,2,3},{4,5,6}};
int T[2][3] {1,2,3,4};
int T[2][3] = {1,2,3,4,5,6};
1 0
2 3 1 2
4 5 6
0 1
int T[2][3] = {1,2,3,4};
int T[2][3] = {{1},{4,5}};
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 5/16
Język C
Język C -- inicjalizacja elementów macierzy inicjalizacja elementów macierzy
0 0
0 0 1 2
int T[2][3] = {0};
0int T[][3] = {{1,2,3},{4,5,6}};
1 0
2 3 1 2
4 5 6
0 1
0 0 0
0 0 0
0 1
wyzerowanie elementów macierzy
pominięcie liczby wierszy
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 6/16
Język C
Język C -- operacje na macierzy operacje na macierzy
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 3 /* liczba wierszy */
#define M 3 /* liczba kolumn */
int main(void) {
M
int tab[N][M];
int i, j;
0 1 2
0
1
2 N
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 7/16
Język C
Język C -- operacje na macierzy operacje na macierzy
/* generowanie pseudolosowe elementów macierzy */
/* generowanie pseudolosowe elementów macierzy */
srand((unsigned int) time(NULL));
for (i=0; i<N; i++) for (j=0; j<M; j++)
tab[i][j] = rand() % 10;
M
9
0
3 1
1 2
6 4 8
9 4 6
0
1
2 N
0 1 2
0
1
2
kolejność zapisywania wartości elementów macierzy (wierszami)
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 8/16
Język C
Język C -- operacje na macierzy operacje na macierzy
/* generowanie pseudolosowe elementów macierzy */
/* generowanie pseudolosowe elementów macierzy */
srand((unsigned int) time(NULL));
for (j=0; j<M; j++) for (i=0; i<N; i++)
tab[i][j] = rand() % 10;
M
9
0
3 1
1 2
6 4 8
9 4 6
0
1
2
kolejność zapisywania
Nwartości elementów
macierzy (kolumnami)
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 9/16
Program INF_D06_1: operacje na tablicy Program INF_D06_1: operacje na tablicy
tablica wypełniona zerami
0
0
0 0
1 2
0 0 0
0
1
N
M
0 0 0 0
0 0 0 0
3 4 5 6
0 0 0
2
N
0 0 0 0
0 0 0 0 0 0 0
3
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 10/16
Program INF_D06_1: operacje na tablicy Program INF_D06_1: operacje na tablicy
zapisz do tablicy (wierszami) kolejne liczby całkowite 1, 2, 3, …;
wyświetl elementy tablicy z podziałem na wiersze i kolumny wyświetl elementy tablicy z podziałem na wiersze i kolumny
1
0
2 3
1 2
8 9 10
0
1
N
M
4 5 11 12
6 7 13 14
3 4 5 6
15 16 17
2
N
18 19 20 21 22 23 24 25 26 27 28
3
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 11/16
Program INF_D06_1: operacje na tablicy Program INF_D06_1: operacje na tablicy
zapisz do tablicy (kolumnami) kolejne liczby całkowite 1, 2, 3, …;
wyświetl elementy tablicy z podziałem na wiersze i kolumny wyświetl elementy tablicy z podziałem na wiersze i kolumny
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 12/16
Program INF_D06_1: operacje na tablicy Program INF_D06_1: operacje na tablicy
zapisz do tablicy wygenerowane pseudolosowo liczby całkowite z zakresu
-9, 9; wyświetl elementy tablicy z podziałem na wiersze i kolumny
9, ; wyświetl elementy tablicy z podziałem na wiersze i kolumny
-1
0
0 -2
1 2
-6 -7 6
0
1
N
-7 6 -9 6
3 7 -2 6
3 4 5 6
M
9 2 -8
2
N
-7 7 9 9 2 -4 -7 3 9 -2 7
3
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 13/16
Program INF_D06_1: operacje na tablicy Program INF_D06_1: operacje na tablicy
zapisz do tablicy wygenerowane pseudolosowo liczby całkowite z zakresu
-9, 9; wyświetl elementy tablicy z podziałem na wiersze i kolumny
9, ; wyświetl elementy tablicy z podziałem na wiersze i kolumny
-1
0
0 -2
1 2
-6 -7 6
0
1
N
-7 6 -9 6
3 7 -2 6
3 4 5 6
M
9 2 -8
2
N
-7 7 9 9 2 -4 -7 3 9 -2 7
3
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 14/16
Program INF_D06_1: operacje na tablicy Program INF_D06_1: operacje na tablicy
zastąp wszystkie ujemne elementy tablicy wartością zero;
wyświetl elementy tablicy z podziałem na wiersze i kolumny wyświetl elementy tablicy z podziałem na wiersze i kolumny
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 15/16
Program INF_D06_3: mnożenie macierzy Program INF_D06_3: mnożenie macierzy
Operacja: C = A ⋅ B
A[N][M] macierz N×M elementowa
⋅
=
33 32 31
23 22 21
13 12 11
33 32 31
23 22 21
13 12 11
33 32 31
23 22 21
13 12 11
b b b
b b b
b b b
a a a
a a a
a a a
c c c
c c c
c c c
A[N][M] - macierz N×M - elementowa
B[M][K] - macierz M × K - elementowa
C[N][K] - macierz N×K - elementowa
N M N
31 33 21 32 11 31 31
31 23 21 22 11 21 21
31 13 21 12 11 11 11
b a b a b a c
b a b a b a c
b a b a b a c
+ +
=
+ +
=
+ +
=
32 33 22 32 12 31 32
32 23 22 22 12 21 22
32 13 22 12 12 11 12
b a b a b a c
b a b a b a c
b a b a b a c
+ +
=
+ +
=
+ +
=
33 33 23 32 13 31 33
33 23 23 22 13 21 23
33 13 23 12 13 11 13
b a b a b a c
b a b a b a c
b a b a b a c
+ +
=
+ +
=
+ +
= K K M
Informatyka (EDS1B1007), studia stacjonarne I stopnia dr inż. Jarosław Forenc
Rok akademicki 2020/2021, Pracownia nr 6 16/16
Program INF_D06_3: mnożenie macierzy Program INF_D06_3: mnożenie macierzy
Operacja: C = A ⋅ B ( A [N][M], B [M][K], C [N][K])
Program w języku C:
(i) (i)
(j)
(j) (k) (k)
⋅
=
33 32 31
23 22 21
13 12 11
33 32 31
23 22 21
13 12 11
33 32 31
23 22 21
13 12 11
b b b
b b b
b b b
a a a
a a a
a a a
c c c
c c c
c c c
N M
M K K
N
for (i=0; i<N; i++) for (k=0; k<K; k++) {
C[i][k] = 0.0;
for (j=0; j<M; j++)
C[i][k] = C[i][k] + A[i][j] * B[j][k];
}
K k
N b i
a c
M
j jk ij
ik
1 , 2 , ,
, , 2 , , 1
1
…
…
=
⋅ =
=
=