Pascal/Turbo Pascal - Ayuda con archivo de baja

 
Vista:
Imágen de perfil de Leo G.

Ayuda con archivo de baja

Publicado por Leo G. (11 intervenciones) el 27/11/2014 14:46:14
Hola tengo un problema con este código no puedo encontrar el error.

1. Se dispone de un archivo maestro de una encuesta y un archivo de bajas con el siguiente diseño:

Archivo maestro: Un registro por encuestado
DEPARTAMENTO Nº ENCUESTADO NOMBRE Y APELLIDO FECHA DE NACIMIENTO

Archivo de bajas: Uno o ningún registro por encuestado
DEPARTAMENTO Nº ENCUESTADO

Aparear los archivos a fin de detectar los encuestados a dar de baja, grabando un archivo maestro actualizado sin las bajas. Si la baja no existe en el maestro, imprimir "BAJA ERRÓNEA" en Observaciones y contarlas. Informar la cantidad total de bajas correctas y erróneas.
Salida impresa:

Departamento Nº Encuestado Nombre y Apellido Fecha Nacimiento Observaciones
XXXXX XXXXX XXXXXXXXXXXX XX/XX/XX
XXXXX XXXXX B. ERRÓNEA
XXXXX XXXXX XXXXXXXXXXXX XX/XX/XX
XXXXX XXXXX XXXXXXXXXXXX XX/XX/XX
XXXXX XXXXX B. ERRÓNEA
Total General de Bajas Correctas: XXX Erróneas: XXX


y tengo esto codificado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
Program Bajas;
	uses crt;
	type
		maestro=record
					depar:integer;
					n_encu:integer;
					nom_ape:string[50];
					fech_nac:string[10];
				end;
		detalle=record
					depar:integer;
					n_encu:integer;
				end;
		nuevo=record
					depar:integer;
					n_encu:integer;
					nom_ape:string[50];
					fech_nac:string[10];
					obser:string[20];
				end;
		arch_maest=file of maestro;
		arch_detall=file of detalle;
		arch_nuevos=file of nuevo;
	var
		maes:arch_maest;
		deta:arch_detall;
		nuev:arch_nuevos;
 
	Procedure Carga(var mae:arch_maest;var det:arch_detall);
		var
			tecla:char;
			x:char;
			regmae:maestro;
			regdet:detalle;
		BEGIN
			tecla:='d';
			x:='r';
			rewrite(mae);
			writeln('  <----------> CARGA DE MAESTRO <---------->   ');
			writeln;
			write('Desea ingresar un registro? S/N: ');
			readln(tecla);
			writeln;
			while(upcase(tecla)<>('N'))do
				begin
					write('Ingrese el Numero del Departamento: ');
					readln(regmae.depar);
					write('Ingrese el Numero de Encuestado: ');
					readln(regmae.n_encu);
					write('Ingrese el Nombre y Apellido: ');
					readln(regmae.nom_ape);
					write('Ingrese la Fecha de Nacimiento: ');
					readln(regmae.fech_nac);
					write(mae,regmae);
					writeln;
					write('Desea Seguir Ingresando un Registro? [S/N]: ');
					readln(tecla);
					writeln;
				end;
			close(mae);
			rewrite(det);
			writeln;
			writeln('  <----------> CARGA DE DETALLE <---------->   ');
			writeln;
			write('Desea Ingresar un Registro? [S/N]: ');
			readln(x);
			writeln;
			while(upcase(x)<>('N'))do
				begin
					write('Ingrese el Numero de Departamento: ');
					readln(regdet.depar);
					write('Ingrese el Numero de Encuestado: ');
					readln(regdet.n_encu);
					write(det,regdet);
					writeln;
					write('Desea seguir ingresando un registro? S/N: ');
					readln(x);
					writeln;
				end;
			close(det);
		END;
 
	Procedure Actualizado (var det:arch_detall; var mae:arch_maest; var nue:arch_nuevos);
		var
			reg_mae:maestro;
			reg_det:detalle;
			reg_nue:nuevo;
			cant_b_erro:integer;
			cant_b_correcta : integer;
		begin
			reset(mae);
			reset(det);
			rewrite(nue);
			read(mae,reg_mae);
			read(det,reg_det);
			cant_b_erro:=0;
			cant_b_correcta := 0;
			writeln('Dpto  N°Encuestado  Nombre y Apellido  Fecha de Nacimiento  Observaciones');
			while ((not (EOF(mae)))and (not (EOF(det))))do
				begin
					if (reg_mae.n_encu<>reg_det.n_encu) then
						begin
                            reg_nue.depar:=reg_mae.depar;
                            reg_nue.n_encu:=reg_mae.n_encu;
                            reg_nue.nom_ape:=reg_mae.nom_ape;
                            reg_nue.fech_nac:=reg_mae.fech_nac;
                            cant_b_correcta := cant_b_correcta + 1;
                       end
					else
						begin
							reg_nue.depar:=reg_det.depar;
							reg_nue.n_encu:=reg_det.n_encu;
							reg_nue.obser:=' B.ERRONEA ';
							cant_b_erro:=cant_b_erro+1;
						end;
					read(mae,reg_mae);
				end;
			if (reg_mae.n_encu<>reg_det.n_encu) then
				begin
					reg_nue.depar:=reg_mae.depar;
					reg_nue.n_encu:=reg_mae.n_encu;
					reg_nue.nom_ape:=reg_mae.nom_ape;
					reg_nue.fech_nac:=reg_mae.fech_nac;
					cant_b_correcta := cant_b_correcta + 1;
				end
			else
				begin
					reg_nue.depar:=reg_det.depar;
					reg_nue.n_encu:=reg_det.n_encu;
					reg_nue.obser:=' B.ERRONEA ';
					cant_b_erro:=cant_b_erro+1;
				end;
			writeln('EL TOTAL GENERAL DE BAJAS CORRECTAS ES: ',cant_b_correcta,' ERRONEAS ES: ',cant_b_erro);
			close(mae);
			close(det);
			close(nue);
		end;
 
	begin
		assign(maes,'maestro.dat');
		assign(deta,'detalle.dat');
		assign(nuev,'nuevo.dat');
		Carga(maes,deta);
		Actualizado(deta, maes, nuev);
		close(maes);
		close(deta);
		close(nuev);
	end.
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

Ayuda con archivo de baja

Publicado por ramon (2158 intervenciones) el 29/11/2014 00:57:52
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
{Mira tu programa con correcciones]
 
 Program Bajas;
  uses
    crt;
    type
      maestro = record
          depar : integer;
         n_encu : integer;
        nom_ape : string[50];
       fech_nac : string[10];
      end;
 
      detalle = record
           depar : integer;
          n_encu : integer;
          end;
 
     nuevo = record
         depar : integer;
        n_encu : integer;
       nom_ape : string[50];
      fech_nac : string[10];
         obser : string[20];
         end;
 
     arch_maest = file of maestro;
    arch_detall = file of detalle;
    arch_nuevos = file of nuevo;
 
    var
      maes : arch_maest;
      deta : arch_detall;
      nuev : arch_nuevos;
      regmaes : maestro;
      regdeta : detalle;
 
   Procedure Carga(var mae : arch_maest; var det : arch_detall);
   var
     tecla : char;
     x : char;
     regmae : maestro;
     regdet : detalle;
     archi, archi1 : longint;
     BEGIN
       tecla := 'd';
       x := 'r';
       {$I-} reset(mae); {$I+}
       if ioresult <> 0 then
       begin
          rewrite(mae);
          archi := 0;
       end
    else
       begin
         archi := filesize(mae);
       end;
        writeln(' <----------> CARGA DE MAESTRO <----------> '); writeln;
        write('Desea ingresar un registro? S/N: '); readln(tecla); writeln;
      while upcase(tecla) <> 'N' do
      begin
        write('Ingrese el Numero del Departamento : ');
        readln(regmae.depar);
        write('Ingrese el Numero de Encuestado    : ');
        readln(regmae.n_encu);
        write('Ingrese el Nombre y Apellido       : ');
        readln(regmae.nom_ape);
        write('Ingrese la Fecha de Nacimiento     : ');
        readln(regmae.fech_nac);
        seek(mae,archi);
        write(mae,regmae);
        archi := archi + 1;
        writeln;
        write('Desea Seguir Ingresando un Registro? [S/N]: ');
        readln(tecla);
        writeln;
     end;
       close(mae);
       {$I-} reset(det); {$I+}
       if ioresult <> 0 then
       begin
       rewrite(det);
       archi1 := 0;
       end
    else
       begin
         archi1 := filesize(det);
       end;
       writeln;
       writeln(' <----------> CARGA DE DETALLE <----------> ');
       writeln;
       write('Desea Ingresar un Registro? [S/N] : ');
       readln(x);
       writeln;
       while upcase(x) <> 'N' do
       begin
         write('Ingrese el Numero de Departamento : ');
         readln(regdet.depar);
         write('Ingrese el Numero de Encuestado   : ');
         readln(regdet.n_encu);
         seek(det,archi1);
         write(det,regdet);
         archi1 := archi1 + 1;
         writeln;
         write('Desea seguir ingresando un registro? S/N : ');
        readln(x);
        writeln;
       end;
       close(det);
    END;
 
 
   Procedure Actualizado;
   var
     d, h, t : longint;
     nue : arch_nuevos;
     reg_nue : nuevo;
     esta : boolean;
     cant_b_erro : integer;
     cant_b_correcta : integer;
    begin
       assign(nue,'nuevo.dat');
       rewrite(nue);
       d := 0;
       cant_b_correcta := 0;
       cant_b_erro := 0;
       assign(maes,'maestro.dat');
       reset(maes);
       assign(deta,'detalle.dat');
       reset(deta);
       esta := false;
       for h := 0 to filesize(maes)  - 1 do
       begin
         seek(maes,h);
         read(maes,regmaes);
         for t := 0 to filesize(deta) - 1 do
         begin
             seek(deta,t);
             read(deta,regdeta);
             if regmaes.n_encu = regdeta.n_encu then
             begin
                esta := true;
             end;
         end;
           if esta = false then
           begin
              reg_nue.depar := regmaes.depar;
              reg_nue.n_encu := regmaes.n_encu;
              reg_nue.nom_ape := regmaes.nom_ape;
              reg_nue.fech_nac := regmaes.fech_nac;
              seek(nue,d);
              write(nue,reg_nue);
              cant_b_correcta := cant_b_correcta + 1;
              d := d + 1;
           end
        else
           begin
           cant_b_erro := cant_b_erro + 1;
           reg_nue.depar := regmaes.depar;
           reg_nue.n_encu := regmaes.n_encu;
           reg_nue.nom_ape := regmaes.nom_ape;
           reg_nue.fech_nac := regmaes.fech_nac;
           reg_nue.obser  := ' B.ERRONEA ';
           seek(nue,d);
           write(nue,reg_nue);
           d := d + 1;
           end;
           esta := false;
       end;
       writeln('EL TOTAL GENERAL DE BAJAS CORRECTAS ES: ',cant_b_correcta,
                                  ' ERRONEAS ES:',cant_b_erro);
       close(maes);
       close(deta);
       close(nue);
    end;
 
 
   {Procedure Actualizado (var det : arch_detall;
                          var mae : arch_maest;
                          var nue : arch_nuevos);
   var
    reg_mae : maestro;
    reg_det : detalle;
    reg_nue : nuevo;
    cant_b_erro : integer;
    cant_b_correcta : integer;
   begin
     reset(mae);
     reset(det);
     rewrite(nue);
     read(mae,reg_mae);
     read(det,reg_det);
     cant_b_erro := 0;
     cant_b_correcta := 0;
     writeln('Dpto N. Encuestado Nombre y Apellido Fecha de Nacimiento Observaciones');
 while (not (EOF(mae))) and (not (EOF(det))) do
 begin
   if (reg_mae.n_encu <> reg_det.n_encu) then
   begin
      reg_nue.depar := reg_mae.depar;
      reg_nue.n_encu := reg_mae.n_encu;
      reg_nue.nom_ape := reg_mae.nom_ape;
      reg_nue.fech_nac := reg_mae.fech_nac;
      cant_b_correcta := cant_b_correcta + 1;
    end
  else
    begin
       reg_nue.depar  := reg_det.depar;
       reg_nue.n_encu := reg_det.n_encu;
       reg_nue.obser  := ' B.ERRONEA ';
       cant_b_erro := cant_b_erro + 1;
     end;
       read(mae,reg_mae);
  end;
    if (reg_mae.n_encu <> reg_det.n_encu) then
    begin
      reg_nue.depar := reg_mae.depar;
      reg_nue.n_encu := reg_mae.n_encu;
      reg_nue.nom_ape := reg_mae.nom_ape;
      reg_nue.fech_nac := reg_mae.fech_nac;
      cant_b_correcta := cant_b_correcta + 1;
     end
  else
     begin
        reg_nue.depar := reg_det.depar;
        reg_nue.n_encu := reg_det.n_encu;
        reg_nue.obser :=' B.ERRONEA ';
        cant_b_erro := cant_b_erro + 1;
     end;
      writeln('EL TOTAL GENERAL DE BAJAS CORRECTAS ES: ',cant_b_correcta,
                                  ' ERRONEAS ES:',cant_b_erro);
       close(mae);
       close(det);
       close(nue);
  end;}
 
 
   begin
      clrscr;
      assign(maes,'maestro.dat');
      assign(deta,'detalle.dat');
      Carga(maes,deta);
      Actualizado;
 end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Leo

Ayuda con archivo de baja

Publicado por Leo (11 intervenciones) el 29/11/2014 02:10:23
Gracias.!
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