Pues entre que ayer me fui antes y hoy llego super tarde (sobre menos cuarto) pues voy apañada. Y no, no se me han pegado las sabanas. Ojala fuera eso... he perdido casi una hora de programación :O :_(
Exactamente me quede en representación en completo a 2 y me voy a añadir a la clase tras operación de asignación. Me duele la tripa de tanto stress :/
Continuación del tema 2 y 3: Resolución de problemas
Evaluación de expresiones
En muchas partes de un algoritmo o programa pueden aparecer expresiones que es necesario evaluar.
Su evaluación puede dar lugar a un dato que puede ser de cualquier tipo (aunque participen datos que son de otros diferentes).
Con ese dato podemos hacer múltiples cosas, asignaárselo a una variable, usarlo como parámetro de una función o procedimiento, o servir para tomar decisiones dentro de un programa, etc.
Los paréntesis pueden ser usados para alterar la prioridad de los operadores en una expresión ( en caso de una misma prioridad, la expresión se evalúa de izquierda a derecha):
Mayor prioridad: NOT // * / (divisiones entre reales) DIV ( divisiones entre enteros) MOD ( resto de la división entera) AND // + - OR // < <= 0 > => <>
Menor prioridad: := (asigna valor a una variable)
Composición secuencial de acciones
Para diseñar las acciones que debe ejecutar un algoritmo, contamos hasta el momento con un repertorio de acciones.
Necesitamos mecanismos que permitan establecer el orden en el que deben ser ejecutadas las acciones de un algoritmo.
El primer mecanismo de composición de acciones que vamos a presentar es la composición secuencial.
Una composición secuencial de acciones la expresaremos escribiendo éstas en el orden en que sean ejecutadas por el ordenador.
Sintaxis de un algoritmo
Primero pongo el nombre de dicho algoritmo para a continuación comentarios para aclararme yo mismo u otro compañero y que el compilador va a ignorar ( van entre {})
A continuación "declaración de tipos", después la "declaración de constantes", para terminar la "declaración de variables"
el principio, cuando se ejecutan las ejecuciones, "instrucción 1", "instrucción 2" ... ""instrucción n" hasta el final de ejecuciones.
Ejemplo de algoritmo
algoritmo multiplicar
{lee del teclado dos datos enteros y escribe por pantalla su producto}
variables
multiplicando, multiplicador: entero;
principio
leerEntero(teclado, multiplicando);
leerEntero(teclado, multiplicador);
escribirEntero(pantalla, multiplicando*multiplicador);
fin
Comentarios sobre el algoritmo
El algoritmo anterior consta de una secuencia de tres acciones.
Las dos primeras asignan valores a las variables multiplicando y multiplicador, leyendo de teclado. La tercera escribe por pantalla el producto de los valores leídos.
Las palabras principio y fin se utilizan para delimitar la sección de descripción de acciones en el algoritmo.
Se utiliza el carácter ";" como finalizador de las acciones elementales programadas en el algoritmo.
¿Qué pasa en memoria?
algoritmo tonto1
variables
a, b: entero;
principio
a:=75-8;
b:=a-9;
fin
a 67 b 58
¿Y ahora?
algoritmo tonto2
variables
a, b: entero;
principio
b:=a+3;
fin
dado que no he incializado a no lo se a ¿? b ¿?
Composición condicional de acciones
En el diseño de un algoritmo en ocasiones es necesario plantear la resolución de un problema considerando casos particulares y resolviendo cada uno de ellos mediante la correspondiente acción.
El mecanismo de la composición condicional nos va a permitir implementar dicha estrategia de resolución de problemas.
Su sintaxis es la siguiente:
si <expresiónBooleana>
entonces <acción1>
si no <acción2>
fsi
Semántica de la composición condicional
si<expresiónBooleana>
entonces <acción1>
si no <acción2>
fsi
Se evalúa la expresión booleana obteniendo como resultado un valor verdad o falso.
Si el valor es verdad, se ejecuta la acción1.
Si el valor es falso, se ejecuta la acción2
La clausula "si no" se puede omitir cuando su acción es nula.
Ejemplo
algoritmo informeSobreParidad
{Este algoritmo lee un valor entero del teclado e informa por pantalla de si el númerp es par o impar}
variables
numero:entero;
principio
leerEntero(teclado, numero);
si numero MOD 2 = 0
entonces escribirCadena(pantalla, "es par");
si no escribirCadena(pantalla, "Es impar");
fsi
fin
Composición iterativa de acciones
Esta composición permite describir métodos de resolución de problemas aplicando el método de inducción:
Resolución del problema en un caso trivial; {Solución de P0}
i:=0; {"i" representa el indice del problema resuleto}
mientras que "no esté resuleto el problema P" hacer
i:=i+1;
"Resolver el problema P, a partir de la solución del problema Pi+1"
fmq
Puntos clave del método
Identificar un caso trivial del problema y dar su solución.
Encontrar la ley de recurrencia que permita resolver el problema Pi Prtir de la solución del problema Pi-1.
Expresar la condición que indique la resolución del problema objetivo (P).
Sintaxis y semántica de la composición iterativa
mientras que <expresiónBooleana> hacer
<acción>
fmq
Evaluar la expresión booleana obteniendo como resultado un valor verdad o falso.
Si el valor anterior es verdad, ejecutar la acción y volver al punto anterior. En caso contrario dar por concluida la ejecución de la acción iterativa.
Ejemplo
algoritmo sumaSecuenciaEnteros
{lee una secuencia de datos enteros que finaliza con un CErO y escribe por pantalla la suma de los datos leídos}
variables
numero:entero; ´{último número leído}
sumaAcumulada:entero; {acumula la suma de los datos leídos}
principio
escribirCadena(pantalla,Escriba secuencia de datos enteros acabada con un cero (0):");
sumaAcumulada:=0; {Solución inicial (trivial) al problema}
leerntero(teclado, numero);
mientras que numero <>0 hacer
sumaAcumulada:=sumaAcumulada+numero; {Ley de recurrencia}
leerEntero8teclado, nuemro);
fmq
escribirCadena(pantalla, "Los datos leidos suman: ");
ecribirEntero(pantalla, sumaAcumulada);
acabarLinea (pantalla);
fin
¿Cuántas veces se ejecutan los bucles?
Caso1
variables
termino: booleano;
cuenta:entero;
principio
termino:=falso;
mientras que NOT termino hacer
n:=n+1;
termino:=verdad;
fmq
fin
Se ejecuta 1 vez
Caso2
termino:=falso;
mientras que NOT termino hacer
n:=n+1;
termino:=falso;
fmq
Se ejecuta infinitamente.
Caso3
cuenta:=0;
mientras que cuenta<6 hacer
n:=n+1;
cuenta=cuenta+2;
fmq
Se ejecuta 3 veces
Caso4
cuenta:=10;
mientras que cuenta>0 hacer
n:=n+1;
cuenta:=cuenta-3;
fmq
Se ejecuta 4 veces
TEMA 5
Codificación de programas en lenguaje C
Advertencias
El lenguaje de `programación C es "case sensitive", es decir "sensible a mayúsculas", lo cual significa que el hecho de poner una sola letra en minúscula o mayúsculas hace cambiar el sentido de lo escrito.
El punto y coma ";" se emplea para terminar todas las instrucciones. No ponerlo supondrá un error de programación.
Datos: tipos y tamaños
no estructurados:
- void: no hay tipo, tipo vació.
- escalares
* enumerados
* punteros
* aritméticos
_ char (8 bits)
_ enteros
> int (tamaño por defecto de la máquina, short o long)
> short int (puede ser 16 bits)
> long int (pueden ser 32 bits)
_ reales
> float (normalmente 4 bytes)
> double (normalmente 8 bytes)
> long double (normalmente 16 bytes)
Estructurados
- array
- struct
- union
- file
* puede ser porque depende a veces del compilador, normalmente por lo mismo.
** Aún no hemos hablados de reales, ni demás, pero retomaremos el tema 4. Este adelanto es para empezar a hacer alguna práctica.
Definición de variables
long int v;
long int v, i, j;
long int v, i, j=5; /* la variable j se inicializa con el valor 5*/
float v=0.5, w=.5, x=0.0, Y=0:
char c='a'; /*valdrá el valor ASCII de `a`y será tratado como entero */
char c=47;
char c='\47';
char a='\t', b='n', c='\v'; /*Respectivamente tabulador, fin de línea y tabulador vertical */
unsigned char c; /* INdica que el valor de será interpretado como un número natural */
*importante comillas simples
Conversión de tipos
Implícita: si mezclamos tipos el compilador suele hacer conversiones implícitas. Según lo que tenga que hacer, a veces el compilador produce un aviso.
Ejemplo: float v; v=1/2; /* 1 y 2 son números enteros. Sr hace la división entera, resultando 0, se convierte a real para poderlo almacenar en v: 0,0 ¿Queríamos hacer esto?*/
Explícita: Si se pone entre paréntesis un tipo delante de una expresión de otro tipo forzamos la conversión a ese tipo ( si es posible, a veces es perdiendo información).
Ejemplo: float v; v=(float 1/2; /* ojo: Sólo hemos convertido explícitamente el 1 a float, el 2 se convierte implícitamente para hacer posible la división. El resultado es 0,5. */
recreo por fin!! Me siento un poco maeada :/
0 comentarios:
Publicar un comentario