تبليغاتX
.:ecQom:.
انتخاب سكو و ابزار برنامه‌نويسي تحت لينوكس، يكي از مشكل‌ترين مراحل بسياري از پروژه‌هاي نرم‌افزاري محسوب مي‌شود. تفاوت‌هاي ذاتي محيط سيستم‌عامل لينوكس با ويندوز، يكي از اساسي‌ترين دلايل اين موضوع است. در واقع مستقل بودن سيستم رابط گرافيكي كاربر از سيستم‌عامل، موجب شده است كه نرم‌افزارهاي كاربردي تحت لينوكس را بتوان به سه گروه تفكيك كرد. گروه نخست شامل نرم‌افزارهايي است كه از ابزارهايي براي توليد آن‌ها استفاده شده است كه از سيستم windowing مستقل خود استفاده مي‌كنند. مانند زبان و محيط برنامه‌نويسي جاوا، kylix ،TCL و غيره.
 
اما بسياري از محيط‌هاي برنامه‌نويسي ديگري كه براي توسعه نرم‌افزار در لينوكس طراحي شده‌اند، به سيستم‌هاي گرافيكي خارجي تكيه مي‌كنند و بر همين اساس به‌دليل رواج و فراواني كاربرد محيط‌هاي گرافيكي و ميزكار‌هايي مانند kde يا gnome، مي‌توان آنرا به دو زير گروه ديگر تقسيم كرد.

گروهي از برنامه‌هايي كه از سيستم گرافيكي و مديريت پنجره gnome استفاده مي‌كنند و گروه ديگري كه بر توابع و كتابخانه‌هايي موجود در محيط kde تكيه دارند (به همين دليل نرم‌افزارهايي كه براي اجرا تحت kde طراحي شده‌اند، به‌طور معمول حروف k را در ابتداي نام خود يدك مي‌كشند.

مانند kppp يا kHTML و غيره. به همين ترتيب، نرم‌افزارهايي كه براي كار در محيط gnome توسعه داده شده‌اند، از حرف g در ابتداي نام خود استفاده مي‌كنند).

هر يك از اين دو ميزكار معروف لينوكس داراي ابزارهاي گوناگوني براي طراحي و توليد نرم‌افزار هستند. به عنوان مثال، برنامه‌نويسان زبان برنامه‌‌نويسي مانند C يا ++C مي‌توانند بر حسب مورد و سليقه خود از كتابخانه‌هاي نرم‌افزاري گوناگوني براي توليد نرم‌افزارهاي تحت لينوكس استفاده كنند. مثلاً مجموعه توابع كتابخانه‌اي (Qt (toolkit (براي توليد نرم‌افزارهايي كاربردي KDE) يا +GTK (براي برنامه‌نويسي در محيط Gnome)وجود دارند.

واقعيت آن است كه بايد اعتراف كرد كه موضوع برنامه‌‌نويسي تحت لينوكس صرف نظر از آنكه با چه ابزاري و در چه سكويي كار شود، با برنامه‌نويسي در محيط ويندوز تفاوت بسيار دارد. شايد اغراق نباشد اگر بگوييم كه برنامه‌نويسي لينوكس براي بسياري از كاربران اين سيستم‌عامل، همچون كابوس شبانه‌اي است كه سال‌ها خواب راحت را از آنان سلب كرده است!

در اين مورد استثنايي نيز وجود دارد كه مي‌تواند پاياني بر كابوس برنامه‌‌نويسي تحت لينوكس باشد. در اختيار داشتن محيط برنامه‌نويسيي مانند ويژوال بيسيك در ويندوز، براي بسياري از كاربران لينوكس آرزويي دست‌نيافتني جلوه مي‌كرد. اما پروژه‌اي كه از چند سال قبل آغاز شده است، به‌تازگي به مرحله‌اي از بلوغ رسيده كه مي‌توان به آن اميدهاي زيادي داشت. Gambas نام محيط برنامه‌نويسي مشابه VB اما در محيط لينوكس است (بر اساس سنت نامعلومي، نرم‌افزارهاي دنياي متن‌باز و سكوي لينوكس از اسامي و لوگو‌هايي به‌شكل حيوانات استفاده مي‌كنند. Gambas هم از اين غافله عقب نمانده است و نام خود را از گونه‌اي از ميگو اقتباس كرده است).

نرم‌افزار گامباس را فردي از علاقه‌مندان به برنامه‌نويسي اهل كشور فرانسه، با تلاش فراوان و در طول سه سال كار مستمر توسعه داده است. اواخر سال 2004 اين نرم‌افزار به مرحله‌اي رسيده بود كه خالق آن يعني، Benoit Minisini نسخه شماره 1.10 را معرفي كرد.

زماني كه اين نرم‌افزار را براي نخستين بار اجرا مي‌كنيد، باور نمي‌كنيد كه داريد در محيط لينوكس يا kde كار مي‌كنيد. اما اين موضوع كاملاً حقيقت دارد و گامباس با به عاريت گرفتن تمامي جنبه‌هاي مفيد VB (بنا بر ادعاي نويسنده آن)، پنجره‌اي را پيش روي شما ظاهر مي‌سازد كه نمونه آن را در شكل 1 مشاهده مي‌كنيد. همانطور كه در اين تصوير ديده مي‌شود، كاربر بايد در اين مرحله، مشخص كند كه قصد كار كردن بر روي پروژه جديدي دارد و يا آن‌كه با يكي از پروژه‌هاي قبلي مي‌خواهد ادامه دهد.

پس از اين مراحل، مشاهده خواهيد كرد، كه نرم‌افزار گامباس با الهام از VB، محيط توسعه‌اي فراهم كرده است كه شباهت زيادي به آن دارد. به عنوان مثال، در سمت چپ نمايشگر، پنجره‌اي به‌نام project explorer به‌سبك VB ديده مي‌شود كه براي برنامه‌نويسان ابزار بسيار مفيدي تلقي مي‌شود. پنجره بالايي سمت راست، شامل مجموعه‌اي از المان‌هايي كه برنامه‌نويس مي‌تواند آن‌ها را روي فرم‌هاي برنامه‌هاي تحت توسعه خود، قرار دهد، وجود دارند. در واقع اين اشياي گرافيكي يا وجيت‌ها (Widget) همان كنترل‌هاي برنامه‌نويسي محيط ويندوز هستند.

در اينجا هم، كاربر مي‌تواند خواص اشياي انتخابي خود را در سمت راست اين پنل ببيند. به اين ترتيب براي شروع برنامه‌نويسي با كامباس، كافي خواهد بود تا يكي از اين ويجت‌هاي گرافيكي را بر روي فرم‌هاي برنامه خود قرار دهيد (گامباس هم مانند VB به پنجره‌هاي برنامه‌هاي تحت توسعه، فرم (form) نام مي‌دهد.

فرم‌ها

براي ايجاد كردن فرم‌ها و اعمال تغييرات بر روي آن‌ها، در گامباس ابزار ويژه‌اي به‌نامForm designer پيش‌بيني شده است. كاربران گامباس مي‌توانند از اين ابزار همانند يك ابزار نقاشي، براي توليد و ويرايش فرم‌ها كمك بگيرند. در اين ابزار نيز همانند محيط VB برنامه‌نويس بايد خواص اشيايي كه قصد استفاده از آن‌ها را دارد، مشخص كند (اين‌كار در درون پنجره properties انجام مي‌شود). پنجره‌اي به‌نام component explorer به كاربر كمك مي‌كند كه خواص اشياي گرافيكي را بهتر شناسايي كند.

گامباس به درجه‌اي از پيشرفت رسيده است كه داراي يك ويرايشگر كامل منو نيز (Menu editor) هست.

ويرايشگر كد

اگرچه ممكن است كه ويرايشگر كد در گامباس چندان ظريف و زيبا جلوه نكند، اما داراي امكانات كاملي است كه نظر هر برنامه‌‌نويس حرفه‌اي را به‌خود جلب مي‌كند. به عنوان مثال، در صورتي‌كه بر روي پنچره ويرايشگر كد، كليك راست كنيد، داخل فهرست پايين‌افتادني كه گشوده مي‌شود، ليست مفصل و كاملي از تمامي دستورات قابل استفاده، فهرست مي‌شوند. در اين ويرايشگر كد، امكاناتي از قبيل قابليت نمايش رنگي كليد‌واژه‌ها و ديگر موارد نوشتاري به‌صورت (Syntax Highlighting) پيش‌بيني شده است. علاوه بر اين موارد، كاربران گامباس مي‌توانند براي عيب‌يابي برنامه‌هاي خود، BreakPoint تعريف كنند و متغير‌ها را جهت ردگيري (trace) انتخاب كنند.

اما اين ويرايشگر پيشرفته گامباس، عليرغم تمام مزايايي كه دارد، يك اشكال و يا بهتر بگوييم، يك كمبود مهم نيز دارد. گامباس هنوز داراي قابليتي نيست كه كاربران آن بتوانند نرم‌افزارهاي ويرايشگر دلخواه خود را در محيط گامباس به‌كار بگيرند. به‌عنوان مثال، بسياري از برنامه‌نويسان لينوكس تمايل دارند كه از ويرايشگر‌هايي مانند Emacs يا vi استفاده كنند.

البته از آنجايي‌كه تمام فرم‌ها و كلاس‌هاي برنامه‌هاي توليد شده با گامباس در قالب ‌فايل‌هاي متني ذخيره مي‌شوند، كاربران گامباس همچنان خواهند توانست، در خارج از محيط اين نرم‌افزار، از ويرايشگرهاي دلخواه خود براي اديت برنامه‌ها استفاده كنند.

گامباس داراي يك كامپايلر سر خود نيز هست كه در زمان كامپايل، برنامه‌ها را در صورتي كه نقصي در آن‌ها نيابد، درون يك فايل اجرايي بسته‌بندي مي‌كند. يادآوري مي‌كنيم كه براي آنكه بتوانيد پروژه‌هاي كامپايل شده گامباس را اجرا كنيد، بايد بر روي سيستم خود قبلا ً Qt را نصب كرده باشيد.

خلاصه

پروژه گامباس عليرغم آن‌كه هنوز بسيار جوان است، نشان داده كه پروژه بسيار قابل‌توجهي است. در تمام مراحل بررسي اين ابزار، گامباس هيچگاه دچار مشكل نشد و همواره از خود چهره يك نرم‌افزار پايدار را به‌نمايش گذاشت. علاوه بر آن برنامه‌هاي خروجي گامباس هم بسيار سريع اجرا مي‌شدند و از حجم پاييني برخوردار بودند.
برنامه‌نويس گامباس در يكي از سايت‌هاي پشتيباني اين نرم‌افزار، به كاربران اطمينان داده است كه هيچ رويدادي در آينده نمي‌تواند به‌سادگي برنامه‌هاي وي را براي توسعه گامباس تغيير دهد. Minisini قول داده است كه نسخه‌هاي آتي اين نرم‌افزار داراي امكانات ديباگ پيشرفته‌تري باشد و از ابزارهاي دسترسي به بانك‌هاي اطلاعاتي نيز پشتيباني نمايد.

خلاصه آن‌كه صرف نظر از آنكه چقدر مي‌توان به يك پروژه يك‌نفره تكيه كرد (و زمان براي فراگيري تكنيك‌هايي صرف كرد كه آينده تضمين‌شده‌اي ندارد)، مسلماً گامباس يكي از بهترين ابزارهاي برنامه‌نويسي تحت لينوكس است كه علاقه‌مندان و آماتورهاي برنامه‌نويسي تحت لينوكس مي‌توانند گام‌هاي اوليه را به‌كمك اين ابزار بردارند.
 
مجله شبکه 
نوشته شده توسط مدیریت در جمعه 1386/08/04 |
 اين مقاله مفهوم هيوريستيك شرح داده مي‌شود و انواع الگوريتم‌هاي هيوريستيك دسته‌بندي مي‌شوند.

1-مقدمه

سيستم‌هاي پيچيده اجتماعي تعداد زيادي از مسائل داراي طبيعت تركيباتي1 را پيش روي ما قرار مي‌دهند. مسير كاميونهاي حمل و نقل بايد تعيين شود، انبارها يا نقاط فروش محصولات بايد جايابي شوند، شبكه‌هاي ارتباطي بايد طراحي شوند، كانتينرها بايد بارگيري شوند، رابط‌هاي راديويي مي‌بايست داراي فركانس مناسب باشند، مواد اوليه چوب، فلز، شيشه و چرم بايد به اندازه‌هاي لازم بريده شوند؛ از اين دست مسائل بي‌شمارند. تئوري پيچيدگي به ما مي گويد كه مسائل تركيباتي اغلب پلي‌نوميال2 نيستند. اين مسائل در اندازه‌هاي كاربردي و عملي خود به قدري بزرگ هستند كه نمي‌توان جواب بهينه آنها را در مدت زمان قابل پذيرش به دست آورد. با اين وجود، اين مسائل بايد حل شوند و بنابراين چاره‌اي نيست كه به جوابهاي زير بهينه3 بسنده نمود به گونه‌اي كه داراي كيفيت قابل پذيرش بوده و در مدت زمان قابل پذيرش به دست آيند.

چندين رويكرد براي طراحي جوابهاي با كيفيت قابل پذيرش تحت محدوديت زماني قابل پذيرش پيشنهاد شده است. الگوريتم‌هايي هستند كه مي‌توانند يافتن جوابهاي خوب در فاصله مشخصي از جواب بهينه را تضمين كنند كه به آنها الگوريتم‌هاي تقريبي مي‌گويند. الگوريتم‌هاي ديگري هستند كه تضمين مي‌دهند با احتمال بالا جواب نزديك بهينه توليد كنند كه به آنها الگوريتم‌هاي احتمالي گفته مي‌شود. جداي از اين دو دسته، مي‌توان الگوريتم‌هايي را پذيرفت كه هيچ تضميني در ارائه جواب ندارند اما بر اساس شواهد و سوابق نتايج آنها، به طور متوسط بهترين تقابل كيفيت و زمان حل براي مسئله مورد بررسي را به همراه داشته‌اند. به اين الگوريتم‌ها، الگوريتم‌هاي هيوريستيك گفته مي‌شود.

2- هيوريستيك‌ها

هيوريستيك‌ها عبارتند از معيارها، روشها يا اصولي براي تصميم‌گيري بين چند گزينه خط‌مشي و انتخاب اثربخش‌ترين براي دستيابي به اهداف مورد نظر. هيوريستيك‌ها نتيجه برقراري اعتدال بين دو نياز هستند: نياز به ساخت معيار‌هاي ساده و در همان زمان توانايي تمايز درست بين انتخاب‌هاي خوب و بد.

 يك هيوريستيك مي‌تواند حسابي سرانگشتي باشد كه براي هدايت يك دسته از اقدامات به كار مي‌رود. براي مثال، يك روش مشهور براي انتخاب طالبي رسيده عبارتست از فشار دادن محل اتصال به ريشه از يك طالبي نامزد انتخاب و سپس بو كردن آن محل. اگر بوي آن محل مانند بوي داخل طالبي باشد آن طالبي به احتمال زياد رسيده است. اين قاعده سرانگشتي نه تضمين مي‌كند كه تنها طالبي‌هاي رسيده به عنوان نامزد انتخاب شوند و نه تضمين مي‌كند كه طالبي‌هاي رسيده آزمايش شده، رسيده تشخيص داده شوند اما به هر حال اين روش، اثربخش‌ترين روش شناخته شده است.

به عنوان مثالي ديگر از استفاده هيوريستيك‌ها، يك استاد بزرگ شطرنج را در نظر بگيريد كه با انتخاب بين چندين حركت ممكن روبرو شده است. وي ممكن است تصميم بگيرد كه يك حركت خاص، اثربخش‌ترين حركت خواهد بود زيرا موقعيتي فراهم مي‌آورد كه «به نظر مي‌رسد» بهتر از موقعيت‌هاي حاصل از حركت‌هاي ديگر باشد. به كارگيري معيار «به نظر مي‌رسد» خيلي ساده‌تر از تعيين دقيق حركت يا حركاتي خواهد بود كه حريف را مجبور به مات كند. اين واقعيت كه اساتيد بزرگ شطرنج همواره پيروز بازي نخواهند بود نشان دهنده اين است كه هيوريستيك‌هاي آنها انتخاب اثربخش‌ترين حركت را تضمين نمي‌كنند. نهايتا‏ً وقتي از آنها خواسته ‌مي‌شود كه هيوريستيك خود را تشريح نمايند آنها فقط توصيفي ناقص از قواعدي ارائه مي‌دهند و به نظر خود آنها، انجام آن قواعد از توصيف آنان ساده‌تر است.

خاصيت هيوريستيك‌هاي خوب اين است كه ابزار ساده‌اي براي تشخيص خط‌مشي‌هاي بهتر ارائه دهند و در حالي كه به صورت شرطي لازم، تشخيص خط‌مشي‌هاي اثربخش را تضمين نمي‌كنند اما اغلب به صورت شرط كافي اين تضمين را فراهم ‌آورند. بيشتر مسائل پيچيده نيازمند ارزيابي تعداد انبوهي از حالت‌هاي ممكن براي تعيين يك جواب دقيق مي‌باشند. زمان لازم براي يافتن يك جواب دقيق اغلب بيشتر از يك طول عمر است. هيوريستيك‌ها با استفاده از روش‌هاي نيازمند ارزيابي‌هاي كمتر و ارائه جوابهايي در محدوديت‌هاي زماني قابل قبول داراي نقشي اثربخش در حل چنين مسائل خواهند بود (پيرل4  1984، 1-10).

3- انواع الگوريتم‌هاي هيوريستيك

در حالت كلي سه دسته از الگوريتم‌هاي هيوريستيك قابل تشخيص است:

(1)الگوريتم‌هايي كه بر ويژگي‌هاي ساختاري مسئله و ساختار جواب متمركز مي‌شوند و با استفاده از آنها الگوريتم‌هاي سازنده يا جستجوي محلي تعريف مي‌كنند.

(2)الگوريتم‌هايي كه بر هدايت هيوريستيك يك الگوريتم سازنده يا جستجوي محلي متمركز مي‌شوند به گونه‌اي كه آن الگوريتم بتواند بر شرايط حساس (مانند فرار از بهينه محلي) غلبه كند. به اين الگوريتم‌ها، متاهيوريستيك گفته مي‌شود.

(3)الگوريتم‌هايي كه بر تركيب يك چارچوب يا مفهوم هيوريستيك با گونه‌هايي از برنامه‌ريزي رياضي (معمولاً روشهاي دقيق) متمركز مي‌شوند.

هيوريستيك‌هاي نوع اول مي‌توانند خيلي خوب عمل كنند (گاهي اوقات تا حد بهينگي) اما مي‌توانند در جواب‌هاي داراي كيفيت پايين گير كنند. همان طور كه اشاره شد يكي از مشكلات مهم اين الگوريتم‌ها با آن روبرو مي‌شوند افتادن در بهينه‌هاي محلي است بدون اينكه هيچ شانسي براي فرار از آنها داشته باشند. براي بهبود اين الگوريتم‌ها از اواسط دهه هفتاد، موج تازه‌اي از رويكردها آغاز گرديد. اين رويكردها شامل الگوريتم‌هايي است كه صريحاً يا به صورت ضمني تقابل بين ايجاد تنوع  جستجو  (وقتي علائمي وجود دارد كه جستجو به سمت مناطق بد فضاي جستجو مي‌رود) و تشديد  جستجو (با اين هدف كه بهترين جواب در منطقه مورد بررسي را پيدا كند) را مديريت مي‌كنند.

اين الگوريتم‌ها متاهيوريستيك ناميده مي‌شوند. از بين اين الگوريتم‌ها مي‌توان به موارد زير اشاره كرد:

بازپخت شبيه‌سازي شده

جستجوي ممنوع

الگوريتم‌هاي ژنتيك

شبكه‌هاي عصبي مصنوعي

بهينه‌سازي مورچه‌اي  يا الگوريتم‌هاي مورچه

نوشته شده توسط سعيد حيدري در سه شنبه 1386/07/17 |

يكي از عزيزان برنامه يا الگوريتم ماتريس معكوس رو خواسته بودند. در ضمن اينكه ذكر نكرده بودند به چه زباني و ...

من فرض مي كنم اين عزيز ترم اولي هستند و برنامه اش رو به زبان پاسكال مي گم.

اول بايد يك توضيحي در مورد مسأله بدهم. براي پيدا كردن دترمينان يا معكوس يك ماتريس به قول آقاي مرشد بايد يك سري اعمال سطري مقدماتي انجام بدهيم. حالا اين اعمال چيه خدا مي دونه ! !

من ابتدا فكر كردم شايد بايد از يك روش بازگشتي مساله را حل كنم امّا تحقيق كردم و فهميدم كه بايد از روش ديگري اين كار را كرد. حالا چون من نمي خوام شما خيلي زحمت نكشيده برنامه رو داشته باشين برنامه ي دترمينان ماتريس رو كه شبيه به معكوسه مي نويسم و شما خودت با چند تا تغيير كوچولو موچولو تبديلش كن به معكوس ماتريس(خيلي راحته فقط يك كم فكر كن و راهنمايي رو بخون).

   همه مي دونن كه اگه ماتريس به يك ماتريس بالا يا پايين مثلثي تبديل بشه دترمينان برابر است با حاصل ضرب اعداد روي قطر ماتريس

براي اينكه ماتريس رو تبديل كنيم به بالا يا پايين مثلثي سطر اول را در نظر مي گيريم آنقدر آن با سطرهاي ديگر جمع و تفريق و ضرب مي كنيم كه آن ها را صفر كند(مثلاً سطر اول و ستون اول را در نظر مي گيريم آن را در (عدد پايين آن در ماتريس تقسيم بر خود آن) ضرب مي كنيم البته توجه كنيد كه اين براي يكي از مولفه هاست براي بار دوم بايد سطر اول و ستون دوم را در نظر بگيريم و...). من از روي الگوريتم مي تونم اين رو كاملاً براي شما روشن كنم اما اول خودتون يه نگاهي بهش بياندازيد اگه متوجه نشديد ايميل من هست omid_rezvani67@yahoo.com مي تونيد بيشتر بپرسيد يا حضوري مراجعه كنيد.

Program Determinant;

Var

    A: Array[1..100,1..100] of integer;

    I,J,N,D,k : integer;

Begin

   Write('Please insert number of columns and rows:  ');

   Readln(n);

   For i:=1 to n do

      For j:=1 to n do

         Readln(a[i,j]);

   For k:=1 to n-1

      For i:=k+1 to n do

         For j:=1 to n do

            A[i,j]:=A[i,j]*(a[k,k]/a[i.k])-a[k,j];

   D:=1;

   For i:=1 to n do

      D:=D*A[i,i];

   Writeln('Determinant is: ',D)

End.

   $اگه مي خواهيد بدونيد اين برنامه پايين مثلثي مي كنه ماتريس رو يا بالا مثلثي بايد بگم پايين به مثلثي تبديل مي كنه.

   $پارامتر Var كه در ابتداي برنامه ها مي آيد به منزله ي اين است كه در ابتداي فيلم ها مي نويسند با شركت بازيگران... يا با تشكر از...

   (اين هم راهنمايي براي مسأله ي شما) اين رو هم بعضي ها مي دونن كه اگه ماتريس رو به يك ماتريس واحد يا همان ماتريس هماني تبديل كنيم و همان اعمال را(كه روي ماتريس اصلي انجام داديم تا به هماني برسيم) روي ماتريس هماني انجام دهيم ماتريس معكوس را به دست آورده ايم. پس كافيه كه شما اعمال بالا را با يك كم تغييرات انجام بدبد در ضمن اينكه ماتريس هماني را فرض كرده و اعمال را روي آن انجام دهيد.

 

**اگه اشتباهي رو در اينجا دچار شده ام خواهش مي كنم گوش زد بفرماييد.**

نوشته شده توسط در یکشنبه 1385/10/10 |
۱- به دست آوردن ماتریس تحویل یافته سطری - پلکانی یک ماتریس m*n
۲- به دست آوردن ماتریس معکوس یک ماتریس مربعی n*n
۳- به دست آوردن جواب معادلات n معادله و n مجهول
 

#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#define Max 10
/***************************************************/
void Moarrefi( void )
{
 clrscr();
 cout << "\t\t\t\tBe Name Khoda\n"
    << "\n\nBarname Nevis       : Mohammad Hasani Eghtedar"
    << "\n\nShomare Daneshjooti : 83525013"
    << "\n\nReshteye Tahsili    : Olume Computer"
    << "\n\nMaghtae Tahsili     : Karshenasi"
    << "\n\nSale Tahsili        : 1384 - 1385 Nimehye Avval"
    << "\n\nMahale Tahsil       : Daneshgahe Dolatiye Qom"
    << "\n\nOstad               : Doktor Shir Del"
        << "\n\nE-Mail              : mhe_hm@yahoo.com"
        << "\n\nSite                : http://www.ecqom.tk"
        << "\n\nPersional Blog      : http://360.yahoo.com/mhe_hm"
    << "\n\n\n\n\t\t\t\tKelidi Ra Befesharid";
 getch();
 clrscr();
}
/***************************************************/
struct Node
{
 float Roll, Port;
}A[Max][Max];
int m, n;
char Choise;
/***************************************************/
void PrintMatrix( struct Node D[Max][Max] )
{
 int i, j, k = -1;
 if( Choise == '2' )
  k = n / 2;
 else if( Choise == '3' )
  k = n - 1;
 for( i = 0; i <= n; i++ )
 {
  cout << "[" << i << "]\t";
  if( ( k != -1 ) && ( i == k ) )
   cout << "|\t";
 }
 for( i = 0; i < m; i++ )
 {
  cout << "\n\n[" << ( i+1 ) << "]";
  for( j = 0; j < n; j++)
  {
   if( ( k != -1 ) && ( j == k ) )
    cout << "\t|";
   cout << "\t" << setprecision( 3 ) << D[i][j].Roll / D[i][j].Port;
  }

 }
}
/***************************************************/
int MinRenge( void )
{
 int n1 = n;
 if( Choise == '3' )
  n1 = n - 1;
 if( m < n1 )
  return m;
 return n1;
}
/***************************************************/
void ChengeRow( int k, int t )
{
 int i;
 struct Node temp[Max];
 for( i = 0; i < n; i++ )
 {
  temp[i] = A[k][i];
  A[k][i] = A[t][i];
  A[t][i] = temp[i];
 }
}
/***************************************************/
void Evaluate( int Min )
{
 int i, j;
 char Harf;
 if( m >= n - 1 )
  for( i = Min; i < m; i++ )
   if( A[i][n - 1].Roll != 0 )
   {
    cout << "\n\nIn dastgah nasazegar boodeh va javab nadarad . Zira :";
    break;
   }
   cout << "\n\nDastgahe Moadelat :\n\n";
 for( i = 0; i < m; i++ )
 {
  Harf = 'a' + i;
  if( i < Min )
  {
   cout << Harf ;
   Harf = 'a' + Min - 1;
  }
  else
   cout << '0';
  for( j = Min; j < n - 1; j++ )
   if( A[i][j].Roll != 0 )
   {
    if( ( A[i][j].Roll / A[i][j].Port ) >= 0 )
     cout << " +";
    cout << " " << A[i][j].Roll / A[i][j].Port << ++Harf;
   }
   else
    Harf++;
  cout << " = " << A[i][n - 1].Roll / A[i][n - 1].Port << "\n";
 }

}
/***************************************************/
void G_J( void )
{
 int i, j, k, t, Min;
 Min = MinRenge();
 for( k = 0; k < Min; k++ )
 {
  t = k + 1;
  do
  {
   if( ( A[k][k].Roll == 0 ) && ( t < m ) )
    ChengeRow( k, t++ );
   else if( A[k][k].Roll == 0 )
   {
          cout << "\n\n# Matris R :\n\n";
    PrintMatrix( A );
            return;
   }
  }
  while( A[k][k].Roll == 0 );
  for( j = n-1; j >k ; j-- )
  {
   A[k][j].Roll = A[k][j].Roll * A[k][k].Port;
   A[k][j].Port = A[k][j].Port * A[k][k].Roll;
  }
  A[k][k].Roll = A[k][k].Port = 1;
  for( i = 0; i < m; i++ )
  {
   if( i != k )
   {
    for( j = k + 1; j < n; j++ )
    {
     A[i][j].Roll = ( A[i][j].Roll * A[k][j].Port * A[i][k].Port ) - ( A[i][j].Port * A[k][j].Roll * A[i][k].Roll );
     A[i][j].Port = A[i][j].Port * A[k][j].Port * A[i][k].Port;
    }
   }
  }
  for( i = 0; i < m; i++ )
  {
       if( i != k )
   {
    A[i][k].Roll = 0;
    A[i][k].Port = 1;
   }
  }
 }
 if( Choise == '1' )
  cout << "\n\n# Matris [ R ] :\n\n";
 else if( Choise == '2' )
  cout << "\n\n# Matris [ I|A' ] :\n\n";
 else
  cout << "\n\n# Matris [ R|B' ] :\n\n";
 PrintMatrix( A );
 if( Choise == '3' )
    Evaluate( Min );
}
/***************************************************/
void ReadMatrix( void )
{
 int i, j;
 cout << "Lotfan gozinehye morede nazar ra entekhab konid :\n\n"
    << "1: Be dast avardane matrise tahvili shodehye satri - pellekani\n"
    << "2: Be dast avardane matris makoos\n"
    << "3: Be dast avardane javab dastgahe moadelate be soorate ( Ax = B )";
 Choise = getch();
 clrscr();
 if( ( Choise == '1' ) || ( Choise == '2' ) || ( Choise == '3' ) )
  cout << "Lotfan renge matris [ A ] ra vared konid : ";
 else
    return;
 if( Choise == '2' )
 {
  cin >> m;
      n = m;
 }
 else
  cin >> m >> n;
 cout << "\nLotfan anasore matris [ A ] ra vared konid :\n\n";
 cout << " i\t j\tMeghdar\n";
 for( i = 0; i < m; i++ )
 {
  cout << "\n[" << ( i + 1 ) << "]";
  for( j = 0; j < n; j++ )
   do
   {
    cout << "\t[" << ( j + 1 ) << "]\t";
    cin >> A[i][j].Roll;
    cout << "\t\t /\n\t\t  ";
    cin >> A[i][j].Port;
    if( A[i][j].Port == 0 )
     cout << "\t\tERROR : Makhraj nemitavanad '0' bashad .\n";
   }
   while( A[i][j].Port == 0 );
 }
 if( Choise == '1' )
 {
  clrscr();
  cout << "# Matris [ A ] :\n\n";
 }
 else if( Choise == '2' )
 {
  n = 2 * m;
  for( i = 0; i < m; i++ )
   A[i][i + 3].Roll = 1;
  for( i = 0; i < m; i++ )
   for( j = m; j < n; j++ )
    A[i][j].Port = 1;
  clrscr();
  cout << "# Matris [ A|I ] :\n\n";
 }
 else
 {
  cout << "\nLotfan anasore matris [ B ] ra vared konid :\n\n";
  for( i = 0; i < m; i++ )
  {
   cout << "[" << ( i + 1 ) << "]";
   do
   {
    cout << "\t[" << ( j + 1 ) << "]\t";
    cin >> A[i][n].Roll;
    cout << "\t\t /\n\t\t  ";
    cin >> A[i][n].Port;
    if( A[i][n].Port == 0 )
     cout << "\t\tERROR : Makhraj nemitavanad '0' bashad .\n";
   }
   while( A[i][n].Port == 0 );
  }
  n++;
  clrscr();
  cout << "# Matris [ A|B ] :\n\n";
 }
 PrintMatrix( A );
 getch();
 G_J();
}

/***************************************************/
void main( void )
{
 Moarrefi();
 ReadMatrix();
   getch();
}

نوشته شده توسط در یکشنبه 1384/11/23 |
 

#include<conio.h>
#include<math.h>
#include<iostream.h>
#include<iomanip.h>
#define Max 5
/***************************************************/
struct Node
{
 float Roll, Port;
}A[Max][Max], L[Max][Max], U[Max][Max];
int n;
/***************************************************/
void Moarrefi( void )
{
 clrscr();
 cout << "\t\t\t\tBe Name Khoda\n"
    << "\n\nBarname Nevis       : Mohammad Hasani Eghtedar"
    << "\n\nShomare Daneshjooti : 83525013"
    << "\n\nReshteye Tahsili    : Olume Computer"
    << "\n\nMaghtae Tahsili     : Karshenasi"
    << "\n\nSale Tahsili        : 1384 - 1385 Nimehye Avval"
    << "\n\nMahale Tahsil       : Daneshgahe Dolatiye Qom"
    << "\n\nOstad               : Doktor Shir Del"
        << "\n\nE-Mail              : mhe_hm@yahoo.com"
        << "\n\nSite                : http://www.ecqom.tk"
        << "\n\nPersional Blog      : http://360.yahoo.com/mhe_hm"
    << "\n\n\n\n\t\t\t\tKelidi Ra Befesharid";
 getch();
 clrscr();
}
/***************************************************/
void PrintMatrix( struct Node D[Max][Max] )
{
 int i, j;
 for( i = 0; i <= n; i++ )
  cout << "[" << i << "]\t";
 for( i = 0; i < n; i++ )
 {
  cout << "\n\n[" << ( i+1 ) << "]";
  for( j = 0; j < n; j++)
   cout << "\t" << setprecision( 4 ) << D[i][j].Roll / D[i][j].Port;
 }
}
/***************************************************/
void ReadMatrix( void )
{
 int i, j;
 cout << "Lotfan renge matris ra vared konid : ";
 cin >> n;
 cout << "\nLotfan anasore matris ra vared konid :\n\n";
 cout << " i\t j\tMeghdar\n";
 for( i = 0; i < n; i++ )
 {
  cout << "\n[" << ( i+1 ) << "]";
  for( j = 0; j < n; j++ )
  {
       do
   {
    cout << "\t[" << ( j+1 ) << "]\t";
    cin >> A[i][j].Roll;
    cout << "\t\t /\n\t\t  ";
    cin >> A[i][j].Port;
    if( A[i][j].Port == 0 )
             cout << "\t\tERROR : Makhraj nemitavanad '0' bashad .\n";
   }
   while( A[i][j].Port == 0 );

  }
 }
 clrscr();
 cout << "# Matris A :\n\n";
 PrintMatrix( A );
}
/***************************************************/
int HasTajziyeh( void )
{
 for( int i = 0; i < n; i++ )
  if( A[i][i].Roll == 0 )
   return 0;
 return 1;
}
/***************************************************/
struct Node ZarbIJ( int i, int j )
{
 struct Node x;
 x.Roll = 0;
 x.Port = 1;
 for( int k = 0; k < n; k++ )
 {
  x.Roll = L[i][k].Roll * U[k][j].Roll * x.Port + L[i][k].Port * U[k][j].Port * x.Roll;
  x.Port = L[i][k].Port * U[k][j].Port * x.Port;
 }
 return x;
}
/***************************************************/
void Dolitel( void )
{
 struct Node temp;
 int i, j;
 for( i = 0; i < n; i++ )
  L[i][i].Roll = 1;
 for( i = 0; i < n; i++ )
  for( j = 0; j < n; j++ )
   L[i][j].Port = U[i][j].Port = 1;
 for( i = 0; i < n; i++ )
  for( j = 0; j < n; j++ )
  {
   temp = ZarbIJ( i, j );
   if( i > j )
   {
    L[i][j].Roll = ( A[i][j].Roll * temp.Port * U[j][j].Port ) - ( A[i][j].Port * temp.Roll * U[j][j].Port );
    L[i][j].Port = A[i][j].Port * temp.Port * U[j][j].Roll;
   }
   else
   {
    U[i][j].Roll = ( A[i][j].Roll * temp.Port * L[i][i].Port ) - ( A[i][j].Port * temp.Roll * L[i][i].Port );
    U[i][j].Port = A[i][j].Port * temp.Port * L[i][i].Roll;
   }
  }
 clrscr();
 cout << "# Matris A :\n\n";
 PrintMatrix( A );
 cout << "\n\n# Matris L :\n\n";
 PrintMatrix( L );
 cout << "\n\n# Matris U :\n\n";
 PrintMatrix( U );
}
/***************************************************/
void Karat( void )
{
 struct Node temp;
 int i, j;
 for( i = 0; i < n; i++ )
  U[i][i].Roll  = 1;
 for( i = 0; i < n; i++ )
  for( j = 0; j < n; j++ )
   L[i][j].Port = U[i][j].Port = 1;
 for( i = 0; i < n; i++ )
  for( j = 0; j < n; j++ )
  {
   temp = ZarbIJ( i, j );
   if( i >= j )
   {
    L[i][j].Roll = ( A[i][j].Roll * temp.Port * U[j][j].Port ) - ( A[i][j].Port * temp.Roll * U[j][j].Port );
    L[i][j].Port = A[i][j].Port * temp.Port * U[j][j].Roll;
   }
   else
   {
    U[i][j].Roll = ( A[i][j].Roll * temp.Port * L[i][i].Port ) - ( A[i][j].Port * temp.Roll * L[i][i].Port );
            U[i][j].Port = A[i][j].Port * temp.Port * L[i][i].Roll;
   }
  }
 clrscr();
 cout << "# Matris A :\n\n";
 PrintMatrix( A );
 cout << "\n\n# Matris L :\n\n";
 PrintMatrix( L );
 cout << "\n\n# Matris U :\n\n";
 PrintMatrix( U );
}
/***************************************************/
void Choleski( void )
{
 struct Node temp;
 int i, j;
 for( i = 0; i < n-1; i++ )
  for( j = i; j < n; j++ )
   if( ( ( i < j ) && ( A[i][j].Roll != A[j][i].Roll ) && ( A[i][j].Port != A[j][i].Port ) ) || ( ( i == j ) && ( ( A[i][j].Roll / A[i][j].Port ) <= 0 ) ) )
   {
    cout << "ERROR : In matris tajziyehye choleski nadarad .";
    return;
   }
 for( i = 0; i < n; i++ )
  for( j = 0; j < n; j++ )
   L[i][j].Port = U[i][j].Port = 1;
 for( i = 0; i < n; i++ )
  for( j = i; j < n; j++ )
  {
   temp = ZarbIJ( i, j );
   if( i < j )
   {
    L[j][i].Roll = U[i][j].Roll = ( A[i][j].Roll * temp.Port * L[i][i].Port ) - ( A[i][j].Port * temp.Roll * L[i][i].Port );
    L[j][i].Port = U[i][j].Port = A[i][j].Port * temp.Port * L[i][i].Roll;
   }
   else if( ( ( A[i][j].Roll / A[i][j].Port ) - ( temp.Roll / temp.Port ) ) >= 0 )
   {
    float R = A[i][j].Roll * temp.Port - A[i][j].Port * temp.Roll;
    float P = A[i][j].Port * temp.Port;
    L[j][i].Roll = U[i][j].Roll = sqrt( R );
    L[j][i].Port = U[i][j].Port = sqrt( P );
   }
   else
   {
    cout << "ERROR : In matris tajziyehye choleski nadarad .";
    return;
   }
  }
 clrscr();
 cout << "# Matris A :\n\n";
 PrintMatrix( A );
 cout << "\n\n# Matris L :\n\n";
 PrintMatrix( L );
 cout << "\n\n# Matris U :\n\n";
 PrintMatrix( U );
}
/***************************************************/
void main( void )
{
 Moarrefi();
 ReadMatrix();
 cout << "\n\n# Gozinehye morede nazar ra entekhab konid : \n\n"
    << "1 : Tajziyeh DoLitel \n"
    << "2 : Tajziyeh Karat \n"
    << "3 : Tajziyeh Choleski \n\n";
 if( HasTajziyeh() )
  switch( getch() )
  {
   case '1' :
    Dolitel();
    break;
   case '2' :
    Karat();
    break;
   case '3' :
    Choleski();
    break;
  }
 else
  cout << "ERROR : In matris hich kodam az tajziyeh ha ra nadarad .";
 getch();
}

نوشته شده توسط در یکشنبه 1384/11/23 |
 
۱ : خواندن ماتریس اسپارس و چاپ آن
۲ : چاپ ماتریس واقعی
۳ : جمع و تفریق و ضرب با ماتریسی دیگر
 

#include<conio.h>
#include<iostream.h>
#define Max 30
/*********************************************************/
class string;
class Sparse;
/*********************************************************/
class SparseNode
{
 int row, col;
 float value;
 friend class Sparse;
};
/*********************************************************/
class Sparse
{
  int Row, Col, Terms;
  SparseNode Data[Max];
 public:
  void ReadSparse( void );
  void WriteSparse( void );
  void WriteMatrix( void );
  void AddSparse( Sparse a, Sparse b );
  void ManfiSparse();
  void FastTranspose( Sparse b );
  int StoreSum( int sum, int&LastInResult, int r, int c );
  void Sparse :: MulSparse( Sparse a, Sparse b );
};
/*********************************************************/
void Sparse :: ReadSparse( void )
{
 clrscr();
 int i = 0;
 cout << "\n\n@ Lotfan Ettelaat Zir Ra Dar Mored Matrise Sparse Vared Konid : \n\n"
    << "$ Tadade Satrha              : ";
 cin >> Row;
 cout << "$ Tedade Sotoonha            : ";
 cin >> Col;
 do
 {
  cout << "$ Tedade Anasore Gheyre Sefr : ";
  cin >> Terms;
  if( Terms > ( Row * Col ) || Terms < 0 )
   cerr << "\nERROR ! ( In Tedad Ghabele Ghabool Nemibashad )\n\n";
 }
 while( Terms > ( Row * Col ) || Terms < 0 );
 while( i < Terms )
 {
  cout << "\n# Lotfan Shomarehye Satr Va Sotoone Onsore "
     << ( i + 1 )
     << " -om Ra Vared Konid : ";
  cin >> Data[i].row
    >> Data[i].col;
  if( Data[i].row > Row || Data[i].col > Col || Data[i].row < 1 || Data[i].col < 1 )
   cerr << "\nERROR ! ( In Jayegah Dar Moshakhkhasat Matris Nemigonjad )\n";
  else
  {
   cout << "* Lotfan Meghdar Onsor Ra Vared Konid : ";
   cin >> Data[i].value;
   i++;
  }
 }
 clrscr();
}
/*********************************************************/
void Sparse :: WriteSparse( void )
{
 int i;
 cout << "\n\n# Moshakhkhasat Matris Be Soorate Zir Ast :"
    << "\n\n~ Tedade Satrha = "
    << Row
    << "\n~ Tedade Sotoonha = "
    << Col
    << "\n~ Tedade Anasore Gheyre Sefr = "
    << Terms
    << "\n\n~ Liste Anasor Gheyre Sefre Matris Be Sharhe Zir Ast :\n\n"
    << "Satr\tSotoon\tMeghdar\n";
 for( i = 0; i < Terms; i++ )
  cout << Data[i].row
     << "\t"
     << Data[i].col
     << "\t"
     << Data[i].value
     << endl;
 getch();
}
/*********************************************************/
void Sparse :: WriteMatrix( void )
{
 clrscr();
 int i, j;
 float Matrix[Max][Max] = {0};
 cout << "\n\nMatrix Vaghei :\n\n";
 for( i = 0; i < Terms; i++ )
  Matrix[Data[i].row-1][Data[i].col-1] = Data[i].value;
   for( i = 0; i <= Col; i++ )
  cout << "[" << ( i ) << "]\t";
 for( i = 0; i < Row; i++ )
 {
  cout << "\n\n"
     << "[" << ( i+1 ) << "]";
  for( j = 0; j < Col; j++ )
  {
   cout << "\t"
      << Matrix[i][j];
  }
 }
 getch();
   clrscr();
}
/*********************************************************/
void Sparse :: AddSparse( Sparse a, Sparse b )
{
 int i, j, k;
 i = j = k = 0;
 if( a.Row != b.Row || a.Col != b.Col )
 {
  cout << "\n*** ERROR !!! Nemitavan In 2 Matris Ra Ba Ham Jame Kard ***";
  return;
 }
 Row = a.Row;
 Col = a.Col;
 while( i < a.Terms && j < b.Terms )
 {
  if( a.Data[i].row < b.Data[j].row || ( a.Data[i].row == b.Data[j].row && a.Data[i].col < b.Data[j].col ) )
  {
   Data[k].row = a.Data[i].row;
   Data[k].col = a.Data[i].col;
   Data[k++].value = a.Data[i++].value;
  }
  else if( a.Data[i].row > b.Data[j].row || ( a.Data[i].row == b.Data[j].row && a.Data[i].col > b.Data[j].col ) )
  {
   Data[k].row = b.Data[j].row;
   Data[k].col = b.Data[j].col;
   Data[k++].value = b.Data[j++].value;
  }
  else if( a.Data[i].value + b.Data[j].value )
  {
   Data[k].row = a.Data[i].row;
   Data[k].col = a.Data[i].col;
   Data[k++].value = a.Data[i++].value + b.Data[j++].value;
  }
  else
  {
   i++;
   j++;
  }
 }
 while( i < a.Terms )
 {
  Data[k].row = a.Data[i].row;
  Data[k].col = a.Data[i].col;
  Data[k++].value = a.Data[i++].value;
 }
 while( j < b.Terms )
 {
  Data[k].row = b.Data[j].row;
  Data[k].col = b.Data[j].col;
  Data[k++].value = b.Data[j++].value;
 }
 Terms = k;
}
/*********************************************************/
void Sparse :: ManfiSparse()
{
 for( int i = 0; i < Terms; i++ )
  Data[i].value *= -1;
}
/*********************************************************/
void Sparse :: FastTranspose( Sparse a )
{
 int i, k;
 int RowSize[Max], RowStart[Max];
 Row = a.Col;
 Col = a.Row;
 Terms = a.Terms;
 for( i = 0; i < a.Col; i++ )
    RowSize[i] = 0;
 for( i = 0; i < a.Terms; i++ )
  RowSize[a.Data[i].col-1]++;
 RowStart[0] = 0;
 for( i = 1; i < a.Col; i++ )
  RowStart[i] = RowStart[i-1] + RowSize[i-1];
 for( i = 0; i < a.Terms; i++ )
 {
  k = RowStart[a.Data[i].col-1]++;
  Data[k].row = a.Data[i].col;            
  Data[k].col = a.Data[i].row;
  Data[k].value = a.Data[i].value;
 }
}
/*********************************************************/
int Sparse :: StoreSum( int sum, int&LastInResult, int r, int c )
{
 if( sum != 0 )
  if( LastInResult < Max-1 )
  {
   LastInResult++;
   Data[LastInResult].row = r;
   Data[LastInResult].col = c;
   Data[LastInResult].value = sum;
   return 0;
  }
  else
  {
   cerr << "\n*** ERROR !!! Tedade Anasore Gheyre Sefr Az Fazaye Arayeh Biroon Mizanad ***\n";
   return 1;
  }
 else
  return 0;
}
/*********************************************************/
char compare( int x, int y )
{
 if( x < y )
  return '<';
 else if( x == y )
  return '=';
 return '>';
}
/*********************************************************/
void Sparse :: MulSparse( Sparse a, Sparse b )
{
 if( a.Col != b.Row )
 {
  cout << "\n*** ERROR !!! Zarbe 2 Matris Emkan Pazir Nist ***";
  Row = 0;
  Col = 0;
  Terms = 0;
  return;
 }
 if( ( a.Terms == Max ) || ( b.Terms == Max ) )
 {
  cout << "*** ERROR !!! Yek Fazaye Khali Dar Matris 'A' Ya 'B' Lazem Ast ***";
  Row = 0;
  Col = 0;
  Terms = 0;
  return;
 }
 Sparse d;
 d.FastTranspose( b );
 int currRowIndex = 0, LastInResult = -1, currRowBegin = 0, currRowA = a.Data[0].row;
 a.Data[a.Terms].row = a.Row;
 d.Data[b.Terms].row = b.Col;
 d.Data[b.Terms].col = -1;
 int sum = 0;
 while( currRowIndex < a.Terms )
 {
  int currColB = d.Data[0].row;
  int currColIndex = 0;
  while( currColIndex <= b.Terms )
  {
   if( a.Data[currRowIndex].row != currRowA )
   {
    if( StoreSum( sum, LastInResult, currRowA, currColB ) )
    {
     Row = 0;
     Col = 0;
     Terms = 0;
     cout << "\n *** ERROR !!! ***";
     return;
    }
    else
     sum = 0;
    currRowIndex = currRowBegin;
    while ( d.Data[currColIndex].row == currColB )
     currColIndex++;
    currColB = d.Data[currColIndex].row;
   }
   else if( d.Data[currColIndex].row != currColB)
   {
    if( StoreSum( sum, LastInResult, currRowA, currColB ) )
    {
     Row = 0;
     Col = 0;
     Terms = 0;
     cout << "\n *** ERROR !!! ***";
     return;
    }
    else
     sum = 0;
    currRowIndex = currRowBegin;
    currColB = d.Data[currColIndex].row;
   }
   else switch( compare( a.Data[currRowIndex].col, d.Data[currColIndex].col ) )
   {
    case '<' :
     currRowIndex++;
     break;
    case '=' :
     sum += a.Data[currRowIndex].value * d.Data[currColIndex].value;
     currRowIndex++;
     currColIndex++;
     break;
    case '>' :
     currColIndex++;
   }
  }
  while( a.Data[currRowIndex].row == currRowA )
   currRowIndex++;
  currRowBegin = currRowIndex;
  currRowA = a.Data[currRowIndex].row;
 }
 Row = a.Row;
 Col = b.Col;
 Terms = LastInResult + 1;
}
/*********************************************************/
void Moarrefi( void )
{
 clrscr();
 cout << "\t\t\t\tBe Name Khoda"
    << "\n\n\nBarname Nevis       : Mohammad Hasani Eghtedar"
    << "\n\nShomare Daneshjooti : 83525013"
    << "\n\nReshteye Tahsili    : Olume Computer"
    << "\n\nMaghtae Tahsili     : Karshenasi"
    << "\n\nSale Tahsili        : 1384 - 1385 Nimehye Avval"
    << "\n\nMahale Tahsil       : Daneshgahe Dolatiye Qom"
    << "\n\nOstad               : Aghaye Sayyed Esmaeili"
    << "\n\n\n\n\t\t\t\tKelidi Ra Befesharid";
 getch();
}
/*********************************************************/
void Meno( void )
{
 clrscr();
 cout << "\n# Lotfan Alamat Morede Nazar Ra Vared Konid :\n"
    << "\n+ : Jam Ba Matrisi Digar"
    << "\n- : Tafrigh Az Matrisi Digar"
    << "\n* : Zarb Dar Matrisi Digar"
    << "\nP : Chape Matrise Vagheyi"
    << "\nT : Tarane Hadeye Matris";
}
/*********************************************************/
void main( void )
{
 Moarrefi();
 Sparse a, b, c;
 a.ReadSparse();
 a.WriteSparse();
 Meno();
 switch( getch() )
 {
  case '+' :
   b.ReadSparse();
   b.WriteSparse();
   c.AddSparse(a,b);
         cout << "\n\nAnswer Is : ";
   c.WriteSparse();
   break;
  case '-' :
       b.ReadSparse();
   b.WriteSparse();
   b.ManfiSparse();
   c.AddSparse(a,b);
         cout << "\n\nAnswer Is : ";
   c.WriteSparse();
   break;
  case '*' :
       b.ReadSparse();
   b.WriteSparse();
   c.MulSparse(a,b);
         clrscr();
   cout << "\n\nAnswer Is : ";
   c.WriteSparse();
   break;
  case 'p' :
   a.WriteMatrix();
   break;
  case 't' :
   c.FastTranspose( a );
         clrscr();
         cout << "\n\nAnswer Is : ";
   c.WriteSparse();
       break;
 }
}

نوشته شده توسط در پنجشنبه 1384/11/13 |

BST : تعریف :

یک درخت جستجوی دو دویی یک درخت دودویی است که ممکن است تهی باشد . اگر درخت دو دویی تهی نباشد ، آنگاه دارای ویژگی های زیر است :

۱- هر عضو دارای یک کلید ( Data ) است و دو عنصر نباید دارای کلید یکسان باشند ، در واقع کلید ها مجزا ( منحصر به فرد ) هستند .

۲- کلید های واقع در زیر درخت غیر تهی چپ ( در صورت وجود ) باید کمتر از مقدار کلید واقع در ریشه باشند .

۳- کلید های واقع در زیر درخت راست ( در صورت وجود ) باید بزرگ تر از مقدار کلید واقع در ریشه باشند .

۴- زیر درختان چپ و راست نیز خود درختان جستجوی دو دویی می باشند .

 

#include <iostream.h>
#include <conio.h>
/*********************************************/
class TreeNode
{
 friend class Tree;
 TreeNode *Left, *Right;
 int Data;
};
/*********************************************/
class Tree
{
  TreeNode *Root;
 public:
  Tree( void );
  void Input( void );
  void Insert( void );
  void InOrder (TreeNode *t);
  void InOrder(void) { InOrder( Root ); }
};
/*********************************************/
Tree :: Tree( void )
{
  Root = NULL;
}
/*********************************************/
void Tree :: Input( void )
{
 char Puling;
 Root = new( TreeNode );
 cout << "@ Enter a number : ";
 cin >> Root->Data;
 Root->Left = Root->Right = NULL;
 do
 {
    cout << "# Do you want to enter another number ( y = yes ) : ";
  Puling = getche();
  if( Puling == 'y' )
  {
   cout << " @ Enter a number : ";
   Insert();
  }
  else
   break;
 }
 while( 1 );
}
/*********************************************/
void Tree :: Insert( void )
{
 TreeNode *Temp, *Node;
   Temp = Root;
   Node = new( TreeNode );
   Node->Left = Node->Right = NULL;
 cin >> Node->Data;
 while( Temp != NULL )
 {
  if( Node->Data > Temp->Data )
  {
   if( Temp->Right != NULL )
    Temp = Temp->Right;
   else
   {
    Temp->Right = Node;
    break;
   }
  }
  else
  {
   if( Temp->Left != NULL )
    Temp = Temp->Left;
   else
   {
    Temp->Left = Node;
    break;
   }
  }
 }
}
/*********************************************/
void Tree :: InOrder( TreeNode *t )
{
  if(t)
    {
   InOrder( t->Left );
   cout << t->Data << " ";
   InOrder( t->Right );
    }
}
/*********************************************/
void main( void )
{
 Tree TreeObject;
   cout << "*** Binary Search Tree Maker Program ***\n\n";
 TreeObject.Input();
 clrscr() ;
 cout << "Traverse Binary Search Tree in inorder :\n";
 TreeObject.InOrder();
 getch();
}

نوشته شده توسط در جمعه 1384/10/02 |

#include<conio.h>
#include<iostream.h>
/***************************************************/
enum Boolean{FALSE,TRUE};
/***************************************************/
struct Triple
{
 int value,row,col;
};
/***************************************************/
class Matrix;
/***************************************************/
class MatrixNode
{
  friend istream& operator>>(istream& is,Matrix& matrix);
  friend ostream& operator<<(ostream& output,Matrix& matrix);
  friend class Matrix;
  MatrixNode *down,*right;
  Boolean head;
  union
  {
   MatrixNode *next;
   Triple triple;
  };
 public:
  MatrixNode(Boolean b,Triple *t);
};
/***************************************************/
MatrixNode::MatrixNode(Boolean b,Triple *t)
{
 head=b;
 if(b)right=next=this;
  else triple=*t;
}
/***************************************************/
typedef MatrixNode *MatrixNodePtr;
/***************************************************/
class Matrix
{
  friend istream& operator>>(istream& is,Matrix& matrix);
  friend ostream& operator<<(ostream& output,Matrix& matrix);
  MatrixNode *headnode;
 public:
  ~Matrix();
};
/***************************************************/
MatrixNode *av;
/***************************************************/
Matrix::~Matrix(void)
{
 if(!headnode)return;
 MatrixNode *y,*x=headnode->right;
 headnode->right=av;
 av=headnode;
 while(x!=headnode)
 {
  y=x->right;
  x->right=av;
  av=y;
  x=x->next;
 }
 headnode=0;
}
/***************************************************/
istream& operator>>(istream& is,Matrix& matrix)
{
 Triple s;
 int p;
   cout<<"Moshakhkhasat Matrise Esparse Ra Vared Konid :"<<endl;
 cout<<" Tedade Satrha = ";
 is>>s.row;
 cout<<" Tedade Sotoonha = ";
 is>>s.col;
 cout<<" Tedade Anasore Gheyre Sefr = ";
 is>>s.value;
 if(s.row>s.col)p=s.row;
  else p=s.col;
 matrix.headnode=new MatrixNode(FALSE,&s);
 if(p==0)
 {
  matrix.headnode->right=matrix.headnode;
  return is;
 }
 MatrixNodePtr *head=new MatrixNodePtr[p];
 for(int i=0;i<p;i++)head[i]=new MatrixNode(TRUE,0);
 int CurrentRow=0;
 MatrixNode *last=head[0];
 for(i=0;i<s.value;i++)
 {
  Triple t;
  cout<<endl<<"Onsore Geyre Sefre Shomarehye "<<i+1<<" : "<<endl;
  cout<<" i = ";
  is>>t.row;
  cout<<" j = ";
  is>>t.col;
  cout<<" a["<<t.row<<"]["<<t.col<<"] = ";
  is>>t.value;
  if(t.row>CurrentRow)
  {
   last->right=head[CurrentRow];
   CurrentRow=t.row;
   last=head[CurrentRow];
  }
  last=last->right=new MatrixNode(FALSE,&t);
  head[t.col]->next=head[t.col]->next->down=last;
 }
 last->right=head[CurrentRow];
 for(i=0;i<s.col;i++)head[i]->next->down=head[i];
 for(i=0;i<p-1;i++)head[i]->next=head[i+1];
 head[p-1]->next=matrix.headnode;
 matrix.headnode->right=head[0];
 delete[]head;
 return is;
}
/***************************************************/
ostream& operator<<(ostream& output,Matrix& matrix)
{
 cout<<endl<<"Moshakhkhasat Matris Be Soorate Zir Ast :";
 cout<<endl<<"Tedade Satrha = "<<matrix.headnode->triple.row<<" ; Tedade Sotoonha = "<<matrix.headnode->triple.col<<" ; Tedade Anasore Gheyre Sefr = "<<matrix.headnode->triple.value;
 cout<<endl<<"Liste Anasor Gheyre Sefre Matris Be Sharhe Zir Ast :"<<endl;
 cout<<endl<<"i\tj\ta[i][j]"<<endl<<endl;
 MatrixNode *HeadR,*HeadD;
 for(HeadD=matrix.headnode->right;HeadD!=matrix.headnode;HeadD=HeadD->next)
  for(HeadR=HeadD->right;HeadR!=HeadR->right&&HeadR->right->triple.value!=0;HeadR=HeadR->right)
  {
   output<<HeadR->triple.row<<"\t"<<HeadR->triple.col<<"\t"<<HeadR->triple.value;
   HeadR->triple.value=0;
   cout<<endl;
  }
 return output;
}
/***************************************************/
void main(void)
{
 Matrix matrix;
 cin>>matrix;
 cout<<matrix;
}

برنامه نویس : محمد حسنی اقتدار

نوشته شده توسط مدیریت در شنبه 1384/09/05 |

#include<conio.h>
#include<iostream.h>
/***************************************************/
enum Boolean{False,True};
/***************************************************/
class Expression;
/***************************************************/
class TokenNode
{
 friend Expression;
 char Data;
 TokenNode *Link;
};
/***************************************************/
class Expression
{
  TokenNode *Top;
 public:
  Expression(void){Top=NULL;};
  ~Expression(void);
  Boolean IsOperator(char Token);
  int Expression::isp(char Token);
  int Expression::icp(char Token);
  void Expression::CreatExpression(void);
  void AddExpression(char Token);
  char DeleteExpression(void);
  char NextToken();
  void Postfix(void);
      float Calculate(float Digit_1,float Digit_2,char x);
  float EvaluateExpression(char Success[25]);
};
/***************************************************/
Expression::~Expression(void)
{
 TokenNode*After;
 while(Top)
 {
  After=Top->Link;
  delete(Top);
  Top=After;
 }
}
/***************************************************/
Boolean Expression::IsOperator(char Token)
{
 if(Token=='+'||Token=='-'||Token=='*'||Token=='/'||Token=='('||Token==')'||Token==13)return(True);
 return(False);
}
/***************************************************/
int Expression::isp(char Token)
{
 switch(Token)
 {
  case'*':return(1);
  case'/':return(1);
  case'+':return(2);
  case'-':return(2);
  case'(':return(3);
  case 13:return(3);
 }
}
/***************************************************/
int Expression::icp(char Token)
{
 switch(Token)
 {
  case'(':return(0);
  case'*':return(1);
  case'/':return(1);
  case'+':return(2);
  case'-':return(2);
 }
}
/***************************************************/
void Expression::CreatExpression(void)
{
 TokenNode *Before,*Current;
 cout<<"Please enter expression :"<<endl;
 Top=Before=new(TokenNode);
 Before->Data=getche();
 while(Before->Data!=13)
 {
  Current=new(TokenNode);
  Before->Link=Current;
  Before=Current;
  Before->Data=getche();
 }
 Before->Link=NULL;
}
/***************************************************/
void Expression::AddExpression(char Token)
{
 TokenNode *Temp;
 Temp=new(TokenNode);
 Temp->Data=Token;
 Temp->Link=Top;
 Top=Temp;
}
/***************************************************/
char Expression::DeleteExpression(void)
{
 TokenNode *Temp;
 char Token;
 if(!Top)cout<<"No exprission is available";
  else
  {
   Temp=Top;
   Top=Top->Link;
   Token=Temp->Data;
   delete(Temp);
   return Token;
  }
}
/***************************************************/
char Expression::NextToken()
{
 char Temp=Top->Data;
 Top=Top->Link;
 return(Temp);
}
/***************************************************/
void Expression::Postfix(void)
{
 Expression Stack;
 char Success[25];
 int i=1;
 char y;
 Stack.AddExpression(13);
 for(char x=NextToken();x!=13;x=NextToken())
 {
  if(!IsOperator(x))
  {
   cout<<x;
   Success[i++]=x;
  }
   else if(x==')')for(y=Stack.DeleteExpression();y!='(';y=Stack.DeleteExpression())
   {
    cout<<y;
    Success[i++]=y;
   }
    else
    {
     for(y=Stack.DeleteExpression();isp(y)<=icp(x);y=Stack.DeleteExpression())
     {
      cout<<y;
      Success[i++]=y;
     }
     Stack.AddExpression(y);
     Stack.AddExpression(x);
    }
 }
 while(Stack.Top)
 {
  char Temp=Stack.DeleteExpression();
  cout<<Temp;
  Success[i++]=Temp;
 }
 Success[i]=13;
 cout<<EvaluateExpression(Success);
}
/***************************************************/
float Expression::Calculate(float Digit_1,float Digit_2,char x)
{
 switch(x)
 {
  case'+':return(Digit_1+Digit_2);
  case'-':return(Digit_1-Digit_2);
  case'*':return(Digit_1*Digit_2);
  case'/':return(Digit_1/Digit_2);
 }
}
/***************************************************/
float Expression::EvaluateExpression(char Success[25])
{
 float Result[20],Digit_1,Digit_2,Digit;
 int i=1,j=1;
 cout<<endl<<endl;
 for(char x=Success[j];x!=13;x=Success[++j])if(!IsOperator(x))
                {
                cout<<"Enter Digit "<<x<<" : ";
                cin>>Digit;
                Result[i++]=Digit;
                }
                else
                {
                 Digit_2=Result[--i];
                 Digit_1=Result[--i];
                 Result[i++]=Calculate(Digit_1,Digit_2,x);
                }
 cout<<endl<<"Evaluation of postfix expression is :"<<endl;
 return(Result[1]);
}
/***************************************************/
void main(void)
{
 Expression EXPRESSION;
 EXPRESSION.CreatExpression();
 cout<<endl<<endl<<"Postfix of expression is :"<<endl;
 EXPRESSION.Postfix();
}

برنامه نویس : محمد حسنی اقتدار

نوشته شده توسط مدیریت در شنبه 1384/08/28 |

#include<conio.h>
#include<iostream.h>
#define Max 30
class string;
class Sparse;
class SparseNode
{
 int row,col;
 float value;
 friend class Sparse;
};
class Sparse
{
  int Row,Col,Terms;
  SparseNode Data[Max];
 public:
  void ReadSparse(void);
  void WriteSparse(void);
  void AddSparse(Sparse a,Sparse b);
  void Sparse::ManfiSparse();
  void Sparse::FastTranspose(Sparse b);
      int Sparse::StoreSum(int sum,int&LastInResult,int r,int c);
  void Sparse::MulSparse(Sparse a,Sparse b);
};
void Sparse::ReadSparse(void)
{
 int i;
 cout<<"\n\n@ Lotfan Ettelaat Zir Ra Dar Mored Matris Vared Konid : \n"<<"$ Tadade Satrha : ";
 cin>>Row;
 cout<<"$ Tedade Sotoonha : ";
 cin>>Col;
 cout<<"$ Tedade Anasore Gheyre Sefr : ";
 cin>>Terms;
 for(i=0;i<Terms;i++)
 {
  cout<<"\n# Lotfan Shomarehye Satr Va Sotoone Onsore "<<i<<" -om Ra Vared Konid : ";
  cin>>Data[i].row>>Data[i].col;
  cout<<"* Lotfan Meghdar Onsor Ra Vared Konid : ";
  cin>>Data[i].value;
 }
}
void Sparse::WriteSparse(void)
{
 int i;
 cout<<"\n\n~ Moshakhkhasat Matris Be Soorate Zir Ast :";
 cout<<"\n~ Tedade Satrha = "<<Row<<" ; Tedade Sotoonha = "<<Col<<" ; Tedade Anasore Gheyre Sefr = "<<Terms;
 cout<<"\n~ Liste Anasor Gheyre Sefre Matris Be Sharhe Zir Ast :\n\n";
 cout<<"Satr\tSotoon\tMeghdar\n";
 for(i=0;i<Terms;i++)cout<<Data[i].row<<"\t"<<Data[i].col<<"\t"<<Data[i].value<<endl;
}
void Sparse::AddSparse(Sparse a,Sparse b)
{
 int i,j,k;
 i=j=k=0;
 if(a.Row!=b.Row||a.Col!=b.Col)
 {
  cout<<"\n*** ERROR !!! Nemitavan In 2 Matris Ra Ba Ham Jame Kard ***";
  return;
 }
 Row=a.Row;
 Col=a.Col;
 while(i<a.Terms&&j<b.Terms)
 {
  if(a.Data[i].row<b.Data[j].row||(a.Data[i].row==b.Data[j].row&&a.Data[i].col<b.Data[j].col))
  {
   Data[k].row=a.Data[i].row;
   Data[k].col=a.Data[i].col;
   Data[k++].value=a.Data[i++].value;
  }
   else if(a.Data[i].row>b.Data[j].row||(a.Data[i].row==b.Data[j].row&&a.Data[i].col>b.Data[j].col))
         {
    Data[k].row=b.Data[j].row;
    Data[k].col=b.Data[j].col;
    Data[k++].value=b.Data[j++].value;
   }
    else if(a.Data[i].value+b.Data[j].value)
    {
     Data[k].row=a.Data[i].row;
     Data[k].col=a.Data[i].col;
     Data[k++].value=a.Data[i++].value+b.Data[j++].value;
    }
     else
     {
      i++;
      j++;
     }
 }
 while(i<a.Terms)
 {
    Data[k].row=a.Data[i].row;
  Data[k].col=a.Data[i].col;
  Data[k++].value=a.Data[i++].value;
 }
 while(j<b.Terms)
 {
    Data[k].row=b.Data[j].row;
  Data[k].col=b.Data[j].col;
  Data[k++].value=b.Data[j++].value;
 }
 Terms=k;
}
void Sparse::ManfiSparse()
{
 for(int i=0;i<Terms;i++)Data[i].value*=-1;
}
void Sparse::FastTranspose(Sparse a)
{
 int i,k;
 int RowSize[Max],RowStart[Max];
 Row=a.Col;
 Col=a.Row;
 Terms=a.Terms;
 for(i=0;i<a.Col,RowSize[i]=0;i++);
 for(i=0;i<a.Terms;i++)RowSize[a.Data[i].col]++;
 RowStart[0]=0;
 for(i=1;i<a.Col;i++)RowStart[i]=RowStart[i-1]+RowSize[i-1];
 for(i=0;i<a.Terms;i++)
 {
  k=RowStart[a.Data[i].col]++;
  Data[k].row=a.Data[i].col;
  Data[k].col=a.Data[i].row;
  Data[k].value=a.Data[i].value;
 }
}
int Sparse::StoreSum(int sum,int&LastInResult,int r,int c)
{
 if(sum!=0)
 {
  if(LastInResult<Max-1)
  {
   LastInResult++;
   Data[LastInResult].row=r;
   Data[LastInResult].col=c;
   Data[LastInResult].value=sum;
   return 0;
  }
   else
   {
    cerr<<"\n*** ERROR !!! Tedade Anasore Gheyre Sefr Az Fazaye Arayeh Biroon Mizanad ***\n";
    return 1;
   }
 }
  else return 0;
}
char compare(int x,int y)
{
 if(x<y)return'<';
  else if(x==y)return'=';
 return'>';
}
void Sparse::MulSparse(Sparse a,Sparse b)
{
 if(a.Col!=b.Row)
 {
  cout<<"\n*** ERROR !!! Zarbe 2 Matris Emkan Pazir Nist ***";
  Row=0;
  Col=0;
  Terms=0;
  return;
 }
 if((a.Terms==Max)||(b.Terms==Max))
 {
  cout<<"*** ERROR !!! Yek Fazaye Khali Dar Matris 'A' Ya 'B' Lazem Ast ***";
  Row=0;
  Col=0;
  Terms=0;
  return;
 }
 Sparse d;
 d.FastTranspose(b);
 int currRowIndex=0,LastInResult=-1,currRowBegin=0,currRowA=a.Data[0].row;
 a.Data[a.Terms].row=a.Row;
 d.Data[b.Terms].row=b.Col;
 d.Data[b.Terms].col=-1;
 int sum=0;
 while(currRowIndex<a.Terms)
 {
  int currColB=d.Data[0].row;
  int currColIndex=0;
  while(currColIndex<=b.Terms)
  {
   if(a.Data[currRowIndex].row!=currRowA)
   {
    if(StoreSum(sum,LastInResult,currRowA,currColB))
    {
             Row=0;
     Col=0;
     Terms=0;
     cout<<"\n *** ERROR !!! ***";
     return;
    }
     else sum=0;
    currRowIndex=currRowBegin;
    while(d.Data[currColIndex].row==currColB)currColIndex++;
    currColB=d.Data[currColIndex].row;
   }
    else if(d.Data[currColIndex].row!=currColB)
    {
     if(StoreSum(sum,LastInResult,currRowA,currColB))
     {
                  Row=0;
      Col=0;
      Terms=0;
      cout<<"\n *** ERROR !!! ***";
      return;
     }
      else sum=0;
     currRowIndex=currRowBegin;
     currColB=d.Data[currColIndex].row;
    }
     else switch(compare(a.Data[currRowIndex].col,d.Data[currColIndex].col))
     {
      case'<':
       currRowIndex++;
       break;
      case'=':
       sum+=a.Data[currRowIndex].value*d.Data[currColIndex].value;
       currRowIndex++;
       currColIndex++;
       break;
      case'>':
       currColIndex++;
     }
  }
  while(a.Data[currRowIndex].row==currRowA)currRowIndex++;
  currRowBegin=currRowIndex;
  currRowA=a.Data[currRowIndex].row;
 }
 Row=a.Row;
 Col=b.Col;
 Terms=LastInResult+1;
}
void main(void)
{
 char Sign;
 Sparse a,b,c;
 a.ReadSparse();
 a.WriteSparse();
 cout<<"\nLotfan Alamat Ra Vared Konid (+,-,*) : ";
 cin>>Sign;
 b.ReadSparse();
 b.WriteSparse();
   switch(Sign)
 {
  case'+':
   c.AddSparse(a,b);
   break;
  case'-':
   b.ManfiSparse();
   c.AddSparse(a,b);
   break;
  case'*':
   c.MulSparse(a,b);
   break;
 }
 cout<<"\n\nAnswer Is : ";
 c.WriteSparse();
 getche();
}

نویسنده : محمد حسنی اقتدار

نوشته شده توسط مدیریت در شنبه 1384/08/07 |
 
 

#include<conio.h>
#include<iostream.h>
#define Max 20
class Poly;
class PolyNode
{
   friend Poly;
   float Coef;
   int Pow;
};
class Poly
{
  int n;
  PolyNode Data[Max];
 public:
  void Poly::SortPoly(void);
    void ReadPoly(void);
      void WritePoly(void);
      void AddPoly(Poly a,Poly b);
      void SubtractPoly(Poly a,Poly b);
      void MulPoly(Poly a,Poly b);
      void Poly::ItemPoly(float Coef,int Pow,Poly b);
      void Poly::TaghsimPoly(int k,Poly a,Poly b);
};
void Poly::SortPoly(void)
{
 int i,j;
 PolyNode item;
 for(i=n-1;i>0;i--)
  for(j=0;j<i;j++)
   if(Data[j].Pow<Data[j+1].Pow)
   {
    item=Data[j];
    Data[j]=Data[j+1];
            Data[j+1]=item;
   }
 while(i<n-1)
 if(Data[i].Pow==Data[i+1].Pow)
 {
  Data[i].Coef+=Data[i+1].Coef;
  for(j=i+1;j<n-1;j++)Data[j]=Data[j+1];
  n--;
 }else i++;
}
void Poly::ReadPoly(void)
{
 int i;
 cout<<"\nPlease enter parts of poly : ";
 cin>>n;
 cout<<"\nPlease enter Polynomial : \n\n";
   for(i=0;i<n;i++)
   { 
  cin>>Data[i].Coef;
  cout<<" x^"<<endl;
  cin>>Data[i].Pow;
  cout<<" +"<<endl;
   }
}
void Poly::WritePoly(void)
{
 int i;
   cout<<"\n";
 for(i=0;i<n;i++)cout<<Data[i].Coef<<"X^"<<Data[i].Pow<<" + ";
}
void Poly::AddPoly(Poly a,Poly b)
{
 int i,j,k;
   i=j=k=0;
   while(i<a.n&&j<b.n)
   {
    if(a.Data[i].Pow>b.Data[j].Pow)
      {
       Data[k].Coef=a.Data[i].Coef;
         Data[k++].Pow=a.Data[i++].Pow;
      }
       else if(a.Data[i].Pow<b.Data[j].Pow)
         {
          Data[k].Coef=b.Data[j].Coef;
          Data[k++].Pow=b.Data[j++].Pow;
         }
          else if(a.Data[i].Coef+b.Data[j].Coef)
        {
         Data[k].Coef=a.Data[i].Coef+b.Data[j].Coef;
           Data[k++].Pow=a.Data[i++].Pow;
               j++;
        }
             else
               {
                i++;
                  j++;
               }
   }
   while(i<a.n)
   {
    Data[k].Coef=a.Data[i].Coef;
      Data[k++].Pow=a.Data[i++].Pow;
   }
   while(j<b.n)
   {
    Data[k].Coef=b.Data[j].Coef;
      Data[k++].Pow=b.Data[j++].Pow;
   }
   n=k;
}
void Poly::SubtractPoly(Poly a,Poly b)
{
 int i,j,k;
   i=j=k=0;
   while(i<a.n&&j<b.n)
   {
    if(a.Data[i].Pow>b.Data[j].Pow)
      {
       Data[k].Coef=a.Data[i].Coef;
         Data[k++].Pow=a.Data[i++].Pow;
      }
       else if(a.Data[i].Pow<b.Data[j].Pow)
         {
          Data[k].Coef=b.Data[j].Coef;
          Data[k++].Pow=b.Data[j++].Pow;
         }
          else if(a.Data[i].Coef-b.Data[j].Coef)
        {
         Data[k].Coef=a.Data[i].Coef-b.Data[j].Coef;
           Data[k++].Pow=a.Data[i++].Pow;
               j++;
        }
             else
               {
                i++;
                  j++;
               }
   }
   while(i<a.n)
   {
    Data[k].Coef=a.Data[i].Coef;
      Data[k++].Pow=a.Data[i++].Pow;
   }
   while(j<b.n)
   {
    Data[k].Coef=b.Data[j].Coef;
      Data[k++].Pow=b.Data[j++].Pow;
   }
   n=k;
}
void Poly::MulPoly(Poly a,Poly b)
{
 int i,j,k;
   i=j=k=0;
 while(i<a.n)
   {
    j=0;
    while(j<b.n)
      {
       Data[k].Coef=a.Data[i].Coef*b.Data[j].Coef;
         Data[k++].Pow=a.Data[i].Pow+b.Data[j++].Pow;
      }
    i++;
   }
   n=k;
}
void Poly::ItemPoly(float Coef,int Pow,Poly b)
{
 int j,t;
   j=t=0;
   while(j<b.n)
   {
      Data[t].Coef=Coef*b.Data[j].Coef;
      Data[t++].Pow=Pow+b.Data[j++].Pow;
   }
   n=t;
}
void Poly::TaghsimPoly(int k,Poly a,Poly b)
{
 Poly d,e;
 p:
 if(a.Data[0].Pow>=b.Data[0].Pow)
   {
  Data[k].Pow=a.Data[0].Pow-b.Data[0].Pow;
      Data[k].Coef=a.Data[0].Coef/b.Data[0].Coef;
      d.ItemPoly(Data[k].Coef,Data[k].Pow,b);
  e.SubtractPoly(a,d);
  k++;
   }
 n=k;
 if(e.Data[0].Pow>=b.Data[0].Pow)TaghsimPoly(k,e,b);
  else
  {
   cout<<"\nMod Is : \n";
   e.WritePoly();
  }
}
void main(void)
{
 Poly a,b,c;
 char Sign;
 a.ReadPoly();
 a.SortPoly();
 cout<<"\nPlease enter sign(+,-,*,/) : ";
 cin>>Sign;
 b.ReadPoly();
 b.SortPoly();
 switch(Sign)
 {
  case'+':
   c.AddPoly(a,b);
   break;
  case'-':
   c.SubtractPoly(a,b);
   break;
  case'*':
   c.MulPoly(a,b);
   c.SortPoly();
   break;
  case'/':
   c.TaghsimPoly(0,a,b);
   break;
 }
 cout<<"\n\nAnswer Is : \n";
 c.WritePoly();
 getche();
}

 

نویسنده : محمد حسنی اقتدار

نوشته شده توسط مدیریت در جمعه 1384/07/29 |

در این برنامه شاهد توپی هستیم که تحت زاویه در مستطیلی حرکت می کند ودر بر خورد با دیواره های مستطیل بیب زده و بر می گردد .

#include<graphics.h>
#include<alloc.h>
int changedirnx(int xcur);
int changedirny(int ycur);
void main(void)
{
 int gd=DETECT,gm,area,m,n,xmin=0,xmax=630,ymin=0,ymax=470,xcur=300,ycur=30;
 char *buff;
 int xch,ych,ini=0;
 initgraph(&gd,&gm," ");
 cleardevice();
 setcolor(3);
 outtextxy(225,185,"TOOPPE MOTEHARREK");
 getch();
 cleardevice();
 setcolor(7);
 rectangle(2,2,630,479);
 rectangle(3,3,629,478);
 setcolor(13);
 circle(7,7,3);setfillstyle(SOLID_FILL,13);floodfill(7,7,13);
 area=imagesize(4,4,11,11);
 buff=malloc(area);
 getimage(4,4,11,11,buff);
 setcolor(0);
 circle(7,7,3);setfillstyle(SOLID_FILL,0);floodfill(7,7,0);
 while(!kbhit())
 {
  delay(200);if(ini!=0)putimage(m,n,buff,XOR_PUT);
  m=xcur;n=ycur; ini=1;
  putimage(xcur,ycur,buff,XOR_PUT);
  if(xcur>xmax || xcur<xmin)xch=changedirnx(xcur);
  if(ycur>ymax || ycur<ymin)ych=changedirny(ycur);
  if(xch==1)xcur++;else xcur--;
  if(ych==1)ycur++;else ycur--;
 }
 closegraph();restorecrtmode();
 clrscr();printf("Thank You.\n");
 getch();
}
/*-----------------end of main()-------------------*/
changedirnx(int xcur)
{
 int xch;
 if(xcur>630)xch=0;
 if(xcur<0)xch=1;
 sound(100);delay(80);nosound();
 return(xch);
}
changedirny(int ycur)
{
 int ych;
 if(ycur>460)ych=0;
 if(ycur<0)ych=1;
 sound(100);delay(80);nosound();
 return(ych);
}

نوشته شده توسط مدیریت در پنجشنبه 1384/03/26 |
 

#include<conio.h>  //To detect keyboard press
#include<graphics.h>  //Basic drawing operations
#include<dos.h>   //For Date & Time
#include<math.h>  //Cos,Sin
#include<stdlib.h>  //itoa
#include<string.h>  //strcpy,strcat,strlen
const float PI=3.1415926535; //PI value
int sec,min,hr;   //Store time
struct time t;   //Get time
struct dosdate_t d;  //Get Date
char p[8]={0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55}; //User defined fill pattern
char strhr[5]="",strmin[5]="",strsec[5]="";  //Store date.
char strdate[30];
//Select day of Month
char strday[][3]={"01","02","03","04","05","06","07","08","09","10",
    "11","12","13","14","15","16","17","18","19","20",
    "21","22","23","24","25","26","27","28","29","30","31"};
//Select month of Year
char strmonth[][9]={"January","February","March","April","May","June",
      "July","August","September","October","November","December"};
char stryr[5]="";      //Store year
//Select day of Week
char strwday[][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
void main()       //Program entry
{
 int gd=DETECT,gm;     //Graphics initialisation
 sec=min=hr=0;      //Remove garbage values
 initgraph(&gd,&gm,"E:\\tc\\bgi");   //Switch to graphics
 setfillstyle(SOLID_FILL,RED);    //Background- style & color
 bar(0,0,639,479);            //Background
 float angle;      //Inclination of the hands of the clock
 setcolor(YELLOW);            //Dial border of the clock
 setfillstyle(SOLID_FILL,YELLOW);
 fillellipse(320,240,240,240);         //Dial border
 setcolor(LIGHTBLUE);     //Dial of the clock
 setfillstyle(SOLID_FILL,LIGHTBLUE);
 fillellipse(320,240,235,235);
 setcolor(DARKGRAY);     //Inside color of the clock
 setfillstyle(SOLID_FILL,LIGHTGRAY);
 fillellipse(320,240,190,190);
 setcolor(BLACK);
 settextstyle(10, 0, 1);     //Bold_Font
 outtextxy(306,5,"XII");
 outtextxy(312,430,"VI");
 outtextxy(520,215,"III");
 outtextxy(102,215,"IX");
 setfillpattern(p,WHITE);
 bar(560,215,575,265);     //Showing the key to the watch
 bar(575,220,580,260);     //Just a sho
 /* setfillpattern(p,LIGHTGRAY);
 bar(560,215,575,219);
 setfillpattern(p,DARKGRAY);
 bar(560,261,575,265); */
 setfillstyle(SOLID_FILL,WHITE);     //Making the textbox for Date
 bar(210,310,445,350);
 setcolor(DARKGRAY);
 rectangle(210,310,445,350);
 setcolor(BLACK);
 rectangle(211,311,444,349);
 setcolor(WHITE);
 line(210,350,446,350);
 line(446,350,446,310);
 setcolor(LIGHTGRAY);
 rectangle(212,312,443,348);           //End of textbox for Date
 while(!kbhit())
  {
   gettime(&t);    //Load system time into structure t
   sec=t.ti_sec;    //Store seconds
   min=t.ti_min;    //Store minutes
   hr=t.ti_hour;    //Store hours
   setfillstyle(SOLID_FILL,BROWN);
   fillellipse(320,240,10,10);   //  -------|
   setfillstyle(SOLID_FILL,WHITE);  //         |   Display center of
   fillellipse(320,240,7,7);     //  -------|->    the Clock
   setfillstyle(SOLID_FILL,GREEN);  //         |
   fillellipse(320,240,4,4);     //  -------|
   itoa(hr,strhr,10);   //Get hours in a string
   if(strlen(strhr)==1)   //Make it a string having len = 2
    {
     strhr[2]='\0';
     strhr[1]=strhr[0];
     strhr[0]='0';
    }
   itoa(min,strmin,10);    //Get minutes in a string
   if(strlen(strmin)==1)            //Make it a string having len = 2
    {
     strmin[2]='\0';
     strmin[1]=strmin[0];
     strmin[0]='0';
    }
   itoa(sec,strsec,10);     //Get seconds in a string
   if(strlen(strsec)==1)              //Make it a string heving len = 2
    {
     strsec[2]='\0';
     strsec[1]=strsec[0];
     strsec[0]='0';
    }
   setcolor(BLACK);
   settextstyle(5,0,4);
   moveto(244,117);
   outtext(strhr);
   outtext(":");
   outtext(strmin);
   outtext(":");
   outtext(strsec);     //Display the time in the given region
   _dos_getdate(&d);     //Load system date into structure d
   strcpy(strdate,strwday[d.dayofweek]);
   strcat(strdate,",");
   strcat(strdate,strmonth[d.month-1]);
   strcat(strdate," ");
   strcat(strdate,strday[d.day-1]);
   strcat(strdate,",");
   itoa(d.year,stryr,10);
   strcat(strdate,stryr);
   settextstyle(1,0,1);
   moveto(225,320);
   outtext(strdate);
   setlinestyle(SOLID_LINE,0,3);
   int totsec=((t.ti_hour%12)*60)+(t.ti_min);
   angle=(float)(((float)totsec/(float)720)*2*PI);
   angle-=PI/2;
   setcolor(BLACK);
   line(320+2,240+2,320+(100*cos(angle))+2,240+(100*sin(angle))+2);
   setcolor(BROWN);
   line(320,240,320+(100*cos(angle)),240+(100*sin(angle)));
   angle=((float)min/60)*2*PI;
   angle=angle-(PI/2);
   setcolor(BLACK);
   line(320+3,240+3,320+(175*cos(angle))+3,240+(175*sin(angle))+3);
   setcolor(RED);
   line(320,240,320+(175*cos(angle)),240+(175*sin(angle)));
   setlinestyle(SOLID_LINE,0,1);
   angle=((float)sec/60)*2*PI;
   angle=angle-(PI/2);
   setcolor(BLACK);
   line(320+5,240+5,320+(180*cos(angle))+5,240+(180*sin(angle))+5);
   setcolor(RED);
   line(320,240,320+(180*cos(angle)),240+(180*sin(angle)));
   delay(900);
   setcolor(LIGHTGRAY);
   setlinestyle(SOLID_LINE,0,3);
   totsec=((t.ti_hour%12)*60)+(t.ti_min);
   angle=(float)(((float)totsec/(float)720)* 2 *PI);
   angle-=PI/2;
   line(320,240,320+(100*cos(angle)),240+(100*sin(angle)));
   line(320+2,240+2,320+(100*cos(angle))+2,240+(100*sin(angle))+ 2);
   angle=((float)min/60)*2*PI;
   angle=angle-(PI/2);
   line(320,240,320+(175*cos(angle)),240+(175*sin(angle)));
   line(320+3,240+3,320+(175*cos(angle))+3,240+(175*sin(angle))+ 3);
   setlinestyle(SOLID_LINE,0,3);
   angle=((float)sec/60)*2*PI;
   angle=angle-(PI/2);
   line(320+5,240+5,320+(180*cos(angle))+5,240+(180*sin(angle))+5);
   line(320,240,320+(180*cos(angle)),240+(180*sin(angle)));
   setlinestyle(SOLID_LINE,0,1);
   setfillstyle(SOLID_FILL,WHITE);
   bar(240,127,390,160);
   setcolor(BLACK);
   rectangle(241,128,389,159);
   setcolor(DARKGRAY);
   line(240,160,240,127);
   line(240,127,390,127);
   setcolor(WHITE);
   line(240,160,390,160);
   line(390,160,390,127);
   setcolor(LIGHTGRAY);
   rectangle(242,129,388,158);
   if((sec>19&&sec<41)||(hr>19&&hr<41)||(min>19&&min<41))
    {
     setfillstyle(SOLID_FILL,WHITE);
     bar(210,310,445,350);
     setcolor(DARKGRAY);
     rectangle(210,310,445,350);
     setcolor(BLACK);
     rectangle(211,311,444,349);
     setcolor(WHITE);
     line(210,350,446,350);
     line(446,350,446,310);
     setcolor(LIGHTGRAY);
     rectangle(212,312,443,348);
    }
  }
}

نوشته شده توسط مدیریت در چهارشنبه 1384/03/25 |

در این پروژه کار های زیر انجام می شود :

۱- مشخص کردن طول متن ( تابع strlen )

۲-  معکوس کردن متن ( تابع strrev )

۳- کپی کردن متن در آرایه ای از کارکتر ( تابع strcpy )

۴- مقایسه ی دو متن ( تابع strcmp )

۵- ادغام کردن دو متن ( تابع strcat )

۶- پاک کردن قسمتی از یک متن

۷- تبدیل عددی از نوع رشته ای به عددی ( تابع atoi )

۸- تبدیل عددی از نوع عددی به رشته ای ( تابع itoa )

 

#include<stdio.h>
#include<conio.h>
char str1[20],str2[20],str3[20];
int i,j;
/*---------------------------------*/
char meno(void)
{
 clrscr();
 printf("\n\t\t\t\tIN THE NAME OF GOD\n");
 printf("\n\n 1.Mohasebehye Toole Matn");
 printf("\n\n 2.Makoos Kardane Matn");
 printf("\n\n 3.Copy Kardane Matn Dar Arayehei Az Character");
 printf("\n\n 4.Moghayesehye Matn Ba Matni Digar");
 printf("\n\n 5.Edgham Kardane Matn Ba Matni Digar");
 printf("\n\n 6.Pak Kardane Ghesmati Az Matn");
 printf("\n\n 7.Tabdil Adadi Az Noe Reshteh Be Integer");
 printf("\n\n 8.Tabdil Adadi Az Noe Integer Be Reshteh");
 printf("\n\n 9.Khorooj Az Barnameh");
 printf("\n\n\n\t\t\t*** Kode Morede Nazar Ra Vared Konid ***");
 return(getch());
}
/*---------------------------------*/
int no_1(void)
{
 printf("\n Lotfan Matn Ra Vared Konid :\n\n ");
 scanf("%s",str1);
 while(str1[++i]);
   return(i);
}
/*---------------------------------*/
void no_2(void)
{
 printf("\n Lotfan Matn Ra Vared Konid :\n\n ");
 scanf("%s",str1);
   printf("\n Makoose Matn =\n\n ");
 while(str1[i++]);
 i-=1;
 while(i>0)
  printf("%c",str1[--i]);
}
/*---------------------------------*/
void no_3(void)
{
 printf("\n Lotfan Matn Ra Vared Konid :\n\n str 1 = ");
 scanf("%s",str1);
 while(str1[i])
  str2[i++]=str1[i];
 printf("\n str 2 = %s",str2);
}
/*---------------------------------*/
int no_4(void)
{
 i=j=-1;
 while(str1[++i]&&str2[++j])
 {
  if(str1[i]>str2[j])
   return(1);
    else
     if(str1[i]<str2[j])
      return(-1);
 }
 if((!str1[i])&&(!str2[j]))
  return(0);
   else
    if(!str1[i])
     return(-1);
      else
       return(1);
}
/*---------------------------------*/
void no_5(void)
{
 printf("\n Lotfan Matn 1 Ra Vared Konid =\n\n ");
 scanf("%s",str1);
 printf("\n Lotfan Matn 2 Ra Vared Konid =\n\n ");
 scanf("%s",str2);
 while(str1[i])
  str3[j++]=str1[i++];
 i=0;
 while (str2[i])
  str3[j++]=str2[i++];
 str3[j]='\0';
}
/*---------------------------------*/
void no_6(void)
{
 i-=1;
 while(str1[j])
  str1[i++]=str1[j++];
 str1[i]='\0';
}
/*---------------------------------*/
long int no_7(void)
{
 int sum=0;
 while(str1[i])
  sum=(str1[i++]-'0')+sum*10;
 return(sum);
}
/*---------------------------------*/
void no_8(void)
{
while(i%10!=0)
 {
  str1[j++]=i%10+'0';
  i=i/10;
 }
}
/*---------------------------------*/
void main(void)
{
 int exit=0;
 printf("\n\n\n\n\n\t\tBarnameh Nevis : Mohammad Hasani Eghtedar\n\n\t\tDaneshgah : Qom\n\n\t\tReshteh : Olume Copmputer\n\n\t\tOstad : Aghaye Seyyed Esmaeili\n\n\t\tPoshtibani : 09125521498\n\n\t\tSale Tahsili : Nimehye Dovvom 1383-1384");
 getch();
 while(exit==0)
 {  
  i=j=0;
  switch(meno())
  {
   case'1':clrscr();
       printf("\n Toole Matn = %i",no_1());
       getch();
                 break;
   case'2':clrscr();
       no_2();
       getch();
       break;
   case'3':clrscr();
       no_3();
       getch();
                 break;
   case'4':clrscr();
       printf(" -1 : Matne 1 Bozorgtar Ast\t\t1 : Matne 2 Bozorgtar Ast");
             printf("\n\n Lotfan Matn 1 Ra Vared Konid =\n\n ");
       scanf("%s",str1);
       printf("\n Lotfan Matn 2 Ra Vared Konid =\n\n ");
       scanf("%s",str2);
       printf("\n\n%i",no_4());
                 getch();
       break;
   case'5':clrscr();
       no_5();
       printf("\n Edghame 2 Matn =\n\n %s",str3);
       getch();
       break;
   case'6':clrscr();
       printf("\n Lotfan Matn Ra Vared Konid :\n\n ");
       scanf("%s",str1);
       printf("\n Lotfan  Andis Aghazin Va Payani Ra Baraye Pak Kardan Vared Konid =");
       printf("\n\n Aghazin = ");
       scanf("%i",&i);
       printf("\n Payani = ");
       scanf("%i",&j);
       no_6();
       printf("\n Matn = %s",str1);
       getch();
       break;
   case'7':clrscr();
       printf("\n Lotfan Adad Az Noe String Ra Vared Konid =\n\n ");
       scanf("%s",str1);
       printf("\n\n Noe Integer Adad = %i",no_7());
       getch();
       break;;
   case'8':clrscr();
       printf("\n Lotfan Adad Az Noe Integer Ra Vared Konid =\n\n ");
       scanf("%i",&i);
       no_8();
       printf("\n\n Noe String Adad = ");
       while(j-->0)
        printf("%c",str1[j]);
       getch();
       break;;
   case'9':exit=1;
  }
 }
}

 
نویسنده : محمد حسنی اقتدار
نوشته شده توسط مدیریت در سه شنبه 1384/03/17 |
لئوناردو پیزانو که بعد ها به نام فیبوناچی معروف گردید درقرن 13 در ایتالیا زندگی می کرد . این ریاضیدان مانند بسیاری دیگر از دانشمندان به دنبال ریشه های عددی بود که به واسطه آن بتواند بسیاری از پدیده ها را توجیه نماید . فیبوناچی توانست چند سری از اعداد که بین آن ها روابط منطقی وجود داشت را شناسایی نماید که می توان به سری 34 21 13 8 5 3 2 1 1 اشاره کرد که هر عدد حاصل جمع دو عدد قبلی است .
 

PROGRAM DONBALEHYE_FIBONACHI;
USES WINCRT;
VAR
   I,A,B,C:INTEGER;
BEGIN
     CLRSCR;
     I:=3;
     A:=0;
     B:=1;
     WRITELN('*****SERYE FIBONACHI*****');
     WRITELN;
     WRITE(A,' ',B);
     WHILE I<=20 DO
           BEGIN
                C:=A+B;
                A:=B;
                B:=C;
                I:=I+1;
                WRITE(' ',C)
           END;
     READLN
END.

نویسنده : محمد حسنی اقتدار

نوشته شده توسط مدیریت در دوشنبه 1384/03/16 |

مسیر یاب یکی از بازی ها و معما های  جالب است که در آن باید مسیر هایی را که از یک گوشه به گوشه دیگر منتهی می شود را پیدا کنید .

#include<stdio.h>
#include<conio.h>
#define max1 10
#define max2 10
struct plus
{
 int up,right,down,left;
};
int f,k,K,i=1,j=1,m=0,count=0,rah[2][max1*max2];
char code='n';
int arr[max1][max2]={{0,0,0,0,0,0,0,0,0,0},
       {0,1,1,1,1,0,0,0,0,0},
       {0,1,0,0,1,1,1,0,0,0},
       {0,1,1,1,0,0,1,0,0,0},
       {0,1,0,1,0,0,1,1,0,0},
       {0,1,0,1,0,0,0,1,1,0},
       {0,1,0,1,1,1,0,0,1,0},
       {0,1,0,0,0,1,0,0,1,0},
       {0,1,1,1,1,1,1,1,5,0},
           {0,0,0,0,0,0,0,0,0,0}};
struct plus plan[max1][max2];
void chap(void);
void back(void);
void plus(void);
void search(void);
void main(void)
{
 clrscr();
 printf("5");
 for(k=1;k<=max1-2;k++)
  {
   printf("\n");
   for(K=1;K<=max2-2;K++)
    printf("%i ",arr[k][K]);
  }
 printf("\n\n Chand ta masir az 5 be 5 vojood darad ? ");
 getchar();
 printf("\n\n Ba ham javabe dorost ra bebinim : ( Enter a key )");
 getch();
 rah[0][m]=1;
 rah[1][m]=1;
 plus();
 getch();
}
void plus(void)
{
 k=1;
 if((plan[i][j].up=arr[i-1][j])==1)++k;
 if((plan[i][j].right=arr[i][j+1])==1)++k;
 if((plan[i][j].down=arr[i+1][j])==1)++k;
 if((plan[i][j].left=arr[i][j-1])==1)++k;
 if((arr[i][j]=k)>2)count+=k-2;
 if(code=='t')arr[rah[0][m+1]][rah[1][m+1]]=1;
 code='n';
 search();
}
void search(void)
{
 if(plan[i][j].up==1)
  {
   rah[0][++m]=--i;
   rah[1][m]=j;
   plus();
  }
 else if(plan[i][j].right==1)
  {
   rah[0][++m]=i;
   rah[1][m]=++j;
   plus();
  }
 else if(plan[i][j].down==1)
  {
   rah[0][++m]=++i;
   rah[1][m]=j;
   plus();
  }
 else if(plan[i][j].left==1)
  {
   rah[0][++m]=i;
   rah[1][m]=--j;
   plus();
  }
 else chap();
}
void back(void)
{
 while(m>=0)
   if(arr[rah[0][m-1]][rah[1][m-1]]>2)
    {
     arr[rah[0][m]][rah[1][m]]=2;
     code='t';
     arr[rah[0][--m]][rah[1][m]]-=1;
     count-=1;
     i=rah[0][m];
     j=rah[1][m];
     plus();
    }
   else
    {
     arr[rah[0][--m]][rah[1][m]]=1;
     back();
    }
}
void chap(void)
{
 int k;
 if((plan[i][j].up==5)||(plan[i][j].right==5)||(plan[i][j].down==5)||(plan[i][j].left==5))
  {
   rah[0][++m]=max1-2;
   rah[1][m]=max2-2;
   printf("\n\n\n Masir %i : ",++f);
   for(k=0;k<=m;k++)printf("[%i,%i]->",rah[0][k],rah[1][k]);
  }
 if(count!=0)back();
}

نویسنده : محمد حسنی اقتدار 

نوشته شده توسط مدیریت در جمعه 1384/02/30 |
 
 
در این برنامه می توانیم اعدادی تا دویست رقم را هم با هم جمع یا از هم کم کنیم .
 
program digit200;
uses wincrt;
type
    jadval=array[1..4,0..200]of integer;
var
   adad:string;
   alamat:char;
   temp:jadval;
   code,i,t,p,j,n:integer;
procedure plus(var a:jadval);
        begin            
             for i:=1to a[1,0]+2do
                  begin
                       a[4,i]:=a[1,i]+a[2,i]+a[3,i];
                       if a[4,i]>9then
                         begin
                              a[3,i+1]:=a[4,i]div 10;
                              a[4,i]:=a[4,i]mod 10;
                         end;
                  end;
        end;
procedure mines(var a:jadval);
        begin            
             for i:=1to a[1,0]+2do
                  begin
                       a[4,i]:=a[1,i]-a[2,i]+a[3,i];
                       if a[4,i]<0then
                         begin
                              a[3,i+1]:=-1;
                              a[4,i]:=a[4,i]+10;
                         end;
                  end;
        end;
begin
     clrscr;
     for j:=1to 2do
        begin
             write(' Please type number ',j,' :  ');
             readln(adad);
             n:=length(adad)+1;
             for i:=1to n-1do
                val(adad[n-i],temp[j,i],code);
             temp[j,0]:=n-1;
        end;
     if (temp[2,0]>temp[1,0])or((temp[2,0]=temp[1,0])and(temp[2,temp[2,0]]>temp[1,temp[1,0]]))then
       begin
            for i:=0to n-1do
               temp[2,i]:=temp[1,i];
            for i:=1to n-1do
               val(adad[n-i],temp[1,i],code);
               temp[j,0]:=n-1;
       end;
     write(' Please type sign :  ');
     read(alamat);
     case alamat of
         '+':plus(temp);
         '-':mines(temp);
         '*':;
     end;
     write(' Answer is :  ');
     for j:=i-1 downto 1 do
        write(temp[4,j]);
end.
 
نویسنده : محمد حسنی اقتدار
نوشته شده توسط مدیریت در شنبه 1384/02/17 |
 
هشت وزیر یکی از بازی های شطرنج است که 8 وزیر را باید جوری در خانه ها ی شطرنج قرار دهید که وزیر ها همدیگر را نزنند ( می دانید که وزیر در شطرنج ترکیب حرکت فیل و رخ است ) .
 
Source Code 1
#include
#define N 8
int Chess(char Arr[N][N],int row);
int check(char Arr[N][N],int row,int line);
void main(void)
 {
  char chess[N][N]={0};
  Chess(chess,0); /* The call to the function*/
  int i,y;
  for(i=0;i   {
    printf("\n\t\t\t");
    for(y=0;y     if(chess[i][y]==0)printf("x ");
      else printf("%c ",chess[i][y]);
   }
  printf("\n");
  }
int Chess(char Arr[N][N] ,int row)
 {
  int line=0;
  if(row==N)return 1;
  while(line < N)
   {
    if(check(Arr,row,line))   /*check the row*/
     {
      Arr[row][line]='Q';   /*puts a queen on the board*/
      if(Chess(Arr,row+1))return 1;   /*the recursion*/
      Arr[row][line]=0;   /*clears the last change if*/
     }   /*returned 0 from the recursion*/
    line++;
   }
  return 0;
  }
int check(char Arr[N][N],int row,int line)
 {   /*check just the left size of the board*/
  int r,l;
  r=row;
  l=line;
  while(r >= 0 && l >= 0)
   {
    if(Arr[r][l]=='Q')return 0;
    --r;
    --l;
   }
  l=line;
  r=row;
  while(l < N && r >= 0)
   {
    if(Arr[r][l]=='Q')return 0;
    ++l;
    --r;
   }
  l=line;
  r=row;
  while(r >= 0)
   {
    if(Arr[r][l]=='Q')return 0;
    --r;
   }
  return 1;
  }
 
Source Code 2 

#include
#include
#include
#include
const int chessboardsize=8; //size of chessboard
enum{empty,queen,used};   //status
struct move   //movement direction
 {
  int x;
  int y;
 };
struct chessboard   //chessboard type
 {
  int size;
  int square[chessboardsize][chessboardsize];
  int usedsquares;
  int noqueens;
 };
void setqueenmovdi(move*whatmove,chessboard*board,move*curcoor);
void main(void)
 {
  move curcoor;  // define digonal movements
  move NE;
  NE.x=1;
  NE.y=1;
  move NW;
  NW.x=-1;
  NW.y=1;
  move SE;
  SE.x=1;
  SE.y=-1;
  move SW;
  SW.x=-1;
  SW.y=-1;
  chessboard board;
  board.size=chessboardsize;
  srand(time(0));
  while(board.noqueens!=board.size)
   {
    board.usedsquares=0;
    board.noqueens=0;
    for(int i=0;i     for(int j=0;j      board.square[i][j]=0;
    while(board.usedsquares     {
      curcoor.x=rand()%board.size;
      curcoor.y=rand()%board.size;
      if(board.square[curcoor.x][curcoor.y]==empty)
       {
        board.square[curcoor.x][curcoor.y]=queen;
        ++board.usedsquares;
              ++board.noqueens;
       }
        else
         continue;
      for(int horiz=0;horiz       if(board.square[horiz][curcoor.y]==empty)
        {
         board.square[horiz][curcoor.y]=used;
         ++board.usedsquares;
        }
      for(int verti=0;verti       if(board.square[curcoor.x][verti]==empty)
        {
         board.square[curcoor.x][verti]=used;
         ++board.usedsquares;
        }
      board.square[curcoor.x][curcoor.y]=queen;
      setqueenmovdi(&NE,&board,&curcoor);
      setqueenmovdi(&NW,&board,&curcoor);
      setqueenmovdi(&SE,&board,&curcoor);
            setqueenmovdi(&SW,&board,&curcoor);
     }
   }
  cout<  for(int i2=0;i2   {
    for(int j2=0;j2     { 
      cout<      printf(" ");
     }
    cout<   }
 }
void setqueenmovdi(move*whatmove,chessboard*board,move*curcoor)
 {
  move next;
  next.x=curcoor->x+whatmove->x;
  next.y=curcoor->y+whatmove->y;
  if(next.x<0||next.x>board->size-1||next.y<0||next.y>board->size-1)
   return;
  if(board->square[next.x][next.y]==empty)
   {
    board->square[next.x][next.y]=used;
    ++board->usedsquares;
   }
  setqueenmovdi(whatmove,board,&next);
   return;
 }

نوشته شده توسط مدیریت در جمعه 1384/02/16 |

                                       

یك بازی فكری که باید تمام دیسك ها ئی را كه روی یك میله قرار دارد را به میله ‌ای دیگر منتقل كنید .
قوانین بازی عبارتند از :
1- هر بار تنها می‌ توانید یك دیسك را جا به ‌جا كنید .
2- همیشه باید دیسك كوچك تر را بر روی بزرگ تر قرار دهید .

Source Code

 

#include<stdio.h>
int t=0;
void tower(char from,char to,char aux,int n)
 {
  if(n==1)printf("%d = Move disk 1 from peg %c to peg %c \n",++t,from,to);
 else
  {
     tower(from,aux,to,n-1);
     printf("%d = Move disk %1d from peg %c to peg %c \n",++t,n,from,to);
     tower(aux,to,from,n-1);
    }
 }
void main(void)
 {
  char from='1',to='3',aux='2';
  int n;
  printf(" How many disks ? ");
  scanf("%d",&n);
  printf("\n");
  tower(from,to,aux,n);
 }

 
نویسنده : محمد حسنی اقتدار
نوشته شده توسط مدیریت در پنجشنبه 1384/02/15 |