– DARS. FUNKTSIYALAR VA MASSIVLAR

|
– DARS. FUNKTSIYALAR VA MASSIVLAR
|
bet | 31/89 | Sana | 16.11.2023 | Hajmi | 313,45 Kb. | | #100010 |
Bog'liq @AKT Official C haqida o\'zbekcha darslar majmui31 – DARS. FUNKTSIYALAR VA MASSIVLAR.
Funktsiyalar va sonli massivlar.
Funktsiyalarda bir o’lchovli sonli massivlar argument sifatida ishlatilganda ularning chegarasini ko’rsatish shart emas. Misol tariqasida n o’lchovli vektorlar bilan bog’lik funktsiyalarni ta'riflashni ko’rib chiqamiz.
Vektorning uzunligini aniqlash funktsiyasi:
float mod_vec(int n,float x[])
{ float a=0;
for (int I=0;Ia+=x[I]*x[I];
return sqrt(double(a));
}
Ikki vektorning skalyar kupaytmasi funktsiyasi:
float scalar(int n,float x[],float y[])
{ float a=0;
for (int I=0;Ia+=x[I]*y[I];
return a;
}
Qo’yidagi dasturda ikki vektor orasidagi burchak kosinusini hisoblash funktsiyasi kiritiladi va bu funktsiya yordamida berilgan vektorlar orasidagi burchak kosinusi hisoblanadi:
#include
#include
float cosinus(int n,float x[],float y[])
{ float a=0,b=0,c=0;
for (int I=0;I{ a+=x[I]*y[I];
b+=x[I]*x[I];
c+=y[I]*y[I];
}
return a/sqrt(double(b*c));
}
void main()
{float e[]={1,2,3};
float g[]={-1,7,4};
Cout<<(“\n%I”,cosinus(3,e,g));
}
Funktsiyalarda bir o’lchovli massivlar qaytariluvchi qiymatlar sifatida ham kelishi mumkin. Misol uchun ikki vektor summasini hisoblovchi funktsiya protsedurani ko’ramiz:
Void sum_vec(int n, float a,float b, float c)
{
for(int i=0;i}
Bu funktsiyaga qo’yidagicha murojaat qilish mumkin:
Float a[]={1,-1.5,-2},b[]={-5.2,1.3,-4},c[3]; sum_vec(3,a,b,c);
Massiv qiymat qaytaruvchi funktsiya ta'rifini:
Float *sum_vec(int n,float a,float b)
{ float d[n];
for(int i=0;ireturn d;
}
Bu funktsiyaga qo’yidagicha murojaat qilish mumkin:
Float a[]={1,-1.5,-2},b[]={-5.2,1.3,-4};float c[]=sum_vec(3,a,b);
Massivlarni tartiblash.
Keyingi misolimizda massivlarni qiymatlari o’sish tartibida joylashtirish funktsiyasi berilgan:
Void function sort(int n, double a[])
{ int i,j; double c;
for(i=0;ifor(j=i+1;jif (a[i]>a[j]) {c=a[i];a[i]=a[j];a[j]=c;}
Bu usulda har bir element a[0] dan boshlab keyingi hamma elementlar bilan solishtiriladi. Biror element ko’rilayotgan a[i] dan kichik bo’lsa bu elementlar o’rin almashtiriladi. Ohir natijada a[i] urniga i dan n gacha elementlar ichida eng kichigi qo’yiladi.
Qo’yidagi funktsiya butun sonlar massivini Shell usuli asosida tartiblaydi. Bu usulda oldin bir biridan uzoqda joylashgan elementlar solishtiriladi. Elementlar orasidagi interval birgacha kamayib boradi.
shell(v, n) /* sort v[0]...v[n-1]
into increasing order */
int v[], n;
int gap, i, j, temp;
for (gap = n/2; gap > 0; gap /= 2)
for (i = gap; i < n; i++)
for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap)
temp = v[j];
v[j] = v[j+gap];
v[j+gap] = temp;
Bu dasturda uchta tsikl ishlatilgan. Eng tashki tsikl elementlar orasidagi intervalni N/2 dan nol'gacha ikki martadan kamaytirib boradi. O’rta tsikl interval bilan ajratilgan elementlarni solishtiradi; eng ichki tsikl tartiblanmagan elementlar o’rnini almashtiradi. Interval ohiri birga teng bo’lgani uchun hamma elementlar tug’ri tartiblanadi.
Keyingi misolimizda berilgan x qiymat tartiblangan massivda majudmi yoki yukligini aniqlovchi funktsiyani ko’rib chiqamiz. Bu funktsiya ikkiga bo’lish usulidan foydalanadi. Massiv elementlari o’sish tartibida joylashgan bo’lishi kerak. Funktsiya agar x qiymat V massivda mavjud bo’lsa shu qiymat nomerini mavjud bo’lmasa –1 ni qaytaradi.
binary(x, v, n) /* find x in v[0]...v[n-1] */
int x, v[], n;
int low, high, mid;
low = 0;
high = n - 1;
while (low <= high)
mid = (low + high) / 2;
if (x < v[mid])
high = mid - 1;
else if (x > v[mid])
low = mid + 1;
else /* found match */ return(mid);
return(-1);
|
| |