Título: Arrays en Pascal Publicado por: Corso en 9 Diciembre 2005, 19:05 pm Buenas...
Esto va mas que nada dirigido a jvchino, que al pobre lo tengo abrasado ya... (mis disculpas). Bueno, tengo que codificar un programa que gestione dos tablas, y el resultado debe ser algo como esto: Coleccion 1: Introduza los precios Cuadro 1: 100 Cuadro 2: 200 Cuadro 3: 300 Cuadro 4: 400 Coleccion 2: Introduza los precios Cuadro 1: 300 Cuadro 2: 500 Cuadro 3: 600 Cuadro 4: 1000 Coleccion 2 vale mas que coleccion 1 Introduzca el precio a buscar en las tablas (cero para terminar): 200 Coleccion 1: > Encontrado precio 200.0 en cuadro 2 Coleccion 2: > Precio 200.0 no encontrado. Introduzca el precio a buscar en las tablas (cero para terminar): 600 Coleccion 1: > Precio 600.0 no encontrado. Coleccion 2: > Encontrado precio 600.0 en cuadro 3 Introduzca el precio a buscar en las tablas (cero para terminar): 300 Coleccion 1: > Encontrado precio 300.0 en cuadro 3 Coleccion 2: > Encontrado precio 300.0 en cuadro 1 Introduzca el precio a buscar en las tablas (cero para terminar): 50 Coleccion 1: > Precio 50.0 no encontrado. Coleccion 2: > Precio 50.0 no encontrado. Introduzca el precio a buscar en las tablas (cero para terminar): 0 Coleccion 1: > Precio 0.0 no encontrado. Coleccion 2: > Precio 0.0 no encontrado. Y “mi”, codigo; Código:
Pues el primer problema... Hice un for justa al comienzo del procedimiento busca_precios, para ver que tenia dentro la tabla lectura2 Código: for o:=1 to tamcoleccion do El segundo problema... Si compilais el programa, toda salta bien hasta ‘Introduzca el precio a buscar en las tablas (0 para terminar)... Si metes por ejemplo 100, a parte de que se produce un bucle que no para, suelta Colección 1: Encontrado precio 100 en cuadro ‘el que sea en este caso’ Colección 2: Encontrado precio 100 en cuadro ‘el que sea en este caso’ Bueno esto es por lo de antes, por que como los valores de lectura1 pasan también a lectura2, pues es lo mismo... Lo que no entiendo es por que lo del bucle infinito... Sin esos dos problemas... Tendría que funcionar... Salu2. Título: Re: Arrays en Pascal Publicado por: jvchino en 10 Diciembre 2005, 08:05 am Me parece que estás un poco confundido con los TIPOS y VARIABLES. Pero primero empecemos por algo más básico:
EL BUCLE INFINITO Se da porque dentro del WHILE...DO no cambia el valor de "BUSCA", es decir te falta agregar: Código: write('Introduzca el precio a buscar en las tablas (0 para terminar)'); TIPOS Y VARIABLES Tienes dos tipos que son idénticos Código: type Y una sola variable "muestratablas" del tipo "coleccion". Cuando haces este llamado: busca_precios(muestratablas,muestratablas,tamcoleccion); Y tienes como cabecera del procedimiento: procedure busca_precios (lectura1:coleccion;lectura2:coleccion2;tamcoleccion:integer) El parámetro lectura1 toma el valor de la variable muestratablas; y lectura2 también coge los valores de muestratablas (Lo puse en colores para que vieras la correspondencia). Es por eso que dentro del procedimiento ambas tienen los mismos valores. Lo correcto sería tener dos variables tabla1 y tabla2 ambas del mismo único tipo: Código: type EL POR QUÉ DE LOS PROCEDIMIENTOS Una de las razones de la existencia de los procedimientos y funciones es evitar que se repitan códigos con lo cual se reduce el programa. Me refiero a que en "lee_tabla" el método para obtener los datos de una tabla (coleccion 1) lo repites luego para la otra tabla (Coleccion 2). Basta con hacer que lea una tabla, y llamarla dos veces desde el programa principal. Código: Procedure lee_tabla(var lectura:coleccion; tamcoleccion, n:integer,); EL PROCEDIMIENTO BUSCA_PRECIOS Para buscar el precio, puedes utilizar el mismo código que has posteado con pequeñas modificaciones: 1) La cabecera: procedure busca_precios(lectura1,lectura2:coleccion;tamcoleccion:integer); 2) la variable "busca" no debe ser real sino entera (Ya que los precios están definidas del tipo integer) 3) Antes de la iniciar la búsqueda en la segunda coleccion, debes asignar otra vez FALSE a encontrado: Código: . 4) No es necesario agregar la variable "o", puedes volver a usar la "i" para la segunda coleccion Código: . 5) No te olvides de lo que tienes que agregar para evitar el bucle infinito. Y el llamado desde el programa principal sería: busca_precios(tabla1,tabla2,tamcoleccion); Con esto solucionas tus dos problemas. Saludos. P.D. Como puedes ver, tu procedimiento utiliza las mismas sentencias (los mismos pasos, el mismo procedimiento, el mismo método) para encontrar los precios en ambas colecciones. ¿Podrás modificarla (igual que "lee_tabla") para reducir la codificación y llamarla dos veces?, algo así: busca_precios(tabla1,tamcoleccion); busca_precios(tabla2,tamcoleccion); Título: Re: Arrays en Pascal Publicado por: Corso en 11 Diciembre 2005, 21:32 pm Bueno, pues definitivamente así e dejado el code (todas las posibilidades posibles funcionan).
Código:
El reto que me “tirastes”, pues no e sido capaz... Si fui capaz que presente las dos tablas en el mismo procedimiento, sin codearlas dos veces... Pero y luego? Como trabajo con los datos de las tablas? (para por ejemplo sacar Colección “tal”, vale mas que “cual”.)... De la manera que tu dices, se llama al procedimiento lee_tabla, tantas veces como sea necesario, pero yo necesito guardas esos datos en algún lado para luego trabajar con ellos... No se si me explique... Muchas gracias por la explicación, y si tienes un rato y ganas y me explicas como podríamos hacer de la manera que tu dices, para sacar que colección vale mas... (hay veré como trabajas con los datos, y imagino que ya sería capaz a sacar el procedimientos busca_precios...). Salu2. PD: Hasta el fin de semana no podré mirar nada... Pero tu postea, que yo luego leo xD PD2: Dios, y mira que no ver lo del while... ainss. Título: Re: Arrays en Pascal Publicado por: jvchino en 14 Diciembre 2005, 06:21 am Puedes declarar las variables SUMA1 y SUMA2 como globales y enviarselas como parámetros:
Cabecera de Procedimiento procedure lee_tabla(VAR lectura:coleccion; VAR suma:integer; tamacoleccion:integer); Llamado al procedimiento lee_tabla(tabla1, suma1, tamcoleccion); lee_tabla(tabla2, suma2, tamcoleccion); compara_precios(suma1,suma2); {Llamado a otro procedimiento donde se comparan los precios} Saludos. Título: Re: Arrays en Pascal Publicado por: Corso en 21 Diciembre 2005, 01:46 am Se que a pasado mucho tiempo, pero lo deje un poco aparcado, y hoy me dio por ponerme y... SORPRESA...
Código:
JVCHINO, LO SAQUE xDD No hice el procedimiento, por que en el ejercicio no se me permitia codear mas procedimientos ni funciones, por eso lo hice en el programa principal. Muchas gracias.. ahora sigo, y ya te tendré que preguntar :(. Salu2. |