ورود

View Full Version : سوال: چند سوال در مورد دو Code Block



ziabarnamenevis
شنبه 18 دی 1389, 10:27 صبح
با سلام خدمت همه دوستان
من چند تا سوال دارم لطفا دو کد زیر را در نظر بگیرید


#include "stdafx.h"
#include <iostream>
int Add(int , int);
int _tmain(int argc, _TCHAR* argv[])
{
int a;
int b;
int c;
a = 2;
b = 3;
c = Add(a,b);
std::cout << "a=" << a << std::endl;
std::cout << "b=" << b << std::endl;
std::cout << "a+b=" << c << std::endl;
return 0;
}


************************************


#include "stdafx.h"
#include <iostream>
int Add(int , int);
int _tmain(int argc, _TCHAR* argv[])
{
int a;
int b;
int c;
a = 2;
b = 3;
c = Add(a,b);
std::cout << "a=" << a << std::endl;
std::cout << "b=" << b << std::endl;
std::cout << "a+b=" << c << std::endl;
return 0;
}
int Add(int num1,int num2)
{
int addnum;
addnum = num1 + num2;
return addnum;
}

1-چرا کد اول درست اجرا نمیشه و ارور میده ولی کد دوم درست؟منظورم اینه که قسمت اضافه شده به کد اول که بعد از رترن اومده و متغیر هاش هم فرق دارن چه ربطی به a, b, c داره؟ و چطور باعث اجرا میشه؟
2-صفر موجود در عبارت return 0 چه مهنی میده اگه یک باشه یا یه چیز دیگه چه اهمیتی داره ؟
3- من موقعی که f5 را میزنم صفحه Command Prompt باز میشه سریع برنامه اجرا و بسته میشه و من نمیتونم نتیجه را بررسی کنم ولی بعضی جا من دیدم مینویسهpress any key تا برنامه نویس خودش یک دکمه بزنه و بسته شه چیکار کنم درست بشه ؟

4-تو کتب میبینیم نوشته برای تعریف داده نوع char بازه 127- تا 127 را قبول میکنه پس اگه منظورش عدد هست چطور کاراکتر a (حروف) را قبول میکنه؟

mehdi.mousavi
شنبه 18 دی 1389, 18:51 عصر
با سلام خدمت همه دوستان من چند تا سوال دارم لطفا دو کد زیر را در نظر بگیرید

1-چرا کد اول درست اجرا نمیشه و ارور میده ولی کد دوم درست؟منظورم اینه که قسمت اضافه شده به کد اول که بعد از رترن اومده و متغیر هاش هم فرق دارن چه ربطی به a, b, c داره؟ و چطور باعث اجرا میشه؟
2-صفر موجود در عبارت return 0 چه مهنی میده اگه یک باشه یا یه چیز دیگه چه اهمیتی داره ؟
3- من موقعی که f5 را میزنم صفحه Command Prompt باز میشه سریع برنامه اجرا و بسته میشه و من نمیتونم نتیجه را بررسی کنم ولی بعضی جا من دیدم مینویسهpress any key تا برنامه نویس خودش یک دکمه بزنه و بسته شه چیکار کنم درست بشه ؟

4-تو کتب میبینیم نوشته برای تعریف داده نوع char بازه 127- تا 127 را قبول میکنه پس اگه منظورش عدد هست چطور کاراکتر a (حروف) را قبول میکنه؟


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

اما پاسخ به سوالات شما:


کد اول Unresolved External Symbol میده، چون تابع Add شما پیاده سازی نشده. در نتیجه نمیدونه توی Runtime اون تابع Add چطوری کار خواهد کرد. برای اینکه مشکل رفع بشه، کافیه تا Body اونو هم همونجا اضافه کنید.
صفر یعنی برنامه بدون مشکل اجرا شده، هر عددی غیر صفر نشون میده که برنامه با خطا مواجه شده. این کد میتونه توسط برنامه ای که برنامه شما رو فراخوانی کرده برای شناسایی صحیح یا عدم صحیح اجرای برنامه شما استفاده بشه.
خط آخر، قبل از return 0، بنویسید getch(); یا جای اینکار، کلید CTRL-F5 رو فشار بدید.
کاراکتر a (یا بطور کلی کلیه حروف) هر کدوم یه کدی دارن، (که بهش میگن کد اسکی) که معادل 97 هستش (a کوچک).

موفق باشید.

ziabarnamenevis
یک شنبه 19 دی 1389, 19:15 عصر
کد اول Unresolved External Symbol میده، چون تابع Add شما پیاده سازی نشده. در نتیجه نمیدونه توی Runtime اون تابع Add چطوری کار خواهد کرد. برای اینکه مشکل رفع بشه، کافیه تا Body اونو هم همونجا اضافه کنید.


[/QUOTE]
من منظورتون رادرست متوجه نشدم تو سوال اول تابع
int Add(int num1,int num2)
{
int addnum;
addnum = num1 + num2;
return addnum;
اصلا متغیر های ناشناسی دارد که به متن بالاش مربوط نمیشه این چه جوری که اجرا میشه؟
بعد هم در آخرش
return addnum;
صفر و یا یک نذاشته چه معنی میده ؟
***********



صفر یعنی برنامه بدون مشکل اجرا شده، هر عددی غیر صفر نشون
میده که برنامه با خطا مواجه شده. این کد میتونه توسط برنامه ای که برنامه
شما رو فراخوانی کرده برای شناسایی صحیح یا عدم صحیح اجرای برنامه شما
استفاده بشه.


[/QUOTE]
یعنی اگر یک گذاشته بشه نشون میده برنامه خطا داره ؟
من امتحان کردم تاثیری روی نتیجه نداشت.

Hadirj
یک شنبه 19 دی 1389, 19:20 عصر
با اجازه بزرگترها!
ببین عزیزم تو اولی اونجایی که داری میگی c=Add(a,b);d داری تابع Add رو فراخونی میکنی در صورتی که اصلا مشخص نکردی که Add چکار باید بکنه.

توی main برنامه return 0 به این منظور هست که برنامه کامل اجرا شده یعنی وقتی تابع main صفر برگردونه برنامه با موفقیت به آخر رسیده. اما توی تابع Add شما باید مقداری رو که از محاسبه بدست اومده رو بتونی برگردونی به جایی که فراخونی شده که همون c=add هست.

برای درک بهتر روال انجام برنامه رو بعد از include ها براتون مینویسم:

1- مشخص میکنید که تابعی به نام Add دارید که (int, int) یعنی دومقدار int دریافت میکند و int که اول آمده یعنی مقدار int برمیگرداند
2-سه متغیر a,b,c تعریف شده a,b مقدار اولیه میگیرند و c که نوعش int هست مقدار برگشتی از تابع Add را میگیرد که a, b به آن فرستاده شده اند
3-برنامه به تابع Add پرش میکند(اولی ارورر میده چون این تابع نیستش!) تابع a,b را گرفته فرض کنید آنها را به num1 و num2 تغییر میدهد(برای درک بهتر انتطور میگم) در تابع این دو عدد جمع میشوند و مقدارشان درون متغیر addnum قرار داده می شود و این مقدار را برمیگردانند(همان return addnum).
4-تابع به آخر رسیده و برنامه به main برمگردد پس حال مقدار c میشود مقداری که تابع Add برگردانده
5-متغیر ها چاپ میشوند
6- return 0 مشخص میکند که برنامه با موفقیت تمام شده.

توصیه میکنم مباحث ابتدایی برنامه نویسی رو بخونید