Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


CONSTRUCCIONES BÁSICAS DE LA PROGRAMACIÓN ESTRUCTURADA, Apuntes de Ingeniería Infórmatica

Asignatura: Introducción a la Programación, Profesor: , Carrera: Ingeniería Informática, Universidad: UCM

Tipo: Apuntes

Antes del 2010

Subido el 20/08/2008

la_patata
la_patata 🇪🇸

4.2

(72)

30 documentos

1 / 12

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
CONSTRUCCIONES BÁSICAS DE LA PROGRAMACIÓN ESTRUCTURADA
(T-4)
1
4.1. Estructura global de un programa:
4.2. La secuencia:
4.3. Esquemas de selección. Instrucciones IF y CASE:
Estructura de selección:
Una estructura de selección hace posible la selección de una de varias acciones
alternativas, dependiendo del valor de una expresión booleana
4.3.1. La instrucción IF:
Objetivo: si la expresión booleana es cierta se ejecuta la instrucción definida a
continuación del THEN, si es falsa y existe la cláusula ELSE, se ejecuta la instrucción
definida a continuación del ELSE.
Detrás de ELSE y de THEN, solo 1 instrucción.
Ej:
writeln(‘¿Quiere que diga algo?’);
readln(‘Respuesta);
IF(respuesta =s) or (respuesta=S’) THEN writeln(Hola);
Ej(2):
IF mes=2 THEN
IF esBisiesto THEN diasEnMes:=29
ELSE diasEnMes:=28
ELSE
IF (mes=4) or (mes=6) or (mes=9) or (mes=11) THEN diasEnMes:=30
ELSE diasEnMes:=31
La cláusula ELSE se asocia con el IF más cercano, al igual que el END, se refiere al
BEGIN más cercano tb, siempre y cuando no haya otro ELSE o END en medio.
Ej(3): ¿El año es bisiesto?
writeln(‘¿Quiere saber si un anno es bisiesto?(s/n)’);
readln(respuesta);
Exp. booleana
Instrucción
IF
THEN
ELSE
Instrucció
n
pf3
pf4
pf5
pf8
pf9
pfa

Vista previa parcial del texto

¡Descarga CONSTRUCCIONES BÁSICAS DE LA PROGRAMACIÓN ESTRUCTURADA y más Apuntes en PDF de Ingeniería Infórmatica solo en Docsity!

(T-4)

4.1. Estructura global de un programa:

4.2. La secuencia:

4.3. Esquemas de selección. Instrucciones IF y CASE:

Estructura de selección:

Una estructura de selección hace posible la selección de una de varias acciones alternativas, dependiendo del valor de una expresión booleana

4.3.1. La instrucción IF:

Objetivo: si la expresión booleana es cierta se ejecuta la instrucción definida a continuación del THEN, si es falsa y existe la cláusula ELSE, se ejecuta la instrucción definida a continuación del ELSE. Detrás de ELSE y de THEN, solo 1 instrucción.

Ej: writeln(‘¿Quiere que diga algo?’); readln(‘Respuesta’); IF(respuesta =’s’) or (respuesta=’S’) THEN writeln(‘Hola’);

Ej(2): IF mes=2 THEN IF esBisiesto THEN diasEnMes:= ELSE diasEnMes:= ELSE IF (mes=4) or (mes=6) or (mes=9) or (mes=11) THEN diasEnMes:= ELSE diasEnMes:=

La cláusula ELSE se asocia con el IF más cercano, al igual que el END, se refiere al BEGIN más cercano tb, siempre y cuando no haya otro ELSE o END en medio.

Ej(3): ¿El año es bisiesto? writeln(‘¿Quiere saber si un anno es bisiesto?(s/n)’); readln(respuesta);

IF Exp. booleana^ THEN Instrucción ELSE Instrucció n

Se dan clases particulares de IP FC EDI POO ATC y Estadística 686810826 (Garci) [email protected]

(T-4)

IF(respuesta =’s’) or (respuesta=’S’) THEN IF (anno mod4=0)AND((anno mod100<>0)OR(anno mod400=0)) THEN writeln(‘Es bisiesto’); ELSE writeln(‘No es bisiesto’);

NOTA: no es necesario especificar que pasa si el usuario contesta otra cosa, simplemente el programa no hace nada. NOTA 2: Antes de END (cuando no es necesario), puedes poner ‘;’, pero antes de ELSE nunca!!.

4.3.2. La instrucción CASE:

Es una estructura de selección múltiple.

Limitaciones:

· Alternativas disjuntas: CASE x OF 3 ,5,7: writeln(‘Hola’) 3 ,9,12: write(‘Adios’) END No puede aparecer lo mismo en dos alternativas. · La expresión (selector) debe ser de tipo ordinal (integer, boolean, char, subrango o enumerado, no real, o string) · Algunas implementaciones de PASCAL permiten que el valor del selector figure como constante. En este caso la ejecución de la instrucción no tiene efecto. · Algunas implementaciones permiten usar la cláusula ELSE o OTHERWISE para especificar la acción a ejecutar si el selector no está en el rango. · Si el valor introducido no está en la lista de alternativas: depende el compilador:

  • Error en tiempo de ejecución.
  • No hace nada.
  • Podemos usar ELSE o OTHERWISE:

Ejemplo: CASE X OF 2,3,5: write-------- 7,9: write-------- ELSE write-------- END

CASE (^) Expresión OF

: END

Constante

Instrucciones ;

;

(T-4)

Ej: Un bucle que repita 5 veces algo:

FOR i=1 TO 5 DO writeln(‘Hola’); writeln(‘Adios’):

Ej(2): Suma de 10 números:

acum:= FOR i=1 TO 10 DO BEGIN writeln(‘Introduzca número’); readln(x); acum:=acum+x; END writeln(‘La media es’,acum/10);

Ej(3): Tabla de cuadrados:

writeln(‘Introduzca dos números’); readln(inicial,final); FOR i=inicial TO final DO writeln(‘El cuadrado de’,i,’es’,sqr(i))

Si vemos un bucle FOR en diagrama de flujos:

cierto

incrementa

(T-4)

Diagrama para un bucle FOR:

x:= Comparación FOR i:=1 TO x DO BEGIN writeln(x); Falso x:=x*3; END; Cierto

i x Por pantalla: 5 1 5 5 15 2 15 5 15 45 3 45

Habrá 5 iteraciones ya que x:=5. Hay que decir cuantas veces antes de empezar.

Los límites del FOR se calculan antes de comenzar el bucle.

FOR i:=5 TO 8 DO writeln(i); writeln(i);

Por pantalla sale:

5 6 7 8 ? El valor que tenga después no lo sabes.

FOR c:=’a’ TO ‘z’ DO writeln(‘El código ASCII de’,c,’es’,prd(c));

Limitaciones: · La variable de control, el valor inicial y el valor final deben ser los tres del mismo tipo. · El tipo de la variable de control debe ser: integer, char, boolean, un subrango o un tipo enumerado. · En el bucle FOR-TO si el valor inicial es mayor que el valor final el cuerpo del bucle no se ejecuta. · En el bucle FOR-DOWNTO si el valor inicial es menor que el valor final el

i:=

i:=i+

S

i<=

(T-4)

Ej(2): simular con un while un bucle FOR:

FOR i:=1 TO 10 DO writeln(‘El cuadrado de’,i,’es’,sqr(i));

i:= WHILE i<=10 DO BEGIN writeln(‘El cuadrado de’,i,’es’,sqr(i)); i:=i+1; END

Ej(3): si queremos los cuadrados de los pares:

FOR i:=1 TO 10 DO writeln(‘El cuadrado de’,2i,’es’,sqr(2i));

i:= WHILE i<=10 DO BEGIN writeln(‘El cuadrado de’,i,’es’,sqr(i)); i:=i+2; END

En el bucle while sabemos el valor final de la i.

Ej(4): multiplicar un nº por 3:

x:= FOR i:=1 TO x DO BEGIN writeln(x); x:=x*3; END

x:=5; i:=1; WHILE i<=x DO BEGIN Este programa está mal, no acaba nunca, ya que el valor writeln(x); de la x cambia dentro del bucle, en este programa, nunca x:=x3; i>x. Solución: i:=i+1; x:=5; y:=x; END i:=1; WHILE i<=y DO BEGIN writeln(x); x:=x3; i:=i+1; END

(T-4)

Ej(5): División entera: Dados x e y, queremos obtener x div y, x mod y, pero no tenemos mod ni div.

c:=0; x y c r r:=x; 34 4 0 34 WHILE r>=y DO 34 4 1 30 BEGIN 34 4 2 26 r:=r-y; 34 4 3 22 c:=c+1; 34 4 4 18 END 34 4 5 14 34 4 6 10 34 4 7 6 34 4 8 2 PRE={x>0,y>0,r=x,c=0} I={x=cy+r,r>0} POST={x=cy+r ^ 0<=r<y}

Invariante: propiedad que se cumple en todas las iteraciones del bucle. Cota (nº de iteraciones)= r-y+

¿Cómo se demuestra que un bucle es correcto y termina? 1- Se cumple el invariante? (PRE -> I) 2- {I ^ cond} S {I} ( {I ^ cond} S {I} ) (precondición) (instrucción) (postcondición) 3- I ^ ¬ cond -> Post -> Si termina será correcto 4- I ^ Cond -> cota > 0 5- {I ^ cond ^ cota =C} S {cota < C}

Demostramos que es verdadero: 1- x=cy+r -> x=(c+1)y+(r-y) -> x=cy+y+r-y -> x=cy+r 2- 3- Solo hay que demostrar r<y. No cond: ¬Cond = r<y 4- Si cota <= 0 -> el bucle se acaba. I ^ Cond -> Cota > 0 Cond: r >= y Cota: r-y+1 (r-y>0) 5- Cota se decrementa en cada iteración. Cota: r-y+1 -> (r-y)-y+1 (y<0) -> r-2y-

Ej (6): mcd de 2 nos^ enteros. Algoritmo de Euclides:

{x=X,y=Y,x>0,y>0} while (x>0) and (y>0) DO IF x>y THEN x:=x mod y ELSE y:=y mod x IF x=0 THEN z:=x

(T-4)

4.4.3. Instrucción REPEAT:

Se ejecutan las instrucciones especificadas y después se evalúa la expresión booleana, si es falsa se repite el proceso, si es cierta se finaliza la instrucción.

Diferencias entre el while y el repeat:

  • Repeat tiene la condición al final.
  • While repite mientras se cumple, repeat hasta que se cumple.
  • Repeat se ejecuta al menos 1 vez.
  • Repeat permite repetir varias instrucciones.

Ej:

REPEAT write(‘Positivo’); readln(x); UNTIL x>=0;

Diagramas de flujo:

Cierta

Falsa

Traducir de uno a otro:

  1. I 1 ; I 2 ; I 3 ; REPEAT ... I 1 ; In; I 2 ; WHILE not condición DO ... BEGIN In; I 1 ; UNTIL condición I 2 ; ... In; END

REPEAT (^) Instrucción UNTIL Expresión booleana

Instrucciones

Condición

(T-4)

IF condición THEN WHILE condición DO REPEAT I 1 ; I 1 ; I 2 ; I 2 ; ... ... In; In; UNTIL not condición

Ej: menú repetido

REPEAT writeln(‘1-Mcd’); writeln(‘2-¿Es primo?’); writeln(‘3-Factorizar’); ... writeln(‘8-Dibuja triángulo’); writeln(‘9-Salir’); writeln(‘Introduzca su elección:’); readln(‘opción’); CASE opción OF 1: algoritmoDeEuclides 2: progParaPrimos ... 8: dibujoTriangulo 9: writln(‘chao’); ELSE writeln(‘Te has equivocado, entre el 1 y el 9 por favor’) END UNTIL opción=

4.5. Resumen de bucles:

Bucles controlados por centinela:

  • Leer primer valor.
  • WHILE valor … DO BEGIN ... leer siguiente valor END

Bucles controlados por un indicador lógico:

  • Inicializar a false indicador lógico.
  • WHILE indicador es falso DO BEGIN ... si se cumple la condición asignamos true al indicador lógico. END