Massivni e`lon qilish:
char ch[4]={‘a’, ‘b’, ‘c’, ‘d’}; //simvolli massiv
int in[6]={10, 20, 30, 40}; // butun sonli massiv
char str[]="abcd"; //satr uzunligi 5 ga teng, chunki uning oxiriga ‘\0’ belgisi qo’shiladi
char str[]={'a', 'b', 's', 'd'}; // YUqoridagi satrning boshqacha yozilishi
Misol. Bir hafta ichidagi kundalik temperatura berilgan bo’lsa, hafta uchun o’rtacha temperaturani hisoblash dasturini tuzish:
//Haftalik o’rtacha tempraturani hisoblash dasturi
#include
#include
using namespace std;
int main()
{
const int n=7;
int temp[n];
int i, s, or_tem;
s=0;
cout<<"\n";
cout<<" Kunlik tempraturani kiriting: \n";
cout<<"\n";
for( i=1; i<=n; i++)
{ cout<< " temp["< cin>>temp[i]; s=s+temp[i]; }
or_tem=s/n;
cout<<" ----------------------------------------";
cout<<"\n";
cout<<" Haftalik o’rtacha tempratura = "<
getch();
return 0;
}
Misollar kurib o’tamiz.
1-misol. Massiv elementlaridan musbatlarining soni va summasini hisoblash dasturi.
# include
# include
using namespace std;
int main ()
{ int x[ ] = {1, 2, 56, 78, -7, -45, 34, 12, 9, -1};
int s=0, n=0;
for (int i = 0; i < 10; i++)
{ if (x[i] < 0) continue;
s = s + x[i]; n++;}
cout<<"\n";
cout<<"musbat elementlar soni n="<
cout<<"\n";
cout<<"musbat elementlar yig`ndisi s="<
getch ( );
}
Yoki huddi shu dasturni for va kiritish operatori cin orqali massivning 10 ta elementlarini kiritib hisoblash dasturini tuzish ham mumkin
# include
# include
using namespace std;
int main ()
{
int x[10], s=0, i, n=0;
for (i=0; i<10; i++)
{ cout<<" x["<> x[i];}
for (i=0; i<10; i++)
{ if (x[i]<0) continue;
s =s+x[i]; n++ ;
}
cout<<"\n";
cout<<"musbat elementlar soni n="<
cout<<"\n";
cout<<"musbat elementlar yig`ndisi s="<
getch ( );
}
2-misol. 10 ta elementdan iborat massivning eng katta, eng kichik elementlarini va ularning o’rta qiymatini hisoblash dasturi.
#include
#include
using namespace std;
int main ()
{
float x[ ]={1,2.23,5.6,-78,-7,-45.12,34.0,12,9,-1};
float s, min, max;
int i;
min = x[0]; max=x[0];
for (i=0; i<10; i++)
{ if (min > x[i]) min = x[i];
if (max < x[i]) max = x[i]; }
s = (min + max) / 2;
cout << "\n";
cout <<" min= "<
cout <<" max= "<
cout <<" o'rta qiymat = "<
getch ( );
}
3-misol. Bazaviy toifasi haqiqiy bo’lgan 10 ta elementli A massivi berilgan. Juft indeksli elementlardan alohida, toq indeksli elementlardan alohida massiv hosil qiling.
# include
# include
using namespace std;
int main ( )
{ float a[10], b[5], c[5];
for (int i=0; i<10; i++)
{ cout<<" a["<> a[i];
}
cout<<"\n ********************** \n";
cout<<"\n";
for (int i=0; i<5; i++)
{ c[i] = a[2*i +1];
b[i] = a[2*i];
cout << " b["<<2*i<<"]=\a" << b[i];
cout << " \t c["<<2*i+1<< "]=\a" << c[i] <
getch ( );
}
4-misol. A va V massivlari berilgan. Yangi S massivini quyidagicha hosil qiling: A massivining elementlari yangi massivning juft indekslari,
V massivining elementlari esa yangi massivning toq indekslarini tashkil etsin.
# include
# include
using namespace std;
int main ( )
{ float a[5], b[5], c[10]; int i;
for ( i=0; i<5; i++)
{ cout<<" a["<> a[i];
cout<<" b["<> b[i]; }
for ( i=0; i< 5; i++)
{ c[2*i+1] = b[i];
c[2*i] = a[i]; }
cout<<"\n";
for (i = 0; i < 10; i++)
cout << " c[" << i << "]= " << c[i] <
getch ( );
}
C++ algoritmik tilida faqat bir o’lchovli massivlar bilan emas, balki ko’p o’lchovli massivlar bilan ham ishlash mumkin. Agar massiv o’z navbatida yana massivdan iborat bulsa, demak 2 o’lchovli massiv, ya`ni matritsa deyiladi. Massivlarning o’lchovi kompyuterda ishlashga to’sqinlik qilmaydi, chunki ular xotirada chiziqli ketma-ket elementlar sifatida saqlanadi. Ko’p o’lchovli massivlarni xuddi 1 o’lchovli massivga o’xshab e`lon qilinadi, faqat indeks toifasi sifatida massivning satrlari (qatorlari) va ustunlari toifasi ko’rsatiladi va ular aloxida [ ][ ] kavslarda kursatiladi.
Masalan: A nomli butun sonlardan iborat 2 o’lchovli massiv berilgan bo’lsa va satrlar soni n ta, ustunlar soni m ta bo’lsa: int a[n][m] Ikki ulchovli massiv elementlarini kiritish-chikarish, ular ustida amallar bajarish ichma-ich joylashgan parametrli sikllar ichida bo’ladi, ya`ni 1-sikl satrlar uchun, 2-tsikl ustunlar uchun. Masalan:
for (i=0; i<=3; i++)
for (j=0; j<=3; j++)
cin >>a[i][j];
Agar ularni klaviaturadan kiritish kerak bo’lsa, ya`ni cin operatori yordamida tashkil etilsa, quyidagicha kiritiladi:
-
undan tashqari massiv elementlarini e`lon qilish bilan birga ularni initsalizatsiya ham qilish mumkin:
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
Natijalar chiroyli kurinishda bo’lishi uchun chikarish operatorini kuyidagicha kilib tashkil etish kerak:
for (int i=0; i<3; i++)
{ for (int j=0; j<3; j++)
cout <<”a[“<
getch ( );
}
1-misol. A va B matritsalari berilgan. Quyidagi formula orqali yangi C matritsasini hosil qiling:
Cij = Aij + Bij; bu yerda i=1,3; j=1,2;
24,3 -4,15 0,1 -4,8
A = 0 18,4 B = 6,82 7,1
8,86 -15,75 -2,8 10,4
# include
# include
using namespace std;
int main ( )
{ float a[3][2] = { {24.3, -4.15 }, {0, 18.4},
{8.86, -15.75}},
b[3][2]={{0.1, -4.8},{6.82, 7.1},{-2.8, 10.4}};
float c[3][2];
int i, j;
cout<<"\n";
for (i = 0; i < 3; i++)
{ for (j = 0; j < 2; j++)
{ c[i][j] = a[i][j] + b[i][j];
cout <<" c["<
cout <
getch ( );
}
MAVZU: STRUKTURA ELEMENTLARIGA MUROJAAT. STRUKTURALARNI O’ZLASHTIRISH
Reja
Massiv elementlariga son qiymat berishda kompyuter xotirasidan foydalanish
Massiv elementlarini saralash.
Struktura elementlariga murojaat
Massiv elementlariga son qiymat berishda kompyuter xotirasidagi tasodifiy butun sonlardan foydalanish ham mumkin. Buning uchun standart kutubxonaning rand ( ) funktsiyasini ishga tushirish kerak. rand ( ) funktsiyasi yordamida 0 ÷ 32767 oraliqdagi ixtiyoriy sonlarni olish mumkin. Bu qiymatlar umuman tasodifiydir. (psevdo – tasodifiy degani).
Agar dastur qayta-qayta ishlatilsa, ayni tasodifiy qiymatlar takrorlanaveradi. Ularni yangi tasodifiy qiymatlar qqilish uchun srand ( ) funktsiyasini dasturda bir marta e`lon qilish kerak. Dastur ishlashi jarayonida extiyojga karab rand ( ) funktsiyasi chaqirilaveradi. Tasodifiy qiymatlar bilan ishlash uchun faylini e`lon qilish zarur. srand ( ) funktsiyasidagi qiymatni avtomatik ravishda o’zgaradigan xolatga keltirish uchun srand ( time (NULL)) yozish ma`qul, shunda kompyuter ichidagi soatning qiymati time ( ) funktsiyasi yordamida o’rnatiladi va srand ga parametr sifatida beriladi. NULL yoki 0 deb yozilsa, qiymat sekundlar ko’rinishida beriladi. Vaqt bilan ishlash uchun ni e`lon qilish kerak.
Misol:
# include
# include
# include
# include
using namespace std;
int main ()
{ srand ( time (0));
int a[5], b[5], i;
for (i = 0; i < 5; i++) a[i] = rand ( );
for (i = 0; i < 5; i++)
{ b[i] = a[i] + 64;
cout << "b="<
getch ( );
return 0;
}
Izox: tasodifiy sonlar ichida manfiy sonlarning ham qatnashishini ixtiyor etsak,
a[i] = 1050 - rand ( ); yoki a[i] = rand ( )-1000; deb yozish ham mumkin.
6-misol. 2 ta matritsa berilgan. Ularni o’zaro ko’paytirib yangi matritsa hosil qiling. Bu erda 1-matritsaning ustunlar soni 2-matritsaning satrlar soniga teng bo’lishi kerak.
Izox: i– 1-martitsaning ustunlari soni; j– 2-matritsaning satrlari soni;
k– kupaytirishlar soni
# include
# include
# include
# include
using namespace std;
int main ( )
{
{ srand ( time (0));
int a[3][3], b[3][3], c[3][3], i, j, k;
for (i=0; i<3; i++) for (j=0; j<3; j++)
a[i][j] = rand ( );
for (i=0; i<3; i++) for (j=0; j<3; j++)
b[i][j] = rand ( );
cout<<"\n"; for (i=0; i<3; i++)
{ for (j=0; j<3; j++) { c[i][j] = 0;
for (k=0; k<3; k++)
c[i][j] = c[i][j] + a[i][k]*b[k][j];
cout<<"C["<cout<
}
cout << endl; }
getch ( );
} }
7-misol. A matritsani B vektorga ko’paytirish algoritmi. S i =
Izoh: matritsaning satrlari soni vektorning satrlariga teng bo’lishi kerak.
M asalan: 1 2 3 1
A = 4 5 6 B = 3
7 8 9 6
C1= 1*1+2*3+3*6 = 25
C2 = 4*1+5*3+6*6 = 55
C3 = 7*1+8*3+9*6 = 85
# include
# include
using namespace std;
int main ( )
{
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, b[3]= {1,3,6}, c[3], i, j;
cout<
for (i=0; i<3; i++)
{ c[i] = 0;
for (j=0; j<3; j++)
c[i] = c[i] + a[i][j] * b[j];
cout <<" C["<
getch ( );
}
8-misol. Matritsani transponirlash algoritmini tuzing. Matritsani transponirlash deb, ustun va satr elementlarini o’zaro o’rin almashtirishga aytiladi, ya`ni Aij = Bji
#
Berilgan matritsa:
1 2 3
4 5 6
7 8 9
Hosil bo’lgan matritsa:
1 4 7
2 5 8
3 6 9
include
# include
using namespace std;
int main ( )
{
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}, b[3][3], i, j;
cout<
for ( i=0; i<3; i++)
{ for ( j=0; j<3; j++)
{ b[i][j] = a[j][i];
cout <<" b["<
cout << endl; }
getch ( );
}
9-misol. 3 ta qator va 4 ta ustunga ega A matritsa berilgan. Undagi eng katta elementni va uning indeksini topish, hamda o’sha qatorni massiv shaklida elementlarini ekranga chiqarish dasturini to’zish.
// programma max_indks
# include
# include
using namespace std;
int main ( )
{
int a[3][4]={{1,2,3,4},{4,5,6,7},{7,8,9,10}}, i, j, k, h, max;
int b[4];
max= a[0][0]; cout<
for (i=0; i<3; i++) for (j=0; j<4; j++)
{ if ( a[i][j] > max) { max = a[i][j]; k = i; h = j; } }
cout <<" Eng katta element max = "<
cout <<" "<
cout<
cout<<" Hamda o’sha qator elementlari";
for ( j=0; j<4; j++)
{ b[j] = a[k][j]; cout <<" b["<
getch ( );
}
Eng katta element max = 10; 3 - qator va 4 - ustundagi element ekan
Hamda o’sha qarot elementlari b[1]=7 b[2]=8 b[3]=9 b[4]=10
MAVZU: STRUKTURALAR MASSIVI. STRUKTURALARNI FUNKSIYALARGA UZATISH
Reja
Massiv elementlarini saralash masalalari
Struktura massivi. Strukturalarni funksiyalarga uzatish.
Struktura elementlarini uzatish. Butun strukturani uzatish.
10-misol. Saralash masalasi. Massiv elementlarini o’sib borish tartibida saralash algoritmi va dasturini tuzish. (puzirkoviy metod)
Avval 1 ulchovli massiv elementlarini saralashni ko’rib o’tamiz.
# include
# include
using namespace std;
int main( )
{
float a[10], b; int i, j;
for (i = 0; i<10; i ++)
{cout<<" a["<>a[i];}
for( j = 0; j< 10; j++)
for ( i = 0; i< 10; i++)
{ if (a[i] > a[i+1])
{ b = a[i];
a[i] = a[i+1];
a[i+1] = b; }
}
cout. precision(3);
cout<<"\n";
for (i = 0; i < 10; i++)
cout <<" b["<
getch ( );
}
MAVZU: STRUKTURALARGA KO’RSATGICH. STRUKTURALARGA KO’RSATGICHNI TAVSIVLASH.
Reja
Ikki o’lchovli massiv elementlarini saralash.
Strukturaga ko’rsatgich.
Strukturaga ko’rsatgichlarni tavsivlash.
Saralash masalasini 0 - 32767 oraliqdagi ixtiyoriy tasodifiy sonlar uchun (rand( ) funktsiyasidan foydalanib ) dasturini tuzamiz
// Saralash masalasi. Massiv elementlarini o’sib borish tartibida
# include
# include
# include
# include
using namespace std;
int main( )
{
srand (time (0));
float a[10], b; int i, j;
for (i = 0; i<10; i ++)
a[i] = rand( ) /33.;
for( j = 0; j< 10; j++)
for ( i = 0; i< 10; i++)
{
if (a[i] > a[i+1])
{ b = a[i];
a[i] = a[i+1];
a[i+1] = b; }
}
cout. precision(4);
cout<<"\n";
for (i = 0; i < 10; i++)
cout <<" " <
getch ( );
}
Endi 2 ulchovli massiv elementlarini saralashni ko’ramiz:
Ikki o’lchovli massivlarni saralashda, agar saralashni o’sib borish tartibida qilish kerak bo’lsa, if operatoridagi solishtirish belgisi > bo’lishi kerak, agar kamayish tartibida saralash kerak bo’lsa, solishtirish belgisi < ko’rinishida bo’lishi kerak.
Misol
# include
# include
using namespace std;
int main( )
{
float a[3][3]={{9.1, 8.3, 6.8},{4.8, 5.7, 1.6},{4.7, 3.8, 9.5}};
float b;
int i, j, k;
for ( k=0; k<3; k++)
for ( i=0; i<3; i++)
for ( j=0; j<2; j++)
{ if (a[i][j] > a[i][j+1] )
{ b = a[i][j]; a[i][j] = a[i][j+1]; a[i][j+1] = b; } }
cout<<"\n";
for ( i=0; i<3; i++)
{ for ( j=0; j<3; j++)
cout <<" a="<
getch ( );
}
a=6.8 a=8.3 a=9.1
a=1.6 a=4.8 a=5.7
a=3.8 a=4.7 a=9.5
Bu dastur saralashni qator bo’yicha olib borish uchun ishlatiladi.
Agar saralashni ustun bo’yicha qilish kerak bo’lsa, quyidagicha yozish kerak bo’ladi:
for ( i=0; i< 2; i++)
for ( j=0; j<3; j++)
{ if ( a[i][j] > a[i+1][ j] ) { b= a[i][j]; a[i][j]= a[i+1][ j]; a[i+1][ j]= b; }
11-misol. Matritsaning izini hisoblash dasturini tuzish. Matritsaning izi deb bosh diagonal elementlarining yig’indisiga aytiladi. Shu dasturda teskari (qo’shimcha) diagonal elementlarining yig’indisini ham hisoblashni ko’rib o’tamiz.
// Matritsa (bosh va teskari) diagnal elementlari
// yig'indisini hisoblash dasturi.
# include
# include
using namespace std;
int main ( )
{
float a[3][3] = { {9.1, 8.3, 6.8},
{4.8, 5.7, 1.6},
{4.7, 3.8, 9.5} };
float ds=0, tds=0; int i, j;
for ( i=0; i<3; i++)
ds = ds + a[i][i];
for ( i=0; i<3; i++)
for ( j=0; j<3; j++)
if ( i+j == 2) tds = tds + a[i][j];
cout <<"\n Bosh diagnal elementlari summasi ds= "<
cout <<"\n Teskari diagnal elementlari summasi tds= "<
getch ( );
return 0;
}
Bosh diagnal elementlari summasi ds= 24.3
Teskari diagnal elementlari summasi tds= 17.2
12-misol. Xar bir hadi an = formulasi orqali hisoblanadigan satr yig’indisini 0,0001 aniqlikda hisoblash dasturini to’zish.
// Har bir hadi An =2n!/(2n+1)! formulasi orqali hisoblanadigan
// satr yig'indisini 0,0001 aniqlikda hisoblash dasturini tuzish.
# include
# include
using namespace std;
int main ( )
{
int n =1; float s1 = 0, s2 = 0;
float p1 =1, p2 = 1;
while (s2 < 0.0001)
{ p1 = p1 * 2*n*(2*n-1); // p1*= 2*n*(2*n-1);
p2 = p2 * (2*n+1)*((2*n+1)-1); // p2*= (2*n+1)*(2*n);
s2 = p1 / p2;
s1 = s1 + s2; // s1+ = s2;
n=n+1; } // n++;
cout. precision (5);
cout<
cout << " s1="<
Dostları ilə paylaş: |