Jump to content

Recommended Posts

Posted

Boas, há 1 ano comecei a aprender Pascal no entanto acabei por deixar a linguagem para trás.

É o seguinte, há dias lembrei-me de fazer um programa muito simples para ver se ainda me lembrava disto.

Basicamente é um programa que pede ao utilizador a quantidade de numeros que deseja introduzir e pede de seguida para os introduzir.

Depois mostra os números introduzidos e por fim, organiza os numeros introduzidos e mostra-os au utilizador.

Aqui fica o código:



program teste;
var
n,i: integer;
a: array[1..200] of integer;

procedure org( p : array of integer ; max : integer) ;
 var
j,k,l : integer;

 begin
   for j:=1 to max do
	   begin
			for k:=1 to max do
				begin
				if p[j]<p[k] then
				   begin
				   p[j]:=p[j] xor p[k];
				   p[k]:=p[j] xor p[k];
				   p[j]:=p[j] xor p[k];
				   end;
				end;
	   end;
	   writeln('Os numeros organizados ficam: ');
  for l:=1 to max do
	  begin
		   writeln(p[l]);
	  end;
 end;


begin
 n:=0;
 Writeln('este teste e para ver se ainda sei programar em pascal');
 Repeat
	   Writeln('Indique quantos numeros deseja introduzir:');
	   Readln (n);
	   If n>200 then
				writeln('Ate 200.');
 Until n<=200;
 for i:=1 to n do
	 Begin
	 //Simula a Introdução de Numeros
	 a[i]:=random(100);
	 End;
  writeln('Aqui estão os numeros introduzidos:');
 for i:=1 to n do
	 Begin
		  writeln (a[i]);
	 End;
 Readln;
 org(a,n);
 readln;
end.


Simulei a introdução de números para n ter de perder tempo a introduzir manualmente.

O problema é que ao mostrar os números organizados, o numero que fica na posição 1 do array não é mostrado, e em vez disso é mostrado um 0.

Alguem me consegue ajudar?

Cumps

Posted

O problema não está na aleatoriedade, neste caso. Mas sim, o Randomize deverá ser utilizado, de qualquer das formas.

Fiz um teste, e esta foi a lista criada por random:

68
63
88
67
75
61
29
49
53
1

E esta foi a lista que passou para o procedimento Org:

63
88
67
75
61
29
49
53
1
0

Fiz mais uns testes, e a minha conclusão é esta: quando passas um array por parâmetro, os índices que definiste para limites passam a ser de base zero. Neste caso, passaram de 1..200 para 0..199. Se fosse 3..10 passaria a ser 0..7.

Mudei o programa nestes aspectos:

a: array[0..199] of integer;

for j:=0 to max do
for k:=0 to max do
for l:=0 to max do

for i:=0 to n-1 do

org(a,n-1);

Assim acho que já funciona.

Knowledge is free!

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