IBD Curso 2007 Clase 2.

Slides:



Advertisements
Presentaciones similares
Arreglos Unidimensionales y Bidimensionales ESTRUCTURAS DE DATOS I
Advertisements

LOGARITMOS.
IBD Clase 16.
IBD Clase 14.
Programación de Computadores
Sesión 13 Tipos de datos Estruturados Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Programación de Computadores
Programación de Computadores
2 Estructuras lineales.. Qué es una estructura? La estructura es una manera de conectar los valores y de manera automática conectarlos de manera que tengan.
IBD Clase 7.
PROGRAMACION ESTRUCTURADA
GESTION DE DISPOSITIVOS
Medidas de Posición Central:
Ejemplo A continuación aparecen las tasas de retorno de dos fondos de inversión durante los últimos 10 años. 1. ¿Cuál es más riesgoso? 2. ¿En cuál invertiría.
ESTRUCTURA DE DECISION LOGICA
BASE DE DATOS Primeros pasos
Funciones Excel. Parte 1. Introducción 2 Una función Excel es una fórmula o un procedimiento que se realiza en el ambiente de Visual Basic, fuera de.
APLICAWEB SERVICIOS LEGALES DE PUERTO RICO
PROGRAMACIÓN PARALELA Tema 5: Análisis de algoritmos paralelos
Círculos de proporción
Parte 3. Descripción del código de una función 1.
Iteración La iteración permite modelar problemas en los cuales una secuencia de instrucciones debe ejecutarse varias veces. La cantidad de iteraciones.
Algoritmos & Estructuras de Datos
Fundamentos de Programación
Metodología de la Programación
Resolución de Problemas y Algoritmos Buffer - Read & Readln
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
Curso de Programación 1 Plan 97
FORTRAN 90 arreglos.
FORTRAN 77 y Cómputo Científico
IBD Plan 2003 Clase 4. UNLP - Facultad de InformáticaIBD - CLASE 4 2 Archivos - Búsqueda Búsqueda de información (costo) # de comparaciones (operaciones.
Programación en Lenguaje Ensamblador.
Metodología para la Construcción de Programas
Arreglos (vectores, matrices, ….)
Tecnología de la Programación Javier Nieves Acedo Standar Template Library (STL)
C lase 10 COMPUTACION /17/2014Computacion - Fac. Ingeniería2  Ademas de los ya vistos (tipos simples), puede usarse como parámetros variables.
ESCUELA: NOMBRES: LÓGICA DE LA PROGRAMACIÓN UNIDAD 2: Naturaleza de los Datos FECHA: Ing. Patricio Abad Espinoza OCTUBRE 2009 – FEBRERO Ciencias.
2 Acciones y funciones 2.1 Concepto
1 Procedimientos Es un conjunto de sentencias incluidas entre las declaraciones Sub o Function y End Sub/Function VB utiliza varios tipos de procedimientos:
LIGA VENEZOLANA DE BEISBOL MINIPROYECTO III Elaborado por: Carlos Rodríguez Bárbara Jaspe.
Arboles Binarios de expresiones
Algoritmos de ordenación
Estadística Administrativa I
Sesión 6 Sentencias de Repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Clase 12 COMPUTACION 2009 Tipos de Datos PASCAL Estructurados Simples Primitivos No primitivos Estáticos Integer Real Char Boolean String Archivos Registros.
PROCEDIMIENTOS FUNCIONES
Archivos.
Clase 10: Estructuras de datos y arreglos.
Resolución de Problemas y Algoritmos Uso de iteración con secuencias
Programación en Pascal
Sesión 5 Sentencias de Selección y repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Sesión 17 Tipos de datos Estruturados Arreglos de Registros Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Resolución de Problemas y Algoritmos Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Bahía Blanca - Argentina.
Programación I Arreglos II- Matrices.
75.40 Algoritmos y Programación I
1Hacer in programa que lea un número desconocido de datos reales de un disco y detecte el final de los datos en el archivo 2Definir entradas y salidas.
Archivos Programación I MC Beatriz Beltrán Martínez.
Teoría – Alejandro Gonzalez
Departamento de Informática Universidad Técnica Federico Santa María Programación de Computadores (IWI-131) Luis Pizarro Q.
Programación I Arreglos. Los elementos de un arreglo son todos del mismo tipo de dato (todos integer o real o char o registros o aún arreglos)
Definir un vector Forma general Variable=[tipo]*tamaño Tipo: es el valor inicial con el cual quedarán llenas todas las posiciones creadas del vector. Tamaño:
Tema 8: Tipos de Datos Estructurados I
Vectores y Matrices.
Vectores y Matrices.
Contenido:  ¿Qué son los Punteros?  Los Procedimientos: New y Dispose.
29/5/2002 Sesión 18 Tipos de datos Estruturados Archivos de Caracteres Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Algorítmica y Programación
Visual Basic Prof.: Carol Briones García. Uso de Archivos  Definición  Es un conjunto de información que se almacena en algún medio de escritura que.
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
Diego Hernández R. Archivos Diego Hernández R.
Transcripción de la presentación:

IBD Curso 2007 Clase 2

Archivos – Operaciones Básicas Utilizaremos la notación Pascal Declaración de archivos Var archivo: file of Tipo_de_dato; Otra definición Type archivo: file of Tipo_de_dato; Var arch: archivo Ejemplos Type emple = record nombre: string [20]; direccion: string [40]; edad: integer; end; numero = file of integer; empleado = file of emple; Var arch_num: numero; Var arch_emp: empleado, IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Operaciones Básicas Ejemplo Program archivos; … Type emple = record nombre: string [20]; direccion: string [40]; edad: integer; end; numero = file of integer; empleado = file of emple; Var arch_num:file of numero; Var arch_emp:file of empleado; Begin Assign( arch_num, ‘pepe.dat’ ) Assign( arch_emp, ‘pipo.dat’ ) End; Relación con el sistema operativo Se tiene que establecer la correspondencia entre el nombre físico y nombre lógico Assign ( nombre_lógico, nombre_físico) IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Operaciones Básicas Apertura y Creación de archivos De solo escritura (creación ) Rewrite(nombre_logico); De lectura/escritura Reset(nombre_logico); Nombre lógico representa una variable de tipo archivo sobre la que se realizó la asignación. Cierre de archivos Esta instrucción indica que no se va a trabajar más con el archivo. Significa poner una marca de EOF (end of file) al final del mismo. Close(nombre_logico); IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Operaciones Básicas Lectura y escritura de un archivo Estas operaciones leen y/o escriben sobre los buffers relacionados a los archivos No se realizan directamente sobre el Disco Rígido Read(nombre_logico, variable); Write(nombre_logico, variable); En ambos casos la variable debe ser del mismo tipo que los elementos que se declararon como parte del archivo IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Operaciones Básicas begin write( 'Ingrese el nombre del archivo:' ); read( arc_fisico ); {se obtiene el nombre del archivo} assign( arc_logico, arc_fisico ); rewrite( arc_logico ); {se crea el archivo} read( nro ); {se obtiene de teclado el primer valor} while (nro <> 0)do write( arc_logico, nro ); {se escribe en el archivo cada número} read( nro ); end; close( arc_logico ); {se cierra el archivo abierto oportu- namente con la instrucción rewrite} end. Ejemplo de creación de un archivo Program Generar_Archivo; type archivo = file of integer; {definición del tipo de dato para el archivo } var arc_logico: archivo; {variable que define el nombre lógico del archivo} nro: integer; {nro será utilizada para obtener la información de teclado} arc_fisico: string[12]; {utilizada para obtener el nombre físico del archivo desde teclado} IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Operaciones adicionales Funciones Fin de archivo Como trabaja? Hay que preguntar primero!!! EOF(nombre_logico); Tamaño del archivo (cant. de registros) FileSize(nombre_logico); Posición (actual) dentro del archivo FilePos(nombre_logico); Proceso Ir a una posición del archivo Seek(nombre_logico,posición); La posición se cuenta siempre desde el comienzo del archivo El primer lugar es el cero. Por lo tanto, posición varía de 0 a cant. reg.-1 IBD - CLASE 2 UNLP - Facultad de Informática

Archivos - Ejemplo Proceso que presenta en pantalla el archivo generado anteriormente Procedure Recorrido(var arc_logico: archivo ); var nro: integer; {para leer elemento del archivo} begin reset(arc_logico); {el archivo está creado, para operar con el mismo debe abrirse como de lect/escr} while not eof( arc_logico) do begin read( arc_logico, nro ); {se obtiene elemento desde archivo} write( nro ); {se presenta cada valor en pantalla} end; close( arc_logico ); IBD - CLASE 2 UNLP - Facultad de Informática

Archivos - Algorítmica Clásica Operaciones usuales a resolver utilizando archivos Modificar el contenido actual del mismo Agregar nuevos elementos Actualizar un archivo maestro con uno o varios archivos detalles Corte de control Merge de varios archivos IBD - CLASE 2 UNLP - Facultad de Informática

Archivos - Modificación Este caso involucra un archivo de datos previamente generado y consiste en cambiar sus datos. El archivo debe ser recorrido desde su primer elemento y hasta el último, siguiendo un procesamiento secuencial IBD - CLASE 2 UNLP - Facultad de Informática

Archivos - Modificación {declaración de los tipos de datos necesarios para el problema. Esta declaración se hace efectiva en el programa principal que tiene al proceso Actualizar como uno de sus módulos} Type registro = record Nombre: string[20]; Direccion: string[20]; Salario: real; End; Empleados = file of registro; ... Procedure actualizar (Var Emp:empleados); {se recibe el archivo como parámetro por referencia} var E: registro; begin Reset( Emp ); while not eof( Emp ) do Read( Emp, E); E.salario:=E.salario * 1.1; Seek( Emp,filepos(Emp) -1 ); Write( Emp, E ); end; close( Emp ); IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Agregar datos Procedure agregar (Var Emp: empleados); var E: registro; begin reset( Emp ); seek( Emp, filesize(Emp)); leer( E ); While E.nombre <> ' ' do write( Emp, E ); end; close( Emp ); Se procesa un solo archivo Ya tiene información Se le incorporan datos nuevos El proceso muestra como se hace IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Actualización Maestro Detalle Este problema involucra utilizar al mismo tiempo varios archivos de datos. Se denomina maestro al archivo que resume un determinado conjunto de datos. Se denomina detalle al que agrupa información que se utilizará para modificar el contenido del archivo maestro. En general Un maestro N detalles. Consideraciones del proceso (precondiciones) Ambos archivos (maes-tro y detalle) están orde-nados por el mismo criterio En el archivo detalle solo aparecen emplea-dos que existen en el ar-chivo maestro Cada empleado del ar-chivo maestro a lo sumo puede aparecer una vez en el archivo detalle IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Un Maestro Un detalle – ejemplo begin assign (mae1, 'maestro'); assign (det1, 'detalle'); {proceso principal} reset (mae1); reset (det1); while (not eof(det1)) do read(mae1, regm); read(det1,regd); while (regm.nombre <> regd.nombre) do read (mae1,regm); regm.cht := regm.cht + regd.cht; seek (mae1, filepos(mae1)-1); write(mae1,regm); end; close(det1) close(mae1) end. program actualizar; type emp = record nombre: string[30]; direccion: string[30]; cht: integer; {cant horas trabajadas} end; e_diario = record cht: integer; detalle = file of e_diario; { archivo que contiene la información diaria } maestro = file of emp; información completa } var regm: emp; regd: e_diario; mae1: maestro; det1: detalle; IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Un Maestro Un detalle – ejemplo Precondiciones del ejemplo Ambos archivos (maestro y detalle) están ordenados por código del producto) En el archivo detalle solo aparecen productos que existen en el archivo maestro Cada producto del maestro puede ser, a lo largo del día, vendido más de una vez, por lo tanto, en el archivo detalle pueden existir varios registros correspondientes al mismo producto IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Un Maestro Un detalle – ejemplo program actualizar; const valoralto='9999'; type str4 = string[4]; prod = record cod: str4; descripcion: string[30]; pu: real; cant: integer; end; v_prod = record cant_vendida: integer; detalle = file of v_prod; maestro = file of prod; var regm: prod; regd: v_prod; mae1: maestro; det1: detalle; total: integer; aux: str4; procedure leer (var archivo:detalle; var dato:v_prod); begin if (not eof(archivo)) then read (archivo,dato) else dato.cod:= valoralto; end; assign (mae1, 'maestro'); assign (det1, 'detalle'); {proceso principal} reset (mae1); reset (det1); read(mae1,regm); leer(det1,regd); {se procesan todos los registros del archivo det1} IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Un Maestro Un detalle – ejemplo while (regd.cod <> valoralto) do begin aux := regd.cod; total := 0; {se procesan códigos iguales} while (aux = regd.cod ) do total:=total + regd.cant_vendida; leer(det1,regd); end; {se busca en el maestro el registro} while (regm.cod <> aux) do read (mae1,regm); {se modifica el stock del producto} regm.cant := regm.cant– total; {reubica el puntero} seek (mae1, filepos(mae1)-1); write(mae1,regm); if (not eof (mae1)) then read(mae1,regm); {ver resultados} reset (mae1); while (not eof(mae1)) do begin; read (mae1, regm); writeln(regm.cod, regm.cant); end; end. IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Un Maestro N detalle – ejemplo El problema siguiente generaliza aún más el problema anterior El maestro se actualiza con tres archivos detalles Los archivos detalle están ordenados de menor a mayor program Cap11_31; const valoralto='9999'; type str4 = string[4]; prod = record cod: str4; descripcion: string[30]; pu: real; cant: integer; end; v_prod = record cod : str4; cant_vendida: integer; detalle = file of v_prod; maestro = file of prod; IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Un Maestro N detalle – ejemplo var regm: prod; min, regd1, regd2,regd3: v_prod; mae1: maestro; det1,det2,det3: detalle; aux: str4; procedure leer (var archivo: detalle; var dato:v_prod); begin if (not eof(archivo)) then read (archivo,dato) else dato.cod := valoralto; end; procedure minimo (var r1,r2,r3: v_prod; var min:v_prod); begin if (r1.cod<=r2.cod) and (r1.cod<=r3.cod) then begin min := r1; leer(det1,r1) end else if (r2.cod<=r3.cod) min := r2; leer(det2,r2) else begin min := r3; leer(det3,r3) end; IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Un Maestro N detalle – ejemplo begin assign (mae1, 'maestro'); assign (det1, 'detalle1'); assign (det2, 'detalle2'); assign (det3, 'detalle3'); {proceso principal} reset (mae1); reset (det1); reset (det2); reset (det3); read(mae1,regm); leer(det1, regd1); leer(det2, regd2); leer(det3, regd3); minimo(regd1,regd2,regd3,min); while (min.cod <> valoralto) do begin while (regm.cod <> min.cod) do read(mae1,regm); aux := min.cod; while (aux = min.cod ) do regm.cant:=regm.cant-min.cantvendida; minimo(regd1,regd2,regd3,min); end; seek (mae1, filepos(mae1)-1); write(mae1,regm); if (not eof (mae1)) then read(mae1,regm); {ver resultados} reset (mae1); while (not eof(mae1)) do begin; read (mae1, regm); writeln (regm.cod, regm.cant); end. IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Corte de control El problema consiste en la generación de reportes Es un problema clásico en el manejo de BD. Si bien los DBMS lo manejan diferente, veremos la algorítmica clásica de los mismos Precondiciones El archivo se encuentra ordenado por provincia, partido y ciudad El formato de la impresión es el siguiente Provincia: xxxx Partido: yyyy Ciudad # Var. # Muj. Desocupados aaa ….. …… ………. bbb ….. …… ………. ccc ….. …… ………. Total Partido …………………….. Partido: zzzz … ….. …… ………. Total Provincia: ….. Provincia: qqqq IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Corte de control program Corte_de_Control; const valoralto='zzzz'; type str10 = string[10]; prov = record provincia: str10; partido: str10; ciudad: str10; cant_varones : integer; cant_mujeres : integer; cant_desocupados : integer; end; instituto = file of prov; var regm: prov; inst: instituto; t_varones, t_mujeres, t_desocupados: integer; t_prov_var, t_prov_muj, t_prov_des: integer; ant_prov: str10; ant_partido: str10; procedure leer (var archivo:instituto; var dato:prov); begin if (not eof( archivo )) then read (archivo,dato) else dato.provincia := valoralto; end; IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Corte de control begin assign (inst, 'censo' ); reset (inst); leer (inst, regm); writeln ('Provincia: ', regm.provincia); writeln ('Partido: ', regm.partido); writeln ('Ciudad','Varones','Mujeres','Desocu pados'); { se inicializan los contadores para el total del partido para varones, mujeres y desocupados } t_varones := 0; t_mujeres := 0; t_desocupados := 0; total de cada provincia } t_prov_var := 0; t_prov_muj := 0; t_prov_des := 0; while ( regm.provincia <> valoralto)do begin ant_prov := regm.provincia; ant_partido := regm.partido; while (ant_prov=regm.provincia) and (ant_partido=regm.partido) do write (regm.ciudad, regm.cant_varones, regm.cant_mujeres,regm.cant_desocupados); t_varones := t_varones + regm.cant_varones; t_mujeres := t_mujeres + regm.cant_mujeres; t_desocupados := t_desocupados + regm.cant_desocupados; t_prov_var := t_prov_var + regm.cant_varones; t_prov_muj := t_prov_muj + regm.cant_mujeres; t_prov_des := t_prov_des + leer (inst, regm); end; IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Corte de control write ('Total Partido: ', t_varones,t_mujeres,t_desocupados); writeln; t_varones := 0; t_mujeres := 0; t_desocupados := 0; ant_partido := regm.partido; if (ant_prov <> regm.provincia) then begin write ('Total Provincia’,t_prov_var,t_prov_muj,t_prov_des); t_prov_var := 0; t_prov_muj := 0; t_prov_des := 0; writeln ('Provincia: ', regm.provincia); end; writeln ('Partido: ', regm.partido); end. IBD - CLASE 2 UNLP - Facultad de Informática

Archivos - Merge Involucra archivos con contenido similar, el cual debe resumirse en un único archivo. Precondiciones: Todos los archivos detalle tienen igual estructura Todos están ordenados por igual criterio Veremos dos casos prácticos IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Merge 3 archivos Precondiciones El proceso recibe tres archivos con igual estructura Los archivos están ordenados por nombre de alumno Un alumno solo aparece una vez en el archivo Postcondición Se genera el archivo maestro de la asignatura ordenado por nombre del alumno Ejemplo: Programación de computadoras inscribe a los alumnos que cursarán la materia en tres computadoras separadas. C/U de ellas genera un archivo con los datos personales de los estudiantes, luego son ordenados físicamente por otro proceso. El problema que tienen los JTP es generar un archivo maestro de la asignatura IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Merge 3 archivos program union_de_archivos; const valoralto = 'zzzz'; type str30 = string[30]; str10 = string[10]; alumno = record nombre: str30; dni: str10; direccion: str30; carrera: str10; end; detalle = file of alumno; var min,regd1,regd2,regd3: alumno; det1,det2,det3,maestro : detalle; procedure leer (var archivo:detalle; var dato:alumno); begin if (not eof( archivo )) then read (archivo, dato) else dato.nombre := valoralto; end; procedure minimo (var r1,r2,r3:alumno; var min:alumno); if (r1.nombre<r2.nombre) and (r1.nombre<r3.nombre) then begin min := r1; leer(det1,r1) end else if (r2.nombre<r3.nombre) then begin min := r2; leer(det2,r2) else begin min := r3; leer(det3,r3) IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Merge 3 archivos begin assign (det1, 'det1'); assign (det2, 'det2'); assign (det3, 'det3'); assign (maestro, 'maestro'); {proceso principal} rewrite (maestro); reset (det1); reset (det2); reset (det3); leer(det1, regd1); leer(det2, regd2); leer(det3, regd3); minimo(regd1, regd2, regd3, min); {se procesan los tres archivos} while (min.nombre <> valoralto) do begin write (maestro,min); minimo(regd1,regd2,regd3,min); end; close (maestro); {ver resultados} reset (maestro); while (not eof(maestro)) do begin; read (maestro,min); writeln (min.nombre,min.dni); end. IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Merge 3 archivos Los vendedores de cierto comercio asientan las ventas realizadas….. Precondiciones Similar al anterior Cada vendedor puede realizar varias ventas diarias program union_de_archivos_II; const valoralto = '9999'; type str4 = string[4]; str10 = string[10]; vendedor = record cod: str4; producto: str10; montoVenta: real; end; ventas = record total: real; detalle = file of vendedor; maestro = file of ventas; var min, regd1, regd2, regd3: vendedor; det1, det2, det3: detalle; mae1: maestro; regm: ventas; aux: str4; IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Merge 3 archivos procedure leer (var archivo:detalle; var dato:vendedor); begin if (not eof( archivo )) then read (archivo, dato) else dato.cod := valoralto; end; procedure minimo (var r1,r2,r3: vendedor; var min:vendedor); if (r1.cod <= r2.cod) and (r1.cod <= r3.cod)then begin min := r1; leer(det1,r1) end else if (r2.cod <= r3.cod) then begin min := r2; leer(det2,r2) else begin min := r3; leer(det3,r3) begin assign (det1, 'det1'); assign (det2, 'det2'); assign (det3, 'det3'); assign (mae1, 'maestro'); reset (det1); reset (det2); reset (det3); rewrite (mae1); leer (det1, regd1); leer (det2, regd2); leer (det3, regd3); minimo (regd1, regd2, regd3,min); IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Merge 3 archivos {se procesan los archivos de detalles} while (min.cod <> valoralto) do begin aux := min.cod; {se asignan valores para registro del archivo maestro} regm.cod := min.cod; regm.total := 0; {se procesan todos los registros de un mismo vendedor} while (aux = min.cod ) do regm.total := regm.total+ min.montoVenta; minimo (regd1, regd2, regd3, min); end; {se guarda en el archivo maestro} write(mae1, regm); {ver resultados} reset (mae1); while (not eof( mae1 )) do begin read (mae1,regm); writeln (regm.cod, regm.total); end; end. IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Merge N archivos program union_de_archivos_III; const valoralto = '9999'; type str4 = string[4]; str10 = string[10]; vendedor = record cod: str4; producto: str10; montoVenta: real; end; ventas = record total: real; maestro = file of ventas; arc_detalle=array[1..100] of file of vendedor; reg_detalle=array[1..100] of vendedor; var min: vendedor; deta: arc_detalle; reg_det: reg_detalle; mae1: maestro; regm: ventas; aux: str4; i: integer; N:integer; Los vendedores de cierto comercio asientan las ventas realizadas….. Precondiciones Similar al anterior Cada vendedor puede realizar varias ventas diarias Idem anterior con N archivos…. IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Merge N archivos procedure leer (var archivo:detalle; var dato:vendedor); begin if (not eof( archivo )) then read (archivo, dato) else dato.cod := valoralto; end; procedure minimo (var reg_det: reg_detalle; var min:vendedor; var deta:arc_detalle); var i: integer; {busco el mínimo elemento del vector reg_det en el campo cod, supongamos que es el índice i} min = reg_det[i]; leer( deta[i], reg_det[i]); begin Read(n) for i:= 1 to N do begin assign (deta[i], 'det'+i); {ojo lo anterior es incompatible en tipos} reset( deta[i] ); leer( deta[i], reg_det[i] ); end; assign (mae1, 'maestro'); rewrite (mae1); minimo (reg_det, min, deta); IBD - CLASE 2 UNLP - Facultad de Informática

Archivos – Merge N archivos {se procesan los archivos de detalles } while (min.cod <> valoralto) do begin aux := min.cod; {se asignan valores para registro del archivo maestro} regm.cod := min.cod; regm.total := 0; {se procesan todos los registros de un mismo vendedor} while (aux = min.cod ) do regm.total := regm.total+ min.montoVenta; minimo (reg_det, min, deta); end; {se guarda en el archivo maestro} write(mae1, regm); {ver resultados} reset (mae1); while (not eof( mae1 )) do begin read (mae1,regm); writeln (regm.cod, regm.total); end; end. IBD - CLASE 2 UNLP - Facultad de Informática