Pascal/Turbo Pascal - estructura en una array

   
Vista:

estructura en una array

Publicado por Carlos (12 intervenciones) el 11/12/2009 10:42:41
Hola amigos,
en primer lugar felicitaros por vuestra genial aportación a los "aspirantes" a programadores que intentamos llevar a cabo nuestros sueños
Estoy empezando a programar en SIMOTION (SIEMENS), es una herramienta para generar programas de ejecución en un sistema combinado entre PLC's y accionamientos SINAMICS (servomotores)
Este lenguaje estructurado está basado en PASCAL salvo algunas pequeñas diferencias
Os explico cual es mi problema (intentaré ser breve):
- Tengo un array con 500 elementos (de 0 a 499), el valor de dichos elementos ya está predefinido y es constante, p.ej: array[0]:=4.235 , array[225]:=0.258 , array[499]:=24.529
Los valores de cada elemento ya están declarados previamente (a mano)
Lo que quiero conseguir es recorrer el array en flanco positivo desde "0" hasta "499" y volver a empezar desde "0" si es necesario hasta que la suma de dichos elementos sea ">=" que el valor de una variable "litros" p.ej: suma>=litros
Una vez alcanzado ese valor, que me devuelva la posición del último elemento del array que ha sido sumado, para que en el próximo ciclo pueda empezar la "suma" desde este último punto
Como he explicado tengo que estructurar la instrucción controlando los "indices" del array y el valor de cada uno de los elemento. Creo que esto se puede hacer utilizando una estructura FOR pero la verdad es que me supera y no veo la forma de hacerlo
He escrito algo de codigo, pero la verdad es que de momento "me supera"
Esto es lo que he escrito:
PROGRAM pruebas;
IF boton1 THEN
FOR k:=0 TO 359 DO
array[k]:=array[k]+1; //Así consigo recorrer la array, pero no puedo pararla
END_FOR;
FOR k:=0 TO 359 DO
IF array[k]>litros THEN
pos_array:=k;
END_IF;
END_FOR;
END_IF;
END_PROGRAM
Ruego me echeís un "cable", ya que estoy muy perdido. gradeceré vuestra ayuda inmensamente
Gracia y un abrazo a todos los compañeros del foro
Atentamente,
Carlos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:estructura en una array

Publicado por Antonio (74 intervenciones) el 11/12/2009 12:19:52
Hola Carlos.

Yo creo te ayudariamos gustosamente, pero, almenos amí me ocurre que no entiendo lo que quieres decir con: "y volver a empezar desde cero si es necesario hasta que la suma de dichos elementos sea >= que el valor de una variable". Cómo ha de efectuarse esa suma: "¿agregando a cada elemento del
array nuevas cantidades?
Un saludo.
Antonio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Carlos (12 intervenciones) el 11/12/2009 13:02:02
Hola Antonio,
muchas gracias por tu pronta respuesta y amabilidad. Intentaré explicarme mejor:

Tengo una lista de numeros REALES, las cuales he introducido en un array. Cada elemento del array tiene un valor diferente, pero siempre es el mismo, nunca cambia. Digamos que el array es una CONSTANTE no una VARIABLE

ARRAY[0..499] OF REAL
Litros :REAL;
Posicion :INT;

Tengo una variable que puede tener un valor p.ej: de 456.23 <nombre> LITROS
//la suma de los valores correlativos del array debe ser >= que el valor de LITROS (en este caso 456.23, p.ej:)
Tambien otra variable para la posición del último elemento del array sumado <nombre> POSICION
//despues de sumar correlativamente "el valor" de cada uno de los elementos del array (aunque el bucle recorra varias veces el array) y el resultado de dicha suma alcanze el valor de LITROS, necesito saber cual es el último elemento del array que se ha sumado (p.ej: array[223] y así en el proximo ciclo podré empezar la suma desde la posición array[223] en vez desde array[0]

Necesito sumar los valores correlativos del array empezando por cero (numero del elemento) y acabando por 499 (numero del elemento), pero en el caso de que el resultado de dicha suma no sea suficiente para igualar o superar el valor que necesito, la suma debe continuar sin detenerse, y como ya hemos llegado al valor máximo (499) dicha suma debe continuar realizando un bucle, ejemplo:
array[0] + array[1] + array[2] +array[3] .............. + array[499] + array[0] + array[1]
hasta conseguir alcanzar el valor especificado en la variable

Cuando empiezo a sumar los valores correlativos de los elementos del array, necesito compararlos con el valor de la variable LITROS con valor 456.23. Cuando la suma de dichos elementos (de su valor, no del ordinal) sea igual o mayor que el valor de dicha variable LITROS con valor 456.23 entonces debe detenerse la suma, y devolverme en otra variable POSICION la posición o el ordinal del elemento de dicha array.

La verdad es que estoy empezando y me resulta muy difícil implementar lo que quiero en código. Muchas gracias de nuevo por tu ayuda e interes, estoy realmente desorientado y necesito tu apoyo

Gracias de nuevo y un abrazo,

Carlos

// mi correo es jcarlostb@gmail.com //
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Diego Romero (997 intervenciones) el 11/12/2009 14:28:33
Parece que estás usando un dialecto de Pascal bastante extraño. Pero no veo difícil el problema que tienes que resolver. La pregunta que me asalta es si tienes la sentencia while en ese dialecto. Si es así, la solución es bastante sencilla:

Write('Limite: ');
ReadLn(limite);
indice:=0;
apocalipsis:=true;
while apocalipsis do
begin
suma:=0;
while suma<=limite do
begin
suma:=suma+vector[indice];
indice:=indice+1;
if indice > 499 then indice:=0;
end;
WriteLn('La suma es: ',suma);
Write('Última posición: ');
if (indice-1) < 0 then WriteLn('499')
else WriteLn(indice-1);
end;

Conste que esto es un ciclo infinito.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Carlos (12 intervenciones) el 11/12/2009 19:45:42
Hola Diego,

muchísimas gracias por tu ayuda y aportación de código

En verdad es un dialecto un poco raro, pero la sentencia WHILE si está disponible

Voy a estudiar tu código, ya que necesito comprender tu estructura para aprender a plantear este tipo de problemas para próximas aplicaciones

Nada mas comprenda el código lo insertaré en mi programa y estoy seguro de funcionará a las mil maravillas

Te dejo mi correo por si puedo ayudarte en otras materias que domino, como la ingeniería mecánica, CAD, CAM y similares

Quedo muy agradecido y espero poder corresponder a tu amable e incondicional ayuda

Un abrazo,

Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Diego Romero (997 intervenciones) el 11/12/2009 21:30:32
Comprendo.

Sé con la clase de equipos que estás lidiando pues tengo experiencia en sistemas SCADA. Y sé de qué se trata ese array que mencionas, debe ser un mapeo de una serie de sensores con señal digitalizada. Por eso necesitas repetir el proceso una y otra vez.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Carlos (12 intervenciones) el 12/12/2009 15:22:33
Perdón pero se ma había pasado leer este post. Efectivamente, es un sistema SCADA con multiples salidas digitales. Veo que tambien conoces este campo
Un abrazo,
Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Carlos (12 intervenciones) el 11/12/2009 19:53:57
mi email: jcarlostb@gmail.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Antonio (74 intervenciones) el 11/12/2009 19:00:28
Hola Carlos.
Veo que el Sr Romero te ha pasado el codigo fuente para resolver tu problema.
Yo, como tambien tenía pensado, también te envio mi parte de solucion.Así tienes
para elegir.
Doy por hecho, según explicas, que sabes cargar los valores en las posiciones del array.
Para la suma total y el valor de la otra variable (Litros) he creido
conveniente declarar un EXTENDED en lugar de un REAL por si los valores fueran
muy elevados. No se si en tu lenguaje de programacion funciona asi o tendras que declararlos como REALES:

{$N+}
program Posicion_en_un_array;
uses crt;
const
Max = 499;
var
VTotal, litros : extended;
posicion : integer;
SumasParciales : array[1..Max] of real;

begin
clrscr;
posicion := 0;
vtotal := 0;
Litros := 5; {este es un valor fictisio}
repeat
posicion := posicion+1;
Vtotal := VTotal + sumasparciales[posicion];
if posicion = Max then
posicion := 0;
until VTotal >= Litros;
writeln;
writeln('Posicion = ',posicion:4,' VAlor total = ',vtotal:10:3)
end.
Un saludo y suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Carlos (12 intervenciones) el 11/12/2009 19:53:09
Hola Antonio,

muchísimas gracias por tu ayuda y código, me sacas de un apuro importante

Intentaré evaluar las dos propuestas, como ya sabes tengo muy poca experiencia en este campo, pero estoy seguro de que tu solución es también perfecta para mi aplicación . Probaré el código y te comentaré por este medio que tal me ha ido.

Por favor no dudes en ponerte en contacto conmigo para cualquier cosa que necesites. Te dejo mi correo por si puedo ayudarte en otras materias que domino, como la ingeniería mecánica, CAD, CAM y similares

Quedo muy agradecido y espero poder corresponder a tu amable e incondicional ayuda

Un abrazo,

Carlos

mi email: jcarlostb@gmail.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Carlos (12 intervenciones) el 11/12/2009 20:23:55
Se me olvidava:

en mi lenguaje el EXTENDED se denomina LREAL (Long Real), que es para REAL's mas elevados o con más digitos

Gracias de nuevo y un abrazo,

Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Diego Romero (997 intervenciones) el 11/12/2009 21:27:35
Antonio:
Veo un pequeño problema con tu código: no estás contemplando la posición cero del array la cual es perfectamente válida según las especificaciones de Carlos. Se soluciona inicializando posicion a -1;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Carlos (12 intervenciones) el 11/12/2009 22:01:48
Hola Antonio y Diego,

Perdonadme, pero tengo una pregunta:

¿Que es crt y clrscr?

No sé si son bloques de función o algo similar

Mi sistema no reconoce la instruccion BEGIN

He estructurado vuestra propuesta y al compilar me da un error, quizás sea porque no conoce o no aplico bien crt y clrscr

Gracias de nuevo por vuestra gran ayuda

Un saludo,

Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Carlos (12 intervenciones) el 11/12/2009 22:02:16
Hola Antonio y Diego,

Perdonadme, pero tengo una pregunta:

¿Que es crt y clrscr?

No sé si son bloques de función o algo similar

Mi sistema no reconoce la instruccion BEGIN

He estructurado vuestra propuesta y al compilar me da un error, quizás sea porque no conoce o no aplico bien crt y clrscr

Gracias de nuevo por vuestra gran ayuda

Un saludo,

Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Diego Romero (997 intervenciones) el 12/12/2009 03:15:09
uses crt; es la invocación a una bibliteca estandar de Turbo Pascal, allí está definido el procedimiento clrscr, este procedimiento limpia la pantalla. Creo que tú no necesitas esto así que puedes quitarlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Carlos (12 intervenciones) el 12/12/2009 11:56:52
Muchas gracias Diego, voy a quitarlo, ya que me no había forma de que funcionase. Gracias de nuevo y un abrazo, Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Carlos (12 intervenciones) el 12/12/2009 12:08:24
Diego,

por favor podrías incluir comentarios en tu código, de este modo será más fácil para mí comprenderlo, ya que como sabes mi nivel no es muy alto

Gracias y un abrazo,

Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Diego Romero (997 intervenciones) el 12/12/2009 15:02:01
No se pueden modificar mensajes ya publicados...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:estructura en una array

Publicado por Carlos (12 intervenciones) el 12/12/2009 15:18:25
Muchas gracias de todos modos. Saludos, Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar