QT Capitulo 05
QT Capitulo 05
QT Capitulo 05
CAPITULO V
I. CONTENIDO
✓ Estructura secuencial.
✓ Estructura alternativa o condicional.
✓ Estructura iterativa o repetitiva.
Cada una de las instrucciones están separadas por el carácter punto y coma (;).
No obstante, en algunos casos nos interesará agrupar en un bloque una serie de
instrucciones, como veremos al explicar las estructuras de selección y de iteración.
El bloque de sentencias se define por el carácter llave de apertura ({) para marcar
el inicio del mismo, y el carácter llave de cierre (}) para marcar el final.
{
instrucción 1;
instrucción 2;
instrucción 3;
.....
instrucción N;
}
Capitulo V Pág. 1
Programación C++ con las Librerías QT sobre entorno linux
Sin embargo, en caso de que el bloque de sentencias este constituido por una única
sentencia no es obligatorio el uso de las llaves de apertura y cierre ({ }).
✓ Instrucción IF, esta instrucción hace que se ejecuten unas sentencias u otras
dependiendo del valor que toma una condición. La instrucción if puede ser
simple o doble:
//Alternativa simple
if (condicion)
instrucción1;
if (condicion){
instrucción 1;
instrucción 2;
instrucción 3;
}
//Alternativa doble
if (condicion)
instrucción1;
else
instrucción2;
if (condicion){
Instrucción 1;
instrucción 2;
}
else{
instrucción 3;
instrucción 4;
}
Capitulo V Pág. 2
Programación C++ con las Librerías QT sobre entorno linux
Ejemplo de estructura condicional en C++. Programa que lee un número entero
por teclado y muestra si es par o impar.
#include <iostream>
using namespace std;
int main(void){
int num;
cout <<"Introduzca numero:";
cin >> num;
if ((num%2)==0)
cout << "PAR" << endl;
else
cout << "IMPAR" << endl;
if(condicion1)
instrucción1;
else if(condicion2)
instrucción2;
else if(condicion3)
instrucción3;
else if(condicion4)
instruccion4;
else
instrucción5;
instrucción 6;
instrucción 7;
......
Capitulo V Pág. 3
Programación C++ con las Librerías QT sobre entorno linux
#include <iostream>
using namespace std;
int main(void){
int hora;
cout << "\nIntroduzca una hora (entre 0 y 24): ";
cin >> hora;
if ((hora >= 0) and (hora < 12))
cout << "\nBuenos dias\n";
else if ((hora >= 12) and (hora < 18))
cout << "\nBuenas tardes\n";
else if ((hora >= 18) and (hora < 24))
cout << "\nBuenas noches\n";
else
cout << "\nHora no válida\n";
}
#include <iostream>
using namespace std;
int main(void){
unsigned int nota;
cout << "Introduzca una calificacion numerica entre 0 y 10:";
cin >> nota;
cout << "La calificacion del alumno es" << endl;
if (nota == 10) {
cout << "Matricula de Honor" << endl;
}
else if (nota >= 9) {
cout << "Sobresaliente" << endl;
Capitulo V Pág. 4
Programación C++ con las Librerías QT sobre entorno linux
}
else if (nota >= 7) {
cout << "Notable" << endl;
}
else if (nota >= 5) {
cout << "Aprobado" << endl;
}
else{
cout << "Suspenso" << endl;
}
}
switch (expresión){
case constante1:
instrucciones;
break;
case constante 2:
instrucciones;
break;
···
default:
instrucciones;
}
En una instrucción switch, expresión debe ser una expresión con un valor
entero, y constante1, constante2, ..., deben ser constantes enteras, constantes
de tipo carácter o una expresión constante de valor entero. Expresión también
puede ser de tipo char, ya que los caracteres individuales tienen valores enteros
Dentro de un case puede aparecer una sola instrucción o un bloque de
instrucciones.
Capitulo V Pág. 5
Programación C++ con las Librerías QT sobre entorno linux
del bloque o hasta una instrucción que transfiera el control fuera del bloque del
switch (una instrucción break, o return). Si no existe una constante igual al
valor de la expresión, entonces se ejecutan las sentencias que están a
continuación de default si existe (no es obligatorio que exista, y no tiene porqué
ponerse siempre al final).
Ejemplo de uso de la instrucción switch en C++. Programa que lee dos números
y una operación y realiza la operación entre esos números.
#include <iostream>
using namespace std;
int main(void){
int A,B, Resultado;
char operador;
cout << "Introduzca un numero:";
cin >> A;
cout << "Introduzca otro numero:";
cin >> B;
cout <<"Introduzca un operador (+,-,*,/):";
cin >> operador;
Resultado = 0;
switch (operador)
{
case '-' : Resultado = A - B;
break;
case '+' : Resultado = A + B;
break;
case '*' : Resultado = A * B;
break;
case '/' : Resultado = A / B; //suponemos B!=0
break;
default : cout << "Operador no valido"<< endl;
}
cout << "El resultado es: ";
cout << Resultado << endl;
}
Capitulo V Pág. 6
Programación C++ con las Librerías QT sobre entorno linux
El siguiente programa determina si un carácter leído es o no una vocal. En ese
caso como la sentencia a ejecutar por todas las etiquetas case es la misma,
esta sentencia se pone una única vez al final:
#include <iostream>
using namespace std;
int main(void){
char car;
cout << "Introduzca un caracter: ";
cin >> car;
switch (car)
{
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U': cout << car << " es una vocal" << endl;
break;
default : cout << car << " no es una vocal" << endl;
}
}
while (condicion)
Capitulo V Pág. 7
Programación C++ con las Librerías QT sobre entorno linux
{
instrucción 1;
..............
instrucción N;
}
.
El siguiente programa lee números enteros hasta que se lee un número
negativo. Se muestra la suma de todos los números leidos excepto el número
negativo.
#include <iostream>
using namespace std;
int main(void){
int suma, num;
suma = 0;
cout << "Introduzca un numero: ";
cin >> num;
while (num >= 0)
{
suma = suma + num;
cout << "Introduzca un numero: ";
cin >> num;
}
cout << endl << "La suma es: " << suma << endl;
}
Capitulo V Pág. 8
Programación C++ con las Librerías QT sobre entorno linux
do
{
instrucción 1;
..............
instrucción N;
} while (condicion);
Capitulo V Pág. 9
Programación C++ con las Librerías QT sobre entorno linux
✓ zona de inicialización
✓ zona de condición
✓ zona de incremento ó decremento.
En alguna ocasión puede no ser necesario escribir alguna de ellas. En ese caso
se pueden dejar en blanco, pero los punto y coma deben aparecer. El
funcionamiento de un bucle for es el siguiente:
Como regla práctica podríamos decir que las instrucciones while y do-while se
utilizan generalmente cuando no se conoce a priori el número de pasadas, y la
instrucción for se utiliza generalmente cuando sí se conoce el número de
pasadas.
El siguiente programa muestra los números del 1 al 10.
Capitulo V Pág. 10
Programación C++ con las Librerías QT sobre entorno linux
/* muestra los números de 10 a 1 */
#include <iostream>
using namespace std;
int main(void){
int n;
for (n = 10; n >=1; n--) {
cout << n << endl;
}
}
#include <iostream>
using namespace std;
int main(void){
int i;
for (i = 1; i <= 100; i++); {
cout << "Hola" << endl;
}
}
No muestra "Hola" 100 veces. En realidad se muestra una vez "Hola", ya que
la sentencia for es una sentencia vacía al terminar con un punto y coma (;). La
sentencia for en este caso hace que i empiece en 1 y acabe en 11 y tras esas
iteraciones, se ejecuta la sentencia cout.
III. PILAS
Una pila (stack en inglés) es una lista ordinal o estructura de datos en la que el modo de
acceso a sus elementos es de tipo LIFO (del inglés Last In First Out, último en entrar,
primero en salir) que permite almacenar y recuperar datos. Esta estructura se aplica en
multitud de ocasiones en el área de informática debido a su simplicidad y ordenación
implícita de la propia estructura.
Capitulo V Pág. 11
Programación C++ con las Librerías QT sobre entorno linux
Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que
coloca un objeto en la pila, y su operación inversa, retirar (o desapilar, pop), que retira el
último elemento apilado.
Para la implementación del concepto de pilas, vamos a hacer uso de una estructura de datos,
dicha estructura debe tener los campos para almacenar los datos y un campo especial de tipo
puntero del mismo tipo de la estructura, este campo permitirá hacer el enlace hacia el
siguiente elemento de la pila.
Capitulo V Pág. 12
Programación C++ con las Librerías QT sobre entorno linux
struct Nodo{
int valor;
Nodo *siguiente;
};
La variable pila se debe declarar como un puntero del tipo de la estructura y debe estar
inicializado como nulo, luego se necesitará un nodo como puntero del tipo de la estructura,
para este nodo se deberá solicitar memoria al sistema operativo con el operador new.
El siguiente paso es asignar los valores al nodo. El algoritmo que permite hacer el enlace
entre la pila y el nodo es la asignación de la pila al campo puntero del nodo y luego asignar
todo el nodo a la pila, de esta forma la pila siempre se mantiene en la cima de los nodos que
la conforman.
nuevo->valor = 20;
nuevo->siguiente = pila;
pila = nuevo;
El proceso para consultar los valores de cada nodo de la pila implica obtener el nodo de la
cima, consultar su valor y luego liberar ese espacio de memoria.
El orden de como se obtiene los nodos siempre es inverso al orden en que fueron ingresados,
es decir primero se leen los últimos en ingresar.
De la misma forma que se se asignaba el nuevo nodo a la pila, ahora se asigna la dirección
del campo puntero del nodo a la pila.
Capitulo V Pág. 13
Programación C++ con las Librerías QT sobre entorno linux
pila = pila->siguiente;
IV. LABORATORIO N° 1
V. LABORATORIO N° 2
Capitulo V Pág. 14