Pascal/Turbo Pascal - Problema con case y else

   
Vista:

Problema con case y else

Publicado por titoclk (2 intervenciones) el 02/12/2013 16:38:30
Buenas tardes foreros, es un placer formar parte de este foro e intentaré aportar todo lo que pueda.

Me gustaría que alguien me ayudara porque por más horas que le echo no soluciono el fallo, llevo 5 meses programando y aprendiendo cosas día a día.

Tengo un problema con un procedure que estoy creando para manipular un array de registros y me da en el compilador un fallo que no se como resolver, la sintaxis es esta:

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
(* PROCED. MODIFICA UN PRODUCTO DE CESTA *)
Procedure modificar_producto(unacesta:cesta;nombre:string);
var
a,b,unisol:integer;
varchang,varnew,campo:string;
preuni:real;
 
begin (* 1 *)
unisol := 0;
preuni := 0;
	(* pregunta al usuario nombre de prod. a modificar *)
	write('Escriba el nombre del producto a MODIFICAR: ');
	readln(nombre);
		(* lo busque y si lo encuentra, le pregunte el campo a cambiar que valor nuevo quiere darle y realice actualizacion *)
		for a:=1 to tammaxcesta do
		begin (* 2 *)
			if (nombre = unacesta[a].nombre) then
				begin (* 3 *)
					write('¿Que campo quieres cambiar?: ');
					readln(varchang);
					case (varchang) of
					'nombre' : begin  (* 4 *)
							write('¿Por que valor lo cambiamos?: ');
							readln(varnew);
							unacesta[a].nombre := varnew;
								end; (* 4 *)
					'unidades_sol' : begin (* 5 *)
									write('¿Por que valor lo cambiamos?: ');
									readln(unisol);
									unacesta[a].unidades_sol := unisol;
									end; (* 5 *)
					'precio_uni ' : begin  (* 6 *)
									write('¿Por que valor lo cambiamos?: ');
									readln(preuni);
									unacesta[a].precio_uni := preuni;
									end (* 6 *)
					else writeln('OPCION NO PERMITIDA');
					end (* END DEL CASE *)
		   (* sino encuentra coincidencias muestra mensaje *)
			else     <---------------------------------------------------------------------------------------EL FALLO ME LO DA AQUI
			writeln('PRODUCTO A MODIFICAR NO ENCONTRADO');
			end;  (* 3 *)
		end; (* 2 *)
end; (* 1 *)

el fallo concretamente es: Fatal: syntax error, ";" expected but "ELSE" found

ojalá alguien me pudiera ayudar, gracias de antemano

PD: no me deja sangrar el código, pongo números para diferenciar los begin y end de cada cosa
Saludos
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

Problema con case y else

Publicado por ramon (2072 intervenciones) el 02/12/2013 20:13:43
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
{Mira prueba este código te explico pascal no permite cadenas en el case}
 
const
   tammaxcesta = 1;
 
  type
    regces = record
         nombre : string[80];
         unidades_sol : integer;
         precio_uni : real;
       end;
 
var
a,b,unisol:integer;
varnew,campo:string;
varchang : char;
preuni:real;
nombre : string[80];
unacesta : array[1..1] of regces;
encontre : boolean;
 
begin (* 1 *)
unisol := 0;
preuni := 0;
encontre := false;
(* pregunta al usuario nombre de prod. a modificar *)
write('Escriba el nombre del producto a MODIFICAR: ');
readln(nombre);
(* lo busque y si lo encuentra, le pregunte el campo a cambiar que valor nuevo quiere darle y realice actualizacion *)
for a := 1 to tammaxcesta do
begin (* 2 *)
if (nombre = unacesta[a].nombre) then
begin (* 3 *)
encontre := true;
write('¿Que campo quieres cambiar?: ');
readln(varchang);
case varchang of
'n','N' : begin (* 4 *)
          write('¿Por que valor lo cambiamos?: ');
          readln(varnew);
          unacesta[a].nombre := varnew;
         end; (* 4 *)
'u','U' : begin (* 5 *)
          write('¿Por que valor lo cambiamos?: ');
          readln(unisol);
          unacesta[a].unidades_sol := unisol;
         end; (* 5 *)
'p','P' : begin (* 6 *)
          write('¿Por que valor lo cambiamos?: ');
          readln(preuni);
          unacesta[a].precio_uni := preuni;
        end; (* 6 *)
   end; (* END DEL CASE *)
    end;
  end; (* 3 *)
   (* sino encuentra coincidencias muestra mensaje *)
   if encontre = false then
   begin
   writeln('PRODUCTO A MODIFICAR NO ENCONTRADO');
   readln;
   end;
 end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Problema con case y else

Publicado por titoclk (2 intervenciones) el 03/12/2013 12:55:54
muchas gracias !!!!!! me ha servido muchisimo, te agradezco también la rápidez en tu respuesta, un abrazo
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