Sanoq sestemalari ustida amallar bajarish uchun interaktiv dasturiy ta’minot
![O’ZBEKISTON RESPUBLIKASI
OLIY VA O’RTA -MAXSUS TA’LIM VAZIRLIGI
SAMARQAND DAVLAT UNIVERSITETI
MEXANIKA -MATEMATIKA FAKULTETI
AMALIY MATEMATIKA VA INFORMATIKA BO’LIMI
5110700 -INFORMATIKA O’QITISH METODIKASI YO’NALISHI
„Sanoq sestema lari ustida amallar bajarish uchun interaktiv dasturiy ta’minot “
MAVZUSIDAN
206 guruh ta laba si : Xasanov J.
Kurs ishi rahbari: Nazarov F .
SAMARQAND -2016](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_1.png)
![Mundar ija
Kirish.
I. C++ tilida bir sanoq sestemadan boshqa sanoq sestemaga o’tuvchi dastur
tuzish doir nazariy tushunchalar;
1.1 Turlar va C++ da o’zgaruvchilarni tavsiflash
1.2 .Bеlgi va satrlar .
II. C++ tilida bir sanoq sestemadan boshqa sanoq sestemaga o’tuvchi
dastur dasturiy ta’minoti;
2.1 . Sanoq sistemalarni boshqasiga o’tkazishning matematik tahlili.
2.2. Borland C++ da bir sanoq sestemadan boshqa sanoq sestemaga o’tuvchi dastur
dasturiy ta’minoti;
Xulosa.
Foydalanilgan adabiyotlar ro’yhati](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_2.png)
![Kirish .
Bizga ma’lumki, dasturlash tillarining yuzdan ortiq ko‘rinishlari mavjud, lekin
qo‘llanilishi ko‘lamiga qarab C/C++ va C# dasturlash tillari yuqori dasturlash sinfiga
mansubdir.Keyingi yillarda amaliy dasturchilarga juda ko‘p integratsion dastur
tuzishmuhitlari taklif etilmoqda. Bu muhitlar u yoki bu imkoniyatlari bilan bir –
biridanfarq qiladi.
Men ham ushbu kurs ishim davomida C++ tilida sanoq sestemalar bilan ishlovchi
obektlarga mo’ljallangan dasturni tuzib chiqmoqchiman. Ush bu dastur kichik dastur
bo’lsada kelajakda boshqa dasturlar tuzishim uchun fundament vazifasini bajarishga
harakat qilaman.
Bu dasturni tuzib nafaqat hisoblashni amalga oshirish balki kichik dastur
ko’ rinishdagi hisoblash dasturi va sanoq sestemani tushinm aydigan foydalanuvchi ham
bir ko’rinishda tushinadigan tushinarli, bejirm ko’rinishga ega dastur tuzmoqchiman.
Men bu dasturni tuzib obektlar yaratishni va ular orqali shunga o’xshash yana
boshqa obektlar yaratmoqchiman bu dasturda ishlashimga yana bir s abab boshqa
obektlarga mo’ljallanmagan dasturlash tilla rida faqat masalani matematik d asturi tuzib
natija olinadi bunda yani C++ builderda esa b oshqa imkoniyatlar va kampanentalar bilan
ham ishlash imkoni bor.
EHM - bu elektron raqamli qurilmadir. Elektron qurilma deyilishiga sabab har qanday
ma’lumotlar EHM da elektr signallari orqali qayta ishlanadi. Raqamli deyilishiga sabab
EHM da har qanday ma’lumot sonlar yordamida tasvirlanadi.
Sonlarni yozish usuliga sanoq sistemasi deb ataladi. Sonlarni yozish uch un har bir sanoq
sistemasida o‘ziga xos turli belgilar to‘plamidan foydalaniladi. Foydalanilgan
to‘plamdagi belgilar ularning soni, sanoq sistemasini xarakterlovchi asosiy kattaliklardir.
Sanoq sistemasida foydalaniladigan belgilar soni sanoq sistemasining asosini tashkil
etadi. Berilgan sanoq sistemasida sonlarni yozishdagi foydalanilgan belgilar soniga
qarab, o‘nlik, ikkilik, sakkizlik, o‘n oltilik va boshqa sanoq sistemalarni kiritish mumkin.](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_3.png)
![C++ tilida bir sanoq sestemadan boshqa sanoq sestemaga o’t uvchi dastur tuzish
doir nazariy tushunchalar;
1. Turlar va C++ da o’zgaruvchilarni tavsiflash
Har bir nom va har bir o’zgaruvchi ular ustida bajariluvchi amallar aniqlovchi
turlarga ega bo’ladi. Masalan, int i; tavsiflash i o’zgaruvchi int tur iga tegishli, ya’ni i
butun o’zgaruvchi deb aniqlaydi. Tavsiflash - dasturga nom kirituvchi buyruqdir.
Tavsiflash o’zgaruvchining turini aniqlaydi. Tur nom va ifodalardan to’g’ri
foydalanishni aniqlaydi. Butun tur uchun quyidagi a mallar aniqlangan: +, -, * va
/.Asosiy turlar . Bevosita apparat ta’minotiga javob beradigan asosiy turlar quyidagilar:
char; short; int; long; float; double. Birinchi to’rtta tur butun kattaliklarni, oxirgi ikkitasi
suzuvchi nuqtali, ya’ni kasr sonlarn i tasvirlash uchun ishlatiladi. char turidagi
o’zgaruvchi mazkur kompyuterda belgilarni (odatda bayt) saqlash o’lchoviga ega, int
turidagi o’zgaruvchi esa mazkur kompyuterdagi butun arifmetikaga mos o’lchovga
ega (odatda so’z). Turlar bilan t asvirlangan butun sonlar diapazoni uning o’lchoviga
bog’liq bo’ladi (uni sizeof buyrug’i yordamida hisoblash mumkin).C++ da o’lchovlar
char turidagi kattaliklar o’lchovi birligida o’lchanadi. Asosiy turlar o’rtasidagi
munosabatlarni quyidagicha yoz ish mumkin:
1 = sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) = sizeof(float)
<= sizeof(double).
Umuman, asosiy turlar xususida yana boshqa narsalarni faraz qilish ma’nosiz.
Xususan, ko’rsatgichlarni saqlash uchun butun tur etarli, d egan xulosa barcha
kompyuterlar uchun to’g’ri emas. Asosiy turlarga const so’zini qo’shib tavsiflash
mumkin. Bu boshlang’ich turga shu turning o’zini beradi, faqat bu holatda const turidagi
o’zgaruvchilarning qiymatlari initsializatsiyadan so’ng o’zgari shi mumkin emas.
const float pi = 3.14;
const char plus = '+';
Bittalik qo’shtirnoqqa olingan belgilar belgi o’zgarmaslar hisoblanadi.
Shunga e’tibor berish lozimki, bu usulda tavsiflangan o’zgarmaslar xotirada joy
egallamaydi. uning qiymati talab qilingan joyda bevosita ishlatiladi. O’zgarmaslar](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_4.png)
![initsializatsiya paytida tavsiflanishi shart. O’zgaruvchilar uchun initsializa tsiya
shartemas, ammo albatta tavsiya qilinadi. Lokal o’zgaruvchilarni initsializatsiyasiz
kiritish asoslari juda ko’p.Bu turlarning ixtiyoriy kombinatsiyasiga quyidagi arifmetik
amallar qo’llanilishi mumkin:
+ (plyus, unar va binar);
- (minus, un ar va binar);
* (ko’paytirish);
/ (bo’lish).
Hamda taqqoslash amallari:
== (teng);
!= (teng emas);
< (kichik);
> (katta);
<= (kichik yoki teng);
>= (katta yoki teng).
Agar operandlar qo’yilgan shartni qanoatlantirsa , u holda taqqoslash amallari
natijada 1 qiymatni beradi, aks holda esa 0 qiymatni beradi.Butunga bo’lish amali butun
natijani beradi: 7/2 = 3. Butun kattaliklar ustida % - qoldiqni hisoblash amali bajariladi:
7%2 = 1.O’zlashtirishda va arifmetik amallarda C++ ularni guruhlash uchun asos iy
turlar o’rtasida barcha ma’noli almashtirishlarni bajaradi:
double d = 1;
int i = 1;
d = d + i;
i = d + i;
Satriy turlar . C++ da belgilarning biron -bir ketma -ketligi (massivlar) dan iborat
matn qatorlarini xotirada saqlash uchun maxsus AnsiStrin g ma’lumotlar turi qo’llaniladi.
«Stroka» - «Satr» turidagi o’zgaruvchilar barcha boshqa o’zgaruvchilar kabi e’lon
va initsializatsiya qilinadi.Kompilyatorga navbatdagi belgilar ketma -ketligi yangi
o’zgaruvchining nomi emas, balki satr eka nnligini bildirish uchun satrlar bittalik
qo’shtirnoq ichiga olinadi.Misol:](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_5.png)
![AnsiString st = ‘matn qatori’;
Satr turidagi o’zgaruvchilar ustida boshqa satr o’zgaruvchilar bilan qo’shish amali
bajarilishi mumkin. Bu amal ikkita satrni ularning kelish ta rtibida birlashtirish deb
tushuniladi.Misol:
AnsiString s1 = ‘qatori’;
AnsiString s2 = ‘ matn’;
AnsiString s = s1 + s2;
Natijada s o’zgaruvchi s1 va s2 o’zgaruvchilardan tashkil topgan ‘stroka
teksta’ degan qiymatni qabul qiladi.Qo’shimcha turla rBorland C++ da butun qiymatli
o’zgaruvchilarning turlarini qo’shimcha ajratish imkoni mavjud. Bu holda
o’zgaruvchilarning barcha tur nomlari quyidagicha yoziladi - int X, bu erda X
o’zgaruvchiining bitlardagi maydon o’lchami. X qu yidagi qiymatlardan birini qabul
qilishi mumkin: 8, 16, 32 va 64. Bu turdagi o’zgaruvchilardan foydalanish standart
turda aniqlangan o’zgaruvchilardan foydalanishdan farq qilmaydi.
Quyidagi jadvalda bunday turlar bilan ishlash yaqqol ko’rsatilgan.
Tur nomi misol O’lcham
int8 c = 128; 8 bit
int16 s = 32767; 16 bit
int32 i = 123456789; 32 bit
int64 big = 12345654321; 64 bit
Turlarni o’zgartirish protseduralari . Standart turlarni o’zgartirishC++ ning
ma’lumotlarning turlari ustida qattiq nazorati tufayli imkoni boricha qiymatlarni
saqlovchi, turlarni o’zgartirish amallari kiritilgan.Boshqa o’zgaruvchidan ma’lum bir
tur qiymatlarini olish uchun quyidagi konstruksiya ishlatiladi: (yangi
tur)o’zgaruvchi.Misol:
short S = 100;
int I = (int)S;
Bu misol ortiqcha buyruqlarga ega. C++ da ko’pgina tur o’zgaruvchilarining to’g’ridan -
to’g’ri o’zlashtirilishi nazarda tutilgan, ammo ba’zi hollarda bu buyruqlar majburiy
hisoblanadi (masalan, o’zgaruvchining qiymatini biror funksiyaga uzatishd a).](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_6.png)
![Sonli qiymatlarni satrga almashtirish. C++ turlarning to’g’ridan -to’g’ri almashtirishda
o’zgaruvchini uning o’nlik ko’rinishidan belgilar qatori ko’rinishiga yo’l qo’ymaydi,
chunonchi, ular shakllarning ko’gina komponentalarida ishlatiladi. To’ g’ridan -to’g’ri
almashtirish faqatgina asosiy va qo’shimcha turlar uchun amalga oshiriladi. Massiv
hisoblanadigan satr kattaliklar hosilaviy tur bo’lganligi sababli bunday
almashtirishga yo’l qo’yilmaydi.Bunday almashtirishlar uchun quyi dagi standart
almashtirish funksiyalari ishlatiladi: IntToStr, StrToInt, FloatToStr va boshqalar.
Ko’pchilik ma’lumotlar turlari uchun shu kabi satrga va teskari o’tkazish funksiyalari
mavjud.Misol:
char S[10]; // belgilar massivi
int I = 100; // butun qiymatli o’zgaruvchi
S = IntToStr(I); // o’tkazish
Shartli buyruq . Dasturda tarmoqlanishni amalga oshirish, ya’ni ba’zi faktorlarga
bog’liq holda turli amallar bajarilishi uchun if buyrug’i ishlatiladi.Buyruq quyidagi
formatga ega:
if (if oda){ 1 - operator;} [else { 2 - operator;}]
if-buyrug’ining bajarilishi ifodaning qiymatini hisoblashdan boshlanadi. So’ngra ish
quyidagi sxema asosida amalga oshiriladi:
agar ifoda rost bo’lsa (ya’ni 0 dan farqli), u holda 1 - operator bajariladi.
agar ifoda yolg’on bo’lsa (ya’ni 0 ga teng), u holda 2 - operator bajariladi.
agar ifoda yolg’on va 2 - operator yo’q bo’lsa (kvadrat qavsga zarur
bo’lmagan konstruktsiya kiritiladi), u holda if dan keyingi buyruq bajariladi. Misol:
if (i < j )
{
i++;
}
else
{
j = i -3;
i++;](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_7.png)
![}
Bu misol 1 - operatorning o’rnida ham, 2 - operatorning o’rnida ham murakkab
konstruktsiya qatnashishi mumkinligini bildiradi. Ichma -ich if buyrug’ini ishlatish
imkoniyati ham mavjud. if buyrug’i boshqa if buyrug’ining if yoki else konstruktsiyalari
ichida qatnashishi ham mumkin.
2. Bеlgi va satrlar : Standart C++ tili ikki xildagi b еlgilar majmuasini qo’llab
quvvatlaydi. Birinchi toifaga, an'anaviy, «tor» b еlgilar d еb nomlanuvchi 8 -bitli b еlgilar
majmuasi kiradi, ikkinchisiga 16 -bitli «k еng» b еlgilar kiradi. Til kutubxonasida har bir
guruh b еlgilari uchun maxsus funksiyalar to’plami aniqlangan.
C++ tilida satr uchun maxsus tur aniqlanmagan. Satr char turidagi b еlgilar massivi
sifatida qaraladi va b u b еlgilar k еtma -kеtligi satr t еrminatori d еb nomlanuvchi 0 kodli
bеlgi bilan tugaydi (‘ \0’). Odatda, nol -tеrminator bilan tugaydigan satrlarni AS СIIZ -
satlar d еyiladi.
Quyidagi jadvalda С++ tilida b еlgi sifatida ishlatilishi mumkin bo’lgan o’zgarmaslar
to ’plami k еltirilgan.
С++ tilidagi bеlgi o’zgarmaslar
Bеlgilar sinflari Bеlgi o’zgarmaslar
Katta harflar 'А' ...' Z', 'А'...'Я' =
Kichik qarflar = Da' ...' z', ' a'...'я' =
Raqamlar = '0' ...'9' =
Bo’sh joy = =gorizontal tabulyatsiya (ASCII kodi 9),satrni o’tkazish
(ASCII kodi 10), vеrtikal tabulyatsiya (ASCII kodi
11), formani o’tkazish (ASCII kodi 12) karеtkani
qaytarish (ASCII kodi 13F =
Punktuasiya bеlgilari =
(ajratuvchilarF =
! ” # $ & ‘ ( ) * + -=, . / :;Y== > ? @ [ y=] ^ _ { | } ~ =
Boshqaruv bеlgilari = ASCII kodi 0…1Fh oralig’ida va 7Fh bo’lgan bеlgilar =
Probеl = ASCII kodi 32 bo’lgan bеlgi =
O’n oltilik raqamlar = ‘0’…’9’,’A’…’F’,’a’…’f’ =
=](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_8.png)
![Satr massivi e'lon qilinishida, satr oxiriga tеrminator qo’yilishi va natijada satrga
qo’shimcha bitta bayt bo’lishini inobatga olinishi kеrak:
сhаr satr[10] ;
Ushbu e'londa satr satri uchun jami 10 bayt ajratiladi - 9 satr hosil qiluvchi bеlgilar uchun
va 1 bayt tеrminator uchun.
Satr o’zgaruvchilar e'lon qilinishida boshl ang’ich qiymatlarni qabul qilishi mumkin. Bu
holda kompilyator avtomatik ravishda satr uzunligini hisoblaydi va satr oxiri ga
tеrminatorni qo’shib qo’yadi
Satrqiymatinio ’qishdaoqimlio ’qishop еratori ">>" o’rnigagetline () funk -
siyasiniishlatganma 'qulhisoblana di , chunkioqimlio ’qishdaprob еllarinkorqilinadi
(garchiularsatrb еlgisihisoblansaham ) o’qilayotganb еlgilark еtma -kеtligisatrdan «oshib »
kеtgandahamb еlgilarnikiritishdavometishimumkin .
Natijadasatro ’zigaajratilgano ’lchamdanortiqb еlgilarni «qabul » qiladi . Shusababli ,
getline () funksiyasiikkitaparam еtrgaegabo ’lib ,
birinchiparam еtro ’qishamalgaoshirilayotgansatrgako ’rsatkich ,
ikkinchiparam еtrdaesao ’qilishik еrakbo ’lganb еlgilarsoniko ’rsatiladi .
Programmadaishlatilgansatrsatri 5 tab еlginiqabulqilishimumkin ,
ortiq chalaritashlabyuboriladi . getline ()
funksiyasigamurojaatdaikkinchiparam еtrqiymatio ’qilayotgansatruzunligidankattabo ’lmas
ligik еrak .
Satr bilan ishlaydigan funksiyalarning aksariyati «string.h» kutubxonasida
jamlangan. Nisbatan ko’p ishlatiladigan funksi yalarning tavsifini k еltiramiz.
Satr uzunligini aniqlash funksiyalari: Satrlar bilan ishlashda, aksariyat hollarda satr
uzunligini bilish zarur bo’ladi. Buning uchun «string.h» kutubxonasida strlen()
funksiyasi aniqlangan bo’lib, uning sintaksisi quyidagicha bo’ladi:
size_t strlen(const char* string )
Bu funksiya uzunligi hisoblanishi k еrak bo’lgan satr boshiga ko’rsatkich bo’l -gan yagona
param еtrga ega va u natija sifatida ishorasiz butun sonni qaytaradi. strlen() funksiyasi
satrning r еal uzunlig idan bitta kam qiymat qaytaradi, ya'ni nol -tеrmina tor o’rni
hisobga olinmaydi.](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_9.png)
![Xuddi shu maqsadda sizeof() funksiyasidan ham foydalanish mumkin va u strlen()
funksiyasidan farqli ravishda satrning r еal uzunligini qaytaradi.
Odatda sizeof() f unksiyasidan getline() funksiyasining ikkinchi argumеnti si -fati
ishlatiladi va satr uzunligini yaqqol ko’rsatmaslik imkonini bеradi:
Satrlarni nusxalash : Satr qiymatini biridan ikkinchisiga nusxalash mumkin.
Bu maqsadda bir qator standart funksiyalar aniqlangan bo’lib, ularni ayrimlarining tavsif -
larini kеltiramiz.
strcpy() funksiyasi prototipi
char* strcpy (char* str1, const char* str2);
ko’rinishga ega va bu funksiya str2 satrdagi b еlgilarni str1 satrga baytma -bayt
nusxalaydi. Nusxalash st r2 ko’rsatib turgan satrdagi nol -tеrminal uchraguncha davom
etadi. Shu sababli, str2 satr uzunligi str1 satr uzunligidan katta emas -ligiga ishonch hosil
qilish k еrak, aks hol b еrilgan sohasida (s еgm еntda) str1 satrdan k еyin joylashgan
bеrilganlar «ustita» str2 satrning «ortib qolgan» qismi yozilishi mumkin.
Navbatdagi programma qismi “Satrni nusxalash!” satrini Str satrga nusxalaydi:
char Str[20];
strcpy(Str, “Satrni nusxalash!”);
Zarur bo’lganda satrning qaysidir joyidan boshlab, oxirigacha nusxalash mumkin.
strncpy() funksiyasining strcpy() funksiyasidan farqli joyi shundaki, unda bir satrdan
ikkinchisiga nusxalanadigan b еlgilar soni ko’rsatiladi. Uning sintaksisi quyidagi
ko’rin ishga ega:
char* strncpy(char* str1, const char* str2, size_t num)
Agar str1 satr uzunligi str2 satr uzunligidan kichik bo’lsa, ortiqcha b еlgilar «k еsib»
tashlanadi.
strdup() funksiyasiga yagona param еtr sifatida satr -manbaga ko’rsatkich uzatiladi.
Funksiy a, satrga mos xotiradan joy ajratadi, unga satrni nusxalaydi va yuzaga k еlgan
satr -nusxa adr еsini javob sifatida qaytaradi, strdup() funksiya sintaksisi:
char* strdup(const char* sourse)
Quyidagi programma bo’lagida satr1 satrining nusxasi xotiraning satr2
ko’rsatgan joyida paydo bo’ladi:](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_10.png)
![char* satr1=”Satr nusxasini olish.”; char* satr2;
satr2=strdup(satr1);
Satrlarni ulash :Satrlarni ulash (konkat еnatsiya) amali yangi satrlarni hosil
qilishda k еng ko’llaniladi. Bu maqsadda «string.h» kutubxonasida strcat() va strncat()
funksiyalari aniqlangan.
strcat() funksiyasi sintaksisi quyidagi ko’rinishga ega:
char* strcat(char* str1, const char* str2)
Funksiya ishlashi natijasida str2 satr, funksiya qaytaruvchi satr str1 satr oxiriga ulanadi.
Funksiyani cha qirishdan oldin str1 satr uzunligi, unga str2 satri ulanishi uchun y еtarli
bo’lishi hisobga olingan bo’lishi k еrak.
Quyida k еltirilgan amallar k еtma -kеtligining bajarilishi natijasida satr satriga qo’shimcha
satr ulanishi ko’rsatilgan:
char satr[80];
strc py(satr,”Bu satrga”);
strcat(satr,”satr osti ulandi.”);
Amallar k еtma -kеtligini bajarilishi natijasida ko’rsatayotgan joyda “Bu satrga satr
osti ulandi.” satri paydo bo’ladi.
strncat() funksiyasi strcat() funksiyadan farqli ravishda str1 satrga str2 s atr -ning
ko’rsatilgan uzunlikdagi satr qismini ulaydi. Ulanadigan satr qismi uzunligi funksiyaning
uchinchi param еtri sifatida b еriladi.
Garchi bu masala ostilarining y еchimlari C++ tilning standart kutubxonalarida
funksiyalar ko’rinishida mavjud bo’lsa ham, ular kodini qayta yozish foydalanuv -chiga
bu amallarning ichki mohiyatini tushunishga imkon b еradi.
II.C++ tilida bir sanoq sestemadan boshqa sanoq sestemaga o’tuvchi dastur
dasturiy ta’minoti;](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_11.png)
![1.Sanoq sistemalarni boshqasiga o’tkazishning matematik tahlili.
EHM - bu elektron raqamli qurilmadir. Elektron qurilma deyilishiga sabab har qanday
ma’lumotlar EHM da elektr signallari orqali qayta ishlanadi. Raqamli deyilishiga sabab
EHM da har qanday ma’lumot sonlar yordamida tasvirlanadi.
Sonlarni yozish u suliga sanoq sistemasi deb ataladi. Sonlarni yozish uchun har bir sanoq
sistemasida o‘ziga xos turli belgilar to‘plamidan foydalaniladi. Foydalanilgan
to‘plamdagi belgilar ularning soni, sanoq sistemasini xarakterlovchi asosiy kattaliklardir.
Sanoq sistema sida foydalaniladigan belgilar soni sanoq sistemasining asosini tashkil
etadi. Berilgan sanoq sistemasida sonlarni yozishdagi foydalanilgan belgilar soniga
qarab, o‘nlik, ikkilik, sakkizlik, o‘n oltilik va boshqa sanoq sistemalarni kiritish mumkin.
Shu bil an birga sanoq sistemalarini pozision va nopozision turlarga ajratish mumkin.
Pozitsion sanoq sistemasida berilgan sonning qiymati sonni tasvirlovchi raqamlarning
egallagan o‘rniga bog‘liq bo‘ladi. Misol sifatida, 0,1,2,3,. . . ,9 arab raqamlaridan tashkil
topgan o‘nlik sanoq sistemani qarash mumkin. Nopozitsion sanoq sistemalarida,
belgining qiymati uning egallagan o‘rniga bog‘liq emas. Misol sifatida rim raqamlari
sanoq sistemasini keltirish mumkin. Masalan, XX sonida X raqami, qayerda
joylashganiga qaram asdan o‘nlik sanoq sistemasidagi 10 qiymatini anglatadi.
Quyidagi jadvalda o‘nlik sanoq sistemasida berilgan 1 dan 16 gacha sonlarning ikkilik,
sakkizlik va o‘n oltilik sanoq sistemalaridagi ko‘rinishi keltirilgan.
SANOQ SISTEMALARI
2 3 4 5 6 8 10 16
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_12.png)
![10 2 2 2 2 2 2 2
11 10 3 3 3 3 3 3
100 11 10 4 4 4 4 4
101 12 11 10 5 5 5 5
110 20 12 11 10 6 6 6
111 21 13 12 11 7 7 7
1000 22 20 13 12 10 8 8
1001 100 21 14 13 11 9 9
1010 101 22 20 14 12 10 ?
1011 102 23 21 15 13 11 ?
1100 110 30 22 20 14 12 ?
1101 111 31 23 21 15 13 ?
1110 112 32 24 22 16 14 ?
1111 120 33 30 23 17 15 F
10000 121 100 31 24 20 16 10
Bu jadval bo‘yicha bir sanoq sistamasidan ikkinchisiga o‘tish masalasini ko‘rib o‘taylik.
Masalan: 10 lik sanoq sistemasidagi 13 soniga 8 lik sanoq sistemasida 15 soni mos keladi](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_13.png)
![va u 13 ni 8 ga bo‘linganda hosil bo‘lgan butun son 1 va qoldiq 5 lardan tash kil topgan.
Xuddi shuningdek 13 ni 6 ga bo‘lganda hosil bo‘luvchi butun son 2 va qoldiq 1 lar 21
sonini hosil qiladi. Bu son 13 sonining 6 lik sanoq sistemasidagi qiymatidir.
Odatda biror X sonining qaysi sanoq sistemasiga tegishliligini ko‘rsatish uchun uning
pastida indeks sifatida zarur sanoq sistemasining asosi ko‘rsatiladi.
Masalan, X6 – X sonining 6 lik sanoq sitemasiga tegishli ekanligini ko‘rsatadi.
X 10=13 sonining X2 -ikkilik sanoq sistemasidagi ko‘rinishini topaylik. Yuqoridagidek, 13
ni ketma -ket 2 ga bo‘lamiz va bo‘lishni to butun qismida nol hosil bo‘lguncha davom
ettiramiz.
O‘ngdan chapga tartibida yozilgan qoldiqlar, ya’ni 1101 soni X 10=13 10 sonining ikkilik
sanoq sistemasidagi ko‘rinishi bo‘ladi.
Endi 8 lik sanoq sistemasidan 10 lik sanoq sistemasiga bo‘lish yo‘li bilan o‘tishga
doir misol lar ko‘raylik. Masalan, jadval bo‘yicha 15 8 ga 13 10 mos keladi. Endi uni topib
kuraylik, buning uchun 15 8 ni 10 lik sanoq sistemasining asosi –10 ning 8 lik sanoq
sistemasidagi ko‘rinish – 12 ga bo‘lish kera k bo‘ladi. 158 ni 128 ga bo‘lsa butun qismida
1 va qoldiqda 3, ya’ni 13 10 – hosil bo‘ladi. Bunga jadval orqali ishonch hosil qilish ham
mumkin.
Ikkinchi misol : 175 8 sonini 10 lik sanoq sistemasidagi ko‘rinishini topish talab qilingan
bo‘lsin. Xuddi yuqori dagidek 175 8 ni 12 8 ga ketma -ket bo‘lamiz. Eslatib o‘tamiz, bo‘lish
amali 8 sonlik sanoq sistemasida olib boriladi. (Jadvalga qaralsin)](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_14.png)
![R sanoq sistemasida berilgan sonni Q sanoq sistemasiga o‘tkazish uchun, R sanoq
sistemasidagi X soni Q sanoq sistemasining asosiga, ya’ni Q ga ketma -ket, to butun
qismida 0 hosil bo‘lguncha davom ettirish kerak. Qoldiqlar o‘ngdan chapga karab ketma -
ket yozilsa, R sanoq sistemasida berilgan Xr sonining Q sanoq sistemasidagi Xq
ko‘rinishi hosil bo‘ladi. Bo‘lish ama li berilgan R sanoq sistemasida amalga oshiriladi.
Ba’zi bir sanoq sistemalaridan ikkinchisiga qulayroq, osonroq holda o‘tish imkoniyatlari
mavjud. Xususiy holda, 2 ga karrali sonlarning biridan 2 ikkinchisiga o‘tish qoidasini
ko‘rib o‘tamiz.
Masalan, 8 li k sanoq sistemasida berilgan X 8=5361 sonidan X 2 ga bo‘lish uchun, X 8ning
har bir raqamini 2 likdagi ko‘rinishi -triadalar (2 3=8) bilan almashtirib chiqamiz:
D8A2 16ni 2 lik sanoq sistemasiga o‘tkazish uchun uning har bir raqamini 2 lik sanoq
sistemasidagi to‘rtliklar -tetradalar bilan
almashtiramiz:
Ikkilik sanoq sistemasida berilgan sondan 8 lik sanoq sistemasiga o‘tish uchun, uning
o‘ng tomonidan boshlab har bir uchliklarni (triadalarni) 8 likdagi mos raqamlar bilan
almashtiramiz. Masalan](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_15.png)
![Yuqoridagi X 2 sonini 16 lik sanoq sistemasiga o‘tkazish uchun X 2 ni o‘ng tomondan
boshlab to‘rtliklar (tetradalar) bilan
almashtiramiz.
Endi, ixtiyoriy sanoq sistemasidan o‘nlik sanoq sistemasiga o‘tishning xususiy qoidasini
ko‘rib o‘tamiz.
Sakkizlik sanoq sistemasi da berilgan sonning 175 8o‘nlik sanoq sistemasidagi ko‘rinishini
X 10 topish talab etilsin. Buning uchun
berilgan sonning 8 lik sanoq sistemasidagi yoyilmasini yozib olamiz.
va 8 lik sanoq sistemasida 10 8 =8 ekanligini hisobga olib topamiz.
Xuddi yuqori dagilardek, quyidagi misol larni ham qurish mumkin:
Shu paytgacha biz butun sonlarni bir sanoq sistemasidan boshqasiga o‘tkazish bilan
shug‘ullandik. Kasr sonlarni bir sanoq sistemasidan ikkinchisiga o‘tkazish uchun, uning
butun qismi yuqorida keltirilgan qoida, ya’ni bo‘lish asosida amalga oshiriladi. Kasr
qismini R sanoq sistemasidan Q sanoq sistemasiga o‘tkazish uchun kasr sonni Q ga](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_16.png)
![ketma -ket ko‘paytirishda hosil bo‘lgan sonning butun kismlari ketma -ketligi, berilgan
son kasr qismining Q sanoq sistemasidagi ko‘rinishini hosil qiladi. Misol sifatida o‘nli k
sanoq sistemasida berilgan X 10=25,205 sonini 8 lik sanoq sistemasiga o‘tkazaylik.
Berilgan sonning butun qismi -25 10 sakkizlik sanoq sistemasida 41 8 ga teng. Endi kasr
qismi 0,205 ni 8 lik sanoq sistemasiga o‘tkazamiz. Buning uchun uni ketma -ket 8 ga
ko‘p aytiramiz va hosil bo‘lgan butun qismini chiziqning chap tomoniga o‘tkazamiz.
0,205 ni 8 ga ko‘paytirganimizda 1,640 hosil bo‘ladi va uning butun qismini chiziqning
chap tomoniga o‘tkazamiz. Keyin 0,640 yana 8 ga ko‘paytiramiz va hosil bo‘lgan 5,040
soni ning butun qismini chiziqning chap tomoniga o‘tkazamiz. Ko‘paytirishni shu tarzda
davom ettiramiz natijada 0,15028 sonini hosil qilamiz va butun qismini 41 8 ni hisobga
olib, berilgan X 10=25,205 sonini 8 lik sanoq sistemasidagi ko‘rinishini topamiz:
2. Borl and C++ da bir sanoq sestemadan boshqasiga o’tkazuvchi dastur.
Dasturni tuzish jarayoni.
Dastlab C++ Builder dasturlash tilini ishga tayyorlab olamiz. Bu dasturni uchun
quyidagi ketma - ketlikda C++ Builder 6 dasturiga kiramiz: Пуск ->Всепрограмми ->
Borland C++ Builder 6 -> C++ Builder 6 . dastur ishga tushirgach quydagi oyna hosil
bo’ladi](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_17.png)
![Form oynasi hosil bo’lgach unga mos ravishda 2 ta edit, 2 label, 5 ta radiobutton,
5ta button kampanentalarini form oynsiga tashlaymiz. Keyin mos ravishda bu
kampanentalarni xossalarni dastur ishlashiga to’g’irlaymiz quydagicha:
Edit1 va edit2 larning text xossasini bo’ sh holatga aylantiramiz.
Label1 va label2 larning caption xossasini bo’sh holatga aylantiramiz. .
Form1 ni tanlab uning xam vaption xossasini o’zgartirish mumkin va color
xossasidan o’zimizga yoqqan rang ni tanlaymiz.
Radiobuttonlarning caption xossasiga mos ravishda ikkilik, to’rtlik, sakkizlik,
o’nlik, o’noltilik deb yozi b chiqamiz va font xossasidan o’zimiz xoxlagan rangni, shrift
o’lchamini tanlaymiz. Checked xossasini ham ture (rost) qilamiz bunday qilishga sabab
dastur ishlagan vaqtda radiobuttonlarni tanlash mumkin bo’ladi.
Buttonlarni xamcaption xossasiga mos ravishda ikkilikga, to’rtlikga, sakkizlikga,
o’nlikga, o’noltilikga deb yozib chiqamiz.
Form oynasiga kerakli kampanentalarni tashlab ularning xossalarini
o’zgartirgandan so’ng form oynasi quydagi ko’rinishni egallaydi.](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_18.png)
![Formani shakillantirib bo’lgach “ikkilik” yani button1 ning kod oynasiga
quydagilarni kiritamiz .
void __fastcall TForm1::Button1Click(TObject *Sender)
{ Label1 ->Caption ="ikkilikka" ;
String u;
u=Edit1 ->Text ;
if (RadioButton1 ->Checked ==true) Edit2 ->Text =u;
String a,s,c ;
int i,n,k,z,q,m,j;
if (RadioButton2 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ )
{
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*4;
m=m+q*z; }
s=""; k=0;
while (m!=0) {
j= m % 2;
c= IntToStr(j);
k=k+1;
s+=c;
m=m/2; }](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_19.png)
![Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];;
}
if (RadioButton3 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ )
{
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*8;
m=m+q*z;
}
s=""; k=0;
while (m!=0)
{
j= m % 2;
c= IntToStr(j);
k=k+1;
s+=c;
m=m/2;
}
Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];;
}
if (RadioButton4 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ )
{
q=StrToInt(u[i]);
z=1;](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_20.png)
![for (k=1; k<=n -i; k++)
z=z*10;
m=m+q*z;}
s=""; k=0;
while (m!=0 {
j= m % 2;
c= IntToStr(j);
k=k+1;
s+=c;
m=m/2; }
Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];;}
if (RadioButton5 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ )
{if (u[i]==char(65)) q=10; else
if (u[i]==char(66)) q=11; else
if (u[i]==char(67)) q=12 ; else
if (u[i]==char(68)) q=13; else
if (u[i]==char(69)) q=14; else
if (u[i]==char(70)) q=15; else
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*16;
m=m+q*z;}
s=""; k=0;
while (m!=0){
j= m % 2;
c= IntToStr(j);
k=k+1;
s+=c;
m=m/2;
}
Edit2 ->Text ="";](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_21.png)
![for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];;
}}
“To’rtlik” yani button2 ning kod oynasiga qu ydagilarni kiritamiz .
void __fastcall TForm1::Button2Click(TObject *Sender)
{ Label1 ->Caption ="to'rtlikka" ;
String u;
u=Edit1 ->Text ;
if (RadioButton2 ->Checked ==true) Edit2 ->Text =u;
String a,s,c ;
int i,n,k,z,q,m,j;
if (RadioButton1 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ ){
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*2;
m=m+q*z;}
s=""; k=0;
while (m!=0){
j= m % 4;
c= IntToStr(j);
k=k+1;
s+=c;
m=m/4;}
Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];;}
if (RadioButton3 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ ){
q=StrToInt(u[i]);
z=1;](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_22.png)
![for (k=1; k<=n -i; k++)
z=z*8;
m=m+q*z;}
s=""; k=0;
while (m!=0){
j= m % 4;
c= IntToStr(j);
k=k+1;
s+=c;
m=m/4;}
Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];;}
if (RadioButton4 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ ){
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*10;
m=m+q*z;}
s=""; k=0;
while (m!=0){
j= m % 4;
c= IntToStr(j);
k=k+1;
s+=c;
m=m/4; }
Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];;}
if (RadioButton5 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ )](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_23.png)
![{if (u[i]==char(65)) q=10; else
if (u[i]==char(66)) q=11; else
if (u[i]==char(67)) q=12 ; else
if (u[i]==char(68)) q=13; else
if (u[i]==char(69)) q=14; else
if (u[i]==char(70)) q=15; else
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*16;
m=m+q*z;}
s=""; k=0;
while (m!=0){
j= m % 4;
c= IntToStr(j);
k=k+1;
s+=c;
m=m/4;}
Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];;
}
“Sakkizlik” yani button3 ning kod oynasiga quydagilarni kiritamiz .
void __fastcall TForm1::Button3Click(TObject *Sender)
{ Label1 ->Caption ="sakkizlikka" ;
String u;
u=Edit1 ->Text ;
if (RadioButton3 ->Checked ==true) Edit2 ->Text =u;
String a,s,c ;
int i,n,k,z,q,m,j;
if (RadioButton1 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ ){
q=StrToInt(u[i]);
z=1;](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_24.png)
![for (k=1; k<=n -i; k++)
z=z*2;
m=m+q*z; }
s=""; k=0;
while (m!=0){
j= m % 8;
c= IntToStr(j);
k=k+1;
s+=c;
m=m/8;}
Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text
while (m!=0){
j= m % 8;
c= IntToStr(j);
k=k+1;
s+=c;
m=m/8;}
Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];;}
if (RadioButton4 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ ){
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*10;
m=m+q*z;}
s=""; k=0;
while (m!=0){
j= m % 8;
c= IntToStr(j);
k=k+1;
s+=c;](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_25.png)
![m=m/8;
}
Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];;
}
if (RadioButton5 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ )
{if (u[i]==char(65)) q=10; else
if (u[i]==char(66)) q=11 ; else
if (u[i]==char(67)) q=12 ; else
if (u[i]==char(68)) q=13; else
if (u[i]==char(69)) q=14; else
if (u[i]==char(70)) q=15; else
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*16;
m=m+q*z;}
s=""; k=0;
while (m!=0){
j= m % 8;
c= IntToStr(j);
k=k+1;
s+=c;
m=m/8;}
Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];;
}
“O’nlik” yani button1 ning kod oynasiga quydagilarni kiritamiz .
void __fastcall TForm1::Button4Click(TObject *Sender)
{ Label1 ->Caption ="o'nlikka" ;
String a,s,c,u,jj ;
int i,n,k,z,q,m,j;](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_26.png)
![if (RadioButton1 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ ){
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*2;
m=m+q*z;
Edit2 ->Text =IntToStr(m);
}} else if (RadioButton2 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ ){
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*4;
m=m+q*z;
Edit2 ->Text =IntToStr(m);
}}if (RadioButton3 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ ){
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*8;
m=m+q*z;
Edit2 ->Text =IntToStr(m);
}} else if (RadioButton5 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ )](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_27.png)
![{ if (u[i]==char(65)) q=10; else
if (u[i]==char(66)) q=11; else
if (u[i]==char(67)) q=12 ; else
if (u[i]==char(68)) q=13; else
if (u[i]==char(69)) q=14; else
if (u[i]==char(70)) q=15; else
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*16;
m=m+q*z;
Edit2 ->Text =IntToStr(m);
}} if (RadioButton4 ->Checked==true) Edi t2->Text =Edit1 ->Text ;}
void __fastcall TForm1::Button5Click(TObject *Sender)
{ Label1 ->Caption ="o'noltilikka" ;
String u;
u=Edit1 ->Text ;
“O’noltilik” yani button5 ning kod oynasiga quydagilarni kiritamiz .
if (RadioButton5 ->Checked ==true) Edit2 ->Text =u;
String a,s,c ;
int i,n,k,z,q,m,j;
if (RadioButton1 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ ) {
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*2;
m=m+q*z; }
s=""; k=0;
while (m!=0) {
j= m % 16;
if (j==10) c="A"; else
if (j==11) c="B"; else
if (j==12) c="C"; else](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_28.png)
![if (j==13) c="D"; else
if (j==14) c="E"; else
if (j==15) c="F"; else
c= IntToStr(j);
k=k+1;
s+=c;
m=m/16; }
Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];; }
if (RadioButton2 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ ) {
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*4;
m=m+q*z; }
s="" ; k=0;
while (m!=0) {
j= m % 16;
if (j==10) c="A"; else
if (j==11) c="B"; else
if (j==12) c="C"; else
if (j==13) c="D"; else
if (j==14) c="E"; else
if (j==15) c="F"; else
c= IntToStr(j);
k=k+1;
s+=c;
m=m/16; }
Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];; }
if (RadioButton3 ->Checked==true)
{ u=Edit1 ->Text ;](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_29.png)
![n=u.Length();
m=0;
for (i=1; i<=n; i++ )
{
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*8;
m=m+q*z; }
s=""; k=0;
while (m!=0) {
j= m % 16;
if (j==10) c="A"; else
if (j==11) c="B"; else
if (j==12) c="C"; else
if (j==13) c="D"; else
if (j==14) c="E"; else
if (j==15) c="F"; else
c= IntToStr(j);
k=k+1;
s+=c;
m=m/16;
}
Edit2 ->Text ="";
for (i=k; i> =1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];;
}
if (RadioButton4 ->Checked==true)
{ u=Edit1 ->Text ;
n=u.Length();
m=0;
for (i=1; i<=n; i++ )
{
q=StrToInt(u[i]);
z=1;
for (k=1; k<=n -i; k++)
z=z*10;
m=m+q*z; }](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_30.png)
![s=""; k=0;
while (m!=0) {
j= m % 16;
if (j==10) c="A"; else
if (j==11) c="B"; else
if (j==12) c="C"; else
if (j==13) c="D"; else
if (j==14) c="E"; else
if (j==15) c="F"; else
c= IntToStr(j);
k=k+1;
s+=c;
m=m/16;
}
Edit2 ->Text ="";
for (i=k; i>=1; i --)
Edit2 ->Text=Edit2 ->Text+s[i];;
}
Qaysi sanoq sestemada edit1 ga raqam kiritish va qaysi sanoq sestemani
tanlashimizga qarab qaysi raqamlar kiritilishi label2 ning captionda xossasida chiqishi
uchun radiobuttonning click xossasiga quydagilarni kiritamiz
voi d __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
Label2 ->Caption ="0 dan 1 gacha raqamlar kiriting";
}
//--------------------------------------------------------------------------
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
Label2 ->Caption ="0 dan 3 gacha raqamlar kiriting";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton3Click(TObject *Sender)
{
Label2 ->Caption ="0 dan 7 gacha raqamlar kiriting";
}
//------- --------------------------------------------------------------------
void __fastcall TForm1::RadioButton4Click(TObject *Sender)](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_31.png)
![{
Label2 ->Caption ="0 dan 9 gacha raqamlar kiriting";
}
//---------------------------------------------------------------------- -----
void __fastcall TForm1::RadioButton5Click(TObject *Sender)
{
Label2 ->Caption ="0 dan 9 gacha va A,B,C,D,E,F larni kiriting ";
}
Barcha kodlarni kod oynasiga kiritgac h tuzgan dasturimizni ishga tush iramiz
Dasturni ishga tushurgach dastur tog’ri ishlashini sinab ko’ramiz ikkilikni tanlab
ikkilikda son kiritamiz va javobni skkizlikda chiqaramiz
Ushbu dasturi taminot yordamida ikkilik, to’rtlik, sakkizlik, o’nlik, o’noltilik sanoq
sestemadagi sonlarni boshqasiga o’tkazishga moslashgan.](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_32.png)
![Xulosa.
Men ushbu dasturni ishlab chiqish jarayonida C++ builder obektlar bilan ishlash
muhitida turli kampanentalar bilan ishlashni o’rgandim. C++ builder obektlar bilan
ishlash muhitida nafaqat berilgan masalani yechish dasturini tuzishni balki bu yerda
xuddi hisob lash qurilmasida ishlayotgandek obektlar bilan ishladim, bu obektga o’zim
xoxlagandek dizayn berib , obekt yaratdim.
Bu dasturni tuzib obektlar yaratishni va ular orqali shunga o’xshash yana boshqa
obektlar yaratmoqchiman bu dasturda ishlashimga yana bir sabab boshqa obektlarga
mo’ljallanmagan dasturlash tillarida faqat masalani matematik dasturi tuzib natija olinadi
bunda yani C++ builderda esa boshqa imkoniyatlar va kampanentalar bila n ham ishlash
imkoni o’rgandim .](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_33.png)
![Foydalanilganadabiyotlarro ’yhati
1. СтрауструпБ . Язык программирования С++. Третье издание, М.:
Бином, 1999.
2. Шмидский Я.К.Программирование на языке С++: Самоучитель.
Учебное пособие. Диалектика. 361 стр, 2004 г.
3. Q.Abduraximov C++ Dasturlash asoslari 2014
4. Ашарина Н.А. Основы программирования на языках Си,С++. Учебный
курс.М.: 2002 г.
5. Подбельский В.В. Язык С++ М.: Финансы и статистика, 1996.
6. www .tammi .uz
7. www .ziyonet .uz
8. www.google.uz qidiruv sayti](/data/documents/c3849154-e04a-4060-94e1-8ac27ed7ba0f/page_34.png)
O’ZBEKISTON RESPUBLIKASI OLIY VA O’RTA -MAXSUS TA’LIM VAZIRLIGI SAMARQAND DAVLAT UNIVERSITETI MEXANIKA -MATEMATIKA FAKULTETI AMALIY MATEMATIKA VA INFORMATIKA BO’LIMI 5110700 -INFORMATIKA O’QITISH METODIKASI YO’NALISHI „Sanoq sestema lari ustida amallar bajarish uchun interaktiv dasturiy ta’minot “ MAVZUSIDAN 206 guruh ta laba si : Xasanov J. Kurs ishi rahbari: Nazarov F . SAMARQAND -2016
Mundar ija Kirish. I. C++ tilida bir sanoq sestemadan boshqa sanoq sestemaga o’tuvchi dastur tuzish doir nazariy tushunchalar; 1.1 Turlar va C++ da o’zgaruvchilarni tavsiflash 1.2 .Bеlgi va satrlar . II. C++ tilida bir sanoq sestemadan boshqa sanoq sestemaga o’tuvchi dastur dasturiy ta’minoti; 2.1 . Sanoq sistemalarni boshqasiga o’tkazishning matematik tahlili. 2.2. Borland C++ da bir sanoq sestemadan boshqa sanoq sestemaga o’tuvchi dastur dasturiy ta’minoti; Xulosa. Foydalanilgan adabiyotlar ro’yhati
Kirish . Bizga ma’lumki, dasturlash tillarining yuzdan ortiq ko‘rinishlari mavjud, lekin qo‘llanilishi ko‘lamiga qarab C/C++ va C# dasturlash tillari yuqori dasturlash sinfiga mansubdir.Keyingi yillarda amaliy dasturchilarga juda ko‘p integratsion dastur tuzishmuhitlari taklif etilmoqda. Bu muhitlar u yoki bu imkoniyatlari bilan bir – biridanfarq qiladi. Men ham ushbu kurs ishim davomida C++ tilida sanoq sestemalar bilan ishlovchi obektlarga mo’ljallangan dasturni tuzib chiqmoqchiman. Ush bu dastur kichik dastur bo’lsada kelajakda boshqa dasturlar tuzishim uchun fundament vazifasini bajarishga harakat qilaman. Bu dasturni tuzib nafaqat hisoblashni amalga oshirish balki kichik dastur ko’ rinishdagi hisoblash dasturi va sanoq sestemani tushinm aydigan foydalanuvchi ham bir ko’rinishda tushinadigan tushinarli, bejirm ko’rinishga ega dastur tuzmoqchiman. Men bu dasturni tuzib obektlar yaratishni va ular orqali shunga o’xshash yana boshqa obektlar yaratmoqchiman bu dasturda ishlashimga yana bir s abab boshqa obektlarga mo’ljallanmagan dasturlash tilla rida faqat masalani matematik d asturi tuzib natija olinadi bunda yani C++ builderda esa b oshqa imkoniyatlar va kampanentalar bilan ham ishlash imkoni bor. EHM - bu elektron raqamli qurilmadir. Elektron qurilma deyilishiga sabab har qanday ma’lumotlar EHM da elektr signallari orqali qayta ishlanadi. Raqamli deyilishiga sabab EHM da har qanday ma’lumot sonlar yordamida tasvirlanadi. Sonlarni yozish usuliga sanoq sistemasi deb ataladi. Sonlarni yozish uch un har bir sanoq sistemasida o‘ziga xos turli belgilar to‘plamidan foydalaniladi. Foydalanilgan to‘plamdagi belgilar ularning soni, sanoq sistemasini xarakterlovchi asosiy kattaliklardir. Sanoq sistemasida foydalaniladigan belgilar soni sanoq sistemasining asosini tashkil etadi. Berilgan sanoq sistemasida sonlarni yozishdagi foydalanilgan belgilar soniga qarab, o‘nlik, ikkilik, sakkizlik, o‘n oltilik va boshqa sanoq sistemalarni kiritish mumkin.
C++ tilida bir sanoq sestemadan boshqa sanoq sestemaga o’t uvchi dastur tuzish doir nazariy tushunchalar; 1. Turlar va C++ da o’zgaruvchilarni tavsiflash Har bir nom va har bir o’zgaruvchi ular ustida bajariluvchi amallar aniqlovchi turlarga ega bo’ladi. Masalan, int i; tavsiflash i o’zgaruvchi int tur iga tegishli, ya’ni i butun o’zgaruvchi deb aniqlaydi. Tavsiflash - dasturga nom kirituvchi buyruqdir. Tavsiflash o’zgaruvchining turini aniqlaydi. Tur nom va ifodalardan to’g’ri foydalanishni aniqlaydi. Butun tur uchun quyidagi a mallar aniqlangan: +, -, * va /.Asosiy turlar . Bevosita apparat ta’minotiga javob beradigan asosiy turlar quyidagilar: char; short; int; long; float; double. Birinchi to’rtta tur butun kattaliklarni, oxirgi ikkitasi suzuvchi nuqtali, ya’ni kasr sonlarn i tasvirlash uchun ishlatiladi. char turidagi o’zgaruvchi mazkur kompyuterda belgilarni (odatda bayt) saqlash o’lchoviga ega, int turidagi o’zgaruvchi esa mazkur kompyuterdagi butun arifmetikaga mos o’lchovga ega (odatda so’z). Turlar bilan t asvirlangan butun sonlar diapazoni uning o’lchoviga bog’liq bo’ladi (uni sizeof buyrug’i yordamida hisoblash mumkin).C++ da o’lchovlar char turidagi kattaliklar o’lchovi birligida o’lchanadi. Asosiy turlar o’rtasidagi munosabatlarni quyidagicha yoz ish mumkin: 1 = sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) = sizeof(float) <= sizeof(double). Umuman, asosiy turlar xususida yana boshqa narsalarni faraz qilish ma’nosiz. Xususan, ko’rsatgichlarni saqlash uchun butun tur etarli, d egan xulosa barcha kompyuterlar uchun to’g’ri emas. Asosiy turlarga const so’zini qo’shib tavsiflash mumkin. Bu boshlang’ich turga shu turning o’zini beradi, faqat bu holatda const turidagi o’zgaruvchilarning qiymatlari initsializatsiyadan so’ng o’zgari shi mumkin emas. const float pi = 3.14; const char plus = '+'; Bittalik qo’shtirnoqqa olingan belgilar belgi o’zgarmaslar hisoblanadi. Shunga e’tibor berish lozimki, bu usulda tavsiflangan o’zgarmaslar xotirada joy egallamaydi. uning qiymati talab qilingan joyda bevosita ishlatiladi. O’zgarmaslar
initsializatsiya paytida tavsiflanishi shart. O’zgaruvchilar uchun initsializa tsiya shartemas, ammo albatta tavsiya qilinadi. Lokal o’zgaruvchilarni initsializatsiyasiz kiritish asoslari juda ko’p.Bu turlarning ixtiyoriy kombinatsiyasiga quyidagi arifmetik amallar qo’llanilishi mumkin: + (plyus, unar va binar); - (minus, un ar va binar); * (ko’paytirish); / (bo’lish). Hamda taqqoslash amallari: == (teng); != (teng emas); < (kichik); > (katta); <= (kichik yoki teng); >= (katta yoki teng). Agar operandlar qo’yilgan shartni qanoatlantirsa , u holda taqqoslash amallari natijada 1 qiymatni beradi, aks holda esa 0 qiymatni beradi.Butunga bo’lish amali butun natijani beradi: 7/2 = 3. Butun kattaliklar ustida % - qoldiqni hisoblash amali bajariladi: 7%2 = 1.O’zlashtirishda va arifmetik amallarda C++ ularni guruhlash uchun asos iy turlar o’rtasida barcha ma’noli almashtirishlarni bajaradi: double d = 1; int i = 1; d = d + i; i = d + i; Satriy turlar . C++ da belgilarning biron -bir ketma -ketligi (massivlar) dan iborat matn qatorlarini xotirada saqlash uchun maxsus AnsiStrin g ma’lumotlar turi qo’llaniladi. «Stroka» - «Satr» turidagi o’zgaruvchilar barcha boshqa o’zgaruvchilar kabi e’lon va initsializatsiya qilinadi.Kompilyatorga navbatdagi belgilar ketma -ketligi yangi o’zgaruvchining nomi emas, balki satr eka nnligini bildirish uchun satrlar bittalik qo’shtirnoq ichiga olinadi.Misol: