Jump to content
RufuZ

Programa Ciclo Repetitivo para adivinhar numero

Recommended Posts

RufuZ

Ora Boas pessoal,

tenho um trabalho para resolver, e vinha aqui pedir , digamos assim, umas dicas para o resolver..

O trabalho é o seguinte, elaborar um programa em PASCAL, que permita adivinhar um numero de 0 a 7, em tres tentativas/perguntas... O programa deve incluir um menu , com 2 opçoes, a 1º- Jogar e a 2º- Sair.. Quando o utilizador avança para a opçao 1 do menu, é-lhe questionado se o nr. é maior ou menor que 4, e mediante a resposta (s ou n), adivinhar o nr. que o utilizador está a pensar..

O meu problema aqui, está em montar o processo das 3 tentativas/perguntas (em que uma delas tem que ser obrigatoriamente a ser o nr. é maior ou menor que 4) de modo a que o programa consiga mesmo adivinhar o nr. pensado...

Se alguem me pudesse dar aqui uma ajuda de raciocínio, agradecia imenso...

Cumpz

RufuZ

Edited by RufuZ

Share this post


Link to post
Share on other sites
nunopicado

Tens de seguir sempre a mesma lógica, e ir perguntando (das 3 vezes) se o número é maior (ou igual) ou menor que o numero do meio.

0 a 7 (imagina que eu pensei no 6:

1º O numero é >= ou < do que 4? Resposta: >=

2º O numero é >= ou < do que 6? Resposta: >=

3º O numero é >= ou < do que 7? Resposta: <

Resultado: Se é >= a 6 e menor que 7, o numero era o 6.

0 a 7 (imagina que eu pensei no 3:

1º O numero é >= ou < do que 4? Resposta: <

2º O numero é >= ou < do que 2? Resposta: >=

3º O numero é >= ou < do que 3? Resposta: >=

Resultado: Se é >= a 3 e menor que 4, o numero era o 3.

Tenta por aí...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
I-NOZex

uiiiiiiiiiiiii

isto é simplerrimo se usares um algoritmo chamado de "bi-section search" ;)

procura no google ;)

edit: a resposta do @nunopicado é exactamente isso :thumbsup:

Edited by I-NOZex

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites
RufuZ

Desde já agradeço imenso aos dois pela disponibilidade em me ajudarem :)

nunopicado, estou a entender o que tu estas a querer dizer... entao e para construir essa sintaxe, utilizo que tipo de estrutura?? for? repeat? while?

Nozex, o problema é que apenas posso aplicar a matéria que dei até agora (estruturas de decisao simples e encadeadas- ifs; estruturas de selecçao multipla- case of ; estrutura de repetiçao- for, while e repeat)...

Mais uma vez muito obrigado ;)

Cumpz

RufuZ

Share this post


Link to post
Share on other sites
I-NOZex

e entao? uma coisa nao impede a outra, o algoritmo de bisection search e tal e qual como o @nuno mostrou, e usa apenas aquilo que deste

apenas fica a dica do nome tecnico para que possas aprofundar mais, caso queiras!

acredita que é algo dito basico, mas que infelizmente a nivel de secundario nao é ensinado --"


B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites
thoga31

A repetição centra-se, aliás, ou num ciclo for ou num ciclo repeat ou ainda num ciclo while. Tens de ter em atenção o caso em que conseguiste adivinhar o número em menos do que 3 tentativas - não vale a pena perguntar mais vezes.

EDIT: a matéria dada serve perfeitamente para o caso. A algoritmia, infelizmente, é subvalorizada nas escolas por uma razão qualquer. Eu por exemplo aprendi em Aplicações Informáticas a organizar uma lista por ordem crescente, e só 2 anos mais tarde descobri que afinal o algoritmo que usava era o tão famoso Bubble Sort.

Edited by thoga31
  • Vote 1

Knowledge is free!

Share this post


Link to post
Share on other sites
RufuZ

Mas eu pesquisei um pouco no google sobre o bi-section search, e só vi programaçao com arrays.

Eu entendi o que o Nuno explicou, no entanto nao estou a conseguir montar mentalmente o codigo... Será que é possivel darem-me um exemplo pratico do código com essa sintaxe que estão a dizer para que eu perceba melhor?

Share this post


Link to post
Share on other sites
thoga31

Não. Isso seria dar-te o exercício feito, basicamente. :)

Pensa lá um pouco. Divide o problema em pedacinhos:

1) Como determinas um número aleatório segundo o limite definido pelo utilizador (>= ou < do que o último número)?

2) Como verificas se é igual, maior, menor?

3) Como determinas se já chegaste a uma conclusão concreta acerca do número?

4) Como repetes este processo 3 vezes?


Knowledge is free!

Share this post


Link to post
Share on other sites
RufuZ

ora bem , perdoem-me se vou dizer algum disparate, mas ja tive um dia de escola e de imenso estudo, e a minha cabeça já esta um pouco cansada ehehe

1) entao, faria como o @ nuno disse, o primeiro teste, seria traçar o meio do limite definido e testar o nr. aleatorio em relaçao a esse nr central( maior, menor ou igual)

2) com uma estrutura de decisao (if), iria comparar o numero aleatorio com o nr central que traçei em 1)

3) Quando as opçoes terminarem e forem todas verdadeiras, isto é , quando as "perguntas" feitas forem todas respondidas correctamente

4) com um ciclo for/repeat/while

Share this post


Link to post
Share on other sites
I-NOZex

ai thoga, depois disso ate fiquei com vontade de fazer o dito programa xD

eu aprendi este algoritmo num curso online de python (que infelizmente por nao ter tido mais tempo, nao o conclui :\ e porque começaram a abstrair demasiada matematica...)

edit: exactamente!!! a ideia tao basica deste algoritmo é:

tens um inicio e tens um fim

divides

é o numero correcto? se nao, maior ou igual?

(imaginando que seja menor): o valor fim(limite, aquel numero inicial divido) é atribuido

divides, faz a pergunta outra vez, e isto assim, 3x...

Edited by I-NOZex

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites
thoga31

Com certeza que não tiveste um dia tão pesado como o meu, mas adiante :D

A tua ideia geral está bem. Agora convém é começares a delinear um algoritmo e estruturá-lo em código... com pés e cabeça. Estamos aqui para ajudar, don't worry ;)

@I-NOZex, tu tem calma, moço. Inspira... respira... fundo... ok, melhor? Good. Faz lá então o programa, mas não o mostres! :D


Knowledge is free!

Share this post


Link to post
Share on other sites
RufuZ

ora entao, vou tentar fazer aqui uma primeira versao à pressa e em linguagem corrente:

1) Nr maior ou igual a 4?

se sim

nr maior que 6?

se sim: o nr é o 7

senao

(deu-se-me aqui um break, nao tou a conseguir pensar nesta parte eheh)

se nao

nr maior que 2?

se sim: o nr é o 3

senao

(novamente deu-se-me um break... nao tou a conseguir achar soluçao para aqui, porque ficam muitos nrs por testar...)

Share this post


Link to post
Share on other sites
thoga31

Se fosse um número de 0 a 1000 com 20 tentativas, estou a ver o programa que ia sair daí.

Não consegues pensar isso de forma a usar variáveis e não uma panóplia de condições?


Knowledge is free!

Share this post


Link to post
Share on other sites
RufuZ

ahaha, concordo contigo thoga... está dificil de entender isto xD

ora bem, com variaveis?? ui, aí é que nao estou a ver mesmo ehehehe o meu cerebro nao esta a deixar raciocinar direito hoje -.-

tive aqui a fazer um rascunho no papel, mas ha aqui uns numeros que me escapam sempre:

maior ou menor que 4?

maior:

maior ou menor que 6?

maior:7

menor:5

menor:

maior ou menor que 2?

maior: 3

menor: 0 ou 1

Share this post


Link to post
Share on other sites
thoga31

Tens de ter, a cada iteração, um mínimo e um máximo a analisar. Na primeira iteração não há limites, apenas perguntas se é maior ou menor do que 4. A partir daí, terás que calcular os limites mínimo e máximo. Pensa lá mais um pouco, não estás no mau caminho, apenas tens de largar os números e pensar abstracto.


Knowledge is free!

Share this post


Link to post
Share on other sites
RufuZ

uii, essa complicou-me... entao o que estas a dizer é +/- isto? :

maior ou menor que 4?

maior:

1)maior que 5? se nao for, é 5, senao passa à 2)

2)maior que 6?se nao for é 6, se for é 7

menor:

1)maior que 0?se nao for é 0, se for passa à 2)

2)maior que 1? se nao for é 1, se for passa à 3)

3)maior que 2? se nao for é 2, se for é 3

se nao for nem 1 nem outro, entao e o 4...

continuo a pensar em concreto pq nao me estou a conseguir focar no abstrato ehehe

Share this post


Link to post
Share on other sites
thoga31

Tanto te focas no concreto que não consegues pensar direito. Isso são tudo raciocínios muito particulares que nunca vão funcionar na prática.

Eu quero que me digas algo assim:

VARIÁVEIS
  max, min : Inteiros

min <- 0
max <- 7

LER opção
SE (opção="maior") ENTÃO
   max/min? <- ???
SE NÃO
   max/min? <- ???

Agora tens de preencher os pontos de interrogação e determinar, em casa caso, se mudas max ou min.

Dica: repara nos valores novos que aparecem na pergunta - são médias.

Edited by thoga31

Knowledge is free!

Share this post


Link to post
Share on other sites
I-NOZex

para ajudar, vamos aqui simular o input/output do programa:

(vamos supor que pensamos no numero 3)

numero maior ou igual a 4?

menor

numero maior ou menor que 2?

maior

o numero é o 3!

explicaçao:

no primeiro passo, o valor minimo era 0 e o maximo 7

depois, o programa divide a margem entre o 0 e o 7, e atribui a uma variavel intermedia (sao 8 digitos de diferença, metade de 8 é 4)

pergunta entao se o numero é maior ou menor que 4

neste caso é menor, o maximo passa a ser 4, o minimo continua 0

dividimos a meio o 4, da 2

é menor ou maior que 2? neste caso maior

o minimo passar a ser 2 e o maximo continua 4

ora se o numero é menor que 4, e maior que 2, so pode ser o 3!

agora o numero é imaginamos o 7:

numero maior ou igual a 4?

maior

numero maior ou menor que 6?

maior

o numero é o 7!

explicaçao:

no primeiro passo, o valor minimo era 0 e o maximo 7

depois, o programa divide a margem entre o 0 e o 7, e atribui a uma variavel intermedia (sao 8 digitos de diferença, metade de 8 é 4)

pergunta entao se o numero é maior ou menor que 4

neste caso é maior, o minimo passa a ser 4, o maximo continua 7

entre o 4 e o 7 ha 3 digitos, sendo o 6 o do meio

é menor ou maior que 6? neste caso maior

o minimo passar a ser 6 e o maximo continua 7

ora se o numero é maior que 6, so pode ser o 7!


B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites
RufuZ

Mais uma vez, agradeço a paciência q estão a ter comigo... Confesso que está a ser dificil reflectir sobre este código por um motivo qulquer que desconheço ( suponho que seja burrice mesmo ehehe)

Ora bem theoga, olhando para a dica que deste, só consigo imaginar um ciclo repeat, em que cada vez que o ciclo é efectuado, o centro, ou seja, o resultado da divisão inteira entre o máximo e o mínimo ( que se vai adaptando e- diminuindo ou aumentando conforme a resposta que o utilizador dá as perguntas), vai.se também adaptando até chegar ao sítio em que não há mais possibilidades lógicas, e encontra.se então o nr.pensado

Share this post


Link to post
Share on other sites
passarito

Não sei o teu nivel de conhecimentos, mas isto cheira-me a recursividade.

Se ainda não deste, é bem provavel que seja a prepareção para a aprenderes!

Share this post


Link to post
Share on other sites

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.