udixe191 Posted May 16, 2014 at 04:54 PM Report #555988 Posted May 16, 2014 at 04:54 PM (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 May 16, 2014 at 09:14 PM by thoga31 Tags code + GeSHi
HappyHippyHippo Posted May 16, 2014 at 04:57 PM Report #555990 Posted May 16, 2014 at 04:57 PM vou-me cingir ao título do tópico : qual é mesmo a dúvida ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
udixe191 Posted May 16, 2014 at 05:03 PM Author Report #555993 Posted May 16, 2014 at 05:03 PM A minha princial dificuldade é construir uma condição para concluir se ocorreu um overflow ou não
HappyHippyHippo Posted May 16, 2014 at 05:16 PM Report #556006 Posted May 16, 2014 at 05:16 PM pensa : o que é um overflow ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
udixe191 Posted May 16, 2014 at 05:28 PM Author Report #556009 Posted May 16, 2014 at 05:28 PM (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 May 16, 2014 at 05:33 PM by João Areias
HappyHippyHippo Posted May 16, 2014 at 06:16 PM Report #556019 Posted May 16, 2014 at 06:16 PM (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 May 16, 2014 at 06:16 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
udixe191 Posted May 16, 2014 at 06:22 PM Author Report #556021 Posted May 16, 2014 at 06:22 PM 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)
HappyHippyHippo Posted May 16, 2014 at 06:28 PM Report #556023 Posted May 16, 2014 at 06:28 PM 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 Portugol Plus
thoga31 Posted May 16, 2014 at 09:44 PM Report #556030 Posted May 16, 2014 at 09:44 PM 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!
Recommended Posts