PDA

View Full Version : مبتدی: خطا در آرایه ها و جمع دو عدد



amirali_mj
دوشنبه 18 دی 1391, 12:02 عصر
سلام
مشکل این کد کجاست؟


#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char A[7];
std::cout<<"\n";
std::cout<<"Enter Code 1 : ";
cin>>A;
std::cout<<"\n";
int a=0;
for(a ; a < 6; a++)
{

std::cout<<"A["<<a<<"] = "<<A[a]<<std::endl;
}
int s;
s=A[1]+A[2];
std::cout<<s<<std::endl;
return 0;
}


اول 5 عدد از کاربر میگیره بعد با حلقه تک تک اعداد رو میریزه تو آرایه
وقتی دو تا عدد از آرایه رو با هم جمع می کنم جواب اشتباه میده
قسمت

char A[7];

رو به

int A[7];

تبدیل میکنم ولی باز یه ارور دیگه میده

mahak006
دوشنبه 18 دی 1391, 12:26 عصر
سلام
مشکل این کد کجاست؟


#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char A[7];
std::cout<<"\n";
std::cout<<"Enter Code 1 : ";
cin>>A;
std::cout<<"\n";
int a=0;
for(a ; a < 6; a++)
{

std::cout<<"A["<<a<<"] = "<<A[a]<<std::endl;
}
int s;
s=A[1]+A[2];
std::cout<<s<<std::endl;
return 0;
}


اول 5 عدد از کاربر میگیره بعد با حلقه تک تک اعداد رو میریزه تو آرایه
وقتی دو تا عدد از آرایه رو با هم جمع می کنم جواب اشتباه میده
قسمت

char A[7];

رو به

int A[7];

تبدیل میکنم ولی باز یه ارور دیگه میده




از بیخ ایراد داره . اول اینکه وقتی آرایه کارکتری هست ، یعنی به تعداد کارکتر می تونی رقم بگیری . یعنی تو این برنامه داری یه عدد ۷ رقمی ( درستش ۶ رقمی باید باشه ) می گیری. بعد تو حلقه داری رقم به رقم چاپش می کنی . آخر سر هم که <<مقدار کارکتری>> رقم دوم و سوم رو داری با هم جمع می کنی که طبیعتا جواب جمع ، اشتباه هستش .

sohil_ww
دوشنبه 18 دی 1391, 12:43 عصر
تو ورودی اعدادت ایراد داره برای گرفتن آرایه دستور cin باید تو حلقه باشه#include "stdafx.h"
#include <iostream>
using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
int array2 [10];
for(int i=0;i<10;i++)
{
cout<<"Enter number :";
cin>>array2[i];
} البته جمع می خوای همه با هم جمع بشن باید تو حلقه قرار بدی

amirali_mj
دوشنبه 18 دی 1391, 15:11 عصر
از بیخ ایراد داره . اول اینکه وقتی آرایه کارکتری هست ، یعنی به تعداد کارکتر می تونی رقم بگیری . یعنی تو این برنامه داری یه عدد ۷ رقمی ( درستش ۶ رقمی باید باشه ) می گیری. بعد تو حلقه داری رقم به رقم چاپش می کنی . آخر سر هم که <<مقدار کارکتری>> رقم دوم و سوم رو داری با هم جمع می کنی که طبیعتا جواب جمع ، اشتباه هستش .

خب چجوری باید درستش کنم؟

amirali_mj
دوشنبه 18 دی 1391, 15:14 عصر
تو ورودی اعدادت ایراد داره برای گرفتن آرایه دستور cin باید تو حلقه باشه#include "stdafx.h"
#include <iostream>
using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
int array2 [10];
for(int i=0;i<10;i++)
{
cout<<"Enter number :";
cin>>array2[i];
} البته جمع می خوای همه با هم جمع بشن باید تو حلقه قرار بدی
این طوری عددا باید یکی یکی وارد بشه ، میخوام همشو با هم بزنم بعد مقدار تک تکشو بگیره

mahak006
دوشنبه 18 دی 1391, 21:24 عصر
این طوری عددا باید یکی یکی وارد بشه ، میخوام همشو با هم بزنم بعد مقدار تک تکشو بگیره

منظورت نافهومه . در کل این سوالو دارم :
میخوای ۷ تا عدد صحیح بگیری یا یه عدد صحیح ۷ رقمی و کاری که خواستی رو انجام بدی ؟
اگه ۷ تا عدد صحیحه ُ باید با حلقه از هم جدا بشن و جور دیگه ای نمیشه . چون اون موقع برنامه چطور بفهمه که عدد اولی تموم شده و بعدی شروع شده ؟
اگه یه عدد صحیح ۷ رقمیه ، از همون آرایه کارکتری می تونی استفاهد کنی . فقط بره جمع دو رقم باید کد زیرو بنویسی :
int sum=(int)(a[2]-48)+(int)(a[3]-48);
اگه بازم جایشو ابهام داری ، بگو تا رفع بشه .

amirali_mj
دوشنبه 18 دی 1391, 23:18 عصر
همینو میخواستم کارم راه افتاد دمت گرم :قلب:
فقط چرا منهای 48 میشه؟

mahak006
سه شنبه 19 دی 1391, 10:27 صبح
اون مربوط به کد های اسکی هستش . مثلا کد عدد0 برابر '48' هستش . بره همین با -48 کردن یه کد ، کی شه به عدد اصلی رسید و وقتی تبدیل به (int) می کنیم ، خود عدد به دست میاد .
اگه با مفهوم trace آشنایی داری ، یه بار برنامتو تریس کن و حین اجرا مقدار ذخیره شده به ازای هر رقم رو تو آرایت ببین . اون موقع راحت متوجه می شی دلیلش چیه .