1-amaliy mashg’ulot Ma’lumotlarni standart turlari, ularni e’lon qilish va ular ustidagi amallarga doir misollar yechish. Statik turdagi ma’lumotlar tuzilmasi. Ularga oid misollar



Download 0,79 Mb.
bet3/7
Sana15.02.2023
Hajmi0,79 Mb.
#911314
1   2   3   4   5   6   7
Bog'liq
uv6hVzQA74xWUaSviWVO6tgkUqpEPEFunaM0lzL9

Ko’rsatkichli toifalar xotirada joylashgan bironta ma’lumot adresini saqlash uchun ishlatiladi. Ma’lumotlar ustida amal bajarishda uning adresiga ko’rsatkich orqali murojaat qilinadi. Agar ko’rsatkichga tuzilmaviy ma’lumot adresi o’zlashtirilgan bo’lsa, u bunday ma’lumotlar saqlangan birinchi bit adresini ko’rsatadi. Ko’rsatkichlar odatda dinamik ob’ektlar bilan ishlashda va katta ob’ektlarni (masalan, massivlarni, klass ob’ektlarini) funksiyalarga parametr sifatida uzatishda ishlatiladi. Ko’rsakichlarni C++ da quyidagicha ifodalash mumkin.


int *p;//ko’rsatkich e’lon qilindi
int a=3;// butun toifali o’zgaruvchi yaratilindi
p=&a;//p ko’rsatkichga a ning adresi(masalan, 0x22ff44) o’zlashtirildi
p=a// xato!!! Ko’rsatkichga qiymat berish mumkin emas
*p++;//p ko’rsatayotgan manzildagi qiymatni 1 taga oshirish, yani 3+1=4


Misol.Massiv elementlarining o’rta afirmetik qiymatidan katta bo’lgan elementlari sonini aniqlang.


#include
#include
using namespace std;
int hisoblash(int *arr,int N){
int sum=0, counter=0;
double middle;
for(int i=0; i
{
sum+=arr[i];
}
middle=(double)sum/(double)N;
cout<<"O’rta arifmetic = "<
for(int i=0; i
{
if(arr[i]>middle)
counter++;
}
return counter;
}
int main()
{
int *arr, N;
cout<<"Massiv elementlari sonini kiriting=: ";
cin>>N;
arr=new int[N];
for(int i=0; i
{
cout<
cin>>arr[i];
}
int counter=hisoblash(arr,N);
cout<<"o’rta arifmetik qiymatdan katta elementlar soni = "<
}

Yuqorida keltirilgan toifalarga aynan siz ishlatayotgan operatsion tizim tomonidan nechta bayt ajratilayotganligini bilish uchun dastur tuzamiz.




#include
#include
#include
using namespace std;


int main(int argc, char* argv[])
{
cout << " data type " << "byte" << " " << " max value " << endl // sarlavhani chiqarish
<< "bool = " << sizeof(bool) << " " << fixed << setprecision(2)/* bool toifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(bool) * 8.0) - 1) << endl
<< "char = " << sizeof(char) << " " << fixed << setprecision(2)/* char toifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(char) * 8.0) - 1) << endl
<< "short int = " << sizeof(short int) << " " << fixed << setprecision(2)/* short int toifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(short int) * 8.0 - 1) - 1) << endl
<< "unsigned short int = " << sizeof(unsigned short int) << " " << fixed << setprecision(2)
/* unsigned short int toifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(unsigned short int) * 8.0) - 1) << endl
<< "int = " << sizeof(int) << " " << fixed << setprecision(2)/* inttoifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(int) * 8.0 - 1) - 1) << endl
<< "unsigned int = " << sizeof(unsigned int) << " " << fixed << setprecision(2)/* unsigned inttoifasi uchun maksimal qiymatni hisoblaymiz */
<< (pow(2,sizeof(unsigned int) * 8.0) - 1) << endl
<< "long int = " << sizeof(long int) << " " << fixed << setprecision(2)/* long int toifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(long int) * 8.0 - 1) - 1) << endl
<< "unsigned long int = " << sizeof(unsigned long int) << " " << fixed << setprecision(2)/* unsigned long inttoifasi uchun maksimal qiymatni hisoblaymiz */
<< (pow(2,sizeof(unsigned long int) * 8.0) - 1) << endl
<< "float = " << sizeof(float) << " " << fixed << setprecision(2)/* floattoifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(float) * 8.0 - 1) - 1) << endl
<< "double = " << sizeof(double) << " " << fixed << setprecision(2)/* doubletoifasi uchun maksimal qiymatni hisoblaymiz */ << (pow(2,sizeof(double) * 8.0 - 1) - 1) << endl;
system("pause");
return 0;
}


Dasturga izoh:bu erda sizeof() funksiyasi argumentiga berilgan toifaga xotiradan ajratiladigan joy xajmini baytlarda ko’rsatadi. Toifaga beriladigan maksimal qiymatni aniqlash uchun 2^(b * 8 - 1) – 1formula asosida hisoblaymiz. Bu erda b toifaga ajratiladiga xotira xajmi (baytda), uni 8 ga ko’paytirib bitga o’girib olamiz va 1 ni ayiramiz. Chunki toifaga ajratilgan xotira xajmining 1-biti ishora uchun ajratiladi. Umumiy sondan 1 ni ayirishdan maqsad sonlar diapazoni 0 dan boshlanadi.


Toifalarni moslashtirish.Toifalar bilan ishlaganda ularni qiymatlarni 1 toifadan 2-siga o’girishga to’g’ri keladi. Ba’zi o’girishlarni kompilyator avtomatik tarzda o’zi bajaradi. Ba’zilariga kod yozish talab etiladi.Kompilyator avtomatik tarzda toifalarni moslashtirishiga misollar keltiramiz.

1-jadval. S++ da toifalarni moslashtirish

X bo’linuvchi

Y bo’luvchi

Bo’luv natijasi

misol x = 15 y = 2

int

int

int

15/2=7

int

float

float

15/2=7.5

float

int

float

15/2=7.5

Ba’zida toifalar foydalanuvchilar tomonidan oshkora o’giriladi. Masalan,




int i=23; float j=12.3,k;
k=(float)i+j;

Bu erda i o’zgaruvchisi haqiqiy toifaga o’girilmadi, faqat bu qiymatning vaqtinchalik haqiqiy toifadagi nusxasi yaratilindi.i o’zgaruvchini toifasini boshqa toifaga o’girish uchun C++ da quyidagi static_cast funksiyasi ishlatiladi.




int ret=15;
static_cast(ret)/2 //natija 7.5


<> qavs ichida funksiya argumentidagi qiymat yoki o’zgaruvchi qaysi toifaga o’girilishi kerakligi ko’rsatiladi.
Misol. Toifalarni avtomatik va oshkora tarzda o’girilishiga dastur tuzing.


#include
#include
using namespace std;


int main()
{
int int_value15 = 15, int_value2 = 2; // int toifali 2 ta o’zgaruvchi
float float_value15 = 15, float_value2 = 2; // float toifali 2 ta o’zgaruvchi
cout<< fixed << setprecision(2) // haqiqiy sonlarning kasr qismini aniqligini kiritish, 2 ga teng
<< "15 / 2 = " << int_value15 / int_value2 << endl
<< "15 / 2 = " << int_value15 / float_value2 <
<< "15 / 2 = " << float_value15 / int_value2 <
<< "15 / 2 = " << float_value15 / float_value2 << endl; // toifalar avtomatik moslashtiriladi
cout<< "15.0 / 2 = " << 15.0 / 2 <
<< "15 / 2.0 = " << 15 / 2.0 << endl; // toifani oshkora o’girish
cout<< "float(int_value15) / int_value2 = " << float(int_value15) / int_value2 << endl // toifani oshkora o’girish
<< "15 / double(2) = " << 15 / double(2) << endl; // toifani oshkora o’girish
cout<< "static_cast(15) / 2 = " << static_cast(15) / 2 << endl // toifani o’girish unar amali yordamida
<< "static_cast(15) = " << static_cast(15) << endl // ASCII jadvalidagi barcha belgilar kodlarini kiritish mumkin
<< "static_cast(20) = " <(20) <
system("pause");
return 0;
}
Ushbu toifalardan tashqari C++ da yana bitta satrtoifasi mavjud. Satr – bu char toifadagi elementlar massivi hisoblanadi va oxirgi elementi ikkilik 0 hisoblanadi(yani kodi 0 ga teng bo’lgan belgi). Bunday massivga satrli literallar, yani “” belgisi ichida belgilar ketma-ketligini o’zlashtirish mumkin.Masalan, quyidagi 3 ta qator bir xil.


char str1[] = "text";
char str2[] = { 't', 'e', 'x', 't', '\0' };
char* str3 = "text";

Ushbu toifaga oid bir qator funksiyalar mavjud.


Misol.strncat() funksiyasi analogini yaratish.Bu funksiya 1-satrga 2-satrning boshidagi n ta belgisini birlashtiradi.


#include
using namespace std;


char* mystrncat(char *s1, char *s2, int num);


int main()
{
char *p1=new char [20];
char *p2=new char [20];
strcpy(p1, "abce");
strcpy(p2, "fghi");
char *p3;
p3=mystrncat(p1,p2, 2);
cout<

system("pause");
}


char* mystrncat(char *s1, char *s2, int num)
{
int len;
len=strlen(s1);
int i;
for(i=0; i
{
s1[len+i]=s2[i];
}
s1[i]=0;
return s1;
}
Misol.Strchr() funksiyasi analogini yaratish. Bu funksiya satrdanqidirilayotgan belgini izlaydi va 1-uchragan joydan boshlab satr oxirigacha bo’lgan qismini qaytaradi.
#include
using namespace std;
char* findch(char ma[], char a);
int main()
{
char line[128];
char fchar;
char *pointer;
cout<<"satrni kiriting: ";
cin.getline(line,127);
cout<<"qidirilayotgan belgini kiriting ";
cin>>fchar;
pointer=findch(line,fchar);
cout<<"topilgan qism satr "<

}
char* findch(char ma[],char a)
{
int i=0;
while(ma[i]!='\0')
{
if(ma[i]==a)
return&ma[i];
else
i++;
}
return NULL;
}


Statik ma’lumotlar tuzilmasi

Ma’lumotlar tuzilmasi (MT)ni quyidagicha tasniflash mumkin.





Statik tuzilma deb dastur bajarilishi mobaynida elementlari soni yoki ular orasidagi bog’liqliklari o’zgaruvchan bo’lgan tuzilmaga aytiladi.Statik tuzilmalarni ko’rib chiqamiz.
Massivlar.Massiv bu bir xil toifadagi elementlarning tartibli ketma-ketligidir. Massiv bir yoki ikki o’lchovli bo’lishi mumkin. Bir o’lchovli massivlar S++ da quyidagicha e’lon qilinadi:
[elementlar_soni];
Masalan, int a[12];
Ikki o’lchovli massivlar esa quyidagicha ifodalanadi:
[qatorlar_soni][ustunlar_soni];
Masalan, int a[2][3];


1-misol. Massivni elyemyentlarini yig’indisini toping. Misolni yechilishi quyidagicha:

#include
using std::cout;
#include
main()
{
float s,j;
int i;
s=0;
float a[5]={2,3,4,-1,-5};
for (i=0; i<5; ++i)
s = s + a[i];
cout<<"\n s = "<
getch();
return 0;
}

Natija:

S = 3




2-misol. Bir o’lchamli n ta elyemyentdan iborat massiv byerilgan. Quyidagilarni bajaring:
a) manfiy elyemyentlarning yig’indisini;
b) maksimal va minimal qiymatli elyemyentlar orasida joylashgan elyemyentlardan yangi massiv tuzing;
v) massiv elyemyentlarini o’sish tartibida joylashtiring.
Misolni dasturi:
#include
using namespace std;
int main()
{
int x,y,n,h,a[1000],min,max;
cin >> n;
for(int i=0;i
cin >> a[i];
int s=0;
for(int i=0;i
if(s!=0){ cout << "Manfiy elementlar yigindisi:";
cout << endl; cout << s; cout << endl; }
else
{ cout << "Manfiy elementlari yoq;";cout << endl; }
min=a[0];x=0;
for(int i=0;i
if(a[i]
x=i; }
max=a[0];y=0;
for(int i=0;i
if(a[i]>max)
y=i;
}
cout << "maksimal va minimal elementlar orasidagi sonlar:";
if(y>x){
for(int i=x+1;i
cout << endl;
cout << a[i]; } }
else
{
for(int i=y+1;i
cout << endl;
cout << a[i];}
}
cout << endl;
min=a[0];int m=1;
for(int j=0;j
{ for(int i=m;i
if(min>=a[i]){
h=min;
min=a[i];a[i]=h;
} }
a[j]=min;
min=a[j+1];
m++;cout <
}
return 0;
}


3-misol. Bir o’lchovli n ta elyemyentdan iborat massiv byerilgan. Quyidagini hisoblang:
a) minimal elyemyent o’rnini aniqlang;
b) birinchi va ikkinchi raqami manfiy elyemyentlar orasidagi sonlar yig’indisini;
v) massivni shunday almashtiringki, dastlabki elyemyentlari moduli 1 dan kichik bo’lsin, kyeyin qolganlarini joylashtiring.
Misolni yechish:
#include
#include
using namespace std;
int main(){
float a[1000], min;int n,h;
cin >> n;
for(int i=0;i
cin >>a[i];
min=a[0];
for(int i=0;i
if(min>=a[i])
h=i;
}
cout <<"eng kichik element turgan o’rni:" << h <
float s=0;
for(int i=0;i
if(a[i]<0){i++;
while(a[i]>0){
s+=a[i];
i++;} } }
cout <<"manfiy sonlar orasidagi sonlar yigindisi"<
for(int i=0;i
if(fabs(a[i]<1))
cout<
for(int i=0;i
if(fabs(a[i]!=1))
cout<
}
return 0;
}
4-misol.Butun toifali matrisa berilgan. Undagi shunday A[i,j] elementlarni topingki, ular i-qatordagi minimal element bo’lsin va bir vaqtning o‘zida j-ustunning maksimal elementi bo’lib ham hisoblansin.


#include
#include
#include
using namespace std;
void randomfill(int **a,int M, int N);
void show(int **a,int M, int N);
bool sed(int **a,int N, int M, int pN, int pM);
int main()
{
srand(time(NULL));
int n,m;
int **arr;
int **sedar;
cout<<"Satrlar soni=";
cin>>n;
arr=new int* [n];
sedar=new int* [n];
cout<<"Ustunlar soni=";
cin>>m;
for(int i=0; i
{
arr[i]=new int [m];
sedar[i]=new int [m];
}
randomfill(arr, n, m);
show(arr, n, m);
for(int i=0; i
for(int k=0; k
{
if(sed(arr, n, m, i, k))
{
sedar[i][k]=1;
cout<<"Sedlovayatochkavstroke "<
}
else
{sedar[i][k]=0;}
}
show(sedar, n, m);
}
void randomfill(int **a,int N, int M)
{
for(int i=0; i
for(int k=0; k
a[i][k]=rand()%100+1;
}
void show(int **a,int N, int M)
{
for(int i=0; i
{ for(int k=0; k
{cout<
cout<
}
}
bool sed(int **a,int N, int M, int pN, int pM)
{ int ok=0,ok2=0;
for(int i=0; i
{
if(a[pN][pM]
{ok++;}
}
if(ok==M-1)
for(int i=0; i
{
if(a[pN][pM]>a[i][pM])
{ok2++;}
}
if(ok2==N-1)
return true;
else
return false;
}



Download 0,79 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish