Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

UnKn0wZ_L@U

Algoritimo p/ calculo de MMC

Recommended Posts

Olá

 

Criei um programa em VB.NET p/ calcular o mmc de 2 ou mais numeros em um unico textbox. Bem o algoritmo parece estar perfeito, eu ja revisei ele mais de 5 vezes e naum consigo achar nenhum um errinho de lógica. Mas quando vou compila-lo o visual studio trava e naum mostra nenhum menssagem sobre o problema ocorrido, issu que eu acho estranho, ele simplesmente trava e naum responde mais. Bem passei o código que esta em vb.net para linguagem estruturada e espero que vcs possam me ajudar, caso for algum problema na lógica do algoritimo. Bem segue o código abaixo:

 

CODE
Var: VarTxtValor as alphanumeric

ValorMatriz(10) as integer

Marcador2, MaiorNum, I, Exp, Quebra, Controle as integer

Marcador1 as integer = 1

Mmc as integer = 1

Dividir as integer = 2

 

Begin

 

Read VarTxtValor

 

For I = 1 to Len(VarTxtValor)

 

If Mid(VarTxtValor, I, 1) = "," Then

 

Marcador2 = Marcador2 + 1

ValorMatriz(Marcador2) = Mid(VarTxtValor, Marcador1, I - 1)

Marcador1 = I + 1

 

ElseIf I = Len(VarTxtValor) Then

 

Marcador2 = Marcador2 + 1

ValorMatriz(Marcador2) = Mid(VarTxtValor, Marcador1, I)

 

End If

 

Next I

 

For I = 1 To Marcador2

 

If ValorMatriz(I) > MaiorNum Then

 

MaiorNum = ValorMatriz(I)

 

End If

 

Next I

 

Do While Dividir <= MaiorNum Or Quebra <> 0

 

For I = 1 To Marcador2

 

Do While ValorMatriz(I) Mod Dividir = 0

 

For I3 As Integer = I To Marcador2

 

If ValorMatriz(I3) Mod Dividir = 0 Then

 

ValorMatriz(I3) = ValorMatriz(I3) / Dividir

 

End If

 

Next I3

 

For I4 As Integer = 1 To I - 1

 

If ValorMatriz(I4) Mod Dividir = 0 Then

 

ValorMatriz(I4) = ValorMatriz(I4) / Dividir

 

End If

 

Next I4

 

Exp = Exp + 1

 

Loop

 

Next I

 

For I = 1 To Exp

 

Mmc = Mmc * Dividir

 

Next I

 

For I = 1 To Marcador2

 

If ValorMatriz(I) = 1 Then

 

Controle = Controle + 1

 

End If

 

Next I

 

If Controle = Marcador2 Then

 

Quebra = Quebra + 1

 

Else

 

Controle = 0

Exp = 0

Dividir = Dividir + 1

 

End If

 

Loop

 

Write Mmc

 

End

Obrigado http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele trava realmente (congelamento do pc) ou simplesmente não termina de executar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele trava realmente (congelamento do pc) ou simplesmente não termina de executar?

Ele trava msmo.. tpw, o software abre, ai qnd eu coloco os numeros e clico em calcular, ele trava o software, ai soh fechandu ele no gerenciador de tarefas msmo. E o estranho eh q o visual studio naum da nenhuma tela de erro sobre a excessão ocorrida. Issu eh muito estranho. <_<

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha ainda naum cheguei verificar o codigo + isso ocorre as vzs qnd tem um loop infinito no codigo!

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Loop infinito iterativo não dá erro. O que geralmente dá erro é loop infinito recursivo.E acho que ainda depende da linguagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo assim bem facil para dois números dai você usa a mesma idéia. MMC de dois numeros :

 

sexa x um numero tal que x = y.k sendo k uma constante qualquer você tem um MMC, você pode usar essa idéia tbm, eu fiz uma coisa bem simple aqui em baixo só para mostrar o MMC de dois números. Se não consiguir resolver eu faço para n números.

 

CODE
#include <stdio.h>

 

int verificasemultiplo(int a, int B){

 

if(a%b == 0)return 0;

if(b%a == 0)return 1; else return 2;

}

int main(){

int x,y;

printf("Digite o primeiro numero : ");

scanf("%d", &x);

 

printf("\nDigite o segundo numero : ");

scanf("%d", &y);

 

if (verificasemultiplo(x,y) == 0) printf("O MMC é : %d\n", x);

 

if (verificasemultiplo(x,y) == 1) printf("O MMC é : %d\n", y);

 

if (verificasemultiplo(x,y) == 2) printf("O MMC é : %d\n", x*y);

return 0;

 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.