Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C++ (http://www.go4expert.com/forums/cpp/)
-   -   A C++ problem! (http://www.go4expert.com/forums/a-cpp-problem-t24264/)

h994422 25Dec2010 21:11

A C++ problem!
 
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.

wafa 26Dec2010 03:19

Re: A C++ problem!
 
السلام عليكم ...
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

virxen 26Dec2010 21:11

Re: A C++ problem!
 
your code so far?

h994422 27Dec2010 23:49

Re: A C++ problem!
 
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');
}


h994422 28Dec2010 00:29

Re: A C++ problem!
 
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');
}


h994422 28Dec2010 00:35

Re: A C++ problem!
 
There was ..

virxen 28Dec2010 00:57

Re: A C++ problem!
 
change this

Code:

.............
        if(sonuc[s]>9){
            sonuc[s]=sonuc[s]%10;
            elde=1;
        }else
            elde=0;
    }
    sonuc[s]=elde;//add this line
    cout << endl<< "SONUC = " ;
........

also change this

Code:

...........
    cin >> devammi;
}while (devammi!='e' && devammi!='E');
........


micsom_micsom 28Dec2010 15:31

Re: A C++ problem!
 
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??????


micsom_micsom 28Dec2010 15:33

Re: A C++ problem!
 
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;


virxen 28Dec2010 17:01

Re: A C++ problem!
 
Quote:

Originally Posted by micsom_micsom (Post 76529)
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??????



in dev c++ there is no problem to compile this.What's your compiler?


All times are GMT +5.5. The time now is 18:46.