Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Estructuras de control en C++, Apuntes de Informática

Asignatura: Elementos de Programación, Profesor: , Carrera: I.T.I. Sistemas, Universidad: UMA

Tipo: Apuntes

Antes del 2010

Subido el 25/10/2007

josemanuelk6
josemanuelk6 🇪🇸

4.2

(56)

58 documentos

1 / 8

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
UNIVERSIDAD DE MALAGA
DPTO. DE LENGUAJES Y C. DE LA COMPUT ACION
E.T.S. DE INGENIERIA INFORMAT ICA
INGENIERIA INFORMATICA
LABORATORIO
DE
ELEMENTOS DE PROGRAMACIÓN
(CURSO 2004-2005)
T
TE
EM
MA
A
I
II
I
ESTRUCTURAS DE CONTROL EN C++
II.1. Flujo de control.
II.2. Expresiones lógicas.
II.3. Estructuras de selección.
II.3.1. Estructura if.
II.3.2. Estructura switch.
II.4. Estructuras de iteración.
II.4.1. Estructura while.
II.4.2. Estructura do while.
II.4.3. Estructura for.
II.5. Ejemplos.
II.6. Recomendaciones y errores frecuentes.
II.7. Ejercicios.
Bibliografía: [SAVI00], [JOYA00].
E.T.S. de Ingeniería Informática (Ing. Informática) Dpto de Lenguajes y C. de la Computación
_______________________________________
Laboratorio de Elementos de Programación Tema II. Estructuras de control en C++ 1
II.1 FLUJO DE CONTROL
El efecto deseado con un programa se consigue mediante la ejecución de una
secuencia de instrucciones o sentencias. Hasta ahora hemos considerado las instrucciones de
asignación y las que permiten efectuar entrada/salida básica, por lo que el orden de ejecución
de las instrucciones (flujo de control) coincide con el orden en que están dispuestas en el
programa, comenzando por la primera y continuando en secuencia hasta llegar a la última.
Bloques. Un bloque es una unidad de ejecución mayor que la sentencia, y permite agrupar
una secuencia de sentencias como una unidad. Para ello, enmarcamos la secuencia de
sentencias entre dos llaves, formando un bloque.
{
sentencia_1;
sentencia_2;
.....
sentencia_n;
}
Es posible anidar bloques.
{
sentencia_1;
sentencia_2;
{
sentencia_3;
sentencia_4;
.....
}
.....
sentencia_n;
}
Dentro de un bloque se podrán definir variables, en tal caso, serán visibles desde el
punto de la declaración hasta el final del bloque en que se definen. Aunque C++ da libertad al
respecto, cuando deseemos declarar variables o cualquier otra entidad en nuestros programas,
siempre lo haremos al principio de un bloque, evitando hacerlo en puntos intermedios del
mismo. Seguiremos el siguiente formato:
{
declaración_1;
....
declaración_n;
sentencia_1;
.....
sentencia_m;
}
pf3
pf4
pf5
pf8

Vista previa parcial del texto

¡Descarga Estructuras de control en C++ y más Apuntes en PDF de Informática solo en Docsity!

UNIVERSIDAD DE MALAGA

DPTO. DE LENGUAJES Y C. DE LA COMPUTACION

E.T.S. DE INGENIERIA INFORMATICA

INGENIERIA INFORMATICA

LABORATORIO

DE

ELEMENTOS DE PROGRAMACIÓN

(CURSO 2004-2005)

TEEM T

MA

A I

III

ESTRUCTURAS DE CONTROL EN C++

II.1. Flujo de control.II.2. Expresiones lógicas.II.3. Estructuras de selección.

II.3.1. Estructura if.II.3.2. Estructura switch.

II.4. Estructuras de iteración.

II.4.1. Estructura while.II.4.2. Estructura do while.II.4.3. Estructura for.

II.5. Ejemplos.II.6. Recomendaciones y errores frecuentes.II.7. Ejercicios.

Bibliografía: [SAVI00], [JOYA00].

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Elementos de Programación

Tema II. Estructuras de control en C++

II.

FLUJO DE CONTROL El efecto deseado con un programa se consigue mediante la ejecución de una

secuencia de instrucciones o sentencias. Hasta ahora hemos considerado las instrucciones deasignación y las que permiten efectuar entrada/salida básica, por lo que el orden de ejecuciónde las instrucciones (flujo de control) coincide con el orden en que están dispuestas en elprograma, comenzando por la primera y continuando en secuencia hasta llegar a la última. Bloques

. Un bloque es una unidad de ejecución mayor que la sentencia, y permite agrupar

una secuencia de sentencias como una unidad. Para ello, enmarcamos la secuencia desentencias entre dos llaves, formando un bloque.

sentencia_1;sentencia_2;

sentencia_n; }

Es posible anidar bloques.

sentencia_1;sentencia_2;{

sentencia_3;sentencia_4;..... }.....sentencia_n; }

Dentro de un bloque se podrán definir variables,

en tal caso, serán visibles desde el

punto de la declaración hasta el final del bloque en que se definen. Aunque C++ da libertad alrespecto, cuando deseemos declarar variables o cualquier otra entidad en nuestros programas,siempre lo haremos al principio de un bloque, evitando hacerlo en puntos intermedios delmismo. Seguiremos el siguiente formato:

declaración_1;....declaración_n;sentencia_1;

sentencia_m; }

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Elementos de Programación

Tema II. Estructuras de control en C++

Para que un programa realice algo útil es necesario, disponer de la posibilidad de

alterar el flujo de control del mismo. C++ dispone de dos tipos de estructuras para alterar elflujo de control, las estructuras de selección y las estructuras de iteración. Ambas estructurasdependen de la evaluación de expresiones lógicas o booleanas. II.

EXPRESIONES LÓGICAS En cualquiera de las estructuras que permiten alterar el flujo de control del programa

habrá que especificar las condiciones bajo las cuales dicho flujo continua por un punto u otrodel programa. Para ello se emplean expresiones lógicas, que en C++ tienen las mismaspropiedades que ya hemos estudiado en la asignatura de Elementos de Programación, aexcepción de los nombres de los operadores disponibles. La siguiente tabla muestra losoperadores de que dispone C++ para construir expresiones lógicas.

Operador

pseudolenguaje

Operador

C++

=^

≠^

,^

≥^

∧^

∨^

¬^

II.

ESTRUCTURAS DE SELECCIÓN Se utilizan para alterar el flujo de control, permitiendo seleccionar una de entre varias

alternativas dependiendo de condiciones lógicas. La alternativa seleccionada hará que el flujode control alcance una instrucción o bloque de instrucciones concreto. C++ dispone de dostipos de estructuras de selección, if y switch. II.3.1. Estructura “

if”

En su versión más simple la estructura if permite seleccionar la ejecución o no de una

determinada secuencia de sentencias dependiendo de que la expresión lógica de control seevalúe a true o a false. Tiene el siguiente formato:

if

(condición

de control)

Secuencia de

sentencias

La estructura if admite una versión más general en la que se puede especificar una

secuencia de sentencias alternativa para ser ejecutada cuando la condición de control seevalúe a false. Tiene el siguiente formato:

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Elementos de Programación

Tema II. Estructuras de control en C++

if

(condición

de control)

Secuencia de

sentencias

}^

else

{ Secuencia de

sentencias

Si la secuencia de sentencias consta de una única instrucción no es necesario que esté

enmarcada entre llaves. No obstante, por cuestiones de estilo, y para evitar errores deprogramación que se suelen producir al prescindir de las llaves, nosotros siempre usaremosllaves para delimitar las sentencias de las distintas alternativas. Anidamiento

. Una secuencia de sentencias consta de una o más sentencias, cada una de ellas

acabada en punto y coma. Por tanto, nada impide que una de estas sentencias sea a su vez unasentencia de selección. Cuando ello ocurre hablamos de sentencias de selección anidadas. Enel siguiente ejemplo, dada una variable “dia”, cuyo contenido representa un día de la semana,se muestran mensajes relativos al día representado.

if^

((Lunes <=

dia)

(dia

<= Domingo))

cout

“Día

valido”;

if^

(dia <=

Viernes) { cout

<< “Día laborable”;

}^

else

{cout

<< “Día no

laborable”;

}^ else

{cout

“Día

no válido”;

Frecuentemente aparecen en un programa situaciones en las que se desea seleccionar

una alternativa de entre varias. Como ejemplo, considérese un programa para escribir enpantalla un mensaje diferente correspondiente a un número que representa una calificaciónnumérica. Utilizando sentencias if anidadas, quedaría:

if (Nota ==

cout

<< "Matrícula de

Honor";

}^ else

{if^

(Nota

cout <<

"Sobresaliente";

} else {

if^

(Nota

cout

<< "Notable";

}^ else

{if (Nota >=

cout

"Aprobado";

} else

{cout

"Suspenso";

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Elementos de Programación

Tema II. Estructuras de control en C++

Si el objetivo hubiera sido localizar un punto de entrada para continuar la ejecución a

partir de ahí, no hubiéramos situado

break

detrás de cada alternativa. Por ejemplo, si

deseamos un programa que nos muestre los días que quedan a partir de uno dado por lavariable “

dia”

, podríamos hacer: switch

(dia)

case Lunes:

cout

<< “Lunes”;

case Martes:

cout

<< “Martes”;

case Miercoles:

cout

<< “Miercoles”;

case Jueves:

cout

<< “Jueves”;

case Viernes:

cout

<< “Viernes”;

case Sabado:

cout

<< “Sabado”;

case Domingo:

cout

<< “Domingo”; break;

default:

cout

<< “ERROR.

DIA NO

VALIDO”;

En este caso, si “

dia

” vale Viernes, nos interesa que se escriba Viernes, Sabado y

Domingo, por lo que no situamos

break

tras cada alternativa. Por otro lado, como nos

interesa que no se escriba ERROR. DIA

NO VÁLIDO cuando se trate de un día válido,

situamos una instrucción

break

tras las sentencias asociadas a la etiqueta Domingo. Este uso

de la instrucción

switch

, en la que se ejecutan instrucciones asociadas a diferentes etiquetas

case (aunque es válido en el lenguaje)

está totalmente desaconsejado

. La instrucción

switch

solamente debe usarse cuando las instrucciones asociadas a las etiquetas sean

excluyentes entre sí (es decir, siempre irán seguidas de

break

Es posible que distintas etiquetas seleccionen el mismo grupo de sentencias. Si

queremos representar esta situación basta con situar todas las etiquetas relacionadas de formaconsecutiva, de la siguiente forma:

switch

(expresión)

case etiqueta1:case etiqueta2:case etiqueta3:

secuencia

de sentencias1;

break;

case etiqueta4:

secuencia

de sentencias2;

break;

........

default:

secuencia

de sentencias3;

break;

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Elementos de Programación

Tema II. Estructuras de control en C++

Donde se indica que en caso de que la expresión dé como resultado etiqueta1, etiqueta2 oetiqueta3, deseamos que se ejecute la secuencia de sentencias1. II.

ESTRUCTURAS DE ITERACIÓN Se utilizan para expresar capacidad de ejecutar de forma repetida una sentencia o

grupo de sentencias bajo ciertas condiciones. C++ admite los tres esquemas de iteración(bucles) vistos en el pseudolenguaje de la asignatura Elementos de Programación, aunquealgunas de ellas presentan un comportamiento ligeramente diferente. II.4.1. Estructura “

while

Se corresponde exactamente con el esquema

MIENTRAS

del pseudolenguaje. Su

formato viene dado por:

while (condición de

control) {

Secuencia de

sentencias

Cuerpo del

bucle

Cuando se ejecuta esta sentencia, en primer lugar se evalúa la expresión de control. Si

el resultado es true, entonces el flujo de control entra en el cuerpo del bucle, ejecutándosetodas las sentencias que lo forman. Seguidamente el flujo de control vuelve al principio delwhile, repitiéndose el proceso hasta que la expresión de control sea evaluada a false, en cuyocaso el flujo de control continua por la primera instrucción que siga al bucle.

Como puede observarse, la expresión de control se comprueba cada vez antes de que

el cuerpo del bucle sea ejecutado. El cuerpo se ejecuta mientras se cumpla la condición decontrol. Si la condición es false, entonces el cuerpo no se ejecuta. Hay que hacer notar que, sila condición es true inicialmente, la sentencia while no terminará (bucle infinito) a menos queen el cuerpo del bucle se modifique de alguna forma la condición de control. Por otra parte,de acuerdo al comportamiento indicado, si en la primera iteración la condición de control seevalúa a false, el cuerpo del bucle no se ejecutará ni siquiera una vez. Por tanto, estaestructura repetitiva permitirá expresar situaciones en las que deseamos que el cuerpo delbucle se repita cero o más veces.

Por ejemplo, si queremos leer una serie de números enteros y encontrar su suma,

parando cuando se lea un número negativo, podemos hacer:

sum

cin

i; while

(i

sum

= sum

  • i;

cin

i;

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Elementos de Programación

Tema II. Estructuras de control en C++

II.4.2. Estructura “

do

while”

Se

corresponde

con

el

esquema

REPETIR

del

pseudolenguaje,

aunque

su

comportamiento es ligeramente diferente. Su formato es:

do^

Secuencia de

sentencias;

Cuerpo

del bucle

}^ while

(condición

de

control)

En esta estructura, primero se ejecuta el cuerpo del bucle y después se evalúa la

condición de control para determinar si deseamos repetir o no una vez más la ejecución delcuerpo. Este comportamiento seguirá hasta que en el momento de evaluar la condición decontrol se obtenga como resultado

false

Como puede observarse, puesto que la expresión de control se evalúa después de

ejecutar el cuerpo del bucle, en esta estructura el cuerpo del bucle se ejecutará siempre almenos una vez. Esto se adapta a numerosas situaciones típicas en programación. Por ejemplo,si deseamos leer un número hasta asegurarnos que el valor introducido es mayor que cero,podríamos haber optado por una estructura

while

de la siguiente forma,

cout <<

"Introduzca

un número mayor que

cero";

cin

>>^

numero;

while (numero

<^

1)^

cout

"Introduzca

un

número

mayor

que cero";

cin

>>^

numero;

Pero, ya que la petición del número debe ser ejecutada siempre al menos una vez, laestructura “

do

while”

se adapta mejor al que queremos describir, quedando por tanto más

natural de la siguiente forma:

do^

cout

"Introduzca

un

número

mayor

que cero";

cin

>>^

numero;

}^ (numero

Nota

:^ El comportamiento de la estructura “

do

while”

difiere del comportamiento

estudiado en Elementos de Programación en la estructura REPETIR. La estructuraREPETIR acaba cuando la expresión de control se evalúa a

true

, mientras que la

estructura “

do

..^

while”

acaba cuando la expresión de control se evalúa a

false

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Elementos de Programación

Tema II. Estructuras de control en C++

II.4.3. Estructura “

for”

Corresponde al esquema PARA del pseudolenguaje, aunque su comportamiento es

ligeramente diferente. Su formato es:

for

(inicialización;

condición

de

control;

incremento)

Secuencia de

sentencias;

Cuerpo

del bucle

En esta estructura, tras la palabra reservada

for

aparece la cabecera del bucle. Dicha

cabecera consta de tres componentes, que reflejan la forma en que evolucionará el flujo decontrol del bucle. Para ello, se basa en el uso de una “variable de control”. La componente deinicialización define la variable de control y almacena su valor inicial, la componente deincremento indica como se va actualizando y la componente de condición de controldetermina cuando acabar el bucle.

El comportamiento en detalle de la estructura

for

puede describirse fácilmente en

base a la siguiente estructura

while

Inicialización;while

(condición de

control) {

Secuencia de

sentencias

Incremento }

Como se puede observar, al principio, y una sola vez se ejecuta la componente de

inicialización, que será una instrucción en la que se le da valor inicial a la variable de controldel bucle, posteriormente se comprueba la condición de control, y

mientras

ésta se cumpla, se

ejecutará la secuencia de sentencias que forman el cuerpo del bucle

for

, ejecutándose al final

de cada iteración la componente de incremento, que será una instrucción en la que seespecifique la forma en que va evolucionando la variable de control tras cada iteración.

Por ejemplo, si deseamos mostrar por pantalla los N primeros números naturales,

donde N es un valor leído por teclado, podríamos haber usado una estructura

while

de la

siguiente forma

cin >>

N;

i^

while

(i

N)

cout

i;

i++; }

pero queda más claro si utilizamos la estructura

for

de la siguiente forma:

cin

N;

for (int

i =

1; i

N;

i++) {

cout

i;

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Elementos de Programación

Tema II. Estructuras de control en C++

while (((num

cand)

|| ((num

cand)

cand--; }cout

“El máximo común dividor

es:“

cand;

return 0; } /**^

Autor: *^

Fecha:

Versión:

**^

Programa

para el

cálculo del

MCD

de

dos

números

leidos de

teclado

*^

Se^

usa el

algoritmo de

Euclides.

*/#include

using

namespace std; int main(){

int

num1; int

num2; cout

“Teclee

dos

números:

cin

num1 >>

num2;

while (num1 !=

num2)

if (num1 >

num2)

num1 =

num

–^

num2;

} else

{num2 =

num

–^

num1;

}cout

“El máximo común dividor

es:“

num1;

return 0; }

II.

RECOMENDACIONES Y ERRORES FRECUENTES A continuación incidiremos en algunas características que consideramos interesantes

para conseguir que al utilizar las estructuras explicadas anteriormente se obtengan programasclaros y legibles, evitando y señalando errores típicos.

Recomendaciones

-^

Definir siempre un bloque para las alternativas de una instrucción

if

, incluso

si solo hay una sentencia en la secuencia de sentencias.

-^

No modificar la variable de control de un bucle

for

dentro de su cuerpo.

Errores frecuentes

-^

Usar

=^

en lugar de

para efectuar una comparación de igualdad. El operador

=^

expresa asignación de una valor a una variable, y en C++ se permite que

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Elementos de Programación

Tema II. Estructuras de control en C++

forme parte de una expresión, por lo que el compilador no avisa de un error encaso de confundir uno por otro.

-^

Usar & para el AND lógico, que realmente es &&. El compilador no avisa delerror porque & es un operador válido, aunque no hace lo que deseamos.

-^

Usar! para el OR lógico, que realmente es

El compilador no avisa del

error porque

!^ es un operador válido, aunque no hace lo que deseamos.

-^

Construir expresiones con operadores relacionales que no expresan lo quedeseamos. C++ es muy flexible a la hora de construir expresiones, por lo quees posible que el compilador acepte expresiones que no se comportan comoesperamos. Un ejemplo típico viene dado por la expresión

X^

Deseemos expresar la pregunta de si el valor de X está comprendido entre 0 y100, sin embargo C++ interpreta algo totalmente distinto (que no entraremos aanalizar).

X)

(X

Para

evitar

estas

situaciones,

recomendamos que siempre que usemos una expresión compuesta usemosparéntesis en cualquier subexpresión que contenga.

-^

Olvidar la instrucción

break

al final de la alternativa seleccionada en una

etiqueta de una instrucción

switch

. En tal caso, después de ejecutar

la

alternativa no se continúa por la instrucción que siga al

switch

, sino que se

ejecutan las sentencias asociadas a la siguiente alternativa.

-^

Construir expresiones lógicas compuestas que no expresan realmente lo quedeseamos expresar. Es frecuente usar el operador || cuando deberíamos usar eloperador && y viceversa.

-^

Errores de ejecución por no tener en cuenta que las expresiones lógicas seevalúan en cortocircuito. Por ejemplo, la instrucción

V^

=^

((A

B)

C)

(B

=^

0)^

genera un error de ejecución si B vale cero, mientras que si

aprovecho el cortocircuito, dicho error no se produce

V

=^

(B^

!=^

0)^

&&^

((A/

B)

>^

C)

-^

Confundir el significado de la condición lógica del

do

while

con la del

REPETIR visto en la asignatura de Elementos de Porogramación.

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Elementos de Programación

Tema II. Estructuras de control en C++

II.

EJERCICIOS

  • 1.-

Una empresa maneja códigos numéricos con las siguientes características:

-^

Cada código consta de cuatro dígitos:

-^

El primero representa a una provincia.

-^

Los dos siguientes indican el número de la operación.

-^

El último es un dígito de control.

Se desea obtener un programa que lea de teclado un número de cuatro dígitos (sesupone que el primer dígito no es un cero), y posteriormente imprima en pantalla lasiguiente información.

PROVINCIA

NUMERO DE OPERACION

DIGITO DE CONTROL

En caso de que el número no tenga exactamente cuatro dígitos, o bien el dígito decontrol sea erróneo (será correcto si su valor coincide con el resto de dividir el númerode operación entre la provincia), en lugar del mensaje anterior, habrá que imprimir enpantalla el siguiente mensaje de error:

ERROR: CODIGO INVALIDO.

  • 2.-

El recibo de la electricidad se elabora de la siguiente forma:

  • 1 € de gastos fijos.- 0.50 €/Kw para los primeros 100 Kw.- 0.35 €/Kw para los siguientes 150 Kw.- 0.25 €/Kw para el resto.

Elabore un programa que lea de teclado dos números, que representan los dos últimosvalores del contador de la luz. (al restarlos obtendremos el consumo en Kw ), y calculee imprima en pantalla el importe total a pagar en función del consumo realizado.

  • 3.-

Codifique un programa que se comporte como una calculadora simple. Para ello deberátener las siguientes características:

-^

Solo efectuará operaciones con dos operandos.

-^

Operaciones permitidas: (+,-,*,/).

-^

Se trabajará con operandos enteros.

-^

Pedirá en primer lugar la operación a realizar, y a continuación los dosoperandos. Si el operador no se corresponde con alguno de los indicados seemitirá un mensaje de error.

EJEMPLO:

Operación

Operando 1

Operando 2

Resultado

E.T.S. de Ingeniería Informática (Ing. Informática)

Dpto de Lenguajes y C. de la Computación

_______________________________________

Laboratorio de Elementos de Programación

Tema II. Estructuras de control en C++

  • 4.-

Calculador

repetitivo.

Modifique

el

programa

para

que

se

repita

un

número

indefinido de veces. El calculador dejará de trabajar cuando se introduzca como códigode operación &. Ejemplo:

Operación

Operando 1

Operando 2

Resultado

Operación

: u

ERROR!!!!Operación

Operando 1

Operando 2

Resultado

Operación

FIN DEL PROGRAMA.

  • 5.-

Escriba un programa que lea un número N (

≤^

N^

≤^ 9) e imprima una pirámide de

números con N filas como en la siguiente figura:

  • 6.-

Escriba un programa que lea un número N de teclado y a continuación imprima enpantalla:

* La suma de los N primeros términos de la serie armónica (1+1/2+...+1/N)* Los N primeros términos de la sucesión de Fibonacci.