Jump to content

Recommended Posts

Posted (edited)

Boa tarde.

Estou com grandes dificuldades em construir as funções seguintes.

Alguem tem alguma dica para me ajudar a resolver este exercício??

Enunciado:

Pretende-se construir um conjunto de funções que suportem aritmética básica com números

inteiros positivos grandes, isto é, muito maiores que os tipos unsigned int e unsigned long

podem suportar. Com esse objectivo foi definido o tipo BigNumber que consiste num array de

valores numéricos em que o primeiro indica o total de dígitos signicativos presentes no número.

Considere as seguintes declarações/definições:

#define MAX_SIZE 255 // máximo numero de dígitos de um big number 
#define FIRST_DIG_IDX 1 // posição correspondente ao dígito menos significativo 
#define SIZE_IDX 0 // posição onde está presente o total de dígitos 
// significativos. 


typedef unsigned char byte; 
typedef byte BIG_NUMBER [MAX_SIZE+1]; 


/*-------------------------------------------- 
Cria um big number com o valor do inteiro val. 
Note que o primeiro elemento de um big number (posição SIZE_IDX) 
indica o número de dígitos significativos nele presentes. 
*/ 
void big_create(BIG_NUMBER n, int val) { 
int i=FIRST_DIG_IDX; 
do { 
n[i++] = val % 10; 
val /= 10; 
} 
while (val > 0); 
n[size_IDX] = i-1; 

} 




/*---------------------------------------------------- 
Adiciona os big numbers n1 e n2 deixando o resultado em res 
Retorna 0 se a adição teve sucesso ou -1 se ocorreu overflow 
*/ 
int big_add(BIG_NUMBER n1, BIG_NUMBER n2, BIG_NUMBER res); 


/*---------------------------------------------------- 
multiplica os big numbers n1 e n2 deixando o resultado em res 
Retorna 0 se a multiplicação teve sucesso ou -1 se ocorreu overflow. 
*/ 
int big_mul(BIG_NUMBER n1, BIG_NUMBER n2, BIG_NUMBER res); 

/*-------------------------------------------------- 
Apresenta um big number no standard output 

*/ 
void big_show(BIG_NUMBER n); 

Realize as funções big_add, big_mul e big_show, tal como especificadas. Na operação de mutiplicação

poderá usar duas abordagens: multiplicação por somas sucessivas ou o algoritmo da multiplicação aprendido

no primeiro ciclo. A primeira abordagem é mais simples mas menos eficiente. A segunda abordagem é mais

complexa mas mais eficiente, sendo naturalmente

Edited by thoga31
Tags code + GeSHi
Posted (edited)

Penso que tenho de fazer algo parecido com isto:

Exemplo

int x,y;

int multi = x * y ;

if (x != 0 && multi/x != y) ====> overflow

Este caso é para a multiplicação agora para a soma não estou a conseguir fazer.

Penso que também tenho de fazer typedef int ARRAYINT [MAX_SIZE]

ARRAYINT n1,n2; e estou muito perdido nesta matéria

Edited by João Areias
Posted (edited)

epa ... sinceramente não percebo porque razão, se a pergunta é a mais simples e minimalista possível as pessoas simplesmente ignoram e acham que uma resposta que não tem nada haver será melhor ...

o que é um overflow ?

a pergunta tem cinco palavras, não percebeste alguma delas ?

Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted

ok já percebi que isto é uma perca de tempo.

Um fórum que só existe uma pessoa a responder ou melhor armado em prof. a fazer perguntas quando se quer é respostas.

Eu sei o que é um Overflow, tanto que sei que não perguntei!! o que eu queria mesmo era uma dica para pegar no n1 e n2 e fazer uma condição que me devolva um 0 ou um -1

Obrigado pelas dicas (Y)

Posted

aqui ninguém anda armado em "prof", e, de mim, nunca terás as respostas de "mão beijada" porque não estou aqui para resolver os exercícios dos outros. quanto muito podes ter sorte e aparecer alguma alma caridosa que o faça ...

agora, no que toca à tua questão : se sabes o que é um Overflow escreve, porque se a definição tiver correcta, a resposta ao teu problema aparecerá escrita

IRC : sim, é algo que ainda existe >> #p@p
Posted

ok já percebi que isto é uma perca de tempo.

Um fórum que só existe uma pessoa a responder ou melhor armado em prof. a fazer perguntas quando se quer é respostas.

Eu sei o que é um Overflow, tanto que sei que não perguntei!! o que eu queria mesmo era uma dica para pegar no n1 e n2 e fazer uma condição que me devolva um 0 ou um -1

Obrigado pelas dicas (Y)

O objectivo do P@P é orientar as pessoas para que elas possam, sempre que possível, chegar às respostas dos seus problemas por elas mesmas. O nosso objectivo é "dar um empurrão" na direcção certa.

Neste caso, o @HappyHippyHippo considera (e bem) que rever o conceito de overflow poderá ser um bom ponto de partida para que chegues a uma resolução da tua questão.

Nós também fazemos perguntas, não é só quem tem dúvidas que as faz - muitas vezes, as respostas às nossas questões contêm pistas fulcrais, se não mesmo a resolução completa, do problema que os membros expõem. Este é um desses casos - caso definas overflow nos termos correctos, terás uma óptima pista acerca do ponto onde deves pegar para implementares uma solução ao teu problema. A pergunta do @Happy não veio à toa. Nenhuma pergunta que fazemos vem à toa.

Em último lugar, apenas quero fazer notar que o facto de, aparentemente, apenas este ou aquele membro responderem deve-se ao facto dos membros terem uma vida fora do P@P, e cada um tem os seus conhecimentos. Cada membro vem ao P@P quando pode e responde àquilo que sabe e àquilo que pode responder. Se não tem tempo ou não sabe ou não pode, então é natural que não responda.

Acerca do problema por ti colocado neste tópico, e uma vez que o @Happy já está a (tentar) mostrar o caminho para a resolução da tua questão, nada mais tenho a acrescentar para além do que já foi referido nos últimos posts.

Cumprimentos.

Knowledge is free!

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.