Técnicas de Programación

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

Tema 3. Estructuras de control

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

Lección 3 Sentencias de control

TEMA 4. ESTRUCTURAS DE CONTROL

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

Laboratorio de Arquitectura de Redes. Sentencias de control en lenguaje C

Informática Ingeniería en Electrónica y Automática Industrial

Fundamentos de programación

Operadores. Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.

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

Sentencias de control de flujo

Sentencias DO-WHILE EN C++

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

TEMA 5. ESTRUCTURAS DE CONTROL: BUCLES.

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

Operadores aritméticos

Programación en Lenguaje C

Sentencias iterativas

ESTRUCTURAS DE CONTROL

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

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

Métodos con Parámetros

Tema 1: Sentencias de Control

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Introducción a los Computadores ITTELSI. Curso

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

Programación: Estructuras de Control

FUNDAMENTOS PARA LA CONSTRUCCIÓN DEL CÓDIGO A PARTIR DEL ALGORITMO

Tema 3. Estructuras de Datos

Operadores de comparación

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

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

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Programación Estructurada. Sesión 2:El lenguaje de programación C

1.9. SENTENCIAS DE CONTROL DE PROGRAMA

Capítulo 3. Sentencias condicionales

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

En lenguaje C son soportados dos tipos de sentencias condicionales: if y switch.

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

TEMA 4: Programación estructurada

Sentencias de Procesamiento Iterativo: while y do-while

TEMA 4: Estructuras de Control

Objetivos. 1. Realizar exitosamente programas que involucren procesos que requieran iteraciones. Antecedentes

1. Detalle de los Comandos:

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

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

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

Reales. Caracteres. Cadenas de Caracteres (String)

Tema 06: Estructuras y sentencias de control en C

Estructuras de Control 3

VGOC"6<"Rtqitcocekôp"guvtwevwtcfc

Lenguaje de programación C. Introducción

Programación. Test Autoevaluación Tema 4

OPERADORES Y EXPRESIONES

PYTHON. Programación estructurada

Operadores de comparación

CONDICIONALES SWITCH CASE DEFAULT BREAK EN C. ELEGIR ENTRE VARIAS OPCIONES. EJEMPLO. (CU00532F)

Estatutos de Control C# Estatutos de Decisión (Selección)

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

Lenguaje de Programación: C++ Repaso de Material C++

Programación Estructurada

5. Sentencias selectivas o condicionales

Descripción de un Programa

Programación (PRG) PRACTICA 4. Elementos de programación: estructuras de control.

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

Introducción a las sentencias de control

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

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

Programación estructurada. Programación estructurada

Tema: Estructuras de Selección en C#.

Estructuras de Repetición: Repita Mientras.

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

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Fundamentos de Informática

Análisis y escritura de las estructuras de control

Tema 2. El lenguaje JAVA

Programación I Teoría I.

Ejercicios resueltos

ESTRUCTURAS DE CONTROL REPETITIVAS

Lenguajes de programación

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

1. Repaso del Lenguaje C M.C. Luis A. Zarza López

GUIÓN DE PRÁCTICAS 3: ESTRUCTURAS CONDICIONALES

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.

Guía práctica de estudio 05: Estructuras de selección

Estructura repetitiva while

Ejercicios de Programación

Tipos de Datos de python (2ª parte):

Cristian Blanco

Introducción a la Programación

El lenguaje C. 1. Identificadores, constantes y variables

Conceptos. Generales ALGORITMOS

Tema 6 Control de Flujo

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

ESTRUCTURAS DE CONTROL

Autor: Ing. Nahuel González INTRODUCCIÓN A C. Clase 1

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

Transcripción:

Técnicas de Programación 3.1.- Lenguaje de programación C Introducción Son sentencias que permiten romper el orden de ejecución del programa. Sin este tipo de sentencias la ejecución se realiza en el orden en que se han escrito. Así mismo, en muchas ocasiones es necesario ejecutar un conjunto de sentencias un número determinado de veces, o bien hasta que se cumpla una determinada condición. Este tipo de sentencias son las repetitivas. Estas instrucciones o sentencias se dividen en tres categorías: 0.- Instrucciones condicionales: if() y switch() 1.- Instrucciones repetitivas: for, while, do-while 2.- Instrucción de salto incondicional: goto En este tema aprenderemos a utilizar estas sentencias para que los programas tomen decisiones y para que sean capaces de ejecutar bloques de sentencias repetitivas. 1.- Instrucciones condicionales Una característica muy poderosa de cualquier ordenador es la capacidad que tiene de tomar decisiones, es decir, que al comparar dos alternativas diferentes pueda tomar una decisión basada en la evaluación de alguna condición impuesta por el programador. Es por tanto necesario que un lenguaje de programación tenga instrucciones que permitan formar estas condiciones e instrucciones que pueden evaluarlas. 1

1.- Instrucciones condicionales El formato general de una instrucción condicional genérica es: Instrucción condicional (condición) si condición cierta grupo de instrucciones para verdadero si condición falsa grupo de instrucciones para falso Observamos cuatro partes bien diferenciadas: 1. La propia instrucción condicional; 2. La condición; 3. El grupo de instrucciones para verdadero; y 4. El grupo de instrucciones para falso. Cuando el ordenador evalúa una condición solo puede hacerlo de dos maneras: o la condición es cierta o verdadera (true) o la condición es falsa (false), lo que dependerá del valor que tenga asignado o que se haya capturado para la variable que está en la condición, y dependiendo del resultado de la evaluación se ejecutarán las instrucciones de la parte cierta o las de la parte falsa de la condición. En general todas las condiciones simples se forman con variables, operadores de relación o relacionales, constantes o variable. Una condición simple se define como el conjunto de variables y/o constantes unidas por los llamados operadores relacionales. Debemos tener especial cuidado con el operador de igualdad (=) y el operador relacional de comparación por igualdad (==), es decir: dato = 10: se carga o asigna el valor 10 a la variable dato. dato == 10: se compara el valor de la variable dato con el numero 10. Solo este ultimo formato es valido dentro de una condición, en una instrucción condicional. 2

1.- Instrucciones condicionales La instrucción if. La instrucción condicional más usada es la sentencia if, que vamos a analizar seguidamente. Su sintaxis es la siguiente: if (condición) grupo de instrucciones para verdadero; else grupo de instrucciones para falso;; Debemos tener muy presentes las siguiente observaciones: 1ª. Obsérvese donde van y donde no van los puntos y comas 2ª. La condición va entre paréntesis 3ª. Si un if no tiene un grupo de instrucciones para falso se omite el else, y la llave antes de else si terminaría con punto y coma. El proceso de ejecución de una sentencia if es el siguiente: 1º. Se evalúa la condición, que puede ser una expresión numérica, relacional o lógica. 2º. Si el resultado de evaluar la condición es verdadero (resultado distinto de cero) se ejecutará lo indicado por la sentencia de grupo de instrucciones para verdadero. 3º. Si el resultado de evaluar la condición es falso (resultado cero) se ejecutará lo indicado por la sentencia de grupo de instrucciones para falso, siempre que se haya especificado la clausula else. 4º. Si el resultado de evaluar la condición es falso y se ha omitido la clausula else se ignora la sentencia de grupo de instrucciones para verdadero. 5º. En cualquiera de los casos la ejecución del programa continúa por la siguiente sentencia ejecutable. Veamos algunos ejemplos de sentencias if que nos aclaren lo descrito: if (condicion) sentencia1; sentencia2;... sentencia; Ejemplo de sentencia if simple. Se evalúa condicion. Si el resultado es true se ejecuta el grupo sentencia1, sentencia2,...; y si el resultado es false se salta el grupo y se prosigue en la línea sentencia. 3

1.- Instrucciones condicionales if (condicion) sentencia1; else sentencia2; sentencia; Ejemplo de sentencia if con else. Se evalúa condicion. Si el resultado es true se ejecuta sentencia1 y se prosigue en la línea sentencia y si el resultado es false se ejecuta sentencia2 y se prosigue en la línea siguiente (sentencia). Tanto sentencia1 como sentencia2 pueden ser grupos. Existe una forma especial de sentencia if... else que podemos denominar múltiple y que permite realizar una ramificación múltiple del programa según se cumpla una condición entre muchas condiciones. La forma general de esta es: if (condicion1) sentencia o grupos de sentencias 1; else if (condicion2) sentencia o grupos de sentencias 2; else if (condicion3) sentencia o grupos de sentencias 3; else if (...)... [else sentencian;] Se evalúa condicion1. Si el resultado es true, se ejecuta sentencia o grupo 1. Si el resultado es false, se salta sentencia o grupo 1 y se evalúa condicion2. Si el resultado es true se ejecuta sentencia o grupo 2, mientras que si es false se evalúa condicion3 y así sucesivamente. Si ninguna de las expresiones o condiciones es true se ejecuta sentencian que es la opción por defecto (puede ser una sentencia nula, y en ese caso puede eliminarse junto con el else que la precede. Veamos otro ejemplo: if (x) // Es lo mismo que if (x!= 0) b=a/x; b=b+1; La sentencia b=a/x se ejecutará si la expresión es verdadera (x 0) y no se ejecutará si es falsa (x=0). En cualquier caso la ejecución continua por la sentencia b=b+1. 4

1.- Instrucciones condicionales Es posible crear una situación del siguiente tipo: En cualquiera de los grupos de instrucciones para verdadero o falso se puede escribir otra sentencia if...else. Si esto es así, es decir que se ejecuta una sentencia if...else dentro de otra hablamos de sentencias anidadas if...else. Su sintaxis general es la siguiente: if (condición 1) If (condición 2) grupo de instrucciones 1; else grupo de instrucciones 2;; La forma de evaluación de este anidamiento es como sigue: Si condición 1 es falso se pasa a ejecutar el grupo de instrucciones 2, aunque el resultado de evaluar condición 2 sea verdadero. Si condición 1 es verdadero y condición 2 es falso no se ejecutan ni grupo de instrucciones 1 ni grupo de instrucciones 2, luego se continúa por la siguiente sentencia ejecutable del programa. Si condición 1 es verdadero y condición 2 es verdadero se ejecuta grupo de instrucciones 1 continuando el flujo del programa en función de este grupo de instrucciones, que a su vez pueden contener otro anidamiento de sentencias if...else. Veamos un sencillo ejemplo que se puede resolver, entre otras formas, anidando sentencias if. Ejemplo 10.- Cual es el menor de tres números con if anidados Realizar un programa que sea capaz de decidir cual es el menor de tres números reales que introduzcamos por teclado. Llamamos a los números datoa, datob y datoc y declaramos otra variable que llamamos Resultado, de forma que el siguiente fragmento de código nos resuelve el problema: 5

1.- Instrucciones condicionales Ejemplo 10.- Cual es el menor de tres números con if anidados if (datoa < datob) if (datoa < datoc) //if anidado para opción true del primer if Resultado = datoa; else Resultado = datoc; else if (datob < datoc) //if anidado para opción false del primer if Resultado = datob; else Resultado = datoc; Un posible resultado en tiempo de ejecución es: 6

1.- Instrucciones condicionales Condiciones compuestas En muchas ocasiones es necesario presentar mas de una condición para su evaluación hablando entonces de condición compuesta, que se define como dos o más condiciones simples unidas por operadores lógicos. Para que una condición compuesta que contiene el operador lógico "AND" se evalúe como cierta las dos condiciones simples deben ser ciertas. Para que una condición compuesta que contiene el operador lógico "OR" se evalúe como cierta basta con que una de las condiciones simples sea cierta. La cantidad total de casos posibles cuando se unen dos o más condiciones simples es de 2 n, donde n es la cantidad de condiciones. Una condición compuesta formada por dos condiciones simples unidas por los operadores lógicos AND u OR originan 2 2 = 4 casos posibles según las tablas de verdad de las operaciones lógicas correspondientes. Vamos a construir una tabla de verdad para una condición compuesta de tres condiciones simples, recordando que: 1.- La cantidad posible de casos es 2 3 = 8 casos posibles. 2.- Para evaluar una condición triple, primero se evalúan las dos primeras incluyendo su operador, bajo las reglas ya descritas y luego se evalúa, el resultado parcial contra la ultima condición, y ultimo operador, para obtener la evaluación final. Por ejemplo: sea una condición compuesta de tres condiciones simples, donde el primer operador lógico es el "AND" y el segundo operador lógico es el "OR". Es decir, se trata de evaluar una condición compuesta como: 1ª Cond.Simple AND 2ª Cond.Simple OR 3ª Cond.Simple La tabla de verdad la vemos en la página siguiente. 7

1.- Instrucciones condicionales Condiciones compuestas 1ª Cond.Simple AND 2ª Cond.Simple OR 3ª Cond.Simple 1ª Cond.Simple 2ª Cond.Simple Eval. Parcial AND 3ª Cond.Simple Eval. Final OR true true true true true false true true false false true true false false false true false true true false false false false false true true false false Instrucción switch La instrucción switch() es una instrucción de decisión múltiple que permite ejecutar una de varias acciones en función del valor de una expresión. Se trata de comparar el valor contenido en una variable contra una lista de constantes tipo int o char, de forma que al encontrar la igualdad entre variable y constante, se ejecuta el grupo de instrucciones asociados a dicha constante. Si no se encuentra igualdad entre variable y constante, entonces se ejecuta un grupo de instrucciones asociados a default, aunque este ultimo es opcional. 8

1.- Instrucciones condicionales Instrucción switch La sintaxis de esta instrucción es la siguiente: switch (expresion) // variable int o char case constante 1: grupo de instrucciones 1; break; case constante 2: grupo de instrucciones 2; break; case constante 3: grupo de instrucciones 3; break; default: grupo de instrucciones n; ; Los grupos de instrucciones pueden ser sentencias simples o compuestas. La instrucción switch evalúa la expresión entre paréntesis comparando su valor con las constantes de cada case, ejecutándose el grupo de instrucciones del case cuya constante coincida con el valor de expresión, continuando hasta el final del bloque o hasta una instrucción que transfiera el control fuera del bloque switch, como por ejemplo break. Si no existe ninguna contante igual al valor de la expresión se ejecuta el grupo de instrucciones a continuación de default, si ha sido especificado. Si eliminamos los break y el resultado de la evaluación de expresión coincide, por ejemplo, con constante 2 se ejecuta grupo de instrucciones 2 seguido de grupo de instrucciones 3, y así sucesivamente hasta que se llegue al final o se encuentre una sentencia de ruptura como break. 9

1.- Instrucciones condicionales Instrucción switch Ejemplo 11.- Ejemplo de sentencia switch. Queremos escribir un programa que nos pida el número (como dato tipo entero) correspondiente a un día de la semana (consideraremos el Lunes como primer día y el Domingo como el último) y que nos presente en pantalla el nombre en forma de texto (como dato tipo cadena) que se corresponda con el día introducido. Además si introducimos un número menor que 1 o mayor que siete debe mostrarnos un mensaje de error como por ejemplo Numero de día incorrecto. Para resultado correcto Para resultado incorrecto Ejemplo 12.- Analizar un ejemplo de sentencia switch. Analizar el siguiente código de programa case 'a':printf("opcion A\n"); break; case 'b':printf("opcion B\n"); break; case 'c': case 'd':printf("opcion C o D\n"); break; default: printf("opcion?\n"); #include <stdio.h> #include <conio.h> int main () char c; printf( "\nintroducir un caracter a,b,c o d o cualquier otro: " ); scanf( "%s", &c ); switch(c) printf("\nuna tecla para salir"); getch(); return 0; 10

1.- Instrucciones condicionales Instrucción switch Podemos obtener resultados similares a: Al introducir una opción cualquiera Opción con break Opción sin break 2.- Instrucciones repetitivas: for, while, do-while En lenguaje C existen también sentencias que permiten repetir una serie de veces la ejecución de unas líneas de código. Esta repetición se puede realizar: Un número determinado de veces Hasta que se cumpla una determinada condición lógica o aritmética. De una forma genérica, a estas instrucciones o sentencias repetitivas o cíclicas se les denomina bucles. La instrucción for. Permite repetir una cantidad conocida y exacta de veces la ejecución de una instrucción simple o compuesta. Su sintaxis general es: for ([<inicializacion>] ; [<condicion>] ; [<incremento>]) instrucción o instrucciones simples o compuestas; ; Pudiendo en inicializacion representar varias variables de control iniciadas con sus correspondientes valores y separadas por comas. Condición representa una expresión booleana que si se omite se supone verdadera. Incremento es una o más expresiones separadas por comas cuyos valores evolucionan en el sentido que se cumpla la condición. 11

2.- Instrucciones repetitivas: for, while, do-while Probablemente la forma más sencilla de explicar esta sentencia sea con un sencillo ejemplo. Sea la instrucción: for(x=1 ; x<=10 ; x=x+1) Vemos la sintaxis: 1.- Se inicializa la variable x, implicando la carga de la variable de control con un valor inicial. 2.- La condición es una expresión relacional que evalúa la variable de control contra un valor final o de parada que determina cuando debe acabar el bucle. 3.- El incremento define la manera en que la variable de control debe cambiar cada vez que el computador repite un bucle. 4.- Los tres argumentos se deben separar con punto y coma. Se ejecuta de la siguiente forma: Una vez inicializado el bucle (x=1) se evalúa la condición (x<=10) que resulta ser true por lo que se pasa a incrementar la variable (x=x+1, x=1+1=2). Se vuelve a evaluar la condición (x<=10) que resulta ser nuevamente true por lo que se pasa a incrementar la variable (x=x+1, x=2+1=3).de esta forma se sigue evaluando la condición hasta que sea false, momento en el que la ejecución del programa prosigue en la sentencia siguiente a la construcción for. Casos Particulares de sentencias for 1º. Caso general: El ciclo comienza en uno y se incrementa de uno en uno. 2º. Valor inicial diferente de uno, por ejemplo: for(x=6 ; x<=25 ; x=x+1) 3º. Valor inicial negativo, por ejemplo: for (x=-8 ; x=8 ; x=x+1) 4º. Incrementos diferentes de uno, por ejemplo: for (x=1 ; x<=20 ; x=x+3) 5º. Decrementos, por ejemplo: for (x=50 ; x >= 10; x= x - 4) En este caso el valor inicial de la variable debe ser mayor que el valor final y debemos cambiar el sentido de la condición. 6º. Solamente en los casos de incrementos o decrementos de una en una unidad podemos sustituir en el for el x=x+1 por x++ y el x=x-1 por x --. 12

2.- Instrucciones repetitivas: for, while, do-while Ejemplos de sentencia for int i; for (i = 1 ; i <= 100 ; i++) grupo de instrucciones simples o compuestas; ; int m; for (m = 5 ; m <= 125 ; m += 5) grupo de instrucciones simples o compuestas; ; int j, k; for (j = 3, k = 6 ; j+k < 40 ; j++,k +=2) grupo de instrucciones simples o compuestas; ; char caracter; for (caracter = z ; caracter >= a ; caracter --) grupo de instrucciones simples o compuestas; ; 13

2.- Instrucciones repetitivas: for, while, do-while Sentencia for Ejemplo 13.- Sentencia for Realizar un programa que muestre por pantalla los 10 primeros números naturales para obtener un resultado similar a: Ejemplo 14.- Pares e impares con sentencia for Realizar un programa que muestre por pantalla en dos columnas los números pares e impares comprendidos 0 y 20 para obtener un resultado como: 14

2.- Instrucciones repetitivas: for, while, do-while Sentencia for Para finalizar con la sentencia for vamos a exponer un ejemplo comentado de como realizar la misma tarea de formas diferentes. Se trata realizar la operación 4! = 4x3x2x1 = 24 para lo que el código puede ser el siguiente: #include <stdio.h> #include <conio.h> int main () int i=1, fact=1; /*********** Primera forma ***********/ for (;i<=4;)/*la instrucción for contiene sólo el chequeo de la variable*/ fact *= i; ++i; printf("factorial de 4 con la primera forma = %d\n", fact); /*********** Segunda forma ***********/ fact=1; /* Inicializamos la variable */ for (i=1; i<=4; ++i) /*Forma más habitual de expresar un bucle*/ fact*=i; printf("factorial de 4 con la segunda forma = %d\n", fact); /*********** Tercera forma ***********/ for(i=1, fact=1; i<=4 ; ++i, fact*=i) /*Se ejecuta antes el incremento de la variable que el chequeo y la operación se ejecuta en lugar de 4 veces 5 dando como resultado 120 en lugar de 24.*/ ; printf("factorial de 4 con la tercera forma = %d\n", fact); /*********** Cuarta forma ***********/ for(i=1, fact=1; i<=4 ; fact*=i, ++i) /*Forma muy parecida a la tercera pero con las operaciones en el orden correcto*/ ; printf("factorial de 4 con la cuarta forma = %d\n", fact); printf("\n\nuna tecla para salir"); getch(); return 0; 15

2.- Instrucciones repetitivas: for, while, do-while Instrucción o sentencia while La instrucción while se ejecuta mientras una condición permanezca como verdadera terminando el ciclo o bucle en el momento en que la condición se convierte en falsa. Su sintaxis es la siguiente: Inicializamos la variable para la condición; while(condicion) //Condicion es una expresión numérica, relacional o lógica. grupo de instrucciones; ; La instrucción while se ejecuta según el siguiente proceso: 1º. Se evalúa condicion. 2º. Si el resultado es falso (cero) no se ejecuta grupo de instrucciones pasando el control a la siguiente sentencia del programa. Si el resultado es verdadero (distinto de cero) se ejecuta grupo de instrucciones repitiéndose el proceso desde el primer punto. Ejemplo de sentencia while: int x=1; while(x<=10) printf("%d\tcadena de caracteres\n",x); x++; ; Ejemplo 15.- Tablas de multiplicar Realizar un programa en el que se solicite al usuario el número del que desea obtener la tabla de multiplicar y el número de items que quiere obtener de la misma. El resultado puede ser: 16

2.- Instrucciones repetitivas: for, while, do-while Bucles anidados con while Cuando incluimos una sentencia while dentro de otra sentencia while estamos hablando de lo que se conoce como bucle anidado. En general se habla de anidamiento tanto en sentencia while como en sentencias do o for. La estructura general de un anidamiento con while es la siguiente: Se inicializan las variables while(condicion) grupo de instrucciones externas; while(condicion) grupo de instrucciones internas; ; Se ejecuta la sentencia while externa y por cada vez que se ejecuta lo hará el interno tantas veces como imponga su condición. Ejemplo 16.- Pitagoras Se trata de realizar mediante sentencias while anidadas un programa que resuelva el teorema de Pitagoras calculando la hipotenusa para valores enteros positivos comprendidos entre +1 y +50 presentando por pantalla solamente los resultados exactos. El código del programa es el siguiente: #include <stdio.h> #include <conio.h> #include <math.h> //Necesario para calcular raíces cuadradas int main () unsigned int Cc = 1, Co = 1, h = 0; //Declaramos variables y las inicializamos printf("h\tcc\tco\n"); //Mostramos por pantalla una cabecera con tres columnas usando tabuladores printf("-------------------"); 17

2.- Instrucciones repetitivas: for, while, do-while Bucles anidados con while Ejemplo 16.- Pitagoras -- continuación while (Cc <= 50) //Primer bucle que dará valor de 1 a 50 a Cc // Calculamos la hipotenusa h. h = (int)sqrt(cc * Cc + Co * Co); //Usamos el operador cast para asegurar tipo int //Como h es un entero se almacena la parte entera de la raíz cuadrada. while (Co <= 50 && h <= 50) //bucle anidado con condición compuesta AND. /* Si la raíz cuadrada anterior es exacta imprimimos resultado */ if (h * h == Cc * Cc + Co * Co) printf("\n%d\t%d\t%d",h,cc,co); ; Co = Co + 1; //incrementamos bucle interno hasta que valga 50 h = (int)sqrt(cc * Cc + Co * Co); //Fin bucle anidado Cc = Cc + 1; //Incrementamos bucle externo Co = Cc; //Incializamos bucle interno printf("\n\nuna tecla para salir"); getch(); return 0; El bucle interno se ejecutará hasta que Co alcance el valor 50 para cada incremento del bucle externo que a su vez se ejecutará hasta alcanzar el mismo valor. 18

2.- Instrucciones repetitivas: for, while, do-while Instrucción o sentencia do while La diferencia con el bucle while es que la prueba de condición se realiza al finalizar el ciclo, es decir: las instrucciones se ejecutan al menos una vez, porque primero se ejecutan las instrucciones y al final se evalúa la condición. Su formato general es : Definimos e inicializamos la variable de condicion; do grupo de instrucciones para cierto; Instrucción(es) de ruptura de ciclo; while (condicion); Por ejemplo, el código: int x=1; do printf("%d lineas\n",x); x++; while (x<=10); mostrará 10 líneas por pantalla, como vemos: Si cambiamos la condición para que sea falsa (x<1) el bucle se ejecuta una vez, como observamos abajo. Decidir que tipo de bucle debemos usar es decidir que opciones de las siguientes se ajusta a las necesidades de nuestro problema: Si conocemos la cantidad exacta de veces que se debe que se ejecute el bucle, o el programa puede calcularla ese número de veces, usaremos for. Si desconocemos la cantidad de veces a repetir el bucle o se quiere mayor control sobre la salida o terminación del mismo entonces usaremos while. Si queremos que el bucle se ejecute al menos una vez usaremos do-while. 19

2.- Instrucciones repetitivas: for, while, do-while Instrucción o sentencia do while Si por ejemplo, tenemos el código: #include <stdio.h> #include <conio.h> int main () int Numero, Entrada, Suma=0; do printf("introducir un numero entero: "); scanf("%d", &Entrada); Numero = Entrada; fflush(stdin); Suma += Numero; printf("\nsuma = %d\n",suma); while (Entrada!=0); printf("\nuna tecla para salir"); getch(); return 0; Su ejecución nos estará solicitando datos hasta introducir el número. Cada vez se muestra el resultado de la suma tanto con números positivos como negativos. En la figura vemos un resultado posible: 20

2.- Instrucciones repetitivas: for, while, do-while Finalizacíon de un bucle De forma natural se sale de un bucle cuando se completan todos los ciclos o cuando lo indica la instrucción condicional. A veces, en el interior de la estructura de un bucle, pueden darse condiciones que precisen su terminación, bien saliendo del bucle o pasando a ejecutar un nuevo ciclo. La tarea descrita la realiza la sentencia continue, y para ver como se aplica recurriremos al código del ejemplo anterior. Reformamos el código en los apartados destacados. #include <stdio.h> #include <conio.h> int main () int Numero, Entrada, Suma=0; do printf("introducir un numero entero: "); scanf("%d", &Entrada); Numero = Entrada; if (Numero < 0) continue; fflush(stdin); Suma += Numero; printf("\nsuma = %d\n",suma); while (Entrada!=0); printf("\nuna tecla para salir"); getch(); return 0; Las nuevas líneas de código implican que se ignoren los números negativos y la terminación del ciclo se sigue produciendo cuando se introduce un cero. Es decir, la sentencia continue nos ha permitido saltar parte del bucle saltando al ciclo siguiente sin ejecutar las sentencias que hay a continuación, pero sin que se interrumpa el proceso repetitivo. Si lo que necesitamos es romper el proceso utilizaremos la sentencia break, asociado a una sentencia condicional como lo está continue. Si en el ejemplo anterior sustituimos una por otra conseguiremos también salir del programa cuando introduzcamos un número negativo. 21

3.- Instrucción de salto incondicional: goto En C existe una sentencia llamada goto que sirve para realizar una transferencia de control de ejecución a un punto distinto del programa. El uso principal que tiene, acompañada de una instrucción if, es la de simular bucles condicionales. La instrucción realiza una llamada a una etiqueta, que es un identificador valido de lenguaje C seguida de dos puntos. Un ejemplo de esta sentencia podría ser: #include <stdio.h> #include <conio.h> int main () int x=1; Etiqueta: printf("%d lineas\n",x); x++; if(x<=10) goto Etiqueta; printf("\nuna tecla para salir"); getch(); return 0; Este ejemplo producirá exactamente el mismo resultado que el que hemos empleado para el ejemplo de do-while. No parece muy apropiado usar esta sentencia cuando C permite crear bucles condicionales. Relación de ejercicios para resolver: Ejemplo 17.- Restar dos números Realizar un programa en C capaz de restar dos números de tipo float estableciendo un determinado número de decimales. 22

Relación de ejercicios para resolver: Ejemplo 18.- Suma y media aritmética Realizar un programa en C para realizar la suma y calcular la media aritmética de tres números de tipo float estableciendo un determinado número de decimales. Ejemplo 19.- Ecuación de segundo grado completa Realizar un programa en C para resolver la ecuación de segundo grado haciendo el cálculo del discriminante y obtener mediante sentencias if... else las raíces reales, las complejas o las raíces iguales. Probar con los siguientes valores: a=1, b=12 y c=35; a=1, b=6 y c=5; a=1, b=-6 y c=13; a=-1, b=6 y c=-9; Ejemplo 20.- Conversión de temperaturas Sabiendo que (Tª en ºF) = 32 + 1.8 * (Tª en ºC) realizar un programa en C que nos presente un menú como el siguiente: 1 - Grados Fahrenheit a centigrados 2 - Grados centigrados a Fahrenheit 3 - Salir Escoger opcion: Las opciones las solucionaremos con una sentencia switch y en cada caso nos debe preguntar por un dato denominado incremento. Se trata de presentar a modo de tabla las equivalencias entre ambas temperaturas para grupos de valores comprendidos entre 0 y 300 variando según ese incremento. Una de las opciones la resolveremos con while y la otra con for. Cada vez que se ejecute una opción debemos limpiar la pantalla (función clrscr();) y mostrar de nuevo el menú. Debemos ver algo similar a la figura. 23

Fin de la presentación 24