ورود

View Full Version : سوال: ایا دو دستور printf و cout برتری خاصی نسبت به یکدیگر دارند؟



motherboard
دوشنبه 19 اسفند 1392, 11:12 صبح
سلام.خسته نباشید.من در برنامه هام بیشتر با cout کار می کنم.اما یه دستور دیگه به نام printf وجود داره که کارش مشابه cout است.می خواستم بدونم ایا این دو دستور مزیت های خاص خودشون رو دارند و یا اینگونه نیست؟با تشکر.:متفکر:

SEZAR.CO
سه شنبه 20 اسفند 1392, 17:59 عصر
با عرض سلام
خیر فرق زیادی ندارد
اولی مال سی \لاس \لاس و دومی مال سی
علت اضافه شدنش یکسری کارایی بود برای شی گرایی
چون زیاد مهم نبود یادم رفته
:)

Azar.099
چهارشنبه 21 اسفند 1392, 12:23 عصر
اگر سرعت در برنامه هایی که مینویسید مهم هست (مثلا کسانی که میخواهند در مسابقات برنامه نویسی شرکت کنند)
printf سرعتش بیشتره

motherboard
سه شنبه 30 اردیبهشت 1393, 00:56 صبح
سلامی دوباره.مدتی پیش این تاپیک رو ایجاد کرده بودم و سوالی رو در مورد تفاوت cout و printf پرسیده بودم که دوستان محبت کردند جواب دادند.اما از قضا در تاپیکی که یکی از دوستان ایجاد کرده بود (در اینجا) (http://barnamenevis.org/showthread.php?450927-%D9%85%D8%B3%D8%A7%D8%A8%D9%82%D9%87-%DA%A9%D8%AF-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%85%D8%B1%D9%85%D9%88%D8%B2%D8%A7%D9%86%D9%87-%D9%88-%D8%A7%D9%81%D8%B1%D8%A7%D8%B7%DB%8C-%D8%AF%D8%B1-%D8%B2%D8%A8%D8%A7%D9%86-C-Cpp)قرار بر این بود که عبارت !Hello, World رو بتونیم با کد های گیج کننده و پیچیده در نمایشگر چاپ کنیم.در نتیجه من کدی رو نوشتم و ارسال کردم و یکی دیگر از دوستان هم کدی دیگر را ارسال کردند.پیشنهاد می کنم تا یکبار کد من و بار دیگر کد جناب #target رو تک تک کامپایل کنید و به تفاوت سرعت در اجرای برنامه توسط این دو کد پی ببرید.در کامپایلر من این موضوع کاملا مشهود بود.کدی که جناب #target نوشتند تماما از زبان c استفاده شده(بیشترین منظورم همون printf هست).اما در کدی که من نوشتم از دستورات سی پلاس پلاس هم استفاده شده(بیشترین منظورم همون cout هست).اگر کد ها رو اجرا کنید می بینید که کدی که تماما با زبان c نوشته شده خیلی سریع تر و کاملا مشهود کامپایل میشه و اون کدی که با زبان ++c نوشته شده سرعت کم تری در مقایسه با کد جناب #target داره .به یکبار امتحان کردنش می ارزه.:لبخند:

کد جناب #target که با فقط با زبان c نوشته شده:


#include <stdio.h>
#include <stdlib.h>
int Ref1 = 80;
void PrintChar(char Ch)
{
printf("%C" , Ch);
return;
}
int F1(int X)
{
int Temp = 1;
for (int i = 0 ; i < 7 ; i++)
Temp = Temp << 1;
int Temp2 = 1;
while(Temp2 != 8)
Temp2 = Temp2 << 1;
int TestInt = Temp | Temp2;
TestInt = TestInt | 16;
if (X != TestInt - 1)
return Ref1;
else
return TestInt;
}
void F2(int X)
{
PrintChar((char)X);
PrintChar(0x72);
PrintChar(0x6C);
PrintChar(0x64);
PrintChar(0x21);
}
int main()
{
Ref1 += 7;
int FirstChar = 0x00000000; //
FirstChar = FirstChar | 0x00000048;
char* Temp ;
Temp = (char*) &FirstChar;
PrintChar(*Temp);
char HoldE = -1;
int X = 0x0000007F;
while(HoldE & 8)
{
HoldE = HoldE & X;
X = X >> 1;
}
HoldE -= 2;
HoldE = HoldE | 0xFFFF0060;
Temp = (char*) &HoldE;
PrintChar(*Temp);
PrintChar((*Temp) + 7);
int Number = 0;
for(int i = 0 ; i < 100 ; i++)
Number += 1;
Temp = (char*) &Number;
PrintChar((*Temp) + 8);
Number = 0;
char* U = "Hello";
int Rnd = rand();
if(Rnd < 0)
printf("%s" , U);
else
Rnd = RAND_MAX - Rnd;
if (Rnd <= 0)
printf("Hello World") ;
else if (Rnd)
printf("%c" , 111);
Number++;
Number = Number << 5;
Temp = (char*) &Number;
PrintChar((*Temp));
Number = 0;
for (int i = 0 ; i <= Ref1 ; i++)
Number = F1(i);
Temp = (char*) &Number;
PrintChar((*Temp));
F2(0x6F);
}




کدی که من نوشتم و در اون دستورات ++c رو هم دخالت دادم:

#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
int main()
{int H=72;
int e=101;
int l=108;
int lll=108;
int o=111;
int aa=44;
int W=87;
int O=111;
int r=114;
int L=108;
int d=100;
char aaa=char(72);
char aaaa=char(101);
char aaaaa=char(108);
char aaaaaa=char(108);
char aaaaaaa=char(111);
char aaaaaaaa=char(44);
char aaaaaaaaa=char(87);
char aaaaaaaaaa=char(111);
char aaaaaaaaaaa=char(114);
char aaaaaaaaaaaa=char(108);
char aaaaaaaaaaaaaa=char(100);
cout<<aaa;
printf("%c",aaaa);
cout<<char(108);
printf("%c",char (((((((((((((((((((((int (aaaaaa)))))))))))))))))))))));
cout<<char(222/2);
cout<<(((((((((((aaaaaaaa)))))))))));
printf("%c",aaaaaaaaa);
cout<<char(char(10+20+30+25+15+4+6+1));
printf("%c",aaaaaaaaaaa);
cout<<(aaaaaaaaaaaa=L);
printf("%c",char (int (((((((((((((((((aaaaaaaaaaaaaa))))))))))))))))))) ;
getch();
return 0;}