برگزیده های پرشین تولز

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

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 امتحان کردم اما جواب نگرفتم.
 

m3hrz4d

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

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

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

Creative1

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

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) هستش و نه محیط داس
 

Creative1

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

Creative1

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

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 در برنامه چی یه؟
وقتی حذفش هم می کنم تغییری در نتیجه بوجود نمیاد.
تشکر.
 

ICE_M

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

#include <iostream.h>
#include <conio.h>
int main()
{
float i;
clrscr();
for(i=0.5; i<=3.5; i+=0.5);
cout<< i<<" ";
getch();
return 0;
}
نتیجه اش اینه:

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

Arash_j13

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

ICE_M

کاربر تازه وارد
تاریخ عضویت
21 مارس 2007
نوشته‌ها
18
لایک‌ها
0
تو برنامه ی اول برای این const گذاشتن که مقدار x تغییر نکنه ولی اگه نزارید هم خروجی برنامه تفاوتی نداره
تو برنامه دوم هم اون سیمیکالن رو از جلوی for بردارید درست می شه

:blush:e:blink:..........Mer30:p
 

ICE_M

کاربر تازه وارد
تاریخ عضویت
21 مارس 2007
نوشته‌ها
18
لایک‌ها
0
برنامه ای که با خواندن یک جمله از ورودی، تعداد کاراکترها وکلمات موجود در جمله را شمارش می کند.
#include<iostream.h>
#include<conio.h>
int main()
{
int charcount =0,wordcount=0;
char ch;
clrscr();
cout<<"\nEnter a statement(anf press ENTER):";
while((ch=getch())!='\r'){
charcount++;
if(ch==' ')
wordcount++;
}
cout<<"\nChar count="<<charcount<<"Wordcount="<<wordcount+1;
getch();
return 0;
}

موقع وارد کردن جمله چیزی در صفحه نمایش چاپ نمی کند ولی تعدلد را درست می گه
سوال:
باید از دستور cin ستفاده کنم؟
کجا باید بکار ببرم؟
داخل حلقه یا بیرون؟
(وقتی قبل از حلقه بکار می برم تعداد لغات را 1 می نویسه....همیشه:().....آخه چرا؟؟؟
مرسی.
 

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 استفاده میکنم فکر کنم بهتر باشه.
 

ICE_M

کاربر تازه وارد
تاریخ عضویت
21 مارس 2007
نوشته‌ها
18
لایک‌ها
0
یک سوال:
در برنامه(بزنامه ای که با بازخوانی خودش فاکتوریل num را حساب می کند.)
#include<iostream.h>
#include<conio.h>
unsigned long f1(int);
int main()
{
int num;
clrscr();
cout<<"\n Enter a number:";
cin>>num;
cout<<"\n Number="<<num<<",Fact="<<f1(num);
getch();
return 0;
}
//*******************************
unsigned long f1(int num)
{
if(num!=0)
return(num*f1(num-1));
return 1;
}
چرا در قسمت ubsigned long
بعد از if
نیازی به آوردن else نیست؟(بزنامه بدون else هم جواب می دهد.)
تشکر.
 

sha19425

Registered User
تاریخ عضویت
10 ژانویه 2006
نوشته‌ها
281
لایک‌ها
21
خب بخاطر اینکه تابع بازگشتی است ، اگه if اجرا بشه دیگه بقیه دستورات رو چک نمیکنه , دوباره به ابتدای تابع میاد!
 

ICE_M

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

sha19425

Registered User
تاریخ عضویت
10 ژانویه 2006
نوشته‌ها
281
لایک‌ها
21
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 بذاری یا نه فرقی نداره چون اصلآ چک نمیکنه
 

m3hrz4d

Registered User
تاریخ عضویت
21 سپتامبر 2005
نوشته‌ها
620
لایک‌ها
1
محل سکونت
اصفهان
خب وقتی شرط به
(0=! if(0
میرسه ......if ........نقض میشه!!!!!!
و تابع مقدار 1 را به تابع اصلی بر می گردونه.
ولی باز هم نیازی به else نداره.
سوال
در کل از کجا بفهمم else لازم هست یا نه؟

وقتی شما توی یک تابع , یک شرطی رو چک میکنی و در صورت درست بودن اون شرط , عمل return انجام میدین , اگه بخواهین در صورت درست نبودن شرط هم کدی رو اجرا کنین, دیگه بعد از if , نیاز نیست از else استفاده کنین چون در صورت اجرا شدن کد داخل if و return شدن و خروج از تابع, دیگه کد ِ بعد از if اجرا نمیشه مثلا :

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

ICE_M

کاربر تازه وارد
تاریخ عضویت
21 مارس 2007
نوشته‌ها
18
لایک‌ها
0
وقتی شما توی یک تابع , یک شرطی رو چک میکنی و در صورت درست بودن اون شرط , عمل return انجام میدین , اگه بخواهین در صورت درست نبودن شرط هم کدی رو اجرا کنین, دیگه بعد از if , نیاز نیست از else استفاده کنین چون در صورت اجرا شدن کد داخل if و return شدن و خروج از تابع, دیگه کد ِ بعد از if اجرا نمیشه مثلا :

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

مرسی...مرسی...مرسی.....:)::)rolleyes::D:):happy::cool::p
 

Arash_j13

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