Estaba compilando los temas puestos en el blog, y me ha pillado el toro , pero Inazio me cubre :)
Evitando errores: invariante del bucle
El invariante es una condición (relación matemática entre
las variables involucradas) que se tiene que cumplir
- Antes de empezar a ejecutarse el bucle
- Después de cada vez que se ejecuta el bucle
- Una vez que se ha terminado la ejecución del bucle
Si obtengo el invariante del bucle puedo comprobar si se va
a cumplir en todas esas situaciones
Ejemplo:
i:=1;
s:=1;
mientras que i<n hacer
i:=i+1;
s:=s+i;
fmq
El invariante es s=1+...+i;
Antes
del bucle: i=1, s=1
Tras la
primera ejecución: i=2, s=1+2=3
Tras la
segunda ejecución i=3, s=1+2+3=6
tras la
segunda ejecución i=4, s=1+2+3+4=10
al
terminar el mientras que: i=n, s=1+2+...+n
Otro ejemplo:
i:=1;
s:=1;
mientras que i<n hacer
s:=s+i;
i:=i+1;
fmq
El invariante es: s=1+,,,+(i-):
Antes
del bucle i=2, s=1
Tras la
primera ejecución: i=3, s=1+2=3
Tras la
segunda ejecución: i=4, s=1+2+3=6
…
Al
terminar el mientras que i=n+1, s=1+...+n
Tema 5.
Tipos escalares definidos por enumeración
Hasta ahora hemos utilizado tipos primitivos que estaban totalmente definidos, tanto en estructura como en el dominio de valores que podian tomar.
Existe la posibilidad de definirse tipos en C, de manera que podemos establecer cuál es tanto la estructura como el dominio de valores.
Alterar la estructura lo dejamos para más adelante. De momento vamos a ver el caso más sencillo: establecer el dominio de valores. Para ello usamos tipos definidos por enumeración.
Esto en C se hace utilizando la palabra reservada "enum".
Ejemplos:
- enum DIA (lunes, martes, miercoles, jueves, viernes, sabado, domingo);
- enum COLORES_SEMAFORO (rojo, amarillo, verde);
- enum COLORES (blanco, amarillo, naranja, rojo, verde, azul, marron, negro);
Me puedo definir junto con el tipo una variable que es de ese tipo (en el ejemplo, la variable estado);
- enum COLORES_SEMAFORO (rojo, ambar, verde) estado;
C internmente lo que hace es asignarte un valor entero a cada uno de esos valores por orden y giuarda ese valor.
Lo normal, ya que me he definido el tipo, es usar los valores que yo he puesto, pero podría usar su correspondencia entera, ya que se asocia un 0 con el primer elemento, un 1 con el segundo y así sucesivamente hasta el último.
Se puede alterar la asociación de números, pero siempre manteniendo el orden para evitar problemas. Incluso se le puede asociar un mismo valor entero a dos valores de tipo:
- enum DAY ( saturday, sunday=0, monday, tusday, wednesdy, thursday, finday) workday;
- En este ejemplo, Saturday tiene el valor porque se asocia implicamente. Sunday tiene el mismo valor 0 porque se asocia explicitamente, y el resto de los días, consecutivamente, los valores 1-5.
Tipos definidos por enumeración: Ejemplo
#include <stdio.h>
int main()
{
enum Days(sunday, mondey, tuesday, wednesday, thusday, friday, saturday)Theday;
int j=0;
printf("Please enter the day of the week ( 0 to 6)\n");
scanf("%d", &j);
The Day=(enum Days) j; /* según compiladores se puede poner tambien Days (j) o deirectamente j*/
if/(TheDay==Sunday || TheDay==Saturday)
printf("Hurray it is the weekend\n");
else
printf("Curses still al work\n");
return 0;
}
0 comentarios:
Publicar un comentario