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

سئوالات كوچك سي

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
در اين تاپيك سئوالات كوچك از كدنويسي را مطرح خواهيم كرد.

سئوال اول:
فرق اين دو تا چيست؟

کد:
int

کد:
(int)

با تشكر.
.
 

programmer

کاربر تازه وارد
تاریخ عضویت
1 نوامبر 2005
نوشته‌ها
85
لایک‌ها
0
سلام سالک جان

از (int) برای تبدیل نوع استفاده میکنن.

به این کد نگاه کن:

کد:
#include<iostream.h>
#include<conio.h>

int main()
{
 int x=0;
 char c='a';
 x=(int)c;
 clrscr();
 cout<<c<<"=>"<<x<<endl;

 getch();
 return 0;
}

c یک کاراکتر است و x یک عدد صحیح .

همونطور که میدونید هر کاراکتر یک کد اسکی داره.

وقتی (int) رو قبل از c قرار میدیم کامپایلر معادل عددی c را در x قرار میدهد.

حالا این کد رو هم ببین :

کد:
#include<iostream.h>
#include<conio.h>

int main()
{
 int x=65;
 clrscr();
 cout<< (char)x <<endl;

 getch();
 return 0;
}

دستور cout کاراکتری را که کد اسکی آن x است را در خروجی نمایش میدهد.

این یکی هم که واضحه :

کد:
#include<iostream.h>
#include<conio.h>

int main()
{
 float f=3.9999;
 int x;
 clrscr();
 x=(int)f;
 cout<< x <<endl;
 getch();
 return 0;
}
 

mohammad_110

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
22 ژانویه 2006
نوشته‌ها
60
لایک‌ها
0
به نقل از saalek :
در اين تاپيك سئوالات كوچك از كدنويسي را مطرح خواهيم كرد.

سئوال اول:
فرق اين دو تا چيست؟

کد:
int

کد:
(int)

با تشكر.
.

(int) باعث میشه نتیجه به int تبدیل شود.
کد:
float f,ff;
ff=3.454;
f=(int)ff;
مقدار f ، عدد 3 می شود.
این روش یک کاربرد هم در کلاس های مشتق شده داره:
کد:
#include<stdio.h>
#include<conio.h>

class CBase{
 public:
   void print(){printf("\na");}
};

class CSub:public CBase{
 public:
   void print(){printf("\naa");}
};

void main(){
 clrscr();

 CBase bt;
 CSub  st;

 bt.print();
 st.print();

 CBase *pbt;

 pbt=&bt;
 pbt->print();

 pbt=&st;
 [COLOR="Red"]pbt->print();
 ((CSub*)pbt)->print();[/COLOR]
 getch();
}
خروجی این برنامه به این صورت است:
کد:
a
aa
a
[COLOR="Red"]a
aa[/COLOR]
احتمالا برای شما این مثال مبهم هست . سئوال بپرسید راحتتر میشه ابهام رو بر طرف کرد.
ولی اصلش اینه که کد قرمز رنگ دومی باعث میشه اشاره گر کلاس مبنا به اشاره گر زیر کلاس تبدیل بشه بنابراین تابع زیر کلاس به جای تابع کلاس مبنا اجرا میشه.
البته این روش ممکنه کاربرد های دیگه هم داشته باشه.
 

look_e_bad_shan

کاربر تازه وارد
تاریخ عضویت
15 مارس 2006
نوشته‌ها
45
لایک‌ها
0
فرق اين دو در اجراي برنامه چيه؟
PHP:
 exit(0);        exit(1);
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
در مورد فرق int و (int) دوستان توضیح کامل رو دادن فقط اضافه کنم که توی C++ بهتره از این روش استفاده نکنید C++ کلمات کلیدی رو برای اینکار در نظر گرفته دستور معادل اون این هست static_cast<int>
البته بیاد مقداری که قراره تبدیل نوع روش انجام بشه داخل پرانتز باشه

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

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
با سلام.
برنامه اي كه در تاپيك
rotate object
بود. كدش اين طوري بود:

کد:
initgraph(&gd,&gm,"c:\tc\bgi");
ولي بي خطا از حالت اجرا سريع خارج ميشه.. يعني چيزي نمايش داده نميشه.
من به اين شكل كه مي نويسم:
کد:
initgraph(&gd,&gm,"c:\\tc\\bgi");
بي نقص اجرا ميشه.
مي خواهم بدانم يك اشكال توربوسي است يا نكته خاصي هست كه من بي خبرم.
ممنون.
.
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
با اجازه اساتید گرامی
سالک جان اگه یادت باشه برای اینکه رشته ای به انتها برسه از کد \0 استفاده میشه
کارکتر \ جز کارکترهایی مصرفی سی است برای استفاده توی رشته ها از \\ استفاده میکنن که در واقعه معادل \ بصورت عامیانه است

امیدوارم توضیح گویا باشه و کمک کنه
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
با سلام.
من برنامه زير را يكبار با پسوند .c و يكبار با پسوند .cpp اجرا كردم.

کد:
#include <math.h>
#include <iostream.h>
#include <conio.h>
int main(void)
{
  double val = -1.0;
do {
   cout<<"Sine of "<<val<<" is"<< sin(val)<<endl;
    val += 0.1;
  } while(val<=1.0);

  getch();
  return 0;
}

وقتي پسوند .c بود ، خطاي زير را داد:

کد:
fatal .. \tc\include\iostream.h 19: Error directive: Must use C++ for the type

قضيه چيه؟
آيا يعني اينكه iostream.h متعلق به سي++ است؟

= = = = = = =
ولي وقتي برنامه زير را با پسوند .cpp اجرا كردم خطايي رخ نداد.

کد:
#include <math.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
  double val = -1.0;
do {
    printf("Sine of %f is %f.\n", val, sin(val));
    val += 0.1;
  } while(val<=1.0);

  getch();
  return 0;
}

يعني انگار stdio.h مال هم سي و هم سي++ است ولي iostream.h فقط مختص به سي++ است.
خواهشا در اين مورد كمي توضيح دهيد.
.
 

MahdiΩ

کاربر تازه وارد
تاریخ عضویت
27 ژانویه 2006
نوشته‌ها
324
لایک‌ها
0
سی پلاس پلاس شکل توسعه یافته و بهینه شده و یک درجه بالاتر از سی هست.

همه برنامه های C با کامپایلرهای ++C کامپایل میشن ولی کامپایلرهای C نمیتونن همه کدهای ++C رو کامپایل کنن،چون ++C ویژگیهای جدیدی داره که در C نیست.
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
توی iostream سه تا ابجکت ورودی خروجی هست cin cout cerr اما چون c از شی گرایی پشتیبانی نمی کنه شما نمی تونید از این کتابخانه استفاده کنید
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
من يك تصوري داشتم و شما دقيقا به آن اشاره كرديد.
و آن اين بود كه در اين
header
ها هر جا با شي ها كار شده متعلق به سي پلاس است.
در مورد كار با فايل هم ((سي با سي پلاس)) متفاوت است. در كار با فايل با سي پلاس هم ، نوعي آبجكت سازي داريم، كه باز سي پشتيباني نمي كنه آنها را.
ممنون از دوستان.
.
 

Mehdi.T

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
30 سپتامبر 2005
نوشته‌ها
506
لایک‌ها
3
محل سکونت
In Search of Sunrise
معدل C++ اين چي ميشه دوستان ؟
کد:
   int *p = (int*)(0x0012ff88) ;
 

Arash_j13

Registered User
تاریخ عضویت
18 فوریه 2005
نوشته‌ها
778
لایک‌ها
2
محل سکونت
مشهد
اینه
کد:
 int *p = reinterpret_cast<int*>(0x0012ff88) ;
 
بالا