PDA

View Full Version : سوال: مشکل در جستجو



Fastdesign
یک شنبه 24 مهر 1390, 11:00 صبح
سلام
آرایه ای و اندیس را با این مقدرا تعریف کرده ام :
A:Array[1..100] of Integer;
i:Integer;
حالا با این کدها می خوام به روش دودویی(Binary Search) در آرایه جستجو کنم :
procedure TForm1.Button1Click(Sender: TObject);
var
Num,Mid,Low,High:Integer;
begin
Num:=strtoint(Edit1.Text);
Low:=1;
High:=i;
while (Low<=High) do begin
Mid:=(Low+High) div 2;
if (Num=a[Mid]) then begin
Edit2.Text:=inttostr(Mid);
end
else if (Num>a[Mid]) then begin
Low:=Mid+1;
end
else if (Num<a[Mid]) then begin
High:=Mid-1;
end;
end;
Edit2.Text:=inttostr(Mid);
end;
نمی دونم چرا جواب نمیده!
در ضمن اعدادی که از ورودی میگره هم به صورت مرتب است و در یک ListBox قرار داده میشه
من می خوام زمانی که عمل جستجو صورت گرفت عدد مورد فوکوس بر روی عدد مورد نظر در ListBox قرار بگیره(یعنی می خوام عدد انتخاب بشه).
با چه خاصیتی در ListBox میشه این کار را انجام داد؟
دوستان اگه میشه لطف کنید این کدها را بررری کنید.
ممنونم

Felony
یک شنبه 24 مهر 1390, 16:53 عصر
var
Num, Mid, L, H: Integer;
begin
Num := StrToInt(Edit1.Text);
L := 1;
H := High(A);
while (L <= H) do
begin
Mid := (L + H) div 2;
ListBox1.ItemIndex:= Mid - 1;
if (Num = A[Mid]) then
begin
Edit2.Text := IntToStr(Mid);
Exit;
end;
if (Num > A[Mid]) then
L := Mid + 1;
if (Num < A[Mid]) then
H := Mid - 1;
end;
Edit2.Text := IntToStr(Mid);
end;

Fastdesign
یک شنبه 24 مهر 1390, 17:45 عصر
متشکرم از همکاریتون جناب تاجیک
اگه میشه در مورد نحوه عملکر این دستور بگید:
ListBox1.ItemIndex:=Mid - 1;

Felony
یک شنبه 24 مهر 1390, 19:03 عصر
متد ItemIndex ، ایندکس آیتمی که فوکوس روش هست رو مشخص میکنه ، اندیس آرایه جناب عالی از 1 شروع شده و اندیس آیتم های ListBox از 0 شروع میشه ، بنابراین آیتمی که الان در آرایه پیدا شده - 1 برابر هست با ایندکس همون آیتم در ListBox ( با توجه به اینکه ترتیب عناصر آرایه و ListBox یکی هست ) .

Fastdesign
یک شنبه 24 مهر 1390, 20:00 عصر
آیا امکان حذف عناصر آرایه هم وجود داره؟
بدین شکل که اگه آرایه ای دارای 10 عنصر باشه مثلا بخوام عنصر چهارم این آرایه را حذف کنم.
اگه میشه در مورد پست های قبلی یک مثالی بزنید
ممنونم

MohsenB
یک شنبه 24 مهر 1390, 20:24 عصر
آیا امکان حذف عناصر آرایه هم وجود داره؟
بدین شکل که اگه آرایه ای دارای 10 عنصر باشه مثلا بخوام عنصر چهارم این آرایه را حذف کنم.


سلام


procedure ArrayDelete(var arr :[Array Type] ; index :Integer);
var i :Integer;
begin
for i:= index to High(arr)-1 do
arr[i]:= arr[i+1];
SetLength(arr, Length(arr)-1);
end;

البته به شرطی که آرایتون دینامیکی باشه


موفق باشید

Felony
یک شنبه 24 مهر 1390, 21:25 عصر
آیا امکان حذف عناصر آرایه هم وجود داره؟
بدین شکل که اگه آرایه ای دارای 10 عنصر باشه مثلا بخوام عنصر چهارم این آرایه را حذف کنم.
اگه میشه در مورد پست های قبلی یک مثالی بزنید
ممنونم
برای این کار بهتره از لیست پیوندی ( Linked List ) به جای آرایه استفاده کنید .