linkedin facebook linkedin facebook nod32

Borland C++ da ASCII jadvali kodlari

Muallif: Mengliyev Sh.

Qo`shilgan sana: 2014-12-04

Borland C++ da ASCII jadvali kodlari

Dasturning tasnifi

Ko’rsatkichlar bilan ishlashni ko’rgazmali tasvirlash uchun ixtiyoriy kiritilgan qator belgilari kodini tasvirlovchi dastur yozamiz.
Belgilar operativ xotirada ASCII jadvali kodlari sifatida saqlanadi, shuning uchun qam belglarning kodlarini bilish uchun xotira yacheykasidagi byte turidagi o’zgaruvchi ko’rinishida saqlanayotgan belgini o’qish kifoya.
Bunday dasturni yozish uchun belgilar massivi bir xil elementlar to’plamining ketma-ketligi ekanligidan, ularga ko’rsatkichlarni ma’lum sondagi baytlarga siljitish yordamida murojat qilish mumkinligidan foydalanish mumkin.

Muammolar

Mazkur dasturning eng katta muammosi shundaki, Edit turi ko’rinishidagi ob’ektlar o’z matn qiymatlarini AnsiString turidagi, belgilar massivi bo’lmagan o’zgaruvchilarda saqlaydi. Ya’ni mazkur dasturni yaratish uchun AnsiString turidagi o’zgaruvchilarni belgilar massiviga almashtiruvchi protsedura yozishga to’g’ri keladi.

Zarur ko’nikmalar

Mazkur dastur uchun zarur bo’lgan asosiy ko’nikma xotira bilan o’zgaruvchilar bilan ishlash orqali emas, balki to’g’ridan-to’g’ri, ko’rsatkichlarni siljitish orqali ishlash ko’nikmasidir. Undan tashqari, turli xil tur ma’lumotlarining xotirada egallaydigan hajmini bilish, bir turni ikkinchisiga o’tkazishni bilish kerak bo’ladi.
Yana qatorlar bilan ishlashni bilish kerak bo’ladi, belgilar massiviga aylantirish uchun qatorning alohida belgilarini ajratib olishni bilish ham zarur.

Yechish

Shakl

Mazkur masalaning shakli Edit1 maydoniga kiritilgan belgilar kodlarini chiqarish uchun bitta Memo maydoniga ega. Edit1 maydonining yonida uni ko’rsatuvchi Label1 maydoni joylashgan bo’ladi.

Almashtirishni tavsiflash

«belgi» = «uning kodi» turidagi qatorni shakllantirish uchun qatorning «+» buyrug’i bilan o’zaro ta’sir etish xossasidan foydalaniladi. Buning uchun belgi h qatorga almashtiriladi.
AnsiString h = c[i];
Undan so’ng q qator hosil qilinadi va Memo1 komponentasining boshqa qatorlariga qo’shiladi.
AnsiString q q h + " q " + IntToStr(*((byte*)(c+i)));
Memo1->Lines->Add(q);
Belgining kodini bevosita hisoblovchi dastur kodini ko’rib chiqamiz:
IntToStr(*((byte*)(c+i)));
Bu erda (c+i) - massivning i-nomerli elementiga ko’rsatkichdir. (byte*)(c+i) - bu ko’rsatkichni byte turidagi butun qiymatli o’zgaruvchi ko’rsatkichi belgisiga almashtiradi. *((byte*)(c+i)) – bu o’zgaruvchining byte turidagi bevosita qiymati. IntToStr(…) – sonli o’zgaruvchini qatorga almashtiruvchi, bizga tanish bo’lgan funksiya.
Izoh: Bu fragmentda belgining ko’rsatkichini butun qiymatli o’zgaruvchining ko’rsatkichiga almashtirish ortiqcha ish edi, chunki Borland C++ bunday almashtirishni turlarni almashtirishni to’g’ridan-to’g’ri ko’rsatmasdan ham bajara oladi, ammo oshkor almashtirish dastur kodining ko’rsatmaliligini oshirish maqsadida ishhlatilgan.

Dastur kodi

Mazkur dasturning kodi qatorni belgilar massiviga va belgi va uning kodini Memo1 shaklida aks ettiriluvchi bevosita kodga almashtiruvchi protsedurani o’z ichiga oladi. Bu vazifani amalga oshiruvchi protsedura Edit1 komponentining onChange xodisasi mos qo’yilgan. Shu yo’l bilan bu komponentning almashishi avtomatik ravishda Memo1 ob’ektining tarkibi ham o’zgaradi.

void AnsiStringToCharPointer(char * c, AnsiString s, int n = 0)
{
int k = s.Length();
if(k > n && n != 0){ k = n; }
for(int i = 0; i < k; i++)
{
c[i] = s[i+1];
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
Memo1->Text = "";
int l = Edit1->Text.Length();
char c[100];
AnsiStringToCharPointer(c, Edit1->Text,100);
for(int i = 0; i < l; i++)
{
AnsiString h = c[i];
AnsiString = = h + " q " + IntToStr(*((byte*)(c+i)));
Memo1->Lines->Add(q);
}
}

2102 marta o`qildi.

Parol:
Eslab qolish.


Ro`yhatdan o`tish

testing

+998915878681

Siz o`z maxsulotingizni 3D reklama ko`rinishda bo`lishini xohlaysizmi? Unda xamkorlik qilamiz.

3D Reklama


Рейтинг@Mail.ru
Рейтинг@Mail.ru

Besucherzahler
счетчик посещений