آژانس هواپیمایی
pop up

چند تا سوال در مورد C++

شروع موضوع توسط Creative1 ‏20 آگوست 2007 در انجمن خانواده C++ , C

  1. Creative1

    Creative1 Registered User

    تاریخ عضویت:
    ‏28 فوریه 2007
    نوشته ها:
    42
    تشکر شده:
    0
    سلام.
    من سه تا سوال در مورد سی پلاس پلاس دارم:
    1- من عمل زیر را انجام میدم اما جواب 0 میده چرا؟ (همه متغیر ها از نوع float هستند)

    v=(1/3)*3.14*r*r*h

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


    3- چه جوری می تونم یه کاری کنم که برنامه با سرعت کمتری اجرا بشه. میشه از delay استفاده کرد؟ اگه میشه چه طوری؟ من چند بار delay رو با dos.h و time.h امتحان کردم اما جواب نگرفتم.
     
  2. m3hrz4d

    m3hrz4d Registered User

    تاریخ عضویت:
    ‏21 سپتامبر 2005
    نوشته ها:
    620
    تشکر شده:
    1
    محل سکونت:
    اصفهان
    سلام. در مورد سوال اول ، چون ۱ و ۳ هر دو از نوع صحیح هستن ، تقسیم به صورت صحیح انجام میشه و حاصل تقسیمشون یعنی مقدار توی پرانتز صفر میشه و کل عبارت هم صفر. میتونین به جای ۱ صحیح از 1.0 یا 1.0f استفاده کنین و یا همین کار رو برای ۳ بکنین تا تقسیم به صورت اعشاری انجام بشه.

    در مورد سوال دوم، احتمالا منظورتون خروج از تابع هست که میتونین با کلمه ی کلیدی return از هر جای تابع بیایین بیرون که برنامه به تابعی که این تابع رو فراخوانی کرده برمیگرده(مثلا Main) که البته در صورتی که تابع شما از نوع void نیست و مقدار برمیگردونه باید مقدار برگشتی هم بعد از return قرار بگیره مثلا ;return 0 برای یک تابعی که خروجی از نوع int داره مثل خود تابع main.

    در مورد سوال سوم هم نمیدونم خود سی++ استاندارد تابعی واسه ایجاد مکس داره یا نه ، ولی شما اگه میخواهین برای ویندوز برنامه بنویسین میتونین از تابع ای پی ‌آی Sleep استفاده کنین.احتمالا داس هم تابعی واسه این کار داره.
    ضمن اینکه این تابع توی windows.h هستش.
     
  3. Creative1

    Creative1 Registered User

    تاریخ عضویت:
    ‏28 فوریه 2007
    نوشته ها:
    42
    تشکر شده:
    0
    با تشکر فراوان.
    مورد اول به درستی حل شد.
    اما درباره مورد دو نمی دونم باید چی رو return کنم.
    درباره مورد سوم هم یه توضیح بیشتری در مورد این sleep و طرز نوشتنش بدین ممنون میشم.
     
  4. m3hrz4d

    m3hrz4d Registered User

    تاریخ عضویت:
    ‏21 سپتامبر 2005
    نوشته ها:
    620
    تشکر شده:
    1
    محل سکونت:
    اصفهان
    اصولا هر تابعی واسه به عهده گرفتن قسمتی از برنامه اصلی نوشته میشه. حالا اگه این تابع شما نیازی به برگشت مقداری نداره اون رو void تعریف کنین و مقداری هم بر نگردونین. این قضیه رو بهتره از توی یک کتاب ++C بخونین تا اینکه من توضیح بدم.
    در مورد تابع Sleep هم ، این تابع کارش ایجاد مکث توی برنامه هستش. یعنی شما مقدار مکث رو به میلی ثانیه بهش میدین و وقتی اجرای برنامه به این تابع میرسه و تابع فراخوانی میشه‌،تا اجرا شدن خط بعدی به اندازه ی اون زمانی که بهش دادین کاری انجام نمیده(Thread در حالت Sleep قرار میگیره)

    کد:
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    int main()
    {
    cout << "Hello! ";
    Sleep(1000);
    cout << "World";
    return 0;
    }
    
    البته بازم میگم این تابع برای برنامه نویسی توی محیط ویندوز(چه Visual و چه Console) هستش و نه محیط داس
     
  5. Creative1

    Creative1 Registered User

    تاریخ عضویت:
    ‏28 فوریه 2007
    نوشته ها:
    42
    تشکر شده:
    0
    من هم تو محیط ویندوز کار می کنم.
    این برنامه رو من با Turbo c++ 4.5 ران کردم.
    اما 4 تا ارور داد.
    یکی از iostream ارور گرفت چون اچ نداره که اونو درست کردم.
    بعد اروراش شد 2 تا.
    اولی از namespace ارور گرفت.
    دومی از sleep.
    این ارور ها رو چه جوری رفع کنم؟
     
  6. Arash_j13

    Arash_j13 Registered User

    تاریخ عضویت:
    ‏18 فوریه 2005
    نوشته ها:
    778
    تشکر شده:
    2
    محل سکونت:
    مشهد
    راه حل ساده اش اینکه که کامپایلرتون رو عوض کنید برای استفاده از تابع sleep به یه کامپایلر 32 بیتی تحت ویندوز احتیاج دارید
     
  7. boxilink
  8. Creative1

    Creative1 Registered User

    تاریخ عضویت:
    ‏28 فوریه 2007
    نوشته ها:
    42
    تشکر شده:
    0
    با تشکر فراوان از همه شما که کمک کردید.
    من با Turbo c++ 5.02 امتحان کردم و namespace هم حذف کردم و به درستی عمل کرد.
     
  9. ICE_M

    ICE_M کاربر تازه وارد

    تاریخ عضویت:
    ‏21 مارس 2007
    نوشته ها:
    18
    تشکر شده:
    0
    سوال در باره برنامه​


    کد:
    #include <iostream.h>
    #include <conio.h>
    int main()
    {
     int i,sum=0,n;
      float ave;
    [COLOR="Red"] const[/COLOR] int x=5;
     clrscr();
     for (i=0;i<x;i++)
     {
     cout<<"enter n"<<i+1<<":";
     cin>>n;
     sum+=n;
     }//end for
     ave=(float)sum/x;
     cout<<"ave is"<<ave;
      getch();
     return 0;
    }
    
    می بخشید نقش const در برنامه چی یه؟
    وقتی حذفش هم می کنم تغییری در نتیجه بوجود نمیاد.
    تشکر.
     
  10. ICE_M

    ICE_M کاربر تازه وارد

    تاریخ عضویت:
    ‏21 مارس 2007
    نوشته ها:
    18
    تشکر شده:
    0
    کسی می دونه اشکال این برنامه چی یه؟
    برنامه ای که اعداد 0.5 تا 3.5 را با فاصله 0.5 در خروجی چلپ می کند.

    نتیجه اش اینه:

    -----------------------------------------
    ولی باید این باشه:

     
  11. Arash_j13

    Arash_j13 Registered User

    تاریخ عضویت:
    ‏18 فوریه 2005
    نوشته ها:
    778
    تشکر شده:
    2
    محل سکونت:
    مشهد
    تو برنامه ی اول برای این const گذاشتن که مقدار x تغییر نکنه ولی اگه نزارید هم خروجی برنامه تفاوتی نداره
    تو برنامه دوم هم اون سیمیکالن رو از جلوی for بردارید درست می شه
     
  12. ICE_M

    ICE_M کاربر تازه وارد

    تاریخ عضویت:
    ‏21 مارس 2007
    نوشته ها:
    18
    تشکر شده:
    0
    :blush:e:blink:..........Mer30:p
     
  13. ICE_M

    ICE_M کاربر تازه وارد

    تاریخ عضویت:
    ‏21 مارس 2007
    نوشته ها:
    18
    تشکر شده:
    0
    برنامه ای که با خواندن یک جمله از ورودی، تعداد کاراکترها وکلمات موجود در جمله را شمارش می کند.
    موقع وارد کردن جمله چیزی در صفحه نمایش چاپ نمی کند ولی تعدلد را درست می گه
    سوال:
    باید از دستور cin ستفاده کنم؟
    کجا باید بکار ببرم؟
    داخل حلقه یا بیرون؟
    (وقتی قبل از حلقه بکار می برم تعداد لغات را 1 می نویسه....همیشه:().....آخه چرا؟؟؟
    مرسی.
     
  14. avajang.com .leftavajang.com.right
  15. m3hrz4d

    m3hrz4d Registered User

    تاریخ عضویت:
    ‏21 سپتامبر 2005
    نوشته ها:
    620
    تشکر شده:
    1
    محل سکونت:
    اصفهان
    سلام.واسه نمایش همزمان کاراکتر میتونین از getchar بجای getch استفاده کنین که توی stdio.h تعریف شده.البته از cin هم میشه استفاده کرد که در اون صورت باید یکبار بیرون حلقه (واسه اولین کاراکتر) و بعد هم داخل حلقه استفاده کنین.اینو من با getchar اینطوری نوشتم :
    کد:
    #include <iostream>
    #include <conio.h>
    #include <stdio.h>
    
    using namespace std;
    
    int main()
    {
    
    	int charcount =0, wordcount=0;
    	char ch;
    	
    	//clrscr();	
    	cout << "Enter a statement(and press ENTER):" ;
    	
    	while((ch=getchar()) != '\n')
    	{
    		charcount++;
    		if(ch == ' ')
    			wordcount++;		
    	}
    	cout << "Char count = " << charcount
    		 << " and word count = "  << wordcount+1 << endl;
    	getch();
    	return 0;
    } 
    
    البته من معمولا وقتی از توابع stdio مثل همین getchar استفاده میکنم به جای cout هم از printf استفاده میکنم فکر کنم بهتر باشه.
     
  16. ICE_M

    ICE_M کاربر تازه وارد

    تاریخ عضویت:
    ‏21 مارس 2007
    نوشته ها:
    18
    تشکر شده:
    0
    یک سوال:
    در برنامه(بزنامه ای که با بازخوانی خودش فاکتوریل num را حساب می کند.)
    چرا در قسمت ubsigned long
    بعد از if
    نیازی به آوردن else نیست؟(بزنامه بدون else هم جواب می دهد.)
    تشکر.
     
  17. sha19425

    sha19425 Registered User

    تاریخ عضویت:
    ‏10 ژانویه 2006
    نوشته ها:
    266
    تشکر شده:
    12
    خب بخاطر اینکه تابع بازگشتی است ، اگه if اجرا بشه دیگه بقیه دستورات رو چک نمیکنه , دوباره به ابتدای تابع میاد!
     
  18. ICE_M

    ICE_M کاربر تازه وارد

    تاریخ عضویت:
    ‏21 مارس 2007
    نوشته ها:
    18
    تشکر شده:
    0
    خب وقتی شرط به
    (0=! if(0
    میرسه ......if ........نقض میشه!!!!!!
    و تابع مقدار 1 را به تابع اصلی بر می گردونه.
    ولی باز هم نیازی به else نداره.
    سوال
    در کل از کجا بفهمم else لازم هست یا نه؟
     
  19. sha19425

    sha19425 Registered User

    تاریخ عضویت:
    ‏10 ژانویه 2006
    نوشته ها:
    266
    تشکر شده:
    12
    else مال وقتیکه بخوای نقیض شرط رو چک کنی !
    یه مثال :
    کد:
    if( a == b ) printf("Hello");
    else         printf("good bye);
    اگر a=b باشه این مثال فقط hello چاپ میکنه و اگر مخالف باشه good bye

    ولی این :
    کد:
    if( a == b ) printf("Hello");
               printf("good bye);
    در صورن مساوی بودن a ,b هر دو عبارت رو چاپ میکنه !

    اون مثال شما هم else بذاری یا نه فرقی نداره چون اصلآ چک نمیکنه
     
  20. m3hrz4d

    m3hrz4d Registered User

    تاریخ عضویت:
    ‏21 سپتامبر 2005
    نوشته ها:
    620
    تشکر شده:
    1
    محل سکونت:
    اصفهان
    وقتی شما توی یک تابع , یک شرطی رو چک میکنی و در صورت درست بودن اون شرط , عمل return انجام میدین , اگه بخواهین در صورت درست نبودن شرط هم کدی رو اجرا کنین, دیگه بعد از if , نیاز نیست از else استفاده کنین چون در صورت اجرا شدن کد داخل if و return شدن و خروج از تابع, دیگه کد ِ بعد از if اجرا نمیشه مثلا :

    کد:
    int f(bool b)
    {
      if (b)
     {
        doSomthing();
        return 0;
     }
     doSomthingElse();
     reurn 1;
    }
    
    یعنی doSomthingElse فقط وقتی اجرا میشه که b==false باشه یعنی دیگه نیازی به else نیست
     
  21. ICE_M

    ICE_M کاربر تازه وارد

    تاریخ عضویت:
    ‏21 مارس 2007
    نوشته ها:
    18
    تشکر شده:
    0
    مرسی...مرسی...مرسی.....:)::)rolleyes::D:):happy::cool::p
     
  22. Arash_j13

    Arash_j13 Registered User

    تاریخ عضویت:
    ‏18 فوریه 2005
    نوشته ها:
    778
    تشکر شده:
    2
    محل سکونت:
    مشهد
    یه راه بی درد سر هم اینکه هر جا شک کردی باید else باشه یا بزار باشه