"> اموزش c++ تحلیل کامل یک برنامه (قسمت ششم) | ام اس پی سافت

اموزش c++ تحلیل کامل یک برنامه (قسمت ششم)

یک برنامه ساده دیگر: جمع اعداد صحیح

در برنامه بعدی از شی جریان ورودی std::cin و عملگر استخراج >>، برای بدست آوردن دو عدد صحیح تایپ شده از سوی کاربر از طریق صفحه‌کلید، جمع آنها و نمایش نتیجه بدست آمده با استفاده از std::cout می‌پردازیم. برنامه شکل ۵-۲ عمل جمع و خروجی حاصل از این برنامه را نشان می‌دهد.

cpp-ch2-5

شکل ۵-۲ | برنامه جمع که مجموع دو عدد صحیح دریافتی از صفحه کلید را محاسبه می‌کند.

توضیحات موجود در خطوط ۱ و ۲

// Fig. 2.5: fig02_05.cpp

// Addition program that displays the sum of two numbers.

نشاندهنده نام فایل و هدف برنامه هستند. رهنمود پیش‌پردازنده C++

#include <iostream> // allows program to perform input and output

در خط ۳ حاوی محتویات سرآیند فایل iostream در برنامه است.

همانطوری که قبلاٌ هم گفته شد، هر برنامه‌ای با اجرای تابع main آغاز می‌شود(خط ۶). براکت سمت چپ (خط ۷) ابتدا و آغاز بدنه main و براکت متناظر سمت راست (خط ۲۵)، انتها و پایان بدنه را نشان می‌دهد.

خطوط ۹-۱۱

int number1; // first integer to add

int number2; // second integer to add

int sum; // sum of number1 and number2

بخش اعلان می‌باشند. کلمات number1، number2 و sum اسامی متغیرها هستند. متغیرها مکان‌های در حافظه کامپیوتر هستند که می‌توان مقادیری را برای استفاده برنامه در آنها ذخیره کرد. این اعلان‌ها مشخص می‌کنند که متغیرهایnumber1، number2و sum از نوع داده int هستند، به  این معنی که این متغیرها قادر به نگهداری مقادیر صحیح همانند اعداد ۷, -۱۱, ۰, ۳۱۹۱۴ و غیره می‌باشند. تمامی متغیرها بایستی دارای نام و یک نوع داده باشند تا بتوان از آنها در برنامه استفاده کرد. چندین متغیر از یک نوع را می‌توان در خط یا چند خط مجزا از هم اعلان کرد. می‌توانیم هر سه متغیر فوق را در یک خط و بصورت زیر اعلان کنیم:

int number1, number2, sum;

با این همه، در این حالت خوانائی برنامه کاهش یافته و مانع می‌شود تا توضیحات مناسب برای هر متغیر و هدف از آن متغیر در برنامه را وارد سازیم. اگر بخواهیم بیش از یک متغیر در یک خط  اعلان کنیم (همانند مورد بالا) باید اسامی را با یک ویرگول(,) از یکدیگر جدا کنیم. که به این حالت لیست جدا شده با ویرگول گفته می‌شود.

بزودی در مورد نوع داده double (خاص اعداد حقیقی، اعداد با نقطه اعشار همانند۳.۴  و -۱۱.۱۹) و نوع داده char (خاص داده کاراکتری، یک متغیر از نوع char فقط می‌تواند یک حرف کوچک، یک حرف بزرگ، یک رقم یا یک کاراکتر خاص همانند $ یا * را در خود ذخیره سازد) صحبت خواهیم کرد.

غالباً به نوع‌های همانند double، int وchar نوع‌های بنیادین، نوع‌های اصلی یا نوع‌های توکار (built-in) می‌گویند. انواع نوع‌های بنیادین از جمله کلمات کلیدی هستند و از اینرو باید تماماً با حروف کوچک به نمایش درآیند.

نام یک متغیر (همانند number1) می‌توانند هر شناسه معتبری که یک کلمه کلیدی نیست، باشد. یک شناسه متشکل از دنباله‌ای از کاراکترها شامل حروف، ارقام و خط زیرین ( _ ) است. یک شناسه نمی‌تواند با یک رقم آغاز شود. زبان C++ از جمله زبان‌های حساس به موضوع است، به این معنی که مابین حروف کوچک و بزرگ تفاوت قائل می‌شود. از اینرو شناسه‌های a1 و A1 با هم برابر نیستند.

از اختصار یا کوته‌سازی شناسه‌ها اجتناب کنید، تا خوانایی برنامه افزایش یابد.

خط ۱۳

std::cout << “Enter first integer: “; // prompt user for data

مبادرت به چاپ رشته Enter first integer (بعنوان رشته لیترال نیز شناخته می‌شود) بر روی صفحه نمایش می‌کند. به چنین پیغام‌های prompt گفته می‌شود، چراکه به کاربر می‌گویند که چه کاری باید انجام دهد. خط ۱۴

std::cin >> number1; // read first integer from user into number1

با استفاده از شی ورودی cin (از فضای نامی std ) و عملگر >>، مقداری از صفحه‌کلید دریافت می‌کند. با استفاده از عملگر>> به همراه std::cin کاراکترها از یک ورودی استاندارد که معمولا صفحه‌کلید است، دریافت می‌شوند. در واقع می‌توان گفت که std::cin مقداری برای number1 دریافت می‌کند.

هنگامی که برنامه اجرا شده و به عبارت فوق می‌رسد، منتظر می‌ماند تا کاربر مقداری برای متغیر number1 وارد سازد. کاربر با تایپ یک مقدار صحیح و سپس فشردن کلید Enter (گاهاٌ به این کلید، کلید Return هم می‌گویند) به برنامه پاسخ می‌دهد. با این عمل مقدار تایپ شده به کامپیوتر ارسال می‌شود. سپس کامپیوتر کاراکترهای دریافت شده را به یک عدد صحیح تبدیل و این عدد (یا مقدار) را به متغیر number1 نسبت می‌دهد. از این نقطه به بعد هر مراجعه‌ای به number1 در این برنامه مترادف با استفاده از این مقدار خواهد بود.

شی‌های std::cout و std::cin تعامل مابین کاربر و کامپیوتر را تسهیل می‌بخشند. بدلیل اینکه این تعامل بفرم یک گفتگو است، غالباٌ به اینحالت محاسبه تعاملی یا محاوره‌ای گفته می‌شود.

خط ۱۶

std::cout << “Enter second integer: “; // prompt user for data

مبادرت به چاپ Enter second integer بر روی صفحه‌ نمایش می‌کند. این عبارت به کاربر اعلان می کند که چه کاری انجام دهد. خط ۱۷

std::cin >> number2; // read second integer from user into number2

مقداری برای متغیر number2 از سوی کاربر بدست می‌آورد.

عبارت تخصیص دهنده در خط ۱۹

sum = number1 + number2; // add the numbers; store result in sum

مجموع متغیرهای number1 و number2 را محاسبه و نتیجه آنرا به متغیر sum تخصیص می‌دهد. از عملگر تخصیص = به این منظور استفاده شده است. مفهوم عبارت فوق به این مضمون است “sum مقدار خود را از number1 + number2 بدست می‌آورد.” اکثر محاسبات در بین عبارات تخصیصی صورت می‌گیرند. به عملگر = و عملگر + ، عملگرهای باینری گفته می‌شود چرا که هر کدامیک از آنها دارای دو عملوند هستند. در مورد عبارت فوق، عملگر + ، دارای دو عملوند number1 و number2 است. همچنین عملگر =، دارای دو عملوند sum و مقدار بدست آمده از number1 + number2 است.

خط ۲۱

std::cout << “Sum is ” << sum << std::endl; // display sum; end line

مبادرت به چاپ           رشته کاراکتری Sum is و بدنبال آن مقدار عددی متغیر sum توسط عبارت std::endl می‌کند.end1 کوتاه شده “end line” بوده و متعلق به فضای‌نامی  std می‌باشد. کنترل کننده جریان std::endl یک خط جدید به خروجی منتقل و سپس “بافر خروجی را خالی می‌کند.” به این معنی که، در برخی از سیستم‌ها خروجی در ماشین انباشته می‌شود تا زمانیکه “ارزش” نمایش در صفحه نماش را پیدا کنند، عبارت std::endl خروجی‌های انباشته شده را مجبور می‌کند تا در یکباره به نمایش در آیند.

دقت کند که عبارت قبلی دو مقدار از انواع مختلف را خارج می‌سازد. عملگر << از نحوه ارسال هر نوع داده به خروجی مطلع است. به روش استفاده از چندین عملگر << در یک عبارت، عملیات زنجیر کردن، متصل کردن یا فرآیند آبشاری گفته می‌شود. از اینرو، داشتن چندین عبارت خروجی برای خارج کردن چند داده متمایز ضروری نیست.

البته می‌توان محاسبات را در بین عبارات خروجی هم انجام داد. می‌توانیم عبارات موجود در خطوط ۱۹ و ۲۱ را در یک عبارت، بفرم زیر داشته باشیم

std::cout << “Sum is “ << numbeer1 + number2 << std::endl;

بنابر این دیگر نیازی به متغیر sum نخواهد بود. براکت راست، {، به کامپیوتر اطلاع می‌دهد که به انتهای تابع main رسیده است.

از جمله توانمندیهای C++ این است که به کاربران اجازه می‌دهد تا نوع داده‌های مورد نیاز و متعلق به خود را ایجاد کنند (در فصل سوم در این مورد و در فصل‌های نهم و دهم نگاهی دقیق به این موضوع خواهیم داشت). سپس با نحوه رسید‌گی C++ به هنگام کار با نوع داده‌های جدید با استفاده از عملگرهای >> و << بیشتر آشنا خواهید شد (مبحث عملگرهای سربارگذاری در فصل یازدهم).
۵-۲ مفاهیم حافظه

اسامی متغیرها، همانند number1، number2 و sum مطابق با مکان‌های واقعی در حافظه کامپیوتر هستند. هر متغیر دارای یک نام، نوع، سایز و مقدار است. در برنامه جمع ۵-۲ زمانیکه عبارت

std::cin >> number1; // read first integer from user into number1

در خط ۱۴ اجرا می‌شود، کاراکترهای تایپ شده توسط کاربر به یک عدد صحیح تبدیل می‌شود و در مکانی از حافظه با نام number1 و با کمک کامپایلر C++ قرار داده می‌شود. فرض کنید که کاربر عدد ۴۵ را به عنوان مقداری برای number1 وارد کند. کامپیوتر ۴۵ را دریافت و در مکان number1 همانند شکل ۶-۲ قرار می‌دهد.

زمانیکه مقداری در یک مکان حافظه قرار می‌گیرد، مقدار جدید بر روی مقدار قبلی بازنویسی می‌شود. مجدداٌ به سراغ برنامه جمع می‌رویم، هنگامی که عبارت

std::cin >> number2; // read second integer from user into number2

در خط ۱۷ اجرا شود، فرض کنید کاربر مقدار ۷۲ را وارد سازد، این مقدار وارد مکان number2، شده و تصویر حافظه همانند شکل ۷-۲ خواهد شد. دقت کنید که این مکان‌های حافظه ضرورتا، نبایستی در کنار هم قرار داشته باشند.

پس از اینکه برنامه مقادیر number1 و number2 را بدست آورد، این مقادیر را با هم جمع کرده و مجموع را در درون متغیر sum قرار می‌دهد. عبارت

sum = number1 + number2; // add the numbers; store result in sum

علاوه بر آنکه عمل جمع را انجام می‌دهد، مقدار حاصله را هم در sum ذخیره می‌سازد. این عمل زمانی رخ می‌دهد که مجموع دو متغیر number1 و number2 محاسبه شده‌اند و در مکان sum ذخیره می‌شود. پس از اینکه sum محاسبه شد، حافظه بفرم شکل ۸-۲ تبدیل خواهد شد. توجه نمائید که مقادیر number1 و number2 پس از انجام محاسبه sum همچنان بدون تغییر باقی می‌ماند. با اینکه از این مقادیر استفاده شده است، اما مقادیر اولیه آنها با انجام عمل محاسباتی از بین نمی‌رود.

cpp-ch2-6
شکل ۶-۲ | مکان حافظه در حال نمایش نام و مقدار متغیر number1.

cpp-ch2-7

شکل ۷-۲ | مکان‌های حافظه پس از ذخیره‌سازی مقادیر برای number1 و number2.

cpp-ch2-8
شکل ۸-۲| مکان‌های حافظه پس از محاسبه sum با استفاده از number1 و number2.

  • پسورد: www.mspsoft.com
مسعود شریفی پور

از سال 88 که با برنامه نویسی آشنا شدم خیلی علاقه مند بودم یک بستر آموزشی بسازم در فضای وب و به انتشار آموزش های در این زمینه بپردازم.حالا یک تیم داریم و با قدرت رو به جلو حرکت میکنیم.

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

    sahar پاسخ

    سلام ممکنه این کد رو واسم تحلیل کنید خط به خط و واسم ارسال کنید؟؟؟
    ممنون
    Comments:
    Chip type : ATmega8L
    Program type : Application
    Clock frequency : 8.000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 256
    -----------------------------------------------------------------------------------
    #include
    #include
    // Alphanumeric LCD Module functions
    #asm
    Equ __lcd_port=0x12; PORTD
    #endasm
    #include
    #include
    #define ADC_VREF_TYPE 0x40
    // Read the AD conversion result
    Unsigned int read_adc (unsigned char adc_input)
    {
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    // Delay needed for the stabilization of the ADC input voltage
    Delay us (10);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    While ((ADCSRA & 0x10) ==0);
    ADCSRA|=0x10;
    Return ADCW;
    }
    Int a=0;
    Char s [20];
    Void main (void)
    {
    // Declare your local variables here
    // Input/output Ports initialization
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=0 State2=0 State1=T State0=T
    PORTB=0x00;
    DDRB=0x0C;
    // Port C initialization
    //Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    //State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;
    // Port D initialization
    //Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0x00;
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    TCCR0=0x00;
    TCNT0=0x00;
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceller: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    MCUCR=0x00;
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    // ADC initialization
    // ADC Clock frequency: 1000.000 kHz
    // ADC Voltage Reference: AVCC pin
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x83;
    // LCD module initialization
    lcd_init (16);
    lcd_clear ();
    lcd_gotoxy (0, 0);
    lcd_putsf ("KAZEMI");
    lcd_gotoxy (0, 1);
    lcd_putsf ("shedat noor");
    While (1)
    {
    a=read_adc (0);
    a=a-420;

    If (a100)
    {PORTB.2=1;PORTB.3=1};
    Else
    {PORTB.2=0;PORTB.3=0};
    delay_ms (10);
    };
    }

کدیشن ! مارکت پروژه های برنامه نویسی راه اندازی شدیه توکه پا بریم ببینم