03-guruh Omonov Sayidsharifxonning Dasturlash fanidan 2-hafta mustaqil topshiriqlari


Download 63.11 Kb.
Sana11.02.2023
Hajmi63.11 Kb.
#1189927
Bog'liq
2-hafta Omonov Sayidsharifxon 103


103-guruh Omonov Sayidsharifxonning Dasturlash 2 fanidan 2-hafta mustaqil topshiriqlari.




  1. Sinf aniqlanishi sinf implementatsiyasidan qanday ajratiladi?

C++ sinfni bajarilish qismidan uning aniqlanishini ajratib olish imkonini beradi. Sinfning aniqlanishi sinf shartnomasini ifodalaydi va sinfning bajarilishi shartnomaga olib boradi. Sinf aniqlanishi shunchaki ma’lumotlar maydonlari, konstruktor prototiplari va funksiya prototiplarining ro`yxatini shakllantiradi. Sinfning bajarilishi konstruktorlar va funksiyalarni ishga tushiradi. Sinfning aniqlanishi va bajarilishini ikki turdagi fayllarga ajratishi mumkin. Har ikkala fayl ham bir xil nomga ega, ammo turlicha kengaytma nomlariga ega. Sinf aniqlanishi fayli .h kengaytmasiga (h – header (bosh) ma’nosida) va sinf bajarilishi .cpp kengaytma nomiga ega.





  1. Quyidagi dastur kodidan qanday natija chiqadi? Javoblaringizni batafsil, sharhlar bilan tushuntiring.





  1. Ma’lumot maydoni inkapsulyatsiyasining foydali jihatlarini tushuntiring.

Ikki sababga ko`ra bu juda yaxshi amaliyot:



  • Birinchidan, ma’lumotlarga o`zgartirish kiritish mumkin;

  • Ikkinchidan, bu sinfning qayta sozlanishga qulayligini va xatoliklarga bardoshliligini oshiradi.

Tasavvur qiling, boshqa dasturlar foydalangandan keyin, radius qiymati manfiy bo`lmasligi uchun Circle sinfiga o`zgartirish kiritmoqchisiz. Siz nafaqat Circle sinfini o`zgartirishingiz kerak, balki Circle sinfiishlatadigan dasturlarni ham o`zgartirishingiz kerak bo`ladi. Bu mijozlarning radiusni to`g`ridan-to`g`ri o`zgartira olishlari bilan bog`liq (masalan, myCircle.radius = -5).
To`g`ridan-to`g`ri xususiyatlarni o`zgartirishning oldini olish uchun esa private kalit so`zidan foydalanishimiz lozim. Bu ma’lumotlar maydoni inkapsulyatsiyasi deb nom olgan. Radius ma’lumotlar maydonini faqat Circle sinfi uchun xususiy ma’lumotlar maydoni sifatida olish uchun sinfni quyidagicha ko`rinishda aniqlashimiz mumkin:
Class Circle
{
public:
Circle();
Circle(double);
double get Area();
private:
double radius;
};


  1. (Algebra:kvadrat tenglama) ax2+bx+x=0 kvadrat tenglamasi uchun Kv Tenglama nomli sinf yarating. Sinf quyidagilardan iborat bo’lsin:

  • Uchta koeffitsientni namoyon qiluvchi a, b va c maydonlari.

  • a, b va c argumentli konstruktor.

  • a, b va c uchun uchta get funksiya.

  • b2-4ac ni, ya’ni diskriminantni qaytaruvchi get Diskriminant funksiyasi.

  • Get Ildiz1() va get Ildiz2() funksiyalari. Ular quyidagi ifodalarni hisoblab qaytaradi:


Agar discriminant manfiy bo’lmaydigan bo’lsa, u holda bu funksiyalar foydali hisoblanadi. Agar diskiriminant 0 dan kichik bo’lsa, bu funksiyalar 0 qiymat qaytarsin.
Sinfni implementatsiya qiling. Foydalanuvchidan a, b va c larga qiymat kiritish so’rovi va diskriminantga bog’liq holda, mos natijani ekranga chiqaruvchi test dastur yozing. Agar disikriminant musbat bo’lsa ikkita ildiz chiqsin. Agar discriminant 0 ga teng bo’lsa, bitta ildiz, aks holda “Haqiqiy ildizlari yo’q” xabari chiqsin.

KV_tenglama.h


#ifndefKV_TENGLAMA_H
#defineKV_TENGLAMA_H
classKV_tenglama
{
private:

double a;


double b;
double c;

public:

KV_tenglama();
KV_tenglama(double A,double B,double C);

double get_a();


double get_b();
double get_c();
void set_a(double A);
void set_b(double B);
void set_c(double C);
double get_Diskriminand();
double get_Ildiz1();
double get_Ildiz2();

};
#endif//KV_TENGLAMA_H

KV_tenglama.cpp
#include
#include"KV_tenglama.h"
#include
KV_tenglama::KV_tenglama()
{
a=1;b=1;c=1;
}
KV_tenglama::KV_tenglama(double A,double B,double C)
{
a=A;b=B;c=C;
}
double KV_tenglama::get_a()
{return a;}
double KV_tenglama::get_b()
{return b;}
double KV_tenglama::get_c()
{return c;}
double KV_tenglama::get_Diskriminand()
{
return(pow(b,2)-4*a*c);
}
double KV_tenglama::get_Ildiz1()
{
return(-b+sqrt(get_Diskriminand()))/2;
}
double KV_tenglama::get_Ildiz2()
{
return(-b-sqrt(get_Diskriminand()))/2;
}
void KV_tenglama::set_a(double A){a=A;}
void KV_tenglama::set_b(double B){b=B;}
void KV_tenglama::set_c(double C){c=C;}

main.cpp
#include


#include
#include
using namespace std;

int main()


{
Double a,b,c;
cout<<"Kvadrat tenglama argumentlarini kiriting"<cout<<"a=";
cin>>a;
cout<<"b=";
cin>>b;
cout<<"c=";
cin>>c;
KV_tenglama t1(a,b,c);
if(t1.get_Diskriminand()>0)
{
cout<<"Tenglamaning ildizlari\n";
cout<cout<}
if(t1.get_Diskriminand()==0)
{
cout<<"Tenglamaning yagona ildizi x="
<}
if(t1.get_Diskriminand()<0)
{
cout<<"Tenglama haqiqiy yechimga ega emas!";
}
Return 0;
}

Natija:



Download 63.11 Kb.

Do'stlaringiz bilan baham:




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