Euromilhões e Totoloto - Pascal - Portugal-a-Programar
By Pinhalnovo, November 20, 2013 in Pascal
Pinhalnovo 0
Bem como referenciei na minha apresentação estou a tirar um curso de aplicações informáticas e estou com algumas dúvidas..
Basicamente tenho um novo projecto em que tenho que fazer uma aplicação com o pascal zim que ajude no preenchimento dos boletins dos jogos socias Totoloto e Euromilhões. A aplicação deverá começar por questionar o utilizador se pretende apostar no Totoloto ou no Euromilhões e de seguida questionar quantas apostas o utilizador pretende efectuar considerando que: Euromilhões: - Minímo 1 aposta; - Máximo 5 apostas; - Cada aposta terá 5 números de 1 a 50 e duas estrelas de 1 a 11. Totoloto: - Mínimo 2 apostas; - Máximo 10 apostas; - O número de apostas terá de ser par; - Cada aposta é composta por 6 números de 1 a 49. Quando forem gerados os números para a(s) aposta(s) deverá ter em atenção que numa mesma aposta o mesmo número não poderá aparecer mais do que uma vez. Depois de geradas, as apostas devem ser apresentadas ao utilizador de forma ordenada, isto é os números terão de surgir no ecrã ordenados de forma crescente.
Já tentei várias coisas mas o pascalzim está sempre a dar erros e ainda não consegui correr nenhuma vez o programa.
Para além disso não estou a ver como é que vou fazer para ordenar os números das apostas.
Damos uma ajudinha, com certeza.
Onde está o código? Não podemos adivinhar quais são os erros que tens e que te estão a surgir.
O Pascal Zim não dá erros... É um erro!
Dito isto, tens de dizer quais são para tentarmos ajudar!
Está certo é verdade.
O meu colega é que tem a parte inicial do trabalho (pois ainda não o acabamos). A ver se amanhã tenho tempo e coloco aqui.
Não despejes simplesmente o código, indica o/os locais onde tens problemas.
Quanto ah ordenacao, tens varios metodos. Um simples mas nao tao eficaz eh posicao a psicao verificar se o elemento menor posterior a si eh inferior ou nao. Caso seja trocam-se. Isto faz-se com 2 for's encadeados, Maas eh mais fácil na pratica do que a explicação.
Bem fiquei aqui:
Program Euromilhoes_Totoloto;
Apost,I,A,E:Integer;
Num:array[1..5]of Integer;
Est:array[1..2]of Integer;
WriteLn('Pretende efectuar apostas no Euromilhões ou no Totoloto?');
WriteLn('E-Euromilhões');
WriteLn('T-Totoloto');
WriteLn('Qual é o numero de apostas?');
ReadLn(Apost);
Until ((Apost = 1) or (Apost = 2) or (Apost = 3) or (Apost = 4) or (Apost = 5));
For A:=1 to Apost do
Num[i]:=random(49)+1;
Writeln('Numeros da Aposta ', A, ':', ' ', Num[1],' ', Num[2],' ', Num[3],' ', Num[4],' ', Num[5]);
Est[E]:=random(8)+1;
WriteLn('Estrelas da Aposta ', A, ':', ' ', Est[1],' ', Est[2]);
Until ((Apost = 2) or (Apost = 4) or (Apost = 6) or (Apost = 8) or (Apost = 10));
For A:=2 to Apost do
Num[i]:=random(48)+1;
Dá-me erro na linha 40..
Depois falta colocar os números e estrelas das apostas por ordem crescente.. Alguém me consegue ajudar?
GeSHi + linha 40 indicada
A array está definida de 1 até 5, fazes o output dos índices do 1 ao 5... por que carga de água é que o ciclo for vai de 2 até 6?
Mais, porque é que fazes apostas de 2 até Apost? Se o utilizador disser que quer fazer 2 apostas, apenas vai ser feita 1.
Entao o primeiro ciclo FOR vai de 1 a 6 com a arrey definida de 1 a 6?
Sim realmente aqui foi distracao..
Eu não sei qual é o "primeiro ciclo FOR", mas toma atenção a isso. Testa e diz se resolveu o teu problema. Confesso que não vi o código por completo, pelo que não garanto que seja a única falha.
No Euromilhoes não te falta só ordenar os números, falta-te verificar se o número já existe.
Eu resolveria a coisa assim:
For I:=1 to 5 do Num[i]:=100;
Bola:=random(49)+1;
If Num[j]=Bola then Bola=0;
until Bola<>0
if Num[j]>Bola then begin
Aux:=Num[j];
Num[j]:=Bola;
Bola:=Num[j];
Para o totoloto o procedimento é o mesmo.
Já agora, qual é o erros que te dá nessa tal linha 40?
Edited November 26, 2013 by passarito
O problema da linha 40 está resolvido.
Num:array[1..6]of Integer;
Writeln ('Tenha atenção que o número de apostas deve ser par, ou seja, 2,4,6,8 ou 10!');
Writeln('Numeros da Aposta ', A, ':', ' ', Num[1],' ', Num[2],' ', Num[3],' ', Num[4],' ', Num[5],' ', Num[6]);
Vou personalizar um pouco o programa e depois se tiver dúvidas pergunto.
Edited November 26, 2013 by thoga31
Continuas com os mesmos problemas no totoloto e no euromilhoes:
- Não verificas se os numeros
- Não ordenas os números
Mais, coloca o code=pascal para se perceber melhor o teu código
Boa noite, eu estou a fazer exatemente fazer o mesmo trabalho e tenho uma dúvida. Não percebo esta linha " For I:=1 to 5 do Num:=100;"
Porquê "100"?
E já agora alguém me sabe ajudar para colocar os números por ordem crescente, por favor?
E já agora, onde devo colocar essa parte de verificar se esse número já existe?
Obrigada, é que sou mesmo má nisto da informática :/
Estamos a inicializar o array para evitar falsos positivos. 100 não é, de certeza, um número válido para apostas. Quem diz 100 diz também 130 ou mesmo 69. Tanto faz, tem é de ser um número inválido para apostas.
Que algoritmo pretendes usar? O que já tentaste fazer? Mostra-nos o que já tens feito.
Depende do código que tiveres. Ninguém melhor do que quem escreve o programa para saber onde inserir cada trecho de código.
Questão: se és assim tão má como dizes, como te vieste meter nisto? É que cada vez mais alunos dizem "eu sou um nabo" ou "eu não percebo nada", mas ainda assim entraram na área da informática. O que te levou a entrar neste mundo?
O array tem de ser inicializado com um valor maior que o maior que o permitido para posteriormente efetuar a ordenação automaticamente.
O trecho de código que vem a seguir faz todo o processo. Descobrir a bola, verificar se já existe e ordená-la.
Tenta entender o código e poe aí as tuas duvidas.
Qual o teu nivel de conhecimentos?
Eu estou no 12º ano e uma das minhas disciplinas é Aplicações informáticas. Eu praticamente tive de escolher esta disciplina, porque escolher duas específicas iria ser muito trabalhoso e desceria a média, que infelizmente já é má o suficiente. E, portanto, iniciei este ano esta disciplina e tenho um trabalho para fazer que é o seguinte : Pretende-se uma aplicação que ajude no preenchimento dos boletins dos jogos socias Totoloto e Euromilhões. A aplicação deverá começar por questionar o utilizador se pretende apostar no Totoloto ou no Euromilhões e de seguida questionar quantas apostas o utilizador pretende efetuar considerando que: Euromilhões: - Minímo 1 aposta; - Máximo 5 apostas; - Cada aposta terá 5 números de 1 a 50 e duas estrelas de 1 a 11. Totoloto: - Mínimo 2 apostas; - Máximo 10 apostas; - O número de apostas terá de ser par; - Cada aposta é composta por 6 números de 1 a 49. Quando forem gerados os números para a(s) aposta(s) deverá ter em atenção que numa mesma aposta o mesmo número não poderá aparecer mais do que uma vez. Depois de geradas, as apostas devem ser apresentadas ao utilizador de forma ordenada, isto é os números terão de surgir no ecrã ordenados de forma crescente. Todas as introduções de dados por parte do utilizador devem ser validadas por forma a evitar o erro. No final da apresentação das apostas solicitadas pelo utilizador terá de lhe ser questionado se pretende continuar a utilizar a aplicação.
Para ser franca, eu não sabia nem começar, pelo que pesquisei na internet e acabei por encontrar este site de onde copiei tudo o que tenho. É
É* que nem entendo bem o que copiei. Principalmente a dúvida colocada anteriormente, que continuo sem a entender!
Tudo o que tenho é isto:
Program Euromilhoes_Totoloto ;
Apost,I,A,E,T:Integer;
If Num[j] = Bola then Bola=0;
Falta-me colocar os números por ordem crescente e não sei onde colocar a parte em que verifica se esse número já foi gerado, pelo que o coloquei algures.
Obrigada pela ajuda, é mesmo importante ter boa nota...
Já agora...falta-me variáveis, não falta? Estou toda baralhada!!
Antes de mais, vê aqui como colocar correctamente o código no fóurm.
De seguida, isto é o que dá copiar: não se aprende nada!
Tu tens aí um código todo jeitoso e tal, mas não o fizeste, não o pensaste e não o entendes. Faz um bem a ti mesma: não voltes a copiar!
Mais, se o professor descobre que copiaste, já foste. E ao copiares, não aprendes nada, pelo que no teste também já foste.
1) Indenta bem o código.
2) Se eu escrever uma outra letra qualquer, o programa termina abruptamente.
3) Se eu escrever "e" em vez de "E", acontece o mesmo que em 2).
4) Afinal o que é que sabes de Pascal?
Eu percebo, não sei é fazer!
Se me derem um código, eu sei explicar o que faz, mas construí-lo é o que me custa, porque não sei o que utilizar.
Eu até percebo minimamente de Pascal, tive um teste relativamente bom, 16,5 valores.
A parte das letras foi um lapso, esqueci-me de colocar mais uma condição com o "or=e"
O facto do programa terminar abruptamente, deve-se a nunca ter aprendido outra maneira de o fazer.
Para nós, aqui no P@P, as classificações obtidas nos testes não valem nada, literalmente. Não é ser duro, é ser realista. Interpretar código feito não é complicado, se bem feito, mas fazer o código do zero exige mais: exige pegar no problema e desmontá-lo em pedaços. Se não consegues desmontar um problema em pedaços e resolver cada pedacinho e juntar tudo para obter uma solução final, então o meu conselho é treinares seriamente isso.
Posto isto, não é preciso ensinarem-te algo para evitares o encerramento abrupto do programa. Tens as ferramentas todas nas tuas mãos, tens é de pegar no problema e resolvê-lo com essas ferramentas. Por outras palavras, tens o prego e o martelo - não podes estar à espera que alguém te diga que o martelo é para pregar o prego, também convém analisares o que tens e o que podes fazer com isso.
Portanto, para evitar o encerramento abrupto do programa, precisas de controlar o input do utilizador. Para isto tens as estruturas de repetição (ou ciclos). Dos três que tens à disposição, escolhe o que melhor se adapta à situação - e é aqui que começas a pensar, não pode ser o professor a dizer-te tudo, nem nós. Nós orientamos.
De seguida, vais fazer um código teu e não copiado do teu colega. Isso é, em termos leves, feio. Eu saberei se te "baseaste" nele ou não (aka copiar alterando nomes de variáveis e etc), já tenho uns aninhos disto e sei detectar à distância. Enquanto não começares a fazer um código teu, explicado por ti e pensado por ti, não te ajudarei. Se te dedicares a fazer um código teu, eu estarei aqui para ajudar, assim como os outros membros.
E não há "urgências em ter o exercício feito" que justifiquem qualquer contorno destas condições que aqui coloquei. Eu estou aqui, enquanto membro do P@P, para ajudar e orientar e até ensinar, e não para me conformar com plágios.
Posso parecer, mais uma vez, mais brusco. Estou apenas a ser frontal e sincero.
Compreendo tudo o que disse, mas a verdade é que também fui sincera.
Não disse que tinha sido resultado do meu esforço para "ficar bem na fotografia", e admiti que o tinha copiado, porque apesar de perceber, não sei construir.
E como deve calcular, a exigência dos exercícios feitos em aula e deste exercício em questão, nem se comparam!
Se tive um teste relativamente bom, é porque até sei fazer os códigos, mas este em específico, envolve muitas coisas.
Eu tenho realmente alguma "pressa" em terminar este trabalho, porque o prazo termina no dia 30 e como deve calcular, tenho disciplinas mais difíceis e que vão realmente fazer-me falta no futuro.
Eu não pretendo seguir nada que se pareça com informática, e portanto a minha intenção nesta disciplina não é aprender nem treinar, mas sim tirar uma boa nota e aumentar a minha média.
Compreendo perfeitamente que não concorde com o que digo e até fique algo desiludido com os alunos de hoje em dia, mas estou a ser sincera e as condições de acesso ao ensino superior, etc, obrigam-nos a ser um pouco assim.
Obrigada por ter disponibilizado o seu tempo a escrever-me e não insistirei mais pela sua ajuda.
Por muito pouco correto que seja, terei de recorrer a alguém que me ensine especificamente o que fazer.