Jump to content

Recommended Posts

Posted

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.

Posted

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
Posted

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!

Posted

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?

Posted

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!

Posted (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 by thoga31

Knowledge is free!

Posted

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.

Posted

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!

Posted

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?

Posted (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 by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted

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

Posted (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 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.

Posted

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.

Posted

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.