Você está na página 1de 4

7/4/2017 Conoce300::PascalconFreePascal::Estructurasdecontrol::EstructuradecontrolCaseof

LENGUAJESDEPROGRAMACIN



PASCALCONFREEPASCAL


4.Estructurasdecontrol.

4.3.EstructuradecontrolCaseof.

anterior::indice::siguiente

4.1.Introduccin. 4.4.EstructuraWhiledo. 4.7.EstructuraFordowntodo(Descendente).
4.2.Estructuraifthenelse. 4.5.EstructuraRepeatuntil.
4.3.EstructuraCaseof. 4.6.EstructuraFortodo(Ascendente). 4.8.Preguntasyejercicios .
4.9.Respuestaalaspreguntasyejercicios.


La estructura ifthenelse, nos da la capacidad de poder escoger entre dos alternativas, en funcin del valor de una condicin.
PerolaestructuraCaseofnospermiteelegirunaalternativadeentrevarias.Caseof,sepuedeinterpretarcomo:Encasode que
la alternativa tome un cierto valor, se ejecutar la instruccin o instrucciones correspondiente al valor tomado. El programa de
ejemploqueveremosacontinuacin,nosmostraraelusodelaestructuraCaseof.Elprogramaconsistirenpedirnospor teclado
dosnmeros,ydespusnospedirlaoperacinarealizardeacuerdoalasiguientetabla:

Operacin Descuento
1 Sumalosdosnmerosingresados
2 Restalosdosnmerosingresados
3 Multiplicalosdosnmerosingresados
4 Dividelosdosnmerosingresados

Acontinuacinelejemplo:

{$codepageUTF8}

VARnum01,num02:Double;
resultado:Double;
operacion:byte;

BEGIN
Write('num01:');
Readln(num01);
Write('num02:');
Readln(num02);
Write('operacion:');
Readln(operacion);
CASEoperacionOF
1:BEGIN
resultado:=num01+num02;
Writeln('resultado=',resultado:10:3)
END;
2:BEGIN
resultado:=num01num02;
Writeln('resultado=',resultado:10:3)
END;
3:BEGIN
resultado:=num01*num02;
Writeln('resultado=',resultado:10:3)
END;
4:BEGIN
resultado:=num01/num02;
Writeln('resultado=',resultado:10:3)
END
ELSEWriteln('Nohayresultado,ingreseunaoperacion')
END;//Findelaestructuracase.
Readln
END.

Cdigofuente6:EjemplodelusodeCaseof.

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap0403Estructura%20de%20control%20Caseof.php 1/4
7/4/2017 Conoce300::PascalconFreePascal::Estructurasdecontrol::EstructuradecontrolCaseof
Enesteejemplolavariableoperacin,recibeelnombredeselector.Elselectordebeseruntipodedatoentero,carcter,string,
booleano,enumeradoosubrango,esdecirnosepuedeusaruntipodedatoreal.Losnmerosqueaparecenenlaslneasdebajo
delapalabraCase,sedenominanetiquetas.Cadaetiqueta viene seguida de dos puntos, y a continuacin de una instruccin o
bloquedeinstruccionessedebecolocarunpuntoycoma(),aexcepcindelaltimaetiqueta.
CuandoseejecutaunaestructuraCaseof,seevalaelselectorysuvalorsecompara,concadaunadelasdistintasetiquetas.
Si una de las etiquetas es igual al valor del selector, entonces se ejecuta la instruccin asociada a esa etiqueta. Una vez
terminada la instruccin elegida, se considera finalizado el trabajo de la estructura Caseof, pasando a ejecutar la instruccin
siguiente.Enelprogramasielselectorrecibeelvalor2,entoncesejecutarlasinstruccionesasociadasalaetiqueta2.
Cuandoningunadelasetiquetascoincideconelvalordelselector,seejecutarlasinstruccionescorrespondientesalelse,queen
esteejemplo,mostrarelmensaje:Nohayresultado,ingreseunaoperacin.Noobstanteelelseesopcional,ysinoestuviera
presente pasara a ejecutar la siguiente instruccin del programa. Una etiqueta puede ser una lista de valores separadas por
comas,ounsubrangodevalores,ounamezcladeambos.Porejemplopodemoshacerunprogramaquenospermitaimprimir la
categoraalaquecorrespondeunestudiantedeacuerdoalasiguientetabla:

Calificacin Categora
81..100 A
61..80 B
41..60 C
21..40 D
00..20 E

ElprogramasepuedehacerusandolaestructuraCaseof,usandoenlasetiquetaslossubrangosdelascalificacionesdelalumno,
acontinuacinelejemplo:

{$codepageUTF8}

VARCalificacion:Integer;

BEGIN
Write('IngreselaCalificaciondelalumno:');
Readln(Calificacion);
CASECalificacionOF
90..100:Writeln('A');
80..89:Writeln('B');
70..79:Writeln('C');
60..69:Writeln('D');
0..59:Writeln('E')
END;
END.

Cdigofuente7:EjemplodeCaseofconsubrangos.

Elprogramaanterioresmslegibleadiferenciadeescribirloencadenandolasestructurasifthenelse.Otroejemplomsdeluso
delaestructuraCaseof,lomuestroconelsiguienteprograma:

{$codepageUTF8}

VARletra:Char;

BEGIN
Write('Ingreseunaletra:');
Readln(letra);
CASEletraOF
'A'..'Z',#165:Writeln('Ingresasteunamayuscula');
'a'..'z',#164:Writeln('Ingresasteunaminuscula')
END;
END.

Cdigofuente8:EjemplodeCaseofconsubrangosdecaracteres.

El programa permite saber si se ingreso desde el teclado una letra mayscula o minscula, para ello hacemos uso de los
subrangos, pero en este caso de caracteres. El cdigo 165 representa la letra mayscula y el cdigo 164 la letra en
minscula, pero en la codificacin de caracteres IBM 437 por lo tanto hay que modificar la codificacin de caracteres del
intrprete de comandos para que el programa funcione usar chcp 437 en Windows y en Linux usar el men del terminal de
Gnome:Terminal>Establecercodificacindecaracteres.
Existensituacionesenlasqueelanlisisdeunproblemaquesequiereresolver,nosconduceausarunconjuntodecondiciones
muy amplio. Por ejemplo, se desea hacer un programa que realice descuentos al cliente, por la compra de uno de los tres
productosquesevendenenlatienda,deacuerdoalasiguientetabladedecisiones:

Productos
Descuentos
A B C
D N N N 0.00%
E N N S 1.00%
C
I N S N 2.00%
S N S S 3.00%
I
O S N N 4.00%
N S N S 5.00%
E S S N 6.00%
S
S S S 7.00%

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap0403Estructura%20de%20control%20Caseof.php 2/4
7/4/2017 Conoce300::PascalconFreePascal::Estructurasdecontrol::EstructuradecontrolCaseof
NsignificanocompraySsicompra,enlatabladedecisionessepuedeobservarquecuandoelclientecompraelproductoAyel
productoB,obtieneundescuentodel6%,ycuandocompratodoslosproductosobtieneundescuentodel7%.
Unaprimerasolucin,esusarlaestructuraifthendelsiguientemodo:

If((A='N')and(B='N')and(C='S'))thendesc:=0.01
If((A='N')and(B='S')and(C='N'))thendesc:=0.02
If((A='N')and(B='S')and(C='S'))thendesc:=0.03
If((A='S')and(B='N')and(C='N'))thendesc:=0.04
If((A='S')and(B='N')and(C='S'))thendesc:=0.05
If((A='S')and(B='S')and(C='N'))thendesc:=0.06
If((A='S')and(B='S')and(C='S'))thendesc:=0.07

Pero, haciendo una observacin ms exhaustiva y cambiando los valores S y N, por 1 y 0 respectivamente. Obtendremos una
combinacindedgitosbinariosquevandesde0a7,estonospermiteconvertirlascombinacionesNyS,envalores numricos
quepuedeevaluarlaestructuraCaseof,delsiguientemodo:

a:=0b:=0c:=0
ifPA='S'thena:=1
ifPB='S'thenb:=1
ifPC='S'thenc:=1
n:=(ashl2)+(bshl1)+c
Casenof
0:desc:=0.00
1:desc:=0.01
2:desc:=0.02
3:desc:=0.03
4:desc:=0.04
5:desc:=0.05
6:desc:=0.06
7:desc:=0.07
End

ComopodrnobservarseusanlasvariablesPA,PB,PCparadeterminarelproductoelegido,ylasvariablesa,b,cpararealizarla
conversinnumrica.ElcompiladorsiempregenerarcdigoquepermiteejecutarmsrpidounaestructuraCaseof,adiferencia
deusarlasestructurasifthenelse.Acontinuacinelprogramacompletodeejemplo:

{$codepageUTF8}

VARPA,PB,PC:Char;
PrecioA,PrecioB,PrecioC,Desc,Total:Single;
a,b,c,n:byte;

BEGIN
Write('ProductoA:');Readln(PA);
Write('ProductoB:');Readln(PB);
Write('ProductoC:');Readln(PC);
a:=0;b:=0;c:=0;Desc:=0;
PrecioA:=0;PrecioB:=0;PrecioC:=0;
IFPA='S'THENBEGINa:=1;PrecioA:=200END;
IFPB='S'THENBEGINb:=1;PrecioB:=300END;
IFPC='S'THENBEGINc:=1;PrecioC:=400END;
n:=(ashl2)+(bshl1)+c;
CASEnOF
0:Desc:=0.00;
1:Desc:=0.01;
2:Desc:=0.02;
3:Desc:=0.03;
4:Desc:=0.04;
5:Desc:=0.05;
6:Desc:=0.06;
7:Desc:=0.07
END;
Total:=PrecioA+PrecioB+PrecioC;
Writeln('SubTotal',Total:10:3);
Writeln('Descuento',Total*Desc:10:3);
Total:=Total(Total*Desc);
Writeln('Total',Total:10:3)
END.

Cdigofuente9:EjemploTabladedecisionesusandoCaseof.

El ejemplo descrito es muy til cuando la tabla de decisiones, est limitada a usar slo dos posibles valores. Pero el ejemplo
anterior, tambin se puede hacer mucho mejor con el uso de banderas y el operador or, permitiendo acelerar en cuestin de
nanosegundos los resultados, cambiando las instrucciones para la obtencin del valor de n, a continuacin el programa de
ejemplo:

{$codepageUTF8}

VARPA,PB,PC:Char;
PrecioA,PrecioB,PrecioC,Desc,Total:Single;
a,b,c,n:byte;

BEGIN
Write('ProductoA:');Readln(PA);
Write('ProductoB:');Readln(PB);
Write('ProductoC:');Readln(PC);
a:=0;b:=0;c:=0;Desc:=0;
PrecioA:=0;PrecioB:=0;PrecioC:=0;
IFPA='S'THENBEGINa:=%100;PrecioA:=200END;
IFPB='S'THENBEGINb:=%010;PrecioB:=300END;
IFPC='S'THENBEGINc:=%001;PrecioC:=400END;
n:=aORbORc;
CASEnOF

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap0403Estructura%20de%20control%20Caseof.php 3/4
7/4/2017 Conoce300::PascalconFreePascal::Estructurasdecontrol::EstructuradecontrolCaseof
0:Desc:=0.00;
1:Desc:=0.01;
2:Desc:=0.02;
3:Desc:=0.03;
4:Desc:=0.04;
5:Desc:=0.05;
6:Desc:=0.06;
7:Desc:=0.07
END;
Total:=PrecioA+PrecioB+PrecioC;
Writeln('SubTotal',Total:10:3);
Writeln('Descuento',Total*Desc:10:3);
Total:=Total(Total*Desc);
Writeln('Total',Total:10:3)
END.

Cdigofuente10:EjemploTabladedecisionesusandoCaseof,banderasyeloperadoror.

Delejemploanteriorlasvariablesa,byc,seranlasbanderasparaluegousandoeloperadororjuntarounirlasbanderas,yde
esamaneraobtenerelvalorden.Elsiguienteprogramaesunejemplodelusodestringconlaestructuracase.

{$codepageUTF8}
VARcad:String;
BEGIN
Write('EscribaHolaoAdiosparaobtenerunarespuesta:');
readln(cad);
CASEcadOF
'Hola':Writeln('Hola,Bienvenidoalaconversacion');
'Adios':Writeln('Hastaluego,esperovertepronto')
ELSEWriteln('Noentiendoloquemedices')
END
END.

Cdigofuente11:EjemplousandoCaseof,constring.

Recomendar 1 Tweet


anterior::indice::siguiente

SUGERENCIAS



"Agradezco que se tomen su tiempo, para escribirme una sugerencia. Toda sugerencia que me
escribameayudaamejorarloscontenidosdelawebacordeasusnecesidades.Lassugerencias,se
recibirn siempre y cuando ingrese al menos su nombre o seudnimo y la sugerencia. Las
sugerenciassondeusointernoynosernpublicadasenlawebConoce3000"

Nombreoseudnimo :

CorreoElectrnico :
Sugerencias :


Deseorecibirunacopiadelmensaje.

Enviar



PORTADA| LIBROS| APUNTES| ARTCULOS



Todoslostextos,imgenesyvideosdeConoce3000estancolocadosbajounalicencia:
CreativeCommonsReconocimientoNoComercial3.0UnportedLicense.

http://www.conoce3000.com/html/espaniol/Libros/PascalConFreePascal/Cap0403Estructura%20de%20control%20Caseof.php 4/4