برنامه ای که یک لیست پیوندی رو بگیره و بر عکس کنه
برنامه ای که یک لیست پیوندی رو بگیره و بر عکس کنه
سلام سامان جان.نقل قول:
نوشته شده توسط saman_uv
منظور شما از بر عکس کردن لیست پیوندی یعنی چه عزیز ؟
لیست پیوندی که همان link list و pointer ها هستند که برای سرعت و همچنین بهینه استفاده کردن از حافظه هستند.
شما چه برنامه ای میخواهید که با لیست پیوندی نوشته شود .
اصولا میگن که یک Quick sort رو با لیست پیوندی بنویسید .
ولی بر عکس کردن این که مانی نمیده .
حالا شما بفرمائید که چه برنامه ای باشه آیا هر برنامه ای و راجب بر عکس کردنش هم کمی توضیح بدین متشکر میشم.
:D
سلام فرق نمیکنه چه برنامه ای باشه مثلا یه لیستی که دارای 5 تا عضو رو با استفاده از کد نویسی بگیره و اونو سروته کنه همین .فقط با کد نویسی باشه ها
سلام من یک معکوس کردن یک لیست رو میگذارم.
procedure invert(var x:pointer);
var
p,q,r:pionter;
begin
p:=x
q:=nil;
while p<> nil do
begin
r:=q;
q:=p;
p:=p^.link; yani {p moves to nest node}
q^.link:=r; yani {link q to preceding node}
end;
x:=q;
end; {of invert}
اینم ایجاد یک گره از لیست پیوندی
procedure create 2(var first:pointer);
var
second:pointer;
begin
new(first);
new(second);
first^.link:=second; yani {link first node to second}
second^.link:=nil; yani {last node}
first^.data:=10; yani entekhab data dar first}
second^.data:=20; yani {entekhab data dar second node .yani eshare gar dovomi}
end; {of create 2}
شرمنده کردی سوالات مربوط به ساختمان داده رو تو کدوم قسمت بپرسم بهتره؟
سلام دوست عزیز .نقل قول:
نوشته شده توسط saman_uv
به نظرم فلان همینجا شما سوالات رو بپرس بد اگه ممکن هست فقط خودت موضوع رو ویرایش کن و بزن تمامی مسائل و مباحث مربوط به ساختمان داده ها در پاسکال ((Data structures.
اگه خوب توضیح ندادم دیگه شما ببخشید آخه اینجا متاسفانه کد ها رو نمیتونی از چپ به راست بنویسی و من خیلی سعی کردم که لاقل سیمیکالن ها درست سر جاش باشه.
اگه بخواهیم 2 تا لیست مرتب رو بگیره در هم ادغام کنه و مرتب بنویسه چی کنیم؟اگه کد نویسیشم بکنین حال دادین
:oops:
سلام که مینویسم =تحقیق یکسان بودن دو لیست با استفاده از جستجو ی ترتیبی هست
Procedure verify(F1,F2:alist;n,m:integer);
var
i,j:integer;
marked:array[1..maxsize] of boolean;
begin
for i:=1 to m do marked[i]:=false;
for i:=1 to n do
begin
seqsearch(f2,j,m,f1[i].key);
if j=0 then writeln(F1[i].key,'not In F2.')
else begin
if F1[i].other <>F2[j].other then
writeln('Discrepancy In ' , F1[i].key,F1[i].other,F2[j].other);
marked[j]:=true;
end;
end;
for i:=1 to m do
if Not marked[i] then writeln (F2[i].key,'Not In F1.');
end;
سلام خیلی اقایی ولی فکر کنم به سوال دقت نکردی میخوام 2 تا لیست رو قاطی کنه و مرتب بنویسهنقل قول:
نوشته شده توسط saman_uv
یعنی این که ما که 2 تا لیست مراتب شده داریم میخواهیم ببینیم که آیا این 2 لیست با هم اول یکی هستند یا نه برای این که ادغام کنیم.
یا این که
درج به لیست مراتب شده .
Procedure insert(r:records;var list:alist; i:integer);
begin
while r.key <list[i].key do
begin
list[i+1]:=list[i];
i:=i-1;
end;
list[i+1]:=r;
end;
شما برای این که بخواهید از رکورد استفاده کنید و هی نزنید نام رکورد بد . بد کی اول with رو باید بزنید در برنامه .
که در داخل این برنامه اینطوری استفاده کنید.
r.key
سلام دوست عزیز .
خوب من تا حالا برای همه توضیح میدادم که بدونن چی به چی هست و قدم به قدم گفتم
حالا :
ادغام 2 لیست مراتب شده .
Procedure Merge(var x,z:alist; l,m,n:integer);
var
i,j,k,t:integer;
begin
i:=l; k:=l; j:=m+1;
while ((i<=m) and (j<=n)) do
begin
if x[i].key <=x[j].key then begin
z[k]:=x[i];
i:=i+1;
end
else begin
z[k]:=x[j];
j:=j+1;
end;
k:=k+1;
end; {end of while)
if i > m then for t:=j to n do z[k+t-j]:=x[t]
else
for t:=i do m do z[k+t-i]:=x[t];
end; {end of merge}
توضیحات
if i>m then یعنی (Zk,.....,Zn):=(Xj,....,Xn)
این البته الگوریتم هست دیگه خودت بهتر میفهمی که چی به چی هست ولی خاطرت جمع باشه که کد صحیح هست.
:D
سلام و یک دنیا ممنون. در درست بودن کد هاهم شکی نیست منم منظورم الگوریتم بود مرسی
سلام آقا خواهش میکنم کاری نکردم .امید وارم موفق باشید .نقل قول:
نوشته شده توسط saman_uv
اگه باز سوالی داشتید که من حقیر بتونم جواب بدم در خدمتم.
:D
سلام مزاحم همیشگی اومد
تابعی که عددی راگرفته و در یک لیست ان را جستجو کند؟
:oops:
سلام سامان جان
.این سوال دیگه مربوط به ساختمان داده ها نمیشه عزیز.
این تابع که شما میگید من که ندیدم حالا شاید باشه .معمولا شما باید خودتون این function رو بنویسید.منظور شما حالا توابع خود پاسکال هست یا این که میخواهید این تابع رو بنویسیم.
:D :?: :!:
سلام بي زحمت ميخواستم تابع رو بنويسين
سلام سامان جان این البته مربوط به ساختمان داده ها نمیشه موافقی ؟نقل قول:
نوشته شده توسط saman_uv
ولی من بهت بگم که باید اول لیستی داشته باشی که بخوای در آن لیست عددی که وارد میشه رو جستجو کنی یا نه؟ اون لیست هم باید باشه که حالا اگه بود جستجو کنه اگه نبود بگه که این عدد مورد نظر شما موجود نبود درسته ؟
:D
سلام کاملا مخالفم چون این مبحث مربوط به ساختمان داده میشه ولی با ادامه صحبتات کاملا موافقم
یه لیست پیوندی داریم حالا توش هر چی هست بی خیال تو اون لیست میخواهیم دنباله یه عدد بگردیم حالا اگه برنامش رو لطف کنی ممنون میشم
سلام دیگه اونو نمیخوام برنامه preorder یا postorder رو کسی بلده؟برای امشب میخوام
سلام سامان جان .
یعنی همون postorder preorder حالت پسوندی و پیشوندی stack دیگه من الگوریتم مینویسم برات .
Preorder:رفتن به چپ -اگه حرکت ممکن نبود به راست و شروع مجدد یا برگشت به عقب تا جائی که حرکت به راست ممکن شود و ادامه .
Postorder: مانند A b / c d * e + اینطوری هست یعنی اول با مثال میگم.
Procedure Preorder (CurrentNode:TreeNode:treePointer);
begin
if CURRENTNODE <> NIL then
begin
write (CurrentNode.data); yani in ke flesh ro be bala bad .data
preorder(CurrentNode.leftchild);
Preorder(CurrentNode.RightChild);
end {of if}
end; {of preorder}
یعنی پدر چپ تا جائی که میشه حالا به راست .اینطوری که میدونی یعنی چی میگم؟ نخواندی بگی اینا چی اینا اصطلاحات بر ای تست کنکور کارشناسی هست .
حالا
Procedure Postorder(Currentnode:Treepointer);
begin
IF CurrentNode <> NIL then
begin
Postorder(Currentnode.Leftchild);
Postorder(Currentnode.Rightchild);
Write(CurrentNode.data);
end {of if}
end; {of Postorder}
سامان جان حالا inorder هم هست ولی نگفتی میخوام اگه خواستی اونم میگم .
خیر از جونیت ببینی نه دیگه اونیکی رو نمیخوام دمت گرم
سلام آقا قابلی نداشت الان آقای کوسه میگه چرا پست بیهوده میدی .خواهش میکنم. :Dنقل قول:
نوشته شده توسط saman_uv
سلام برنامه ای که تعداد برگهای یک درخت رو بشماره؟
سلام سامان جان این برنامه یا الگوریتم نداره این یک فرمول داره که تعداد برگ های یک درخت رو میتونی به دست بیاری .که اونم من دقیق یادم نیست ولی فرمول رو بلد باشی که احتمالا بهت گفتن میتونی با همون بسازی .اگه فرمول رو میدونی بگو .من خیلی وقت پیش یادم بود .3 سال پیش . :D
منم بلد نیستم ولی احتمال میدم این باشه
2 ^ n-1
سلام سامان جان البته این در درخت های دودیی نخی فرق میکنه ها یعنی به نظرم فرمولش ثابت نیست .
عرضه ادب نستا جان
برای همین فرمول کاش زحمت کد نویسیشو بکشی یا راهنمایم کنی که باید چیکار کنم فرمولشم زیاد مهم نیست فکر کنم تو ریاضی گسسته فرمولش باشه میگردم اگه پیداش کردم میگم
سلام سامان جان تو فرمول دقیق رو بنویس که مثلا k میشه گره یا i میشه برگ مثلا فرمول رو بنویس جلوش بزن که اینا چی به چی هست و میخای چی محاسبه بشه من ببینم چه میکنم برات . :D
سلام نستا جان خسته نباشی
اگه p ریشه باشه و q برگ باشه احتمالا با روش زیر حل شه
p=q+1
البته تو کتاب گسسته اینجوری نوشته بود خودم ترجمش کردم به این نتیجه رسیدم درست یا غلط نمیدونم
سلام سامان جان این فرمول غلط هست چرا؟
چون که شما میخای تعداد برگ های یک گره رو به دست بیاری .
خوب p=q+1 این که گره رو بدست میاری و از روی برگ های یک گره + 1
ولی شما بر عکس این رو میخای یعنی باید گره رو بدی برات تعداد برگ های اون رو محاسبه کنه درسته ؟
:D
سلام راست میگی مخ من دیگه فاز نمیده مثله اینکه باید بیخیالش شیم :cry: :cry: :cry:نقل قول:
نوشته شده توسط Nesta
سلام سامان جان اگه دوستانی که خوب داری میتونی فرمول رو سوال کنی خیلی راحت هست به خدا من گشتم پیدا نکردم برات و گر نه که میگزشتم حالا باز اگه دیدی بگو چون 5-6 خط بیشتر نمیشه یعنی تعداد گره رو میدی بد با استفاده از اون فرمول میگی که تعداد برگ های اون درکه رو محاسبه کنه .
سلام از اينكه شما زحمت ميكشي خيلي ممنونم
نستا جان شما اين درسا رو گذروندي تو كاري از هر مبحثه ساختمان سه چارتا از سوالهاي كه احتمال ميدي براي امتحان بياد بگي؟ (پيچيدگي.درخت.ليست پيوندي.صف و پشته) با تشكر
1-الگوریتم quick sort یا quick Search
2-عدد 10 رو به وسط گره اضافه کنید با الگوریتم .
3- یک گره رو از انتهای یک لیست حذف کنید.
4-درج یک گره به فلان لیست .
5-درخت دودیی ..مثلا پیماش inorder or preorder ETGD...
رو بکشید.
6-عمق این گره چقدر هست .اگه یک درخت N تا سطح داشته باشه مثلا چند تا برگ داره با فرمول .
مربع جادویی ...
اگه خونده باشی .
postfix-prefix
ایجاد یک لیست با دو گره .
اضافه به یرک پشته پیوندی -یا صف پیوندی.
سطح فلان گره چند عضوی .
2تا سوال حتمی اینطوری که میگن ADFDHEF رو بر اساس preorder در مثلا درخت دودیی راسم کنید .
یا شکل میدان میگن preorder آن چی میشه .
عداد فیبو منچی ...
heap ها .اینا اکثرا سوال ها هست .
سلام من یه برنامه با پاسکال میخوام که بتونه تاریخ میلادی رو به هجری و برعکس تبدیل کنه :?: :idea:نقل قول:
نوشته شده توسط Nesta
سلام آقای komeyl .
ورود شما رو تبریک میگیم.
ولی دوست عزیز اینجا مربوط به پاسکال نمیشه شما لطف کنید در قسمت پاسکال سوال کنید .متشکر.
:evil: سلام به همه
من يه برنامه مي خوام كه يك سري عدد را گرفته و در يك آرايه به صورت مرتب شده بريزه.
بعدش بتونه هر عددي رو كه بخوايم به آرايه اضافه كنيم جوري اضافه كنه كه ترتيب آرايه به هم نخوره
با كد پاسكال
به صورت زير:
1- آرايه اي را بگير و آن را مرتب كن
2-عددي را كه مي خواهيم وارد آرايه كنيم را بگير
3-مكان مناسب عدد جديد را پيدا كن
4-شيفت دادن تمام اعداد كوچكتر از عدد جديد ( واسه اينكه يه جايه خالي ايجاد بشه)
5-درج عدد جديد در جاي خالي اي كه ايجاد كرديم
( البته اگه از راههاي ديگه هم بتونين ممنون ميشم) ;)
سلام دوست عزیز اون برنامه که میخواهید آقای کمیل ،سورسش در سایت ها وجود داره منتها شاید برای دلفی باشه ولی شما از کد های اون میتونین استفاده کنین.و احتمالا یک procedure هست .
طرزه ساخت یه درخت heap رو میخواستم