پروژه: دفترچه تلفن
پروژه نهایی: دفترچه تلفن با آرایههای موازی، جستجو، افزودن و فهرستکردن.
پروژه نهایی: دفترچه تلفن 📞
بزرگترین پروژه دوره! چند آرایه موازی (اسمها و شمارهها)، رویههای CRUD و جستجو.
ساختار داده
چون هنوز record یاد نگرفتهایم، از آرایههای موازی استفاده میکنیم — ایندکس i در هر دو آرایه متعلق به یک مخاطب است:
const
MaxContacts = 20;
var
names: array[1..MaxContacts] of string;
phones: array[1..MaxContacts] of string;
count: integer; { تعداد مخاطبین فعلی }
کد کامل
program PhoneBook;
const
MaxContacts = 20;
var
names: array[1..MaxContacts] of string;
phones: array[1..MaxContacts] of string;
count: integer;
procedure Init;
begin
count := 0;
end;
procedure AddContact(name, phone: string);
begin
if count >= MaxContacts then
begin
writeln('دفترچه پر است!');
exit;
end;
count := count + 1;
names[count] := name;
phones[count] := phone;
end;
procedure ListContacts;
var
i: integer;
begin
writeln('--- CONTACTS (', count, ') ---');
for i := 1 to count do
writeln(i:2, '. ', names[i]:15, ' -> ', phones[i]);
end;
procedure Search(name: string);
var
i: integer;
found: boolean;
begin
found := false;
for i := 1 to count do
if lowercase(names[i]) = lowercase(name) then
begin
writeln('Found: ', names[i], ' -> ', phones[i]);
found := true;
end;
if not found then
writeln('"', name, '" not found');
end;
procedure SearchPartial(text: string);
var
i: integer;
begin
writeln('Contacts containing "', text, '":');
for i := 1 to count do
if pos(lowercase(text), lowercase(names[i])) > 0 then
writeln(' ', names[i], ' -> ', phones[i]);
end;
begin
Init;
AddContact('Ali Mohammadi', '0912-111-2222');
AddContact('Sara Ahmadi', '0935-333-4444');
AddContact('Mohammad Rezaei', '0919-555-6666');
AddContact('Neda Karimi', '0912-777-8888');
ListContacts;
writeln;
Search('Sara Ahmadi');
Search('Nobody');
writeln;
SearchPartial('moha');
end.
مفاهیم بهکاررفته
| مفهوم | کجا؟ |
|---|---|
| آرایههای موازی | names و phones با ایندکس مشترک |
| رویههای CRUD | Add، List، Search |
| جستجوی دقیق | مقایسه با lowercase (بدون حساسیت) |
| جستجوی جزئی | pos برای پیدا کردن زیررشته |
| مدیریت ظرفیت | چک MaxContacts قبل از افزودن |
چالشهای تکمیلی
- حذف مخاطب (جابجایی عناصر آخر به جا)
- ویرایش شماره با جستجو
- مرتبسازی بر اساس اسم
- منوی تعاملی با case و repeat
تبریک! 🎉
شما دوره کامل پاسکال را تمام کردید! از «سلام دنیا» تا سیستمهای کامل با آرایهها و رویهها. حالا میتوانید:
- الگوریتم فکر کنید و پیاده کنید
- کد ساختیافته و تمیز بنویسید
- به سراغ Delphi/Lazarus و برنامههای گرافیکی بروید
- هر زبان دیگری را خیلی سریعتر یاد بگیرید (مفاهیم یکیاند!)
این مبحث بخشی از دوره آموزش کامل پاسکال است.