Hi everybody. I need help with the problem below. I studied C and I want to learn C++. Actually this is a problem of the first chapter of the book. It really made me crazy..! Thanks for your help. *************************************************************** Write a program that will act as an interactive calculator capable of handling very large (larger than the largest long integer) nonnegative integers. This calculator need perform only the operations of addition and multiplication. Needs: *A data structure to represent large numbers:for example an array of digits in a number. *A function to read in numbers. *A function to write numbers. *A function to add two numbers. *A function to multiply two numbers. *Check for overflow (numbers with more than MAX_SIZE digits) when reading, adding, and multiplying numbers. *Allow signed integers (negative as well as positive integers) and write a function for substraction.
السلام عليكم ... brother>> what u want ‘‘‘ use in this programme ?? when u use just function i can help u *ـ* but **array idont have alot information abut it ?? good luke
I made it.Variables defined in program are in Turkish. Any suggestion for shortening the Line of Codes? Code: #include <iostream> #include <string> #include <cctype> using namespace std; string sayi_1,sayi_2; void sayiOku () { cout << "\nBirinci sayiyi giriniz : "; cin >> sayi_1; cout << "Ikinci sayiyi giriniz : "; cin >> sayi_2; } void sayiYaz() { cout << '\n' << "Girilen ilk sayi : " << sayi_1 << endl; cout << "Girilen ikinci sayi : " << sayi_2 << endl; } void toplama (int p_dizi_sayi_1[],int p_dizi_sayi_2[],int u) { int sonuc[u]; for(int j=0;j<u;++j) sonuc[j]=0; int i,j,s,elde=0; for(s=u-1,i=u-1,j=u-1;i>=0,s>=0,j>=0;--i,--s,--j) { sonuc[s]=p_dizi_sayi_1[i]+p_dizi_sayi_2[j]+elde; if(sonuc[s]>9) { sonuc[s]=sonuc[s]%10; elde=1; } else elde=0; } cout << "\n" << "SONUC = " ; for(int i=0;i<u;++i) cout << sonuc[i]; cout << endl << '\n'; } void carpma (int p_sayi_1[],int p_sayi_2[],int p_uzunluk,int p_kisa,int p_bayrak) { int sayac,elde,carpim,toplam,gecici[p_uzunluk],sonuc[p_uzunluk],j=0,t=0; for(int i=0;i<p_uzunluk;++i) { gecici[i]=0; sonuc[i]=0; } for (int k=0;k<p_kisa;k++) { elde=0; for (sayac=0;sayac<p_uzunluk/2;sayac++) { switch(p_bayrak) { case 1:carpim=p_sayi_2[p_uzunluk/2-1-t]*p_sayi_1[p_uzunluk/2-1-sayac];break; case 2:carpim=p_sayi_1[p_uzunluk/2-1-t]*p_sayi_2[p_uzunluk/2-1-sayac];break; } gecici[p_uzunluk-1-sayac-j]=(carpim+elde)%10; elde=(carpim+elde)/10; } if ((sayac==(p_uzunluk/2)) && (elde!=0)) gecici[p_uzunluk-1-sayac-j]=elde; elde=0; for(int i=0;i<p_uzunluk;++i) { toplam=sonuc[p_uzunluk-1-i]+gecici[p_uzunluk-1-i]+elde; elde=toplam/10; sonuc[p_uzunluk-1-i]=toplam%10; } ++t; ++j; for(int i=0;i<p_uzunluk;++i) gecici[i]=0; } cout << "\n" << "SONUC = " ; for(int i=0;i<p_uzunluk;++i) cout << sonuc[i] ; cout << endl; } int main () { int uzunluk_sayi_1,uzunluk_sayi_2,uzunluk_toplama, uzunluk_carpma,bayrak,kisa,dizi_uzun; char cevap,devammi; do { sayiOku(); sayiYaz(); uzunluk_sayi_1=sayi_1.size(); uzunluk_sayi_2=sayi_2.size(); if(uzunluk_sayi_1>uzunluk_sayi_2){ dizi_uzun=uzunluk_sayi_1; uzunluk_toplama=uzunluk_sayi_1+1; uzunluk_carpma=uzunluk_sayi_1*2; bayrak=1; kisa=uzunluk_sayi_2;} else {dizi_uzun=uzunluk_sayi_2; uzunluk_toplama=uzunluk_sayi_2+1; uzunluk_carpma=uzunluk_sayi_2*2; bayrak=2; kisa=uzunluk_sayi_1;} int dizi_sayi_1[dizi_uzun],dizi_sayi_2[dizi_uzun]; for (int i=0 ; i<uzunluk_toplama ; ++i ){ dizi_sayi_1[i]=0; dizi_sayi_2[i]=0;} for (int i=0 ; i<uzunluk_sayi_1 ; ++i ) dizi_sayi_1[dizi_uzun-1-i]=sayi_1[uzunluk_sayi_1-1-i]%48; for (int i=0 ; i<uzunluk_sayi_2 ; ++i ) dizi_sayi_2[dizi_uzun-1-i]=sayi_2[uzunluk_sayi_2-1-i]%48; do { cout << "\nWhich one? ( * / + ) : "; cin >> cevap; if(cevap=='+'||cevap=='*') break; } while (cevap!='+'||cevap!='*'); switch (cevap) { case '+':toplama(dizi_sayi_1,dizi_sayi_2,uzunluk_toplama); break; case '*':carpma(dizi_sayi_1,dizi_sayi_2,uzunluk_carpma,kisa,bayrak); break; default :cout << "Wrong choice..!"; } cout << "Do you wanna continue (Y / y) : " ; cin >> devammi; } while (devammi=='e'||devammi=='E'); }
There is sth wrong in the addition function.This is the last version. Code: #include <iostream> #include <string> #include <cctype> using namespace std; string sayi_1,sayi_2; void sayiOku () { cout << "\nFirst number : "; cin >> sayi_1; cout << "Second number : "; cin >> sayi_2; } void sayiYaz() { cout << '\n' << "first number : " << sayi_1 << endl; cout << "second number : " << sayi_2 << endl; } void toplama (int p_dizi_sayi_1[],int p_dizi_sayi_2[],int u) { int sonuc[u]; for(int j=0;j<u;++j) sonuc[j]=0; int i,j,s,elde=0; for(s=u-1,i=u-1,j=u-1;i>0,s>0,j>0;--i,--s,--j) { sonuc[s]=p_dizi_sayi_1[i-1]+p_dizi_sayi_2[j-1]+elde; if(sonuc[s]>9) { sonuc[s]=sonuc[s]%10; elde=1; } else elde=0; } cout << "\n" << "SONUC = " ; for(int i=0;i<u;++i) cout << sonuc[i]; cout << endl << '\n'; } void carpma(int p_sayi_1[],int p_sayi_2[],int p_uzunluk,int p_kisa,int p_bayrak) { int sayac,elde,carpim,toplam,gecici[p_uzunluk],sonuc[p_uzunluk],j=0,t=0; for(int i=0;i<p_uzunluk;++i) { gecici[i]=0; sonuc[i]=0; } for (int k=0;k<p_kisa;k++) { elde=0; for (sayac=0;sayac<p_uzunluk/2;sayac++) { switch(p_bayrak) { case 1:carpim=p_sayi_2[p_uzunluk/2-1-t]*p_sayi_1[p_uzunluk/2-1-sayac];break; case 2:carpim=p_sayi_1[p_uzunluk/2-1-t]*p_sayi_2[p_uzunluk/2-1-sayac];break; } gecici[p_uzunluk-1-sayac-j]=(carpim+elde)%10; elde=(carpim+elde)/10; } if ((sayac==(p_uzunluk/2)) && (elde!=0)) gecici[p_uzunluk-1-sayac-j]=elde; elde=0; for(int i=0;i<p_uzunluk;++i) { toplam=sonuc[p_uzunluk-1-i]+gecici[p_uzunluk-1-i]+elde; elde=toplam/10; sonuc[p_uzunluk-1-i]=toplam%10; } ++t; ++j; for(int i=0;i<p_uzunluk;++i) gecici[i]=0; } cout << "\n" << "SONUC = " ; for(int i=0;i<p_uzunluk;++i) cout << sonuc[i] ; cout << endl; } int main () { int uzunluk_sayi_1,uzunluk_sayi_2,uzunluk_toplama, uzunluk_carpma,bayrak,kisa,dizi_uzun; char cevap,devammi; do { sayiOku(); sayiYaz(); uzunluk_sayi_1=sayi_1.size(); uzunluk_sayi_2=sayi_2.size(); if(uzunluk_sayi_1>uzunluk_sayi_2){ dizi_uzun=uzunluk_sayi_1; uzunluk_toplama=uzunluk_sayi_1+1; uzunluk_carpma=uzunluk_sayi_1*2; bayrak=1; kisa=uzunluk_sayi_2;} else {dizi_uzun=uzunluk_sayi_2; uzunluk_toplama=uzunluk_sayi_2+1; uzunluk_carpma=uzunluk_sayi_2*2; bayrak=2; kisa=uzunluk_sayi_1;} int dizi_sayi_1[dizi_uzun],dizi_sayi_2[dizi_uzun]; for (int i=0 ; i<uzunluk_toplama ; ++i ){ dizi_sayi_1[i]=0; dizi_sayi_2[i]=0;} for (int i=0 ; i<uzunluk_sayi_1 ; ++i ) dizi_sayi_1[dizi_uzun-1-i]=sayi_1[uzunluk_sayi_1-1-i]%48; for (int i=0 ; i<uzunluk_sayi_2 ; ++i ) dizi_sayi_2[dizi_uzun-1-i]=sayi_2[uzunluk_sayi_2-1-i]%48; do { cout << "\nWhich one? ( * / + ) : "; cin >> cevap; if(cevap=='+'||cevap=='*') break; } while (cevap!='+'||cevap!='*'); switch (cevap) { case '+':toplama(dizi_sayi_1,dizi_sayi_2,uzunluk_toplama); break; case '*':carpma(dizi_sayi_1,dizi_sayi_2,uzunluk_carpma,kisa,bayrak); break; default :cout << "Wrong choice..!"; } cout << "Continue? (Y / y) : " ; cin >> devammi; } while (devammi=='e'||devammi=='E'); }
change this Code: ............. if(sonuc[s]>9){ sonuc[s]=sonuc[s]%10; elde=1; }else elde=0; } [COLOR=Red]sonuc[s]=elde;[/COLOR]//add this line cout << [COLOR=Red]endl[/COLOR]<< "SONUC = " ; ........ also change this Code: ........... cin >> devammi; }while (devammi[COLOR="Red"]!=[/COLOR]'e' [COLOR="Red"]&&[/COLOR] devammi[COLOR="Red"]!=[/COLOR]'E'); ........
Are you sure your compiler is not complaining??... Code: void toplama (int p_dizi_sayi_1[],int p_dizi_sayi_2[],int u) { int sonuc[u]; // HOW IS THIS POSSIBLE??????
Code: // HOW IS THIS POSSIBLE?????? void carpma(int p_sayi_1[],int p_sayi_2[],int p_uzunluk,int p_kisa,int p_bayrak) { int sayac,elde,carpim,toplam,gecici[p_uzunluk],sonuc[p_uzunluk],j=0,t=0;
Thanks for your advices. Also there is no problem now. I made a mistake while i was writing the message (There is / There was). I don't use English in my daily life. Sorry!? and micsom i don't understand your problem?