03 - Estructuras Repetitivas
03 - Estructuras Repetitivas
Los operadores mixtos son aquellos que permiten realizar una operación aritmética y una asignación.
En general las operaciones se expresan como: variable a asignar operador
variable a asignar operador variable o constante
El lenguaje C presenta los siguientes operadores mixtos :
CPB 1
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
Las estructuras repetitivas o ciclos permiten ejecutar una acción o un conjunto de acciones un número
determinado de veces.
Podemos distinguir dos tipos de iteración, los ciclos definidos y los ciclos condicionados.
En un ciclo definido, se conoce la cantidad de veces a entrar al ciclo.
En un ciclo condicionado, no se conoce la cantidad de veces a entrar al ciclo, esa cantidad la determina el
resultado de verdad de una condición.
El ciclo definido for tiene como variable de control del ciclo a una variable contadora que llamaremos i
El ciclo for tiene tres argumentos separados por un punto y coma, a saber :
for ( i=valor_inicial ; i <= valor_final ; i ++ ) para valor_inicial < valor_final
i = valor_inicial inicializa al contador en el valor a partir del cual empezará a contar, por ejemplo i=1 ;
i <= valor_final condición que controla la entrada y salida del ciclo, siempre que la condición sea verdadera se
ingresa al ciclo para ejecutar la o las acciones que están dentro del cuerpo del ciclo de repetición, solo cuando la
condición sea falsa se puede salir de él. El valor final define la cantidad de veces que se debe repetir la ejecución de
las acciones indicadas dentro del ciclo, por ejemplo i<= 6 siempre que el contador i sea menor o igual a 6 se
ingresa al ciclo, solo cuando i sea igual a 7 se sale de él y teniendo en cuenta que el valor inicial fue 1 esto significa
que se ingresó al ciclo las 6 veces que se deseaban.
i++ expresión que incremente el valor de i en 1 ( contador ), este incremento es el que en algún momento llevará
al contador a valer el valor_final+1, en nuestro ejemplo será el valor 7 y se podrá salir del ciclo.
La primera vez que se ingresa al ciclo se inicializa el contador en el valor inicial, luego se verifica la condición de
control y si esa condición es verdadera se ingresa al ciclo y se ejecutan la o las acciones indicadas en el cuerpo del
ciclo, cuando finaliza la ejecución vuelve al argumento del ciclo for, esta vez incrementa al contador ( i++), verifica la
condición de control y si es verdadera vuelve a entrar a ejecutar las acciones del ciclo para luego volver al argumento
incrementando al contador y verificando la condición. Este proceso se repetirá hasta que la condición de control sea
falsa, es decir cuando el contador es mayor al valor final. 3
i = 1 ; i <= 6 ; i ++
Verdadera
En el cuerpo del entra
ciclo la acción a
realizar es informar i
S
el contador
Falsa
sale
Luego de ejecutada la
Prueba de Escritorio Programa C acción del cuerpo del
i Pantalla # include <stdio.h> ciclo vuelve al
# include <stdlib.h> argumento del ciclo for
1 1 para incrementar el
main()
contador
2 2 {
int i;
3 3
CPB 2
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
printf("\n");
system("PAUSE");
}
Ejercicio 2 : Escribir los números pares del 2 al 10
# include <stdio.h>
# include <stdlib.h>
main()
i = 2 ; i <= 10; i +=2 {
int i;
i
S for (i=2 ; i<=10 ; i+=2)
printf(" %d - ", i ) ;
printf("\n");
system("PAUSE");
}
5
nro < 0
V F
cp ++
cn ++ cc ++
CPB 3
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
system("PAUSE");
}
7
Ejemplo 3: Dados dos números enteros positivos, informar el producto de ambos por sumas
sucesivas.
producto = 0 producto nro1 nro2 i
nro1 , nro2 0 5 4 1
E
4 2
i = 1 , i <= nro1 , i ++ ,
8 3
producto + = nro2 12 4
16 5
S producto 20 6
# include<stdio.h>
# include<stdlib.h>
Acumulador main()
aditivo { Al igual que a los contadores, a los
suma nro1 int i, nro1, nro2, producto=0; acumuladores también hay que
veces el valor de inicializarlos en cero antes de usarlos
la variable nro2 printf("Ingresar dos numeros enteros positivos: ");
scanf("%d %d", &nro1, &nro2);
CPB 4
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
cp = 0 ; cn = 0 ; cc = 0 ; sp = 0 ; sn = 0
i = 1 ; i <= 5 ; i ++
E
nro
nro > 0
V F
nro < 0
cp ++ V F
sp += nro cn ++ cc ++
sn += nro
#include <stdio.h>
#include <stdlib.h>
main()
{
int i, nro, cp=0, cn=0, cc=0 , sp=0, sn=0;
if (nro>0)
{
cp++; sp+=nro;
}
else
if (nro<0)
{
cn++; sn+=nro;
}
else cc++;
} Informa el resultado de la división y
para que el resultado sea real se
printf("Cantidad de ceros ingresados: %d\n", cc); hace un cast o casting
system("PAUSE");
} 10
10
CPB 5
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
Son variables que se utilizan para indicar si un evento determinado ocurrió o no ocurrió.
Estas variables toman solo dos valores posibles, primeramente se le asigna un valor clave, por
ejemplo cero para indicar que el evento no ocurrió y solamente cuando el evento esperado
ocurre hay que cambiar el estado de la bandera asignándole otro valor clave, por ejemplo uno,
para indicar que el evento ya ocurrió
Ejemplo 1 : Ingresar 5 números, calcular e informar el mayor de ellos.
Para poder informar el mayor número ingresado hay que comparar cada número entre sí hasta
encontrar al mayor de ellos.
El ciclo for permite ingresar los 5 valores indicados y cada número es ingresado sucesivamente en
una única variable (nro), lo que significa que con cada nuevo número ingresado se pierde el
número ingresado anteriormente por lo tanto la comparación entre ellos se hace imposible.
Esto se soluciona guardando el primer valor en una variable auxiliar (max) , de esta manera se
podrá comparar el segundo valor con el guardado en la variable auxiliar que contiene el primer
valor, tal que si el segundo número es mayor al primero, se reasigna este nuevo valor en la variable
auxiliar. Este proceso se repite para cada nuevo número ingresado, quedando siempre en la
variable auxiliar el valor mayor.
La bandera se utiliza para poder determinar cuando se ha ingresado el primer número y así poder
guardarlo en la variable auxiliar.
La bandera tendrá un valor cero antes de entrar al ciclo que permite el ingreso de los sucesivos
números a procesar y se cambiará al valor uno cuando se detecta que se ha ingresado el primer
número del conjunto. A partir de ese cambio de estado de la bandera, comienza el proceso de
comparación para identificar al mayor número ingresado.
11
11
i = 1 ; i <= 5 ; i ++
2 – Se ingresa el primer
número a procesar
nro
E
3 - Si la bandera está en cero, eso bandera == 0
significa que es la primera vez que se V F
ingresa al ciclo y por lo tanto en nro
5 - A partir del segundo
está el primer número ingresado nro>max ingreso de datos y al
max = nro V F
estar la bandera en 1
4– comienza el proceso de
- Se guarda el primer número bandera = 1 max =nro comparación entre el
ingresado en la variable auxiliar nuevo valor ingresado y
- Se cambia el estado de la el que está en la variable
bandera a 1 para indicar que ya max auxiliar que es el valor
mayor hasta el momento
ingresó el primer número del
conjunto s
12
12
CPB 6
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
bandera = 0 main()
{
i = 1 ; i <= 5 ; i ++ int i, max, nro, bandera=0;
system("PAUSE");
}
13
13
bp = 0 ; bn = 0 ; cc = 0
i = 1 ; i <= 10 ; i ++
E nro
nro > 0
Antes de bp == 0 nro < 0
V F
informar el valor
del máximo o nro<min bn == 0
min = nro V F
V F
mínimo hay que
bp = 1 nro>max
verificar el min=nro
max = nro V F cc ++
estado de sus bn = 1 max=nro
respectivas
banderas s cc
porque si existe
la posibilidad V
bp == 0 F
que alguna de
ellas o ambas no “No ingresaron numeros positivos “ min
hayan cambiado
s s
su estado inicial bn == 0
no hay un V F
máximo o “No ingresaron numeros negativos“ max
mínimo que s s
informar
14
14
CPB 7
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
#include <stdio.h>
#include <stdlib.h>
main()
{
int i, max, min, nro, bp=0, bn=0, cc=0;
system("PAUSE");
}
15
15
Un ciclo condicionado se utiliza cuando no se conoce la cantidad de veces que se debe repetir la
ejecución de una instrucción o un conjunto de instrucciones. En estas estructuras, la entrada al
ciclo y la salida del ciclo está dada por la evaluación de una condición.
Existen dos estructuras condicionadas, a saber:
1 - Estructura Repetitiva while
1. Se ingresa al ciclo evaluando primero una condición.
2. Mientras la condición sea verdadera, se ingresa al cuerpo del ciclo de repetición y se
ejecutan las instrucciones que están dentro de él.
3. Solo cuando la condición sea falsa se puede salir del ciclo de repetición.
4. En consecuencia, a esta estructura se puede ingresar cero, una o varias veces.
Ejemplo 1: Ingresar un conjunto de números y calcular e informar la cantidad de números
ingresados y la suma de todos esos números. Para fin de ingreso de datos ingresar el número cero.
En este caso la cantidad de números a procesar no es un dato conocido sino que, por el
contrario, es un dato a obtener (resultado).
La condición de entrada al ciclo y de salida de él está dada por un valor clave en una variable
de control del ciclo que será por lo general un dato de entrada y ese valor clave es un valor que
no pertenece al conjunto de datos a procesar (no es válido), por lo tanto no debe ser procesado
ya que tiene como objetivo ser la marca de fin del ciclo.
16
16
CPB 8
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
17
17
system("PAUSE");
}
18
18
CPB 9
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
Ejemplo 2:
19
19
edad >= 0
2- El ciclo evalúa la marca de fin
Punto 1 y 2 cpers++ si la condición es verdadera (distinta a
la marca de fin) entra al ciclo
Punto 2 suma += edad Si es falsa, no entra al ciclo
V
bandera == 0 F
edad>max
Punto 3 max=edad V F 3- la última instrucción dentro del ciclo
debe ser ingresar la variable de
bandera=1 max=edad control , de esta manera se actualiza
la condición permitiendo el reingreso
E edad al ciclo o la salida de él
V
cpers != 0 F Verificar si se ingresó al ciclo alguna
vez, antes de informar los resultados.
cpers “No se
procesaron
suma/cpers
datos”
S max S
20
20
CPB 10
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
#include <stdio.h>
#include <stdlib.h>
main()
{
int edad, max, cpers=0, bandera=0, suma=0;
21
21
Ejemplo 3:
22
22
CPB 11
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
suma=0 ; bandera=0
bandera == 0
V F
edad>max
max=edad
V F
reingreso al ciclo
bandera=1
max=edad incrementando la variable de
control ( i ) hasta que la
cpers != 0 condición sea falsa
Como la cantidad de personas V F
(cpers) puede ser cero, hay
que verificar la entrada al ciclo eprom = suma/cpers
for antes de informar (también “No se procesaron
podría haberse usado la datos”
bandera para realizar dicha eprom , max
verificación)
S S
23
23
#include <stdio.h>
#include <stdlib.h>
main()
{
int i, edad, max, cpers, bandera=0, suma=0;
if (cpers!=0)
{
printf("La edad promedio del grupo es %d\n", suma/cpers);
printf("La edad maxima es %d\n", max);
}
else printf("No se ingresaron datos\n");
system("PAUSE");
}
24
24
CPB 12
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
Ejemplo 4:
De un cajero electrónico se tiene la siguiente información de cada operación realizada por los
cliente, durante un día :
• número de cuenta
• tipo de operación ( 1: extracción – 2: depósito – 3: consulta )
• en caso de ser una extracción o depósito, el monto de la operación.
Se pide informar:
1 – Cantidad de extracciones realizadas
3 – Porcentaje de consultas hechas a lo largo del día.
2 – Mayor monto depositado en el cajero y número de cuenta donde se hizo dicho depósito.
No se conoce la cantidad de operaciones que se realizarán a lo largo del día, para fin de
ingreso de datos ingresar número de cuenta igual cero
25
25
oper != 3
V F
E monto
oper == 2
V F
ccons++
bandera == 0
V F
monto>max
max=monto V F cextr++
cmax=nrocuenta
max=monto
bandera=1
cmax=nrocuenta
La última instrucción dentro
del ciclo debe ser solamente
nrocuenta
E la variable de control con
marca de fin
26
CPB 13
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
Continuación…
total != 0
V F
ccons*100/total
S
S cextr
“ No se realizaron operaciones “
bandera != 0
V F
“ No se
max, cmax realizaron
depósitos “
S S S
27
27
#include <stdio.h>
#include <stdlib.h>
main()
{
int nrocuenta, oper, cmax, total=0, cextr=0, ccons=0, bandera=0;
float monto, max;
28
CPB 14
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
29
E n1 , n2
Entra al cuerpo del
“Elegir opcion del menu:
ciclo ejecutando las
1- Suma
instrucciones que
2- Resta
hay dentro de él.
3- Multiplicacion
Se ingresa siempre 4- Division
al ciclo, por lo S 5- Salir
menos una vez
opcion
E
opcion
1 2 3 4
V n2!=0 F
n1 + n2 n1 - n2 n1 * n2
S n1/n2 “error”
S S S S
opcion != 5 V
F
Al final se evalúa la condición del
ciclo, mientras sea verdadera
vuelve a entrar al ciclo.
Cuando sea falsa sale del ciclo
30
30
CPB 15
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
#include <stdio.h>
#include <stdlib.h>
main()
{
int n1, n2, opcion;
31
mes
E
mes <1 || mes >12
S c-1
Se entra al ciclo pidiendo un número de mes, el ciclo evalúa si ese número ingresado está fuera de rango, es decir,
si es menor a 1 o mayor a 12, en ese caso, como el número no corresponde a un mes válido se ingresa nuevamente
al ciclo y se pide un nuevo número de mes. Mientras el número ingresado sea un número no válido se repite el
ingreso del número de mes, solo saldrá del ciclo cuando el número ingresado esté dentro del rango 1 .. 12
#include <stdio.h>
#include <stdlib.h>
main()
{
int mes, c=0;
do
{
c++;
printf("Ingresar un numero de mes: ");
scanf("%d",&mes);
}
while (mes<1 || mes>12) ;
printf(“El numero de mes se ingreso mal %d veces\n", c-1);
system("PAUSE");
} 32
32
CPB 16
Universidad Tecnológica Nacional Fundamentos de Informática
Facultad Regional Haedo Computación
Ejercicio 1:
Ingresar 20 temperaturas, calcular e informar:
1. Cantidad de temperaturas bajo cero.
2. Promedio de las temperaturas restantes.
Ejercicio 2:
Ingresar 10 números, calcular e informar:
1. Promedio de los negativos
2. El mayor positivo
3. Porcentaje de ceros
Ejercicio 3:
Un comercio necesita un programa para registrar los movimientos de caja a lo largo de un día de trabajo.
El programa debe pedir ingresar el importe inicial de dinero que hay en la caja al abrir el negocio, luego se irán ingresando los
importes de ventas y de pagos que se produzcan a lo largo del día.
Al cierre de la caja, ingresar como importe un valor cero.
Calcular e informar:
1. El importe final de la caja al cierre del día.
2. Cantidad de ventas realizadas (importes positivos)
3. Importe total de los pagos realizados (importes negativos).
4. Importe de la mayor venta realizada.
33
33
Ejercicio 4:
Ingresar número de documento, peso y altura de 10 personas, calcular e informar:
1. Cantidad de personas que pesan más de 70 kgr.
2. La altura promedio del grupo.
3. Número de documento, peso y altura de la persona con el mayor número de documento.
Para finalizar el ingreso de datos ingresar cero como número de documento.
Ejercicio 5:
Rehacer el ejercicio anterior para un conjunto de personas (no se conoce la cantidad)
Para finalizar el ingreso de datos ingresar número de documento igual a cero.
34
34
CPB 17