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;
}