Pascal Problema
Pascal Problema
<< >>
Vista: arbol
miguel (01/03/2020 05:22:29)
Pos: 11
Val: 21
Buenas amigos me gustaria que me pudiesen ayudar con este programa en pascal que debo crear y me esta dando bastantes quebraderos de
cabeza
Se me pide crear un programa que permita ingresar el nombre y el salario de los trabajadores de una empresa. asi como tambien poder
consultarlos.
ya este paso esta hecho como mostrare en el archivo que adjuntrare creado en notepad++
1 program ACME;
2
3 type
4 tipoPersona = record
5 nombre: string;
6 salario: integer;
7
9 end;
10
11 const
12 capacidad = 1000;
13
14 var
15 tra: array[1..capacidad] of tipoPersona;
16 cantidad: integer;
17 opcion: integer;
18 i: integer;
19 textoBuscar: string;
20 encontrado: boolean;
21 sal_anu, sal_anual, sal_men, sal_mensual: integer;
22 utili, utilidades, vaca, vacaciones: integer;
23 bono: real;
24
67 3: { Buscar a un trabajador }
68 begin
69 Write('Escriba el nombre del trabajador ');
70 ReadLn( textoBuscar );
71 encontrado := false;
72 for i := 1 to cantidad do
73 if pos (textoBuscar, tra[i].nombre) > 0 then
74 begin
75 encontrado := true;
76 WriteLn( i,' - Nombre: ', tra[i].nombre,
77 ', Salario: ', tra[i].salario;
78 end;
79 if not encontrado then
80 WriteLn('No se ha encontrado.');
81 WriteLn;
82 end;
83
84 0: { salir }
85 begin
86 WriteLn;
87 WriteLn('Saliendo...');
88 WriteLn;
89 end;
90
91 else
92 begin
93 WriteLn;
94 WriteLn('Opción incorrecta!');
95 WriteLn;
96 end;
97 end; { Fin de "case" }
98
99 until opcion = 0;
100 end.
mi quebradero de cabeza es cuando se me pide realizar ciertos calculo en base al salario de los trabajadores, como por ejemplo utilidades,
1 begin
2 for i:=0 to cantidad do
3 if tra[i].salario > 15 then
4 tra[i].bono:=tra[i].salario*0.1;
5 utilidades:=tra[i].salario*2;
6 vacaciones:=tra[i].salario;
7 tra[i].sal_mensual:=tra[i].salario+tra[i]bono;
8 tra[i].sal_anual:=tra[i].sal_mensual*12+vacaciones+utilidades;
9 else
10 cesta:=20;
11 vaca:=tra[i].salario;
12 utili:=tra[i].salario*4;
13 tra[i].sal_men:=tra[i].salario+cesta;
14 tra[i].sal_anu:=tra[i].sal_men*12+vaca;
15 end;
me gustaria que los revisaran para saber si estan correctos y como introducirlos en el codigo
muchas gracias
Pos: 11
Val: 21
1 program ACME;
2
3 type
4 tipoPersona = record
5 nombre: string;
6 salario: real;
7 sal_anu: integer;
8 sal_anual: integer;
9 sal_men: integer;
10 sal_mensual: integer;
11 utili, utilidades, vaca, vacaciones: integer;
12 bono: real;
13
14 end;
15
16 const
17 capacidad = 1000;
18
19 var
20 tra: array[1..capacidad] of tipoPersona;
21 cantidad: integer;
22 opcion: integer;
23 i: integer;
24 textoBuscar: string;
25 encontrado: boolean;
26 bono: real;
27 cesta: integer;
28
29
30
31 {Cuerpo del programa principal}
32 begin
33 cantidad := 0;
34 repeat
35 WriteLn('***BIENVENIDO A ACME***');
36 WriteLn;
37 WriteLn('1- Agregar Trabajador');
38 WriteLn('2- Todos los trabajadores');
[Link] Pascal - programa en turbo [Link] 3/31
21/4/2020 Pascal/Turbo Pascal - programa en turbo pascal
( j );
39 WriteLn('3- Buscar a un trabajador');
40 WriteLn('4- Reporte 1');
41 WriteLn('5- Reporte 2');
42 WriteLn('0- Salir');
43 Write('Escoja una opcion: ');
44 ReadLn(opcion);
45 WriteLn;
46
47 case opcion of
48 1: { Agregar trabajador }
49 if (cantidad < capacidad) then
50 begin
51 inc(cantidad);
52 WriteLn('Introduciendo al trabajador ', cantidad);
53
91 3: { Buscar a un trabajador }
92 begin
93 Write('Escriba el nombre del trabajador ');
94 ReadLn( textoBuscar );
95 encontrado := false;
96 for i := 1 to cantidad do
97 if pos (textoBuscar, tra[i].nombre) > 0 then
98 begin
99 encontrado := true;
100 WriteLn( i,' - Nombre: ', tra[i].nombre,
101 ', Salario: ', tra[i].salario);
102 end;
103 if not encontrado then
104 WriteLn('No se ha encontrado.');
105 WriteLn;
106 end;
107
108 4: { Reporte 1 }
109 for i := 1 to cantidad do
110 begin
111 if tra[i] salario > 15 then
[Link] Pascal - programa en turbo [Link] 4/31
21/4/2020 Pascal/Turbo Pascal - programa en turbo pascal
111 if tra[i].salario > 15 then
112 begin
113 writeln('Nombre del trabajador: ', tra[i].nombre);
114 WriteLn('Salario: ', tra[i].salario);
115 WriteLn('Bono: ', tra[i].bono);
116 WriteLn('Total: ', tra[i].sal_mensual);
117 end;
118 end;
119
120 5: { Reporte 2 }
121 for i := 1 to cantidad do
122 begin
123 if tra[i].salario <= 15 then
124 begin
125 writeln('Nombre del trabajador: ', tra[i].nombre);
126 WriteLn('Salario: ', tra[i].salario);
127 WriteLn('Cestaticket: ', cesta);
128 WriteLn('Total: ', tra[i].sal_men);
129 end;
130 end;
131
132 0: { salir }
133 begin
134 ;
135 WriteLn;
136 WriteLn('Saliendo...');
137 WriteLn;
138 end;
139
140 else
141 begin
142 WriteLn;
143 WriteLn('Opción incorrecta!');
144 WriteLn;
145 end;
146 end; { Fin de "case" }
147
148 until opcion = 0;
149 end.
me gustaria que me indicaran a que se deben estos errores y como poder solucionarlos
muchas gracias
Pos: 1
Val: 69
1 program ACME;
2
3 type
4 tipoPersona = record
5 nombre: string;
14 end;
15
16 const
17 capacidad = 1000;
18
19 var
20 tra: array[1..capacidad] of tipoPersona;
21 cantidad: integer;
22 opcion: integer;
23 i: integer;
24 textoBuscar: string;
25 encontrado: boolean;
26 bono: real;
27 cesta: integer;
28
29
30
47 case opcion of
48 1: { Agregar trabajador }
49 if (cantidad < capacidad) then
50 begin
51 inc(cantidad);
52 WriteLn('Introduciendo al trabajador ', cantidad);
53
79
89 3: {Buscar a un trabajador}
90 begin
91 Write('Escriba el nombre del trabajador ');
92 ReadLn( textoBuscar );
93 encontrado := false;
94 for i := 1 to cantidad do
95 if pos (textoBuscar, tra[i].nombre) > 0 then
96 begin
97 encontrado := true;
98 WriteLn( i,' - Nombre: ', tra[i].nombre,
99 ', Salario: ', tra[i].salario:4:2);
100 end;
101 if not encontrado then
102 WriteLn('No se ha encontrado.');
103 WriteLn;
104 end;
105
106 4: {Reporte 1 }
107 for i := 1 to cantidad do
108 begin
109 if tra[i].salario > 15 then
110 begin
111 writeln('Nombre del trabajador: ', tra[i].nombre);
112 WriteLn('Salario: ', tra[i].salario:4:2);
113 WriteLn('Bono: ', tra[i].bono:4:2);
114 WriteLn('Total: ', tra[i].sal_mensual:4:2);
115 end;
116 end;
117
118 5: { Reporte 2}
119 for i := 1 to cantidad do
120 begin
121 if tra[i].salario <= 15 then
122 begin
123 writeln('Nombre del trabajador: ', tra[i].nombre);
124 WriteLn('Salario: ', tra[i].salario:4:2);
125 WriteLn('Cestaticket: ', cesta);
126 WriteLn('Total: ', tra[i].sal_men:4:2);
127 end;
128 end;
129
130 0: { salir}
131 begin
132 ;
133 WriteLn;
134 WriteLn('Saliendo...');
135 WriteLn;
136 end;
137
138 else
139 begin
140 WriteLn;
141 WriteLn('Opción incorrecta!');
142 WriteLn;
143 end;
144 end; { Fin de "case" }
145
146 until opcion = 0;
147 end.
Pos: 11
Val: 21
pero tengo problema y es a la hora de insertar un codigo para eliminar a un trabajador de la lista
el codigo deberia poder borrar el nombre, el salario, los bonos y demas de dicho trabajador
1 begin
2
3 seBorro := false;
4
5 for i := 1 to capacidad do
6
7 ReadLn(tra[cantidad].nombre);
8
9 if pos (textoBuscar, tra[cantidad].nombre) = tra[i].nombre then
10
11 begin
12
13 seBorro := true;
14
15 fillchar(tra[i].salario, tra[i].sal_anu, tra[i].sal_anual, tra[i].sal_men, tra[i].sal_mensual, tra[i].util
16
17 end;
18
19 if seBorro = true then
20
21 writeln('El Trabajador indicado se ha borrado con exito')
22
23 end;
1 program ACME;
2
3
4
5 type
6
7 tipoPersona = record
8
9 nombre: string;
10
11 salario: real;
12
13 sal_anu: real;
14
15 sal_anual: real;
16
17 sal_men: real;
18
19 sal_mensual: real;
20
21 utili, utilidades, vaca, vacaciones: real;
22
23 bono: real;
24
25
26
27 end;
28
29
30
31 const
32
[Link] Pascal - programa en turbo [Link] 8/31
21/4/2020 Pascal/Turbo Pascal - programa en turbo pascal
32
33 capacidad = 1000;
34
35
36
37 var
38
39 tra: array[1..capacidad] of tipoPersona;
40
41 cantidad: integer;
42
43 opcion: integer;
44
45 i: integer;
46
47 textoBuscar: string;
48
49 encontrado: boolean;
50
51 bono: real;
52
53 cesta: integer;
54
55 seBorro:boolean;
56
57
58
61 begin
62
63 cantidad := 0;
64
65 repeat
66
67 WriteLn('***BIENVENIDO A ACME***');
68
69 WriteLn;
70
92
93 case opcion of
94
95 1: { Agregar trabajador }
96
99 begin
100
101 inc(cantidad);
102
109 ReadLn(tra[cantidad].nombre);
110
111
112
115 ReadLn(tra[cantidad].salario);
116
117
118
119 for i:=1 to cantidad do
120
121 begin
122
123 if tra[i].salario > 1500 then begin
124
125 tra[i].bono:=tra[i].salario*0.1;
126
127 tra[i].utilidades:=tra[i].salario*2;
128
129 tra[i].vacaciones:=tra[i].salario;
130
131 tra[i].sal_mensual:=tra[i].salario+tra[i].bono;
132
133 tra[i].sal_anual:=tra[i].sal_mensual*12+tra[i].vacaciones+tra[i].utilidades;
134
135 end;
136
141 cesta:=20;
142
143 tra[i].vaca:=tra[i].salario;
144
145 tra[i].utili:=tra[i].salario*4;
146
147 tra[i].sal_men:=tra[i].salario+cesta;
148
149 tra[i].sal_anu:=tra[i].sal_men*12+tra[i].vaca;
150
151 end;
152
153 end;
154
155 end;
156
157
158
159 2: begin {Todos los trabajadores}
160
165 else
166
171 WriteLn;
172
173 end;
174
175
176
178
179 begin
180
205 WriteLn;
206
207 end;
208
209
210
211 4: {Reporte 1 }
212
229 end;
230
231 end;
232
233
234
235 5: { Reporte 2}
236
253 end;
254
255 end;
256
257 6: { Eliminar trabajador }
258
259 begin
260
269 begin
270
290 WriteLn;
291
292 WriteLn('Saliendo...');
293
294 WriteLn;
295
296 end;
297
298
299
300 else
301
302 begin
303
304 WriteLn;
305
308 WriteLn;
309
310 end;
311
312 end; { Fin de "case" }
313
314
315
Creo que estoy haciendo algo mal ya que no creo que esa sea la forma para borrar la informacion
Pos: 1
Val: 69
1 program ACME;
2 type
3 tipoPersona = record
4 nombre: string;
5 salario: real;
6 sal_anu: real;
7 sal_anual: real;
8 sal_men: real;
9 sal_mensual: real;
10 utili, utilidades, vaca, vacaciones: real;
11 bono: real;
12 end;
13 const
14 capacidad = 1000;
15 var
16 tra: array[1..capacidad] of tipoPersona;
17 cantidad: integer;
18 opcion: integer;
19 i: integer;
20 textoBuscar: string;
21 encontrado: boolean;
22 bono: real;
23 cesta: integer;
24 seBorro:boolean;
25
43 case opcion of
44 1: { Agregar trabajador }
45 if (cantidad < capacidad) then
46 begin
47 inc(cantidad);
48 WriteLn('Introduciendo al trabajador ', cantidad);
49 Write('Introduzca el nombre: ');
50 ReadLn(tra[cantidad].nombre);
51 Write('Introduzca Salario: ');
52 ReadLn(tra[cantidad].salario);
Pos: 11
Val: 21
9 begin
10
13 end;
14
esto me permite crear un promedio entre los trabajadores que ganan mas de 1500
3 begin
4
9 begin
10
13 end;
14
este me permite crear un promedio entre los trabajadores que ganan menos o igual a 1500
1 9: {Promedio general}
2
3 begin
4
7 begin
8
11 end;
12
13 writeln('Promedio general es: ' sum/tra[cantidad].nombre:4:2);
14
15 end;
Compiling [Link]
[Link](309,5) Error: Label used but not defined "7"
[Link](309,5) Fatal: Syntax error, ";" expected but "BEGIN" found
Fatal: Compilation aborted
me gustaria saber porque sigue apareciendo este error y como solucionarlo ya que no me deja compilar el resto del codigo.
y tambien como ordenarlos para que aparezca que trabajador de la nomina menor gana mas que uno de la nomina mayor
1 program ACME;
2
3 type
4
5 tipoPersona = record
6
7 nombre: string;
8
9 salario: real;
10
11 sal_anu: real;
12
13 sal_anual: real;
14
15 sal_men: real;
16
17 sal_mensual: real;
18
21 bono: real;
22
23 cedula :integer;
24
[Link] Pascal - programa en turbo [Link] 16/31
21/4/2020 Pascal/Turbo Pascal - programa en turbo pascal
24
25 end;
26
27 const
28
29 capacidad = 1000;
30
31 var
32
35 cantidad: integer;
36
37 opcion: integer;
38
39 i: integer;
40
41 textoBuscar: string;
42
43 encontrado: boolean;
44
45 bono: real;
46
47 cesta: integer;
48
49 seBorro:boolean;
50
51 acum :real;
52
53 acum2 :real;
54
55 sum : real;
56
57
58
59
60
63 begin
64
65 cantidad := 0;
66
67 repeat
68
69 WriteLn('***BIENVENIDO A ACME***');
70
71 WriteLn;
72
91 WriteLn('0- Salir');
92
99
100
101 case opcion of
102
109 inc(cantidad);
110
115 ReadLn(tra[cantidad].nombre);
116
119 ReadLn(tra[cantidad].salario);
120
123 begin
124
129 bono:=tra[i].salario*0.1;
130
131 utilidades:=tra[i].salario*2;
132
133 vacaciones:=tra[i].salario;
134
135 sal_mensual:=tra[i].salario+tra[i].bono;
136
137 sal_anual:=tra[i].sal_mensual*12+tra[i].vacaciones+tra[i].utilidades;
138
139 end;
140
141 end;
142
145 begin
146
147 cesta:=20;
148
151 vaca:=salario;
152
153 utili:=salario*4;
154
155 sal_men:=salario+cesta;
156
157 sal_anu:=sal_men*12+tra[i].vaca;
158
159 end;
160
161 end;
162
163 end;
164
165 end;
166
170
173 else
174
179 WriteLn;
180
181 end;
182
203 end;
204
209 WriteLn;
210
211 end;
212
213 4: {Reporte 1 }
214
221 begin
222
223 writeln('Nombre del trabajador: ', tra[i].nombre);
224
231 end;
232
233 end;
234
235 5: { Reporte 2}
236
239 begin
240
243 begin
244
253 end;
254
255 end;
256
259 begin
260
263 readln(textoBuscar);
264
269 {ReadLn(tra[cantidad].nombre);}
270
273 begin
274
275 seBorro := true;
276
279 nombre:='';
280
281 salario:=0;
282
283 sal_anu:=0.0;
284
285 sal_anual:=0.0;
286
287 sal_men:=0.0;
288
289 sal_mensual:=0.0;
290
291 utili:=0;
292
293 utilidades:=0;
294
295 vaca:=0;
296
297 vacaciones:=0;
298
299 bono:=0;
300
301 end;
302
303 end;
304
305 end;
306
307 7: {Promedio Nomina Mayor}
308
309 begin
310
319 end;
320
327 begin
328
333 begin
334
337 end;
338
339 writeln('Promedio Nomina Menor es: ' acum/tra[cantidad].nombre:4:2)
340
343 begin
344
345 for i := 1 to capacidad do begin
346
347 begin
348
351 end;
352
355 end;
356
357 0: { salir}
358
359 begin
360
361 WriteLn;
362
363 WriteLn('Saliendo...');
364
365 WriteLn;
366
367 end;
368
369 else
370
371 begin
372
373 WriteLn;
374
379 end;
380
381 end; { Fin de "case" }
382
385 end.
muchisimas gracias
Pos: 11
Val: 21
he logrado resolver los errores de compilacion antes mencionados pero al compilar los codigos para el promedio de la nomina mayor y
menor
3 begin
4
9 begin
10
11 acum:=0;
12
13 acum:=acum+tra[i].sal_anual;
14
17 writeln('tra[i].acum/tra:4.2');
18
19 end;
20
21 end;
22
23 end;
24
27 begin
28
33 begin
34
41 end;
42
43 end;
44
45 end;
y el promedio general
3 begin
4
7 begin
8
9 sum:=0;
10
11 sum:=acum2+ acum;
12
15 writeln('tra[i].sum/tra:4:2');
16
17 end;
18
19 end;
20
21 end;
Compiling [Link]
[Link](45,2) Note: Local variable "bono" not used
[Link](49,2) Note: Local variable "seBorro" is assigned but never used
[Link](55,2) Note: Local variable "sum" is assigned but never used
Linking [Link]
405 lines compiled, 0.5 sec, 44928 bytes code, 3332 bytes data
3 note(s) issued
La compilación ha terminado con éxito.
no entiendo porque aparecen ademas al ejecutar el programa cuando eligo las opciones de los promedios me aparece lo siguiente
Pos: 11
Val: 21
ya he logrado resolver el problema de los promedios aunque me gustaria que los pudieses revisar.
tambien le he cambiado algunas cosas al codigo como agregarle la cedula de identidad al trabajador pero me surge una duda
uno de los puntos es que el programa deberia escribir que trabajador de la nomina menor gana mas que uno de la nomina mayor
(salario anual).
he incluido el numero de cedula de identidad ya que la profesora me ha sugerido para resolver este problema usar el metodo de
ordenamiento de la burbuja
he investigado algo por internet y los ejemplos que aprecen son para las listas y no para arrays como el del programa.
P.D: la cedula es el numero de identificacion personal en mi pais y la cestaticket es un bono de alimentacion que se le da a cada
trabajador.
1 program ACME;
2
3 type
4
5 tipoPersona = record
6
7 nombre: string;
8
9 salario: real;
10
11 sal_anu: real;
12
13 sal_anual: real;
14
15 sal_men: real;
16
17 sal_mensual: real;
[Link] Pascal - programa en turbo [Link] 24/31
21/4/2020 Pascal/Turbo Pascal - programa en turbo pascal
18
19 utili, utilidades, vaca, vacaciones: real;
20
21 bono: real;
22
23 cedula :string;
24
25 end;
26
27 const
28
29 capacidad = 1000;
30
31 var
32
33 tra: array[1..capacidad] of tipoPersona;
34
35 cantidad: integer;
36
37 opcion: integer;
38
39 i: integer;
40
41 textoBuscar: string;
42
43 encontrado: boolean;
44
45 bono: real;
46
47 cesta: integer;
48
49 seBorro:boolean;
50
51 acumMedia :real;
52
53 contMedia: integer;
54
55
56
57
58
61 begin
62
63 cantidad := 0;
64
65 repeat
66
67 WriteLn('***BIENVENIDO A ACME***');
68
69 WriteLn;
70
97
98
99 case opcion of
100
105 begin
106
107 inc(cantidad);
108
113 ReadLn(tra[cantidad].cedula);
114
117 ReadLn(tra[cantidad].nombre);
118
119 Write('Introduzca Salario: ');
120
121 ReadLn(tra[cantidad].salario);
122
123 for i:=1 to cantidad do
124
125 begin
126
127 if tra[i].salario > 1500 then begin
128
133 utilidades:=tra[i].salario*2;
134
135 vacaciones:=tra[i].salario;
136
137 sal_mensual:=tra[i].salario+tra[i].bono;
138
139 sal_anual:=tra[i].sal_mensual*12+tra[i].vacaciones+tra[i].utilidades;
140
141 end;
142
143 end;
144
149 cesta:=20;
150
151 with tra[i] do begin
152
153 vaca:=salario;
154
155 utili:=salario*4;
156
157 sal_men:=salario+cesta;
158
159 sal_anu:=sal_men*12+tra[i].vaca;
160
161 end;
162
165 end;
166
167 end;
168
175 else
176
181 WriteLn;
182
183 end;
184
187 begin
188
205 end;
206
207 if not encontrado then
208
209 WriteLn('No se ha encontrado.');
210
211 WriteLn;
212
213 end;
214
215 4: {Reporte 1 }
216
217 for i := 1 to cantidad do
218
219 begin
220
237 5: { Reporte 2}
238
239 for i := 1 to cantidad do
240
241 begin
242
243 if tra[i].salario <= 1500 then
244
245 begin
246
255 end;
256
257 end;
258
259 6: {Borra un trabajador}
260
261 begin
262
271 {ReadLn(tra[cantidad].nombre);}
272
273 if (textoBuscar = tra[i].nombre) then
274
275 begin
276
282 nombre:='';
283
284 salario:=0;
285
286 sal_anu:=0.0;
287
288 sal_anual:=0.0;
289
290 sal_men:=0.0;
291
292 sal_mensual:=0.0;
293
294 utili:=0;
295
296 utilidades:=0;
297
298 vaca:=0;
299
300 vacaciones:=0;
301
302 bono:=0;
303
304 end;
305
306 end;
307
308 end;
[Link] Pascal - programa en turbo [Link] 28/31
21/4/2020 Pascal/Turbo Pascal - programa en turbo pascal
308 end;
309 end;
310
327 inc(contMedia);
328
329 end;
330
331 if (contMedia = 0) then
332
333 writeln('No hay empleados con salario mayor de 1500')
334
335 else
336
356 inc(contMedia);
357
358 end;
359
360 if (contMedia = 0) then
361
362 writeln('No hay empleados con salario menor o igual a 1500')
363
364 else
365
366 writeln('Promedio Nomina Menor es: ', acumMedia/contMedia:4:2);
367 end;
368
377 else
378
379 begin
380
383 contMedia:= 0;
384
385 for i := 1 to cantidad do
386
387 begin
388
393 end;
394
395 writeln('Promedio general es: ', acumMedia/contMedia:4:2);
396
397 end;
398 end;
399
400 0: { salir}
401
402 begin
403
404 WriteLn;
405
406 WriteLn('Saliendo...');
407
408 WriteLn;
409
410 end;
411
412 else
413
414 begin
415
416 WriteLn;
417
422 end;
423
424 end; { Fin de "case" }
425
428 end.
muchas gracias
Cálculos con trabajadores Contar cuántas veces se repite una palabra en un string