Ir para o conteúdo
revised

Auxilio em Pseudo Codigo.

Mensagens Recomendadas

revised    0
revised

Boas pessoal.

O meu nome é Ricardo Pereira e estou neste momento a fazer uma formação em redes, tenho um UFCD que é algoritmia e estou com dificuldades em desenvolver um algoritmo.

A unica coisa que pretendo neste momento é que se possivel alguem me possa ver este pseudo codigo feito por mim e me diga se está correto.

O objetivo é criar um pseudo codigo que me dê de forma aleatoria a chave do euro milhões.

Nesta primeira faze estou unicamente a tentar gerar os 5 numeros da chave mas sem repetição dos numeros.

Pseudo Codigo

Algoritmo
Inteiro: i, j , x ← 0
Inteiro[]: vecnum, vecest
Logico: flag ← true
Inicio
	Para (i ← 0 até 5, passo 1) fazer		x ← random (1,50)
	vecnum[i] ← x
	Para (j ← 0 até 5, passo 1) fazer
		Se (flag) então	 <----- Serve apenas mas que quando for colocado 1º numero do vector não ser comparado com x
			flag ← false
			break
		Senão
			Se (vecnum[j] = x) então	 <----- Para repetir a vez atual de "i", gerar novo random e guardalo na mesma posição do numero repetido
				i ← i - 1
		 	 break
			Fimse
		Fimse
	Fimpara
Fimpara
Escrever (vecnum[i],", ")
Fim

Agradeço a vossa ajuda.

Editado por revised

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1132
HappyHippyHippo

o código está mal.

pensa bem no que o circulo interno é suposto fazer.

escreve em português (por extenso) o que é que esse ciclo (interno) deverá fazer, sem olhar para o código que tens.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
revised    0
revised

Sinceramente não consigo ver onde estou a errar...

No primeiro "PARA" estou a escrever um valor "RANDOM" na variável "x" e a atribuir o valor da dela a posição 0 do vector.

Ele faz isso a primeira vez e passa para o segundo "PARA".

No segundo para ele e quando lá passa a primeira vez não vai fazer o nada e pois isso criei o primeiro "SE" que o se não a flag for verdadeira vai sair do ciclo e volta para o primeiro "PARA".

vai voltar a gerar aleatório e guardá-lo na posição 1 do vector.

Entra novamente no segundo "PARA" e como a flag já não está a false vai ser direto para o senão que vai verificar se o "x" é igual a todas as posições do vector individualmente atravez do ciclo.

Se for igual faz engana o i e subtrai uma posição pelo que ao passar para o o primeiro "PARA" de atravez do break vai gerar um novo random e vai escrevelo na mesma posição onde se encontrava o repetido.

Corrijam me se eu estiver errado. É que não estou a conseguir ver onde estou a errar... Só vou mudar uma coisa que para fazer reset ao j.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
revised    0
revised

o código está mal.

pensa bem no que o circulo interno é suposto fazer.

escreve em português (por extenso) o que é que esse ciclo (interno) deverá fazer, sem olhar para o código que tens.

Será que assim está melhor?

Algoritmo
Inteiro: i, j , x ← 0
Inteiro[]: vecnum, vecest
Logico: flag ← true
Inicio
Para (i ← 0 até 5, passo 1) fazer
 x ← random (1,50)
 vecnum[i] ← x
  Para (j ← 0 até 5, passo 1) fazer
   Se (flag) então
 j ← 0
 flag ← false
 break
   Senão
 Se (vecnum[j] = x) então
  j ← 0
  i ← i - 1
  break
 Fimse
   Fimse
  Fimpara
Fimpara
Escrever (vecnum[i],", ")
Fim

Lol está igual porque ele ao entrar novamente no ciclo o valor de j vai ser sempre 0...

Ajudem-me por favor que já estou a ficar doente com isto...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
revised    0
revised

Ja fiz o que pediste.

Os unico unico erro que encontrei é que não posso comprar o ultimo numero porque obviamente vai ser igual e como é obvio so preciso comparar com os anteriores.

Na escrita tabem estava errado pois so ia apresentar o ultimo numero o vector.

Fiz algumas correções.

Segue novo Pseudo-Codigo.

Algoritmo
Inteiro: i, j , x ← 0
Inteiro[]: vecnum
Logico: flag ← true
Inicio
 Para (i ← 0 até 5, passo 1) fazer
  Se (flag) então
   vecnum[i] ← random (1,50)
   flag ← false
  Senão
   x ← random (1,50)
   vecnum[i] ← x
   Para (j ← 0 até i-1) fazer
 Se (vecnum[j] = x) então
  i ← i-1
  break
 Fimse
   Fimpara
  Fimse
 Fimpara
Fimse
Para (i ← 0 até 5, passo 1) fazer
 Escrever (vecnum[i],"   ")
Fimpara
Fim

Supostamente gera 5 numeros diferente e guarda-os num vector, no final apresenta os 5 numeros.

Alguem pode verificar se está correto?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
revised    0
revised

O cliclo interno deverá comparar todos os numero do vector com x, se encontrar um igual devera gerar um novo numero aleatorio e voltar a fazer a comparação.

Não me podes dizer o que é que modarias no Pseudo Codigo?

Editado por revised

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1132
HappyHippyHippo

O cliclo interno deverá comparar todos os numero do vector com x, se encontrar um igual devera gerar um novo numero aleatorio e voltar a fazer a comparação.

O cliclo interno deverá comparar todos os numero do vector já atribuidos com x, se encontrar um igual deverá forçar a nova escolha de um número

Algoritmo
 Inteiro: i, j
 Inteiro[]: vecnum
Inicio
 Para (i ← 0 até 5, passo 1) fazer
   vecnum[i] ← random (1,50)
   Para (j ← 0 até i - 1, passo 1) fazer
     Se (vecnum[j] = vecnum[i]) então
       i ← i - 1
       break
     Fimse
   Fimpara
 Fimpara
 Para (i ← 0 até 5, passo 1) fazer
   Escrever (vecnum[i],"   ")
 Fimpara
Fim

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
revised    0
revised

Para (j ← 0 até i - 1, passo 1) fazer

Quando fazes o segundo "Para" o valor de "i" é 0 se subtraires 1 fica -1.

Então estás a dizer "Para (j ← 0 até -1, passo 1) fazer"

Isto é possivel de fazer?

Pralem disso se for igual e o primeiro vai ser sempre igual vais estar a meter o primeiro para com o valor a 0-1 ou seja ele iria ter um output de 6 numeros.

Corrige-me por favor se estiver errado mas não estou a ver que isto faça sentido, atenção que tambem não estou a dizer que o meu está correto.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    611
thoga31

Isto é possivel de fazer?

Sim, o ciclo simplesmente não é executado uma vez que início + passo > fim.

Esta verificação é feita a cada iteração, logo a começar antes da primeira. Se a condição logo à partida for satisfeita, o ciclo é ignorado.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1132
HappyHippyHippo

normalmente, depende da linguagem final

não vou dizer que irá funcionar em todas, mas na maior parte das linguagens, a tradução desse trecho de código resulta em algo válido

Editado por HappyHippyHippo

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
revised    0
revised

Ok.

Uma outra duvida, na segunda volta do primeiro ciclo i=1

Na primeira volta do segundo ciclo ao subtrair o 1 vai ficar i=0

De 0 até 0 ele ignora o ciclo ou continua?

O proximo passo da algoritmia nesta unidade de formação é o c++, no c++ funciona?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    611
thoga31

Ok.

Uma outra duvida, na segunda volta do primeiro ciclo i=1

Na primeira volta do segundo ciclo ao subtrair o 1 vai ficar i=0

De 0 até 0 ele ignora o ciclo ou continua?

Tens de pensar de forma sequencial e não ver que o i vai ser 0 e saltar para a frente ou para trás sem ver tudo o que vai acontecer pelo meio.

Supondo que no segundo ciclo terás de subtrair o valor de i, então i=0 numa das iterações do ciclo interno. Mesmo que esta mudança ocorra na primeira iteração, a segunda já terá j=1. Mais, no final do ciclo externo, haverá nova iteração e i passará a ser 1.

Por estes dois motivos, nunca vais ter a situação "de 0 até 0" após decremento do i no pseudocódigo proposto pelo @Happy.

O proximo passo da algoritmia nesta unidade de formação é o c++, no c++ funciona?

Um algoritmo é um conjunto de passos que levam à resolução de um problema. Em teoria, todos os algoritmos podem ser implementados em qualquer linguagem com a devida adaptação a cada linguagem.

Traduzindo correctamente o pseudocódigo para C++, irá funcionar, claro.

Editado por thoga31

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade