[ Foro de Pascal ]

Arreglo

26-May-2013 05:09
Invitado (Emiliano)
2 Respuestas

Tengo problemas para hacer el siguiente ejercicio:
-Realizar la funcion que indique si un elemento dado se encuentra en un arreglo de caracteres.

Lo que hice fue lo siguiente:

 
program p7e3;
const
	n=8;
	type
		arreglo=array[1..8] of char;
function encuentraelem(caracter:arreglo;elemento:char):boolean;
var i:integer;
	aux:boolean;
begin
	encuentraelem:=false;
	i:=1;
	aux:=false;
	while (i<=n) and aux=false do
	begin
		if elemento=caracter[i] then
			aux:=true
		else
			i:=i+1;
	end;
	encuentraelem:=aux;
end;
var caracter:arreglo;
	elemento:char;
	i:integer;
begin
	i:=1;
	readln(elemento);
	for i:=i to n do
		readln(caracter[i]);
	encuentraelem(caracter,elemento);
	writeln(encuentraelem(caracter,elemento));
end.
 



Cuando el caracter se encuentra me da bien el true, pero cuando no se encuentre, me tira un error.

Gracias.


26-May-2013 12:13
Nacho Cabanes (+31)

Te falta un paréntesis en la segunda comparación, para asegurarte de que las prioridades sean las correctas:

 
while (i<=n) and (aux=false) do
...
 



Para descubrir fallos como estos, puedes ayudarte con un "writeln" que te muestre los valores. Yo he usado la siguiente línea para asegurarme de que el problema era ese:

 
writeln(i,' ',n,' ',aux=false, ' ', i<=n, ' ',
    (i<=n) and aux=false, ' ',
    (i<=n) and (aux=false));
 



Verás que el resultado es algo como:

 
1 8 TRUE TRUE TRUE TRUE
2 8 TRUE TRUE TRUE TRUE
3 8 TRUE TRUE TRUE TRUE
4 8 TRUE TRUE TRUE TRUE
5 8 TRUE TRUE TRUE TRUE
6 8 TRUE TRUE TRUE TRUE
7 8 TRUE TRUE TRUE TRUE
8 8 TRUE TRUE TRUE TRUE
9 8 TRUE FALSE TRUE FALSE
...
 



Es decir, la última condición, con paréntesis, cambia correctamente a FALSE cuando debe, pero sin paréntesis no se analiza correctamente y y se sigue interpretando como TRUE.


27-May-2013 01:25
Invitado (Emiliano)

Mira lo que era!. La verdad entendi el error, lo otro no mucho, me cuesta pero muchisimas gracias. El sabado que viene tenemos parcial, asi que es probable que me aparezca con más preguntas.
Gracias nuevamente.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)