میخواستم دو عدد اعشاری رو با هم جمع کنم و نتیجه رو مشاهده کنم ولی با این شرط که فرض کنیم هنوز نوع داده اعشاری یعنی double یا float وجود ندارد
مثلا"
968.09+283.919
میخواستم دو عدد اعشاری رو با هم جمع کنم و نتیجه رو مشاهده کنم ولی با این شرط که فرض کنیم هنوز نوع داده اعشاری یعنی double یا float وجود ندارد
مثلا"
968.09+283.919
آخرین ویرایش به وسیله raranjbar : پنج شنبه 06 اسفند 1388 در 17:36 عصر دلیل: برای درج کدها از تگ مربوط به کد استفاده کنید /
سوال شما واضح نیست. می توانید بیشتر توضیح دهید؟؟ دقیقا قصد انجام چه عملی را دارید؟
آخرین ویرایش به وسیله simul8or : پنج شنبه 06 اسفند 1388 در 01:38 صبح دلیل: غلط نگارشی
آخرین ویرایش به وسیله raranjbar : پنج شنبه 06 اسفند 1388 در 17:35 عصر
برای هر عدد اعشاری از دو تا رشته استفاده کن. یکی برای قسمت صحیح و یکی برای قسمت اعشاری و خودت عمل جمع رو بنویس و رقم به رقم عمل جمع رو انجام بده. مثلاً اگه میخوای رقم xi رو با yi جمع کنی و رقم نقلی از مرحلهی قبل c باشه اونوقت جواب میشه:
z[i] = (x[i] + y[i] + c) % 10رقم نقلی مرحلهی بعد هم میشه:
c = (x[i] + y[i]] + c) / 10تابع جمع میتون اینطوری باشه:
char * sum(char * x, char * y, int c)دفعهی اول قسمت اعشاری رو بفرست که با هم جمع شن. فقط یادت باشه که رقم نقلی نهایی قسمتهای اعشاری رو یه جا ذخیر کنه تا برای جمع قسمت صحیح ازش استفاده کنی مثلاً اگه بخوای 0.1 رو با 1.9 جمع کنی بعد از انجام جمع قسمت اعشار رقم نقلی داری که باید ازش برای قسمت صحیح استفاده کنی (به همین دلیل هست که تابع sum آرگومان سوم به نام c داره که همون رقم نقلی هست)
دوست عزیز کد زیر قسمت صحیح و اعشار را بدون استفاده از float یا double جدا می کند:(مطمئنا این راحت ترین و کوتاهترین کد نیست):
قسمت صحیح که به راحتی جمع می شود.
#include <iostream>
#include <cstdlib>
////////////////////
//code by simul8or//
////////////////////
using namespace std ;
int dm(char*);
int main ()
{
char* a=new char;
char* b=new char;
int xi=0,yi=0,xd=0,yd=0;
cin>>a>>b;
xi=atoi(a);
yi=atoi(b);
xd=dm(a);
yd=dm(b);
system("pause");
return 0 ;
}
int dm(char* temp)
{
temp=strchr(temp,'.');
temp[0]='1';
return atoi(temp);
}
اما قسمت اعشار: به اول تمام اعداد اعشار عدد 1 اضافه شده است، بنابر این اعدادی مانند 005 به صورت 1005 در متغییر از نوع int بدون از دست دادن صفر ها ذخیره می شوند.
حال شما می توانید با نوشتن یک تابع عمل جمع را به صورت زیر انجام دهید:
فرض کنید دو قسمت اعشار 1919 و 109 باید با هم جمع شوند،(یعنی 0.919 و 0.09) برای این کار ابتدا اعداد را معکوس کنید(تابع آن موجود است) اعداد می شوند 9191 و 901 عدد 1 را حذف کنید، اعداد می شوند 919 و 90 و آخرین مرحله جمع این دو عدد است که باید به صورت عکس جمع معمولی صورت گیرد یعنی 9+0 و 1+9 و 9+0 و در هر مرحله کری به جای انتقال به رقم سمت چپ ، به راست می رود. درست عکس عمل جمع عادی. و در آخر با معکوس کردن حاصل جمع، قسمت اعشار نیز بدست می آید.
باز تاکید می کنم این ساده ترین راه نیست.
این برنامه حداکثر دو عدد صحیح 500 رقمی رو با هم جمع میکه ولی نمی دونم چه کدی به این برنامه اضافه کنم تا این برنامه بتونه دو عدد اعشاری رو بدون استفاده از نوع double و float جمع کنه.#include <IOstream>
#include <String>
using namespace std;
const int Lenght = 500;
void Sum(char *FirstNum,char *SecondNum);
void Rev(char *Str);
int main()
{
char First[Lenght];
char Second[Lenght];
cout << "Type Number" << "\n";
cin >> First >> Second;
Sum(First,Second);
return 0;
}
void Sum(char *FirstNum,char *SecondNum)
{
int iFirstLen,iFirst;
int iSecondLen,iSecond;
int iSum;
int carry = 0;
char cSum[Lenght];
int k = 0;
iFirstLen = strlen(FirstNum) - 1;
iSecondLen = strlen(SecondNum) - 1;
while( iFirstLen >=0 || iSecondLen >=0)
{
iFirst = FirstNum[iFirstLen] - 48;
iSecond = SecondNum[iSecondLen] - 48;
if( iFirstLen < 0 )
iFirst = 0;
if( iSecondLen < 0 )
iSecond = 0 ;
iSum = iFirst + iSecond + carry;
if(iSum > 9)
carry = 1;
else
carry = 0;
cSum[k] = ( iSum % 10 ) + 48;
k++;
iFirstLen --;
iSecondLen--;
}
if( carry == 1)
{
cSum[k] = iSum % 10 + 48;
cSum[k++] = '\0';
}
else
cSum[k] = '\0';
Rev(cSum);
cout << "\n" << cSum << endl;
}
void Rev(char *str)
{
int iStr;
char temp[Lenght];
iStr = strlen(str) - 1 ;
int i = 0;
for(int k = iStr ; k >= 0 ; k--)
{
temp[i] = str[k];
i++;
}
temp[i] = '\0';
strcpy(str,temp);
}
کسی میتونه توضیح بیشتری بده؟
شما تو کاغذ چه جوری دو تا عدد اعشاری رو جمع میکنی ؟خوب شما که میگید کار سختی نیست یه کم کمک کنید تا معلوم بشه کار سختی هست یا نه
از سمت راست ممیز ...
خوب همینو پیاده سازی کن .
همه چیز رو که آماده (هلو بپر تو گلو) به آدم نمیدن . خودتون هم باید کمی خلاقیت به خرج بدین .