[ Foro de Pascal ]

reccorrido

14-Feb-2014 18:16
oscar gomez
9 Respuestas

hola profesor nacho cabanes
deseo para un programa que realizo , me permitas tu ayuda para lo siguiente:
como hago para estando en cualquiera de las posiciones de un array pueda a partir de ella buscar en el resto de elementos de dicho array ,si su valor contenido esta repetido .
pues imaginate que tenga esta situacion:

v=  12    5    4     5    6    5     2    1
imaginate estoy en la posicion i:=4 como ves en esa posicion esta el valor 5, pues a partir de ahi quiero buscar en el resto del vector cuantos 5 mas hay, como ves para esa posicion el resultado seria 2 correspondientes a las posiciones i:=2  e i:=6

y de igual forma lo quiero hacer para cada elemento del vector, lo anterior te expuse un caso puntual, como podria realizar dicha cuestion es que me he bloqueado en eso en un programa de juegos de marcianitos, espero tu siempre valiosa y brillante ayuda y de antemano mil gracias.


15-Feb-2014 00:43
Invitado (Anonidym)

Si conoce la posición puede ir hacia adelante y hacia atrás con dos ciclos for, uno con "to" y el otro con "downto", para contar los números repetidos debes utilizar un contador que deberás inicializar en cero al comienzo del programa. Todo, más o menos así:

 
program adelanteYAtras;
 
const
 N = 8;
 A: array[1..N] of integer = (12,5,4,5,6,5,2,1);
 
var
 pos, cont, i: integer;
 
BEGIN
 write('Introduzca la posicion del arreglo para iniciar la busqueda: ');
 readln(pos);
 writeln('El elemento de posicion ',pos,' guarda el entero ',A[pos]);
 cont:= 0;
 for i:=pos to N do
  if A[i]=A[pos] then
    cont:= cont + 1;
 for i:=(pos-1) downto 1 do
  if A[i]= A[pos] then
    cont:= cont + 1;
 writeln('El valor ',A[pos],' se repite ',cont,' veces en el arreglo.');
 
 readln;
END.
 

15-Feb-2014 10:24
oscar gomez

hola compañero anonimo, gracias por responder, sin embargo no es lo que queria exactamente quiza no fui muy claro...  inicialmente no se conoce esa posicion, la idea digamos es para cada elemento del array ,en un ejemplo quiza sea mas claro:

v=  12    5    4     5    6    5     2    1
imaginate que llegamos en la pasada 2(for i:=2 ), al valor 5 (A[2] =5), bien al hacer la busqueda atras y delante de el encontrariamos que dicho valor lo encontramos  dos veces en las posiciones i:=4,e i:=5 , luego en la pasada 4( for :=4), llegamos al valor 5(A[4]=5) , bien en en esta nueva busqueda encontrariamos de igual forma 2 veces dicho valor pero ahora en las posiciones i=2 e i= 6 y asi sucesivamente ir revizandolo para cada valor del array, es decir no hay esta posibilidad que tu contemplas en tu amable solucion:

write('Introduzca la posicion del arreglo para iniciar la busqueda: ');
readln(pos);


mil gracias por toda la ayuda que puedan brindarme, y en espera siempre de las respuestas de nuestro gran profesor nacho.


15-Feb-2014 10:33
Nacho Cabanes (+31)

Yo no acabo de entender lo que quieres. Si no es válida la respuesta que te ha dado Anonidym... ¿qué datos deberías recibir y qué resultado deberías devolver? ¿Es el número que más veces se repite?  ¿Es la cantidad de veces que se repite cada elemento?


15-Feb-2014 17:16
oscar gomez

hola profesor nacho gracias por responder. te cuento cosas...
a)
la idea efectivamente como tu me preguntas, lo que necesito de momento es dado un array ingresado por teclado, decir la cantidad de veces que se repite cada elemento, lo que pasa es que en la respuesta de anonimo el asume:
write('Introduzca la posicion del arreglo para iniciar la busqueda: ');
readln(pos);

y es para cada posicion del vector sin pedir una posicion especifica del vector si no para todo el vector por cada elemento.

b)
aprovecho tu intervencion y de una vez te quiero preguntar profesor, si ahora cada elemento representa un valor distinto al que contiene , me refiero en esta segunda pregunta a si el vector fuera porejemplo :
1   2    0   1    5    0

en la posicion i:=1 estaria el valor 1,  pero ahora ese valor me representa  al  numero de ceros que tiene el array, en este caso seria 2 ( posiciones 3 y 6 del array ), y el valor 2 de la posicion i:=2, me representa al numero de unos contenidos en el array, la respuesta seria 2 ( que son los unos que estan en la posicion i=1 y i= 4, ) como podria manejar esta variacion respecto a lo planteado en la parte a) ??? , que cambios deberia tener ahora en cuenta,cualquier ayuda o idea es importamte profesor.

mil gracias profesor y compañeros del foro.


17-Feb-2014 12:12
Nacho Cabanes (+31)

Una forma sencilla y rápida de saber cuánto se repite cada elemento es crear un array en el que guardar esa información. Por ejemplo, cada vez que encuentras un 3, aumentas el valor de la posición 3 del array: si encuentras un 15, aumentas el de la posición 15, y así sucesivamente.

Eso tiene el inconveniente de que si los datos tienen un rango muy grande, el array puede ser grande, y de hecho debes conocer ese rango (valor mínimo y valor máximo) antes de crear el array, pero a cambio es sencillo de programar.


17-Feb-2014 12:31
oscar gomez

buen dia profesor nacho.
profesor la primera parte la a) tal como me la explicaste ya me funciona sin embargo queria preguntarte por la parte b) que quedo sin tu respuesta quiza esperando a que realizara la parte a) la cual ya he superado, me podrias ahora hechar una mano en dicha parte que te recuerdo:

b)
aprovecho tu intervencion y de una vez te quiero preguntar profesor, si ahora cada elemento representa un valor distinto al que contiene , me refiero en esta segunda pregunta a si el vector fuera porejemplo :
1   2    0   1    5    0

en la posicion i:=1 estaria el valor 1,  pero ahora ese valor me representa  al  numero de ceros que tiene el array, en este caso seria 2 ( posiciones 3 y 6 del array ), y el valor 2 de la posicion i:=2, me representa al numero de unos contenidos en el array, la respuesta seria 2 ( que son los unos que estan en la posicion i=1 y i= 4, ) como podria manejar esta variacion respecto a lo planteado en la parte a) ??? , que cambios deberia tener ahora en cuenta,cualquier ayuda o idea es importamte profesor.

mil gracias profesor y compañeros del foro.


17-Feb-2014 12:35
oscar gomez

(duplicado)


17-Feb-2014 15:43
Nacho Cabanes (+31)

Es que no entiendo esa segunda parte, porque estás solapando datos y resultados, que es algo muy peligroso y difícil de solucionar de forma coherente.

Por ejemplo, si añades otro cero, el valor de la primera posición cambiaría, con lo que cambiaría la cantidad de doses, y entonces debería cambiar la tercera posición, y así sucesivamente.

Datos por un lado y resultados por otro, no los mezcles.


17-Feb-2014 17:13
oscar gomez

tienes toda la razon profesor nacho , me di cuenta del error en el que estaba  gracias a tu observacion y ya pude solucionar el problema y el programa, mil gracias.






(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.)