آخرین اخبار و مقالات و مطالب پیرامون char در ایران آی سی تی نیوز ، پایگاه فناوری اطلاعات و ارتباطات ایران
بر روی این دامنه اینترنتی سیستم مدیریت محتوا
پارس سی ام اس
نصب شده است که نرم افزاری قوی جهت طراحی سایت
می باشد. طراحی وب
با استفاده از پرتال
( پورتال
) پارس منجر به طراحی وب سایت
شما می شود. طراحی وب سایت
کپی رایت پورتال
پارس
یکی از مسایلی که بیشتر برنامه نویسان، دیر یا زود با آن روبه رو می شوند، ذخیره سازی و محاسبه اعداد و ارقام بزرگ است. همان طور که می دانیم، ظرف ذخیره سازی داده ها متناسب با حجم و میزان بزرگی ارزش داده، رشد می کند. به طور مثال، در زبان c بزرگ ترین حافظه ای که برای ذخیره سازی داده ها استفاده می شود، برابر با 8 بایت است که این مقدار در کامپایلر anci c به 10 بایت افزایش پیدا کرده است. اما زمانی پیش می آید که نیاز به ذخیره سازی و محاسبه اعداد بزرگ تر از 8 بایت داریم. یکی از ساده ترین روش ها، ذخیره سازی ارقام اعداد در آرایه و انجام عملیات مورد نظر روی آرایه هاست. حالا بیایید ببینیم که چگونه 2عدد بزرگ را که در آرایه ذخیره شده اند با هم جمع کنیم. ما اعداد را به صورت آرایه ای از کاراکترها از کاربر دریافت می کنیم. برای کم شدن فضای اشغال شده از کاراکتر استفاده می کنیم و با یک تبدیل ساده، خانه های آن را به رقم مورد نظر تبدیل می کنیم. اعداد را به این صورت از کاربر دریافت می کنیم: char num1[1000],num2[1000]; std::cout «« "enter first number : " «« std::endl; std::cin »» num1; std::cout «« "enter second number : " «« std::endl; std::cin »» num2; به این نکته توجه داشته باشید که این جا اعداد ما 1000رقمی هستند و میزان حافظه اشغالی برای آن ها با کوچک تر شدن شان تغییری نمی کند، ما می توانیم با تعریف اعداد به صورت اشاره گر برای آن ها حافظه داینامیک در نظر بگیریم و هر عدد بتواند هر تعداد رقمی را که خواست داشته باشد. حالا باید 2عدد را جمع کنیم، این کار را تابعی با نام add انجام می دهد که به این صورت تعریف شده است: این تابع ابتدا طول عدد بزرگ تر را پیدا می کند، سپس اعداد را بر عکس می کند؛ اما چرا برعکس؟ کاربر عدد 12 را وارد کرده است. این عدد به این صورت در آرایه قرار گرفته است: 4خانه باقی مانده بلااستفاده هستند. ما توسط تابع reverse خانه های آرایه را جابه جا می کنیم و سپس به اندازه اختلاف طول 2عدد با طول بیشتر یا همان len در کد بالا صفر اضافه می کنیم. این کار را برای این انجام می دهیم که اگر طول 2عدد متفاوت بود، بتوان 2عدد را با هم جمع کرد (البته بدون اضافه کردن صفر هم می توانیم این کار را انجام دهیم، ولی این کار جمع کردن را ساده تر می کند). بعد از این مرحله، در حلقه for تک تک ارقام را با هم جمع می کنیم. مقدار متغییر carry مقدار رقم نقلی از جمع 2عدد حاصل است. مثلا اگر 2 با 9 جمع شود، مقدار carry برابر یک است که مقدار آن در جمع 2رقم بعدی استفاده شود. در نهایت، حاصل جمع 2عدد در آرایه num1 قرار می گیرد و سپس باید num1 نیز بر عکس شود تا حاصل، نتیجه دلخواه ما باشد. این روش، تنها یکی از روش های جمع 2 عدد بزرگ است و مفهوم جمع کاغذی را پیاده می کند. بدیهی است روش های بهینه تر و با مصرف کمتر حافظه وجود دارند که در صورت امکان، در آینده آن ها را توضیح خواهیم داد. کد این برنامه نیز از طریق لینک زیر قابل دریافت است: http://tinyurl.com/clickprog261
... تعریف تابع به صورت زیر است: char * strcat ( char * destination, char * source ); strncat: این تابع دقیقا مثل تابع بالا رفتار می کند، با این تفاوت که به اندازه مشخصی از رشته دومی را به رشته اولی می چسباند ... مثلا: char str1[] = “jamejam”; char str2[] = “online”; strncat(str1,str2,2); output » jamejamon نحوه تعریف این تابع به صورت زیر است: char * strncat (char * destination, char * source, size_t num); اگر به جای num طول رشته دومی را بدهیم همان کار تابع بالا را انجام می دهد ... نحوه تعریف این تابع به صورت زیر است: char * strcpy ( char * destination, char * source ); strncpy: این تابع عملی شبیه به strncat برای strcat دارد، یعنی شما مقدار محدودی از یک رشته را در رشته دیگر کپی می کنید ... نحوه تعریف آن نیز مثل strncat است: char * strncoy ( char * destination, char * source, size_t num ); strcmp: این تابع دو رشته را با هم مقایسه می کند و یک عدد صحیح را به عنوان خروجی برمی گرداند ... تابع به صورت زیر تعریف شده است: int strcmp ( const char * str1, const char * str2 ); strncmp: این تابع نیز مانند باقی توابع دارای n یک مقدار مشخص از یک رشته را با رشته دیگر مقایسه می کند و نحوه تعریف آن به صورت زیر است: int strncmp ( const char * str1, const char * str2, size_t num ); در استفاده از تمامی توابع بالا جهت حصول از اطمینان از عملکرد توابع پیشنهاد می شود از تعریف دوم تابع استفاده کنید مثلا strncat به جای strcat، استفاده از این توابع باعث می شود امنیت کد شما بیشتر باشد (درباره خطای overflow پیشتر توضیح داده شده است، همین طور در مقاله دو هفته پیش در مورد رشته ها) ...
... قطعه کد زیر را در نظر بگیرید: void overflow_function (char *str){ char buffer[10]; strcpy(buffer, str); } int main(){ char big_string[14]; strcpy(big_string,"bufferoverflow"); overflow_function(big_string); return 0; } از لحاظ قواعد گرامری این قطعه کد درست است و باید بدون اشکال کار کند اما در زمان اجرا، خطای در حال اجرا صادر خواهد شد با این مضمون: stack around the variable ‘buffer’ was corrupted بسیار خب، این خطا به ما می گوید که متغیر بافر خراب شده است ... کد بازنویسی شده به صورت زیر خواهد بود: void overflow_function (char *str){ char buffer[10]; strncpy(buffer, str,10); } int main(){ char big_string[14]; strncpy(big_string,"bufferoverflow",14); overflow_function(big_string); return 0; } امیربهاالدین سبط الشیخ ...
... فرض می کنیم که طول خط ورودی از سمت کاربر داخل متغیر length قرار گرفته باشد، ابتدا یک تابع به نام substr معرفی می کنیم، شکل کلی این تابع به صورت زیر است: int substr(char dest[], char src[], int position); این تابع متن src را بصورت بلاک هایی به اندازه length در dest قرار می دهد و اندیس آخرین عنصری که از src در dest قرار داده شده است را به علاوه 1 می کند و به عنوان خروجی برمی گرداند ...
... قدم نخست برای راه اندازی یک خط فرمان، تولید کلاسی پایه به صورت زیر است: class basecommand { public : basecommand(int argc,char** argv); basecommand(); virtual void execute(); virtual bool contain(const char* arg); virtual void printhelp(); private : int argc; char** argv; { این کلاس چیست و چه کاری قرار است انجام دهد؟ این کلاس تمامی متدها و فیلدهای مورد نیاز برای اجرا و نگهداری هر دستور را در خود دارد، و به عبارت بهتر یک شی از یک دستور است ... در ضمن طراحی یکپارچه ای خواهیم داشت، بدین ترتیب کلاس file را برای کار با فایل ها را به صورت زیر می نویسیم: class file{ const static int buf_size = 4096; public: static void copy(char* source,char* destination); static void move(char* source,char* destination); static void delete(char* filename); static void rename(char* oldname,char* newname); static bool exist(char* filename); static void create(char* filename,bool overwrite); }; نیازی به توضیح در مورد متدهای کلاس نیست، بسیار خوب پس پیاده سازی متد execute از کلاس مربوط به دستور copy به صورت زیر خواهد شد: void execute(){ if(this-»contain("/x") || this-»contain("/x")){ file::move(this-»argv[1],this-»argv[2]); } else file::copy(this-»argv[1],this-»argv[2]); } حالا که موفق شدیم کلاس مربوط به copy را پیاده کنیم، به بررسی کلاس دیگری می پردازیم ... این کلاس بصورت زیر تعریف شده است : class utility{ public : utility(char* command); utility(); void run(); private : char* command; char** argv; int argc; basecommand* internalecommand; void parse(); void createcommand(); {; این کلاس شامل 3 فیلد است یکی argv ودیگری argc که قبلا درمورد آنها و کاربردشان صحبت کرده ایم ...
... روش کار در زبان c و c++ مانند زبان c# است، اما با تفاوت هایی که آن هم به خاطر ماهیت زبان برنامه نویسی است، که به صورت زیر تعریف می شود: int main(void)int main(int argc, char *argv[])تابع main می تواند مقداری را برنگرداند، مقدار argv شامل نام برنامه است به همین خاطر همیشه مقدار argc برابر 1 است ... در نگارشی از زبان c که در سیستم عامل apple استفاده می شود، تعریف این متد به صورت زیر است: int main(int argc, char *argv[], char *envp[])همان طور که مشاهده می کنید، تفاوت هایی بین فراخوانی تابع main در یک زبان و پلتفورم متفاوت، وجود دارد ...
... کد زیر را در نظر بگیرید: ];10unsinged char input_buffer[ unsigned char i; ; i++) {10; i ...
... به عنوان مثال نوع داده ایint مشخص کننده داده عددی صحیح، float داده عددی اعشاری، double داده عددی اعشاری بزرگ، char داده کاراکتری وbool داده دو مقداری درست یا غلط است ... به عنوان مثال در ++c ، متغیری از نوع داده ای char یک بایت از حافظه را برای ذخیره یک کاراکتر رزرو می کند و یا متغیری از نوع int ، بسته به نوع کامپایلر 2 یا 4 بایت از حافظه را برای نگهداری یک عدد صحیح رزرو می کند ...
... بد نیست بدانید شخصیت های بازی های ویدئویی ژاپنی در این کشور آن قدر جذابیت دارند که حتی دایسو که انوموتو- سرمایه دار مشهور ژاپنی که قرار بود به جای انوشه انصاری به فضا سفر کند ولی به علت مشکلات پزشکی از این کار بازماند- اعلام کرده بود به هنگام سفر لباس یک شخصیت کارتونی به نام char aznable را به تن می کند ...
... 4096] of char; NumRead: integer; FileLength: longint; begin AssignFile(FromF, source); reset(FromF); AssignFile(ToF, DESTINATION); rewrite(ToF); FileLength := FileSize(FromF); with ProgressBar1 do begin Min := 0; Max := FileLength; while FileLength > 0 do begin BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead); FileLength := FileLength - NumRead; BlockWrite(ToF, Buffer[0], NumRead); Position := Position + NumRead; end; CloseFile(FromF); CloseFile(ToF); end; end; ...
|
صفحه 1
|
2 |
|