El programa se ejecuta pero luego deja de funcionar
Publicado por Damián (1 intervención) el 29/07/2021 03:19:51
Buenas, soy estudiante y estoy haciendo un taller de pascal, con mis compañeros hicimos este codigo que aparentemente no tiene ningun error, pero cuando se ejecuta y se ingresa el codigo el programa se cierra. No logramos comprender a que se debe. Como es la primera vez que programamos seguro que estamos haciendo muchas cosas mal. Dejo la consigna y el codigo.
La empresa que comercializa articulos para la construccion SRL desea obtener un infrome de sus materiales para contruccion guardados en antiguas secuencias.Por ello se le pide a usted que realice un programa en pascal que permita solucionar su problema.
Cuentan con una secuencia de caracteres que contiene el codigo del material (5 caracteres), un caracter que indica su tecnologia ('B', 'L', 'P', 'F'), el nombre clave del mismo (finaliza con #, maximo de 30 caracteres) la cantidad que se posee (3 digitos) y su estado (100 caracteres, con espacios en blancos en caso de que sobren).
Se pide:
. Generar una secuencia de salida que contenga los materiales de tecnologia 'L' y 'F'.
Incluir su nombre clave y cantidad.
. Informar por pantalla la cantidad de los diferentes materiales de cada tipo de tecnologia.
. Generar un archivo de salida con los nombres clave, cantidad y estado de los materiales de tipo 'L' con codigo igual a uno ingresado por el usuario.
La empresa que comercializa articulos para la construccion SRL desea obtener un infrome de sus materiales para contruccion guardados en antiguas secuencias.Por ello se le pide a usted que realice un programa en pascal que permita solucionar su problema.
Cuentan con una secuencia de caracteres que contiene el codigo del material (5 caracteres), un caracter que indica su tecnologia ('B', 'L', 'P', 'F'), el nombre clave del mismo (finaliza con #, maximo de 30 caracteres) la cantidad que se posee (3 digitos) y su estado (100 caracteres, con espacios en blancos en caso de que sobren).
Se pide:
. Generar una secuencia de salida que contenga los materiales de tecnologia 'L' y 'F'.
Incluir su nombre clave y cantidad.
. Informar por pantalla la cantidad de los diferentes materiales de cada tipo de tecnologia.
. Generar un archivo de salida con los nombres clave, cantidad y estado de los materiales de tipo 'L' con codigo igual a uno ingresado por el usuario.
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
program Materiales;
uses crt;
type
RegSal = record
Nomb: string[31];
Cant: string[4];
Est: string[101];
end;
const
Tec= ['L', 'F', 'P', 'B'];
Tec1= ['L', 'F'];
var
Sec1: file of char; // secuencia de entrada
v: char;
i: integer;
Sal: file of char; // secuencia de salida
CdUs: integer;
CdUs_1, CdUs_2, CdUs_3, CdUs_4, CdUs_5: integer;
Res_1, Res_2, Res_3, Res_4, Res_5: integer;
contB, contL, contP, contF: integer;
Nom: string[31];
Can: string[4];
Es: string[101];
ArchSal: file of RegSal;
Arch: RegSal;
function chartoint(n:char):integer;
begin
case (n) of
'1': exit(1);
'2': exit(2);
'3': exit(3);
'4': exit(4);
'5': exit(5);
'6': exit(6);
'7': exit(7);
'8': exit(8);
'9': exit(9);
'0': exit(0);
end;
end;
begin
assign(Sec1,'D:\TrabajoPascal\Datos\SecuenciaEntrada.txt');
{$I-}
reset(Sec1);
{$I+}
assign(Sal,'D:\TrabajoPascal\Datos\SecuenciaSalida.txt');
{$I-}
rewrite(Sal);
{$I+}
assign(ArchSal,'D:\TrabajoPascal\Datos\ArchivoSalida.dat');
{$I-}
rewrite(ArchSal);
{$I+}
writeln ('Ingrese el codigo del material para generar el archivo');
readln (CdUs);
CdUs_1:= CdUs DIV 10000;
CdUs_2:= CdUs DIV 1000 MOD 10;
CdUs_3:= CdUs DIV 100 MOD 10;
CdUs_4:= CdUs DIV 10 MOD 10;
CdUs_5:= CdUs mod 10;
Nom:=' ';
Can:=' ';
Es:=' ';
contB:= 0;
contL:= 0;
contP:= 0;
contF:= 0;
while not EOF(Sec1) do
begin
read(Sec1, v);
read(ArchSal, Arch);
Res_1:=chartoint(v);
read(Sec1, v);
Res_2:=chartoint(v);
read(Sec1, v);
Res_3:=chartoint(v);
read(Sec1, v);
Res_4:=chartoint(v);
read(Sec1, v);
Res_5:=chartoint(v);
read(Sec1, v);
if (Res_1 = CdUs_1) and (Res_2 = CdUs_2) and (Res_3 = CdUs_3) and (Res_4 = CdUs_4) and (Res_5 = CdUs_5) and (v = 'L') then
begin
ContL:= ContL + 1;
read(Sec1, v);
while v <> '#' do
begin
Nom:= Nom + v;
write(Sal, v);
read(Sec1, v);
end;
write(Arch.Nomb, Nom);
write(Sal, '#');
for i:= 1 to 3 do
begin
Can:= Can + v;
write(Sal, v);
read(Sec1, v);
end;
write(Arch.Cant, Can);
write(Sal, '_');
for i:= 1 to 100 do
begin
Es:= Es + v;
read(Sec1, v);
end;
write(Arch.Est, Es);
end;
if v in Tec then
begin
case v of
'L': ContL:= ContL + 1;
'F': ContF:= ContF + 1;
'B': ContB:= ContB + 1;
'P': ContP:= ContP + 1;
end;
if v in Tec1 then
begin
read(Sec1, v);
while v <> '#' do
begin
write(Sal, v);
read(Sec1, v);
end;
write(Sal, '#');
for i:= 1 to 3 do
begin
write(Sec1, v);
read(Sec1, v);
end;
write(Sal, '_'); // Graba marca para separar los materiales
end
else
begin
while v<>'#' do
begin
read(Sec1, v);
end;
for i:= 1 to 103 do
begin
read(Sec1, v);
end;
end;
end;
end;
Close(ArchSal);
Close(Sec1);
Close(Sal);
write('La cantidad de materiales de cada tecnologia son los siguientes:');
writeln('L: ', ContL);
writeln('F: ', ContF);
writeln('B: ', ContB);
writeln('P: ', ContP);
readkey;
end.
Valora esta pregunta
0