Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Fundamentos de Informática
Victor.Barrientos.rodriguez@gmail.com
Tlf 942818949
2
Funcionamiento
• Clases de teoría:
– Presentar conceptos y metodología de programación. Explicar su
representación en lenguaje algorítmico.
– Ilustrarlos con ejemplos de algoritmos en lenguaje algorítmico y
con ejercicios.
4
Programa
7. Estructuras o tuplas
1. Definición y operaciones asociadas
2. Tablas de estructuras
3. Ejercicios de estructuras
8. Algoritmos numéricos
9. Diseño descendente
5
1.1.- Algoritmo
Concepto de algoritmo:
Sucesión explícita de reglas para resolver correctamente un problema
genérico bien definido en un número finito de pasos.
6
Estructura de un algoritmo:
algoritmo nombre
constantes (valores fijos)
datos tipos (nuevos dominios de datos)
variables (datos)
cuerpo (instrucciones)
falgoritmo
acciones y funciones auxiliares
7
• Simple:
Son de un tipo entero, real, booleano, carácter
[dominio + operaciones]
• Compuesto:
tupla, tabla
[constructores + funciones de
acceso]
Datos Tienen un nombre (identificador)
• Variables
Los datos se deben declarar con todos estos atributos (excepto los literales).
Un dato contiene siempre un valor de su tipo.
8
Comunicarse con el exterior
[lectura y escritura]
Instrucciones • Secuenciación
Controlar el orden de
• Condicional
ejecución
• Iteración
9
1.2.- Variables
Definición: una variable es un dato cuyo valor puede cambiar durante la ejecución
de un algoritmo.
algoritmo leer_variables
var n: entero; x: real; c: carácter; b: booleano fvar
LeerEntero(n); LeerReal(x);
LeerCarácter(c); LeerBooleano(b);
...
falgoritmo
Notación alternativa:
algoritmo leer_variables
var n: entero; x: real; c: carácter; b: booleano fvar
n:=LeerEntero( ); x:=LeerReal( );
c:=LeerCarácter( ); b:=LeerBooleano( );
...
falgoritmo 11
#include <stdio.h>
int main()
{
int c, n, fact = 1;
return 0;
}
12
package proyecto14_unidad1;
import java.util.Scanner;
}
13
Lectura de datos
algoritmo leer_variables
var n: entero; x: real; c: carácter; b: booleano fvar
LeerEntero(n); LeerReal(x);
LeerCarácter(c); LeerBooleano(b);
...
falgoritmo
Notación alternativa:
algoritmo leer_variables
var n: entero; x: real; c: carácter; b: booleano fvar
n:=LeerEntero( ); x:=LeerReal( );
c:=LeerCarácter( ); b:=LeerBooleano( );
...
falgoritmo 14
Si n es entera, x es real y realizamos la asignación n:=x, la variable n toma
como valor la parte entera de x.
algoritmo
var x: real; n: entero; c: carácter fvar
...
x := 65.2 [x <- 65.2]
n := DeRealAEntero(x) [n <- 65]
c := DeEnteroACarácter(n) [c <- “carácter correspondien-
te al número 65 en el código
de ASCII, esto es, la
letra mayúscula ‘A’.”]
...
falgoritmo
Definición: una constante es un dato que representa un valor fijo de un tipo deter-
minado que no se puede modificar.
Ejemplo:
algoritmo
const Pi: real = 3.1415926535897932385 fconst
var x, y: real fvar
...
x := Pi*Pi;
y := 3*Pi;
...
falgoritmo
16
1.4.- Tipos y operaciones
Definición: conjunto de valores (dominio) y operaciones aplicables.
Tipos básicos: booleano, entero, real y carácter.
• Tipo de datos booleano: Valores: {V, F}. Operadores: y, o, no, =,
• Tipo de datos entero:
Valores: los enteros, {-MaxEnt, ..., -3, -2, -1, 0, 1, 2, 3, ..., MaxEnt }
Operadores (binarios): +: entero + entero entero
-: entero - entero entero
*: entero * entero entero
(división entera) div: entero div entero entero
(resto) mod: entero mod entero entero
=: entero = entero booleano
entero entero booleano
<: entero < entero booleano
>: entero > entero booleano
entero entero booleano
entero entero booleano
x y x div y = q y * q + r = x
r q x mod y = r 0 r < |y| 17
• Tipo de datos real.
Valores: los reales, {-MaxReal, ... , -MinReal, 0, MinReal ,…, MaxReal}
Operadores (binarios): +: real + real real
-: real - real real
*: real * real real
/: real / real real
=: real = real booleano
real real booleano
<: real < real booleano
>: real > real booleano
real real booleano
real real booleano
20
• Ejemplos. Sean i, j y k variables o constantes enteras, x, y y z variables o
constantes reales, a, b y c variables o constantes booleanas.
34.0 es una expresión real
x es una expresión real
x+y es una expresión real
(x+y) es una expresión real
(x+y)*x es una expresión real
(x+y)*x < 24 es una expresión booleana
28 es una expresión entera
i es una expresión entera
i mod j es una expresión entera
(i mod j) es una expresión entera
(i mod j) = k es una expresión booleana
(x+y) * x > 34 y (i mod j) = k es una expresión booleana
((x+y) * x > 34 y (i mod j) = k) es una expresión booleana
no((x+y) * x > 34 y (i mod j) = k) es una expresión booleana
RealAEntero(x) es una expresión entera
RealAEntero(LeerReal(x))+Pi es una expresión real 21
MaxEnt+MaxEnt es una expresión entera (error de compilación)
1.6.- Instrucciones
Secuenciación
si expresión_booleana entonces
instrucciones_V [instrucciones que se ejecutan si la
expresión booleana es verdadera]
si no
instrucciones_F [instrucciones que se ejecutan si la
expresión booleana es falsa (opcional)]
fsi
24
Ejemplo. Calcular el máximo de dos números dados.
algoritmo máximo
var x, y: real fvar (* Declaración de variables *)
LeerReal(x); (* Instrucción de lectura *)
LeerReal(y) (* Instrucción de lectura *)
si (x y) entonces (* Instrucción alternativa *)
EscribirReal(x) (* Instrucción de escritura *)
si no
EscribirReal(y) (* Instrucción de escritura *)
fsi
falgoritmo
26
algoritmo raíces de ecuación de segundo grado
var a, b, c, x, y, aux: real fvar
Escribir (“Introducir los coeficientes de mayor a menor grado, i.e., a, b y c
tales que la ecuación es ax^2+bx+c=0:”);
LeerReal(a); LeerReal(b); LeerReal(c); aux := b2 - 4ac;
si
a = 0 y b = 0 —> Escribir(“No es una ecuación.”);
a = 0 y b 0 —> Escribir(“Ecuacion de primer grado con raiz:”);
x := -c/b; EscribirReal(x);
aux > 0 —> Escribir(“Tiene dos raices reales distintas:”);
x := (- b + aux 1/2 ) / 2a ; y := (- b - aux 1/2 ) / 2a;
EscribirReal(x) ; EscribirReal(y)
aux = 0 —> Escribir(“Tiene dos raices reales iguales:”);
x := - b / 2a ; y := x; EscribirReal(x)
aux < 0 —> Escribir(“Tiene dos raices complejas:”);
aux := (-aux) 1/2 ;
EscribirReal(-b/2a); EscribirCadenadeCaracteres(“+i”); EscribirReal(|aux/2a|) ;
EscribirCadenadeCaracteres(“\n”);
EscribirReal(-b/2a); EscribirCadenadeCaracteres(“-i”); EscribirReal(|aux/2a|)
fsi
falgoritmo 27
Instrucción iterativa (mientras … hacer … fmientras)
Notas:
• Mientras la expresión_booleana sea cierta, las instrucciones se ejecutan.
• Cuando la expresión_booleana deja de ser cierta entonces la instrucción
iterativa se acaba.
• Si la expresión_booleana es inicialmente falsa la instrucción iterativa no
hace nada.
• Hay que asegurarse de que las instrucciones modifiquen los valores de las
variables que forman parte de la expresión_booleana de manera que la
instrucción iterativa termine en un número finito de pasos.
28
Ejemplo. El algoritmo de Euclides sirve para calcular el máximo común divisor
(m.c.d.) de dos números positivos. Dados dos números enteros positivos:
falgoritmo
Ejercicio 2. Calcula la suma de los dígitos de un número.
algoritmo Suma dígitos de un número
var número, suma, aux: entero fvar
suma := 0;
Escribir(“Introduzca un número entero positivo: “);
Leer(número);
aux := número;
mientras número ≠ 0 hacer
suma := suma + (número mod 10);
número := número div 10;
fmientras
Escribir(“La suma de los dígitos de “);
Escribir(aux);
Escribir(“ es “);
Escribir(suma);
falgoritmo
Ejercicio 3. Determinar si un número es primo.
si (n = 1) entonces primo := F
si no
primo :=V; i := 2;
mientras primo y i ≤ n-1 hacer
si (n mod i) = 0 entonces
primo := F;
si no
i:= i+1;
fsi
fmientras
fsi
si primo entonces
Escribir(n); Escribir(“ es primo.”)
si no
Escribir(n); Escribir(“ no es primo.”)
fsi
falgoritmo
Ejercicio 4. Determinar si un número es primo.
• fib[0]=0
• fib[1]=1
penúltimo:=0; último:=1;
para i:=0 hasta n-1 hacer
EscribirEntero(penúltimo);
aux:=último; último:=último+penúltimo; penúltimo := aux;
fpara
falgoritmo
Estructura de un programa C
archivo nombre.cpp
A lo largo del curso iremos viendo cómo se traduce cada parte del algoritmo.
Hay que respetar el orden de aparición de las distintas partes que aparecen en esta transparencia.
Las inclusiones son referencias a archivos que tienen información auxiliar.
Los prototipos son declaraciones de las acciones y funciones auxiliares (no deben olvidarse).
int, main y void son palabras clave, hay que escribirlas tal y como aparecen en la transparencia.
44
Constantes
Ejemplo:
const
pi: real = 3.1415926 #define pi 3.1415926
Terminador: carácter = ‘\0' #define Terminador ‘\0'
fconst
45
Declaración de variables
48
Instrucción condicional IF
si expr entonces
instrucciones_V
si no
instrucciones_F
fsi
En C la expresión se escribe entre paréntesis y las instrucciones de los casos V
(verdadero) y F (falso) entre llaves.
if (expr) {
instrucciones_V
} else {
instrucciones_F
49
}
Instrucción condicional ELSE IF
si
expresión_booleana_1 instrucciones_1
expresión_booleana_2 instrucciones_2
...
expresión_booleana_n instrucciones_n
fsi
if (expresión_booleana_1) {
instrucciones_1
} else if (expresión_booleana_2) {
instrucciones_2
....
} else {
instrucciones_n
50
}
Instrucción Iterativa WHILE
while (expr) {
instrucciones
}
51
Instrucción iterativa FOR
En C se escribe
52
En general la instrucción iterativa for
equivale a
expr1;
while (expr2) {
instrucciones;
expr3;
53
}
Comentarios
Tanto en los programas como en los algoritmos deben aparecer comentarios ex-
plicativos. En C los comentarios se escriben así (pueden ocupar varias líneas):
/* Esto es un comentario. */
Indentación
Se suelen dejar espacios en blanco al comienzo de la línea para reflejar la es-
tructura lógica de un programa.
También se dejan dos líneas en blanco para separar unidades lógicas diferen-
tes de un programa. Por ejemplo, para separar las inclusiones de las constan-
tes, o las distintas funciones.
Identificadores
Los nombres de las constantes, variables y funciones deben ser autoexpli-
cativos (e.g., Par, SumaTotal o Resultado).
54