Pascal/Turbo Pascal - Ayuda! Grax :)

 
Vista:

Ayuda! Grax :)

Publicado por usuaria (27 intervenciones) el 08/09/2006 16:42:55
Hola, queria saber si alguien me puede decir que estoy haciendo mal en la parte del case, ya q si corro el programita sin el case me sale pero al agregar el case me pone:
'Constant and case types do not match'.
grax!

6.- Desarrolle un programa PASCAL que calcule la media aritmética de las
notas de tres certámenes y determine una apreciación cualitativa según:
0 - 40 Muy malo
41 - 54 Malo
55 - 60 Suficiente
61 - 79 Bueno
80 - 100 Muy bueno
Las notas están en el rango 0-100}

Program Seis;
Uses
Crt;
Const
maxnota=100;
Type
tnota= 0..maxnota;
Var
A,B,C:tnota;
promedio:real;
Begin
ClrScr;

Writeln ('Ingrese las notas del Alumno: ');
Write ('Nota 1: ') ; Readln (A);
Write ('Nota 2: ') ; Readln (B);
Write ('Nota 3: ') ; Readln (C);

Promedio:= (A+B+C)/3;
Write ('El promedio es: ',promedio);

Case (promedio) of
'0..'40': Write ('Muy Malo');
'41'..'54': Write ('Malo');
'55'..'60': Write ('Suficiente');
'61..'79': Write ('Bueno');
'80'..'100': Write ('Muy Bueno');
End;

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

RE:Ayuda! Grax :)

Publicado por Diego Romero (996 intervenciones) el 08/09/2006 18:36:19
Bueno pues, es muy sencillo, je... Un tipo real no se puede usar como condicional de un Case pues no es un tipo ordinal (dado un valor no se puede determinar el siguiente). Te sugiero que cambies el tipo de la variable "promedio" a integer que sí es ordinal.
Por otro lado si bien puedes usar rangos para evaluar con un Case la especificación del rango debe ser del mismo tipo que el tipo de la variable evaluada. Tú lo estás haciendo con strings (los strings no son ordinales).
Pero veo que tienes un problema. Necesitas que la variable "promedio" sea real pues es el resultado de una división real (usas la barra).
Para solucionar esto puedes hacer una de dos cosas, o bien cambiar la división a tipo entero (usando div en vez de / ) o bien en vez de usar case haz if anidados así:
if (promedio > -1 ) and (promedio < 41) then Writeln('Muy malo')
else
if (promedio > 40 ) and (promedio < 55) then Writeln('Malo')
else
if (promedio > 54 ) and (promedio < 61) then Writeln('Suficiente')
else
if (promedio > 60 ) and (promedio < 80) then Writeln('Bueno')
else WriteLn('Muy Bueno');
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