elrey Posted March 22, 2012 at 11:40 PM Report #445248 Posted March 22, 2012 at 11:40 PM Boas. Estou a fazer um exercício para a disciplina e estou aqui com uma dúvida. O exercício consiste em ter uma biblioteca e "criar" livros e posiciona-los no sitio correto, e afins. Tenho este procedimento para "criar" o livro: Procedure criar; //Criação do Livro Begin textcolor(white); Repeat clrscr; writeln('Em que corredor pretende colocar o livro: '); readln(corr); if corr > 3 then Begin writeln('Só existem 3 corredores.'); readkey; End; Until corr <= 3; Repeat clrscr; writeln('Em que prateleira pretende colocar o livro: '); readln(prat); if prat > 5 then Begin writeln('Só existem 5 prateleiras.'); readkey; End; Until prat <= 5; Repeat clrscr; writeln('Quantos livros pretende criar: '); readln(liv); if liv > 10 then //Trocar para 100 no final! <-------------------------------- Begin writeln('Só pode criar 100 livros por cada prateleira.'); readkey; End; Until liv <= 10; clrscr; for c := 1 to corr do Begin for p := 1 to prat do Begin for l := 1 to liv do Begin writeln('Insira o Título: '); readln(livro[c,p,l].titulo); writeln('Insira o Autor: '); readln(livro[c,p,l].autor); writeln('Insira o Assunto: '); readln(livro[c,p,l].assunto); writeln('Insira a Data: '); readln(livro[c,p,l].data); writeln('Insira a Cota '); readln(livro[c,p,l].cota); writeln('Insira o Editor: '); readln(livro[c,p,l].editor); End; End; End; End; A dúvida que tenho é a seguinte, isso aí está a trabalhar quase corretamente. Quando vou a "criar", o programa pergunta em que corredor e prateleira quero colocar o livro, escolho no corredor 1 e na prateleira 2, e depois pergunta quantos livros pretendo "criar", escolho 1. Vai começar a pedir os dados do livro, só que não vai pedir só uma vez, vai pedir 2 porque "meti" o livro na prateleira 2 do corredor 1. Eu não queria isso. Conseguiram entender a explicação não muito bem dada ? 😉 Cumprimentos.
bsccara Posted March 22, 2012 at 11:58 PM Report #445256 Posted March 22, 2012 at 11:58 PM Se entendi bem, queres receber o corredor e prateleira e depois a quantidade de livros que irão ser metidos naquele corredor e prateleira. E queres que o código peça os dados de cada livro a lá meter. Se é isso tens dois ciclos a mais no fim. Em vez de: for c := 1 to corr do Begin for p := 1 to prat do Begin for l := 1 to liv do Begin writeln('Insira o Título: '); readln(livro[c,p,l].titulo); writeln('Insira o Autor: '); readln(livro[c,p,l].autor); writeln('Insira o Assunto: '); readln(livro[c,p,l].assunto); writeln('Insira a Data: '); readln(livro[c,p,l].data); writeln('Insira a Cota '); readln(livro[c,p,l].cota); writeln('Insira o Editor: '); readln(livro[c,p,l].editor); End; End; End; queres: for l := 1 to liv do Begin writeln('Insira o Título: '); readln(livro[corr,prat,l].titulo); writeln('Insira o Autor: '); readln(livro[corr,prat,l].autor); writeln('Insira o Assunto: '); readln(livro[corr,prat,l].assunto); . . . End; Já agora, não sei de que tipo são as variáveis corr, prat e liv mas se fôrem integer tens de testar os valores delas para valores negativos também, senão estás sujeito a meter -2 nalgum campo e estourar o programa. Muda os testes de: Repeat clrscr; writeln('Em que corredor pretende colocar o livro: '); readln(corr); if corr > 3 then Begin writeln('Só existem 3 corredores.'); readkey; End; Until corr <= 3; para: repeat clrscr; writeln('Em que corredor pretende colocar o livro: '); readln(corr); if (corr > 3) or (corr < 1) then begin writeln('Só existem 3 corredores.'); readkey; end else Break; until False;
elrey Posted March 23, 2012 at 12:21 AM Author Report #445267 Posted March 23, 2012 at 12:21 AM Boas. Obrigado pela ajuda, está a trabalhar bem agora. 😉 Só uma coisa, quando "fechas-te" o IF metes-te: End else break; O que faz propriamente ? É que ainda não aprendi assim.
nunopicado Posted March 23, 2012 at 12:33 AM Report #445270 Posted March 23, 2012 at 12:33 AM Quando usas o comando Break dentro de um ciclo (FOR, REPEAT OU WHILE), o ciclo é terminado, independentemente da condição usada. No teu caso, como o bsccara usou um repeat sem condição de finalização (Until False, o repeat nunca terminaria), é preciso algum outro método para terminar o ciclo. No caso, o ciclo termina quando não é dada uma mensagem de erro no IF anterior... "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.
elrey Posted March 23, 2012 at 02:00 AM Author Report #445281 Posted March 23, 2012 at 02:00 AM Obrigado pela explicação. Cumprimentos.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now