PDA

View Full Version : سوال: در مورد الگوریتم برنامه notepad



meryjooni
چهارشنبه 30 بهمن 1387, 13:09 عصر
سلام :لبخندساده: ،

درمورد جزئیات الگوریتم برنامه note pad سوال دارم :خجالت: :

( اول اینو بگم که من این برنامه رو با C++ ( turbo C) می نویسم، و برای صفحه editor اصلی ، از محیط متنی استفاده کردم )

1.من محیط گرافیک رو ترکیب کردم با متنی ! یعنی توی initgraph از دستورات Cout استفاده کردم ، اما مکان نما وجود نداره ، یادمه یه جایی خونده بودم که تو این جور موارد میشه با یه دستور، مکان نما رو ظاهر کرد :متفکر: ! دستورش رو کسی میدونه ؟!
(دوستان این مشکل تقریبا حل شد ، در مورد سوال دومم توضیح بدین ، ممنونم )

2.در مورد scroll کردن صفحه چی کار میتونم بکنم ؟! یعنی اینکه وقتی به خط آخر رسید همه خطهای قبلی یکی برن بالا تر تا یه خط جدید اون زیر اضافه بشه ( مسلما اون منوهایی که بالا وجود داره نباید پاک بشن ) یکم در این مورد هم راهنماییم کنین !

جولوتر تشکر میکنم :خجالت: !

SamaPic
چهارشنبه 30 بهمن 1387, 17:00 عصر
با سلام خدمت دوست عزيز.
در مورد برنامه ي موس بايد بگويم خيلي پيچيده است .
من خودم حدود 2 هفته دنبالش گشتم و در نهايت پيدا كردم .
مي تواني از تاپيك زير استفاده كني و لي يادت نره كه از shask00l (http://barnamenevis.org/forum/member.php?u=3324) (كسي كه برنامه را گذاشت) تشكر كني(دكمه ي تشكر رو بزني نه اين كه يك متن تشكر بنويسي)
اين پروژه رو كامل بخوان ،خيلي چيز ها از آن ياد مي گيري.


http://barnamenevis.org/forum/showthread.php?t=145644


در مورد دوم هم بايد بگويم كه الان يادم نيست ولي تو فصل گرافيك كتاب آقاي جعفر نژاد چند تابع براي اين كار وجود داشت كه مي شد استفاده كرد.(كتاب سي نه سي ++)
دستوراتش تو سي ++ جواب مي ده.
سوال: شما چرا از راه حل هاي ابتكاري استفاده نكرديد ؟من خودم پروژه ي مين ياب را با دستورات ابتكاري نوشتم.
مي توانيد بگوييد وقي به خط آخر رسيد برود به خط اول خط اول را (با cout "چندين فاصله") پاك كند و سپس سر برگ را دوباره چاپ كند.
به هر حال هر طور راحت تر هستي.
خدانگهدار.

meryjooni
پنج شنبه 01 اسفند 1387, 19:18 عصر
سلام دوست من،


در مورد برنامه ي موس بايد بگويم خيلي پيچيده است .
من اصلا در مورد موس حرف نزدم ، مکان نما برای تایپ منظورمه ! همین خطی که وقتی داری مینویسی جلوی هر حرف هست و با arow keys جابه جا میشه !
و اون پروژه اصلا ربطی به سوال من نداشت!


در مورد دوم هم بايد بگويم كه الان يادم نيست ولي تو فصل گرافيك كتاب آقاي جعفر نژاد چند تابع براي اين كار وجود داشت كه مي شد استفاده كرد.(كتاب سي نه سي ++)
دستوراتش تو سي ++ جواب مي ده.

توی کتابش دنبال پی باید بگردم ، تو چه سر فصل هایی ؟! تو چه قسمتی ممکنه پیدا بشه ؟!


سوال: شما چرا از راه حل هاي ابتكاري استفاده نكرديد ؟من خودم پروژه ي مين ياب را با دستورات ابتكاري نوشتم.
مي توانيد بگوييد وقي به خط آخر رسيد برود به خط اول خط اول را (با cout "چندين فاصله") پاك كند و سپس سر برگ را دوباره چاپ كند.
امیدوارم سوال دومو فهمیده باشید ! من میخوام صفحه scroll بشه ، یعنی وقتی اومد سر خط جدید و اون خط بالایی پاک شد ، بعدن اگه دوباره رفت بالا بازم اون بیاد !
یکم بیشتر در مورد الگوریتمش کمکم کنین !

در ضمن من برای مکان نما ، خودم ابتکاری با line یه مکان نما ساختم !!! که با تایپ حروف حرکت می کنه و با arow keys جابه جا میشه ! اما خوب مشکلات زیادی داره ! هنوز هم مشکلاتش درست نشده! در مورد اون دستوری که گفتم : پیداش کردم ، اما توی محیط متنی فقط کار میکنه !

دستور : setcursor_

SamaPic
پنج شنبه 01 اسفند 1387, 22:56 عصر
با سلام خدمت دوست عزيز.



من اصلا در مورد موس حرف نزدم ، مکان نما برای تایپ منظورمه ! همین خطی که وقتی داری مینویسی جلوی هر حرف هست و با arow keys جابه جا میشه !
لطفا از اين پس به جاي مكان نما بگوييد كرسل(تشابه اسمي دارن.اشتباه از من بود) تا اشتباهي صورت نگيره.يكم فكر كن ،خيلي راحته.




و اون پروژه اصلا ربطی به سوال من نداشت!
من كه نگفتم كه اين برنامه ي شما است يا ربطي به برنامه ي شما داره.من گفتم براي موس مي توانيد از اين برنامه الگو بگيرد.



توی کتابش دنبال پی باید بگردم ، تو چه سر فصل هایی ؟! تو چه قسمتی ممکنه پیدا بشه ؟!
والا من يك بار براي انجام پروژه ي مين ياب فصل گرافيك كتاب آقاي جعفر نژاد رو خوندم و خيلي از موارد بدرد بخور پيدا كردم . ولي چون از آنها در برنامه ام استفاده نكردم فراموش كردم.شايد شما كتاب سي++ رو مي خوانيد.(لازم به ذكر است كه من كتاب سي آقاي جعفر نژاد را گفته بودم.)



امیدوارم سوال دومو فهمیده باشید ! من میخوام صفحه scroll بشه ، یعنی وقتی اومد سر خط جدید و اون خط بالایی پاک شد ، بعدن اگه دوباره رفت بالا بازم اون بیاد !
شما كه از توربو استفاده مي كنيد كارتان خيلي راحت است.
از تابع (getchar) استفاده كنيد.
با استفاده از تابع و گذاشتن يك شرط (مثلا اگر مختصات كرسل برابر با 44 شد ) خط اول را با دستور زير پاك كند و به جاي آن سرفصل ها را مجددا چاپ كند.


cout<<" ":

بي صوادي اصط ديگر چح مي شود كرد.:خجالت:
لازم به ذكر است با تمام شدن يك صفحه (اگر از تابع فوق استفاده كنيد.)همه ي خوط را به يك خط بالاتر مي برد و نيازي به تابع خاصي نمي باشد.
والا من نمي دانم شما چطور نوشتي.
الگريتمت را بگو تا جا هايي را كه نياز داري بشود بهتر كمك كرد.(لطفا فقط الگوريتم نه سورس برنامه)
در مورد راه حل ابتكاري شما (براي بهتر شدن ابتكار تان) نيز بايد بگويم شما از goto استفاده كنيد.و سپس دستور چاپ _ را بدهيد و سپس يك خانه به عقب برگردد.(اين راه حلي است كه من به فكرم رسيد.)
خدانگهدار.

meryjooni
جمعه 02 اسفند 1387, 00:03 صبح
ممنون دوست عزیز که وقتتون رو میزارین برای سوالام !


لطفا از اين پس به جاي مكان نما بگوييد كرسل(تشابه اسمي دارن.اشتباه از من بود) تا اشتباهي صورت نگيره.يكم فكر كن ،خيلي راحته.
درسته! تقصیره من بود ! cursor !


من كه نگفتم كه اين برنامه ي شما است يا ربطي به برنامه ي شما داره.من گفتم براي موس مي توانيد از اين برنامه الگو بگيرد.
منظورم این بود که من موس رو نمیخوام !


والا من يك بار براي انجام پروژه ي مين ياب فصل گرافيك كتاب آقاي جعفر نژاد رو خوندم و خيلي از موارد بدرد بخور پيدا كردم . ولي چون از آنها در برنامه ام استفاده نكردم فراموش كردم.شايد شما كتاب سي++ رو مي خوانيد.(لازم به ذكر است كه من كتاب سي آقاي جعفر نژاد را گفته بودم.)
من کتاب C++ شو از دوستم گرفتم ! C رو ندارم ! اتفاقا استادمون هم C رو پیشنهاد کرد اول ! اگه تونستم پیداش کنم حتما میخونمش !


شما كه از توربو استفاده مي كنيد كارتان خيلي راحت است.
از تابع (getchar) استفاده كنيد.
با استفاده از تابع و گذاشتن يك شرط (مثلا اگر مختصات كرسل برابر با 44 شد ) خط اول را با دستور زير پاك كند و به جاي آن سرفصل ها را مجددا چاپ كند.
منظورتون از سر فصل چیه ؟! همون menu و ... چیزایی که بالای صفحه کشیدم ؟!
من سعی میکنم از help خود کامپایلر دستورشو پیدا کنم و استفاده کنم ! ممنون !


در مورد راه حل ابتكاري شما (براي بهتر شدن ابتكار تان) نيز بايد بگويم شما از goto استفاده كنيد.و سپس دستور چاپ _ را بدهيد و سپس يك خانه به عقب برگردد.(اين راه حلي است كه من به فكرم رسيد.)
ایراد های که داره واسه پاک کردن اون خطه ! الگوریتمی نیست ! باید بیشتر دقت کنم ، ببینم مشکل از کجاس !


الگريتمت را بگو تا جا هايي را كه نياز داري بشود بهتر كمك كرد.(لطفا فقط الگوريتم نه سورس برنامه)
ببینین من توی initgraph اومدم از دستورات cout و ... استفاده کردم . الگوریتم هم اینه که :
وقتی کاربر کلیدی از کیبورد میزنه ، با دستور getch حرفش رو میخونم و با if هایی که گذاشتم هر کدوم کاری انجام میده , و اگه اون کلید از حروف باشه ، اون حرف رو میاد توی یه خونه از آرایه ای که تعریف کردم میریزه ( من یه آرایه دو بعدی تعریف کردم که بعد اول همون x و بعد دوم y ) هر حرف رو با توجه به x,y ی که داره میریزه تو اون خونه از آرایه ! و برای خرف بعدی x++ میشه ! و هر بار هم اون حرف رو با دستور gotoxy مکانی رو بهش میدم تا اونجا چاپ کنه !
نمی دونم خوب توضیح دادم یا نه ! اگه جایی رو متوجه نشدین بگین بیشتر توضیح بدم !

meryjooni
جمعه 02 اسفند 1387, 00:24 صبح
لازم به ذكر است با تمام شدن يك صفحه (اگر از تابع فوق استفاده كنيد.)همه ي خوط را به يك خط بالاتر مي برد و نيازي به تابع خاصي نمي باشد.
منظورتون چیه ؟!
فکر کنم منظورتون اینه که خود C++ صفحه رو میبره بالا و من فقط میتونم دوباره اون menu و .. بکشم! یعنی صفحه بره بالا و بره زیر menu ! اما اینجوری چه جوری میشه دوباره اون خطی که زیر menu رفته دوباره بیاد پایین و اون خطی که پایین اضافه شده بیره پایین ؟!

در ضمن من help مربوط به او دستوری که گفتین (getchar ) رو خوندم اما ، دستور خاصی نبود ، یه چیزی شبیه همین getch یا ... ! مثال help هم فقط یه رشته میگرفت و بعد اونو چاپ میکرد !

SamaPic
جمعه 02 اسفند 1387, 10:51 صبح
با سلام خدمت دوست عزيز.


منظورتون چیه ؟!
فکر کنم منظورتون اینه که خود C++ صفحه رو میبره بالا و من فقط میتونم دوباره اون menu و .. بکشم! یعنی صفحه بره بالا و بره زیر menu ! اما اینجوری چه جوری میشه دوباره اون خطی که زیر menu رفته دوباره بیاد پایین و اون خطی که پایین اضافه شده بیره پایین ؟!

در ضمن من help مربوط به او دستوری که گفتین (getchar ) رو خوندم اما ، دستور خاصی نبود ، یه چیزی شبیه همین getch یا ... ! مثال help هم فقط یه رشته میگرفت و بعد اونو چاپ میکرد !


با سلام خدمت دوست عزيز.

الگوريتمت درست است.


در حلقه ي for اي كه گذاشتي يك كد بصورت زير بگذار.









for (;;)


{


……..


Cout<<”_”;


Gotoxy(x-1,y);


}







حواص كه نيست يعني براي آدم نمي مونه.منظورم از سرفصل سر فايل بود كه اشتباهي نوشتم سر فصل (menu)



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

در خود كتاب سي++ آقاي جعفر نژاد هم (فصل 3 يا 4) آورده كه براي فهميدن توابع بيشتر به كتاب سي فصول 9 ، 11 ، 12 ، 15 مراجعه شود.(اگر اشتباه نكنم همين فصل ها بود.)

شما اگر براي نمايش تمامي نوشته ها از يك تابع استفاده كنيد مشكل حل مي شود.(مخصوصا حالا كه مي فرماييد از goto استفاده كرده ايد.كار خيلي راحت است.انتخاب با شما.)تمامي مشكلات شما با چاپ مجدد صفحه بر طرف مي شود.

ولي با اين وجود همان كه گفتم تقريبا همين كار را انجام مي دهد.آن دستور خط دلخواه را پاك و تمامي سطر هاي زير آن را يكي به بالا هدايت مي كرد.(دقيقا همان چيزي كه شما مي خواهيد.همان اوايل 10 تا 20 صفحه ي اول فصل)

البته اين دستور وقتي حذف كرد ديگر قابل برگشت نيست پس اين هم همان مي شود.

خدانگهدار.

meryjooni
شنبه 03 اسفند 1387, 20:15 عصر
ممنونم !
من چون فقط یک هفته زمان برای پروژه داشتیم ، دیگه به scroll نرسیدم . چون این دستوری که شما گفتین هم تو help خوندم اما همچین چیزی ننوشته بود ! اما دیگه زمان بیشتری ندارم !
مجبور شدم صفحه رو محدود کنم .
ممنون از این که وقت گذاشتین ، تقریبا فهمیدم که چی کار باید کنم ، اما وقت نوشتن کد و اجرا نیست !
ایشالا واسه پروژه های دیگه استفاده کنم ;)
ممنون بازم !

SamaPic
شنبه 03 اسفند 1387, 20:38 عصر
اميد وارم دوباره شما را ببينم.
خدانگهدار.

mortezamsp
یک شنبه 18 اسفند 1387, 10:40 صبح
دوست خوب ! من یه برنامه notepad دنلود کرده بودم که فکرکردم بهتره تو هم بری ببنینش:

http://cplusplus.blogsky.com/1387/12/07/post-2/