Download presentation
Presentation is loading. Please wait.
1
Strukturētie datu tipi - Masīvi
Programmēšanas valodas Lekt. M. Lukjanska
2
Atcerēsimies! Darbības – sazarojuma operatori
Strukturētie datu tipi - Masīvi Darbības – sazarojuma operatori Atcerēsimies! Programmēšanas valodas
3
10 minūtes – 2 jautājumi – 4-5 apakšpunkti
Strukturētie datu tipi - Masīvi Sprints! 10 minūtes – 2 jautājumi – 4-5 apakšpunkti Programmēšanas valodas
4
apraksta pamatlīdzekļi Strukturētie datu tipi
Strukturētie datu tipi - Masīvi Datu tipi Atcerēsimies! Programmēšanas valodas semantikas uzdošana Veselais Reālais Skaitliskie Vienkāršie datu tipi Datu apraksta pamatlīdzekļi jeb Datu tipi Loģiskais Simbolu Lietotāja Uzskaitāmie Strukturētie datu tipi Masīvi, Ieraksti, Faili Programmēšanas valodas
5
Kas ir strukturētie datu tipi un kāpēc tie vajadzīgi? Masīvi
Strukturētie datu tipi - Masīvi Kopsavilkums Kas ir strukturētie datu tipi un kāpēc tie vajadzīgi? Masīvi Apraksts Iedalījums un piemēri Tipiskas kļūdas Standartdarbības Programmēšanas valodas
6
Problēma: Apraksts: Veidi:
Strukturētie datu tipi - Masīvi Kas ir strukturētie datu tipi un kāpēc tie vajadzīgi? Problēma: Iedomājieties, ka Jums būtu jāielasa 1000 veselie skaitļi, kas jāapstrādā, Kā Jūs tos noglabātu? Kā Jūs tos ielasītu? Apraksts: liela apjoma datu apstrādei paredzēti mainīgie vienlaikus var saturēt vairākas vērtības tam ir viens nosaukums jeb identifikators sadalīti mazākās vienībās, kas katra satur savu vērtību Veidi: Masīvi Ieraksti Faili Programmēšanas valodas
7
Kas ir strukturētie datu tipi un kāpēc tie vajadzīgi? Masīvi
Strukturētie datu tipi - Masīvi Kopsavilkums Kas ir strukturētie datu tipi un kāpēc tie vajadzīgi? Masīvi Apraksts Iedalījums un piemēri Standartdarbības Programmēšanas valodas
8
Definīcija: Svarīgi: Apraksts galīga skaita (izmēra, ranga)
Masīvi Apraksts char Definīcija: galīga skaita (izmēra, ranga) viena datu tipa elementu kopums, kur katrā elementā var ierakstīt kādu vērtību katram elementam ir savs kārtas numurs jeb indekss indekss – parasti vesels skaitlis, kas nosaka kādas datu vienības vietu attiecībā pret citu vienību un kuram ir identifikators Svarīgi: elementi sakārtoti indeksu augošā secībā indeksus var uzdot arī kā izteiksmes datora atmiņā viena masīva elementi parasti aizņem vienu nepārtrauktu atmiņas apgabalu katru masīva elementu ir jāapstrādā atsevišķi K vārds O 3 2 K S 1 4 Programmēšanas valodas
9
Kas ir strukturētie datu tipi un kāpēc tie vajadzīgi? Masīvi
Strukturētie datu tipi - Masīvi Kopsavilkums Kas ir strukturētie datu tipi un kāpēc tie vajadzīgi? Masīvi Apraksts Iedalījums un piemēri Tipiskas kļūdas Standartdarbības Programmēšanas valodas
10
Iedalījums Iedalījums Viendimensijas N-dimensiju > 3 -dimensiju
Masīvi Iedalījums Iedalījums Viendimensijas N-dimensiju > 3 -dimensiju 3 -dimensiju 2-dimensiju Programmēšanas valodas
11
Pascal C Apraksts: Viendimensijas masīvi
Masīvi - Iedalījums Viendimensijas masīvi Apraksts: masīvs, kura elementiem ir piekārtots tikai viens indekss Pascal C Deklarēšanas sintakse: VAR <mainīgā_identifikators> : ARRAY [apakšējā_robeža .. augšējā_robeža] OF <datu_tips>; Deklarēšanas sintakse: <datu tips> <mainīgā_identifikators> [izmērs]; Piemērs: VAR masiva_piemers : ARRAY [1 .. 6] OF integer; Piemērs: int masiva_piemers [6]; indeksi sākas ar 0!!!! Programmēšanas valodas
12
Viendimensijas masīvu piemēri
Masīvi - Iedalījums Viendimensijas masīvu piemēri Skaitļu virknes Vektori Programmēšanas valodas
13
Pascal C Definīcija: N-dimensiju masīvi
Masīvi - Iedalījums N-dimensiju masīvi Definīcija: masīvs, kura elementiem ir piekārtots vairāk nekā viens indekss Pascal C Deklarēšanas sintakse: VAR <mainīgā_identifikators> : ARRAY [apakšējā_robeža .. augšējā_robeža, apakšējā_robeža .. augšējā_robeža, ..] OF <datu_tips>; Deklarēšanas sintakse: <datu tips> <mainīgā_identifikators> [1D izmērs] [2D izmērs [..]; Piemērs: VAR 2D_masiva_piemers : ARRAY [1 .. 2, ] OF integer; VAR 3D_masiva_piemers : ARRAY [1 .. 2, , ] OF integer; Piemērs: int 2D_masiva_piemers [2] [4]; int 3D_masiva_piemers [2] [4] [3]; Programmēšanas valodas
14
2-dimensiju masīvu piemēri
Masīvi - Iedalījums 2-dimensiju masīvu piemēri Matricas Grafiki Šaha galds Krustiņi un nullītes Programmēšanas valodas
15
3-dimensiju masīvu piemēri
Masīvi - Iedalījums 3-dimensiju masīvu piemēri Programmēšanas valodas
16
Kas ir strukturētie datu tipi un kāpēc tie vajadzīgi? Masīvi
Strukturētie datu tipi - Masīvi Kopsavilkums Kas ir strukturētie datu tipi un kāpēc tie vajadzīgi? Masīvi Apraksts Iedalījums un piemēri Tipiskas kļūdas Standartdarbības Programmēšanas valodas
17
nav noteikts masīva izmērs un diapazona robežas:
Masīvi Tipiskas kļūdas (Pascal) nav noteikts masīva izmērs un diapazona robežas: A : ARRAY [ ] OF real; masīva apakšējā robeža lielāka par augšējo: A : ARRAY [ ] OF integer; deklarēšanā masīva robežas jāuzrāda ar konstantēm, nevis ar izteiksmēm: A : ARRAY [1 .. x + y] OF integer; indeksu robežas nedrīkst uzdot ar decimālskaitļiem: A : ARRAY [ ] OF integer; izejot ārpus masīva robežām var tikt bojātas ar masīva elementiem aizņemtās atmiņas daļas blakus šūnas, un arī iegūt izpildes laika kļūdas Programmēšanas valodas
18
nav noteikts masīva izmērs masīva izmērs un indeksu vērtības
Masīvi Tipiskas kļūdas (C) nav noteikts masīva izmērs int masivs[__]; masīva izmērs un indeksu vērtības int masivs[10]; indeksu vērtības ir no 0 līdz 9 -> jāņem vērā, lietojot ciklos izejot ārpus masīva robežām var tikt bojātas ar masīva elementiem aizņemtās atmiņas daļas blakus šūnas, un arī iegūt izpildes laika kļūdas Ja tiek izmantotas izteiksmes, tad izteiksmes mainīgajiem jāpiešķir vērtības pirms masīva deklarēšanas Nepareizi: int i, j; int masivs_1D [ i + j ]; Pareizi: const int i = 5; const int j = 5; int masivs_1D [ i + j ]; Programmēšanas valodas
19
Kas ir strukturētie datu tipi un kāpēc tie vajadzīgi? Masīvi
Strukturētie datu tipi - Masīvi Kopsavilkums Kas ir strukturētie datu tipi un kāpēc tie vajadzīgi? Masīvi Apraksts Iedalījums un piemēri Tipiskas kļūdas Standartdarbības Programmēšanas valodas
20
Deklarēšana un vērtību inicializēšana jeb “aizpildīšana”
Masīvi Standartdarbības Deklarēšana un vērtību inicializēšana jeb “aizpildīšana” Vērtību izvade Vērtību “nonullēšana” Apstrāde: aprēķināt elementu summu aprēķināt elementu vidējo vērtību meklēt maksimālās, minimālās vērtības meklēt elementu ar noteiktu vērtību atsevišķu masīva elementu vērtību apmaiņa kārtošana utml. Programmēšanas valodas
21
Deklarēšana un vērtību inicializēšana jeb “aizpildīšana”
Standartdarbības Deklarēšana un vērtību inicializēšana jeb “aizpildīšana” ērti ir izmantot FOR ciklu, kur cikla mainīgo izmanto kā masīva indeksu vērtību Inicializēt jeb “aizpildīt” var: no tastatūras Pascal: masivs_1D : array [1 .. 5] of integer; .. FOR i := 1 TO 5 DO Readln (masivs_1D[i]); {5 skaitļu vektors} C: int masivs_1D [5]; .. for ( i = 0 ; i < 5; i++) scanf("%d" , &masivs_1D[i]); Programmēšanas valodas
22
Deklarēšana un vērtību inicializēšana jeb “aizpildīšana” (turpinājums)
Standartdarbības Deklarēšana un vērtību inicializēšana jeb “aizpildīšana” (turpinājums) ar gadījuma skaitļiem matemātiskai modelēšanai vai spēles gadījuma situāciju realizēšanai Pascal: masivs_1D : array [1 .. 5] of integer; .. randomize; {gadijuma skaitlu deveja inicializacija} FOR i := 1 TO 5 DO masivs_1D[i] := random(100); C: int masivs_1D[5]; .. srand ( time(NULL) ); for ( i = 0 ; i < 5; i++) masivs_1D[i] = rand()%100; ar piešķires operatoru nolasot vērtības no faila Programmēšanas valodas
23
Deklarēšana un vērtību inicializēšana jeb “aizpildīšana”
Masīvi Standartdarbības Deklarēšana un vērtību inicializēšana jeb “aizpildīšana” Vērtību izvade Vērtību “nonullēšana” Apstrāde: aprēķināt elementu summu aprēķināt elementu vidējo vērtību meklēt maksimālās, minimālās vērtības meklēt elementu ar noteiktu vērtību atsevišķu masīva elementu vērtību apmaiņa kārtošana utml. Programmēšanas valodas
24
Standartdarbības Vērtību izvade Tāpat kā “aizpildīšanas” gadījumā - ērti ir izmantot FOR ciklu, kur cikla mainīgo izmanto kā masīva indeksu vērtību Piemēri: Izvade stabiņu veidā: Pascal: masivs_1D : array [1 .. 5] of integer; .. FOR i := 1 TO 5 DO Writeln (masivs_1D[i]); C: int masivs_1D [5]; .. for ( i = 0; i < 5; i++ ) printf("%d\n", masivs_1D[i]); Izvade rindas veidā: FOR i := 1 TO 5 DO Write (masivs_1D[i],' '); FOR i := 1 TO 5 DO Write (masivs_1D[i]:4); for ( i = 0; i < 5; i++ ) printf("%d ", masivs_1D[i]); for ( i = 0; i < 5; i++ ) printf("%4d ", masivs_1D[i]); Programmēšanas valodas
25
Vērtību izvade (turpinājums)
Standartdarbības Vērtību izvade (turpinājums) Matricas izvads standartformā: Pascal: masivs_2D : array [1 .. 5, 1 ..5] of integer; .. FOR i := 1 TO 5 DO BEGIN FOR j := 1 TO 5 DO Write (masivs_2D[i, j]:4); Writeln; END; C: int masivs_2D [5][5]; .. for ( i = 0; i < 5; i++ ) { for ( j = 0; j < 5; j++ ) printf("%4d", masivs_2D[i][j]); printf("\n"); } Programmēšanas valodas
26
1. Piemērs: Deklarēšana, aizpildīšana un izvade (Pascal)
Standartdarbības 1. Piemērs: Deklarēšana, aizpildīšana un izvade (Pascal) (* Piemers masivu deklaresanai, aizpildisanai un izvadei *) PROGRAM L5_P1_Deklaresana_aizpildisana_izvade; VAR (* Masivu un mainigo deklaresana *) i, j : integer; masivs_1D : array [1 .. 5] of integer; masivs_2D : array [1 .. 5, ] of integer; BEGIN (* Pamatbloks *) FOR i := 1 TO 5 DO (* Masiva elementu inicializesana *) masivs_1D [i] := i; FOR i := 1 TO 5 DO FOR j := 1 TO 5 DO masivs_2D[i, j] := i + j; (* Masiva elementu izvadisana *) FOR i := 1 TO 5 DO Writeln (masivs_1D[i]); Writeln; FOR i := 1 TO 5 DO Write (masivs_1D[i],' '); Writeln; Writeln; FOR i := 1 TO 5 DO Write (masivs_1D[i]:4); BEGIN FOR j := 1 TO 5 DO Write (masivs_2D[i, j]:4); END; Readln; (* Gaida lietotaja ievadu *) END. (* Pamatbloks *) Programmēšanas valodas
27
1. Piemērs: Deklarēšana, aizpildīšana un izvade (C)
Standartdarbības 1. Piemērs: Deklarēšana, aizpildīšana un izvade (C) /* 5. Programma ‘Pieskires,Izvades,Ievades operatori’ */ #include <stdio.h> main() { /* Mainigo deklaresana un inicializesana */ int i, j; int masivs_1D [5]; int masivs_2D [5][5]; /* Masiva elementu inicializesana */ for ( i = 0; i < 5; i++ ) masivs_1D [i] = i + 1; for ( j = 0; j < 5; j++ ) masivs_2D[i][j] = i j + 1; /* Masiva elementu izvadisana */ for ( i = 0; i < 5; i++ ) printf("%d\n", masivs_1D[i]); printf("\n"); printf("%d ", masivs_1D[i]); printf("\n\n"); printf("%4d", masivs_1D[i]); { for ( j = 0; j < 5; j++ ) printf("%4d", masivs_2D[i][j]); } getch(); Programmēšanas valodas
28
Deklarēšana un vērtību inicializēšana jeb “aizpildīšana”
Masīvi Standartdarbības Deklarēšana un vērtību inicializēšana jeb “aizpildīšana” Vērtību izvade Vērtību “nonullēšana” Apstrāde: aprēķināt elementu summu aprēķināt elementu vidējo vērtību meklēt maksimālās, minimālās vērtības meklēt elementu ar noteiktu vērtību atsevišķu masīva elementu vērtību apmaiņa kārtošana utml. Programmēšanas valodas
29
Var aizpildīt ar nullēm:
Standartdarbības Vērtību notīrīšana Var aizpildīt ar nullēm: Pascal: masivs_1D : array [1 .. 5] of integer; ... FOR i := 1 TO 5 DO masivs_1D[i] := 0; C: int masivs_1D [5]; .. for ( i = 0; i < 5; i++ ) masivs_1D[i] = 0; Programmēšanas valodas
30
Deklarēšana un vērtību inicializēšana jeb “aizpildīšana”
Masīvi Standartdarbības Deklarēšana un vērtību inicializēšana jeb “aizpildīšana” Vērtību izvade Vērtību “nonullēšana” Apstrāde: aprēķināt elementu summu aprēķināt elementu vidējo vērtību utml. meklēt maksimālās, minimālās vērtības meklēt elementu ar noteiktu vērtību atsevišķu masīva elementu vērtību apmaiņa kārtošana utml. Programmēšanas valodas
31
aprēķināt elementu summu
Standartdarbības Apstrāde aprēķināt elementu summu Pascal: masivs_1D : array [1 .. 5] of integer; s := 0; FOR i := 1 TO 5 DO s := s + masivs_1D[i]; C: int masivs_1D [5]; int s = 0; .. for ( i = 0; i < 5; i++ ) s = s + masivs_1D[i]; aprēķināt elementu vidējo vērtību Pascal: C: vv := s / i; vv = s / i; aprēķināt elementu reizinājumu r := 1; FOR i := 1 TO 5 DO r := r * masivs_1D[i]; int masivs_1D [5]; int r = 1; .. for ( i = 0; i < 5; i++ ) r = r * masivs_1D[i]; Programmēšanas valodas
32
Apstrāde (turpinājums)
Standartdarbības Apstrāde (turpinājums) meklēt maksimālo vertību Pascal: masivs_1D : array [1 .. 5] of integer; .. max := masivs_1D[1]; FOR i := 2 TO 5 DO IF ( max < masivs_1D[i] ) THEN max := masivs_1D[i]; C: int masivs_1D [5]; int max = masivs_1D [0]; .. for ( i = 1; i < 5; i++ ) if ( max < masivs_1D [i] ) max = masivs_1D [i]; Programmēšanas valodas
33
Apstrāde (turpinājums)
Standartdarbības Apstrāde (turpinājums) meklēt elementu ar noteiktu vērtību Pascal: masivs_1D : array [1 .. 5] of integer; .. Readln (m); { meklejama vertiba } indekss := 0; { meklejama elementa indekss } FOR i := 1 TO 5 DO IF ( m = masivs_1D[i] ) THEN indekss := i; C: int masivs_1D [5]; scanf("%d", &m); int indekss = 0; .. for ( i = 0; i < 5; i++ ) if ( m == masivs_1D [i] ) indekss = i; Kas notiek, ja šāds elements nav masīvā? Vai derētu to paziņot lietotājam? Programmēšanas valodas
34
Apstrāde (turpinājums)
Standartdarbības Apstrāde (turpinājums) nonullēt masīva galvenās diagonāles elementus Pascal: C: FOR i := 1 TO 5 DO for ( i = 0; i < 5; i++ ) masivs_2D[i, i] := 0; masivs_2D[i][i] = 0; 1 2 3 4 5 1 2 3 4 5 Programmēšanas valodas
35
Apstrāde (turpinājums)
Standartdarbības Apstrāde (turpinājums) atsevišķu elementu vērtību apmaiņa elementu vērtības nemainās, bet mainās to vietas masivs_2D[1, 1] := masivs_2D[4, 4]? jālieto papildus mainīgais (apmaiņas buferis), kurā uz laiku saglabā kādu no elementa vērtībām Pascal: C: temp := masivs_2D[1, 1]; temp = masivs_2D[1][1] masivs_2D[1,1]:=masivs_2D[4,4] masivs_2D[1][1] = masivs_2D[4][4] masivs_2D[4, 4] := temp masivs_2D[4][4] = temp; 1 2 3 4 5 temp Programmēšanas valodas
36
Apstrāde - kārtošana (turpinājums)
Standartdarbības Apstrāde - kārtošana (turpinājums) Kārtošanas process viena datu tipa kopuma sakārtošanas process augošā vai dilstošā secībā atbilstoši kādai no pazīmēm Sakārtotos masīvos informācija atrodama daudz ātrāk un ērtāk Kārtošanai ir izstrādāti daudzi algoritmi atšķiras pēc realizācijas ātruma jo lielāks datu apjoms, jo ātrāku algoritmu vajadzētu ātrums nav tik būtisks, ja datu apjoms nav pārāk liels pazīstamākie Lineārā sakārtošanas metode Burbuļu metode Programmēšanas valodas
37
Tālāk – Strukturētie datu tipi – Masīvi (Lab. d.)
Paldies par uzmanību! Jautājumi? Programmēšanas valodas
38
MathGL – library for scientific data visualization. [saite]
Strukturētie datu tipi - Masīvi Izmantotie resursi MathGL – library for scientific data visualization. [saite] R. Zaks, Introduction to Pascal: Including Turbo Pascal, 2nd ed., Sybex, 1986, p. 464. A. Balode, Programmēšanas pamati. Valoda Turbo Pascal, Zvaigzne ABC, 2009, p.232. Programmēšanas pamati Pascal vidē, RTU Būvmehānikas katedra, Rīga, RTU, 2005 J. Bule, RTK kursa “Programmēšanas valodas" lekciju materiāli, RTK, 2010. Programmēšanas valodas
39
Papildus Piemērs 1: Viendimensijas masīvs
Standartdarbības Papildus Piemērs 1: Viendimensijas masīvs (* Deklarēt viendimesijas masivu ar 10 elementiem, inicializet un izvadit visas vertibas *) PROGRAM L5_PP1_Viendimensiju_masivs; VAR (* Mainigo deklaresana *) i : integer; masivs_1D : array [ ] of integer; BEGIN (* Pamatbloks *) FOR i := 1 TO 10 DO (* Masīva elementu inicializēšana *) masivs_1D [i] := i; FOR i := 1 TO 10 DO (* Masīva elementu izvade *) Writeln ('Masiva ', i, '. elements = ', masivs_1D[i]); Readln; (* Gaida lietotaja ievadu *) END. (* Pamatbloks *) Programmēšanas valodas
40
Papildus Piemērs 2: 2-dimensiju masīvs
Standartdarbības Papildus Piemērs 2: 2-dimensiju masīvs (* Deklarēt 2-dimesiju masivu ar 25 elementiem, inicializet un izvadit visas vertibas *) PROGRAM L5_PP2_Divdimensiju_masivs; VAR (* Mainigo deklaresana *) i, j : integer; masivs_2D : array [1 .. 5, 1 ..5] of integer; BEGIN (* Pamatbloks *) FOR i := 1 TO 5 DO (* Masīva elementu inicializēšana *) FOR j := 1 TO 5 DO masivs_2D [i, j] := j; FOR i := 1 TO 5 DO (* Masīva elementu izvade *) BEGIN Write(masivs_2D[i, j], ' '); Writeln; END; Readln; (* Gaida lietotaja ievadu *) END. (* Pamatbloks *) Programmēšanas valodas
41
Papildus Piemērs 3: 2-dimensiju masīvs
Standartdarbības Papildus Piemērs 3: 2-dimensiju masīvs (* Deklarēt 2-dimesiju masivu ar 25 elementiem, inicializet un izvadit visas vertibas *) PROGRAM L5_PP3_Divdimensiju_masivs; VAR (* Mainigo deklaresana *) i, j, k : integer; masivs_2D : array [1 .. 5, 1 ..5] of integer; BEGIN (* Pamatbloks *) k := 1; FOR i := 1 TO 5 DO (* Masīva elementu inicializēšana *) FOR j := 1 TO 5 DO BEGIN masivs_2D [i, j] := k; k := k + 1; END; FOR i := 1 TO 5 DO (* Masīva elementu izvade *) Write(masivs_2D[i, j]:2, ' '); Writeln; Readln; (* Gaida lietotaja ievadu *) END. (* Pamatbloks *) Programmēšanas valodas
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.