darkhast komak baray hal massaleh dar c++

UrUpload

New Member
درخواست كمك براي حل مسئله در سي ++

درخواست كمك براي حل مسئله در سي :

يك لنگرگاه قايقهاي تفريحي در شرق انگليس تاسيس شده است.
در اين case لنگرگاه يك حوضچه دست ساز است كه قايقها مي توانند يكي در جلوي ديگري لنگر بگيرند.
قايقها نمي توانند از يكديگر بگذرند. (اين به اين معني است كه قايقي كه در جلوي ورودي كانال لنگر انداخته بايد موقتا به جاي ديگري انتقال داده بشه تا قايقي كه مي خواهد لنگرگاه را ترك كند بتواند.)
مدير لنگرگاه قراردادي با شما بسته براي نوشتن يك برنامه console-base يا GUI-base براي ثبت پارك كردن قايق ها در لنگرگاه هنگامي كه قايق جديدي وارد مي شود.
هنگامي كه برنامه اجرا ميشه بايد به كاربر 4 گزينه بدهد:
يك – ثبت پارك جديد
دو – حذف پارك ثبت شده
سه – نمايش تمام پاركها (و فضاي باقي مانده در لنگرگاه)
چهار – خروج از برنامه

براي ثبت booking جديد ، برنامه بايد ((طول قايق)) را بگيردتا ببينيد كه اندازه اش مناسب هست يا نه.(بيشترين طول 15 متر هست) و همچنين بايد ((عمق قايق)) را بگيرد (بيشترين عمق 5 متر است) و اينكه فضاي كافي در لنگرگاه وجود دارد يا نه(طول لنگرگاه 150 متر است). اگر قايق بزرگ بود يا فضاي كافي در لنگرگاه وجود نداشت بايد با يك پيام مناسب به كاربر خبر بدهد و برگردد به منوي اول برنامه. اگر booking قابل انجام باشه ، بايد از كاربر ((مدت زمان لنگر انداختن)) را سئوال كند كه به ماه است و بعد از آن قيمتش را نشان دهد كه بستگي به طول قايق دارد و مدت زماني كه لنگر مي اندازد. (10 پوند براي هر متر ، در هر ماه) . بعد بايد كاربر امكان اين را داشته باشد كه قبول كند يا رد كند. اگر كاربر با قيمت راضي بود بايد از او اين اطلاعات گرفته بشه (ذخيره بشه در يك آبجكت كه بايد متدهايش را داشته باشد.)

اسم صاحب قايق : single string
اسم قايق : single string
مدل قايق : single string باريك – قايق بادي – قايق موتوري
طول قايق : int

و بعد بايد برنامه اينها را ذخيره كند و به منوي اول برگردد.
برنامه بايد به زبان سي ++ باشد.
 
آخرین ویرایش:

sajjad_eb

Well-Known Member
Yek langargah ghayeghhay tafrighi dar shargh englis tasis shodeh ast. Dar in case langargah yek hozcheh dast saz ast ke ghayegh ha mitonand yeki dar joloy digari langar begirand. Ghayeghha nemitonand az yekdigar bogzarand ( in be in mani ast ke ghayeghi ke dar joloy vorodi canal langar andakhteh bayad baray movaghat be jay digeh enteghal dadeh besheh ta ghayeghi ke mikhad langargah rot tark koneh betoneh)

modir langargah gharardadi ba shoma basteh baray neveshtan yek console-based or gui-based barnameh ke sabt koneh park kardan ghayegh ha ro dar langargah hengami ke ghayegh jadidi vared misheh. Hengami ke barnameh ejra misheh bayad be karbar 4 gozineh bedeh: 1- sabt park jaded 2- hazf park sabt shodeh 3- namayesh tamam park ha ( va fazay baghimandeh dar langargah ) 4- khoroj az
barnameh


Baray sabt booking jadid barnameh bayad tol ghayegh ro begire ta bebineh be andazeh kafi hast ( bishtarin tol 15 metr hast) va hamchenin bayad omgh ghayegh ro begireh ( bishtarin omgh 5 metr ast ) va inkeh fazay kafi dar langargah vojod darad ya na ( tol langargah 150 metr hast ). Agar ghayegh bozorg bod ya fazay kafi dar langargah vojod nadasht bayad ba yek peygham monaseb be karbar khabar bedeh va bargardeh be menu avalieh barnameh. Agar booking ghabel anjam basheh bayad az karbar modat zaman langar andakhtan ro soal koneh ke be be mah hast va bad az on gheymatesh ro neshon bedeh ke bastegi be tol ghayegh dareh va modat zamani ke langar mindazeh. ( 10 pond baray har metr dar har mah ). Bad bayad karbar emkan ino dashteh basheh ke ghabol koneh ya rad koneh. Agar karbar ba gheymat razi bod bayad az on in etelaat gerefteh besheh ( zakhireh besheh dar yek object ke bayad method hash tosh basheh )

esm saheb ghayegh (single string)
esm ghayegh (single string)
Model ghayegh (single string – barik, ghayegh badi, or ghayegh motori)
Tol ghayegh ( int )

Va bad barnameh bayad inharo zakhireh koneh va be menu avalieh bargardeh

من نه ++C بلدم نه پست شمارو خوندم . اما اگرم بلد بودم و احیانا پست رو می خوندم 150% جواب نمی دادم تا فارسی بنویسید :D :cry: :sad: :mad: :wink:
 

saalek110

Well-Known Member
من پست دوستمان را فارسي تايپ مي كنم:
درخواست كمك براي حل مسئله در سي :

يك لنگرگاه قايقهاي تفريحي در شرق انگليس تاسيس شده است.
در اين case لنگرگاه يك حوضچه دست ساز است كه قايقها مي توانند يكي در جلوي ديگري لنگر بگيرند.
قايقها نمي توانند از يكديگر بگذرند. (اين به اين معني است كه قايقي كه در جلوي ورودي كانال لنگر انداخته بايد موقتا به جاي ديگري انتقال داده بشه تا قايقي كه مي خواهد لنگرگاه را ترك كند بتواند.)
مدير لنگرگاه قراردادي با شما بسته براي نوشتن يك برنامه console-base يا GUI-base براي ثبت پارك كردن قايق ها در لنگرگاه هنگامي كه قايق جديدي وارد مي شود.
هنگامي كه برنامه اجرا ميشه بايد به كاربر 4 گزينه بدهد:
يك – ثبت پارك جديد
دو – حذف پارك ثبت شده
سه – نمايش تمام پاركها (و فضاي باقي مانده در لنگرگاه)
چهار – خروج از برنامه

براي ثبت booking جديد ، برنامه بايد ((طول قايق)) را بگيردتا ببينيد كه اندازه اش مناسب هست يا نه.(بيشترين طول 15 متر هست) و همچنين بايد ((عمق قايق)) را بگيرد (بيشترين عمق 5 متر است) و اينكه فضاي كافي در لنگرگاه وجود دارد يا نه(طول لنگرگاه 150 متر است). اگر قايق بزرگ بود يا فضاي كافي در لنگرگاه وجود نداشت بايد با يك پيام مناسب به كاربر خبر بدهد و برگردد به منوي اول برنامه. اگر booking قابل انجام باشه ، بايد از كاربر ((مدت زمان لنگر انداختن)) را سئوال كند كه به ماه است و بعد از آن قيمتش را نشان دهد كه بستگي به طول قايق دارد و مدت زماني كه لنگر مي اندازد. (10 پوند براي هر متر ، در هر ماه) . بعد بايد كاربر امكان اين را داشته باشد كه قبول كند يا رد كند. اگر كاربر با قيمت راضي بود بايد از او اين اطلاعات گرفته بشه (ذخيره بشه در يك آبجكت كه بايد متدهايش را داشته باشد.)

اسم صاحب قايق : single string
اسم قايق : single string
مدل قايق : single string باريك – قايق بادي – قايق موتوري
طول قايق : int

و بعد بايد برنامه اينها را ذخيره كند و به منوي اول برگردد.
برنامه بايد به زبان سي ++ باشد.
 
آخرین ویرایش:

saalek110

Well-Known Member
اولا بايد معلوم بشه با چه كامپايلري. اگر gui باشه كه من نمي دونم با چه كامپايلري مناسبه ولي براي حالت كنسولي توربوسي 3 را من مي شناسم و 4 و نيم.

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

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

قضيه بعدي راجع به ذخيره بلند مدت است . مثل فايل. كه فكر كنم نيازي نباشه به ذخيره بلند مدت و مسئله اصلي ساختن شي ها باشه.

فعلا همين ها را روشن كنيد تا برسيم به بقيه مسائل.
 
آخرین ویرایش:

saalek110

Well-Known Member
اين ساده ترين برنامه سي++ است كه من بلدم.
کد:
#include "iostream.h"
 #include "conio.h"
  
void main()
{
cout<<"ffff"<<endl;

getch();
}
اين را با توربو سي 3 كامپايل كردم و خطا نداشت.

شرح برنامه:
ابتدا دو فايل لازم كه مي خواهم از توابع آن استفاده كنم را اينكلود كردم . فايل اولي يعني iostream براي چاپ است و دومي يعني conio براي تابع getch لازمه كه صبر است براي گرفتن كليدي. در توربو سي 3 اگر اين خط نباشد، برنامه سريع از حالت اجرا خارج ميشه و نميشه نتيجه چاپ را ديد ولي توربو سي 4 و نيم اين خط را نمي خواهد ، چون خودش صبر مي كند.

حالا يك متغير از نوع int هم تعريف مي كنم. و مقدارش را 5 مي گيرم و تابع clrscr را هم اضافه مي كنم براي پاك كردن نتيجه اجراي قبلي برنامه.

کد:
#include "iostream.h"
 #include "conio.h"
  
void main()
{
clrscr();
int a=5;
cout<<"ffff"<<endl;

getch();
}

حالا از دستور switch استفاده مي كنم:

کد:
#include "iostream.h"
 #include "conio.h"
  
void main()
{
clrscr();
int a=5;

// ----------------------------
switch (a)
   {
case 5:
cout<<"a=5"<<endl;
break; 

case 6:
cout<<"a=6"<<endl;
break; 

default: 
cout<<"a is not 5 or 6"<<endl;
break; 
   }
// ----------------------------
getch();
}

برنامه بالا وابسته به حالت a كه اگر 5 باشد يا 6 باشد يا غير اين دو باشد ، عبارات مناسب را چاپ مي كند.
من اين برنامه را وقتي كه a مساوي 5 بود و مساوي 6 بود و مساوي 7 بود چك كردم كه عبارات a=5 و a=6 و a is not 5 or 6 چاپ شد.
دستور break هم لازمه تا به خط بعدي نرود. مثلا بعد چاپ a=5 ديگه a=6 چاپ نشود.

= == = = = =
حالا input گيري را هم به برنامه اضافه مي كنم:

کد:
#include "iostream.h"
 #include "conio.h"
  
void main()
{
clrscr();
int a;
cout<<"give me 5 or 6 or 7"<<endl;
cin>>a;
// ----------------------------
switch (a)
   {
case 5:
cout<<"a=5"<<endl;
break; 

case 6:
cout<<"a=6"<<endl;
break; 

default: 
cout<<"a is not 5 or 6"<<endl;
break; 
   }
// ----------------------------
getch();
}
حالا مي توانيم به a خودمان مقدار بدهيم.
وقتي 5 بدهيم چاپ ميشه a=5 و الي آخر.

حالا براي برنامه لنگرگاه براي داشتن ترمينال انتخاب ميشه از دستور سوئيچ استفاده كرد. براي اين كار اول 4 خط چاپ مي كنيم كه براي فلان كار يك بزن براي كار بعدي دو بزن و كار سوم و كار چهارم. و بعد با دستور سوئيچ به قسمت هاي 4 گانه برنامه خود مي رويم.
 
آخرین ویرایش:

UrUpload

New Member
اولا بايد معلوم بشه با چه كامپايلري. اگر gui باشه كه من نمي دونم با چه كامپايلري مناسبه ولي براي حالت كنسولي توربوسي 3 را من مي شناسم و 4 و نيم.

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

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

قضيه بعدي راجع به ذخيره بلند مدت است . مثل فايل. كه فكر كنم نيازي نباشه به ذخيره بلند مدت و مسئله اصلي ساختن شي ها باشه.

فعلا همين ها را روشن كنيد تا برسيم به بقيه مسائل.

سلام سالک جان

برنامه باید به زبان c++ .net باشه
در مورد پارک کردن قایق ها و اینکه برای ورود قایق جدید قایقی که جلوی در ورودی پارک کرده باید به جای دیگه منتقل بشه فکر کنو منظور فقط این باشه که کانال باریک هست و هنگام بوکینگ به این نکته توجه داشته باشیم

در مورد ابجکت و متد در صورت مسئله گفته شده که اگر کاربر با قیمت موافق بود و بوکینگ رو انجام داد بوکینگ در یک ابجکت ذخیره بشه که اون آبجکت متدهای لازم درش بکار برده شده باشه.

در ضمن این مسئله برای object-oriented مطرح شده
 

UrUpload

New Member
من اومدم کدهاییی رو که دادی در visual studio 2005 اجرا کنم ولی اولین اخطاری که بهم داد این بود:
fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory

من .h رو برداشتم و اخطار دیگه ای که داد :
error C3861: 'clrscr': identifier not found
error C2065: 'cout' : undeclared identifier
error C2065: 'endl' : undeclared identifier
error C2065: 'cin' : undeclared identifier
این بود

من اومدم قبل از void main این رو قرار دادم
using std::cout;
using std::cin;
using std::ios;
using std::endl;

اخطاری که الان میده اینه:
error C3861: 'clrscr': identifier not found
 

saalek110

Well-Known Member
راجع به باز كردن جلوي كانال خودتان يك فرضي بگيريد و همان طوري حل كنيد.
اما راجع به ابجكت سازي:
من همين الان داشتم به اين فكر مي كردم كه اين آبجكت سازي به چه صورت بايد باشه.

ولي راجع به طول 150 متري لنگرگاه من پيشنهادم اينه كه براي سادگي يك آرايه 150 خانه اي اينتيجر بگيريد و اگر داخل اين خانه ها صفر بود يعني جاي خالي پارك و اگر شماره سريال هر قايق در چند خانه مجاور هم بود يعني كه قايقي آنجا پارك شده. و دفرگ كردن فضاهاي خالي هم به نظرم بايد اعمال بشه ، يعني قبل هر booking بايد دفرگ بشه فضاهاي خالي تا بتوانيم نظر بدهيم كه جاي خالي براي قايق جديد داريم يا نه.
البته طرح اصلي را شما مي نويسيد و سليقه اي است همه اينها .
 
آخرین ویرایش:

saalek110

Well-Known Member
اين اخطارها طبيعي است.
چون اصلا كار در دات نت فرق داره.
من سعي مي كنم مشابه دات نت اين دستورات را پيدا كنم.
 
آخرین ویرایش:

UrUpload

New Member
error C3861: 'clrscr': identifier not found
It would appear not, it would appear that function is specific to Borland compilers ( at least that's what google told me ). Certainly, the Microsoft site does not mention that function, which is obviously non-standard.
 

saalek110

Well-Known Member
اگه مشكل با اين تابع است فقط حذفش كنيد.
چون فقط كارش پاك كردن صفحه است.
حتما دستور استانداردي در محيط برنامه شما دارد كه بعدا معلوم ميشه.
 

saalek110

Well-Known Member
کلا کار در محیط کنسولی زیاد فرقی نداره با کدنویسی برای توربوسی .فقط باید یک پروژه کنسولی اولش بسازیم.
در دو سایت زیر این کار آموزش داده شده. یکی از این سایتها مصور است.هر دو برای دات نت 2003 است. من خودم الان با تصویر در دات نت 2005 طرز ساختن یک پروژه کنسولی را می گویم.

http://web.sau.edu/LillisKevinM/C++Tutorial/dotNet/

http://www.faqts.com/knowledge_base/view.phtml/aid/28044

اول باید از منوی فایل گزینه new را بزنیم. بعد project را بزنیم.


48z7x20.gif


همان طور که از شکل بالا معلومه اول win32 را می زنیم بعد نوع کنسولی را و اسم هم به برنامه می دهیم.
بعد که این کار ها انجام شد پنجره دیگری می آید که با زدن application setting به حالت عکس زیر در می آید. که تیک پروژه خالی را می زنیم و قبلا هم که کنسولی انتخاب شده. دکمه finish را می زنیم.




2gtw77t.gif


طبق عکس زیر می بینیم که پروژه خالی است.



48x4v9d.gif


پس باید یک فایل که حاوی کدهای سی پلاس بعدا میشه را بهش اضافه کنیم.
برای این کار از منوی project گزینه add new aitem را بزنید. بعد طبق شکل زیر code را انتخاب و سی پلاس را انتخاب کنید. و نامی هم به این فایل بدهید.


2wf1ldi.gif


در شکل زیر می بینید که فایل اضافه شده و من آن را open می کنم.



4chn67s.gif


برای ادامه کد خود را می نویسید و با f5 اجرا می کنید. کدنویسی را در پست های بعد بحث می کنیم. بعد زدن f5 کادر زیر می آید.که بله را می زنیم. بعدش هم چون پروژه خالی است خطا می گیرد و می گوید از بیلد قبلی اجرا کنم که من نه جواب می دهم.


2ynqfrn.gif

 
آخرین ویرایش:

saalek110

Well-Known Member
http://www.flazx.com/ebook4296.php

کتابی در این سایت هست به نام:
Ivor Horton's Beginning Visual C++ 2005
به حجم 8 مگا . خیلی مناسبه برای آموزش از ابتدا
مفاهیم را خوب گفته و کدها را خوب شرح داده.
می خواهم کدهایی از این کتاب را استفاده کنم. کتاب هورتون .
 

saalek110

Well-Known Member
به نام خدا.
از کتاب بالا فصل دوم شروع به تمرین کد نویسی می کنیم.
من کدها را در حالت کنسولی در ویژوال سی 2005 چک می کنم . و بعد چک کردن و رفع خطا برنامه ها در تاپیک قرار می دهم.

= = = = ==
قبلا طرز ساخت یک پروژه کنسولی خالی را با تصویر شرح دادم .و یک فایل کد از نوع سی پلاس هم به پروژه اضافه کردیم. حالا می خواهیم در فایل سی پلاس که به پروژه اضافه کردیم کد اضافه کنیم.

کد:
// Ex2_01.cpp
// A Simple Example of a Program
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int apples, oranges; // Declare two integer variables
int fruit; // ...then another one
apples = 5; oranges = 6; // Set initial values
fruit = apples + oranges; // Get the total fruit
cout << endl; // Start output on a new line
cout << “Oranges are not the only fruit... “ << endl
<< “- and we have “ << fruit << “ fruits in all.”;
cout << endl; // Output a new line character
return 0; // Exit the program
}

کد بالا نقل قول اولین مثال فصل دوم کتاب هورتون است. و من می خواهم آن را اجرا کنم.
برنامه بالا را با کد زیر توانستم اجرا کنم:

کد:
// Ex2_01.cpp
// A Simple Example of a Program
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int apples, oranges; // Declare two integer variables
int fruit; // ...then another one
apples = 5; oranges = 6; // Set initial values
fruit = apples + oranges; // Get the total fruit
cout << endl; // Start output on a new line
cout << "Oranges are not the only fruit... " << endl
<< "- and we have " << fruit << " fruits in all.";
cout << endl; // Output a new line character
return 0; // Exit the program
}
تنها تغییری که دادم این بود که دابل کوتیشن ها یعنی (“ ) را که به شکل مایل بود را درست کردم. یعنی باید عمودی باشه. ولی برنامه یک اشکال دارد و آن اینه که صبر نمی کند تا نتیجه را ببینیم. من یک getch به آخر برنامه اضافه کردم و هدر لازم یعنی conio.h را هم بالای برنامه اینکلود کردم.کل کد به این شکل درآمد:

کد:
// Ex2_01.cpp
// A Simple Example of a Program
#include <iostream>
#include <conio.h>
using std::cout;
using std::endl;
int main()
{
int apples, oranges; // Declare two integer variables
int fruit; // ...then another one
apples = 5; oranges = 6; // Set initial values
fruit = apples + oranges; // Get the total fruit
cout << endl; // Start output on a new line
cout << "Oranges are not the only fruit... " << endl
<< "- and we have " << fruit << " fruits in all.";
cout << endl; // Output a new line character
getch();
return 0; // Exit the program
}

یک نکته این که من به مکان نصب ویژوال استودیو رفتم و وارد پوشه وی سی و بعد وارد پوشه اینکلودها شدم . در آنجا دیدم که بعضی فایلها پسوند h دارند و بعضی ندارند. پس پسوند باید رعایت شود.
نتیجه اجرای برنامه چاپ دو خط:
Oranges are not the only fruit...
- and we have 11 fruits in all.

است.
شرح برنامه:
اولا با // کامنت نویسی می کنیم. یعنی توضیحاتی که نوشته می شود ولی اجرا نمی شود.
دوما با include می گوییم که از چه فایلهایی می خواهیم از توابعش استفاده کنیم.
در قسمت:
using std::cout;
using std::endl;
لازمه باشه تا از cout و endl بتوانیم استفاده کنیم.
بعد با main برنامه اصلی شروع می شود که برنامه اصلی بین دو کروشه کلش قرار می گیرد. قبل گروشه انتهایی return 0 را داریم که خروجی main را اعلام کرده.
اول برنامه یعنی بعد کروشه باز سه متغیر ایجاد کرده ایم. یعنی سیب و پرتقال و میوه.
بعد مقدار سیب و پرتقال را 5 و 6 گرفته ایم و جمع زده ایم و در میوه ریخته ایم.
و در آخر هم نتیجه را چاپ کرده ایم.

نکته: خوبه همین جا از منوی view گزینه view class را بزنید. به این علت در اینجا این را گفتم تا با این پنجره آشنا بشید. چون برنامه بالا خیلی ساده بود و بعدا که برنامه کمی پیچیده شد میشه مقایسه کرد.
تعریف : توابع و متغیرهای گلوبال به آنهایی می گویند که در تمام برنامه قابل دسترس باشند.
globals are functions and/or variables accessible from anywhere in the program.
 
آخرین ویرایش:

saalek110

Well-Known Member
این هم مثال دوم فصل دوم:
کد:
// Ex2_02.cpp
// Exercising output
#include <iostream>
#include <conio.h>
using std::cout;
using std::endl;
int main()
{
int num1 = 1234, num2 = 5678;
cout << endl; // Start on a new line
cout << num1 << num2; // Output two values
cout << endl; // End on a new line
getch();
return 0; // Exit program
}

در آن آمده دو متغیر را پشت سر هم چاپ کرده.
نتیجه اجرا:
12345678

= = = == = = = = = = ==
مثال سوم فصل دوم:

کد:
// Ex2_03.cpp
// Exercising output
#include <iostream>
#include <iomanip>
#include <conio.h>
using std::cout;
using std::endl;
using std::setw;
int main()
{
int num1 = 1234, num2 = 5678;
cout << endl; // Start on a new line
cout << setw(6) << num1 << setw(6) << num2; // Output two values
cout << endl; // Start on a new line
getch();
return 0; // Exit program
}

آمده از تابعی به نام setw استفاده کرده تا جای چاپ را تعیین کنید. عدد داخل پرانتزش را تغییر دهید تا بفهمید چطوری کار می کند. برای استفاده از این تابع باید فایل iomanip اینکلود بشه که در بالای برنامه این کار انجام شده.
نتیجه اجرای برنامه چاپ 1234 و 5678 جدا از هم و با فاصله است.

== = = = = == = = =
مثال چهارم فصل دوم کتاب:

کد:
// Ex2_04.cpp
// Using escape sequences
#include <iostream>
#include <iomanip>
#include <conio.h>
using std::cout;
int main()
{
char newline = '\n'; // Newline escape sequence
cout << newline; // Start on a new line
cout << "\"We\'ll make our escapes in sequence\", he said.";
cout << "\n\tThe program\'s over, it\'s time take make a beep beep.\a\a";
cout << newline; // Start on a new line
getch();
return 0; // Exit program
}

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


40dxx6f.gif




4icv91w.gif

 

saalek110

Well-Known Member
مثال پنجم این فصل در باب انواع متغیر و ورودی گرفتن از کاربر است:

کد:
// Ex2_05.cpp
// Calculating how many rolls of wallpaper are required for a room
#include <iostream>
#include <conio.h>
using std::cout;
using std::cin;
using std::endl;
int main()
{
double height = 0.0, width = 0.0, length = 0.0; // Room dimensions
double perimeter = 0.0; // Room perimeter
const double rollwidth = 21.0; // Standard roll width
const double rolllength = 12.0*33.0; // Standard roll length(33ft.)
int strips_per_roll = 0; // Number of strips in a roll
int strips_reqd = 0; // Number of strips needed
int nrolls = 0; // Total number of rolls
cout << endl // Start a new line
<< "Enter the height of the room in inches: ";
cin >> height;
cout << endl // Start a new line
<< "Now enter the length and width in inches: ";
cin >> length >> width;
strips_per_roll = rolllength / height; // Get number of strips per roll
perimeter = 2.0*(length + width); // Calculate room perimeter
strips_reqd = perimeter / rollwidth; // Get total strips required
nrolls = strips_reqd / strips_per_roll; // Calculate number of rolls
cout << endl
<< "For your room you need " << nrolls << " rolls of wallpaper."
<< endl;
getch();
return 0;
}

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

== == == = = = =
مثال ششم:

کد:
// Ex2_06.cpp
// Exercising the comma operator
#include <iostream>
#include <conio.h>
using std::cout;
using std::endl;
int main()
{
long num1 = 0, num2 = 0, num3 = 0, num4 = 0;
num4 = (num1 = 10, num2 = 20, num3 = 30);
cout << endl
<< "The value of a series of expressions "
<< "is the value of the rightmost: "
<< num4;
cout << endl;
getch();
return 0;
}

مثال بالا سریها را نشان می دهد و از نتیجه اجرا که 30 است معلوم میشه چه دستوری بکار برده شده.

== = = = = = = = =
مثال هفتم:

کد:
// Ex2_07.cpp
// Demonstrating variable scope
#include <iostream>
#include <conio.h>
using std::cout;
using std::endl;
int main()
{ // Function scope starts here
int count1 = 10;
int count3 = 50;
cout << endl
<< "Value of outer count1 = " << count1
<< endl;
{ // New scope starts here...
int count1 = 20; // This hides the outer count1
int count2 = 30;
cout << "Value of inner count1 = " << count1
<< endl;
count1 += 3; // This affects the inner count1
count3 += count2;
} // ...and ends here
cout << "Value of outer count1 = " << count1
<< endl
<< "Value of outer count3 = " << count3
<< endl;
// cout << count2 << endl; // uncomment to get an error
getch();
return 0;
}

در برنامه بالا بحث دامنه متغیرها را داریم و تغییرات روی متغیرها.کروشه ها می توانند قلمرو ایجاد کنند. نتیجه اجرای برنمه بالا اعداد 10 و 20 و 10 و 80 است. با نگاه به محل تعریف متغیرها و محل چاپ آن باید فهمید که قضیه از چه قرار است.
مثال هشتم هم در ادامه آورده می شود:

کد:
// Ex2_08.cpp
// Demonstrating variable scope
#include <iostream>
#include <conio.h>
using std::cout;
using std::endl;
int count1 = 100; // Global version of count1
int main()
{ // Function scope starts here
int count1 = 10;
int count3 = 50;
cout << endl
<< "Value of outer count1 = " << count1
<< endl;
cout << "Value of global count1 = " << ::count1 // From outer block
<< endl;
{ // New scope starts here...
int count1 = 20; //This hides the outer count1
int count2 = 30;
cout << "Value of inner count1 = " << count1
<< endl;
cout << "Value of global count1 = " << ::count1 // From inner block
<< endl;
count1 += 3; // This affects the inner count1
count3 += count2;
} // ...and ends here.
cout << "Value of outer count1 = " << count1
<< endl
<< "Value of outer count3 = " << count3
<< endl;
//cout << count2 << endl; // uncomment to get an error
getch();
return 0;
}

در اینجا متغیری در بیرون main تعریف شده و گلوبال محسوب می شود. نتیجه اجرا اعداد 10 و 100 و 20 و 100 و 10 و 80 است.
در اینجا اگر class view را از منوی view بزنید می بینیم که متغیر count1 از نوع گلوبال است.
 

saalek110

Well-Known Member
فصل سوم این کتاب شرط و حلقه است
و فصل چهارم آرایه و استرینگ و پوینتر.
من این مباحث را دیگه نقل نمی کنم. چون این تاپیک آموزشی نیست و در تاپیک آموزش سی این تالار این مباحث موجود است.


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

saalek110

Well-Known Member
برنامه زیر از 3 فایل تشکیل شده.
یکی حاوی main
دیگری یک cpp حاوی متدهای کلاس.
سومی یک هدر کلاس که نامش را the_class.h باید بگذارید.

این برنامه در ویژوال سی 2005 چک شد.

اول 3 فایل را به همان ترتیبی که در بالا ذکر شد به ترتیب می گذارم و بعد بحث می کنم.

کد:
#include "the_class.h"

#include "iostream"
  using std::cin;
  using std::cout;
  using std::endl;
 
int enterChoice();
enum Choices { booking = 1, the_delete, show, the_exit };

int main()
{
	the_class one_object;
   int choice;

   // enable user to specify action
   while ( ( choice = enterChoice() ) != the_exit ) 
   {
      switch ( choice )
	  {
         // create text file from record file
         case booking:
		    int vorodi1;
			cout<<"\n give your boat lenght \n ?";
			cin>>vorodi1;
			one_object.my_booking(vorodi1);
	        break;

         case the_delete:
		    int vorodi2;
			cout<<"\n give your boat lenght \n ?";
			cin>>vorodi2;
			one_object.my_delete(vorodi2);	 
            break;
         case show:
		    one_object.my_show();
			break;

         case the_exit:
			 one_object.~the_class();
		    break;

         default:
			 std::cout << "\n Incorrect choice \n please select 1 t0 4" << std::endl;
            break;

      } // end switch
   } // end while
	return 0;
}
// --------------------------------------------
int enterChoice()
{
   // display available options
   std::cout << "\nPlese choose from the following options" << std::endl
        << "1 - bookinge ghayeg" << std::endl
        << "2 - delete (khoroje yek ghayegh)" << std::endl
        << "3 - show all data to me " << std::endl
        << "4 - Exit the program\n? ";

   int menuChoice;
   std::cin >> menuChoice; // receive choice from user

   return menuChoice;

} // end function enterChoice
//---------------------------------------------

کد:
#include "the_class.h"
#include "iostream"
#include <fstream>
#include <conio.h>
using namespace std;
the_class::the_class(void)
{
	toole_langargaah=150;
	std::cout<<"welcome, shoma yek langar gaah be toole 150 metr darid. \n";
	fstream file_connection;
 file_connection.open( "my_record.txt" );
 if ( !file_connection ) 
    {
	   std::cerr << "File could not be opened." << std::endl;
	   getch();
      exit ( 1 );
    }
 
  file_connection >>free_space;  
  std::cout<<free_space<<" metr khaali ast \n";

  file_connection.close();
    
   // exit program if fstream cannot open file

}

the_class::~the_class(void)
{
	fstream file_connection2;
 file_connection2.open( "my_record.txt" );
 if ( !file_connection2 ) 
    {
	   std::cerr << "File could not be opened." << std::endl;
	   getch();
      exit ( 1 );
    }
  file_connection2<<"        " ;  
  file_connection2<<free_space ;  
    
   // exit program if fstream cannot open file

  file_connection2.close();
}


void the_class::my_show(void)
{
	std::cout<<"toole_langargaah="<<toole_langargaah<<"\n";
	std::cout<<"free space in langargaah="<<free_space<<"\n \n";
	
}
void the_class::my_booking(int a)
{
	free_space=free_space-a;
}
void the_class::my_delete(int a)
{
	free_space=free_space+a;
}

کد:
#pragma once

class the_class
{
public:
	the_class(void);
 
	void my_show(void );
	void my_booking(int);
	void my_delete(int);

public:
	~the_class(void);


private:
	int toole_langargaah;
    int free_space;
};

برنامه از کابر سئوال می کند و اعداد 1 تا 4 را از او میگیرد.
این کار در یک تابع بیرون main انجام می شود که قبل main وجود این تابع اعلام شده و بعد main تعریف شده.
بعد با دستور سوئیچ در هر یک از انتخابها یکی از متدهای کلاس فراخوانده می شود.
با ساخت انوم اعداد 1 تا 4 به کلماتی مثل بوکینگ و شو و غیره تبدیل شده.

کلاس در سازنده خود فایل تکستی را می خواند و در متغیری از کلاس لود می کند. پس شاید لازم باشد در کنار فایل خواننده فایل این فایل تکست را دستی بسازید. اگر خطای باز کردن فایل داد حتما این فایل را بسازید.
در مخرب کلاس هم این متغیر به فایل دوباره نوشته می شود.
با انتخابهای 1 و 2 کاربر می تواند این نتغیر را کم و زیاد کند و با انتخاب 3 می تواند این عدد را مشاهده کند. در انتخاب 4 خود باعث فراخوانی متد مخرب و به دنبال آن ریختن این متغیر در فایل می شود. وقتی که کاربر 4 را می زند متغیر choice برابر the_exit می شود و حلقه while که مدام منو را نشان می داد متوقف می شود.

یادآوری می شود که کلاس در فایل سومی از کدهای بالا تعریف شده و متدهایش در یک فایل cpp تعریف شده که در کنار cpp اصلی که حاوی main است قرار می گیرد.

هر دو فایل cpp بایستی فایل کلاس را اینکلود کنند ولی نیاز به اینکلود هم ندارند.
جزئیات برنامه مثل نوشتن در فایل شاید خوب کار نشده ولی منظور از این برنامه اسکلت کار بود که در برنامه هایی شاید مفید باشد.
این اسکلت عبارت از دادن انتخاب به کاربر تا متدهای کلاسی را با زدن اعداد صدا کند. و همچنین در این برنامه به نوعی کلاس ما متغیرهای خود را در شروع ایجاد شی در خط:
the_class one_object;
از فایل گرفته و
در متد مخرب خود در فایل ذخیره می کند.
شاید بهتر بود من در انتخاب 4 کاربر بجای اجرای متد مخرب از دستور دیلت شی را تخریب می کردم که با این کار خود به خود مخرب احضار میشد ولی چون سینتکسش دم دستم نبود و خطا داد این کار را کردم. نمی دونم هم که آیا با صدا زدن مخرب آیا شی تخریب میشه یا نه.

== = = = = = = = =
اما دولوپ برنامه:
بایستی برنامه اطلاعات بیشتری از کاربر بگیرد و آرایه هایی در خزانه کلاس باشد تا این اطلاعات را نگه دارد و در موقع زدن 3 هم اطلاعات بیشتری نمایش داده شود نه فقط یک عدد ثابت 150 و یک متغیر دیگر.
پس نیاز است به متغیرهای کلاس افزوده شود و با اطلاعات داده شده توسط کاربر پر شود. مثل نام قایق – مدت پارک و غیره.
 

جدیدترین ارسال ها

بالا