Classe HugeInteger. Crie uma classe HugeInteger que use um array de 40 elementos de dígitos para armazenar inteiros com até 40 dígitos cada. Forneça funções- -membro input, output, add e subtract. Para comparar objetos HugeInteger, forneça funções isEqualTo, isNotEqualTo, isGreaterThan, isLessThan, isGreaterThanOrEqualTo e isLessThanOrEqualTo — cada uma delas é uma função ‘predicado’ que simplesmente retorna true se o relacionamento for mantido entre os dois HugeIntegers, e retorna false se o relacionamento não for mantido. Além disso, forneça uma função predicado isZero. Se você for ambicioso, forneça funções-membro multiply, divide e modulus.

Passo 1

Fala Galera!!! Tudo certo? Espero que sim!! Bora para mais um exercício.

Nesse exercício vamos criar um programa que utiliza uma classe Hugeinteger responsável por definir um array de 40 elementos para armazenar inteiros. Nosso programa será capaz de comparar dois inteiros com até 40 dígitos cada, retornar true se forem iguais e false se forem diferentes. Além disso o programa terá que realizar operações nos arrays armazenados, como por exemplo subtração e soma.

Passo 2

Vamos iniciar definindo as implantações do nosso programa junto com a classe que irá conter as funções-membros do programa:

#ifndef HUGEINT1_H

#define HUGEINT1_H

//implementações

#include

using std::cout;

class HugeInteger {

public:

HugeInteger( long = 0 ); // construtor de conversão/defaultor

HugeInteger add( const HugeInteger & );// operador adicional; HugeInt + HugeInt

HugeInteger subtract( const HugeInteger & );// operador de subtracção; HugeInt - HugeInt

//definindo funções

bool isEqualTo( HugeInteger & );

bool isNotEqualTo( HugeInteger & );

bool isGreaterThan(HugeInteger & );

bool isLessThan( HugeInteger & );

bool isGreaterThanOrEqualTo( HugeInteger & );

bool isLessThanOrEqualTo( HugeInteger & );

bool isZero();

void output();

short* getInteger()

{

return integer;

}

private:

//definindo aray

short integer[ 40 ];

};

#endif

Passo 3

Após definir a classe vamos iniciar o construtor da classe e definir as funções que serão responsáveis por colocar os dígitos do argumento no array e realizar as operações de adição e subtração e verificar se são iguais. Vamos implementar também duas funções para comparar se um array é menor ou maior que outro.

// construtor padrão; construtor de conversão

// um inteiro longo em um object HugeInteger

HugeInteger::HugeInteger( long value )

{

// inicializa o array para zero

for ( int i = 0; i

integer[ i ] = 0;

//coloca os dígitos do argumento no array

for ( int j = 39; value != 0 && j >= 0; j-- )

{

integer[ j ] = value % 10;

value /= 10;

}

}

// operador de adição; HugeInteger + HugeInteger

HugeInteger HugeInteger::add( const HugeInteger &op2 )

{

HugeInteger temp;

int carry = 0;

// iterar por HugeInteger

for ( int i = 39; i >= 0; i-- ) {

temp.integer[ i ]=integer[ i ] + op2.integer[ i ] + carry;

// determina se deve carregar um 1

if ( temp.integer[ i ] > 9 )

{ temp.integer[ i ] %= 10; // reduzir para 0-9

carry = 1;}

else

carry = 0;}

return temp;

}

void HugeInteger::output()

{

int i;

for ( i = 0; ( integer[ i ] == 0 ) && ( i

;

// pula zeros à esquerda

if ( i == 40 )

cout

else

for ( ; i

cout

}

//função para subtrair dois HugeIntegers

HugeInteger HugeInteger::subtract( const HugeInteger &op2 )

{

HugeInteger temp;

int borrow = 0;

for ( int i = 39; i >= 0; i-- )

{

// determina adicionar 10 a um inteiro menor

if ( integer[i]

{temp.integer[ i ]=(integer[i]+10)-op2.integer[i]- borrow;

borrow = 1;}

else

{temp.integer[ i ]=integer[i] - op2.integer[ i ] - borrow;

borrow = 0;}

}

return temp;

}

// função que testa se dois HugeIntegers são iguais

bool HugeInteger::isEqualTo( HugeInteger &x )

{ return integer == x.getInteger(); }

// função que testa se dois HugeIntegers não são iguais

bool HugeInteger::isNotEqualTo( HugeInteger &x )

{ return !( this->isEqualTo( x ) ); }

// função para testar se um HugeInteger é maior que outro

bool HugeInteger::isGreaterThan( HugeInteger &x )

{ return integer

// função que testa se um HugeInteger é menor que outro

bool HugeInteger::isLessThan( HugeInteger &x )

{ return integer > x.getInteger(); }

// função que testa se um HugeInteger é maior que

// ou igual a outro

bool HugeInteger::isGreaterThanOrEqualTo( HugeInteger &x )

{ return integer

// função que testa se um HugeInteger é menor ou

// igual a outro

bool HugeInteger::isLessThanOrEqualTo( HugeInteger &x )

{ return integer >= x.getInteger(); }

// function that tests if a HugeInteger is zero

// função que testa se um HugeInteger é zero

bool HugeInteger::isZero()

{ return ( getInteger() == 0 ); }

Passo 4

Agora vamos inicializar a função principal main() criar os objetos da classe com 5 inteiro para realizara as operações e fazer as chamadas das funções. Para cada operação será exibida o resultado.

int main()

{

HugeInteger n1( 7654321 );

HugeInteger n2( 7891234 );

HugeInteger n3;

HugeInteger n4( 5 );

HugeInteger n5;

n5 = n1.add( n2 );

n1.output();

cout

cout

cout

n5 = n2.subtract( n4 );

n2.output();

cout

cout

cout

if ( n1.isEqualTo( n1 ) == true )

{n1.output();cout

if ( n1.isNotEqualTo( n2 ) == true )

{n1.output();cout

if ( n2.isGreaterThan( n1 ) == true )

{n2.output();cout

if ( n2.isLessThan( n4 ) == true )

{n4.output();cout

if( n4.isLessThanOrEqualTo( n4 ) == true )

{n4.output();cout

cout

if ( n3.isGreaterThanOrEqualTo( n3 ) == true )

{n3.output();cout

cout

if ( n3.isZero() != true )

{cout

return 0;

}

Passo 5

De acordo com os objetos definidos para nossa classe a saída do nosso programa será:

Portanto nosso programa está funcionado perfeitamente.

E por hoje é só galera!!! Até o próximo exercício

Resposta

Código:

#ifndef HUGEINT1_H

#define HUGEINT1_H

//implementações

#include

using std::cout;

class HugeInteger {

public:

HugeInteger( long = 0 ); // construtor de conversão/defaultor

HugeInteger add( const HugeInteger & );// operador adicional; HugeInt + HugeInt

HugeInteger subtract( const HugeInteger & );// operador de subtracção; HugeInt - HugeInt

//definindo funções

bool isEqualTo( HugeInteger & );

bool isNotEqualTo( HugeInteger & );

bool isGreaterThan(HugeInteger & );

bool isLessThan( HugeInteger & );

bool isGreaterThanOrEqualTo( HugeInteger & );

bool isLessThanOrEqualTo( HugeInteger & );

bool isZero();

void output();

short* getInteger()

{

return integer;

}

private:

//definindo aray

short integer[ 40 ];

};

#endif

// construtor padrão; construtor de conversão

// um inteiro longo em um object HugeInteger

HugeInteger::HugeInteger( long value )

{

// inicializa o array para zero

for ( int i = 0; i

integer[ i ] = 0;

//coloca os dígitos do argumento no array

for ( int j = 39; value != 0 && j >= 0; j-- )

{

integer[ j ] = value % 10;

value /= 10;

}

}

// operador de adição; HugeInteger + HugeInteger

HugeInteger HugeInteger::add( const HugeInteger &op2 )

{

HugeInteger temp;

int carry = 0;

// iterar por HugeInteger

for ( int i = 39; i >= 0; i-- ) {

temp.integer[ i ]=integer[ i ] + op2.integer[ i ] + carry;

// determina se deve carregar um 1

if ( temp.integer[ i ] > 9 )

{ temp.integer[ i ] %= 10; // reduzir para 0-9

carry = 1;}

else

carry = 0;}

return temp;

}

void HugeInteger::output()

{

int i;

for ( i = 0; ( integer[ i ] == 0 ) && ( i

;

// pula zeros à esquerda

if ( i == 40 )

cout

else

for ( ; i

cout

}

//função para subtrair dois HugeIntegers

HugeInteger HugeInteger::subtract( const HugeInteger &op2 )

{

HugeInteger temp;

int borrow = 0;

for ( int i = 39; i >= 0; i-- )

{

// determina adicionar 10 a um inteiro menor

if ( integer[i]

{temp.integer[ i ]=(integer[i]+10)-op2.integer[i]- borrow;

borrow = 1;}

else

{temp.integer[ i ]=integer[i] - op2.integer[ i ] - borrow;

borrow = 0;}

}

return temp;

}

// função que testa se dois HugeIntegers são iguais

bool HugeInteger::isEqualTo( HugeInteger &x )

{ return integer == x.getInteger(); }

// função que testa se dois HugeIntegers não são iguais

bool HugeInteger::isNotEqualTo( HugeInteger &x )

{ return !( this->isEqualTo( x ) ); }

// função para testar se um HugeInteger é maior que outro

bool HugeInteger::isGreaterThan( HugeInteger &x )

{ return integer

// função que testa se um HugeInteger é menor que outro

bool HugeInteger::isLessThan( HugeInteger &x )

{ return integer > x.getInteger(); }

// função que testa se um HugeInteger é maior que

// ou igual a outro

bool HugeInteger::isGreaterThanOrEqualTo( HugeInteger &x )

{ return integer

// função que testa se um HugeInteger é menor ou

// igual a outro

bool HugeInteger::isLessThanOrEqualTo( HugeInteger &x )

{ return integer >= x.getInteger(); }

// function that tests if a HugeInteger is zero

// função que testa se um HugeInteger é zero

bool HugeInteger::isZero()

{ return ( getInteger() == 0 ); }

int main()

{

HugeInteger n1( 7654321 );

HugeInteger n2( 7891234 );

HugeInteger n3;

HugeInteger n4( 5 );

HugeInteger n5;

n5 = n1.add( n2 );

n1.output();

cout

cout

cout

n5 = n2.subtract( n4 );

n2.output();

cout

cout

cout

if ( n1.isEqualTo( n1 ) == true )

{n1.output();cout

if ( n1.isNotEqualTo( n2 ) == true )

{n1.output();cout

if ( n2.isGreaterThan( n1 ) == true )

{n2.output();cout

if ( n2.isLessThan( n4 ) == true )

{n4.output();cout

if( n4.isLessThanOrEqualTo( n4 ) == true )

{n4.output();cout

cout

if ( n3.isGreaterThanOrEqualTo( n3 ) == true )

{n3.output();cout

cout

if ( n3.isZero() != true )

{cout

return 0;

}