Presentation is loading. Please wait.

Presentation is loading. Please wait.

Strukturētie datu tipi - Masīvi

Similar presentations


Presentation on theme: "Strukturētie datu tipi - Masīvi"— Presentation transcript:

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


Download ppt "Strukturētie datu tipi - Masīvi"

Similar presentations


Ads by Google