1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez...

54
1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez [email protected]

Transcript of 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez...

Page 1: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

1

Computación y Programación Fundamentos de Informática

Josefina Sierra Santibáñez

[email protected]

Page 2: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

2

Objetivos

Introducción a la programación

– Entender y construir algoritmos (lenguaje semi-formal). – Conocer conceptos importantes de programación: tipos de datos,

expresiones, instrucciones, estructuras de datos y funciones.

– Algoritmos de búsqueda, recorrido, ordenación y cálculos matemáticos.

– Fundamentos de la programación en C.

Page 3: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

3

Funcionamiento

• Clases de teoría: – Presentar conceptos y metodología de programación. Explicar su

representación en lenguaje algorítmico y en C.

– Ilustrarlos con ejemplos de algoritmos en lenguaje algorítmico y con ejercicios.

• Clases de problemas y laboratorio: – Presentar ejemplos de programas C en los que se utilicen los

conceptos de programación vistos en clase de teoría.

– Realizar ejercicios de programación en C de algoritmos vistos en clase de teoría o propuestos como ejercicios.

Page 4: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

4

Programa

1. Introducción2. Conceptos básicos

1. Tipos de datos básicos, variables, constantes y expresiones2. Asignación y composición secuencial, condicional e iterativa

3. Acciones y funciones1. Declaración, definición, llamada y paso de parámetros2. Ejercicios de acciones y funciones

4. Secuencias1. Concepto y operaciones asociadas (búsqueda y recorrido)2. Ejercicios de secuencias

5. Matrices o tablas1. Vectores, matrices y operaciones asociadas2. Ejercicios de vectores y matrices

6. Ordenación1. Algoritmos de ordenación2. Ejercicios de ordenación

Page 5: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

5

Programa

7. Estructuras o tuplas1. Definición y operaciones asociadas2. Tablas de estructuras3. Ejercicios de estructuras

8. Algoritmos numéricos9. Diseño descendente

Page 6: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

6

Evaluación• Calificación global

– G = 0.45*Teoría + 0.45*Práctica + 0.1*Proyecto

• Se realizarán dos exámenes: un parcial y un final– Teoría = 0.3*Parcial Teoría + 0.7*Final Teoría

– Práctica = 0.3*Parcial Práctica + 0.7*Final Práctica

• El proyecto de programación es un trabajo individual que se evaluará generalmente mediante preguntas del examen final (y excepcionalmente mediante una entrevista).

Page 7: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

7

Consultas

• Martes y Miércoles de 11:00 a 12:00 y de 14:00 a 16:00 en el despacho 322 de la ETSEIT.

• Para realizar consultas en otro horario podéis enviar un mensaje de correo electrónico a: [email protected]

Page 8: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

8

Material de Apoyo

Página de Internet de la asignatura: http://www.lsi.upc.es/~fietseit/fi.html

– Bibliografía básica– Entorno de programación Dev C++– Apuntes de la asignatura– Normas de evaluación– Funcionamiento de la asignatura– Programa detallado

Page 9: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

9

Preguntas

Page 10: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

10

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.

Aspectos básicos a tener presentes a la hora de redactar un algoritmo:

• Explícito: Formal y sin ambigüedades.• Genérico: Problema cuyos datos son generales.• Bien definido: Problema perfectamente caracterizado.• Correcto: Que funcione en todos los casos.• Número finito de pasos: Debe terminar.

Page 11: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

11

Estructura de un algoritmo:

algoritmo nombre

constantes (valores fijos)

datos tipos (nuevos dominios de datos)

variables (datos)

cuerpo (instrucciones)

falgoritmo

acciones y funciones auxiliares

Page 12: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

12

Datos Tienen un nombre (identificador)

Los datos se deben declarar con todos estos atributos (excepto los literales). Un dato contiene siempre un valor de su tipo.

Son de un tipo

• Simple:entero, real, booleano, carácter[dominio + operaciones]

• Compuesto:tupla, tabla[constructores + funciones de

acceso]

Pueden ser

• Constantes: valor fijo [Literales: constantes predefinidas]

• Variables

Page 13: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

13

InstruccionesControlar el orden de ejecución

Modificar el contenido de los datos[asignación]

Agrupar sucesiones de instrucciones en bloques independientes [acciones y funciones]

• Secuenciación• Condicional• Iteración

Comunicarse con el exterior[lectura y escritura]

Page 14: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

14

1.2.- Variables

Definición: una variable es un dato cuyo valor puede cambiar durante la ejecución de un algoritmo.

Para asignar un valor a una variable se utiliza el operador de asignación “:=”.Ejemplos: x := 3.0; y := x + 2.1; y := 3*x + 2; ... [x, y son variables]

Tipos básicos de datos son:

real 3.0, -2.1, ... entero -3, +10, …carácter ’a’, ’b’, ’F’, ’4’, ’.’, ...booleano VERDADERO, FALSO

Definición de una variable en un algoritmo:algoritmo nombre_algoritmo var n: entero; x, y: real; c: carácter; b: booleano fvar n:=3; x:=2.3; c:=’w’; b:=VERDADERO; y:=-5.0;

...falgoritmo

Page 15: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

15

Lectura de datos

algoritmo leer_variables var n: entero; x: real; c: carácter; b: booleano fvarLeerEntero(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

Page 16: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

16

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.

Se pueden transformar los valores de las variables de un tipo a otro.

algoritmovar 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

Análogamente se pueden realizar los siguientes cambios de tipos

carácter entero real

Page 17: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

17

1.3.- Constantes

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

Page 18: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

18

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 div y = q y * q + r = xx mod y = r 0 r < |y|

x yr q

Page 19: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

19

• 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

• Tipo de datos carácter. Valores: los caracteres,{’?’, ’^’, ’#’, ’&’, ..., ’A’, ’B’, …, ’Z’, …,

’a’, ’b’, …, ’z’, …, ’0’, ’1’, ’2’, …, ’9’, …, ’+’, ’-’, ... }Operadores (binarios): =, : carácter = carácter booleano

. . .• Más adelante veremos algunos tipos compuestos: tablas y tuplas.

Page 20: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

20

1.5.- Expresiones

Definición:Una variable es una expresión.Una constante es una expresión. Si E es una expresión, (E) es una expresión.Si E1, E2, ..., En son expresiones y f una función, f(E1, E2, ..., En) es una expresión

Los tipos de las expresiones tienen que ser coherentes.

Las prioridades de los operadores se utilizan para evaluar correctamente lasexpresiones: se aplica la regla asociativa de izquierda a derecha y, en caso de duda, se ponen paréntesis.

Operadores utilizados más frecuentemente ordenados de mayor a menor prioridad:

., [ ] (acceso a tuplas y tablas)-, no (cambio de signo y negación lógica) [unarios]*, /, div, mod (operadores multiplicativos)+, - (operadores aditivos)<, >, (operadores relacionales)y, o (y, o lógicos)

Page 21: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

21

• Ejemplos Sean i=3, j=16, x=3.5, y=2 y b=FALSO, entonces

(x+y)*y = (3.5+2.0)*2.0 = (5.5)*2.0 = 11.0

( j div i ) 5 y b = ( 16 div 3 ) 5 y FALSO= ( 5 ) 5 y FALSO= VERDADERO y FALSO= FALSO

Hay que tener en cuenta los errores que se pueden producir en tiempode ejecución:

• Dividir por 0: cuando utilicemos los operadores div, mod, y /. • Problemas de precisión con los reales

Page 22: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

22

• Ejemplos. Sean i, j y k variables o constantes enteras, x, y y z variables oconstantes reales, a, b y c variables o constantes booleanas.

34.0 es una expresión realx es una expresión realx+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 booleana28 es una expresión enterai es una expresión enterai 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 booleanano((x+y) * x > 34 y (i mod j) = k) es una expresión booleanaRealAEntero(x) es una expresión entera

RealAEntero(LeerReal(x))+Pi es una expresión realMaxEnt+MaxEnt es una expresión entera (error de compilación)

Page 23: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

23

1.6.- Instrucciones

Lectura (ya lo hemos visto) y Escritura

• Lectura: establece el valor de una variable a través de un dispositivo de entrada. • Escritura: permite comunicar el valor de una expresión a través de un dispositivo de salida.

algoritmo ejemplovar n: entero; x: real; c: carácter; fvarLeerEntero(n); EscribirEntero(n);LeerReal(x); EscribirReal(x);LeerCarácter(c); EscribirCarácter(c)

falgoritmo

La notación anterior se puede simplificar utilizando las instrucciones leer(variable), escribir(variable), así como instrucciones de lectura y escritura múltiple. También se pueden escribir mensajes de texto, siempre que éstos se escriban entre comillas.

algoritmo ejemplovar n: entero; x: real; c: carácter; fvarescribir(“Introduzca un entero, un real y un carácter:”);leer(n, x, c); escribir(n, x, c)

falgoritmo

Page 24: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

24

Asignación

variable := expresión la variable toma el valor de la expresión

Ejemplos. n := 1 (entero); x := 9.8 (real);c := ’e’ (carácter); b := VERDADERO (booleano);

Notas: El tipo de la variable y el de la expresión deben de ser iguales.El valor que tenía la variable antes de la asignación se pierde.Las variables cuando se declaran no tienen ningún valor concreto.Siempre que trabajemos con una variable debemos darle un valor inicial. Este proceso se denomina “inicialición de las variables”.

Secuenciación

Cuando tengamos más de una instrucción, utilizaremos la instrucción de secuenciación. Las distintas instrucciones se separan con el signo “ ; “.

instrucción_1; instrucción_2; ... ; instrucción_k; ... ; instrucción_n

En este caso la instrucción_k no se ejecuta hasta que termina la ejecución de las k-1 instrucciones anteriores.

Page 25: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

25

Instrucción condicional o alternativa (si … entonces … si no … fsi)

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

Cuando hay varias condiciones se puede utilizar el siguiente esquema:

si expresión_booleana_1 instrucciones_1 expresión_booleana_2 instrucciones_2 ... expresión_booleana_n instrucciones_nfsi

Page 26: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

26

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

Ejemplo. Calcular el máximo de dos números teniendo en cuenta si son iguales. algoritmo máximo= var x, y: real fvar LeerReal(x); LeerReal(y) si (x > y) EscribirReal(x) (x < y) EscribirReal(y) (x = y) EscribirCadenadeCarateres(“Son iguales.”) fsi falgoritmo

Page 27: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

27

Ejercicio 3. Determinar las raíces de una ecuación de segundo grado

• Las raíces de la ecuación de segundo grado ax2+bx+c=0 se obtienen mediante la fórmula x=(-b (b2-4ac)1/2) 2a

• Esta expresión para x se obtiene

1. sustituyendo x por t-(b/2a) en la ecuación ax2+bx+c=0

2. despejando t

3. calculando el valor de x a partir del valor de t.

Page 28: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

28

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|) fsifalgoritmo

Page 29: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

29

Instrucción iterativa (mientras … hacer … fmientras)

mientras expresión_booleana hacerinstrucciones

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.

Page 30: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

31

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: 1. Se calcula el resto r de dividir el número mayor de los dos x por el menor y. 2. Si r es 0, entonces y es el máximo común divisor. 3. Si r no es 0, entonces se asigna a x el antiguo valor de y, se asigna a y el valor de r, y se repite todo el proceso.

Ejemplo: x=49, y=42, r=7 x=42, y=7, r=0 7 es el m.c.d. de 49 y 42.

algoritmo Euclides var x, y, r: entero; fvar LeerEntero(x); LeerEntero(y);si y>0 y x>0 entonces r:= x mod y; mientras (r ≠ 0) hacer x:=y ; y:=r; r:= x mod y; fmientras Escribir(“El maximo común divisor es “); Escribir(y);fsi

falgoritmo

Page 31: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

32

Instrucción iterativa (para … hasta … hacer ... fpara)

para variable := valor_inicial hasta valor_final hacer instrucciones

fpara

En la definición anterior el valor asignado inicialmente a la variable se incrementa en una unidad en cada iteración. También se puede incluir un valor con la opción paso que permite especificar la cantidad en la que se quiere incrementar el valor de la variable en cada interacción.

para variable := valor_inicial hasta valor_final paso incremento hacer instrucciones

fpara

Ejemplo. Escribir los números pares del 1 al 100.algoritmo pares var n: entero fvar (* Declaración de variables *)

para n:= 2 hasta 100 paso 2 hacer (* Instrucción iterativa *)EscribirEntero(n); (* Instrucción de escritura *)

fparafalgoritmo

Page 32: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

algoritmo Suma lista N cons N: entero = 10; fcons var i: entero; número, suma: real fvar suma := 0.0; para i:=1 hasta N hacer Escribir(“Introduzca un número: “); Leer(número); suma := suma+número; fpara Escribir(“La suma de los números introducidos es “); Escribir(suma);falgoritmo

Page 33: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

algoritmo Producto lista N cons N: entero = 5; fcons var i: entero; número, producto: real fvar producto := 1.0; para i:=1 hasta N hacer Escribir(“Introduzca un número: “); Leer(número); producto := producto*número; fpara Escribir(“El producto de los números introducidos es “); Escribir(producto);falgoritmo

Page 34: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

Ejercicio 1. Calcular el factorial de un número introducido por el usuario.

Page 35: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

algoritmo factorial var n, i, resultado: entero; fvar Escribir(“Introduzca un número positivo: “); LeerEntero(n); resultado := 1; si (n > 1) entonces para i := 2 hasta n hacer resultado := resultado*i; fpara fsi

Escribir(“El factorial de “); Escribir(n); Escribir(“ es “); Escribir(resultado); falgoritmo

Page 36: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

Ejercicio 2. Calcula la suma de los dígitos de un número.

Page 37: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

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

Page 38: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

Ejercicio 3. Determinar si un número es primo.

Un número n es primo si es mayor que 1 y sólo es divisible por sí mismo y la unidad.

Page 39: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

algoritmo primo var n, i: entero; primo: booleano fvar Escribir(“Introduzca un número entero positivo: “); LeerEntero(n);

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.”) fsifalgoritmo

Page 40: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

Ejercicio 4. Determinar si un número es primo.

Un número n es primo si es mayor que 1 y sólo es divisible por sí mismo y la unidad. Para determinarlo comprobamos que n no es par y que no es divisible por los impares comprendidos entre 3 y n(1/2).

Page 41: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

algoritmo primo var n, i: entero; primo: booleano fvar Escribir(“Introduzca un número entero: “); LeerEntero(n);

si (n = 1) o ((n mod 2) = 0 y n ≠ 2) entonces primo := F si no primo :=V; i := 3; mientras primo y i2 ≤ n hacer si (n mod i) = 0 entonces primo := F; si no i:= i+2; fsi fmientras fsi si primo entonces Escribir(n); Escribir(“ es primo.”) si no Escribir(n); Escribir(“ no es primo.”) fsifalgoritmo

Page 42: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

Ejercicio 5. Escribir los n primeros números de la sucesión de Fibonacci.

La sucesión de Fibonacci viene definida por las siguientes reglas: • fib[0]=0 • fib[1]=1

• fib[i]=fib[i-1]+fib[i-2], para i>1.

Page 43: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

algoritmo Fibonacci var n, último, penúltimo, aux, i: entero fvar Escribir(“Introduzca un número: “); LeerEntero(n); 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

Page 44: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

45

Estructura de un programa C

inclusiones

constantes

tipos

prototipos

int main (void) {

variables

instrucciones

}

acciones y funciones auxiliares

algoritmo nombre

constantes

tipos

variables

instrucciones

falgoritmo

acciones y funciones auxiliares

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.

archivo nombre.cpp

Page 45: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

46

Constantes

Cada constante se define en una línea diferente de la forma

nombre: tipo = valor --> #define nombre valor

Ejemplo:

const

pi: real = 3.1415926 #define pi 3.1415926

Terminador: carácter = ‘\0' #define Terminador ‘\0'

fconst

Page 46: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

47

Declaración de variables

Las declaraciones de las variables de un algoritmo se traducen indicando en primer lugar el tipo traducido y en segundo lugar el nombre de la variable.

var nombre: tipo fvar tipo-traducido nombre;

Los tipos básicos se traducen del modo siguiente:

entero --> int real --> double o float

carácter --> char booleano --> bool [En C++, false, true]

Ejemplo:

var

suma: entero; int suma;

x, y: real double x, y;

letra: carácter char letra;

primo: booleano bool primo;

fvar

Page 47: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

48

Tabla resumen de los operadores del lenguaje C

• Aritméticos: + (suma), - (cambio de signo), - (resta), * (producto), / (división), % (módulo)

• Lógicos: && (conjunción, “y”), || (disyunción, “o”), ! (negación, “no”)

• Relacionales: == (igualdad), != (desigualdad), <, >, <=, >= (comparaciones)

• Cambio de tipo: (tipo), donde (tipo) puede ser int, double, float o char

(double) n convierte el valor de n a real de doble precisión

• Prioridad de evaluación: operadores ordenados de mayor a menor.

– Operadores unarios: - (cambio de signo), !, (tipo)

– Operadores multiplicativos: *, /, %

– Operadores aditivos: +, - (resta)

– Operadores de comparación: <, <=, >, >=

– Operadores de igualdad: ==, !=

– Conjunción: &&

– Disyunción: ||

• A igual prioridad la regla asociativa se aplica de izquierda a derecha.

Page 48: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

49

Instrucciones de entrada, salida y asignación

La instrucción de entrada habitual se traduce del modo siguiente:

Leer(var) cin >> var;

puede tener varios argumentos cin >> var_1 >> var_2 >> ... >> var_n;

La instrucción de salida habitual se traduce del modo siguiente:

Escribir(expr) cout << expr;

puede tener varios argumentos cout << expr_1 << ... << expr_n;

cout << endl; produce un salto de línea

La instrucción de asignación se traduce del modo siguiente:

var := expr var = expr;

Page 49: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

50

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

}

Page 50: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

51

Instrucción condicional ELSE IF

si expresión_booleana_1 instrucciones_1 expresión_booleana_2 instrucciones_2 ... expresión_booleana_n instrucciones_nfsi

if (expresión_booleana_1) {

instrucciones_1

} else if (expresión_booleana_2) {

instrucciones_2

....

} else {

instrucciones_n

}

Page 51: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

52

Instrucción Iterativa WHILE

mientras expr hacer

instrucciones

fmientras

En C la expresión se escribe entre paréntesis y las instrucciones entre llaves.

while (expr) {

instrucciones

}

Page 52: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

53

Instrucción iterativa FOR

En notación algorítmica se escribe

para var := valor_inicial hasta valor_final paso incremento hacer instruccionesfpara

En C se escribe

for (var = valor_inicial ; var <= valor_final ; var = var + incremento) { instrucciones

}

Page 53: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

54

En general la instrucción iterativa for

for (expr1; expr2 ; expr3) { instrucciones}

equivale a

expr1; while (expr2) {

instrucciones; expr3;

}

Page 54: 1 Computación y Programación Fundamentos de Informática Josefina Sierra Santibáñez jsierra@lsi.upc.edu.

55

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).