Jump to content

dúvida no pascal zim


RO7
 Share

Recommended Posts

Boa tarde, eu estou a tirar um curso de gestão e programação de sistemas informáticos, a professora pediu nos um um programa, eu já o terminei só que ele está com um problema que eu olhado para o código não consigo encontrar, se alguém me puder dizer onde está o erro para eu corrigir agradeço, é que tenho de entregar na segunda feira.

Program Mod_4 ;
var
nomecliente:array[1..100]of char;
codigocliente:array[1..100]of string;
moradacliente:array[1..100]of char;
telefonecliente:array[1..100]of integer;
contribuintecliente:array[1..100]of integer;
nomefornecedor:array[1..100]of char;
codigofornecedor:array[1..100]of string;
moradafornecedor:array[1..100]of char;
telefonefornecedor:array[1..100]of integer;
artigosfornecidos:array[1..100]of string;
contribuintefornecedor:array[1..100]of integer;
nomeartigo:array[1..100]of char;
codigoartigo:array[1..100]of string;
quantidadeartigo:array[1..100]of integer;
precoartigo:array[1..100]of integer;
secao,z,x,opcao,qnts,apagar,quant:integer;
quere,qual:string;
quer:char;
//***************************************************
begin

textcolor(lightcyan);
delay(100);
writeln('					 ********************************* ');
writeln('					 *	 Bem-Vindo à Gráfica	 * ');
writeln('					 *********************************');
textcolor(lightred);
writeln('');
writeln('					 *********************************');
writeln('					 * Programa Realizado por: * ');
writeln('					 *	 ####### ########	 *');
writeln('					 *********************************');


delay(1000);
textcolor(yellow);
writeln('Escolha uma opção:');
writeln('');
textcolor(lightgreen);
writeln('1- Dados de clientes');
writeln('2- Dados de Fornecedores');
writeln('3- Stock');
writeln('4- Saír');
readln(secao);
Case secao of
//***************************************************
1:
begin
 repeat
 textcolor(lightmagenta);
 clrscr;
 delay(100);
 gotoxy(15,15);
 writeln('A Carregar');
 delay(100);
 gotoxy(25,15) ;
 Writeln('.');

 delay(1000);
 gotoxy(26,15);
 writeln('.');
 delay(1000);
 gotoxy(27,15);
 //***************************************************

 clrscr;
 textcolor(yellow);
 WRITELN('Escolha a opção que pretende ');
 writeln('');
 textcolor(lightgreen);
 Writeln(' 1-Inserir');
 writeln('');
 writeln(' 2-Remover');
 writeln('');
 writeln(' 3-Alterar');
 writeln('');
 writeln(' 4-Pesquisar');
 readln(opcao);
 //***************************************************
 case opcao of
 1:
 begin
	 repeat
	 clrscr;
	 textcolor(yellow);
	 Writeln('Quantos clientes deseja introduzir?');
	 readln(qnts);
	 clrscr;
	 for x:=1 to qnts do
	 begin
		 clrscr;
		 textcolor(lightcyan);
	 gotoxy(2,5);
 textcolor(lightcyan);
 writeln('Nome do Cliente:');
		 readln(nomecliente[x]);

	 gotoxy(2,7);
 writeln('Código de cliente:');
		 readln(codigocliente[x]);

		 gotoxy(2,9);
 writeln('Morada do cliente');
		 readln(moradacliente[x]);

		 gotoxy(2,11);
 writeln('Contacto do cliente:');
		 readln(telefonecliente[x]);

	 gotoxy(2,13);
 Writeln('Número de contribuinte:');
		 readln(contribuintecliente[x]);
	 end;

	 clrscr;
	 textcolor(yellow);
	 writeln('Deseja introduzir um novo cliente?[s]im,[N]ão');
	 readln(quer);
	 until (quer='n') or (quer='N')
 end;
 //***************************************************

 2:
 begin
	 clrscr;
	 textcolor(yellow);
	 writeln('Qual o codigo do cliente que deseja Remover?');
	 readln(qual);
	 for x:=1 to qnts do
	 begin
	 if codigocliente[x]=qual then
	 begin
		 nomecliente[x]:='-';
		 codigocliente[x]:='-';
		 moradacliente[x]:='-';
		 telefonecliente[x]:=0;
		 contribuintecliente[x]:=0;
		 textcolor(lightred);
		 writeln('Cliente removido')
	 end
	 else
	 writeln('');
	 end;
 end;
 //***************************************************

 3:
 begin
	 clrscr;
	 textcolor(yellow);
	 writeln('Qual o codigo do cliente que deseja alterar?');
	 readln(qual);
	 for x:=1 to 100 do
	 begin
	 if codigocliente[x]=qual then
	 begin
		 clrscr;
		 textcolor(lightcyan);
		 gotoxy(2,5);
		 writeln('Nome de cliente:');
		 readln(nomecliente[x]);
	 gotoxy(2,7);
		 writeln('Codigo do Cliente:');
		 readln(codigocliente[x]);
	 gotoxy(2,9);
		 writeln('Morada do cliente:');
		 readln(moradacliente[x]);
	 gotoxy(2,11);
		 writeln('Contacto do cliente:');
		 readln(telefonecliente[x]);
	 gotoxy(2,13);
		 writeln('Contribuinte do cliente:');
		 readln(contribuintecliente[x]);
	 end
	 else
	 writeln('');
	 end;
 end;
 //***************************************************
 4:
 begin
	 clrscr;
	 textcolor(lightred);
 writeln('Digite o codigo do cliente que pretende pesquisar?');
 readln(quere);
 for x:=1 to 100 do
 if codigocliente[x]=quere then
 begin
	 clrscr;
	 gotoxy(2,5);
	 writeln('Código do Fornecedor:',' ',codigofornecedor[x]);
	 gotoxy(2,7);
	 writeln('Nome do Fornecedor:',' ', nomefornecedor[x]);
	 gotoxy(2,9);
	 writeln('Morada do Fornecedor:',' ',moradafornecedor[x]);
	 gotoxy(2,11);
	 writeln('Contacto do Fornecedor:',' ',telefonefornecedor[x]);
	 gotoxy(2,13);
	 writeln('Número de contribuinte do Fornecedor:',' ',contribuintefornecedor[x]);
	 gotoxy(2,15);
	 writeln('Artigos fornecidos:',' ',artigosfornecidos[x]);
 end;
 end;
 end;

clrscr ;
writeln('Deseja regressar ao menu?[s]im,[N]ão');
readln(quer);
until (quer='n') or (quer='N')
end;
//***************************************************
2:
begin
repeat
textcolor(lightmagenta);
clrscr;
delay(1000);
gotoxy(15,15);
writeln('A Carregar');
delay(1000);
gotoxy(25,15) ;
Writeln('.');

delay(100);
gotoxy(26,15);
writeln('.');
delay(100);
gotoxy(27,15);
//***************************************************

clrscr;
textcolor(yellow);
WRITELN('Escolha a opção que pretende ');
writeln('');
textcolor(lightgreen);
Writeln(' 1-Inserir');
writeln('');
writeln(' 2-Remover');
writeln('');
writeln(' 3-Alterar');
writeln('');
writeln(' 4-Pesquisar');
readln(opcao);
//***************************************************
case opcao of
1:
begin
 repeat
 clrscr;
 textcolor(yellow);
 Writeln('Quantos fornecedores deseja introduzir? ');
 readln(qnts);
 clrscr;
 textcolor(lightcyan);
 for x:=1 to qnts do
 begin
 gotoxy(2,5);
	 writeln('Nome do fornecedor:');
	 readln(nomefornecedor[x]);

 gotoxy(2,7);
	 writeln('Codigo do Fornecedor:');
	 readln(codigofornecedor[x]);

 gotoxy(2,9);
	 writeln('Morada do Fornecedor:');
	 readln(moradafornecedor[x]);

 gotoxy(2,11);
	 writeln('Contacto do Fornecedor:');
	 readln(telefonefornecedor[x]);

 gotoxy(2,13);
	 writeln('Artigos fornecidos:');
	 readln(artigosfornecidos[x]);

 gotoxy(2,15);
	 writeln('Número de contribuinte do cliente:');
	 readln(contribuintefornecedor[x]);
 end;
 clrscr;
 writeln('Deseja introduzir um novo fornecedor?[s]im,[N]ão');
 readln(quer);
 until (quer='n') or (quer='N')
end;
//***************************************************
2:
begin
 clrscr;
 writeln('Introduza o código do fornecedor que deseja remover?');
 readln(qual);
 for x:=1 to 100 do
 begin
 if codigofornecedor[x]=qual then
 begin
	 nomefornecedor[x]:='-';
	 codigofornecedor[x]:='-';
	 moradafornecedor[x]:='-';
	 telefonefornecedor[x]:=0;
	 artigosfornecidos[x]:='-';
	 contribuintefornecedor[x]:=0;
	 writeln('Fornecedor removido');
 end
 else
 writeln('');
 end;
end;

//***************************************************
3:
begin
 clrscr;
 writeln('Introduza o código do fornecedor que deseja alterar?');
 readln(qual);
 for x:=1 to 100 do
 begin
 if codigofornecedor[x]=qual then
 begin
	 clrscr;
	 writeln('Nome do fornecedor:');
	 readln(nomefornecedor[x]);
	 gotoxy(2,5);
	 writeln('Codigo do fornecedor:');
	 readln(codigofornecedor[x]);
	 gotoxy(2,7);
	 writeln('Morada do fornecedor:');
	 readln(moradafornecedor[x]);
	 gotoxy(2,9);
	 writeln('Contacto do fornecedor:');
	 readln(telefonefornecedor[x]);
	 gotoxy(2,11);
	 writeln('Número de artigos fornecidos:');
	 readln(artigosfornecidos[x]);
	 gotoxy(2,13);
	 writeln('Contribuinte do fornecedor:');
	 readln(contribuintefornecedor[x]);
 end
 else
 writeln('');
 end;
end;
//***************************************************
4:
begin
 clrscr;
 writeln('Introduza código do fornecedor que quer pesquisar?');
 readln(quere);
 for x:=1 to 100 do
 if codigofornecedor[x]=quere then
 begin
 gotoxy(2,5);
 writeln('O nome do fornecedor é: ', nomefornecedor[x]);
 gotoxy(2,7);
 writeln('O codigo do fornecedor é: ', codigofornecedor[x]);
	 gotoxy(2,9);
 writeln('O morada do fornecedor é: ', moradafornecedor[x]);
	 gotoxy(2,11);
 writeln('O telefone do fornecedor é: ', telefonefornecedor[x]);
	 gotoxy(2,13);
 writeln('O numero de artigos fornecidos é: ', artigosfornecidos[x]);
	 gotoxy(2,15);
 writeln('O contribuinte do fornecedor é: ', contribuintefornecedor[x]);

 end;
end;
end;
clrscr;
writeln('Deseja ir para o menu?[s]im,[N]ão');
readln(quer);
until (quer='n') or (quer='N')
end;
//***************************************************
3:
begin
clrscr;
Writeln('Qual a quantidade deseja inserir no sistema? (max.15)');
readln(qnts);
clrscr;
for x:=1 to qnts do
begin
clrscr;
gotoxy(2,5);
writeln('Digite o nome do artigo:');
readln(nomeartigo[x]);
gotoxy(2,7);
writeln('Introduza o Código do artigo:');
readln(codigoartigo[x]);
gotoxy(2,9);
writeln('Introduza a quantidade do artigo:');
readln(quantidadeartigo[x]);
gotoxy(2,11);
writeln('Introduza o preço do artigo:');
readln(precoartigo[x]);
end;
clrscr;
if qnts<=10 then
writeln('Em stock há menos de 10 unidades desse produto');
end;
//***************************************************
4:
begin
end;
end;
end.

O problema está depois de inserir um cliente ou fornecedor e voltar ao menu quando escolho a opção ''4-Pesquisar'' devia de aparecer os dados do cliente/fornecedor só que passa muito depressa não entendo porque 😞

Edited by apocsantos
geshi
Link to comment
Share on other sites

A questão é que dentro da opção 4, tu mostras os dados mas não fazes uma pausa ao programa para dar tempo do utilizador ver esses dados.

Assim, quando acaba de escrever os artigos fornecidos, ele termina imediatamente o ciclo, começando de novo, ou seja, apagando o que escreveu.

Tens de colocar algo no fim da opção 4 que faça o programa parar, tipo um readln, por exemplo, que te espera pelo <Enter> para continuar:

      4:
        begin
           clrscr;
           textcolor(lightred);
           writeln('Digite o codigo do cliente que pretende pesquisar?');
           readln(quere);
           for x:=1 to 100 do
               if codigocliente[x]=quere then
                  begin
                     clrscr;
                     gotoxy(2,5);
                     writeln('Código do Fornecedor:',' ',codigofornecedor[x]);
                     gotoxy(2,7);
                     writeln('Nome do Fornecedor:',' ', nomefornecedor[x]);
                     gotoxy(2,9);
                     writeln('Morada do Fornecedor:',' ',moradafornecedor[x]);
                     gotoxy(2,11);
                     writeln('Contacto do Fornecedor:',' ',telefonefornecedor[x]);
                     gotoxy(2,13);
                     writeln('Número de contribuinte do Fornecedor:',' ',contribuintefornecedor[x]);
                     gotoxy(2,15);
                     writeln('Artigos fornecidos:',' ',artigosfornecidos[x]);

                     writeln('Pressione <Enter> para continuar. . .');
                     readln;
                  end;
        end;

Claro que, como isto está dentro de um ciclo FOR, tem de carregar 100 vezes no <Enter>, e vai vendo um registo de cada vez.

Mas de qualquer maneira, também não cabia tudo no ecrã.

Edited by nunopicado

"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

Espera lá.

Agora é que vi bem.

Estava a ver o teu código e pareceu-me que querias mostrar todos os clientes (devido ao uso do FOR).

Para o que queres fazer, ou seja, mostrar apenas um que o utilizador escolher, não precisas meter dentro de um ciclo.

Repara, tu já tens os dados do cliente num array, acessível por um índice.

Quando pedes ao utilizador qual o cliente, estás a receber o índice que ele quer ver.

Ou seja, basta aceder ao array directamente com a resposta do utilizador:

      4:
        begin
           clrscr;
           textcolor(lightred);
           writeln('Digite o codigo do cliente que pretende pesquisar?');
           readln(quere);
           if (quere>=1) and (quere<=100)  // Uma pequena validação para ter a certeza que o utilizador não escolheu um índice que não exista, para evitar erros de execução
              then begin
                      clrscr;
                      gotoxy(2,5);
                      writeln('Código do Fornecedor:',' ',codigofornecedor[quere]);  // Acede ao array com o índice 'quere'
                      gotoxy(2,7);
                      writeln('Nome do Fornecedor:',' ', nomefornecedor[quere]);
                      gotoxy(2,9);
                      writeln('Morada do Fornecedor:',' ',moradafornecedor[quere]);
                      gotoxy(2,11);
                      writeln('Contacto do Fornecedor:',' ',telefonefornecedor[quere]);
                      gotoxy(2,13);
                      writeln('Número de contribuinte do Fornecedor:',' ',contribuintefornecedor[quere]);
                      gotoxy(2,15);
                      writeln('Artigos fornecidos:',' ',artigosfornecidos[quere]);

                      writeln('Pressione <Enter> para continuar. . .');
                      readln;
                   end;
        end;

E já agora, mais uma dica.

O WriteLn é diferente do Write no sentido em que, além de escrever, muda de linha no final.

Ora, se estás a usar o GotoXY para controlar a localização do cursor, não faz sentido deixares que o cursor seja controlado durante a escrita também.

Ou seja, sempre que usares o GotoXY, usa o Write e não o WriteLn.

Além de teres maior controlo sobre a localização do cursor, é menos uma instrução que o compilador tem de cumprir.

É certo que hoje em dia, essa instrução em particular não afecta a performance de um computador, mas ganhar o hábito de programar de forma optimizada vai ajudar-te imenso se algum dia tiveres de fazer um programa com milhares ou milhões de linhas de código. 😉

"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.