TEMA 4: Programación estructurada

Documentos relacionados
Objetivos de la práctica: - Trabajar las estructuras de control repetitivas en la realización de programas.

ESTRUCTURAS DE CONTROL

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones.

TEMA 4. ESTRUCTURAS DE CONTROL

Programación: Estructuras de Control

ESTRUCTURAS REPETITIVAS

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Lección 3 Sentencias de control

Estructuras de control Agosto de Facultad de Ingeniería. Universidad del Valle

Fundamentos de programación

Tema 3. Estructuras de Datos

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Dobles: Es el caso de la instrucción if-else (punto 1.2).

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Estructuras de Control 3

Programación Estructurada

Programación Estructurada. Sesión 4:Estructuras de control

Tema 6 Control de Flujo

Capítulo 13 INSTRUCCIONES DE CONTROL REPETITIVAS. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Introducción a las sentencias de control

Estructuras de control

ESTRUCTURAS DE CONTROL

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Capítulo 3. Sentencias condicionales

TEMA 4: Estructuras de Control

Programación Orientada Objetos. Estructuras de control if, If else, switch

Operadores aritméticos

Estructuras de Control

LENGUAJE DE PSEUDOCÓDIGO

CLASIFICACION DE LAS ESTRUCTURAS DE CONTROL

Guía práctica de estudio 06: Estructuras de repetición

Sentencias de Procesamiento Iterativo: while y do-while

Programación. Test Autoevaluación Tema 4

Introducción a los Computadores (CNM-130) Estructuras de control repetitivas en FreeMat

Actividad Algoritmos, Estructura y Programación I. FOR, DO-WHILE

5. ESTRUCTURAS DE REPETICIÓN

Al igual que las instrucciones alternativas, las instrucciones repetitivas también se pueden anidar, permitiendo las siguientes combinaciones de

ESTRUCTURAS DE REPETICIÓN AREA PROGRAMACIÓN 1

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Estructura de Selección y Repetición en C#

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Capitulo 3. Programación Estructurada

TEMA 5: Subprogramas, programación modular

FACULTAD DE INGENIERIA

Funciones. Parámetros por valor

Unidad 4. Lógica de Programación. Prof. Eliana Guzmán U.

Programación Estructurada

Lógica de programación

la solución a una ecuación cuadrática solicitando al usuario los términos de dicha ecuación.

Tema: Estructuras de Repetición en C# [While y Dowhile].

Distinguir las diferentes estructuras de repetición utilizadas en problemas con bucles: mientras, repetir mientras, para.

fundamentos de programación (unidad 4) programación estructurada en Java

Estructuras de repetición

WHILE Y DO WHILE BREAK EN LENGUAJE C. BUCLES MIENTRAS. FORZAR SALIDA O TERMINACIÓN. EJEMPLO (CU00534F)

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

Resolución de Problemas y Algoritmos Clase 6: Repetición (continuación)

Programcaión Básica. Secuencias de Control y Repetición. Arturo Vega González.

Tema 2. Algoritmos y Programas. Informática Grado en Física

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Cuales son los tipos de instrucciones que se utilizan en la programación?

GUIA EQUIVALENCIAS ENTRE CODIGO C++ Y DIAGRAMAS NASSI-SHNEIDERMAN

Tema 4: Estructuras de Control Estructura y Contenidos

Tema: Estructuras de Repetición en C#.

Bloque II. Elementos del lenguaje de programación Java

Cuáles son los lenguajes que pueden utilizarse para programar Karel?

Introducción a la. Programación con

Repetición Condicional

Ciclos. Recordando Estructuras de Control Básicas: SELECCIÓN (condición) SECUENCIAL

Programación en Lenguaje C

Guía práctica de estudio 05: Diagramas de flujo

Texto estructurado (ST)

Guía práctica de estudio 05: Pseudocódigo

Andrés Donaciano Martínez Guillén -.- Fundamentos de programación -.andresmtzgwordpress.com

Estructuras de selección

SELECCION SELECCION

BREAK: FORZAR SALIDA BUCLES FOR, WHILE, DO EN C. LOOP. STATEMENT NOT WITHIN LOOP OR SWITCH (CU00545F)

TEMA 5. PROGRAMACIÓN BÁSICA EN MATLAB /OCTAVE

Tema: Estructuras de Selección en C#.

Estructuras de Repetición (Hacer-Mientras)

Tema 07: Programación estructurada en C

Sentencias DO-WHILE EN C++

Conocer los tipos de esquemas condicionales. Entender su funcionamiento y sus diferencias. 1. Introducción. 3. Esquemas condicionales en C

Estructuras de Control (y su forma en Python y en C) Clase 5 Introducción a la Computación Patricia Borensztejn

PROGRAMACIÓN ESTRUCTURADA

TEMA 3. Sentencias de control.

Fundamentos de Programación. Flujo de Control I: Estructuras selectivas

Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema

Capítulo 2 : ALGORITMOS

5. Sentencias selectivas o condicionales

Programación Orientada a Objetos Sentencias Java Parte II Ing. Julio Ernesto Carreño Vargas MsC.

Estructuras en LabVIEW.

Introducción a Java. Introducción a Java. Programación I

Estructuras de Decisión Simples y Dobles. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Codificación en C. Como pasar de Pseudocódigo a C (con pequeños trucos de C++)

SESIÓN DE EJERCICIOS E1

Operadores de comparación

Estructuras de Repetición (Repita para)

TEMA 1: Algoritmos y programas

Transcripción:

TEMA 4: Programación estructurada 4.1.-Introducción. Teorema de la programación estructurada El principio fundamental de la programación estructurada es que en todo momento el programador pueda mantener el programa dentro de la cabeza. Esto se consigue con: a) un diseño descendente del programa, b) unas estructuras de control limitadas y c) un ámbito limitado de las estructuras de datos del programa. Hace más fácil la escritura y verificación de programas. Se adapta perfectamente al diseño descendente. Para realizar un programa estructurado existen tres tipos básicos de estructuras de control: Secuencial: Ejecuta una sentencia detrás de otra. Condicional: Se evalúa una expresión y, dependiendo del resultado, se decide la siguiente sentencia a ejecutar. Iterativa: Repetimos un bloque de sentencias hasta que sea verdadera una determinada condición. Existe un teorema debido a [C.Böhm, G.Jacopini, Comm. ACM vol.9, nº5, 366-371, 1966] (Teorema Fundamental de la programación estructurada) que establece lo siguiente: Fernado Barber y Ricardo Ferrís 39

Todo programa propio se puede escribir utilizando únicamente las estructuras de control secuencial, condicional e iterativa Un programa propio es aquel que: Tiene un único punto de entrada y un único punto de salida. Existen caminos desde la entrada hasta la salida que pasan por todas las partes del programa. Todas las instrucciones son ejecutables y no existen bucles sin fin. Este teorema implica que la utilización de la sentencia GOTO es totalmente innecesaria, lo que permite eliminar esta sentencia. Un programa escrito con GOTO es más difícil de entender que un programa escrito con las estructuras mencionadas. 4.2 Estructura secuencial Ejecución de sentencias una detrás de la otra. En C++, toda una estructura secuencial se agrupa mediante los símbolos y. Leer (a, b) s <- a + b cin >> a; cin >> b; s = a + b; cout << s; Escribir (s) Todo el bloque se considera una sola sentencia. Después de las llaves no se pone punto y coma. Fernado Barber y Ricardo Ferrís 40

4.3 Estructura condicional 4.3.1.-Alternativa simple: Pseudocódigo: Expresión Falso Verdadero sentencia si <Expresión Lógica> entonces <sentencia> fin si a!= 0 No Si x <- b / a si (a!= 0) entonces x <- b / a escribir x Escribir (x) En C++ la sintaxis de la alternativa simple sería: if (expresión lógica) sentencia if (a!= 0) x = b / a; cout << x; Fernado Barber y Ricardo Ferrís 41

4.3.2.-Alternativa doble: Pseudocódigo: Expresión Falso sentencia Verdadero sentencia si <Expresión Lógica> entonces <sentencia> <sentencia> a!= 0 NO Escribir "Error: Div. por cero" SI x <- b / a si (a!= 0) entonces x <- b/a escribir x escribir "Error: División por cero" Escribir (x) En C++ la sintaxis sería: if (expresión lógica) sentencia1 else sentencia2 if (a!= 0) x = b/a; cout << x; else cout << "Error: División por cero"; Fernado Barber y Ricardo Ferrís 42

4.3.3.-Sentencias if anidadas: Cuando la sentencia dentro del if es otra sentencia if. si (a > b) si (a > c) max = a; max = c; si (b > c) max = b; max = c; En C++: if (a > b) if (a > c) max = a; else max = c; else if (b > c) max = b; else max = c; La parte else siempre se asocia al if más cercano posible. if (a == 1) if(b == 1) cout << "1 1"; else // Con que if esta asociado este else?? cout << "? "; 4.3.4.-Alternativa múltiple: Valor1 Valor2 Expresión Valorn Valor Sentencia1 Sentencia2 Sentencian Pseudocódigo: Fernado Barber y Ricardo Ferrís 43

según <Expresión> hacer <valor1>: <sentencia1> <valor2>: <sentencia2> <valorn>: <sentencian> fin_segun La expresión ya no es lógica, de tipo ordinal. Una forma de implementar esta estructura es mediante sentencias si anidadas. si (Expresion = Valor1) entonces Sentencia1 si (Expresion = Valor2) entonces Sentencia2 si (Expresion = Valor) entonces si (Expresion = Valorn) entonces Sentencian si (x % 4 + 1 == 1) entonces sentencia1 si (x % 4 + 1 == 2) entonces sentencia2 si (x % 4 + 1 == 3) entonces sentencia3 sentencia4 Fernado Barber y Ricardo Ferrís 44

Mediante la estructura según: Sentencia1 Sentencia1 x % 4 + 1 Sentencia1 Sentencia1 según (x % 4 + 1) hacer 1: sentencia1 2: sentencia2 3: sentencia3 4: sentencia4 fin según La sintaxis en C++ será: switch (Expresión ordinal) case valor1: sentencias case valor2: sentencias default: sentencias // Opcional switch (x) case 1: cout << "Uno"; case 2: cout << "Dos"; case 3: cout << "Tres"; default: cout << "> 3"; Uno de los ejemplos más claros de uso del switch es en menús: Fernado Barber y Ricardo Ferrís 45

cin >> opcion; switch (opcion) case 1: IntroducirNombre(); case 2: Listar(); case 3: Salir(); default: cout << "Opcion no valida"; TEMA 4: Programación estructurada La instrucción switch también admite poner varias opciones juntas. switch (Expresión ordinal) case valor1: case valor2: sentencias case valorn: sentencias default: sentencias // Opcional Importante reslaltar la utilización de la palabra reservada break como señal de final de las sentencias que van con cada opción o conjunto de opciones. 4.4. Estructura iterativa (o bucle) Consiste en repetir una sentencia. También se denominan bucles. Siempre ha de existir una condición de parada, es decir, hay que garantizar que para cualquier caso, el bucle parará. Fernado Barber y Ricardo Ferrís 46

4.4.1.-Mientras Expresion NO Pseudocódigo mientras <expresión lógica> hacer <sentencia> fin_mientras SI Sentencia Escribir los números enteros de 1 a N Leer n num <- num + 1 num <- 1 num <= n NO Leer n num 1 mientras num <= n hacer Escribir num num num + 1 fin_mientras Escribir num SI La sentencia puede no ejecutarse nunca si la condición no se cumple. Si la condición está mal hecha, el bucle puede no acabar nunca. Es lo que se denomina un bucle infinito En C++ la sintaxis sería: while (expresión lógica) sentencia cin >> n; Fernado Barber y Ricardo Ferrís 47

num = 1; while (num <= n) cout << num << endl; num++; Con el bucle mientras se puede construir cualquier estructura iterativa. De todas maneras, por comodidad existen otras estructuras iterativas. 4.4.2.-Repetir (o hacer) Sentencia Pseudocódigo repetir <sentencia> mientras <expresión lógica> Expresion NO SI Repite la sentencia mientras la expresión sea cierta. La sentencia siempre se ejecuta como mínimo una vez. Leer n num <- 1 Escribir num num <- num + 1 Leer n num <- 1 repetir Escribir num num <- num + 1 mientras (num <= n) num <= n NO SI La sintaxis en C++: do sentencia Fernado Barber y Ricardo Ferrís 48

while (expresión lógica); cin >> n; num = 1; do cout << num << endl; num++; while (num <= n) Se utiliza sobre todo en preguntas o menús, puesto que siempre se han de ejecutar al menos una vez. do cout << "Introduce un entero"; cin >> i; cout << " Es correcto (s/n)?"; cin >> c; while (c!= 's'); 4.4.3.-Para (o desde) Es como una estructura mientras, pero especialmente preparada para incorporar un contador. Pseudocódigo para <variable> <- <valor inicial> hasta <valor final> hacer <sentencia> fin_para La variable del bucle se denomina variable de control. Fernado Barber y Ricardo Ferrís 49

leer n para num 1 hasta n hacer escribir n fin_para Se utiliza cuando se conocen el número de veces que se van a repetir las sentencias. La variable de control NO se puede modificar dentro del bucle. Cuando el bucle acaba, el valor de la variable de control es indeterminado. La sintaxis en C++ es: for(inicialización; condición; incremento) sentencia En C++, la instrucción for es como una instrucción while, con la salvedad de que tiene huecos especiales para poner la inicialización de la variable de control, la condición de repetición y el incremento de la variable de control. El incremento se realiza siempre después de ejecutar la sentencia. Al igual que en la instrucción while, la sentencia puede no ejecutarse nunca si la condición no se cumple. cin >> n; for(num = 1; num <= n; num ++) cout << num << endl; Se utiliza también para realizar sumatorios o productorios con la ayuda de una variable acumuladora: // inicialización del acumulador suma = 0; for(i = 1; i <= n; i++) suma = suma + i; // o suma += i; cout << suma; Fernado Barber y Ricardo Ferrís 50

factorial = 1; for(i = 1; i <= n; i++) factorial = factorial * i; cout << factorial; 4.4.4. Tipos de control de bucles Existen tres formas típicas de controlar cuando se ejecuta un bucle: a) Bucles con contador (ya vistos). b) Bucles controlados por indicadores (banderas o flags). bool continuar; continuar = true; // Inicializacion del indicador while (continuar) if (condición para acabar) continuar = false; Decir si un numero introducido por teclado contiene sólo cifras menores que cinco; bool menor; int num; cin >> num; menor = true; while (menor && (num > 0) ) if (num % 10 >= 5) menor = false; num = num / 10; if (menor) cout << Todas las cifras son menores que 5 ; else cout << Hay alguna cifra mayor o igual que 5 ; Fernado Barber y Ricardo Ferrís 51

Decir si un número introducido por teclado es capicua o no. bool capicua; int num, ultima, primera, cifras; TEMA 4: Programación estructurada cin >> num; capicua = true; // Inicializacion del indicador while (capicua && (num > 10) ) ultima = num % 10; cifras = int(log (num) / log (10) ); primera = num / int (pow (10, cifras) ); if (ultima!= primera) capicua = false; num = (num primera * pow (10, cifras) ) / 10; if (capicua) cout << num << es capicua ; else cout << num << NO es capicua ; c) Bucles controlados por centinela. suma = 0; cout << "Introduce números a sumar, 0 para acabar"; cin >> num; while (num!= 0) suma = suma + num; cout << "Introduce números a sumar, 0 para acabar"; cin >> num; cout << suma; 4.4.5. Bucles anidados Los bucles, al igual que las sentencias condicionales, también se pueden anidar. Esto es especialmente útil para el manejo de matrices, como veremos en el Tema 6. Tabla de multiplicar int i, j; for(i = 1; i <= 10; i++) for(j = 1; j <= 10; j++) cout << i << "*" << j << "=" << i * j <<endl; Fernado Barber y Ricardo Ferrís 52