Programmanas valodas Valoda C Masvi Doc Dr Sc







![Viendimensijas masīvs n Viens indekss q int x[5]; x[3] = 17; Viendimensijas masīvs n Viens indekss q int x[5]; x[3] = 17;](https://slidetodoc.com/presentation_image_h/b2feeec4a8c31933bdcfa384e425f00f/image-8.jpg)
![Divdimensiju masīvs n Divi indeksi q int balances[11][6]; balances[3][4]=17; Divdimensiju masīvs n Divi indeksi q int balances[11][6]; balances[3][4]=17;](https://slidetodoc.com/presentation_image_h/b2feeec4a8c31933bdcfa384e425f00f/image-9.jpg)
![Trīsdimensiju masīvs n Trīs indeksi q int mas[5][4][5]; mas[0][2][2]=17; Trīsdimensiju masīvs n Trīs indeksi q int mas[5][4][5]; mas[0][2][2]=17;](https://slidetodoc.com/presentation_image_h/b2feeec4a8c31933bdcfa384e425f00f/image-10.jpg)

![n-dimensiju masīvs n n indeksi q int x[2][5][3]. . . [4]; x[1][1][2]. . . n-dimensiju masīvs n n indeksi q int x[2][5][3]. . . [4]; x[1][1][2]. . .](https://slidetodoc.com/presentation_image_h/b2feeec4a8c31933bdcfa384e425f00f/image-12.jpg)








- Slides: 20
Programmēšanas valodas Valoda C++ Masīvi Doc. Dr. Sc. Comp. Edgars Rencis, 4. 04. 2017. Rīgas Tehniskās universitātes Cēsu filiāle, Datorzinātnes un informācijas tehnoloģijas fakultāte
Problēma n Uzdevums q n Lietotājs ievada 100 veselus skaitļus. Izvadīt uz ekrāna šos skaitļus pretējā secībā. Algoritms? q vajadzīgi 100 mainīgie n q q cin >> a 1 >> a 2 >> a 3 >>. . . >> a 100; līdz šim zināmajā apgabalā neeksistē saprātīgs algoritms vajadzētu iespēju saglabāt visas 100 vērtības vienā mainīgajā
Masīvi n n Masīvs ir konstrukcija, kas ļauj vienotā struktūrā saglabāt vairākas viena datu tipa vērtības (elementus) Veselu skaitļu masīva deklarēšana q int x[5]; n q int x[5]={17, -5, 0, 2, 2}; n q deklarācijas brīdī drīkst piešķirt sākuma vērtības int x[5]={3, 49}; n n mainīgajā x varēs saglabāt 5 veselus skaitļus drīkst piešķirt sākuma vērtības arī tikai dažiem pirmajiem masīva elementiem (pārējie paliek neinicializēti) Piekļuve masīva elementiem q piekļuve notiek, norādot elementa kārtas numuru (indeksu) masīvā n q n elementu masīvam indeksi tiek numurēti no 0 līdz n-1 x[3] masīva x elements ar indeksu 3 (jeb pēc kārtas 4. elements) n n x[3] = 17; cin >> x[2]; cout << x[4]; int i=x[0];
Masīva apstrāde n Masīvs uzskatāms tikai par elementu kopumu, tāpēc nekādas darbības ar pašu masīvu veikt nevar q n int m[5]={1, 2, 3, 4, 5}, n[5]; n=m; Šādi darīt nevar! if (n==m). . . Šādi darīt nevar! Masīva elementus iespējams apstrādāt vienotā veidā q q veido ciklu, katrā iterācijā apstrādājot vienu masīva elementu par elementa indeksu kalpo cikla skaitītājs n int x[5]; for (int i=0; i<5; i++) cin >> x[i];
Iepriekšējā problēma n n Uzdevums q Lietotājs ievada 100 veselus skaitļus. Izvadīt uz ekrāna šos skaitļus pretējā secībā. Risinājums, izmantojot masīvu q #include <iostream> using namespace std; int main() { int m[100]; for (int i=0; i<100; i++) cin >> m[i]; for (int i=99; i>=0; i--) cout << m[i] << endl; return 0; }
Uzdevums 1 n Lietotājs ievada 100 veselus skaitļus un pēc tam vēl divus veselus skaitļus a un b, pie kam a<=b. Izvadīt uz ekrāna tos lietotāja ievadītos skaitļus (no pirmajiem 100), kas atrodas intervālā [a; b]. q #include <iostream> using namespace std; int main() { int m[100], a, b; for (int i=0; i<100; i++) cin >> m[i]; cin >> a >> b; for (int i=0; i<100; i++) if (m[i]>=a && m[i]<=b) cout << m[i] << endl; return 0; }
Masīva dimensijas n n Dimensiju skaits ir viens no masīva raksturlielumiem Dimensiju skaits norāda, cik indeksi identificē katru masīva elementu
Viendimensijas masīvs n Viens indekss q int x[5]; x[3] = 17;
Divdimensiju masīvs n Divi indeksi q int balances[11][6]; balances[3][4]=17;
Trīsdimensiju masīvs n Trīs indeksi q int mas[5][4][5]; mas[0][2][2]=17;
Trīsdimensiju masīvs
n-dimensiju masīvs n n indeksi q int x[2][5][3]. . . [4]; x[1][1][2]. . . [0] = 17;
Divdimensiju masīva piemērs n Saglabāt 2 dimensiju masīvā un izvadīt uz ekrāna reizrēķina tabulu skaitļiem no 1 līdz 10. q #include <iostream> using namespace std; int main() { int m[10]; for (int i=0; i<10; i++) for (int j=0; j<10; j++) m[i][j]=(i+1)*(j+1); for (int i=0; i<10; i++) { for (int j=0; j<10; j++) cout << m[i][j] <<" "; cout << endl; } return 0; }
Uzdevums 2 Lietotājs ievada divus veselus pozitīvus skaitļus m un n, kur m<=20 un n<=20. Aizpildīt tabulu (divu dimensiju masīvu) ar m rindām un n kolonnām ar skaitļiem no 1 līdz m*n pēc kārtas pa rindām. Piemēram, ja m=3 un n=5, tad tabulai jāizskatās šādai: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (kolonnu izlīdzināšana nav jārealizē) n
Uzdevums 2 – risinājums #include <iostream> using namespace std; int main () { int m, n, arr[20]; cin >> m >> n; for (int i=0; i<m; i++) for (int j=0; j<n; j++) arr[i][j] = i*n+j+1; for (int i=0; i<m; i++) { for (int j=0; j<n; j++) cout << arr[i][j] << " "; cout << endl; } return 0; }
Uzdevums 2 – alternatīvs risinājums #include <iostream> using namespace std; int main () { int m, n, arr[20], x=1; cin >> m >> n; for (int i=0; i<m; i++) for (int j=0; j<n; j++, x++) arr[i][j] = x; for (int i=0; i<m; i++) { for (int j=0; j<n; j++) cout << arr[i][j] << " "; cout << endl; } return 0; }
Statiski un dinamiski masīvi n Statiski masīvi q q q n viss masīvs atrodas statiskajā atmiņā masīva elementu skaits jāzina jau programmas kompilācijas (rakstīšanas) brīdī visi iepriekš demonstrētie masīvi bija statiski Dinamiski masīvi q q q viss masīvs atrodas dinamiskajā atmiņā statiskajā atmiņā atrodas norāde uz masīva sākumu masīva elementu skaits kompilācijas brīdī drīkst nebūt zināms
Darbs ar dinamisku masīvu n Statiskajā atmiņā jāizveido mainīgais (norāde), kas norādīs uz dinamisko masīvu q n Dinamiskajā atmiņā jāizveido masīvs un jāuzliek iepriekš izveidotā norāde uz to q n mas = new int[5]; Darbs ar masīvu identisks kā statiska masīva gadījumā q n int * mas; mas – norāde uz int tipa masīvu mas[3]=17; Darba beigās masīvs no dinamiskās atmiņas jāizdzēš q delete [] mas;
Dinamiska masīva piemērs n Lietotājs ievada veselu pozitīvu skaitli n. Ļaut lietotājam ievadīt n veselus skaitļus un pēc izdrukāt tos pretējā secībā q q tā kā programmas rakstīšanas brīdī masīva izmērs (n) nav zināms, tad ar statisku masīvu nevarēs tikt galā #include <iostream> using namespace std; int main() { int * m, n; cin >> n; m = new int[n]; for (int i=0; i<n; i++) cin >> m[i]; for (int i=n-1; i>=0; i--) cout << m[i] << endl; delete [] m; return 0; }
Uzdevums 3 n Lietotājs ievada veselu pozitīvu skaitli n. Ļaut lietotājam ievadīt n veselus skaitļus un pēc tam izvadīt visus ievadītos pāra skaitļus. q #include <iostream> using namespace std; int main() { int * m, n; cin >> n; m = new int[n]; for (int i=0; i<n; i++) cin >> m[i]; for (int i=0; i<n; i++) if (m[i]%2 == 0) cout << m[i] << endl; delete [] m; return 0; }