Kiölçülü massivlər
İkiölçülü massivlər ( matrislər) – vektorlar massividir və kvadrat mötərizədə iki ədədlə verilirlər.
Elementin_ tipi massivin_adı [ölçü 1] [ölçü 2];
Burada ölçü 1 – sətirlərin sayı, ölçü 2 – sütunların sayıdır.
Üçölçülü massivlər:
Elementin_tipi massivin_adı [ölçü 1] [ ölçü 2][ölçü 3];
Məsələn:
double matre [100][10];
int i_matrix [10] [20];
char cube [10][20][3];
Kompüterin yaddaşında matrislər aşağıdakı ardıcıllıqla yerləşdirilmiş oyuqları tuturlar: əvvəlcə I sətir, sonra II sətir və s.
Çoxölçülü massivlərin emalında bir-birinə daxil olan dövrlərdən istifadə edilir. Bu vaxt ən yavaş sol kənar indeks, ən tez isə sağ kənar indeks dəyişir.
Çoxölçülü massivlərlə işləyərkən ən daxili dövr sağ kənar, ən xarici dövr isə sol kənar indeksə uyğun gəlir.
Ikiölçülü massivlərin də emalı zamanı bir sıra tipik alqoritmlər istifadə olunur. Onlardan bir neçəsini verək.
Klaviaturadan tamqiymətli matrisin daxil edilməsi:
const int max_row=5;
const int max_col=4;
. . . . . . . . . . .
for (i=0; i<max_row; i++)
{ for ( j=0; j< max_ col; j++)
{ printf (“ \ n x [%d][%d]”, i, j);
scanf (“%d, &x[i][j]); }
}
İkiölçülü massivin ekrana çıxarılması:
const int max_row=5;
const int max_col=4;
. . . . . . . . . . .
for (i=0; i<max_row; i++)
{ for ( j=0; j< max_ col; j++)
printf (“ %4d”, x [i] [j]” );
printf (“ \ n” ); }
}
Massivin maksimal elementinin hesablanması:
. . . . . . . . . .
int arr [n][k], max;
. . . . . . . . . . .
max=arr [0][0];
for (i=0; i<n; i++)
for (j=0; j<k; j++)
{ if (max< arr [i][j]) max=arr [i][j]; }
Matrisin hər sətrinin maksimal elementinin tapılması:
int arr [n][k], int max[n];
. . . . . . . . . . .
for (i=0; i<n; i++)
{ max[i]=arr [i][0];
for (j=0; j<k; j++)
if (max[i]< arr [i][j]) max[i]=arr [i][j]; }
}
Misal 7.3. Matrisdə sıfırdan kiçik qiymətli ilk elementin yerini təyin edən proqram yazın.
#include <stdlib.h>
main()
{
int a[10][10];
int i, j;
randomize();
for (i = 0; i<10; i++)
for (j = 0; j<10; j++)
a[i][j] = (rand() % 100) - 20;
for (i = 0; i<10; i++)
for (j = 0; j<10; j++)
if (a[i][j] < 0)
goto bul;
printf("Sıfırdan kiçik element yoxdur\n");
goto son;
bul:
printf("elementin mövqeyi və qiyməti (%d, %d) = %d \n",i, j, a[i][j]);
son:
return 0;
}
Misal 7.4. “Qabarcıq” üsulu ilə massivlərin nizamlanması
#include<stdio.h>
#define n 1000
int main() {
int n, i, j;
int a[n];
scanf("%d", &n);
for(i = 0 ; i < n; i++) {
scanf("%d", &a[i]);
}
for(i = 0 ; i < n ; i++) {
//iki qonşu elementin müqayisəsi
for(j = 0 ; j < n - i - 1 ; j++) {
if(a[j] > a[j+1]) {
// əgər şərt doğrudursa,onda
// onların yerləri dəyişdirilir.
int tmp = a[j]; a[j] = a[j+1] ; a[j+1] = tmp;
}
}
}
}
n elementli massivlərin nizamlanması üçün n-1 sayda əməliyyat lazımdır.
Misal 7.5. Binomial əmsalların hesablanması (Paskal üçbucağı)
#include <stdio.h>
#define N 1000
long c[N];
int main () {
long n, i, j;
scanf ("%ld",&n);
for(i = 1; i <= n ; i++) c[i] =0;
c[0] = 1;
for(j = 1 ; j <= n; j++)
for(i = j; i >= 1 ; i--)
c[i] = c[i-1] + c[i];
for(i = 0; i <= n ; i++)
printf ("%ld ", c[i]);
return 0;
}