Download Trabajo práctico Nº 2 ( Estructuras de control repetitivas)

Document related concepts

Printf wikipedia , lookup

Bucle infinito wikipedia , lookup

Código inalcanzable wikipedia , lookup

Format String Attack wikipedia , lookup

Boo (lenguaje de programación) wikipedia , lookup

Transcript
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información – 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
Trabajo práctico Nº 2
( Estructuras de control repetitivas)
Realiza el algoritmo de cada situación problemática y el programa en lenguaje C
correspondiente.
1- Suponga que en el corriente año la población de una determinada ciudad es de20.142
habitantes y que crece constantemente a razón de x% anual.
Ingresar la razón anual de crecimiento y determinar el año en el cual la población supere
por primera vez los 70.000 habitantes.
2- Evaluar la función f(x) = x + 2 x ^ 2 + 3 x ^ 3, para cada uno de los 50 primeros
números naturales múltiplos de 7.
3-Presentar el siguiente triángulo rectángulo:
1
12
123
1234
.................
1 2 3 4 5 6 7 8 ......59
3.- Dado un conjunto de valores enteros, calcular e imprimir:
a) cuantos valores cero hubo
b) promedio de los valores positivos
c) sumatoria de valores negativos
Resolver el problema para los siguientes lotes de datos:
1) 167 valores enteros.
2) N valores, donde el valor de N debe ser leído previamente.
3) El conjunto de valores termina con un valor igual al anterior.
4) Se dan N valores, pero el proceso deber finalizar si se procesan todos los
valores o la cantidad de ceros supera a cuatro.
4- En una producción de piezas, se ha medido la longitud de las mismas. Se considera
como apta a toda pieza que mida entre 1,25 m y 1,30 m.
Ingresar la lista de longitudes y calcular el promedio de longitud de las aptas, y la cantidad
de piezas no aptas. Finalizar el proceso cuando la longitud sea cero.
5- De un censo realizado en una población se conocen los siguientes datos:
Día de nacimiento (2 dig.)
Mes (2 dig.)
Año (4 dig.)
Sexo ('M'=masc. 'F'=fem.)
Con estos datos de cada habitante se forma un lote finalizado con un día cero. Desarrollar
el programa que determine e imprima:
1) Cuántos nacimientos hubo en el mes de octubre de todos los años.
2) Cuántos nacimientos hubo antes del 9 de julio de 1990.
3) Cuántos nacimientos de mujeres hubo en la primavera del 1982.
4) Sexo de la persona más vieja (solo existe una).
1
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información – 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
6- Desarrolle un programa en C que determine si un cliente de una tienda departamental
excede el límite de crédito de su cuenta. Para cada cliente, se dispone de los siguientes
datos:
a) Número de cuenta (entero largo)
b) Saldo al inicio del mes. (float)
c) El Total en pesos de depósitos cargados al cliente en este mes. (float)
d) El total en pesos de créditos aplicados a la cuenta del cliente durante el mes.(float)
e) El límite de crédito autorizado.(float)
El programa debe introducir cada uno de estos datos, calcular el nuevo saldo (= saldo
inicial + depósitos – créditos), y determinar si el total de crédito excede el límite de
crédito del cliente. Para aquellos clientes que exceden el límite,el programa debe
desplegar el número de cuenta, el límite de crédito, el saldo nuevo y el mensaje “ Límite
de crédito excedido”. Informar en cuanto se excede el cliente de su límite. Ingresar 18
clientes.
7- Ingresar una lista de 30 números enteros. Determinar si el primero es menor que todos
los demás. En caso afirmativo emitir el mensaje “El primero es el menor”, de lo contrario
“El menor no está primero”.
8- Hacer un programa para calcular 2x para x variando entre 1 y N (ingresado por el
usuario) la salida debe tener el siguiente formato:
EXPONENTE
RESULTADO
1
2
2
4
3
8
Debe haber dos tabulaciones de separación entre el exponente y el resultado.
9- Diseñar un programa que generar X números entre 0 y 70. Se pide calcular el promedio,
la suma de todos ellos y mostrar la cantidad de números generados mayores y menores a
la mitad de X.
10- Ingresar un número natural n e informar todos sus divisores. Considerar que un
número no puede ser divisible por otro mayor que su mitad.
11- Ingresar un número natural n. Informar si el número es primo.
Aclaración: Si un número es primo “no” tiene divisores en el intervalo (1 n).
12- En un vuelo de Aerolíneas se tiene un avión con capacidad de R pasajeros y se
vendieron N boletos. Si se ingresa el número de asiento de cada pasajero, determinar
cuantos múltiplos de 3 existen y cuantos asientos disponibles quedaron.
13- Ingresar un conjunto de resultados de una fórmula matemática hasta que se ingrese
un valor nulo, desarrollar el programa que determine e imprima (si hubo valores):
a) Valor máximo negativo b) Valor mínimo positivo
c) Valor mínimo dentro del
rango -17.3 y 26.9.
14- Ingresar un número natural n e informar si es primo, o si es perfecto, o no cumple
ninguna de las dos propiedades. Recordar que un número es perfecto cuando la suma de
sus divisores es igual a este.
2
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información – 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
15- Leer dos números enteros (A, B) y OP donde OP es un carácter que puede tomar los
siguientes valores:
‘ + ’, ‘ - ’, ‘ * ’, ‘ / ’, ‘ T ’.
Se desea realizar la operación A OP B.
Se pide mostrar cada uno de los resultados y la suma total de los mismos. El proceso se
detiene cuando el código de operación es la letra ‘ T ’
16- Una empresa paga a sus empleados como gerentes (quienes reciben un salario
semanal fijo), a los empleados por hora (quienes reciben una paga fija por las primeras
40 horas trabajadas, y “hora y media” por las horas extras trabajadas, es decir 1.5 veces
su salario por hora), a los empleados por comisión (quienes reciben $250 más 5.7 % de
sus ventas brutas semanales), a los empleados por destajo (quienes reciben un monto fijo
de dinero por cada elemento que producen, cada empleado por destajo en la empresa
trabaja solo en un tipo de pieza). Escriba un programa semanal de cada uno de los
empleados. Usted no sabe de antemano el número total de empleados. Cada tipo de
empleado tiene su código de pago: los gerentes tienen el código de pago 1, empleados por
hora código de empleado 2, los empleados por comisión tienen el código 3 y los
empleados por destajo tienen el código 4. Calcule en cuanto asciende lo que tiene que
abonar en salarios la empresa y el número de empleados ingresados.
Utilice un switch para calcular el pago de cada empleado, de acuerdo con su código e
indique al usuario que introduzca los datos que necesita para calcular el pago de cada
empleado.
17- Ingresar una lista de números enteros. Calcular el factorial de cada número natural e
informarlo. Detener el proceso cuando el número ingresado sea (-1).
18- Un buque de carga traslada hasta 100 contenedores a tres diferentes puertos del país.
Los puertos se identifican con los números 1, 2 y 3.
De cada contenedor que el buque traslade se registran los siguientes datos:
- Identificación del contenedor ( valor entero)
- Peso del contenedor en kg
- Puerto de arribo(un valor de 1 a 3).
El ingreso de datos finaliza con la identificación de un contenedor igual a cero.
Se pide calcular e informar:
 El peso total que el buque debe trasladar
 La identificación del contenedor de mayor peso
 La cantidad de contenedores que debe trasladar a cada puerto
19- En una fábrica de medias se debe hacer un control sobre la producción. Para ello se
pide ingresar la cantidad de medias (unidades) que se producen en sus 10 secciones.
Validar que sean par. Y calcular:
 La sección que más produjo.
 Promedio de medias de todas las sección.
 Cantidad de secciones que produjeron más de 20 pares de medias.
3
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información – 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
20- Se dispone de un lote de valores que representan importes de ventas de sucursales de
un supermercado que finaliza con un valor -1. El lote está dividido en sub-lotes por medio
de valores cero. (Cada sub-lote es una sucursal)
Desarrollar el programa que determine e imprima:
a) por cada sucursal el promedio de valores.
b) el total de cada sucursal procesada.
c) Valor máximo del conjunto, indicando la sucursal en que se encontró y la posición
relativa del mismo en la sucursal.
Nota: puede estar el lote vacío (primer valor -1), o puede haber uno o varios o todos los
sub-lotes vacíos (ceros consecutivos).
21- Los reglamentos de pesca imponen un límite a la cantidad total permitida de kilos en
un día de pesca. Se supone que se planea llevar un computador portátil y se necesita un
programa que indique cuando se haya excedido dicho límite. Diseñar un algoritmo que
primero lea el límite diario (en kg) y que luego lea los valores de entrada uno tras otro
corresponderán a los pesos individuales de las presas pescadas en el orden en que se
obtienen, e imprima un mensaje en el momento en que el límite haya sido excedido. Un
peso de 0 indica el fin de los datos y, después de que cada pescado haya sido registrado,
el algoritmo deberá imprimir el peso total que se lleva hasta ese momento
22- Compilar, ejecutar e interpretar la lógica del siguiente ejemplo.
# include <stdio.h>
# include <conio.h>
# define IN 1
/*en una palabra */
# define OUT 0
/* fuera de una palabra*/
/* Este programa me permite contar las líneas, palabras y caracteres. */
int main()
{
intc,nl,np,nc,state;
state= OUT;
nl=np=nc=0;
while ((c= getchar()) !=EOF){
++ nc;
if (c ==’\n’) ++nl;
if (c == ‘ ‘ || c == ‘\n’ || c == ‘\t’)
state = OUT;
else if ( state == OUT) {
state = IN;
++ np;
}
}
printf(“palabras:%d\t lineas:%d\t caracteres:%d\n”,np,nl,nc);
}
La variable “state” registra si actualmente el programa está o no sobre una palabra.
RECUERDE: el fin de archivo (EOF) se genera presionando las teclas CTRL-Z una vez
introducido el texto.
4
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información – 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
23- Teniendo en cuenta el anterior ejercicio escriba un programa que cuente espacios en
blanco, tabuladores y nuevas líneas.
24- Simular el comportamiento de un reloj digital, imprimiendo la hora, minutos y
segundos de un día desde las 0:00:00 horas hasta las 23:59:59 horas. Utilizar la función
Sleep(seg.) de la librería <windows.h>.
25- La secuencia de los números de Fibonacci viene definida por el hecho de que cada
término, excepto los 2 primeros que valen 1, es la suma de los dos que le preceden:
F(1) = F(2) = 1
F(N) = F(N-1) + F(N-2) para n >2,
Así se obtiene la secuencia 1,1,2,3,5,8,13,21,34,55...
Escribir un programa en C que lea del teclado un valor entero N>= 1 y muestre en la
pantalla, ordenados de menor a mayor, todos los números de la secuencia de Fibonacci
comprendidos entre F(1) y F(N), ambos inclusive.
Ejercicios Propuestos
1- Una persona debe realizar un muestreo con 50 personas para determinar el promedio
de peso de los niños, jóvenes, adultos y viejos que existen en su zona habitacional. Se
determinan las categorías con base en la sig, tabla:
CATEGORIA
EDAD
Niños
0 - 12
Jóvenes
13 - 29
Adultos
30 - 59
Viejos
60 en adelante
2- Escriba un programa que permita calcular el promedio de n números reales.
3.- Ingrese la cantidad necesaria de valores hasta que su suma supere 245 e imprima el
resultado.
4- Dado un conjunto de valores positivos terminado con un valor negativo, desarrollar el
programa que imprima el valor máximo del conjunto y su posición relativa dentro del
mismo.
5.- Imprima los números comprendidos entre A y B, siendo estos ingresados por el
usuario.
6- Ingresar un número n (entero positivo) generar los n primeros números pares junto con
su suma parcial e informar los datos generados de la forma que indica el ejemplo:
si n = 3 se tiene:
pares
suma parcial
2
44
666
2
8
18
5
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información – 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
7- Escriba un programa que permita jugar a doble o nada. El jugador apuesta una cantidad
y tira la moneda. Si sale cara (1) obtiene doble de la cantidad apostada. Si sale cruz (0)
lo pierde todo.
Permitir al jugador ir jugando hasta que el jugador decida abandonar el juego. El
programa debe sacar por pantalla el número de jugadas y el total ganado por el jugador (
si ha perdido debe mostrarse el correspondiente mensaje).
8- Una gran empresa de productos químicos le paga a sus vendedores mediante un
esquema de comisiones. Los vendedores reciben $200 semanales más el 9% de sus ventas
totales durante la semana. Por ejemplo, un vendedor que vende $5000 de productos
químicos durante la semana recibe $200 más el 9% de $5000, o un total de $650.
Desarrolle un programa que introduzca las ventas totales de cada vendedor durante la
última semana y que calcule y despliegue los ingresos de ese vendedor. Procese un
vendedor a la vez, hasta que se ingrese (-1) como las ventas del vendedor.
9- Calcular la cantidad de divisores que tiene un número n.
10- Una empresa fabrica dos productos A y B, se quiere saber cual de ellos es el más
aceptado en el mercado, para lo cual se realiza una encuesta.
Por cada persona interrogada, se obtienen dos valores. El primer valor indica la aceptación
o no del producto A según sea 1 o 0 respectivamente.
El segundo valor corresponde al producto B.
El fin de datos está dado por el par (2,2).
Se debe informar:
 Total de encuestados.
 Porcentaje de encuestados que aceptan el producto A.
 Porcentaje de encuestados que aceptan el producto B.
 Porcentaje de encuestados que no aceptan el producto A ni el producto B.
11- Escriba un programa que lea una secuencia de números enteros menores que 120
cuando el número leido sea positivo debe escribir tantos signos – como indica el número
ingresado y un signo + cada H signos –, ( H es ingresado por teclado). Si el número es 0
o negativo deberá imprimirse el mismo.
Ejemplo
Número leido = 7
H=2
Debe imprimirse:
- -+--+--+12- Se conoce los gastos en electricidad y agua de un laboratorio químico durante cada
uno de los 12 meses del año. Escribe un programa que lea dichos datos y muestre en la
pantalla el gasto total en cada trimestre, el gasto total anual y le porcentaje de gastos de
cada concepto sobre el total anual.
13- Se dispone de datos sobre edades y los pesos de los hijos de varias familias. Escribe
un programa que lea el número de familias y para cada familia lea el número de hijos
asi como la edad y el peso de cada hijo, y calcule:
6
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información – 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
a)
b)
c)
d)
el nº máximo, mínimo y promedio de hijos por familia.
el peso máximo, mínimo y promedio de todos los hijos.
el peso promedio de los hijos menores de 6 años.
el peso promedio de los hijos mayores de 6 años.
14- Un entrenador le ha propuesto a un atleta recorrer una ruta de cinco kilómetros
durante 10 días, para determinar si es apto para la prueba de 5 Kilómetros o debe buscar
otra especialidad. Para considerarlo apto debe cumplir por lo menos una de las siguientes
condiciones:
- Que en ninguna de las pruebas haga un tiempo mayor a 16 minutos.
- Que al menos en una de las pruebas realice un tiempo mayor a 16 minutos.
- Que su promedio de tiempos sea menor o igual a 15 minutos.
15- Un teatro otorga descuentos según la edad del cliente. determinar la cantidad de dinero
que el teatro deja de percibir por cada una de las categorías. Tomar en cuenta que los
niños menores de 5 años no pueden entrar al teatro y que existe un precio único en los
asientos. Los descuentos se hacen tomando en cuenta el siguiente cuadro:
Edad
Descuento
Categoría 1
5 - 14
35 %
Categoría 2
15 - 19
25 %
Categoría 3
20 - 45
10 %
Categoría 4
46 - 65
25 %
Categoría 5
66 en adelante
35 %
16- En una granja se requiere saber alguna información para determinar el precio de venta
por cada kilo de huevo. Es importante determinar el promedio de calidad de las n gallinas
que hay en la granja. La calidad de cada gallina se obtiene según la fórmula:
calidad = peso de la gallina * altura de la gallina
numero de huevos que pone
Finalmente para fijar el precio del kilo de huevo, se toma como base la siguiente tabla:
PROMEDIO TOTAL DE CALIDAD
mayor o igual que 15
mayor que 8 y menor que 15
menor o igual que 8
PRECIO POR KILO DE HUEVO
1.2 * promedio de calidad
1.00 * promedio de calidad
0.80 * promedio de calidad
17- Suponga que tiene una tienda y desea registrar sus ventas por medio de una
computadora. Diseñe un programa que lea por cada cliente el monto de la venta, y:
a).- calcule e imprima el IVA ,
b).-calcule e imprima el total a pagar,
c).- lea la cantidad con que paga el cliente,
d).-calcule e imprime el cambio.
Al final del día deberá imprimir la cantidad de dinero que debe haber en la caja. Se
ingresan ventas hasta que la misma sea 0.
Valide el programa de tal forma que no permita que la cantidad con la que paga el
cliente sea menor a lo que debe pagar.
7
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información – 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
11. Un comercio cuenta con 4 vendedores para la venta de sus 3 tipos de artículos. El
dueño
del local desea cierta información de la actuación de sus vendedores al cabo de 7 días:
a) Cantidad de artículos vendidos por vendedor, sin distinción de artículo
b) El monto de la mayor operación de venta del artículo 1 realizada por el vendedor 3
c) El importe promedio de ventas por artículo
d) El importe promedio por vendedor
19- Escriba el programa que calcule la suma de los N primeros números impares.
20- Ingresar 10 número pares , calcular el promedio, la cantidad de números que
superan el 30 y porcentaje que son mayores a 50. Validar la entrada.
21- Escriba un programa que calcule Hn (número armónico) aplicando la fórmula:
8
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información – 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
Ejercicios de auto evaluación
1. ¿Qué sección de código produce la siguiente salida?
12345678910
Código 1:
count = 1;
while( count <= 10 )
{
printf("%d", count);
count = count + 1;
}
Código 2:
count = 1;
while( count <= 10 )
{
printf("%d", &count);
count = count + 1;
}
Código 3:
count = 1;
while( count < 10 )
{
printf("%d\n", count);
count = count + 1;
}
Código 4:
count = 1;
while( count <= 10 )
{
printf("%d\n", count);
count = count + 1;
}
2. ¿Qué trozo de código produce la siguiente salida?
1
22
333
4444
55555
Código 1
a = 1;
while( a <= 5 )
{
while( b <= a )
{
printf("%d\n", a);
b = b + 1;
}
a = a + 1;
}
Código 2
a = 1;
while( a <= 5 )
{
b = 1;
while( b <= a )
{
9
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información – 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
printf("%d", a);
b = b + 1;
}
printf("\n");
a = a + 1;
}
Código 3
a = 1;
while( a <= 5 )
{
while( b <= 5 )
{
printf("%d", a);
b = b + 1;
}
a = a + 1;
printf("\n");
}
Código 4
a = 1;
while( a <= 5 )
{
printf("\n");
b = 1;
while( a <= b )
{
printf("%d", a);
b = b + 1;
}
a = a + 1;
}
3. La declaración compara el valor de un entero llamado sum contra el valor 65.
Si es menor, se imprime la cadena de texto “Lo siento, inténtelo de nuevo”, es:
Código 1
if( sum < "65" )
printf("Lo siento, inténtelo de nuevo" );
Código 2
if( sum <= 65 )
printf("Lo siento, inténtelo de nuevo" );
Código 3
if( 65 == sum )
printf("Lo siento, inténtelo de nuevo" );
Código 4
if( sum < 65 )
printf("Lo siento, inténtelo de nuevo" );
4. La declaración compara total con el valor good_guess, y si es correcto
imprime el valor del total, y si no se imprime el igual valor de good_guess, es
Código 1
if( total <good_guess )
printf("%d", total );
else
printf("%d", good_guess );
Código 2
if( total == good_guess )
printf("%d", good_guess );
else
printf("%d", total );
Código 3
if( total = good_guess )
printf("%d", total );
else
printf("%d", good_guess );
10
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información – 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
Código 4
if( total == good_guess )
printf("%d", total );
else
printf("%d", good_guess );
5. ¿Qué línea de código produce errores y por qué?
1. #include <stdio.h>
2. int main()
3. {
4. int menor, numero1, numero2;
5. printf("\nEscriba el primer numero y pulse INTRO: ");
6. scanf("%d",numero1);
7. printf("\nEscriba el segundo numero y pulse INTRO %d: ");
8. scanf("%d",&numero2);
9. if (numero1 < numero2)
10. menor = numero1;
11. else
12. menor = numero2;
14. printf("\nEl menor de %d y %d es %d\n,numero1, numero2,
15. menor);
16. }
6. ¿Cuál es el error del siguiente trozo de código?
intgrados_fahr;
while (grados_fahr<= 300.0 )
{
grados_cent = (5*(grados_fahr-32.0))/ 9.0;
printf("%17.2lf %17.2lf\n", grados_fahr, grados_cent);
grados_fahr += 20.0;
}
7. Esta sección de código se llama “Validación” ¿Qué crees que hace el whileen
este caso? Justificar.
while(numero < 2)
{
printf("Lo siento, no acepto números menores que 2.\n");
printf("Inténtalo de nuevo\n");
scanf("%d", &numero);
}
8. ¿Cuál será la salida para la siguiente entrada?
D
switch (n)
{
case 'A': printf("\nEl alumno ha obtenido un 4");
break;
case 'B': printf("\nEl alumno ha obtenido un 5");
break;
case 'C': printf("\nEl alumno ha obtenido un 6");
break;
case 'D': printf("\nEl alumno ha obtenido un 7");
break;
case 'E': printf("\nEl alumno ha obtenido un 8");
break;
default: printf("\nNo has introducido un valor válido");
}
11