برای استفاده از تمام امکانات سایت از جمله مرکز دانلود باید در سایت عضو شوید. برای ثبت نام تنها 1 دقیقه زمان نیاز دارید ، برای ثبت نام اینجا کلیک کنید

صفحه اول انجمنها
ثبت نامجستجوراهنماي انجمنليست اعضااتاق چت (0)گروه هاي كاربرانمرکز دانلودورود

پاسخ به يك موضوع صفحه 1 از 1
رفتار عجيب اين برنامه كوچك سي
نويسنده پيغام

پاسخ بصورت نقل قول
ارسال رفتار عجيب اين برنامه كوچك سي 
سلام
اولا حدس بزنید که این برنامه چه کار می کند.
ثانیا برنامه را وارد و اجرا کنید و نتیجه را با حدس خود مقایسه کنید (اگر برنامه
در حلقه بی پایان قرار بگیرد به من ربطی ندارد)
ثالثا در پاسخ به این نامه رفتار عجیب این برنامه را توجیه کنید


پاسخ بصورت نقل قول
ارسال  
code:
#include "iostream.h"
void main()
{
    int x = 0;
    for ( char i = 100; i<200; i++ )    // or: for ( int i = 30000; i<40000; i++ )
                x++;
    cout << x;
}



پاسخ بصورت نقل قول
ارسال  
حدس من این بود که برنامه  با خطا روبرو می شود که البته اینطور نشد .


حلقه for  ابتدا عدد 100 را به صورت کاراکتر داخل  i  قرار می دهد ( که این انتصاب فقط برای گمراه کردن است )  و هر بار چک می کند که آیا کاراکتر i ( که عددی است کوچکتر از 127 ) از 200 کوچکتر است یا خیر ( همواره 200>127 ) بنابراین برنامه در حلقه بی پایان قرار می گیرد.



اين نامه توسط kohandel در 1 شنبه Jun 01, 2008 12:07 am ويرايش شده است.

پاسخ بصورت نقل قول
ارسال  
kohandel نوشته:
حدس من این بود که برنامه  با خطا روبرو می شود که البته اینطور نشد .


حلقه for  ابتدا عدد 100 را به صورت کاراکتر داخل  i  قرار می دهد ( که این انتصاب فقط برای گمراه کردن است )  و هر بار چک می کند که آیا کاراکتر i ( که عددی است کوچکتر از 127 ) از 200 کوچکتر است یا خیر ( همواره 200>127 ) بنابراین برنامه در حلقه بی پایان قرار می گیرد.


البته موضوع با این که کاراکتر عددی کوچک تر از 127 است ارتباط دارد اما وقتی مقدار متغیر به 127 می رسد ثابت نمی ماند. باید ببینید که چه می شود.
اصلا یک متغیر کاراکتری با مقدار 127 تعریف کنید و به مقدار آن یک واحد اضافه کنید، سپس مقدار جدید آن
را چاپ کنید. نتیجه غیرمنتظره خواهد بود اما دلیل دارد...


پاسخ بصورت نقل قول
ارسال  
سلام
فکر کنم وقتی کاراکتر به 127 می رسه مقدارش دایما تغییر می کنه و همین باعث میشه روی دور بی پایان بیفته.
آقای شاکری اذیت نکنین دیگه


_________________
آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !

محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003

سوابق کاریه من :

معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی

پاسخ بصورت نقل قول
ارسال  
خیلی خب به خاطر گل روی آقای ملایی جواب رو می گم:

برای نگهداری کد کاراکتر از یک بایت استفاده می شود و منفی با روش متمم دو نشان
داده می شود. بزرگ ترین عدد مثبت که در یک بایت قابل نمایش است عدد127 است
که 01111111 می شود. اگر به این مقدار یک واحد اضافه کنید حاصل 10000000 می شود که
-128 (منفی 128) تفسیر می شود. بنابراین در برنامه مجددا از -128 متغیر افزایش می یابد
تا به 127 برسد و دوباره -128 می شود و به این ترتیب یک حلقه بینهایت شکل می گیرد.
در مورد نوع دوبایتی int هم اگر به 32767 یک واحد اضافه شود حاصل اشتباها -32768
تفسیر خواهد شد.
چون زبان سی به طور پیش فرض خطای "خارج از محدوده" را چک نمی کند در این موارد به جای
خطای زمان اجرا، مقدار غلطی در متغیر قرار می گیرد. برنامه نویس مسؤول پیشگیری از
این نوع خطاست.


پاسخ بصورت نقل قول
ارسال  
خیلی ممنون  Smile



اين نامه توسط ملایی در شنبه May 31, 2008 10:56 pm ويرايش شده است.

_________________
آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !

محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003

سوابق کاریه من :

معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی

پاسخ بصورت نقل قول
ارسال  
خیلی جالب بود Laughing

ممنون آقای شاکری


_________________



امضاء بلد نیستم ؛ میخوای انگشت بزنم!؟؟


محمد جهانبخش

پاسخ بصورت نقل قول
ارسال  
خیلی برنامه ی جالبی بود.
جواب آقای شاکری دندان شکن بود


_________________
زحد بگذشت مشتاقی و صبر اندر غمت یارا ..... به وصل خود دوایی کن،دل دیوانه ی ما را
علاج درد مشتاقان،طبیب عام نشناسد ..... مگر لیلی کند درمان،غم مجنون شیدا را
نمايش نامه هاي ارسال شده قبلي:
پاسخ به يك موضوع صفحه 1 از 1