Dexter's Lab Posted February 13, 2013 at 11:35 AM Report #495082 Posted February 13, 2013 at 11:35 AM Pessoal, deparei-me com o seguinte problema: 66) Faca um programa que leia 2 numeros inteiros da entrada e imprima o resto da divisao inteira do primeiro pelo segundo, utilizando o metodo de subtrações sucessivas. Exemplo: Valores lidos: 15 4 Saída do programa: 3 Dica: 15 % 4 = 15 - 4 - 4 - 4 = 3 Já o completei. A minha dúvida é no programa seguinte: 67) Altere o programa do exercicio anterior para que, caso a divisao nao seja exata, o usuario seja informado. Como posso verificar se o valor não é inteiro? Sinto-me completamente desarmado, agora. Aquilo que me vem à cabeça é promover a variável a float e ver o módulo, mas não é possível ver o módulo com o tipo de dados float. Não estou a ver como posso conseguir essa informação. Qualquer ajuda é bem-vinda.
HappyHippyHippo Posted February 13, 2013 at 11:41 AM Report #495084 Posted February 13, 2013 at 11:41 AM estás longe da solução um valor exacto de uma divisão inteira é somente verificar se o seu resultado é o resultado verdadeiro em |R: exemplos : 24/3 = 8 => divisão exacta 27/5 = 5 => divisão não é exacta porque o resultado não é propriamente 5 ... agora, para saber isto não necessitas de converter nada ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Dexter's Lab Posted February 13, 2013 at 11:58 AM Author Report #495086 Posted February 13, 2013 at 11:58 AM Pois, mas o C automaticamente arredonda o valor se ele for inteiro. A minha questão é essa, como posso identificá-lo em C como |R sem o promover?
pmg Posted February 13, 2013 at 12:05 PM Report #495090 Posted February 13, 2013 at 12:05 PM Se a divisão for exacta, qual é o resto da divisão? Sempre que o resto da divisão for <o número que disseste para a pergunta anterior>, a divisão é exacta? Eu digo que SIM, mas prova isso antes de escreveres o programa. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Dexter's Lab Posted February 13, 2013 at 02:00 PM Author Report #495111 Posted February 13, 2013 at 02:00 PM Acabei por perceber que o meu algoritmo para encontrar o modulo através de subtrações está incorreto. Fiz como condição de paragem para o ciclo for chegar até ao numero de repetições que tem o 2º valor. Dava no exemplo que eles deram mas não dava noutros. Enfim, estou farto de procurar, ninguém me pode dizer o algoritmo matemático ou o padrão que me pode fazer chegar ao resultado do módulo através de subtrações?
pmg Posted February 13, 2013 at 02:07 PM Report #495112 Posted February 13, 2013 at 02:07 PM Valores lidos: 15 4 Saída do programa: 3 (divisao nao exacta) Dica: 15 % 4 = 15 - 4 - 4 - 4 = 3 What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Dexter's Lab Posted February 13, 2013 at 02:42 PM Author Report #495118 Posted February 13, 2013 at 02:42 PM (edited) void MODULO_(int *a, int *b) { int cont; while (*a != *a%*b) { *a -= *b; } } Fiz desta forma, mas a minha intenção era nunca usar o % no programa. Edited February 13, 2013 at 02:42 PM by Dexter's Lab
HappyHippyHippo Posted February 13, 2013 at 02:45 PM Report #495119 Posted February 13, 2013 at 02:45 PM responde a esta questão : se tens 15 % 4 = 15 - 4 - 4 - 4 porque razão não é : 15 % 4 = 15 - 4 - 4 - 4 - 4 - 4 - 4 - 4 ou 15 % 4 = 15 - 4 - 4 ??? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
thoga31 Posted February 13, 2013 at 02:47 PM Report #495120 Posted February 13, 2013 at 02:47 PM (edited) 15 % 4 = 3 não é exacto, mas 20 % 5 é. Porquê? Explicação: 1º: 15 % 4 = 15 - 4 - 4 - 4 = 3 => Resultado = 3 2º: 20 % 4 = 20 - 4 - 4 - 4 - 4 - 4 = 0 => Resultado = 5 Edited February 13, 2013 at 02:49 PM by thoga31 Knowledge is free!
Dexter's Lab Posted February 13, 2013 at 02:47 PM Author Report #495121 Posted February 13, 2013 at 02:47 PM Porque a nenhum deles corresponde o resto da divisão verdadeiro entre 15 e 4.
HappyHippyHippo Posted February 13, 2013 at 02:53 PM Report #495123 Posted February 13, 2013 at 02:53 PM Porque a nenhum deles corresponde o resto da divisão verdadeiro entre 15 e 4. isso não é resposta que se apresente, demonstra porque razão não é o resultado da divisão através do algoritmo de subtracções sucessivas IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Dexter's Lab Posted February 13, 2013 at 02:59 PM Author Report #495124 Posted February 13, 2013 at 02:59 PM Então: 15 % 4 = 15 - 4 - 4 - 4 = 15 - 12 = 3 E: 15 % 4 = 15 - 4 - 4 - 4 - 4 - 4 - 4 - 4 = 15 - 28 = -13 E: 15 % 4 = 15 - 4 - 4 = 15 - 8 = 7 HHHippo, não sei se é aqui que queres chegar, mas são resultados diferentes.
pmg Posted February 13, 2013 at 03:03 PM Report #495126 Posted February 13, 2013 at 03:03 PM Quantos 4's tens que subtrair até o valor dar negativo? Qual é o valor das subtracções imediatamente antes do valor negativo? 15 - 4 - <QUANTOS?> - 4 dá o primeiro negativo 16 - 4 - <QUANTOS?> - 4 dá o primeiro negativo 17 - 4 - <QUANTOS?> - 4 dá o primeiro negativo 765433 - 4 - <QUANTOS?> - 4 dá o primeiro negativo What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Dexter's Lab Posted February 13, 2013 at 03:24 PM Author Report #495130 Posted February 13, 2013 at 03:24 PM Segundo estou a perceber, o módulo é portanto o mais baixo valor possível em |R na subtração do segundo número sucessivamente a partir do primeiro. Se contudo o último valor for zero então é um valor exato. Percebi bem?
Dexter's Lab Posted February 13, 2013 at 03:35 PM Author Report #495135 Posted February 13, 2013 at 03:35 PM Estava aqui a pensar, será que pode ser: valor1 a dividir pelo valor dois e o resultado será o numero de vezes que vai subtrair?
HappyHippyHippo Posted February 13, 2013 at 03:36 PM Report #495136 Posted February 13, 2013 at 03:36 PM (edited) tens 7 berlindes, são duros como calhaus logo não os podes partir. tens de dividir os berlindes pelo João, Maria e Rita. para ser justo começas a dar 1 a cada um, sucessivamente até não teres nenhum. primeiro dar uma 1 cada, ficando cada um com 1 e tu ficas com 4 uma segunda volta, voltas a dar 1 berlinde a cada um. ficas agora com 1 e cada um com 2. mas agora não podes dividir o berlinde restante pelos três, e decides ficar com ele. isto é a divisão inteira e aprendesse na primária !!! em cada ciclo tu deste 3 berlindes, o que resulta nos seguintes valores ronda | tu | Joao | Maria | Rita ---------------------------------- 0 | 7 | 0 | 0 | 0 1 | 4 | 1 | 1 | 1 (7 - 3 dados = 4) 2 | 1 | 2 | 2 | 2 (4 - 3 dados = 1) ---------------------------------- o que tens é então : 7 / 3 = 7 - 3 - 3 = 2 (resto 1) Edited February 13, 2013 at 03:37 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Dexter's Lab Posted February 13, 2013 at 04:48 PM Author Report #495161 Posted February 13, 2013 at 04:48 PM Talvez não fosse isto o que vocês queriam, mas acabei por criar uma fórmula matemática para chegar ao módulo a partir das vossas explicações. x%y = (x/y) € |R * (-y) a parte inteira da divisao de x por y vai ser o numero de vezes que o y vai diminuir
mogers Posted February 13, 2013 at 04:48 PM Report #495162 Posted February 13, 2013 at 04:48 PM (edited) Não sei se esta perspectiva ajuda mas como aprendemos na primária, Dividendo = Quociente * Divisor + Resto, i.e. 15 = 3 * 4 + 3 A única coisa que estás a fazer é simular a multiplicação do quociente pelo divisor com subtracções sucessivas. PS: a multiplicação seria uma série de somas, mas como queres o resto estás a fazer subtracções. Edited February 13, 2013 at 05:03 PM by mogers "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.
mogers Posted February 13, 2013 at 05:05 PM Report #495163 Posted February 13, 2013 at 05:05 PM x%y = (x/y) € |R * (-y) a parte inteira da divisao de x por y vai ser o numero de vezes que o y vai diminuir O conjunto dos números inteiros é o Z. O |R são os números reais (incluí 1.25, 0.333333(3), etc). "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.
Dexter's Lab Posted February 13, 2013 at 06:54 PM Author Report #495181 Posted February 13, 2013 at 06:54 PM O conjunto dos números inteiros é o Z. O |R são os números reais (incluí 1.25, 0.333333(3), etc). Exatamente, tens toda a razão. Confundi na altura porque tinha a concentração posta num post algures que referia isso. Inclusive era |N que me queria referir. Obrigado pela atenção ao pessoal que participou. Amanhã ou depois coloco o programa aqui
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now