سلام به دوستان
برنامه ای واسه ی این کار می خوام یه چیزهایی نوشتم اما بعضی حالتها رو جواب نمی ده .
Printable View
سلام به دوستان
برنامه ای واسه ی این کار می خوام یه چیزهایی نوشتم اما بعضی حالتها رو جواب نمی ده .
سلام.
برنامه ای که نوشتی رو بذار تا اشکالاش رو رفع کنیم.
این مربوط به جمع دو عدد اعشاریه بزرگه اما نمیدونم چرا فقط قسمت صحیحش رو جمع می کنه و بعد از ممیز رو جمع و چاپ نمی کنه میشه یه نگاهی بهش بندازید و بگید اشکالش کجاست .
ممنون
کد:#include<stdio.h>
#include<conio.h>
#include<string.h>
#define N 101
#define M 50
void main()
{
int i,j,m,n,t,k,q,p,A,B,carry,g,f;
char first[N],second[N],afirst[M],bfirst[M],asecond[M],bsecond[M],asum[M],bsum[M];
printf("type first number:");
scanf("%s",first);
printf("\ntype second number:");
scanf("%s",second);
for(i=0;i<strlen(first);i++)
if(first[i]=='.')
{n=i;
break;
}
for(j=0;j<strlen(second);j++)
if(second[j]=='.')
{m=j;
break;
}
for(i=0;i<n;i++)
afirst[i]=first[i]-'0';
for(i=n+1;i<strlen(first);i++)
bfirst[i]=first[i]-'0';
for(j=0;j<m;j++)
asecond[j]=second[j]-'0';
for(j=m+1;j<strlen(second);j++)
bsecond[j]=second[j]-'0';
A=strlen(first)-(n+1);
B=strlen(second)-(m+1);
if(A>B)
for(t=0;t<(A-B);t++)
strcat(bsecond,0);
else for(t=0;t<(B-A);t++)
strcat(bfirst,0);
//*********
p=(A>B?A:B); carry=0;
for(k=0;k<p;k++) bsum[k]=0;
for(k=p-1;k>=0;k--)
{bsum[k]=(bfirst[k]+bsecond[k]+carry)%10;
carry=(bfirst[k]+bsecond[k]+carry)/10;
}
//*********
q=(strlen(afirst)>strlen(asecond)?strlen(afirst):strlen(asecond));
for(k=0;k<=q;k++) asum[k]=0;
k=q;
for(i=(strlen(afirst)-1),j=(strlen(asecond)-1);i>=0&&j>=0;k--,j--,i--)
{asum[k]=(afirst[i]+asecond[j]+carry)%10;
carry=(afirst[i]+asecond[j]+carry)/10;
}
for(;i>=0;i--,k--)
{asum[k]=(afirst[i]+carry)%10;
carry=(afirst[i]+carry)/10;
}
for(;j>=0;j--,k--)
{asum[k]=(asecond[j]+carry)%10;
carry=(asecond[j]+carry)/10;
}
asum[k]=carry;
printf("\n sum is:");
for(k=0;k<=q;k++)
printf("%d",asum[k]);
printf("%c",'.');
for(k=0;k<strlen(bsum);k++)
printf("%d",bsum[k]);
getch();
}
سلام.
یه نمونه کد براتون گذاشتم. البته بهینه نیست و شما باید خودتون کاملش کنید.
در برنامه فرض شده عدد اول از عدد دوم بزرگتر هست و قسمت صحیح اعداد با هم برابرند.
از همون توابع والگوریتمی که در موردش صحبت شد استفاده شده.
بازم میگم که خودتون باید کاملش کنید چون برنامه ناقص هست.
نمونه خروجی برنامه به این صورت هست :
و یاکد:45.32
39.88
-------
0544
ویاکد:6.4
5.9
-------
05
مشخص هست که نتایج درسته. با استفاده از FindPos قسمت اعشاری رو اصلاح کنید.کد:642.45
258.123456
642.450000
258.123456
-------
384326544
کد:#include <iostream>
using namespace std;
#define __MAX 100
//-------------------prototype function
void Rem(char* ch);
void Reverse_Show(char* Buffer);
int FindPos(char *num);
//------------------main
void main()
{
//----------------------------->> Variables
char num1[__MAX],num2[__MAX];
int len1,len2,len_t;
int n1[__MAX],n2[__MAX];
int Sub[__MAX];
int j_t , pos;
//----------------------------->> Inputs --> (num1 > num2)
cout << "Number1 : ";
cin >> num1;
cout << "Number2 : ";
cin >> num2;
//----------------------------->> Set lengths
len1 = (int)strlen(num1);
len2 = (int)strlen(num2);
len_t = len1 - len2;
if ( len_t > 0 )
{
for(int i = 0; i < len_t;i++)
strcat(num2,"0");
j_t = len1;
pos = FindPos(num1);
}
else
{
for(int i = 0; i < abs(len_t);i++)
strcat(num1,"0");
j_t = len2;
pos = FindPos(num2);
}
cout <<num1 << "\n" << num2 <<"\n\n";
//---------------------------------------> Remove '.'
Rem(num1);
Rem(num2);
//---------------------------------------> Integer Arrays:
for(int i=0 ;i < j_t-1; i++)
n1[i] = num1[i] - '0';
for(int i=0 ;i < j_t-1; i++)
n2[i] = num2[i] - '0';
//---------------------------------------> subtracts
int k=0;
while(true)
{
if ( n1[j_t - 2] < n2[j_t - 2] )
{
n1[j_t - 2] += 10;
n1[j_t - 3] -= 1;
}
Sub[j_t] = n1[j_t - 2] - n2[j_t - 2];
j_t--;
k++;
if (j_t < 0 )
break;
}
//--------------------------------> to String and return '.'
char Buf[__MAX];
for( int i = 2;i < k;i++)
Buf[i-2] = Sub[i] + '0';
Buf[k-2] = '\0';
cout << Buf;
}
void Rem(char* ch)
{
char temp[__MAX];
int j = 0;
for(int i=0; i< (int)strlen(ch); i++)
{
if (ch[i] != '.' )
{
temp[j] = ch[i];
j++;
}
else
j+=0;
}
temp[j] = '\0';
strcpy(ch,temp);
}
int FindPos(char *num)
{
int temp;
for(int i=0;i<strlen(num);i++)
{
if( num[i] == '.' )
{
temp = i+1;
break;
}
}
return temp;
}
ممنون someone عزیز
دارم بررسی اش می کنم .