Trabajo práctico Nº 5 (Resolución de problemas – Arreglos

Anuncio
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º 4 (Resolución de problemas – Arreglos
unidimensionales).
Realiza el programa en lenguaje C correspondiente a los siguientes ejercicios. Utilizar
modulación.
1- Escriba una declaración para un vector que contenga 50 valores del tipo entero
largo.
2- Muestre una declaración que asigne el valor de 123.456 a la última posición del
vector del ejercicio 1.
3- Qué hay de incorrecto en lo siguiente?
int vec [10];
int x;
int main ()
{
for (x=1;x<=10;x++)
vec[x]=99;
}
4- Cargar en un arreglo de una dimensión de 50 posiciones, números pares consecutivos
comenzando por el 2.
5- Escriba un programa de modo que ingresen valores enteros hasta que se incorpora el
número 99, o hasta seis valores pares sean ingresados. Salve los números pares en un
vector y agregue una función que imprima los valores del vector ordenados y separados
por tabulaciones en una sola línea.
6- Leer un número natural n (no mayor que 100) y asignar a las componentes del vector
de n posiciones los valores 1, 4, 9, 16........etc ( 12, 22, 32...)
7- Se tiene almacenado en memoria en un arreglo de una dimensión las notas de 50
alumnos del primer parcial correspondiente a la asignatura “Álgebra”.
Mostrar - la mayor nota
- el porcentaje de alumnos que aprobaron el parcial con nota superior a 6
- el promedio de las notas
- en qué posición del arreglo se encuentra la menor nota.
8- Dado un arreglo de 100 elementos que almacena números enteros positivos, generar
una función por cada ítems pedido, mostrando el resultado en la función principal.
- La suma de los números pares.
- El mayor número ingresado.
- El porcentaje de números impares.
- La cantidad de números nulos.
Validar que los números ingresados sean positivos.
-1-
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información
– 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
9- Un docente de una universidad le tiene que asignar a cada alumno de su clase un
número. Se pide codificar un programa que me permita ingresar la cantidad de alumnos
N (N< 20). Y a continuación se le pide a cada alumno un número que es guardado en
un vector llamado ALUM. A partir de este conjunto generar otro conjunto de número
llamados FACT en el que cada elemento sea el factorial del número que cada alumno
dio. Finalmente imprimir ambas estructuras a razón de un valor de cada uno por
renglón.
10- Para un control se pide registrar las temperaturas promedio de N días (N<25) en
Tierra del Fuego en invierno. Si la suma de las componentes resulta mayor que cero
imprimir las temperaturas de índice par (índice- temperatura) y sino las de índice impar.
11- Dado un arreglo DATO de componentes reales de N elementos y otro arreglo
BAJAS de M elementos y componentes del mismo tipo que el arreglo DATO, actualizar
éste último arreglo de manera que se eliminen de la estructura las componentes que
están en el arreglo BAJAS.
Mostrar el nuevo arreglo DATO luego de la actualización.
12- Se tiene como información la cantidad de materias adeudadas de los alumnos de
dos clases. Se pide ingresar en un vector las materias adeudadas de M (<10) alumnos de
la sala A y en otro los N (N<15) de la sala B. Generar e imprimir:
a) Un nuevo vector C resultante de la anexión de A y B.
b) Un nuevo vector D resultante de la anexión de los elementos distintos de cero de
A y B.
13- Escribir un programa que contenga una función que dado un vector de n elementos
enteros calcule el número de veces que los elementos pasan de crecer a decrecer o
viceversa.
14- En un arreglo de n posiciones se encuentran almacenados los importes de n ventas
que se realizaron en el corriente año. Se pide generar y mostrar un vector con los
importes entre $50 y $287. Mostrar los importes de ventas luego de haber ordenado las
componentes del arreglo de menor a mayor.
15- En un registro para realizar trámites había dos filas; fila UNO y fila DOS en
donde se tienen cargados los tres últimos dígitos del DNI de los clientes, ambas con N
(N<30) personas. Pero un inconveniente en una de las cajas disponibles hizo replantear
la atención de los clientes. Se debe crear una nueva fila (llamada TRES) cuyo valores
serán en las posiciones pares los valores de los datos de la fila DOS y en las posiciones
impares los valores de la fila UNO. Mostrar las estructuras.
Aclaración: el cero es par.
16- INVERTIR DÍGITOS
a) Diseñar una función que lea un número natural n de 3 dígitos como máximo y
escriba sus dígitos invertidos en un vector.
b) Diseñar una función que haga lo mismo que la anterior, pero que retorne un
natural con los dígitos de n invertidos.
-2-
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información
– 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
Nota: el número n tiene como máximo 4 cifras.
17- Escriba una función llamada addvec() que valide dos vectores que sean del mismo
tamaño. La función debe sumar cada elemento de los vectores juntos y poner los
valores en un tercer vector, ordenarlo y mostrarlo.
18- Diseñe un programa que cargue un vector con números enteros que representan los
años de antigüedad de N empleados de una empresa. Con este arreglo se debe armar
otro arreglo que contenga los años de ingreso de aquellos empleados que hayan
ingresado antes de 2005 inclusive.
Con el nuevo vector generado determinar cuantos empleados ingresaron entre 1980 y
1990 inclusive, cuantos entre 1990 y 2000 inclusive y cuantos entre 2000 y 2005
inclusive.
Determinar cuanto es el total en sueldos para los N empleados considerando que el
sueldo básico es de $5000 por mes más el porcentaje de antigüedad que será del 20%
para los que tienen más de 25 años, y un 10% para los que tienen mas de 5 años y
menos de 25 y el resto cobra antigüedad el 5%.
Se debe imprimir el vector de años de ingreso, el vector con los años de antigüedad, la
cantidad de empleados de los grupos que se piden y el total de sueldos a abonar.
Utilizar adecuadamente FUNCIONES, PARÁMETROS POR VALOR Y POR REFERENCIA.
19- Dado 80 números enteros generados en forma aleatoria (entre 0 y 99) confeccionar
un listado que muestre el diagrama estadístico de frecuencias por decenas.
NOTA: la frecuencia de una decena es la cantidad de datos ingresados pertenecientes a
dicha decena.
0 - 9 I ******
10 - 19 I ****
20 - 29 I ****
30 - 39 I **
.........
90 - 99 I *******
20- ELEMENTOS PERDIDOS
Diseñar un programa que lea un vector de enteros desde 0 hasta un natural n (se puede
considerar, para simplificar, n menor que 50), ordenarlo en forma ascendente. El
programa deberá decir cuales entero faltan.
21- Una pequeña aerolínea acaba de comprar una PC para su nuevo sistema automático
de reservaciones. A usted se le ha pedido que programe el nuevo sistema. Usted debe
escribir un programa que asigne los asientos, en cada vuelo, del único avión de la
aerolínea (capacidad: 10 asientos). Su programa debe desplegar el siguiente menú de
alternativas:
Por favor, digite 1 para “ primera clase”
Por favor, digite 2 para “ económica”
Si la persona digita 1, su programa debe asignar un asiento en la sección de primera
clase (asientos 1 a 5). Si la persona digita 2, su programa debe asignar un asiento en la
sección económica (asiento 6 a 10). Su programa debe imprimir un pase de abordar que
-3-
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información
– 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
indique el número de asiento de la persona y si está en la sección de primera clase o en
la sección económica del avión.
Utilice un arreglo para representar la tabla de asientos del avión. Inicialice en 0 todos
los elementos del arreglo para indicar que todos los asientos están libres. Mientras se
asigna cada asiento, el valor de los elementos correspondientes del arreglo se establece
en 1, para indicar que ya está asignado. Cuando la sección está llena, entonces
despliegue el mensaje “el siguiente vuelo parte en tres horas”.
22- Hacer un procedimiento para que dado un vector con una cantidad par de elementos
enteros de 0 a 9, genere otro arreglo con los números de dos cifras formados tomando
de a dos los elementos del arreglo ingresado
Ejemplo:
X
3 1 5 7 8 2
Y[1]= X[1]*10 + X[2]*1=31
Y[2]= X[3]*10 + X[4]*1=57
Y[3]= X[5]*10 + X[6]*1 =82
Y
31 57 82
23- Dados dos arreglos A y B de dimensión m y n respectivamente n<=m, escribir un
programa que genere un arreglo cuyo i-esimo elemento va a contener 1 o 0 de acuerdo
a si el elemento i-esimo de B está en A. Imprimir los tres vectores.
24- Dado un número entero largo, diseñar un programa en C que calcule la cantidad de
veces que se encuentra un número ingresado por teclado y su sucesor en el mismo y,
luego se debe imprimir el número original y la cantidad de veces que se encuentra los
números antes mencionados.
Ejercicios Propuestos
1. Llenar un vector de 20 elementos, imprimir la posición y el valor del elemento
mayor almacenado en el vector. Suponga que todos los elementos del vector son
diferentes.
2. Almacenar 500 números en un vector, elevar al cuadrado cada valor almacenado en
el vector, almacenar el resultado en otro vector. Imprimir el vector original y el vector
resultante.
3. Escribir un programa que permita eliminar de un vector previamente ingresado los
números pares utilizando una función ELIMINA que se encargue de eliminar los
números pares. Este procedimiento debe utilizar una función lógica PAR cuyo resultado
sea 1 si es par y 0 en caso contrario. Ordenar el vector resultante de mayor a menor.
4. Almacenar 30 números en un vector, imprimir cuantos son ceros, cuantos son
negativos, cuantos positivos. Imprimir además la suma de los negativos y la suma de los
positivos.
-4-
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información
– 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
5. Diseñe un algoritmo que lea un número cualquiera y lo busque en el vector X, el
cual tiene almacenados 80 elementos. Escribir la posición donde se encuentra
almacenado el número en el vector o el mensaje “NO” si no lo encuentra. Búsqueda
secuencial.
6. Diseñe un algoritmo que lea dos vectores A y B de 20 elementos cada uno y
multiplique el primer elemento de A con el último elemento de B y luego el segundo
elemento de A por el diecinueveavo elemento de B y así sucesivamente hasta llegar al
veinteavo elemento de A por el primer elemento de B. El resultado de la multiplicación
almacenarlo en un vector C.
7. Leer por teclado las marcas de 10 corredores en una carrera, y escribir en la
pantalla cuantas están por encima y cuantas están por debajo de la media.
8. Calcular el promedio de 50 valores almacenados en un vector. Determinar además
cuantos son mayores que el promedio, imprimir el promedio, el número de datos
mayores que el promedio y una lista de valores mayores que el promedio.
9. En un arreglo de 50 posiciones se encuentran almacenados longitudes de distancias
de ciertas ciudades importantes a la capital de nuestra república. Mostrar:
- La ciudad que más lejos está.
- La ciudad que más cerca está.
10. Escriba un programa que utilice una función sumavec() que tenga dos vectores
como argumentos, sume todos los valores en ambos vectores y devuelva el total a la
función principal.
11. Escriba un programa que ingrese un vector de n elementos e intercambie el
primero con el n ésimo, el segundo con el (n-1)ésimo, y así sucesivamente. No debe
generarse un nuevo vector. Debe imprimirse el vector intercambiando.
12. Dado un vector de números enteros se desea eliminar todos los elementos repetidos
dejando cada elemento distinto una sola vez en el arreglo. Imprimir el vector resultante.
13. Escribir un programa que lea dos vectores de elementos enteros y genere un tercer
vector con los elementos del primer vector que no están en el segundo. El programa
debe imprimir los dos vectores originales y el vector generado.
14. Dado un vector de números enteros de 10 elementos, sin valores repetidos y
desordenados, buscar un elemento dado en el mismo. Si el elemento se encuentra
interesa saber su posición.
Luego si se encuentra el elemento se debe verificar si en el vector se encuentran por lo
menos dos múltiplos del elemento buscado, una vez que se encuentran cuatro múltiplos
se debe finalizar el proceso y de estos múltiplos encontrados se necesita saber la
posición en las que se encuentran. Se debe imprimir el elemento buscado, su posición y
-5-
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información
– 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
las posiciones de los múltiplos encontrados. Si no se encontró el elemento o no se
hallaron una cantidad suficiente de múltiplos se debe imprimir un cartel adecuado.
15. Escribir una función sumanumeros() que devuelva la suma de todos los números de
un vector de enteros. Debe aceptar tres argumentos: el primero será el puntero al vector
que contiene los números, el segundo un carácter que contiene un dígito (del 0 al 9) y el
tercer argumento devolverá el número de veces que ese dígito aparece en el vector de
entrada. Observe que el último parámetro debe ser pasado por referencia. El vector es
de tamaño N (definir N como constante igual a 10) y debe ser inicializado en el main.
16. En un arreglo de 31 posiciones se encuentran almacenados los valores
correspondientes a las temperaturas promedios diarios del mes de enero del corriente
año.
Se pide mostrar:
- el día de mayor temperatura
- el día de menor temperatura
- la mayor temperatura
- el promedio mensual de temperaturas
- un vector con las temperaturas mayores al promedio mensual.
17. MEZCLA
Diseñar un programa que lea dos vectores ordenados crecientemente de enteros y que
escriba un vector también ordenado de enteros que contenga todos los elementos de los
dos vectores.
En el caso de que un elemento esté repetido varias veces en ambos vectores, en el nuevo
aparecerá también repetido el número de veces menor.
18. Diseñar un programa que lea un vector ordenado y diga las posiciones entre las que
se encuentra su máximo segmento nulo, en caso de que lo haya. Un segmento nulo es
aquel tal que la suma de sus elementos es cero.
19. Escriba un programa que lea un vector de números enteros cuyos elementos seran
ingresados en orden creciente, y pueden estar repetidos y genere un vector con la
cantidad de veces que esta cada elemento distinto en el vector original.
Ejemplo:
v1---------- (1 4 4 4 5 5 7 9 9 9 9)
Generado v2 -------- (1 3 2 1 4 )
El programa debe imprimir los dos vectores.
20- ELEMENTOS IGUALES EN DOS VECTORES
Diseñar un programa que lea dos vectores de enteros ordenados de forma estrictamente
creciente. El programa deberá hallar el número de elementos comunes en ellos.
21- Dado un vector de n posiciones (siendo n un número par), realizar las siguientes
operaciones
 Sumar el primer elemento con el enésimo, y cargarlo en un vector auxiliar como
elemento uno.
-6-
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información
– 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López

Sumar el tercer elemento con el (n-2)ésimo y así sucesivamente hasta agotar todas
las posiciones.
22- (Complejo) A la ruleta se juega con una rueda que contiene 38 cuadros diferentes en
su circunferencia. Dos de los cuadros, numerados con el 0 y 00, son verdes; 18 cuadros
son rojos y 18 son negros. Se alternan los cuadros rojos y negros y están numerados de
1 a 36 en orden aleatorio.
Una pequeña bola gira dentro de la rueda, que como resultado termina quedando dentro
de una ranura debajo de uno de los cuadros. El juego es apostar al resultado de los giros,
de una de las maneras siguientes:
i) Seleccionando un cuadro rojo o negro, con una ventaja de 35 a 1. Así, si el jugador
apuesta $1 y gana, recibirá $36: el original más otros $35.
ii) Seleccionando un color, rojo o negro, con una paridad de 1 a 1. Así, si el jugador
elige rojo y apuesta $1, si la bola se para debajo de un cuadro rojo recibirá $2.
iii) Seleccionando los números pares o impares (excluidos 0 y 00), con paridad 1 a 1.
iv) Seleccionando los 18 números bajos o los 18 números altos, con paridad 1 a 1.
El jugador perde´ra automaticamente si la bolita se para debajo de uno de los cuadros
verdes (0 y 00).
Esribir un programa iteractivo en C que simule el juego de la ruleta. Permitir que los
jugadores seleccionen cualquier tipo de apuesta que deseen eligiéndola en un menú.
Escribir el resultado de cada juego seguido por un mensaje apropiado que indicque si el
jugador ha ganado o ha perdido.
-----------------------oo----------------------Ejercicios de auto evaluación
1. Diga cuales de los siguientes enunciados son verdaderos o falsos. Si la respuesta es
falso, explique por qué.
a. Un arreglo puede almacenar muchos tipos diferentes de valores.
b. El subíndice de un arreglo puede ser del tipo de datos double.
c. Si en una lista de inicializadores existen menos inicializadores que elementos del
arreglo, C inicializa automáticamente con el último valor de la lista a los
elementos restantes.
d. Si una lista de inicializadores contiene más inicializadores que elementos en el
arreglo, es un error.
e. Un elemento particular que es pasado a una función y modificado en la función
llamada, contendrá el valor modificado en la función que llama.
f. Una declaración de arreglo reserva espacio para el arreglo.
g. Para indicar que se debe reservar 100 ubicaciones para un arreglo entero p, el
programador escribe la declaración: p [100];
h. Un programa en C que inicializa en cero a los elementos de un arreglo de 15
elementos debe contener una instrucción for únicamente.
-7-
Algoritmo y Estructura de Datos
Ing. en Sistemas de Información
– 1º año –
Docente: Gabriela Ribotta
Ayudante: María Laura López
2. Encuentre el(los) error(es) en cada una de las siguientes instrucciones:
a) Suponga que: int a[3];
printf(“%d %d %d\n”, a [1], a[2], a[3]);
b) double f[3]={1.1, 10.01, 100.001, 1000.0001};
c) # define tamanio 100;
d) Suponga que: int b[10]={0},i;
for (i=0;i<=10;i++) b[i]= 1;
3. Sea el siguiente código:
void desplaza (int t[], int *pos)
{
t[*pos]=0;
if (*pos < 9)
*pos++;
else
*pos=0;
t[*pos]=1;
}
Si la tabla t contiene los valores {0,0,0,0,0,0,0,0,0,0} y la variable entera posicion tiene
el valor 9, ¿cuál será el contenido de la tabla t tras la llamada desplaza (t, &posicion); ?
Se produce un error de compilación
{1,0,0,0,0,0,0,0,0,0}
{1,0,0,0,0,0,0,0,0,1}
{0,0,0,0,0,0,0,0,0,1}
{0,0,0,0,0,0,0,0,0,0}
-8-
Descargar