Jump to content

Dúvida em Procedimento


elrey
 Share

Recommended Posts

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.

Link to comment
Share on other sites

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

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.

Link to comment
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
 Share

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