View Full Version : گفتگو: برنامه هاي بزرگ ... الگوريتم ... آري يا نه؟!
mehdi_7070
پنج شنبه 09 خرداد 1387, 12:36 عصر
سلام
هميشه سوالي كه براي من مطرح بوده اين هست كه آيا اساسا اين الگوريتمهايي كه ما به عنوان مبتدي مينويسيم توي برنامههاي بزرگ و سنگين كاربرد داره يا نه؟
اصلا شما كساني كه معمولا پروژههاي بزرگ مينويسند ، براش ميشينيد الگوريتم بنويسيد؟
چون نوشتن الگوريتم براي يك برنامه بزرگ خيلي وقتگير هست .
البته نميدونم اون مراحلي كه براي بررسي طرح انجام ميدهيم جزء الگوريتم هست يا نه؟
من چند جور جواب هم حدس ميزنم . ببينيد كدوم درست و غلط هست .
1- الگوريتم فقط براي شروع هست و بعد كه شما خواستيد برنامههاي بزرگ انجام بدهيد كاري باهاش نداريد .
2- الگوريتم لازم نيست كامل نوشته كه مثلا شروع و پايان داشته باشه حتما . ميتونيد قسمتهاي اصلي را بنويسيد .
3- نوشتن الگوريتم تا حد زيادي به زبان برنامه نويسي كه ازش استفاده ميكنيد داره و به نوعي همون سورس هست ولي به زبان ساده تر .
4- لازم نيست حتما الگوريتم روي كاغذ نوشته بشه . ميتونيد توي ذهنتون بنويسيد .
با تشكر
Alireza_Salehi
شنبه 11 خرداد 1387, 07:37 صبح
یکی از دلایل نوشتن چنین الگوریتم هایی یاد گرفتن نحوه فکر کردن است! یعنی شما وقتی با یک مسئله مواجه میشید بتونید نوع مسئله رو تشخیص بدید و اون رو در طبقه بندی هایی که قبلا یاد گرفته اید قرار بدید، بعد از اون بتونید با روشهایی که برای حل هر دسته وجود داره اون رو حل کنید.
دلیل دیگه این که این مسائل ساده که برای اونها الگوریتم می نویسید پایه و اساس روش های پیچیده حل مسئله هستند.
در مورد حدس هاتون:
1. کسی که الفبای فارسی رو بلد نباشه نمی تونه شعر بگه!
2. الگوریتمی که سر و تهش معلمو نیست می خواد چه کاری انجام بده؟
3. طراحی الگوریتم صددرصد و بدن شک به زبان برنامه نویسی ربطی ندارد. پیاده سازی الگوریتم یک مسئله جداست. (الگوریتمی که صحت و کارایی عملکرد اون ثابت شده باشه رو میشه به روشهای مختلفی پیاده سازی کرد )
4. سعی کنید حتما روی کاغذ(البته نرم افزارهایی هست) بنویسید چون اکثرا وقتی الگوریتم پیچیده میشه ذهن افراد یاری نمیکنه!
اگر منظور شما از الگوریتم نحوه ارتباط بخش های مختلف برنامه باشه بهش میگن مهندسی نرم افزار، ولی در غیر این صورت طراحی الگوریتم کاربردهای وسیعی داره.
مثلا یک برنامه کنترل ترافیک یک نرم افزار داره که باید به روش های مهندسی نرم افزار طراحی بشه و بخش دیگه ای داره که باید عملیات مسیریابی و توزیع بار ترافیکی رو کنترل کنه که مسلما در این بخش باید از الگوریتم های پیشرفته مسیریابی و توزیع بار شبکه استفاده بشه.
mehdi_7070
شنبه 11 خرداد 1387, 11:25 صبح
خيلي ممنون دوست عزيز تا حدودي جواب را پيدا كردم .
اما سوال ديگه اين هست كه آيا وقتي شما ميخواهيد يك برنامه فرضا حسابداري و انبارداي بنويسيد ، شروع ميكنيد به نوشتن الگوريتم ؟ آيا براش الگوريتم مينويسيد؟ چون نوشتن الگوريتم كامل براي يك چنين نرم افزاري خيلي زياد و طولاني هست و به نظر من خيلي قسمتهاش را لازم نيست براش الگوريتم بنويسي . ميتوني توي ذهنت پياده كني و بعد هم سورس را بنويسي . بدون اينكه چيزي روي كاغذ بياري .
البته قاعدتا يك سري جاهاش هست كه بايد حساب شده كار و نميشه همين جوري كار كرد .
يا مثلا فرض كنيد يك نفر بخواهد يك سيستم عامل بنويسه . آيا براي همهي قسمتهاي اون الگوريتم مينويسه ؟
خلاصه بگم كه به نظر مياد يك جاهايي نياز نيست الگوريتم نوشته بشه ...
whitehat
شنبه 11 خرداد 1387, 12:01 عصر
منظور شما از نوشتن الگوريتم چيه ؟ الگوريتم نحوه انجام يا حل يك صورت مسئله است. شما براي نوشتن برنامه حسابداري مثلا بايد بدانيد چگونه قيمت تمام شده محاسبه ميشه ، حالا مي توانيد نحوه اين كار را بر روي كاغذ بياوريد و بعد پياده سازي كنيد يا اگه حافظه خوبي داريد در ذهن خود آنرا تصوير كنيد. كه تجربه نشان داده روش اول داراي خطاي كمتر و با سرعت بيشتري پياده سازي ميشه و اصطلاحا مقرون به صرفه است.
يادگيري ساير الگوريتم ديد شما را براي نوشتن الگوريتم هاي بزرگ باز مي كند. يك مثال در يك برنامه بزرگ بزنم براي جايي مجبور بودم يك كد براي كالا ها بسازم كه اين كد بايد جوري بود كه بر اساس آيتم هاي گوناگون مرتب مي شد ، اين كار در ابتدا كمي پيچيده به نظر مي رسيد اما وقتي روي مرتب سازي Radix فكر كردم ، هم به من ايده ساختن كد جديد را داد و هم كالاها بر اساس اجزاي خود با سرعت يكنواخت مرتب مي شدند.
موفق باشيد
mehdi_7070
یک شنبه 12 خرداد 1387, 10:20 صبح
خيلي ممنون whitehat جان ...
منظور شما از نوشتن الگوريتم چيه ؟
منظورم خود روش حل يا حل مسئله نيست . منظورم شيوه نگارش روش حل مسئله هست .
حالا مي توانيد نحوه اين كار را بر روي كاغذ بياوريد و بعد پياده سازي كنيد يا اگه حافظه خوبي داريد در ذهن خود آنرا تصوير كنيد. كه تجربه نشان داده روش اول داراي خطاي كمتر و با سرعت بيشتري پياده سازي ميشه و اصطلاحا مقرون به صرفه است.
من هم منظورم همين بود . الگوريتم يعني روش حل يك مسئله . حالا حتما نبايد روي يك كاغذ نوشته بشه ، شروع و پايان داشته و ... . بعضي از مسائل چون آسون هستند سريع توي ذهن حساب كتاب ميكني و بعضي كه پيچيده ميشه مياري روي كاغذ .
منظور شما همين بوده؟
يك سوال ديگه : آيا همزمان نوشتن الگوريتم و پياده سازي اون براي مسائل ساده ايرادي داره؟
مثلا فرض كنيد من ميخوام يك login خيلي ساده درست كنم .
ميگم كه خوب اول بايد يك پسورد از كاربر بگيرم . پس مي نويسم :
Pass=Inputbox("Please enter password")
بعد بايد چك كنم ببينم آيا با "1" برابر هست يا نه . اگه برابر بود form2 را نشون بده . پس :
If Pass="1" then form1.show
با تشكر
whitehat
یک شنبه 12 خرداد 1387, 10:42 صبح
منظور شما همين بوده؟
دقيقا، و البته آوردن روي كاغذ بصورت اصولي دو مزيت ديگر هم داره اول اينكه روش زود از خاطر شما نمي رود و دوم اينكه بعدا مي توانيد در مسائل ديگر به آن رجوع كنيد.
آيا همزمان نوشتن الگوريتم و پياده سازي اون براي مسائل ساده ايرادي داره؟
خير ، اما به همان دليل كه گفتم بهتره آنرا مستند كنيد، همين مثالي كه زديد به ظاهر ساده است اما مثلا شما مي خواهيد براي لاگين عدد IP، يا سريال هارد يا ... را چك كنيد ولي الان مورد نيازتان ممكنه نباشه!
موفق باشيد
mehdi_7070
یک شنبه 12 خرداد 1387, 16:24 عصر
دقيقا، و البته آوردن روي كاغذ بصورت اصولي دو مزيت ديگر هم داره اول اينكه روش زود از خاطر شما نمي رود و دوم اينكه بعدا مي توانيد در مسائل ديگر به آن رجوع كنيد.
خيلي ممنون :قلب:
به مورد خيلي خوبي اشاره كرديد ... خيلي از مسائل بوده كه من قبلا حل كردم ، ولي چون جايي يادداشت نكردم ، الان يادم نيست :اشتباه:
با تشكر
mehdad.koulab
یک شنبه 12 خرداد 1387, 19:52 عصر
از قدیم گفتن که همه جا به نوبت حالا اگه قدم اولو بر نداری قدم دوم رو از کجا میخوای برداری؟
mehdi_7070
دوشنبه 13 خرداد 1387, 10:54 صبح
از قدیم گفتن که همه جا به نوبت حالا اگه قدم اولو بر نداری قدم دوم رو از کجا میخوای برداری؟
ممنون دوست عزيز ...
منظورم اين نبود كه اصلا الگوريتم نباشه ... بلكه شيوه نگارش اون بود . اينجا گفتم :
منظورم خود روش حل يا حل مسئله نيست . منظورم شيوه نگارش روش حل مسئله هست .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.