Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Como fazer vetores em pascal?


Posts recomendados

program Exercicio;
USES CRT;

VAR              
vetor: array[1..4] of integer;
m,p, menor : integer;

begin
      writeln('');
      writeln('Ex. Sistema composto (para e vetor)');
         m:=1;
        for i:=1 to 5 do
        begin
         writeln('insira um valor na posição: ', m);
         read(vetor[m]);
         m:=m+1
        end;
         for m:= 1 to 5 do
      begin
         for p:= 1 to 5 do
      begin
           if (vetor[p] > vetor[m]) then
      begin
           menor:= vetor[m];
           vetor[m]:=vetor[p];
           vetor[p]:=menor;
      end;
      end;
      end;
     
     for m:=1 to 5 do
      begin
      write('(',vetor[m],')');
      end;  
end.
                         

 Como está mostrado, preciso de um vetor com estrutura para, mas n consigo fazer este programa funcionar precisamente, agradeceria muito se alguém pudesse me ajudar.

Agradeço desde ja.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Whillis.

 

Qual erro está dando? qual parte não está funcionando?

 

 

Para adiantar...  Ao compilar o seu código, de cara o compilador (Free Pascal) acusa "Error: Identifier not found "i", ou seja, que não conseguiu encontrar o identificar do i. Que pelo contexto que ele não foi declarado... ou está sendo usado por engano...

 

Outro pontos:

 

1) READ x READLN

Resumidamente: não use read, use apenas readln. Um pouco sobre aqui:

 

 

 

2) CONTROLADOR DO VETOR

 

19 horas atrás, Whillis disse:

m:=1;
for i:=1 to 5 do
  begin
  writeln('insira um valor na posição: ', m);
  read(vetor[m]);
  m:=m+1
  end;

 

No seu código você está utilizando m para controlar o vetor, e ao mesmo tempo está utilizando o i para controlar o for. Perceba que em cada loop ambos estarão com o mesmo valor...  ou você troca o i para m, ou utiliza o i no lugar do m.  (por padronização, recomendam-se usar o i.. Abaixo comentado sobre).

 

 

 

3) CONTROLADOR DE LAÇOS

Interligado a questão de controlar os vetores, essas variáveis que controlam eles estão sendo manipuladas pelo for, geralmente são declarados como i e j. Não é obrigado, mas seria recomendado. É uma "convenção".

 

Ou existe alguma relação em usar m e p?

 

 

 

4) AGUARDAR FECHAMENTO

A depender do compilador, ao chegar no end. o programa é encerrado na hora, ou seja, pode não dar tempo de ler as últimas mensagem na tela. Para aguardar, usam-se um readln ou rearkey antes dele. Ex.:

 

for m:=1 to 5 do
  begin
  write('(',vetor[m],')');
  end;
readln;
readln;  
end.

obs.: como o seu código está usando read (sem o ln) para ler os dados, talvez seja necessário usar 2 readln, como código acima (pois um readln "finalizará o read" e o outro servirá para aguardar um ENTER). Se você usar readln, como sugeri no item 1), ai só vai precisar se um (o que vai aguardar o ENTER antes de fechar).

 

 

 

4) INDENTAÇÃO

Sempre mantenha o seu código indentado... é de suma importância. Ex.:

program Exercicio;
uses
  CRT;
var
  vetor: array[1..4] of integer;
  m,p, menor : integer;
begin
writeln('');
writeln('Ex. Sistema composto (para e vetor)');
m:=1;
for i:=1 to 5 do
  begin
  writeln('insira um valor na posição: ', m);
  read(vetor[m]);
  m:=m+1
  end;
for m:= 1 to 5 do
  begin
  for p:= 1 to 5 do
    begin
    if (vetor[p] > vetor[m]) then
      begin
      menor:= vetor[m];
      vetor[m]:=vetor[p];
      vetor[p]:=menor;
      end;
    end;
  end;
for m:=1 to 5 do
  begin
  write('(',vetor[m],')');
  end;  
end.

 

 

 

***

 

No aguardo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Simon Viegas 

Este programa precisa criar um laço de repetição e então a partir de um vetor colocar os números digitados em ordem crescente, porém assim que inicializo e digito os números ele põe em ordem números que eu nem digitei, ou repete números que digito apenas uma vez

 Ex.: eu inicializo o programa, digito os números 1, 8, 9, 5 e 6 e então é posto como resultado os números (1)(5)(5)(0)(5)

 

Eu arrumei o identifier " i " para " m " e " p ", porém o problema ainda vem acontecendo, e quando coloco apenas números menores que 5 o programa repete o "writeln ('insira um valor na posição:',m)" e não para até q eu digite um número maior que 5. 

usei o código que você mostrou:

VAR
   vetor: array[1..4] of integer;
   m, p : integer;
   menor: integer;

begin
writeln('');
writeln('Ex. Sistema composto (para e vetor)');
for m:=1 to 5 do
 begin
  writeln('insira um valor na posição: ', m);
  read(vetor[m]);
 end;
for m:= 1 to 5 do
 begin
for p:= 1 to 5 do
 begin
  if (vetor[p] > vetor[m]) then
   begin
   menor:= vetor[m];
   vetor[m]:=vetor[p];
   vetor[p]:=menor;
   end;
  end;
 end;
for m:=1 to 5 do
  begin
   write('(',vetor[m],')');
  end;
   readln;
   readln;  
  writeln('');
  writeln('---------------------------------------------------------');

end.

 

   Com relação ao identifier, estou usando as letras [m] e [p], pois esse código é parte de outro onde já utilizei os identificadores [ i ] e [ j ] 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
1 hora atrás, Whillis disse:

[...] assim que inicializo e digito os números ele põe em ordem números que eu nem digitei, ou repete números que digito apenas uma vez

 Ex.: eu inicializo o programa, digito os números 1, 8, 9, 5 e 6 e então é posto como resultado os números (1)(5)(5)(0)(5)

Qual o compilador que está utilizando? estou utilizando o Free Pascal Compiler 2.6.4 e aqui funcionou normalmente!

obs.: favor se atentar no item 1) da minha postagem anterior.

 

 

 

1 hora atrás, Whillis disse:

Eu arrumei o identifier " i " para " m " e " p ", porém o problema ainda vem acontecendo, e quando coloco apenas números menores que 5 o programa repete o "writeln ('insira um valor na posição:',m)" e não para até q eu digite um número maior que 5. 

usei o código que você mostrou:

Não consegui identificar nada no código que possa levar a essa "falha". Pode ser alguma coisa relacionada com o seu compilador... Aqui está funcionando normalmente... veja, alguns compiladores necessitam que salve o código antes de compilar, ou seja, pode está utilizando um arquivo antigo.

 

 

 

 

1 hora atrás, Whillis disse:

   Com relação ao identifier, estou usando as letras [m] e [p], pois esse código é parte de outro onde já utilizei os identificadores [ i ] e [ j ] 

Não tem problema... esses valores de i e j podem ser reutilizados quantas vezes quiser... a ideia é que eles sirvam como base do for, e que esses valores não precisam ficar armazenados... veja, o seu m e p são reutilizados no seu código... isso não tem problema, pois o valores deles "não são dados", ou seja, podem ser perdidos. tipo, você utilizou lá no primeiro for, após o fim dos laços, o valor de m não importa, a variável pode ser reutilizada depois, entende? Daí vem a "convenção".. se é para controlar uma laço, use i, se for um laço dentro do outro, use i e j. Poderíamos dizer que esses identificadores seriam utilizados nesses contexto de "auxiliares".

 

Fazendo uma analogia, por quê utilizamos "x" nas equações do segundo grau?  por quê na física utilizamos "t" para tempo, "f" para força etc?   é apenas uma convenção, poderia ser qualquer letra! mas assim ajudar a padronizar.

 

resumindo: pode utilizar i e j sem problema.

 

obs.: isso é apenas uma "conversão", ou seja, é uma recomendação..  a não ser que o contexto permita usar outras letras, por exemplo, quando está trabalhando com matrizes... lá na matemática, é também "convencionado" utilizar MxN para linhas e colunas, daí ficaria sensato utilizar M e N como controladores no programa... as letras fazem sentido com o contexto... ou seja, seria interessante tanto usar i e j, tanto m e n. (eu usaria m e n).

 

Por ai vai

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

program exercicio;
uses CRT;

var
vetor: array[1..5] of integer;
m, p : integer;
menor: integer;  

begin
writeln('');
writeln('---------------------------------------------------------');
writeln('Ex. Sistema composto (para e vetor)');
writeln('Digite 5 valores para coloca-los em ordem crescente')
writeln('')
    for m:=1 to 5 do
      begin
      writeln('insira um valor na posição: ', m);
      read(vetor[m]);
      end;
      readln;
    for m:= 1 to 5 do
      begin
    for p:= 1 to 5 do
      begin
    if (vetor[p] > vetor[m]) then
      begin
      menor:= vetor[m];
      vetor[m]:=vetor[p];
      vetor[p]:=menor;
      end;
      readln;
     end;
     readln;
    end;
    readln;
   for m:=1 to 5 do
    begin
  write('(',vetor[m],')');
   end;
   readln
writeln('');
writeln('---------------------------------------------------------');
readkey;
end.                                                                  

 Agora funcionou! 

mt obrigado pela preocupação, ai está o código que eu usei

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...