Masyvai Spausdinti
( 36 Votes )

Parašė Aurimas Šimkus   

Masyvas yra tipas, kuris yra skirtas vienodo tipo duomenų rinkiniams saugoti.

Masyvai gali būti kelių rūšių:

  • Vienmačiai
  • Dvimačiai
  • n-mačiai

Plačiau apžvelgsime vienmačius masyvus.

Vienmačiai masyvai

Masyvo sintaksė:

elementų_tipas masyvo_pavadinimas [elementų_skaičius]

Pvz.:

int mas[10];

Pateiktas masyvas pavadinimu mas gali turėti 10 sveikojo skaičiaus tipo elementų. Šių elementų indeksai turi būti iš intervalo [0 ; n-1], taigi pirmasis masyvo mas elementas turės indeksą 0, o paskutinis - 9. Elementai žymimi: mas[0], mas[1], ..., mas[9].

Pateikiame pavyzdinę programą su duomenų įvedimu, rikiavimu ir spausdinimu:

Duomenų įvedimas į masyvą ir spausdinimas

#include <iostream>
using namespace std;
int main()
{        
 int i, n, mas[20]; //masyve gales buti iki 20 elem.

 cout << "Kiek masyve bus elementu? "; 
 cin >> n;
 cout << endl;

 


 //duomenų ivedimas
 for (i = 0; i < n; i++)
 {
  cout << "Iveskite " << i+1 << "-aji elem. ";
  cin >> mas[i];
 }
 cout << endl;

 


 //duomenu rikiavimas didejimo tvarka Burbulo metodu
 int j, tikr = 1;     //flag - patikrnti ar nesibaige  
 int temp;     //laikinam issaugojimui            

 for(i = 1; i <= n && tikr; i++)
 {
  tikr = 0;
  for (j = 0; j < n - 1; j++)
  {
   if (mas[j+1])
   { 
    temp = mas[j];     //apkeicia elementus
    mas[j] = mas[j+1];
    mas[j+1] = temp;
    tikr = 1;     //nurodo, kad dar yra elementu
   }
  }
 }

 

 

 //duomenu spausdinimas
 for (i = 0; i < n; i++)
  cout << i+1 << "-asis elementas yra " << mas[i] << endl;
 return 0;
}

 

Kaip matote, duomenų įvedimas ir spausdinimas praktiškai toks pat kaip ir su paprastais kintamaisiais.

Elementų rikiavimo algoritmas gali pasirodyti kiek painokas. Daugiau apie jį galite pasiskaityti čia.

 

Programos vykdymo pavyzdys:

 

Dvimačiai masyvai

Dvimačiai masyvai kartais dar vadinami matricomis. Taip yra todėl, nes jie yra išreiškiami per du indeksus - eilutes ir stulpelius.

Dvimačio masyvo sintaksė:

duomenų_tipas masyvo_vardas [eilučių_skaičius] [stulpelių_skaičius];

Pvz.:

int mas[3][4];

Pateiktame masyve iš vis gali būti trys eilutės po 4 stulpelius (elementus). Taigi iš vis gali būti 12 elementų. Elementai žymimi taip pat kaip ir vienmačiuose masyvuose, pvz.:

mas[3][2]

Vaizdus pateikimas:

 

Pateikiame išplėstą dvimačio masyvo programos pavyzdį:

/*
Salyga: duotas dvimatis masyvas. Ji reikia modifikuoti aplink jo 
didziausius ir maziausius elementus esanciu kitu elementu
reiksmes padarant nuliais.

Pvz.: duota 1 2 3, tai rezultatas - 1 0 3.
4 5 6                      0 0 0
7 8 9                      7 0 9 
*/

#include <iostream>
using namespace std;

#define rib 50 //maksimalus eiluciu ir stulpeliu skaicius 
int A[rib][rib], //reiksmiu masyvas
i, j, //i - eilutes indeksas, j - stulpelio indeksas 
n, m, //n - eiluciu skaicius, m - stulpeliu skaicius 
min_r = 999, //kintamasis maziausiai reiksmei saugoti 
max_r = -999; //kintamasis didziausiai reiksmei saugoti

void Ivedimas()
{
 cout << "Iveskite masyvo eiluciu ir stulpeliu skaicius:" << endl; 
 cin >> n >> m; 
 cout << endl;

 for (i = 1; i <= n; i++)
  for (j = 1; j <= m; j++)
  {
   cout << "Iveskite [" << i << "][" << j << "] elementa: ";
   cin >> A[i][j];
  }
 }

 void Min()
 {
 for (i = 1; i <= n; i++)
  for (j = 1; j <= m; j++)
   if (A[i][j] <= min_r)
   {
    min_r = A[i][j];
    }  
 }

 void Max()
 {
 for (i = 1; i <= n; i++)
  for (j = 1; j <= m; j++)
   if (A[i][j] >= max_r)
   {
    max_r = A[i][j];
    }  
 }

 void Nulinimas()
 {
 int x, z; //pap. indeksai masyvo didz. ir maz. elementu aplinkoms nagrineti (x - eil., z - stulp.)
 for (i = 1; i <= n; i++)
  for (j = 1; j <= m; j++)
   if (A[i][j] == min_r || A[i][j] == max_r)
    for (x = i - 1; x <= i + 1; x++) //randama elemento aplinka
     for (z = j - 1; z <= j + 1; z++)
      if ((x != i || z != j) && //sal., kad nenunulintume nagrinejamo min/max elemento
           (x > 0 && z > 0) && //sal., kad neiseitume is masyvo ribu 
           (A[x][z] != min_r && A[x][z] != max_r)) //sal., kad nenunulintume gretimo min/max elem.
        A[x][z] = 0; //rezultatas
 }

 void Spausdinimas()
 {
  cout << endl;
  for (i = 1; i <= n; i++)
  {
   for (j = 1; j <= m; j++)
   cout << A[i][j] << " ";
   cout << endl; //nauja eilute 
  }
 }

 int main()
 { 
 Ivedimas(); //f-ja masyvo reiksmems ivesti
 Min(); //f-ja maziausiai masyvo reiksmei rasti 
 Max(); //f-ja didziausiai masyvo reiksmei rasti 
 Nulinimas(); //f-ja prilyginti nuliui elementus, esancius masyvo maziausiu ir didziausiu reiksmiu aplinkoje 
 Spausdinimas(); //f-ja modifikuotam masyvui spausdinti
 cin >> i;
 return 0; 
}