linkedin facebook linkedin facebook nod32

Ko’rsatkichlardan foydalanuvchi ro’yxatlar

Muallif: Mengliyev Sh.

Qo`shilgan sana: 2014-12-04

Ko’rsatkichlardan foydalanuvchi ro’yxatlar

Dastur tasnifi

Mazkur dasturda mustaqil ravishda dasturchilar tomonidan tez-tez ishlatiladigan, «Ikki yo’nalishli ro’yxat» konstruktsiyasini tuzishga to’g’ri keladi. Bu konstruktsiya nomer bo’yicha tartiblangan strukturalar majmuini bildiradi. Unda har bir struktura o’z tarkibida to’plamning yaqin o’zgaruvchilariga ikkitadan ko’rsatkichga ega bo’ladi. Tabiiyki, struktura bu ko’rsatkichlardan tashqari dastur uchun ba’zi foydali ma’lumotlarga ham ega bo’ladi.
Bu misol uchun masala quyidagicha qo’yiladi: Foydali ma’lumotlar sifatida belgilar qatorini qamrab oluvchi, ikki yo’nalishli ro’yxat hosil qilish imkoniga ega struktura, hamda ro’yxatga elementlar qo’shuvchi va ro’yxatdan elementlarni o’chiruvchi protseduralar tuzilsin. Bu protseduralar tugmachalar bilan biriktirilsin va ro’yxatda saqlanuvchi ma’lumotlarni chiqarish ta’minlansin.

Muammolar

Dinamik xotira bilan ishlashda zaxiralangan ma’lumotlar blokining o’z vaqtida bo’shatilishini nazorat qilib borish, ya’ni bunday protsedurani nazarda tutish, zarur. Bundan tashqari, dasturni tugatishdan oldin xotiraning barcha zaxiralangan bloklari bo’shatilishi kerak. Buning uchun «Shakllarni yopish» - «Zakro’tie formo’» (FormClose) xodisalarni qayta ishlash protsedurasidan xotirani bo’shatish protsedurasini chaqirish zarur.

Zarur ko’nikmalar

Ikki yo’nalishli ro’yxat bilan ishlash uchun ko’rsatkichlar va strukturalar bilan ishlash ko’nikmalari zarur. Dasturda ko’rsatkichga ko’rsatkich bilan bog’liy murakkab kostruktsiyalar ishlatiladi (masalan, manzilini o’z navbatida boshqa ko’rsatkich soqlovchi ko’rsatkich saqlanadigan manzilni o’z ichiga oluvchi o’zgaruvchiga biror qiymat o’zlashtirishda). Bu dasturda “->” buyrug’i ishlatiladi. Bu buyruq strukturaning bir qismi bo’lgan, manzili shu buyruq tadbiq etilayotgan ko’rsatkich bo’lgan o’zgaruvchini aniqlaydi (qaytaradi). Agar buyruq aniqlagan o’zgaruvchi strukturaga ko’rsatkich bo’lsa, u holda unga shu buyruqning o’zi yana tadbiq qilinishi mumkin. Buning oqibatida ko’ o’tishlardan iborat uzun konstruktsiyalar paydo bo’ladi.

Yechish

Shakl

Mazkur dasturning shaklida ro’yxatning mazmunini ekranga chiqarish uchun maydon va element qo’shish, elementni o’chirish, barcha elementlarni aks ettirish yoki o’chirish imkonini beruvchi barcha funksional tugmachalar joylashgan bo’lishi kerak. Satrlarni chiqarish maydonini ma’noli birlashtirish maqsadida yangi element uchun «Dobavit» tugmachasi bilan birga shu tugmachaga mos nomli, ham kiritish maydoni, ham tugmachadan iborat guruh tuzilgan.

Dastur kodi

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
struct List
{
List* prev;
List* next;
AnsiString Data;
};

List* add(List* w, AnsiString data) // Ro’yxatga element qo’shish
{
List * n = new List;
n->prev = w;
n->next = w->next;
w->next = n;
n->Data = data;
return n;
}

List* del(List* w) // Ro’yxatdan elementni o’chirish
{
if(w->prev){w->prev->next = w->next;}
if(w->next){w->next->prev = w->prev;}
List * r;
if(w->next) {r = w->next;} else {r = w->prev;}
delete w;
return r;
}
List First; // Ro’yxatning boshi
List* Last = &First; // Ro’yxatning oxiri
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Clear();
List* m = &First;
while(m)
{
Memo1->Lines->Add(m->Data);
m = m->next;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Last = add(Last,Edit1->Text);
Edit1->Text = "";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Last = del(Last);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
while(Last != &First)
{
Last = del(Last);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
First.next = 0;
First.prev = 0;
First.Data = "Ro’yxatning boshi";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
Button4->Click();
}

2793 marta o`qildi.

Parol:
Eslab qolish.


Ro`yhatdan o`tish


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

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