Jump to content
revised

Auxilio em Pseudo Codigo.

Recommended Posts

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.

Edited by revised

Share this post


Link to post
Share on other sites
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.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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...

Share this post


Link to post
Share on other sites
HappyHippyHippo

faz o que te foi pedido:

escreve em português (nada de código) o que o ciclo interno deverá fazer


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
HappyHippyHippo

bem ... se continuas a achar que fizeste o que foi pedido, mais não posso fazer ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
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?

Edited by revised

Share this post


Link to post
Share on other sites
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


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.


Knowledge is free!

Share this post


Link to post
Share on other sites
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

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
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.

Edited by thoga31

Knowledge is free!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.