Laboratorio 3: Estructuras de control basicas y algo de logica

Anuncio
Laboratorio 3: Estructuras de control basicas
y algo de logica
1
Tabla Ascii
La tabla Ascii, nos muestra la relacion existente entre un caracter dado
y un numero entero, puede que cuando le pidamos a scanf leer un caracter,
si escribimos el caracter efectivamente sera leido, pero internamente todo
se representa por numeros, y eso nos muestra la tabla ascii, por ejemplo, el
caracter ‘G’ es representado por el numero 71 y el caracter ‘7’ es representado
por el numero 55. hay que tener cuidado con la forma en la que escribimos
las distintas constantes en C, ‘7’ no es un numero, es un caracter (ya que
esta encerrado en comillas simples).
printf("%d", ’8’);
Si ejecutamos esa linea de codigo, veremos que imprime 56, que es la representacion decimal del caracter ‘8’
1
Ejercicio: Realizar un programa que escanee dos numeros desde
consola e imprima la suma de ambos
2
Estructuras de Control: If, Else, Else if
Dentro de los lenguajes de programacion, contamos con diferentes estructuras
que nos permiten modificar el flujo de ejecucion del mismo. hasta ahora se
han realizado programas que realizan acciones, cada ves que ejecutamos un
programa, este realiza la misma accion, leer un numero, sumar, escribir.
En este caso, la palabra “if” se traduce al espaol como un “Si”, de forma
que podriamos pensar que la estructura de control “if” evalua una condicion,
la sintaxis basica del “if” es:
if( condicion ){
Set de instrucciones
}
de esta forma, como vimos en laboratorios anteriores, cualquier valor
distinto de 0 se interpreta como “Verdadero” y el valor 0 se interpreta como
“Falso”.
if( 1 ){
printf("hola mundo!");
}
Si incorporaramos este ultimo pedazo de codigo dentro de algun programa,
veriamos que siempre que ejecutemos el programa, se imprimira “hola mundo!”,
esta claro pensar esto, la condicion del if siempre es verdadera, por lo que
siempre se entrara a ejecutar el “Set de instrucciones”, en cambio:
if( 0 ){
printf("hola mundo!");
}
nunca ejecutara la linea de codigo que imprime “hola mundo!” ya que la
condicion evaluada (0) es falsa.
La idea, es obviamente realizar operaciones un poco mas complejas, por
ejemplo:
2
if( x < 5 ){
printf("el valor de x es menor a 5\n");
}
podemos haber leido x de la entrada estandar, y luego verificar si x es menor
a 5, “x<5” sera verdadero solo si el valor de x es menor a 5, en caso de que x
sea 5 o un numero mayor, la expresion sera falsa, y no se entrara a ejecutar
el set de instrucciones.
Ejercicio: Realizar un programa, que dado un numero, nos diga
si reprobamos el ramo o no.
La estructura de control if, tiene distintas formas, primero vimos aquella
donde ocupamos solamente un if, pero tambien tenemos la palabra reservada
“else”, para poder lograr cosas un poco mas complejas.
if( x < 5 ){
printf("el valor de x es menor a 5\n");
}
else {
printf("el valor de x es mayor o igual a 5\n");
}
en este caso, cuando nuestro programa evalue la expresion “x <5”, si la
expresion es verdadera, ejecutara el set de instrucciones dentro del if, en caso
de que esta expresion sea falsa, ejecutara el set de instrucciones dentro del
else.
Ejercicio: Realizar un programa, que dado un numero, nos diga
si reprobamos el ramo o no, utilizando solo un “if” y un “else”
A demas del if y el else, contamos con una tercera forma, la cual nos
permite evaluar distintas condiciones
if( x == 1 ){
printf("x vale 1\n");
}
else if( x == 2){
printf("x vale 2\n");
3
}
else if( x == 3 ){
printf("x vale 3 \n");
}
else{
printf("x tiene otro valor");
}
El programa anterior se ejecuta de la siguiente forma, llega al primer if, y
evalua “x==1”, en caso de ser verdadero ejecuta el primer set de instrucciones
y se salta el resto del bloque (o sea, el resto de los if, else, else if ), en caso de
que sea falso, llegara al else if, y evaluara “x==2”, en caso de ser verdadero
ejecuta el set de instrucciones, en caso de ser falso, evaluaremos la condicion
del segundo else if, “x == 3”, de la misma forma, si es verdadero se ejecuta
el set de instrucciones, y en caso contrario, encontrara el else, el cual sera
ejecutado solo si no se cumplio ninguna de las condiciones anteriores.
Ejercicio: Realizar un programa, que lea un numero, un caracter
y otro numero (en ese orden) de la entrada estandar. Si el caracter
es ’+’, que imprima la suma de ambos numeros, si el caracter es ’’ que imprima la resta de los dos numeros. Extiender el programa
para la multiplicacion y division.
3
Operaciones Logicas
Hay ciertos operadores logicos que nos permiten realizar expresiones mas
complejas para evaluar condiciones, entre ellos tenemos el AND, el OR, la
igualdad, la desigualdad, la negacion.
• AND &&
• OR ——
• igualdad ==
• desigualdad !=
• negacion !
4
if( x <= 7 )
{
if( x >= 1 )
printf("entre 1 y 7");
}
en el codigo anterior, verificamos que una variable sea menor o igual a 7, y
luego verificamos que esta sea mayor o igual a 1, aunque podemos hacer las
cosas mas faciles y “bonitas”
if( x <= 7 && x >= 1 ){
printf("entre 1 y 7 );
}
ambos codigos entregaran el mismo resultado, algo que se debe tomar muy en
cuenta con el operador logico &&, sabemos que si alguno de los dos lados es
negativo, automaticamente la expresion entera sera negativo, para optimizar
el proceso de evaluar, si la primera expresion es negativa, ya no nos importa
que valor de verdad tenga la segunda expresion, por lo que la segunda no se
evalua.
if( x > 7 || x < 1 ){
printf("no esta entre 1 y 7 );
}
si negamos la expresion anterior usando la ley de morgan, obtendremos esta
nueva expresion, al igual que ocurria con el AND, si una de las expresiones
del OR es verdadera, de forma automatica sabemos que el valor final sera
verdadero, por lo que si tenemos algo como
if( 1 || x < 1 )
{
printf("nunca evaluaremos x");
}
nunca evaluaremos si x realmente es menor a 1, mas adelante se retomaran
este tipo de expresiones y un poco mas de su utilidad dentro del codigo que
escribimos.
5
De la misma forma, contamos con los operadores de igualdad y desigualdad que hemose estado ocupando hace un rato ya, sabemos que cada expresion puede de cierta forma tener un valor de verdad, si la expresion se evalua
como cualquier numero distinto de 0, sabemos que es verdadera, si es 0, es
falsa.
if( ! x )
{
printf("no x");
}
el codigo anterior, se ejecutara solamente cuando x sea 0, si x es 0, el operador
de negacion negara la exprecion y se evaluara como 1.
if( ! (x < 7) ){
printf("x no es menor a 7");
}
y este ultimo codigo, imprimira algo siempre y cuando x no sea menor a 7,
o sea, cuando x sea mayor o igual a 7.
la logica de estos programas funcionan igual que la logica matematica,
siguiendo las reglas de las tablas de verdad para los distintos operadores
logicos.
6
Descargar