با کمک هم برنامه بنویسیم!!!

abc_ramak

عضو جدید
کاربر ممتاز
می تونیم همینجا برنامه های ساده بنویسیم برای اینکه تازه کارا با مراحل کار آشنا بشن و همچنین با هم فکری برنامه های پیچیده بنویسیم.
من پاسکال رو پیشنهاد می کنم، چون بیشتر برنامه نویسای آماتور و حرفه ای و اکثر دانشجوها باهاش کار کردن.
هدف ما بیشتر آشنایی با مراحل حل مساله هست که تمرین می خواد
امیدوارم دوستان همکاری کنن :gol:
 

yasin_d

عضو جدید
کاربر ممتاز
ایده خوبی است.
می تونید از برنامه های ساده شروع کنید و بعد سراغ سوال های ACM برید .
برای شروع خودت یه نظر بده ramak .
امیدوارم موفق باشی
 

abc_ramak

عضو جدید
کاربر ممتاز
سودوکو

سودوکو

ایده خوبی است.
می تونید از برنامه های ساده شروع کنید و بعد سراغ سوال های ACM برید .
برای شروع خودت یه نظر بده ramak .
امیدوارم موفق باشی

خوب الان به پیشنهاد یکی از دوستان دارم سعی می کنم راهی برای حل سودوکو پیدا کنم
ولی زیاد ساده نیست
اصلا نمی دونم می شه این کارو کرد یا نه :warn:
حالا نظر بقیه چی باشه
 

yasin_d

عضو جدید
کاربر ممتاز
برای شروع:
من خودم زیاد در مورد سودوکو نمی دونم و تا حالا به حلش و نوشتن برنامه واسه اون فکر نکردم.

سودوکو چیست: سودوکو (sudoku) به جدول اعدادی گفته می‌شود که امروزه یکی از سرگرمیهای رایج در کشورهای مختلف جهان به شمار می‌آید.



نوع متداول سودوکو در واقع نوعی جدول است که از ۹ ستون عمودی و ۹ ستون افقی تشکیل شده و البته کل جدول هم به ۹ ستون کوچکتر تقسیم می‌شود.
قانون اول: در هر سطر جدول باید تمامی اعداد ۱ الی ۹ بدون تکرار قرار گیرد.
قانون دوم: در هر ستون جدول باید تمامی اعداد ۱ الی ۹ بدون تکرار قرار گیرد.
قانون سوم: در هر ناحیه جدول باید تمامی اعداد ۱ الی ۹ بدون تکرار قرار گیرد

سختی کار آنجاست که در ابتدا تعدادی خانه به صورت رندوم مقدار می گیرند.

نمونه حل شده:


اطلاعاتی راجع به سودوکو
http://en.wikipedia.org/wiki/Sudoku
http://www.angusj.com/sudoku/hints.php
 

shadii

عضو جدید
خیلیییی پیشنهاد خوبی بود من حاضرم ولی با پاسکال اصلا موافق نیستم چون خیلی جاها به جای پاسکال c رو برای دانشجوها تدریس می کنن البته دانشگاه های خوب!پاسکال دیگه ور افتاده.
 

abc_ramak

عضو جدید
کاربر ممتاز
خیلیییی پیشنهاد خوبی بود من حاضرم ولی با پاسکال اصلا موافق نیستم چون خیلی جاها به جای پاسکال c رو برای دانشجوها تدریس می کنن البته دانشگاه های خوب!پاسکال دیگه ور افتاده.

ولی من C نخوندم :(
اصلا یه کاری کنیم
فقط الگوریتم بنویسیم
بعد هر کس با هر زبونی که خواست اینجا بنویسه :D
 

abc_ramak

عضو جدید
کاربر ممتاز
لینک ها خیلی خوب بودن
با کمک اونا یه کارایی کردم :D

arr=array [1..9] of integer
mat3=array[1..3,1..3] of tarr
mat9=array[1..3,1..3] of tmat3

آرایه رو از 1 تا 9 پر کردم
هر عددی که تو ماتریس کوچک و اون سطر و ستون ماتریس بزرگ هست، توی آرایه تبدیل به صفر میشه
حالا بقیش .... :cool:
 

abc_ramak

عضو جدید
کاربر ممتاز
یه ماتریس 9*9 داریم که همون سودوکو هست (هر جا گفتم ماتریس منظورم اینه!)
یه آرایه سه بعدی 9*9*9 (و هر جا گفتم آرایه منظورم اینه!)
قبل از هر کاری آرایه رو پر می کنم:
for i:=1 to 9 do
for j:=1 to 9 do
for k:=1 to 9 do
arr[i,j,k]:=k

و تمام خانه های ماتریس رو صفر می ریزم:
for i:=1 to 9 do
for j:=1 to 9 do
a[i,j]:=0

حالا کاربر اعداد رو وارد ماتریس می کنه...

یه کمم شما فکر کنین دیگه
قرار شد با هم برنامه بنویسیما
 

abc_ramak

عضو جدید
کاربر ممتاز
پس چی شد؟
من برنامه رو نوشتم تموم شد! :cool:
یعنی کسی نظری نداره؟! :surprised:
 

majid421

عضو جدید
سلام

سلام

خسته نباشید
÷یشنهاد خوبیه ...........من هم موافقم اگر هم چیزی بلد باشم ..که نیستم :biggrin: دریغ نمی کنم
با c یا c++ موافقم
چون نمی دونم حتی پاسکال رو چطوری می نویسن :biggrin:
در مورد این سوالی هم که مطرح شده چیزی نمی دونم .....سعی می کنم از نوشته های شما چیزی بفهمم و به معلوماتم اضافه کنم
موفق باشید :gol:
 

abc_ramak

عضو جدید
کاربر ممتاز
خوبه که موافقین
ولی انگار خیلی ها موافق نیستن
بابا یه چیزی بنویسین دیگه
 

abc_ramak

عضو جدید
کاربر ممتاز
کد:
type
tarr=array [0..8,0..8,0..8] of integer;
var
arr:tarr;
i,j,k,t,l,p:integer;
s:string;
procedure mat3(var i,j,p:integer);
begin
if j<3 then
begin
if i<3 then
p:=1
else if i>5 then
p:=3
else
p:=2;
end;
if (j>2) and (j<6) then
begin
if i<3 then
p:=4
else if i>5 then
p:=6
else
p:=5;
end;
if j>5 then
begin
if i<3 then
p:=7
else if i>5 then
p:=9
else
p:=8;
end;
end;
begin
for i:=0 to 8 do
for j:=0 to 8 do
if gr.Cells[i,j][1]='0' then
gr.Cells[i,j]:=inttostr(0);
gr.Font.size:=4;
p:=0;
for i:=0 to 8 do
for j:=0 to 8 do
for k:=0 to 8 do
arr[i,j,k]:=k+1;
for i:=0 to 8 do
for j:=0 to 8 do
if (strtoint(gr.Cells[i,j][1])<>0) then
begin
mat3(i,j,p);
case p of
1:begin
for t:=0 to 2 do
for l:=0 to 2 do
arr[t,l,strtoint(gr.Cells[i,j])-1]:=0;
end;
2:begin
for t:=3 to 5 do
for l:=0 to 2 do
arr[t,l,strtoint(gr.Cells[i,j])-1]:=0;
end;
3:begin
for t:=6 to 8 do
for l:=0 to 2 do
arr[t,l,strtoint(gr.Cells[i,j])-1]:=0;
end;
4:begin
for t:=0 to 2 do
for l:=3 to 5 do
arr[t,l,strtoint(gr.Cells[i,j])-1]:=0;
end;
5:begin
for t:=3 to 5 do
for l:=3 to 5 do
arr[t,l,strtoint(gr.Cells[i,j])-1]:=0;
end;
6:begin
for t:=6 to 8 do
for l:=3 to 5 do
arr[t,l,strtoint(gr.Cells[i,j])-1]:=0;
end;
7:begin
for t:=0 to 2 do
for l:=6 to 8 do
arr[t,l,strtoint(gr.Cells[i,j])-1]:=0;
end;
8:begin
for t:=3 to 5 do
for l:=6 to 8 do
arr[t,l,strtoint(gr.Cells[i,j])-1]:=0;
end;
9:begin
for t:=6 to 8 do
for l:=6 to 8 do
arr[t,l,strtoint(gr.Cells[i,j])-1]:=0;
end;
 
end;
for t:=0 to 8 do
begin
arr[i,t,strtoint(gr.Cells[i,j])-1]:=0;
arr[t,j,strtoint(gr.Cells[i,j])-1]:=0;
end;
end;
for i:=0 to 8 do
for j:=0 to 7 do
if length(gr.cells[i,j])=3 then
begin
s:=gr.cells[i,j];
for k:=j+1 to 8 do
if (gr.cells[i,k]=s) then
for t:=0 to 8 do
begin
arr[i,t,strtoint(s[2])-1]:=0;
arr[i,t,strtoint(s[3])-1]:=0;
end;
end;
for i:=0 to 8 do
for j:=0 to 8 do
for k:=0 to 8 do
begin
if (strtoint(gr.Cells[i,j][1])=0) and (arr[i,j,k]<>0) then
begin
gr.Cells[i,j]:=gr.Cells[i,j]+inttostr(arr[i,j,k]);
end;
end;
for i:=0 to 8 do
for j:=0 to 8 do
if length(gr.cells[i,j])=2 then
gr.Cells[i,j]:=gr.Cells[i,j][2];
 
for i:=0 to 8 do
for j:=0 to 7 do
if length(gr.cells[i,j])=3 then
begin
s:=gr.cells[i,j];
for k:=j+1 to 8 do
if (gr.cells[i,k]=s) then
for t:=0 to 8 do
begin
arr[i,t,strtoint(s[2])-1]:=0;
arr[i,t,strtoint(s[3])-1]:=0;
end;
end;
 
آخرین ویرایش:

yasin_d

عضو جدید
کاربر ممتاز
از توجهتون به فعالیت ممنونم و خوشحال شدم که فعالیت زیادی دارید.
من خیلی سرم شلوغه وگرنه خودم با شما همکاری می کردم.
از دوستان دیگه خواهش می کنم که فعالیتشون رو بیشتر کنند و امیدوارم موفق باشید..

راستی برای نوشتن متن یک برنامه از قابلیت کد http://www.www.www.iran-eng.ir/images/editor/code.gif در نوار ابزار بخش نوشتن تاپیک استفاده کنید باعث میشه کدتون خوانا تر باشه.
ممنون
 

abc_ramak

عضو جدید
کاربر ممتاز
راستی برای نوشتن متن یک برنامه از قابلیت کد http://www.www.www.iran-eng.ir/images/editor/code.gif در نوار ابزار بخش نوشتن تاپیک استفاده کنید باعث میشه کدتون خوانا تر باشه.
ممنون

مرسی، درستش کردم ;)
 

abc_ramak

عضو جدید
کاربر ممتاز
همچنان کسی نظری نداره؟
خوب شاید این برنامه یه کم سخت بود. :w08:
با یه برنامه ساده تر چطورین؟
مثلا ... :w20:
نمی دونم
بابا کمک کنین :w06:
 

jalili_hasan

عضو جدید
سلام بچه ها
امید وارم از این که یه دفعه وارد بحثتون میشم ناراحت نشید بالاخره ماهی رو هر وقت از آب یگیری تازس!!!
من فکر میکنم یکی از راه حل هایی که البته مقرون به صرفه هم نیست اینه که ما تمام حالت هائی که امکان داره تا پر بشه رو هی بدست بیاریم و هی چک کنیم ببینیم اونی که میخوایم هست یا نه!!! :confused: برای این کار هشتادو یک منهای n تا حلقه ی تو در تو لازم داریم که n در اینجا تعداد اعداد وارد شده هستش :surprised:تا فقط ماتریسو بسازیم و بعد هم برای چکش وسط اون هفتاد هشتاد تا حلقه !!! سه تا حلقه ی پارالل لازم داریم که هر کدوم دو تا تو در تو هستن برای چکش این ساده ترین و البته بدتری راهه راه های بهتری هم هست که فعلاً وقت ندارم بگم باشه تو یه فرصت دیگه!!!!!!!!!!!!!!:heart::gol::)
 

abc_ramak

عضو جدید
کاربر ممتاز
سلام بچه ها
امید وارم از این که یه دفعه وارد بحثتون میشم ناراحت نشید بالاخره ماهی رو هر وقت از آب یگیری تازس!!!
من فکر میکنم یکی از راه حل هایی که البته مقرون به صرفه هم نیست اینه که ما تمام حالت هائی که امکان داره تا پر بشه رو هی بدست بیاریم و هی چک کنیم ببینیم اونی که میخوایم هست یا نه!!! :confused: برای این کار هشتادو یک منهای n تا حلقه ی تو در تو لازم داریم که n در اینجا تعداد اعداد وارد شده هستش :surprised:تا فقط ماتریسو بسازیم و بعد هم برای چکش وسط اون هفتاد هشتاد تا حلقه !!! سه تا حلقه ی پارالل لازم داریم که هر کدوم دو تا تو در تو هستن برای چکش این ساده ترین و البته بدتری راهه راه های بهتری هم هست که فعلاً وقت ندارم بگم باشه تو یه فرصت دیگه!!!!!!!!!!!!!!:heart::gol::)

مرسی که ماهی بدبخت مارو از آب گرفتین :D
کدی که من نوشتم رو دیدین؟
کار می کنه
فقط مشکل اینه که اگه کاربر به صورت دستی یه عدد اشتباهی قرار بده، برنامه تشخیصش نمی ده :surprised:
البته می شه درستش کرد، خیلی سخت نیست.
اگه وقت کنم روش کار می کنم :)
 

oxision

عضو جدید
کاربر ممتاز
پیشنهاد من استفاده از مساله 8 وزیر هست. میدونی که در برنامه نویسی 2 نکته حائز اهمیته 1) زمان 2) حافظه.
البته اگه طراحی الگوریتم رو کمی وارد باشی حله.
 

abc_ramak

عضو جدید
کاربر ممتاز
پیشنهاد من استفاده از مساله 8 وزیر هست. میدونی که در برنامه نویسی 2 نکته حائز اهمیته 1) زمان 2) حافظه.
البته اگه طراحی الگوریتم رو کمی وارد باشی حله.

8 وزیر چی چی یست؟ :surprised:
ممکنه بیشتر توضیح بدین؟
 

oxision

عضو جدید
کاربر ممتاز
تو اصفهانی هستی یا تبریزی ؟ :surprised:
واحد طراحی الگوریتم رو نگذروندی؟
پیشنهاد می کنم کتاب طراحی الگوریتمها نوشته دکتر محمود نقیب زاده رو بخونی.
سر فرصت مناسب توضیح می دم.
 

abc_ramak

عضو جدید
کاربر ممتاز
تو اصفهانی هستی یا تبریزی ؟ :surprised:
واحد طراحی الگوریتم رو نگذروندی؟
پیشنهاد می کنم کتاب طراحی الگوریتمها نوشته دکتر محمود نقیب زاده رو بخونی.
سر فرصت مناسب توضیح می دم.

نه من IT می خونم از این چیزا نداریم.
چشم می خونم.
اصفهانی؟ :cool:
 

jalili_hasan

عضو جدید
مرسی که ماهی بدبخت مارو از آب گرفتین :D
کدی که من نوشتم رو دیدین؟
کار می کنه
فقط مشکل اینه که اگه کاربر به صورت دستی یه عدد اشتباهی قرار بده، برنامه تشخیصش نمی ده :surprised:
البته می شه درستش کرد، خیلی سخت نیست.
اگه وقت کنم روش کار می کنم :)
خواهش می کنم بالاخره باید یکی این ماهی رو میگرفت دیگه!!!:D
راستش من چون از پاسکال اصلاً سر در نمیارم خیلی از قسمت های کدتون رو نفهمیدم :redface:
(آخه طبق سیلابس درسی تو دانشگاه امسال زبان برنامه نویسی C++(مبانی کامپیوتر) و C#(برنامه سازی پیشرفته) درس دادن )
حالا به هر حال سعی میکنم کد C# برنامه رو اینجا بنویسم (البته اگه سوادمون بکشه و الگوریتمامون یکی پس از دیگری شکست نخوره و .... ! )
در ضمن اگه لطف کنین حلقه هاتون رو یک مقداری جدا بنویسین تا تفکیکش برای خواننده ها یه کم راحت تر باشه مثلاً داخل { } بنویسین خیلی ممنون میشم;)

موفق باشید:gol::heart:
 

kolak2

عضو جدید
سلام به شما
من تازه دانشگاه قبول شدم سال اولم بود كه امتحان مي دادم و در دانشگاه دولتي در شهر خودم قبول شدم در رشته ي نرم افزار من خيلي دوست دارم كه در زمينه وي‍ژوال بيسيك كار كنم
البته نمي دونم كه شما با چه نوع برنامه نويسي تخصص داريد
با تشكر كولاك:razz:
 

oxision

عضو جدید
کاربر ممتاز
دوست عزیز علامتهای {} در پاسکال به معنای توضیحات هستند . مثل // و /* */ در C
 

abc_ramak

عضو جدید
کاربر ممتاز
سورس رو بصورت فایل pdf اینجا میذارم.
البته بعد از تغییرات لازم که یه کم طول می کشه.
فایل اجراییش رو هم میذارم.
راستی اگه کسی پیشنهادی برای شروع یه برنامه جدید داره بگه. :)
 

oxision

عضو جدید
کاربر ممتاز
بیایم با هم یک بازی بنویسیم. یک بازی کامپیوتری !
که بعد در همین سایت قرار بدیم در لیست بازیها .
 

oxision

عضو جدید
کاربر ممتاز
خوب منم تا حالا انجام ندادم. دوست دارم عملی کاری انجام بدم. مثل بازی Tetris یا حتی سخت تر بازیهای گرافیکی بالا.
باید از کم شروع کنیم و بعد پله پله بالا بریم . ;)
 
بالا