Está en la página 1de 79

contenido

Introducción - Flujos

Dar formato a números para la salida del programa.


• cin y cout -Impresión de una línea de texto
• Lectura desde el teclado
• Puesta en cascada de los operadores de Inserción/ extracción de
flujo.
• Salida de caracteres con la funcion put, put en cascada
• Eof en cin

Entrada/ salida de string funcion setw

Entrada de strings, funciones cin.get()

Funciones putback, peek y ws

Bases: dec, oct, hex y setbase

Precision de punto flotante(precisión, set precision)

Estados de formato de flujo

Ceros a la derecha y puntos decimales

1
Introducción

• Las bibliotecas estándar de C++ tienen un amplio conjunto de


capacidades de entrada/salida(E/S).
• C++ utiliza E/S a prueba de tipos, las operaciones de E/S se realizan
de forma automática y de forma sensible al tipo de datos.
• Para poder emplear los elementos que permitan la entrada y salida
de datos del medio estándar de entrada y salida usaremos
primordialmente la biblioteca iostream. Sin embargo, para poder
manipular los datos, sobre todo para la salida de datos, se podrá
emplear la biblioteca iomanip, como veremos más adelante.

2
Flujos

• La E/S de C++ se da en flujos de bytes. Un flujo es


simplemente una secuencia de bytes. En las operaciones de
entrada, los bytes fluyen desde un dispositivo (por ejemplo un
teclado, una unidad de disco) hacia la memoria principal.
• En operaciones de salida los bytes fluyen de la memoria
principal hacia un dispositivo (por ejemplo una pantalla, una
impresora, una unidad de disco).
• La aplicación asocia significado a los bytes. Pueden
representar caracteres ASCII, o cualquier otro tipo de
información que pueda requerir una aplicación.
3
Entendiendo las bibliotecas en C++

• Por otro lado, debemos tener presente que para el lenguaje C++ se han venido
desarrollando una infinidad de bibliotecas de funciones y clases, lo que ha traído
como consecuencia que en muchos casos se empleen en un mismo programa dos
a más bibliotecas que definan las mismas clases u objetos, lo que trae como
consecuencia una interrupción en el proceso de compilación.
• Para solucionar este problema, el lenguaje ha implementado un mecanismo por
medio del cual los elementos definidos en una biblioteca se pueden colocar
dentro de un ámbito, identificado con un nombre, ese ámbito se conoce con el
nombre de "espacio de nombres" (la implementación de un espacio de nombres
se desarrollará en el capítulo de funciones, aquí solo lo emplearemos).
• Para el caso de las bibliotecas iostream e iomanip, el espacio de nombres que se
ha definido en ambos casos se denomina std que viene del inglés standard.

4
cin y cout -Impresión de una línea de texto
• cin es el flujo de entrada estándar que normalmente es el teclado y
cout es el flujo de salida estándar que por lo general es la pantalla.
• iostream es el archivo de encabezado del flujo de entrada/salida.
Este archivo debe incluirse cuando se utilicen cin o cout. En vez de
\n podemos poner endl, como a continuación:

5
Lectura desde el teclado
• La instrucción cin >> i1; obtiene un valor desde el teclado. El usuario
debe introducir un valor y luego enter. cin saltea los espacios en
blanco, los tabuladores y el salto de línea.
• endl envía a la salida un salto de línea.

6
Puesta en cascada de los operadores inserción/
extracción de flujo
• Los operadores << y >> pueden utilizarse en forma de cascada, como por
ejemplo en:
cout << “47 mas 53 es:”<< (47 + 53) << endl;
se ejecutan como si hubieran sido escritas en la forma:
(((cout << ”47 mas 53 es ”) << (47 + 53)) << endl);
o sea que asocia de izquierda a derecha. Esto funciona porque cout << a;
devuelve una referencia hacia su operando izquierdo, es decir cout.
• Por lo tanto:
(cout << “47 mas 53 es ”) envía a la salida la cadena de caracteres especificada
y devuelve una referencia a cout. De igual forma: cin >> a >> b;
realiza la entrada en a y devuelve una referencia a cin la cual realiza la entrada
en b.

7
Uso de cout.width
• En el primer caso se emplea: cout.width(n), donde cout.width
representa el llamado a ejecución de la función miembro (método)
width que pertenece a (es miembro de) cout. n es un valor entero que
indica la cantidad mínima de caracteres a emplear en la salida del valor
(es equivalente al uso de %nd en el lenguaje C).
• El ejemplo siguiente muestra el efecto de esta función:

8
Explicando cout.width
• Aquí podemos ver algunas cosas que son muy significativas, la primera es
que la instrucción de formato y la instrucción que envía el valor de salida
van por separado. La segunda y más importante es que el formato se aplica
solo a la operación de salida inmediata, al resto no se aplica, por lo que se
deberá anteponer en cada instrucción de salida.
• A esto hay que recordar que el operador << se aplica una sola vez con el
objeto cout, pero como esta operación luego de enviar el resultado al medio
de salida devuelve una referencia al objeto cout, la operación se puede
concatenar en la forma cout << a << b << c << ..., por esta razón el formato
solo se aplicará al primer valor, como podemos ver en el ejemplo siguiente:
int a = 2351, b = 765, b = 1234;
cout.width(10)
cout << a << b << endl;
cout << c << endl;

9
cout_width y cout_width_2

10
Pregunta01
• Codifique en c++ para obtener el siguiente resultado

11
Salida de caracteres con la funcion put, put en cascada
La función miembro put envía a la salida un carácter, por ejemplo: cout.put(’A’);
lo cual despliega una A en pantalla.
Las llamadas a put pueden ponerse en cascada como en: cout.put(’A’).put(’\n’);
lo cual da salida a A seguida de un carácter de nueva línea.
El operador punto (.) asocia de izquierda a derecha y la función miembro put
devuelve una
referencia al objeto mediante el que se realizo la llamada a put.
put también puede invocarse mediante una expresión de valor ASCII, como en
cout.put(65) que también da salida a A.
por ejemplo:
cout.put(’A’).put(’\n’).put(’B’).put(65);
imprime:
A
BA

12
cout.put
• El método toma el carácter contenido en la variable "c" y lo envía al
medio de salida. El siguiente ejemplo muestra su uso:

13
Eof en cin
• El operador de extracción de flujo era >>. Cuando este encuentra el
fin de archivo en una entrada, devuelve cero (false), de lo contrario
devuelve una referencia al objeto mediante el cual es llamado (cin).
Por ejemplo, podemos escribir el programa:

14
Entrada/ salida de string funcion setw
Es posible asignar una cadena a un arreglo de caracteres utilizando cin
y setw como sigue:

15
Uso del setw
• En el segundo caso emplearemos una función definida en la biblioteca
iomanip. Se trata de setw(n).
• Esta función, al igual que cout.width(n), define la mínima cantidad de
caracteres en a que se representará el valor, sin embargo la forma de
emplearla es mucho más sencilla y práctica, como veremos a
continuación:
int a = 2351, b = 765, c = 1234;
cout << setw(10) << a << setw(10) << b << endl;
cout << setw(10) << c << endl;

16
Entrada de strings, funciones cin.get() y cin.getline()
• cin.get() (sin argumentos), La función cin.get() lee un carácter desde
el teclado. a=cin.get() almacena el carácter leído en la variable a.
• Se pueden introducir blancos, tabuladores y nueva línea en a (idem to
getchar). Consideremos el siguiente programa:
Si ingreso una palabra
de largo mayor o igual a
tres, se cargaran
caracteres en a, b y c. Si
hubieran mas
instrucciones de lectura a
continuación leerían los
caracteres restantes (si
el largo de la palabra
ingresada es mayor que
tres).
17
Otro ejemplo de cin.get
• El método toma un carácter del buffer de entrada y lo entrega al
programa. El siguiente ejemplo muestra su efecto:

18
cin.get (a,b,c – 3 argumentos)
Hay otra versión de la función get que toma tres argumentos: un
arreglo de caracteres, un límite de tamaño y un delimitador (con un
valor predeterminado de ’nn’). Esta versión lee caracteres desde el flujo
de entrada, lee hasta uno menos que el número de caracteres
especificado y termina o termina antes si lee el delimitador.
Esta función inserta el carácter nulo ’n0’ al final del arreglo de
caracteres. El delimitador no se coloca en el arreglo pero permanece en
el flujo de entrada y sería el siguiente carácter que se lea en una
instrucción de entrada.
Al igual que el get sin argumentos ingresa espacios en blanco, nueva
línea y tabulador (en el caso de que estos no sean delimitadores). Por
ejemplo:
19
20
cin.unget()
• El método envía al buffer de entrada el último carácter extraído por el
método cin.get().
• Los ejemplos siguientes mostrarán el efecto de este método:
• // Ejemplo 1, sin usar cin.unget()

Escuela de Estudios Generales - UNMSM 21


cin.unget() parte II

22
Funciones peek y putback
• El método peek obtiene una copia del carácter del buffer de entrada,
sin extraerlo y lo entrega al programa. En el ejemplo siguiente se
podrá ver el efecto de este método:

23
cin.putback(c)
El método es similar a cin.unget() con la diferencia que el usuario
puede enviar al buffer de
entrada el carácter que desee. En el ejemplo siguiente se podrá ver su
efecto:

24
Funcion ws
• La función permite extraer del buffer de entrada todos los espacios
(espacios en blanco, tabuladores y cambios de línea) que vaya
encontrando hasta encontrar un carácter no blanco. Observe los
siguientes códigos:
• // Ejemplo 1, sin usar ws

25
Funcion ws
• Usando ws

26
Bases: dec, oct, hex y setbase –banderas de formato
• Los enteros normalmente se interpretan como valores decimales.
Para cambiar la base sobre la que se interpretan los enteros
insertamos hex (para establecer la base a hexadecimal), oct (para
establecer la base a octal), o dec (para reestablecer la base a
decimal).
• La base también se puede cambiar utilizando setbase el cual toma un
argumento entero de 10, 8 o 16. Se requiere el archivo de
encabezado <iomanip>.
• Las banderas de formato (format flags) son constantes que permiten
definir ciertos atributos que influenciarán en la forma cómo
aparecerán los datos en el medio de salida. Los ejemplos siguiente
muestra alguno de ellos:

27
left y right
• Observe que el formato se mantiene en todos los casos, sin embargo
el uso de los elementos "left" y "right" harán que los resultados se
alineen a la izquierda o a la derecha respectivamente. También se
puede ver que una vez que se ejecuta el elemento, la alineación se
mantenga hasta que se use de otro elemento lo cambie. Un segundo
ejemplo de estas banderas podemos verlas a continuación:

28
• Las banderas, "hex", "oct" y "dec" controlan la base (16, 8 y 10) en la
que aparecerán los valores en la salida. Las banderas "uppercase", y
"nouppercase" determinan la forma en que se mostrarán las letras en
el formato hexadecimal, mayúsculas o minúsculas respectivamente.
• Observe también que los formatos se mantienen hasta que se levante
otra bandera. Finalmente mostraremos cómo poder rellenar los
espacios colocados en los formatos con otro carácter diferente:

29
Precisión de punto flotante(precisión, set precisión)
• Por defecto, los valores de punto flotante aparecerán con un formato pre establecido. El ejemplo
siguiente muestra este detalle:
• double f = 3.1415926535;
• double g = 0.0000012345;
• cout << f << endl;
• cout << -f << endl;
• cout << g << endl;
• cout << -g << endl;
La salida será: 3.14159
-3.14159
1.2345e-006
-1.2345e-006

30
Precisión de punto flotante(precisión, set precisión)
• Para dar format a valores de punto flotante, C++ requiere del uso de
dos herramientas, una que define la precisión en la que aparecerá el
número (cout.presicion(n) o setpresicion(n)) y la otra que interpretará
el significado de la precisión (fixed).
• Por defecto cout.presicion(n) y setpresicion(n), define la cantidad de
cifras o dígitos que se mostrarán en el medio de salida, entiéndase
que esto se refiere al número de dígitos, no al número de cifras
decimales. El siguiente ejemplo muestra este detalle:

Escuela de Estudios Generales - UNMSM 31


• La figura anterior confirma lo explicado, cout.presicion(n) y
setpresicion(n) no definen el número de decimales sino el número de
dígitos que aparecerán en la salida. Por eso se requiere otra
herramienta, en este caso fixed. Al activar esta bandera, el valor de
precisión se interpretará como el número de decimales. Entonces:

32
Estados de formato de flujo

• Utilizamos las funciones setf, unsetf y flags para setear y resetear los
indicadores. Los indicadores son: ios::skipws = se saltea los caracteres de
espacio en blanco en un flujo de entrada
• ios::left = alinea la salida a la izquierda de un campo. Los caracteres de
relleno aparecen a la derecha en caso necesario
• ios::right = alinea la salida a la derecha de un campo. Los caracteres de
relleno aparecen a la izquierda en caso necesario.
• ios::internal = indica que el signo de un numero debe estar alineado a la
izquierda y la magnitud alineada a la derecha. Los caracteres de relleno
aparecen en el medio, entre el signo y el numero.
• ios::dec = especifica que los enteros deben tratarse como valores decimales.
• ios::oct = especifica que los enteros deben tratarse como valores octales.

33
Estados de formato de flujo

• ios::hex = especifica que los enteros deben tratarse como valores hexadecimales.
• ios::showbase = especifica que la base de un numero debe aparecer en la salida al
inicio de un numero (0 para los octales, 0x para los hexadecimales).
• ios::showpoint = especifica que los números de punto flotante deben aparecer en la
salida con un punto decimal.
• ios::uppercase = especifica que se debe utilizar X mayúscula en 0X antes de un entero
hexadecimal y E mayúscula cuando se utiliza notación científica para números en
punto flotante.
• ios::showpos = especifica que los números positivos y negativos deben estar
precedidos del signo.
• ios::scientiflc = especifica que la salida de un valor de punto flotante debe estar en
notación científica.
• setiosflags hace lo mismo que setf.resetiosflags hace lo mismo que unsetf. Se necesita
el archivo de encabezado iomanip

34
Ceros a la derecha y puntos decimales
• El indicador showpoint se establece para forzar que un número de
punto flotante aparezca en la salida con su punto decimal y sus ceros a
la derecha. 79.0 se imprimirá como 79 cuando showpoint no este
establecido y como 79.000 (con tantos ceros a la derecha como lo
especifique la precisión) cuando si este establecido.
• Ejemplo:

35
verdadero =1
Instrucción while while(expresion)
{
bloque de instrucciones
}
// continua con el codigo

Expresión ≠0

no
Mientras la expresión sea
si
diferente de cero
Bloque de instrucciones
(verdadera) se ejecuta el
bloque de instrucciones
Instrucción while
Sintaxis:
while (expresión)
bloque;

El bloque de instrucciones se ejecutará mientras


el valor de la expresión sea verdadero. De lo
contrario se continua con la siguiente
instrucción.
Ejemplo 1- Instrucción while
Escriba un programa en C++ que permita imprimir los cinco
primeros números positivos.
• Datos de entrada: Ninguno
• Datos de salida: Impresión de los cinco primeros números
positivos
• Restricciones: Ninguna

int main()
{ int contador;
contador = 1;
while (contador <= 5)
{ cout<<"contador = " << contador << "\n";
contador = contador +1;
}
_getch();
return 0;
}
Ejemplo 2 - Instrucción while (Solución 1)
Dado un numero n=7 generar 7,6,5,4,3,2,1 .
• Datos de entrada: n
• Datos de salida: Impresión de la serie de números positivos
• Restricciones: Ninguna

#include<iostream>
#include<conio.h>
using namespace std;
int main ()
{
int n, cont, serie;
cout<<"Cantidad de terminos:";
cin>> n;
cont = 1;
serie = n;
while(cont <= n)
{
cout<< serie << " ";
serie--; cont++; serie=serie-1;
} cont =cont+1
_getch();
return 0;
}
Ejemplo 2 - I nstrucción while (Solución 2)
Dado un numero n=7 generar 7,6,5,4,3,2,1 .
• Datos de entrada: n
• Datos de salida: Impresión de la serie de números positivos
• Restricciones: Ninguna

#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
int n;
cout<< "Cantidad de terminos:";
cin>> n;
while(n > 0)
{
cout<< n << " ";
n--;
}
_getch();
return 0;
}
Instrucción do…while
do{
bloque de instrucciones
}
while(expresion)

Bloque de instrucciones
• Se ejecuta el bloque de
instrucciones mientras la
si
expresión sea diferente de
cero.
Expresión ≠0 • Siempre se ejecuta el
bloque de instrucciones
no por lo menos una vez.
Instrucción do … while
Sintaxis:
do
bloque de instrucciones;
while (expresión);
El bloque de instrucciones se ejecutará mientras el
valor de la expresión sea verdadero. De lo contrario se
continua con la siguiente instrucción.
El bloque de instrucciones se ejecutará por lo menos
una vez.
Instrucción do … while
Escriba un programa en C++ que permita imprimir los cinco
primeros números positivos.
• Datos de entrada: Ninguno
• Datos de salida: Impresión de los cinco primeros números
positivos
• Restricciones: Ninguna

int main()
{
int contador;
contador = 1;
do
{ cout << "contador = " << contador << "\n";
contador = contador + 1;
} while (contador <= 5);
_getch();
return 0;
}
Instrucción while y do … while
El bloque de instrucciones puede estar constituido por una
o más instrucciones.

Si el bloque está compuesto por varias instrucciones se


encierran entre { }.

No olvide que:
▫ En el bloque de instrucciones se debe incluir alguna
instrucción que permita modificar el valor de la expresión
en a lgún momento para poder salir del lazo.
▫ En la instrucción do …while el bloque de instrucciones se
ejecuta por lo menos la primera vez.
Instrucción for
expresión 1

• Se ejecuta la expresión 1
expresión2 ≠0

si
• Mientras la expresión 2 sea
diferente de cero
Bloque de instrucciones
no
(verdadera) se ejecuta el
bloque de instrucciones y
la expresión 3
expresión 3
Instrucción for
Sintaxis:

for (expresión 1; expresión 2; expresión 3)


bloque;

▫ Primero se ejecuta la expresión 1.


▫ El bloque de instrucciones y la expresión 3 se
ejecutarán mientras el valor de la expresión 2 sea
verdadero.
Instrucción for
Escriba un programa en C++ que permita imprimir los cinco
primeros números positivos.
• Datos de entrada: Ninguno
• Datos de salida: Impresión de los cinco primeros números
positivos
• Restricciones: Ninguna

int main()
{
int contador;
for (contador = 1;contador < 6; contador++)
cout << "contador = " << contador << "\n";
_getch();
return 0;
}
Instrucción for
• Si se omite expresión 2 se asumirá el valor permanente de 1 y
el bloque se ejecutará de forma indefinida (bucle infinito).

• Inicialmente se ejecuta expresión 1, esta se realiza para


inicializar algún parámetro que controla la repetición del
bloque de instrucciones.

• La expresión 2 es una condición que debe ser verdadera para


que se ejecute el bloque.

• La expresión 3 s e utiliza para modificar el valor del parámetro


que controla el bucle.
Ejemplo 1 - For
Elaborar un programa en C++ que muestre los números pares
comprendidos entre 10 y 20 inclusive.
• Datos de entrada: Ninguno
• Datos de salida: Impresión de los pares entre 10 y 20
• Restricciones: Ninguna

int main()
{
int i;
cout<<"Los números pares entre 10 y 20 inclusive son:\n";
for(i = 10; i <= 20; i = i + 2)
cout << i << "\n";
_getch();
return 0;
}
Ejemplo 2 - For
Elaborar un programa en C++ que muestre los números pares
comprendidos entre 10 y 20 inclusive (Descendente).
• Datos de entrada: Ninguno
• Datos de salida: Impresión de los pares entre 10 y 20
• Restricciones: Ninguna

int main()
{
cout<< "Los números pares entre 10 y 20 inclusive son:\n";
int i;
for(i = 20;i >= 10; i = i-2)
cout << i << "\n";
_getch();
return 0;
}
Ejemplo 3 - For
Mostrar la tabla de caracteres ASCII a partir del Código 32 (el
espacio en blanco) hasta el Código 164 (o sea la ñ) sin incluir las
minúsculas ( rango del 97 al 122).
• Datos de entrada: Ninguno
• Datos de salida: Impresión de algunos caracteres ASCII
• Restricciones: Ninguna

int main()
{
cout << "Los Caracteres ASCII son: \n";
int i; i+=2 0 1
for(i = 32;i <= 164; i++)i+=1 if(i<97 || i>122)
if(i < 97 || i > 122) 1 0
cout << char(i)<< " " << i << "\n";
_getch();
return 0;
}
Sentencias
break , continue, exit
Temario
• break
• continue
• exit
break
• La proposición "break" permite una salida forzada de
las siguientes estructuras de control:
▫ do…while
▫ while
▫ for
▫ switch

• Es utilizado para provocar el fin de la ejecución de


una ECR o para salir de la sentencia switch.
Sentencia break
Realizar una aplicación en C++ que imprima los 6
primeros número pares que hay entre 1 y 20

int main()
{
int num, cont;
cont=0;
num=0;
while (num <= 20)
{ num = num + 1;
if (cont==6)
break;
if (num % 2 ==0)
{ cont = cont + 1;
cout << num << " ";
}
}
_getch();
return 0;
}
continue
• La proposición “continue" provoca un salto
obligatorio a la siguiente iteración dentro del ciclo de
las siguientes ECR:
▫ do…while
▫ while
▫ for

• La s entencia dentro de un bucle forzará al programa


a finalizar la iteración actual y a comenzar la
evaluación de la siguiente.
Sentencia continue
Realizar una aplicación en C++ que sume los
número pares comprendidos entre 1 y 10 inclusive

int main()
{
int i, suma;
suma=0;
for (i = 1; i <= 10; i++)
{
if (i % 2 != 0) // salta los impares
continue;

suma = suma + i; // aquí procesa los pares


}
cout << "La suma es : " << suma;
_getch();
return 0;
}
exit
Sintaxis:
exit (código)

▫ Si el código es 0, entonces la aplicación terminará


bajo la denominación de “éxito”
▫ Si el código diferente a 0, entonces la aplicación
terminará bajo la denominación de “fallo”

• Es una función que esta definida en la librería


<stdlib.h> y es utilizada para terminar la ejecución
programa actual, desde el lugar donde se le invoque.
Sentencia exit
Realizar una aplicación en C++ que pregunte al
usuario si desea salir del programa hasta que el
usuario ingrese la letra S.

int main()
{
char caracter;
while (1) //verdadero
{ cout << "Pulse el caracter S para salir ";
cin>> caracter;
if (caracter==’S’ || caracter==’s’)
exit(0);
}
return 0;
}
Ejercicio
Realizar una aplicación en C++ que permita ingresar un
conjunto de números enteros y nos determine la cantidad de
enteros ingresados, s i se sabe que se ingresarán números
hasta que el usuario digite el valor de cero.
int main()
{
int contador, numero;
contador=0;
while (1)
{ cout<<“Ingrese el numero 0 para salir ”;
cin>> numero;
if (numero == 0)
exit(0);
contador = contador + 1;
}
cout << “La cantidad de numeros ingresados es : ” << contador;
return 0;
}
COMPARANDO BUCLES: WHILE, FOR Y DO WHILE
• El ciclo while se ejecuta mientras la condición sea
While verdadera
for(i=1; i<=10; i++)
• Se usa cuando se trata de un conteo y cuando
el numero de iteraciones requeridas se pueden
for determinar desde el principio

• Se ejecuta muy similar al while, excepto que las


sentencias del bucle se ejecutan mas de una
Do while vez

36
Ej01:
escribir los números
10,20,30…100, usando los
bucles while, for y do while

37
int main(){

//6 6! =6*5*4*3*2*1

Ej02: leer un numero entero


positivo y calcular su
factorial, usando el bucle
con while, for y do while.

0;
38
Bucle do…while
• La sentencia do while se utiliza para especificar un bucle condicional
que se ejecuta al menos una vez.
• Sintaxis Semántica
do
sentencias Después de la ejecución de la
sentencia, se evalúa la
expresión, si es verdadera se
while(expresión) repite la(s) sentencia(s), si es
falsa se termina el bucle y se
las siguientes instrucciones del
programa.

El bucle do ..while constituye el ciclo de prueba posterior(ciclo controlado a la salida),


c ontinua las iteraciones a través del ciclo mientras la condición es verdadera, sale del
ciclo cuando la condición es falsa. 39
Estructura de un ciclo do.. While

El ciclo do.. While hace una prueba posterior, la


manera en como la realiza es usando do para hacer
instrucciones previas, las cuales serán evaluadas con
posterioridad con la expresión while.

0. Salir del Programa


1. Sumar valores
2. Restar Valores
3. Multiplicar

do
{
menu de opciones
switch(opcion)
case 0
case ...

}
while (opcion !=0) 40
Observe que el cout y el cin están al
inicio de la instrucción, las cuales son
comprobadas al final.
Hay que tener en cuenta que do
puede ser reemplaza por while, la
elección dependerá de la aplicación
y del estilo al programar, tener en
cuenta si se valida antes o después.

42
Verificación de validez – instrucción do
• La utilidad d e la instrucción do radica en que filtra los datos ingresados
por el usuario y posteriormente verifica.
• Suponga que se requiere que se ingrese la identificación de un código de
usuario que esta entre 1000 y 1999, un numero fuera de ese rango es
rechazado pidiéndose que se ingrese el numero que este dentro del rango solicitado.

//250 2250

0 1

1
1 10
0 0

43
PROBLEMAS PROPUESTOS
1.aUsando una instrucción do, escriba un programa para aceptar una calificación. El programa deberá solicitar una
calificación en forma continua en tanto se introduzca una calificación inválida. Una calificación inválida es cualquier calificación
menor que 0 o mayor que 100. Después que se ha introducido una calificación válida, su programa deberá desplegar el valor de
la calificación introducida.
b. Modifique el programa escrito para el ejercicio 1a de modo que el usuario sea alertado cuando se ha introducido una
calificación inválida.
c. Modifique el programa escrito para el ejercicio 1b de modo que permita al usuario salir del programa introduciendo el número
999.
d. Modifique el programa escrito para el ejercicio 1b de modo que termine en forma automática después que se han introducido
cinco calificaciones inválidas.
2. a. Escriba un programa que solicite en forma continua que se introduzca una calificación. Si la calificación es menor que 0 o
mayor que 100, su programa deberá imprimir un mensaje apropiado que informe al usuario que se ha introducido una
calificación inválida, de lo contrario la calificación deberá sumarse a un total. Cuando se introduzca una calificación de 999 el
programa deberá salir del ciclo de repetición y calcular y desplegar el promedio de las calificaciones válidas introducidas.
b. Ejecute el programa escrito en el ejercicio 2a en una computadora y verifique el programa usando datos de prueba
apropiados.
3. a. Escriba un programa para invertir los dígitos de un número entero positivo. Por ejemplo, si se introduce el número 8735, el
número desplegado deberá ser
5378.(Sugerencia: Use una instrucción do y continuamente quite y despliegue el dígito de las
unidades del número. Si la variable num en un inicio contiene el número introducido, el dígito de las unidades se obtiene como
(num % 10). Después que se despliega un dígito de unidades, dividir el número entre 10 establece el número para la siguiente
iteración. Por tanto (8735 % 10) es 5 y (8735 / 10) es 873. La instrucción do deberá continuar en tanto el número remanente no
sea cero.
44
b. Ejecute el programa escrito en el ejercicio 3a en una computadora y verifique el programa usando datos de prueba
apropiados.
En C++, esta distinción tan fácil no se sostiene, pues cada instrucción puede usarse
para crear cada tipo de ciclo. La respuesta en C++, entonces, en realidad es
cuestión de estilo. En vista que un ciclo for y uno while son intercambiables en C++,
cualquier ciclo es apropiado.

44
Que se obtiene con el siguiente código:

44
Técnicas de programación con ciclos
❑ Incluir una instrucción cin dentro de un while
❑ Introducir datos de forma interactiva dentro de un ciclo, es aplicable a la instrucción for.
❑ Se usa una instrucción cin para permitir a un usuario introducir de manera interactiva
un conjunto de números.
❑ Conforme se introduce cada número, es sumado a un total. Cuando se sale del ciclo for,
se calcula y se despliega el promedio.

44
COMPARANDO BUCLES: WHILE, FOR Y DO WHILE

• El ciclo while se ejecuta mientras la condición


While sea verdadera.

• Se usa cuando se trata de un conteo y cuando


el numero de iteraciones requeridas se pueden
for determinar desde el principio

• Se ejecuta muy similar al while, excepto que las


sentencias del bucle se ejecutan mas de una
Do while vez

71
Ej01:escribir los números
10,20,30…100, usando los
bucles while, for y do while

72
Ej02: leer un numero entero
positivo y calcular su
factorial, usando el bucle
con while, for y do while.

73
Bucle do…while
• La sentencia do while se utiliza para especificar un bucle condicional
que se ejecuta al menos una vez.
• Sintaxis Semántica
do
sentencias Después de la ejecución de la
sentencia, se evalúa la
expresión, si es verdadera se
while(expresión) repite la(s) sentencia(s), si es
falsa se termina el bucle y se
las siguientes instrucciones del
programa.

El bucle do ..while constituye el ciclo de prueba posterior(ciclo controlado a la salida),


continua las iteraciones a través del ciclo mientras la condición es verdadera, sale del
ciclo cuando la condición es falsa.
74
Estructura de un ciclo do.. While

El ciclo do.. While hace una prueba posterior, la


manera en como la realiza es usando do para hacer
instrucciones previas, las cuales serán evaluadas con
posterioridad con la expresión while.

75
Una cierta mejora seria el reemplazo
de la instrucción do por una
instrucción compuesta.
Observando el diagrama:
Las instrucciones que se encuentran
en el ámbito(dentro) de do se
ejecutan al menos una vez antes de
evaluar a la expresión.

76
Observe que el cout y el cin están al
inicio de la instrucción, las cuales son
comprobadas al final.
Hay que tener en cuenta que do
puede ser reemplaza por while, la
elección dependerá de la aplicación
y del estilo al programar, tener en
cuenta si se valida antes o después.

77
Verificación de validez – instrucción do
• La utilidad de la instrucción do radica en que filtra los datos ingresados
por el usuario y posteriormente verifica.
• Suponga que se requiere que se ingrese la identificación de un código de
usuario que esta entre 1000 y 1999, un numero fuera de ese rango es
rechazado pidiéndose que se ingrese el numero que este dentro del rango
solicitado.

78
PROBLEMAS PROPUESTOS
1.aUsando una instrucción do, escriba un programa para aceptar una calificación. El programa deberá solicitar una
calificación en forma continua en tanto se introduzca una calificación inválida. Una calificación inválida es cualquier calificación
menor que 0 o mayor que 100. Después que se ha introducido una calificación válida, su programa deberá desplegar el valor de
la calificación introducida.
b. Modifique el programa escrito para el ejercicio 1a de modo que el usuario sea alertado cuando se ha introducido una
calificación inválida.
c. Modifique el programa escrito para el ejercicio 1b de modo que permita al usuario salir del programa introduciendo el número
999.
d. Modifique el programa escrito para el ejercicio 1b de modo que termine en forma automática después que se han introducido
cinco calificaciones inválidas.
2. a. Escriba un programa que solicite en forma continua que se introduzca una calificación. Si la calificación es menor que 0 o
mayor que 100, su programa deberá imprimir un mensaje apropiado que informe al usuario que se ha introducido una
calificación inválida, de lo contrario la calificación deberá sumarse a un total. Cuando se introduzca una calificación de 999 el
programa deberá salir del ciclo de repetición y calcular y desplegar el promedio de las calificaciones válidas introducidas.
b. Ejecute el programa escrito en el ejercicio 2a en una computadora y verifique el programa usando datos de prueba
apropiados.
3. a. Escriba un programa para invertir los dígitos de un número entero positivo. Por ejemplo, si se introduce el número 8735, el
número desplegado deberá ser 5378.(Sugerencia: Use una instrucción do y continuamente quite y despliegue el dígito de las
unidades del número. Si la variable num en un inicio contiene el número introducido, el dígito de las unidades se obtiene como
(num % 10). Después que se despliega un dígito de unidades, dividir el número entre 10 establece el número para la siguiente
iteración. Por tanto (8735 % 10) es 5 y (8735 / 10) es 873. La instrucción do deberá continuar en tanto el número remanente no
sea cero.
b. Ejecute el programa escrito en el ejercicio 3a en una computadora y verifique el programa usando datos de prueba
apropiados. 79

También podría gustarte