Estructuras de control. Dept. Ciencias de la Computación e I.A. Universidad de Granada

Documentos relacionados
Programación 1 Tema 5. Instrucciones simples y estructuradas

TEMA 4: Programación estructurada

TEMA 4: Estructuras de Control

Tema 5. Programación en Matlab. Fundamentos de Informática Grado en Ing. Química. Jesús Alcalá y David Pelta

VGOC"6<"Rtqitcocekôp"guvtwevwtcfc

El lenguaje de programación C (continuación): Estructuras de control

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

Estructuras de Repetición: Repita Mientras.

Tema 3. Estructuras de control

Programación: Estructuras de Control

Tema 4. Control de flujo. Programación Programación - Tema 4: 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.

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

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

Operadores aritméticos

TEMA 4. ESTRUCTURAS DE CONTROL

ESTRUCTURAS REPETITIVAS

Estructuras de Control 3

Introducción a los Computadores ITTELSI. Curso

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

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

Tema 6 Control de Flujo

Unidad 2. La lógica de programación. Tema 4. Arreglos y estructuras de repetición

1.9. SENTENCIAS DE CONTROL DE PROGRAMA

Lección 3 Sentencias de control

Programación. Test Autoevaluación Tema 4

Fundamentos de programación

TEMA 5. ESTRUCTURAS DE CONTROL: BUCLES.

ESTRUCTURAS DE CONTROL

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

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

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

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

Facultad de Ciencias de la Computación. Abraham Sánchez López Grupo MOVIS

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

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

Introducción a las sentencias de control

INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION

INSTITUTO TECNOLÓGICO

Sentencias de Procesamiento Iterativo: while y do-while

FACULTAD DE INGENIERIA

Curso Informática Lección 4. Instrucciones de control

Vectores y Matrices. Dept. Ciencias de la Computación e I.A. Universidad de Granada

Programación en Lenguaje C

Preliminares: programación con C++

Funciones. Parámetros por valor

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

5. ESTRUCTURAS DE REPETICIÓN

Tema: Estructuras de Selección en C#.

Tema 3. Estructuras de Datos

Una clasificación de los tipos de datos existentes en los diferentes lenguajes de programación se presenta a continuación:

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

Métodos con Parámetros

Introducción general al Lenguaje C (2010/2011)

Bloque II. Elementos del lenguaje de programación Java

Conocimientos previos

Tema 06: Estructuras y sentencias de control en C

Sentencias de control de flujo

Tema 4: Estructuras de Control Estructura y Contenidos

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

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

Fundamentos de Informática

ESTRUCTURAS DE CONTROL

Tema: Estructuras de Selección en C#.

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

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

Introducción a c++ Introducción a la programación EIS Informática III

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

SESIÓN DE EJERCICIOS E1

Estructuras de Decisión Simples y Dobles

Resolución de problemas mediante algoritmos

Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy. Febrero 2009

Sentencias iterativas

ESTRUCTURAS DE REPETICIÓN AREA PROGRAMACIÓN 1

Lenguaje de programación C. Introducción

Estructuras de Repetición (Repita para)

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

Funciones I. Fundamentos de Programación Fundamentos de Programación I

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

Cátedra I Informática Autor I Carlos Bartó

Programación de Ordenadores

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

Programación Estructurada

Estructura repetitiva while

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

NOTA: Un algoritmo o programa de computadoras está estructurado si en su diseño se hace uso de los siguientes tres métodos o estructuras de control:

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

Tema 3. Estructuras de control en C++

Estructuras de Selección, armado de Equipos, y Trabajo #1.

Introducción a la Algorítmica Transparencias correspondientes a las clases impartidas por los profesores: Lourdes Miró Amarante Ignacio García Vargas

Estructuras de Repetición (Hacer-Mientras)

Conceptos. Generales ALGORITMOS

La resolución de problemas es una tarea únicamente humana comprobable en todos los casos con los mismos resultados.

Cátedra I Informática Autor I Carlos Bartó

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

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

Unidad 2. La lógica de programación. Tema 4. Estructuras de decisión

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

Transcripción:

TEMA Estructuras de control Dept. Ciencias de la Computación e I.A. Universidad de Granada

Índice Estructura secuencial. Ejemplos Estructuras condicionales. Condicional Simple Condicional Doble Condicional Múltiple Ejemplos Estructuras repetitivas. Bucles Controlados por condición Bucles Controlados por contador Ejemplos

Conceptos Básicos Las estructuras de control de un lenguaje de programación se refieren al orden en que las instrucciones de un algoritmo se ejecutarán. El orden de ejecución de las sentencias o instrucciones determinán el flujo de control. Las tres estructuras básicas de control son: secuencia selección repetición

Conceptos Básicos Un programa propio puede ser escrito utilizando las tres estructuras de control básicas (Bôhm y Jacopin (1996)). Un programa se define como propio si cumple lo siguiente: Posee un sólo punto de entrada y salida o fin para control del programa. Existen caminos desde la entrada hasta la salida que se pueden seguir y que pasan por todas las partes del programa. Todas las instrucciones son ejecutadas y no existen lazos o bucles infinitos.

Estructura Secuencial Las sentencias se ejecutan sucesivamente, en el orden en que aparecen. No existen saltos o bifurcaciones. // Cálculo de Raices de una ecuación de grado 2. #include <iostream> #include <cmath> using namespace std; int main(){ double a,b,c,r1,r2; 1 cout << "\nintroduce coeficiente de 2o grado: "; 2 cin >> a; 3 cout << "\nintroduce coeficiente de 1er grado: "; 4 cin >> b; 5 cout << "\nintroduce coeficiente independiente: "; 6 cin >> c; 7 r1 = ( -b + sqrt( b*b-4*a*c ) ) / (2*a); 8 r2 = ( -b - sqrt( b*b-4*a*c ) ) / (2*a); 9 cout << "Las raíces son" << r1 << " y " << r2 << endl;

Estructura Secuencial Si bien el programa anterior es correcto, no es capaz de manejar situaciones excepcionales. Por ejemplo, qué pasa en la sentencia: r1 = ( -b + sqrt( b*b-4*a*c ) ) / (2*a); si a = 0 o b*b-4*a*c < 0? En el primer caso, obtendríamos un error de ejecución por intentar hacer una división por cero. Solución: primero comprobar (mediante estructuras condicionales), y no efectuar el cálculo si no es posible Pero antes...

Diagrama de Flujo Es una representación gráfica de un algoritmo Se construyen a partir de símbolos especiales que se conectan mediante flechas que indican el flujo de ejecución. Inicio Condición Estructura Secuencial Fin Operaciones de E/S Dirección de Flujo

Ejemplo del Cálculo de Raíces (suponiendo discriminante no negativo)

Estructura Condicional Tambien selección recibe el nombre de estructura de Permite elegir entre diferentes cursos de acción en función de condiciones. Si la nota del examen es mayor o igual que 5 mostrar Aprobado Si la condición es verdadera, entonces se ejecuta la sentencia mostrar, y luego el programa continuaría en la sentencia siguiente al Si Si la condición es falsa, la sentencia mostrar se ignora y el programa continúa

Estructura Condicional Simple La instrucción en pseudo código Si la nota del examen es mayor o igual que 5 mostrar Aprobado Se traduce a C++ mediante una sentencia condicional simple: if ( nota >= 5 ) cout << Aprobado ; Una expresión lógica La forma general es: if (<condicion>) <bloque if>; Una sentencia o conjunto de sentencias (encerradas entre { )

Estructura Condicional Simple El diagrama de flujo asociado es: Expr Cond. True False Bloque IF

Cálculo de Raíces // Calculo de Raices: control de la variable a #include <iostream> #include <cmath> using namespace std; int main(){ double a,b,c,r1,r2; 1 cout << "\nintroduce coeficiente de 2o grado: "; 2 cin >> a; 3 cout << "\nintroduce coeficiente de 1er grado: "; 4 cin >> b; 5 cout << "\nintroduce coeficiente independiente: "; 6 cin >> c; 7 if (a!=0) { 8 r1 = ( -b + sqrt( b*b-4*a*c ) ) / (2*a); 9 r2 = ( -b - sqrt( b*b-4*a*c ) ) / (2*a); 10 cout << "Las raíces son" << r1 << " y << r2;

Cálculo de Raíces (2) Esta aproximación no calcula raíces si a=0. Cómo hacer que también calcule la solución si a=0 (ecuación de primer grado)? 11 if (a==0) 12 cout << Tiene una única raíz " << -c/b << endl; Algo a considerar: las condiciones son excluyentes (a vale cero o a vale distinto de cero)

Estructura Condicional Doble Permite elegir entre 2 cursos de acción diferentes en función del valor de verdad de una expresión lógica. Si la nota del examen es mayor o igual que 5 mostrar Aprobado Si no mostrar Suspenso En C++: if ( nota >= 5 ) cout << Aprobado ; else cout << Suspenso ; La forma general es: if( <condicion> ) < bloque if >; else < bloque else >;

Estructura Condicional Doble El diagrama de flujo asociado es: False Expr Cond. True Bloque ELSE Bloque IF

Cálculo de Raíces En la ecuación de segundo grado, cuando a = 0, entonces la raíz es única y vale c/b 7 if (a!=0) { 8 r1 = ( -b + sqrt( b*b-4*a*c ) ) / (2*a); 9 r2 = ( -b - sqrt( b*b-4*a*c ) ) / (2*a); 10 cout << "Las raíces son" << r1 << "y << r2; 11 else { 12 r1 = -c / b; 13 cout << La unica raiz es: << r1; // Fin Bloque // Inicio Bloque // Inicio Bloque // Fin Bloque Los bloques comienzan con { y terminan con

Ejemplo: el mayor de tres números Cómo hacer para calcular el máximo de tres números a, b y c y almacenar el resultado en una variable max cuyo valor se mostrará por pantalla al final?

Ejemplo: el mayor de tres (2) // Programa para calcular el máximo de tres números // que se almacenará en otra variable y se // mostrará en la pantalla #include <iostream> #include <cmath> using namespace std; int main() { int a, b, c, max; 1 cout << Valor de a: ; cin >> a; 2 cout << Valor de b: ; cin >> b; 3 cout << Valor de c: ; cin >> c;...

Ejemplo: el mayor de tres (3)... 4 if ((a>=b) && (a>=c)) 5 max = a; 6 if ((b>=a) && (b>=c)) 7 max = b; 8 if ((c>=a) && (c>=b)) 9 max = c; 10 cout << El mayor es << max << endl;

Ejemplo: el mayor de tres (4) (a>=b) y (a>=c) true max = a false (b>=a) y (b>=c) true max = b cout << max false (c>=a) y (c>=b) true max = c false

Anidamiento de Estructuras Condicionales Si la nota es mayor o igual que 9 imprimir "Sobresaliente else Si la nota es mayor o igual que 7 imprimir "Notable" else Si la nota es mayor o igual que 5 imprimir "Aprobado" else imprimir "Suspenso" if (nota>=90) cout << A ; else if (nota>=80) cout << B ; else if (nota>=70) cout << C ; else if (nota>=60) cout << D ; else cout << E ;

Cuando se ejecuta cada instrucción? if (condic_1) {inst_1; if (condic_2) {inst_2; else { inst_3; inst_4; else { inst_5; condic_1 condic_2 inst_1 true independiente inst_2 true true inst_3 true false inst_4 true independiente inst_5 false independiente

Ejemplo: el mayor de tres (5)... 4 if (a>=b) 5 if (a>=c) 6 max = a; 7 else 8 max = c; 9 else 7 if (b>=c) 4 max = b; 5 else 6 max = c;... Opción 2

Ejemplo: el mayor de tres (6) false a>=b true false b>=c true false a>=c true max = c max = b max = c max = a Imprime max

Ejemplo: el mayor de tres (7)... 4 if (a>=b) 5 max = a; 6 else 7 max = b; 8 if (c>max) 9 max = c;... Opción 3

Ejemplo: el mayor de tres (8) false a>=b true max = b max = a c>max true false max = c Imprime max

Ejemplo: el mayor de tres (8) Opción 1 Opción 2 Opción 3 Condiciones 3 2 2 Asignaciones 1 1 1 ó 2 Buscaremos un término medio entre Eficiencia y Elegancia

Ejercicios Completar el programa de la ecuación de segundo grado, teniendo en cuenta los valores del discriminante también. Implementa un programa que calcule el mayor de cuatro números.

Ejemplo #include <iostream> using namespace std; int main(){ int dato1,dato2; char opcion; En este caso, las condiciones no son excluyentes cout << "Introduce el primer operando: "; cin >> dato1; cout << "Introduce el segundo operando: "; cin >> dato2; cout << "Selecciona (S) sumar, (R) restar: "; cin >> opcion; if (opcion == 'S') cout << "Suma = " << dato1+dato2 << endl; if (opcion == 'R') cout << "Resta = " << dato1-dato2 << endl; if ((opcion!= 'R') && (opcion!= 'S')) cout << "Ninguna operacion\n";

Ejemplo #include <iostream> using namespace std; Más eficiente int main(){ int dato1,dato2; char opcion; cout << "Introduce el primer operando: "; cin >> dato1; cout << "Introduce el segundo operando: "; cin >> dato2; cout << "Selecciona (S) sumar, (R) restar: "; cin >> opcion; if (opcion == 'S') cout << "Suma = " << dato1+dato2 << endl; else if (opcion == 'R') cout << "Resta = " << dato1-dato2 << endl; else cout << "Ninguna operacion\n";

Estructura Condicional Múltiple Permite definir en una sola estructura, una serie de pares (condición, acción), con condiciones mútuamente excluyentes. Muy utilizada en la construcción de menús. switch (<expresión>) { case<constante1>:<sentencias1> break; case <constante2>:<sentencias2> break;... [default: <sentencias>]

Estructura Condicional Múltiple <expresión> es una expresión entera o carácter. <constante1> ó <constante2> es un literal tipo entero o tipo carácter. switch sólo comprueba la igualdad. No debe haber dos casos (case) con la misma <constante> en el mismo switch. Si esto ocurre, sólo se ejecutan las sentencias correspondientes al caso que aparezca primero. El identificador especial default permite incluir un caso por defecto, que se ejecutará si no se cumple ningún otro. Se suele colocar como el último de los casos. En las estructuras condicionales múltiples también se permite el anidamiento.

Ejemplo 1 #include <iostream> using namespace std; int main(){ int dato1,dato2; char opcion; cout << "Introduce el primer operando: "; cin >> dato1; cout << "Introduce el segundo operando: "; cin >> dato2; cout << "Selecciona (S) sumar, (R) restar: "; cin >> opcion; switch (opcion){ case 'S': {cout << "Suma = " << dato1+dato2 << endl; break; case 'R': {cout << "Resta = " << dato1-dato2 << endl; break; default: cout << "Ninguna operacion\n";

Ejemplo 2 cout << "Introduce el primer operando: "; cin >> dato1; cout << "Introduce el segundo operando: "; cin >> dato2; cout << "Selecciona (S) sumar, (R) restar: "; cin >> opcion; switch (opcion){ case 's': case 'S': {cout << "Suma = " << dato1+dato2 << endl; break; case 'r': case 'R': {cout << "Resta = " << dato1-dato2 << endl; break; default: cout << "Ninguna operacion\n";

Estructuras Repetitivas

Estructuras Repetitivas Las estructuras repetitivas son también conocidas como bucles, ciclos o lazos. Una estructura repetitiva permite la ejecución de un conjunto de sentencias: hasta que se satisface una determinada condición (controladas por condición) un número determinado de veces (controladas por contador)

Bucles Controlados por Condición Se ejecuta el conjunto de sentencias de interés mientras la condición sea verdadera. Existen dos formas básicas de construcción: Pre - Test while (< condición>){ <cuerpo del bucle> Primero se pregunta y luego se ejecuta Post - Test do{ <cuerpo del bucle> while (< condición>); Primero se ejecuta luego se pregunta

Bucles (Pre / Post) Test Pre - Test Post - Test False Condición True <Cuerpo Bucle> <Cuerpo Bucle> True Condición False

Ejemplo Escribir 10 líneas con 4 estrellas cada una cont = 1; do { cout << "****" << endl; cont = cont + 1; while (cont <= 10); cont = 0; do { cout << "****" << endl; cont = cont + 1; while (cont < 10); cont = 1; while (cont <= 10) {cout << "****" << endl; cont = cont + 1; cont = 0; while (cont < 10) {cout << "****" << endl; cont = cont + 1;

Ejemplo Escribir tope líneas con 4 estrellas cada una cin >> tope cont = 0; do { cout << "****" << endl; cont = cont + 1; while (cont < tope); Problema si tope = 0 cin >> tope; cont = 0; Solución while (cont < tope) {cout << "****" << endl; cont = cont + 1;

Ejemplo Escribir los números pares entre [0..tope] cin >> tope i = 0; while (i <= tope) {cout << i << endl; i = i + 2; Qué ocurre si el código anterior se cambia por : cin >> tope i = 0; while (i <= tope) {i = i + 2; cout << i << endl; El 0 no se imprime e imprime un número par de más

Ejemplo: control por centinela Sumar valores que se leen por teclado hasta que se lee -1. (el valor utilizado para detener el procesamiento se conoce como centinela) suma = 0; do {cin >> valor; suma = suma + valor; while (valor!= -1) cout << "La suma es" << suma; Se procesa el valor centinela. Esta clase de problemas se evita utilizando la técnica de lectura anticipada. Lectura anticipada: se usa un bucle pre-test y se comprueba el primer valor. suma = 0; cin >> valor; while (valor!= -1) {suma = suma + valor; cin >> valor; cout << "La suma es" << suma;

Ciclos post-test como Filtros en la Entrada de Datos Los ciclos post-test son útiles para forzar que los datos de entrada pertenezcan a un rango o conjunto de opciones predeterminados. // filtro para valores positivos do {cout << "Introduzca un valor > 0:"; cin >> valor; while (valor < 0); // filtro para 's','s','n','n' do {cout << "Desea Salir (s/n)?:"; cin >> opc; while((opc!= 's')&&(opc!='s') &&(opc!= 'n')&&(opc!= 'N'));

Ejemplo: lectura anticipada (1) // Programa que va leyendo números enteros hasta que // se introduzca el cero. Imprimir el número de // pares e impares introducidos #include <iostream> using namespace std; int main(){ int ContPar, ContImpar, valor; ContPar=0; ContImpar=0; cout << "Introduce valor: \n"; cin >> valor;...

Ejemplo: lectura anticipada (1)... while (valor!= 0) { if (valor % 2 == 0) ContPar = ContPar + 1; else ContImpar = ContImpar + 1; cout << "Introduce valor: \n"; cin >> valor; cout << "Fueron " << ContPar << " pares y " << ContImpar << " impares\n";

Problema para Resolver Tenemos que realizar un programa que calcule la nota promedio de un conjunto de notas. La cantidad de notas puede variar en cada ejecución del programa. Utilizaremos un valor "centinela" para indicar el fin de las notas. El proceso terminará cuando se ingrese dicho valor El valor concreto del centinela debe ser diferente al de cualquier posible entrada válida (en este caso podría ser -1)

Bucles sin fin Bucle al que la evaluación de la condición nunca le permite dejar de ejecutarse. contador = 2; while (contador < 3) { contador--; = contador 1; cout << contador << endl; contador = 1; while (contador!= 10) { contador = contador + 2;

Utilidad: filtros con bucles post-test // Introducir un único valor, pero positivo. // Imprimir el coseno. // Entrada: Un valor entero positivo. // Salida: El coseno del valor introducido. #include <iostream> #include <cmath> using namespace std; int main(){ int valor; do { cout << "\nintroduzca un valor positivo: "; cin >> valor; while (valor < 0); cout << cos(valor); Sigue pidiendo el valor mientras sea negativo (hasta que sea positivo)

Utilidad: filtros con bucles (2) char opcion; Sigue pidiendo la do{ opción mientras cout << "Introduzca una opción: sea \n"; distinta de cin >> opcion; s, S, n y N while ((opcion!='s') && (opcion!='s') (hasta que && sea (opcion!='n') && (opcion!='n') una de ); ellas)

Bucles controlados por contador Se utilizan para repetir un conjunto de sentencias un número fijo de veces. Se necesita una variable controladora, un valor inicial, un valor final y un incremento.

Ejemplo // Hallar la media de 5 números enteros. // Entradas: 5 números enteros (se leen en valor). // Salidas: La media de los 5 números. int main(){ int i, valor, suma; double media; Valor inicial del contador suma = 0; Prueba de límites del i = 1; valor del contador while (i <= 5){ cout << "Introduce el número " << i << "o: \n"; cin >> valor; suma = suma + valor; i++; media = suma / 5.0; Incremento del valor del contador cout << "La media es " << media << endl;

Ejemplo: diagrama de flujo v_c = v_inic false v_c <= v_final true Cuerpo del bucle true V_c= v_c+ v_incr Existe un tipo específico de bucles con esta utilidad

Pseudo Código y Refinamientos Sucesivos Nuestro problema es: Determinar el promedio de las notas de un examen Esta tarea la podemos subdividir en otras más pequeñas: 1. Inicializar variables 2. Ingresar, Sumar y Contar las notas del examen 3. Calcular e imprimir el promedio

La fase de inicialización Inicializar variables se puede refinar a: Inicializar la variable total a cero Inicializar el contador de notas a cero La fase Ingresar, Sumar y Contar las notas del examen se puede refinar a Ingresar la primera nota (posiblemente el centinela) Mientras el usuario no ingrese el valor centinela sumar la nota al total sumar uno al contador Ingresar la siguiente nota (posiblemente el centinela)

La fase Calcular e imprimir el promedio se puede refinar a Si la cantidad de notas es distinta de cero el promedio es la suma de las notas dividido la cantidad Imprimir el promedio En caso contrario Imprimir No se ingresaron notas"

Resolución en PseudoCodigo Inicializar la variable total a cero Inicializar el contador de notas a cero Ingresar la primera nota (posiblemente el centinela) Mientras el usuario no ingrese el valor centinela sumar la nota al total sumar uno al contador Ingresar la siguiente nota (posiblemente el centinela) Si la cantidad de notas es distinta de cero el promedio es la suma de las notas dividido la cantidad Imprimir el promedio En caso contrario Imprimir No se ingresaron notas"

Resolución en C++. const double CENTINELA = -1.0; int main() { double contador, suma, avg, nota; suma = 0; contador = 0; cout << "Ingrese la nota (-1 para fin) "; cin >> nota; while (nota!= CENTINELA) {suma = suma + nota; contador = contador + 1; cout << "Ingrese la nota (-1 para fin) "; cin >> nota; if(contador > 0) {avg = suma / contador; cout << " El promedio es " << avg; else cout << " No se ingresaron notas "; Ejecutar

Bucles controlados por Contador: FOR SI conocemos exactamente la cantidad de veces que necesitamos repetir un conjunto de sentencias, entonces podemos usar un bucle FOR. En general, los bucles controlados por contador requieren una variable de control o contador Un valor inicial para el contador Un valor final para el contador Una condición para verificar si la variable de control alcanzó su valor final. Un valor de incremento (o decremento) con el cual se modifica la variable de control en cada bucle

Bucles controlados por Contador: FOR La forma general del bucle FOR es: for (inicializacion; condicion continuación;incremento ) < conjunto de sentencias> Ejemplo: imprimir los valores enteros entre 1 y 10 for( nro = 1; nro <= 10; nro = nro + 1) cout << nro << endl;

Diagrama de Flujo del FOR Inicialización False Condición True <Cuerpo Bucle> Incremento

Relación entre FOR y WHILE Se debe notar que los bucles FOR se pueden reescribir como bucles WHILE for ( inicializacion; condicion continuación, incremento ) < conjunto de sentencias> inicializacion while (condicion continuacion) < conjunto de sentencias> incremento

Ejemplos // tabla de multiplicar de un nro dado int i,nro; cin >> nro; for(i = 1; i <= 10; i = i + 1) {cout << nro * i << endl; // sumar los nros pares entre 2 y 200 int i,suma; suma = 0; for(i = 2; i <= 200; i = i + 2) { suma = suma + i; cout << "la suma es " << suma << endl;

Ejemplos // tabla de multiplicar de un nro dado int i,nro; cin >> nro; i = 1; while (i <= 10) {cout << nro * i << endl; i = i+1; // sumar los nros pares entre 2 y 200 int i,suma; suma = 0; i = 2; while (i <= 200) { suma = suma + i; i = i+2; cout << "la suma es " << suma << endl;