• No se han encontrado resultados

Informática. Tema4- Estructuras de Control en C: Estructuras selectivas o condicionales

N/A
N/A
Protected

Academic year: 2021

Share "Informática. Tema4- Estructuras de Control en C: Estructuras selectivas o condicionales"

Copied!
29
0
0

Texto completo

(1)

Informática

Tema4- Estructuras de Control en C:

Estructuras selectivas o condicionales

(2)

Estructuras de control

• Van a controlar la ejecución de las

instrucciones:

• Tipos:

– Selectivas (Eligen las instrucciones ejecutar).

– Repetitivas (Repiten un cjto de instrucciones).

(3)

Estructuras selectivas

• Selección simple. (if)

• Selección complementaria (if-else)

• Anidamiento

(4)

Selectivas: Elegir qué hacer!!

• ¿Cómo se ejecuta un programa?

• ¿Podemos alterar el orden de ejecución?

• ¿Podemos decidir qué ejecutar y qué no?

Ejemplo:

Decir si un número es positivo o negativo

Solución:

emplear instrucciones que nos permitan hacer una

cosa u otra

(5)

Conceptos previos

Bloque de instrucciones

: Conjunto de

instrucciones que se encuentra encerradas

entre dos llaves {....}

• p.e.

{

printf(“Deme un numero”); /* mensaje de cortesia*/ scanf(“%d”,&numero); /* se introduce el numero*/ }

(6)

Selección simple: if

• La instrucción if permite elegir si se ejecuta

o no un bloque de instrucciones.

• Ejemplo: Decir si un número introducido

por teclado es positivo.

(7)

Ejemplo 1

int main(){

int x;

printf(“Deme un numero”);

/* mensaje indicando lo que se pide */

scanf(“%d”,&x);

/* se introduce el número */

if (x>=0)

/* expresión condicional del if */

{

printf(“El numero %d es positivo”,x);

/* bloque */

}

}

(8)

Esquema del if

x>0

Bloque

Resto de

instrucciones

Cierto(1)

Falso(0)

if

(9)

• Ampliemos el problema:

– Decir si un número introducido por teclado es

positivo o negativo.

• Este problema plantea dos alternativas que

además son complementarias y excluyentes:

– O el número es positivo o es negativo

(10)

int main(){ int x;

printf(“Deme un numero”); /* mensaje indicando lo que se pide*/ scanf(“%d”,&x); /* se introduce el número */

if (x>=0) /* expresión condicional del if */ {

printf(“El numero %d es positivo”,x); /* bloque1*/ }

else {

printf(“El numero %d es negativo”,x); /* bloque2*/ }

(11)

Otra posibilidad

int main(){ int x;

printf(“Deme un numero”); /* mensaje indicando lo que se pide */ scanf(“%d”,&x); /* se introduce el número */

if (x>=0) /* expresión condicional del if */ {

printf(“El numero %d es positivo”,x); /* bloque1*/ }

if (x<0) {

printf(“El numero %d es negativo”,x); /* bloque2*/ }

(12)

Esquema if...else

x>0

Bloque1

Resto de

instrucciones

Cierto(1)

Falso(0)

if...else

Bloque2

(13)

Instrucciones de selección

anidadas

• Supongamos el siguiente problema:

– Resolver una ecuación de primer grado

ax+b=0

• Análisis de las soluciones:

– Si a distinto de 0 entonces x=-b/a

– Si a=0 b distinto de 0 entonces solución imposible.

b=0 entonces “solución indeterminada”

(14)

int main(){

double a,b;

printf(“Deme un numero a y b”); /* mensaje indicando lo que se pide */

scanf(“%lf%lf”,&a,&b); /* se introduce el número */

if (a!=0) {

printf(“El resultado es: %lf”,-b/a); }

else {

if (b!=0) {

printf(“La solución es imposible”); }

else {

printf(“La solución es indeterminada”); }

}

(15)

int main(){

double a,b;

printf(“Deme un numero a y b”); /* mensaje indicando lo que se pide */

scanf(“%lf%lf”,&a,&b); /* se introduce el número */

if (a!=0)

printf(“El resultado es: %lf”,-b/a); else

if (b!=0)

printf(“La solución es imposible”); else

printf(“La solución es indeterminada”); }

(16)

int main(){ double a,b;

printf(“Deme un numero a y b”); /* mensaje indicando lo que se pide */

scanf(“%lf%lf”,&a,&b); /* se introduce el número */

if (a!=0) /*sin identación*/

printf(“El resultado es: %lf”,-b/a); else

if (b!=0)

printf(“La solución es imposible”); else

printf(“La solución es indeterminada”); }

(17)

Esquema anidado

a!=0

Bloque1

Resto de

instrucciones

Cierto(1)

Falso(0)

if...else

anidado

b!=0

Bloque2

Cierto(1)

Falso(0)

Bloque3

(18)

Otra solución, condiciones

compuestas

int main(){

double a,b;

printf(“Deme un numero a y b”); /* mensaje indicando lo que se pide */

scanf(“%lf%lf”,&a,&b); /* se introduce el número */

if (a!=0)

printf(“El resultado es: %lf”,-b/a); if ((a==0) && (b!=0))

printf(“La solución es imposible”); if ((a==0) && (b==0))

printf(“La solución es indeterminada”); }

Realiza 5 comparaciones

Frente las dos del

programa anterior.

(19)

• Problema:

– Se desea diseñar un programa en C que lea

desde

teclado

una

calificación

alfabética

A,B,C,D,E y las convierta en las numéricas

9,7,5,3,1 respectivamente.

(20)

Posible solución

int main(){ char nota;

printf(“Deme una calificación”); /* mensaje indicando lo que se pide */

scanf(“%c”,&nota); /* se introduce el número */

if ((nota<„A‟) || (nota>‟E‟)) printf(“Calificación desconocida”); else {

if (nota==„A‟) printf(“La nota es 9”); if (nota==„B‟) printf(“La nota es 7”); if (nota==„C‟) printf(“La nota es 5”); if (nota==„D‟) printf(“La nota es 3”); if (nota==„E‟) printf(“La nota es 1”); }

(21)

La selección múltiple con switch

• Permite seleccionar entre infinitos caminos

sin necesidad de anidar y evaluando una

única expresión.

• Sintaxis:

switch

(expresion){

case

valor1 : bloque1

break;

case

valor2 : bloque2

break;

...

}

Estos bloques no precisan de llaves pues van precedidos por “:” y acaban con un break;

(22)

int main(){ char nota;

printf(“Deme una calificación”); /* mensaje indicando lo que se pide */

scanf(“%c”,&nota); /* se introduce el número */

switch (nota) {

case „A‟: printf(“La nota es 9”); break; case „B‟: printf(“La nota es 7”); break; case „C‟: printf(“La nota es 5”); break; case „D‟: printf(“La nota es 3”); break; case „E‟: printf(“La nota es 1”); break; default : printf(“Nota desconocida”); }

(23)

Propiedades del break

• Problema: Supongamos que deseamos saber

la calificación de un alumno (Aprobado,

Suspendido,

Notable,

Sobresaliente,

Matricula, etc...)

– Valores: [

0-5[ corresponde a Suspendido

[5-7[ corresponde a Aprobado

[7-9[ corresponde a Notable

[9-10[ corresponde a Sobresaliente

10 corresponde a matricula.

(24)

int main(){ int nota;

printf(“Deme una calificación”);

scanf(“%d”,&nota); /* se introduce el número */ switch (nota) {

case 1: case 2: case 3:

case 4: printf(“La nota %d = Suspendido”,nota); break; case 5:

case 6: printf(“La nota %d = Aprobado”,nota); break; case 7:

case 8: printf(“La nota %d = Notable”,nota); break;

case 9: printf(“La nota %d = Sobresaliente”,nota); break; case 10: printf(“La nota %d = Matricula”,nota); break; default : printf(“Nota desconocida”);

} }

(25)

Inconvenientes del switch

• Sólo se selecciona en base a la evaluación

de una única expresión.

• Los valores de cada case (caso) del switch

pueden ser resultado de una expresión, en

ese caso debe estar formada por ctes, por lo

tanto no se puede utilizar nombres de

variables.

• El resultado de las expresiones de cada case

deben ser números enteros.

(26)

int main(){

double nota;

printf(“Deme una calificación”);

scanf(“%lf”,&nota); /* se introduce el número */ if ((nota<0)||(nota>10))

printf(“Calificación desconocida”); else {

if ((nota>0) && (nota<5))

printf(“La nota %lf es Suspenso”,nota); if ((nota>=5) && (nota<7))

printf(“La nota %lf es Aprobado”,nota); if ((nota>=7) && (nota<9))

printf(“La nota %lf es Notable”,nota); if ((nota>=9) && (nota<10))

printf(“La nota %lf es Sobresaliente”,nota); if (nota==10)

printf(“La nota %lf es Matricula”,nota); }

}

(27)

Menú con un switch

• Hacer un programa que construya una

calculadora básica.

– Debe pedirse que se introduzcan dos números.

– Se debe de elegir una operación a través de un

menú de opciones: suma, resta, multiplicación,

división.

– Realizar la operación correspondiente.

(28)

/* ejemplo de menu de opciones */

...

printf(“Menu de

opciones\n\t1-suma\n\t2-resta\n\t3-multiplicación\n\t4-division\n”);

printf(“deme una opción de 1-4”);

scanf(“%d”,&opc);

switch(opc){

case 1: ...

case 2: ...

case 3: ...

case 4: ...

default: printf(“opción incorrecta”);

}

(29)

int main() { int opc; double a,b;

printf(“Deme el primer numero”); scanf(“%lf”,&a);

printf(“Deme el segundo numero”); scanf(“%lf”,&b);

printf(“Menu de opciones\n\t1-Sumar\n\t2-Restar\n\t3-Multiplicar\n\t4-dividir\nDeme una opcion de 1-4: ”);

switch(opc){

case 1: printf(“el resultado es %lf”, a+b);break; case 2: printf(“el resultado es %lf”, a-b);break; case 3: printf(“el resultado es %lf”, a*b);break; case 4: if (b!=0)

printf(“el resultado es %lf”, a/b); else

printf(“el resultado es indefinido”); break;

default: printf(“opción incorrecta”); }

Referencias

Documento similar