Fandom

Scratchpad

PLE:Unidad22

215,808pages on
this wiki
Add New Page
Discuss this page0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Esta unidad es una continuación de la anterior y seguiremos estudiando las estructuras básicas del lenguaje C++. En primer lugar estudiaremos la entrada y salida básica para continuar con las estructuras de control.

En esta unidad veremos:

  • Entrada y salida por pantalla.
  • Sentencias de control de programa.
  • Sentencias de asignación.
  • Entrada y salida de flujo en C++

Entrada y salida básica

La entrada y salida de datos en C++ se lleva a cabo por medio de streams (flujos), que representan objetos desde (o hacia) los que podemos extraer o insertar caracteres deforma secuencial.

En el fichero de cabecera <iostream> se encuentran definidos los objetos para la entrada y salida estandar, dedominados cin y cout.

Salida estandar (cout)

La salida estandar en C++ es la pantalla de nuestro ordenador. El objeto asociado con dicha salida estandar es cout.

El objeto cout emplea al operador de inserción "<<" que nos servirá para pasarle los datos a insertat.

cout << "Hola";
cout << 489;
cout << 13.69;
cout << x;

Tambien es posible utilizar varias veces el operador de inserción para pasar varios datos en uns sola instrucción:

cout << "El valor de pi es = " << 3.1416;

Si queremos incluir saltos de linea podemos emplear el código de escape '\n' o bien el manipulador "endl".

cout << "Una linea.\n ";
cout << "segunda linea.\n"; 
cout << "tercera linea." << endl;
cout << "cuarta linea." << endl; 

Entrada estandar (cin)

El dispositivo de entrada estandar como podemos suponer es el teclado de nuestro ordenador. Para extraer datos desde el teclado empleamos el objeto "cin", que se utiliza en conjunción con el operador de extracción representado como ">>".

int numero;
cin >> numero; 

La lectura desde teclado se produce tras pulsar la tecla "Enter", incluso en el caso de que leamos un solo caracter.

Ejemplo

// Ejemplo de entrada y salida

#include <iostream>
using namespace std;

void main ()
{
  int n;
  cout << "Introduzca un numero: ";
  cin >> n;
  cout << "Numero es igual a " << n;
}


Tambien es posible llevar a cabo la lectura de varios valores en una única instrucción incluyendo varios operadores de extracción:

cin >> a >> b;

manipuladores

Los manipuladores son funciones especiales que permiten cambiar la apariencia de la salida o la entrada de cin y cout

setw

Nos permite definir el ancho de una salida.

Ejemplo:

#include <iostream>
#include <iomanip>
using namespace std;

void main() {
   float pi = 3.1416, n;

   cout << "El valor de pi es = " << setw(10) << pi << endl;
   cout << "El valor de pi es = " << setw(20) << pi << endl;
   cout << "El valor de pi es = " << setw(30) << pi << endl;

   cin.ignore();
   cin.get();
}

setbase

Cambia la base de numeración empleada en la salida o en la entrada. Se admiten como valores: 8, 10 y 16

Ejemplo:

#include <iostream>
#include <iomanip> 
using namespace std;
 
void main() {
   int n = 256;
 
   cout << "n(8)=" << setbase(8) << n << endl; 
   cout << "n(10)=" << setbase(10) << n << endl; 
   cout << "n(16)=" << setbase(16) << n << endl; 

   cout << "Introduzca un numero hexadecimal ";
   cin >> setbase(16) >> n;
   cout << "El valor de n es= " << setbase(10) << n;

}

setfill

Especifica el caracter de relleno cuando el ancho de la salida o de la entrada sea mayor que el necesario.

Ejemplo:

#include <iostream>
#include <iomanip>
using namespace std;

void main() {
   int n = 256;
 
   cout << setw(10) << setfill('_') << "Hola" << endl; 
   cout << setw(10) << setfill('0') << n << endl; 
}

setprecision

Fijamos el número de dígitos cuando se muestran valores reales

Ejemplo:



#include <iostream>
#include <iomanip>
using namespace std;
 
void main() {
   float pi = 3.141592;
 
   cout << "pi = " << setprecision(3) << pi << endl;
}

dec

Muestra la salida numérica en formato decimal (por defecto).

#include <iostream>
using namespace std;
 
void main() 
{
   int n = 256;
   
   cout << "n en formato decimal = " << dec << n; 
}

hex

Muestra la salida numérica en formato hexadecimal.

#include <iostream>
using namespace std;
 
void main() 
{
   int n = 256;
   
   cout << "n en formato hexadecimal = " << hex << n; 
}

oct

Muestra la salida numérica en formato octal.

#include <iostream>
using namespace std;

void main() 
{
   int n = 256;
   
   cout << "n en formato octal = " << oct << n; 
}

Estructuras de control

Las estructura de control permiten la ejecución de varias sentencias bajo determinadas condiciones, generalmente expresadas como expresiones lógicas. Una estructura de control puede venir acompañada de una sola sentencia terminada en punto y coma o de un bloque de sentencias. Un bloque de sentencias está formado por un conjunto de sentencias que se ejecutan en en orden y vienen delimitadas por llaves "{}", tal como se muestra a continuación.

{ 
	sentencia1;
	sentencia2;
	...
	sentenciaN; 
}


if/else

La estructura de control if/else permite la ejecución de una sentencia en caso de cumplirse una condición:

if (condicion) 
     sentencia;

La condición es una expresión de tipo lógico que será evaluada. Si el resultado de la condición es "true", entonces se ejecutará la sentencia, en caso contrario la sentencia es ignorada.

Ejemplo:

if (x % 2 == 0)
     cout << "x es par";

Podemos utilizar un bloque para incluir varias sentencias:

if (x % 2 == 0)
{
    cout << "x es par." << endl;
    cout << "El valor de x es = ";
    cout << x;
}


Además se puede agregar una clausula "else", lo que nos permitirá agregar la sentencia a ejecutar en caso de no cumplirse la condición especificada en el "if".

if (condicion)
        statement1;
else
	statement2;

Ejemplo:

if (x % 2 == 0)
     cout << "x es par";
else
     cout << "x es impar";

Es posible contener varias expresiones "if" tal como se muestra a continuación:

if (x > 0)
    cout << "x es positivo";
else if (x < 0)
    cout << "x es negativo";
else
    cout << "x es cero";

Otra forma equivamente sería;

if (x > 0)
    cout << "x es positivo";
else
	if (x < 0)
	    cout << "x es negativo";
else
    cout << "x es cero";

Estructura selectiva switch

La estructura "switch" nos permite evaluar expresiones que pueden producir varios valores, ejecutando una sentencia determinada en función del valor de la expresión indicada. Su funcionamiento recuerda a un la estrucuta if-else encadenada. La sintaxis es:

switch (expresión)
{
  case valor1:
     sentencias 1;
     break;
  case valor2:
     sentencias 2;
     break;
  .
  .
  .
  default:
     sentencias
}

La expresión indicada entre paréntesis es evaluada y en función del valor obtenido se ejecutará la rama "case" cuyo valor coincida con el obtenido. Las sentencias especificadas se ejecutan hasta encontrar una sentencia "break".

Si el valor obtenido en la evaluación de la expresión no coincide con ninguno de los especificadas en las ramas "case", entondes se ejecutarán las sentencias especificadas en la rama "default" en caso de existir, ya que es opcional.

Veamos un ejemplo:

switch (n) {
	case 0:
		cout << "El valor de n es 0";
		break;
	case 1:
		cout << "El valor de n es 1";
		break;
	case 2:
		cout << "El valor de n es 2";
		break;
	default:
		cout << "El valor de n no es 0 ni 1 ni 2";
}

El siguiente fragmento de código es equivalente al anterior:

if (n == 0) {
	cout << "El valor de n es 0";
}
else if (n == 1) {
	cout << "El valor de n es 1";
}
else if (n == 2) {
	cout << "El valor de n es 2";
}
else {
	cout << "El valor de n no es 0 ni 1 ni 2";
}

En caso de no incluirse la sentencia "break" en una de las ramas "case", el programa continuará la ejecución de las sentencias siguientes aún cuando formen parte de otra rama "case". La ejecución finalizará cuendo encuentre una sentencia "break" o cuando finalice el "switch".

Ejemplo:

switch (nota) {
	case 5:
	case 6:
	case 7:
	case 8:
	case 9:
	case 10:
		cout << "Aprobado";
		break;
	default:
		cout << "Suspenso";
}

Bucles

Los bucles son estructuras de control que permiten la ejecuación de un trozo de cógigo bajo ciertas condiciones.

Bucle while

El bucle while permite la ejecución de código mientras se cumpla una condición. La condición viene expresada como una expresión lógica.

La sintasis es:

while(expresion) 
	sentencia

La sentencia se ejecuta mientras el resultado de la condición sea cierto (true).

Ejemplo
// Cuenta a trás de 10 a 0

#include <iostream>
using namespace std;

void main ()
{
  int n = 10;

  while(n>=0) 
  {
     cout << n << ", ";
     --n;
  }
}

Bucle do-while

El bucle while permite la ejecución de código mientras se cumpla una condición. La condición viene expresada como una expresión lógica. La sintasis es:

do 
	sentencia
while(expresion);

La sentencia se ejecuta mientras el resultado de la condición sea cierto (true).La diferencia entre este bucle y el anterior estriba en que la condición se evalua al final

// código ASCII
#include <iostream>
using namespace std;

void main ()
{
  char c;
  do {
    cout << "Introduzca un caracter (f para finalizar): ";
    cin >> c;
    cout << "El caracter es: " << c;
    cout << "\t y su código es " << (int) c << "\n";
  } while (c != 'f');
}

Bucle for

El bucle for de c++ permite la ejecución de una sentencia mientras se cumpla la condición especificada al igual que ocurre con el buble while. A diferencia de este, el bucle for contiene en su sintaxis una sección de inicialización y otra de incremente. Este tipo de bucles está especialmente diseñado para la ejecución controlada por contadores. La sintaxis del bucle es:

for (initializacion; condition; incremento) 
	statement;
  • La sección de inicialización se ejecuta a la entrada del bucle. Generalmente se utiliza para inicializar el contador.
  • La condición es evaluada al inicio de cada vuelta.
  • La sección de incremento se ejecuta al finalizar el bucle, justo antes de comenzar la siguiente vuelta.

Ejemplo:

// Cuenta atrás
#include <iostream>
using namespace std;
void main ()
{
	for (int i = 10; i > 0; i--) {
		cout << i << ", ";
	}
}

Tanto la sección de inicialización como la de incremento son opcionales y pueden dejarse en blanco como se muestra en el siguiente ejemplo:

// Cuenta atrás
#include <iostream>
using namespace std;
void main ()
{
	int i = 10;
  	for (; i > 0;) {
		cout << i << ", ";
		i--;
	}
}


Opcionalmente podemos utilizar el operador coma para especificar más de una expresión. Esto puede ser utilizado en la sección de inicialización e incremento para utilizar mas de un contador.


// Cuenta atrás y cuenta adelante
#include <iostream>
using namespace std;
void main ()
{
	for (int i = 10, j = 0; i > 0; i--, j++) {
		cout << i << ", " << j << endl;
	}
}

break

La sentencia "break" provoca la salida incondicional de un bucle. Puede ser utilizada dentro de un bucle para provocar una salida forzada evitando que el bucle se siga ejecutanto.

// Uso de break
#include <iostream>
using namespace std;

void main()
{
	int n, i = 2;
	cout << "Introduzca un número ";
	cin >> n;
	while(i < n)
	{
		if(n % i == 0) // No es primo y salimos	del bucle
			break;
		i++;
	}
        if (i == n)
		cout << "Es primo";
	else
		cout << "No es primo";
}

continue

La sentencia "continue" provoca un salto hacia el inicio del bucle. El salto evita la ejecución del resto de instrucciones que preceden a la sentencia "continue".

// uso de continue
#include <iostream>
using namespace std;
void main()
{
        for(int n = 1; n <= 10; n++) {
                if(n % 2 == 0) continue; // saltamos los pares
                cout << n << ", ";
        }
}

goto

Esta sentencia provoca un salto incondicional a un punto del programa designado mediante una etiqueta. Las etiquetas son un identificador válida precedido por dos puntos ":". El uso de goto no está recomendado y debe evitarse su uso.

// Uso de goto
#include <iostream>
using namespace std;

void main ()
{
	int n=1;
	loop:
	cout << n << ", ";
	n++;
	if(n <= 10) goto loop;
}

Referencias

Ejercicios propuestos

  1. Crear un programa que acepte por teclado un número entero, otro float y un double, sumar todos los números y almacenar el resultado en variables entera, float y double. Compara los resultados. Solución.
  2. Si declaro una variable int y otra float y el resultado de su multiplicación lo introduzco en la variable m de tipo double con el operador de conversión de tipo explícito int, ¿qué valor se almacena en m? ¿Y si no utilizamos el conversor de tipo? Solución.
  3. Calcula el area de una circunferencia. Solución.
  4. Calcula el area de un rectágulo. Solución.
  5. Escribir un programa que acepte una variable de tipo char y visualizar su código ASCII. Solución.
  6. Escribir un programa que acepte un entero (entre 0 y 255) y visualice el carácter que le corresponde. ¿Qué ocurre si el número es superior a 255? Solución.
  7. Escribir un programa que visualice el número de bytes que ocupa cada tipo. Solución.
  8. Lee dos números y visualiza el mayor. Solución.
  9. Lee tres números por teclado y muestralos en orden ascendente. Solución.
  10. Lee un número que represente un año e indica si es bisiesto.
  11. Escribir un programa en C que visualice los números del 10 al 50 en decimal, octal y hexadecimal.Solución.
  12. Convertir una nota numérica, introducida por teclado, a una nota alfabética.Solución.
  13. Determinar si un número introducido por teclado es o no es un número primo. Solución.
  14. Sumar los 1000 primeros números naturales. Solución.
  15. Sumar los números pares entre 1 y 50. Solución.
  16. Calcular la suma de los 20 primeros número pares. Solución.
  17. Calcula el producto de los 20 primeros números impares. Solución.
  18. Visualizar la tabla de multiplicar de un número introducido por teclado.
  19. Calcule el número de cifras que tiene un entero introducido por teclado.
  20. En un determinado comercio se realiza un descuento dependiendo del precio de cada producto. Si el precio es inferior a 100€, no se hace descuento; si es mayor o igual a 100€. y menor que 200€., se hace un 5% de descuento, y si es igual o mayor a 200 € se hace un 10% de descuento. Realizar un programa que lea el precio de un producto y nos calcula y escribe su precio final.
  21. Dado un conjunto de números introducidos por teclado (cuando se introduce el 0 finaliza la entrada de datos); realizar un programa que sume los números positivos por una parte y los negativos por otra, indicando cuál de las dos sumas es mayor en valor absoluto, así como la diferencia de ambas sumas.
  22. Calcular el cuadrado y el cubo de los 20 primeros números naturales.
  23. ¿Cuáles y cuántos son los números primos comprendidos entre 1 y 1000?.
  24. Calcular el mayor de una serie de números positivos introducidos por teclado.La serie finaliza con el número 0.
  25. Calcular la cantidad de números positivos introducidos por teclado. Finaliza la serie con un cero.
  26. Calcular la suma de los divisores de cada número introducido por teclado.
  27. Calcular el factorial de un número introducido por teclado.
  28. Codifica un programa en C++ para escribir una pirámide de asteriscos como la mostrada a continuación:
    *
   ***
  *****
 *******
*********

Also on Fandom

Random wikia