ARREGLOS DE UNA DIMENSIÓN Los ejercicios de programación deben resolverse utilizando funciones. Para ello divida el problema en sub-problemas y programe la solución de cada uno de ellos por medio de las funciones. 1.
Suponga las siguientes declaraciones: int puntos [500]; int prueba, menor, indice; ¿Cuál segmento de programa encontrará el valor más pequeño de este arreglo y almacenará el subíndice del elemento donde está guardado este valor? a)
for (prueba = 0; prueba < 500; prueba++) if (puntos[prueba] < menor) menor = puntos[menor];
b)
for (prueba = 0; prueba < 500; prueba++) if (puntos[prueba] < menor) menor = prueba;
c)
menor = puntos[0]; for (prueba = 1; prueba < 500; prueba++) if (puntos[prueba] < menor) menor = puntos[prueba];
d)
indice = 0; for (prueba = 1; prueba < 500; prueba++) if (puntos[prueba] < puntos[indice]) indice = prueba;
e)
indice = 0; for (prueba = 1; prueba < 500; prueba++) if (puntos[prueba] < indice) indice = prueba;
Arreglos de Una Dimensión
43
2.
Considere el segmento: int arreglo1[4], arreglo2[4], i, j; for (i = 0; i <= 3; i++) { scanf (“%i”, &arreglo1[i]); for (j = i; j <= 3; j++) scanf (“%i”, &arreglo2[ j]); } y los datos de entrada: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
Después de ejecutarse el código, ¿cuál será el contenido de los arreglos arreglo1 y arreglo2 ?
3.
a) arreglo1: 1 2 3 4 arreglo2: 5 6 7 8
b) arreglo1: 1 6 7 8 arreglo2: 2 3 4 5
c) arreglo1: 1 6 10 13 arreglo2: 2 7 12 14
d) arreglo1: 1 6 10 13 arreglo2: 2 7 11 14
e) arreglo1: 1 2 3 4 arreglo2: 12 13 14 15
f) faltan datos de entrada
Observe el siguiente trozo de programa y diga qué imprime, suponiendo que los datos son: 5
41
68
32
74
55
int i, j, n, sor[25]; scanf (“%i”,&n); i = 0; while (i <= n - 1) { scanf (“%i ”, &sor[i]); i++; } for (i = 0; i <= n - 1; i++) { printf (“%i \n”, sor[i]); for (j = n - 1; j > i; j--) printf (“%i “,sor[i]); }
Arreglos de Una Dimensión
44
4.
Sean los datos enteros: n, k a0 a1
(en la primera línea) (en la segunda línea) (en la tercera línea)
. an-1
(en la última línea)
Con:
|k| ≤ n; 1 ≤ n ≤ 50
Elabore un programa completo que resuelva progresivamente por funciones cada uno de los siguientes incisos: a)
Leer los datos y almacenarlos en un arreglo vec , de tal manera que queden: vec a0
b)
a1
. . .
an-1
Copiar los datos a otro arreglo llamado inverso, de tal forma que queden almacenados como se indica a continuación: inverso an-1
c)
. . .
a0
Reemplazar cada ai en vec por (ai * 2 i ) sin utilizar la función de potencia y optimizando el número de operaciones: vec ao* 2 0
d)
(a1* 2 1 )
. . .
Correr los elementos del vec anterior |k| lugares a la derecha si k > 0 , y |k| lugares a la izquierda si k < 0
Al correr los elementos, Elabore entrar ceros a los lugares vacíos; así, si k = 2 se pierden los dos últimos datos (an-2 y an-1 ) y el arreglo quedaría: 0
5.
0
ao
a1
. . .
an-3
Los tres arreglos reales x, y y z , tienen almacenados m, n, y o valores, respectivamente. Elabore un programa que lea los datos de cada arreglo y calcule e imprima las sumatorias de todos sus elementos, para lo cual deberá contar con una función para sumar todos los elementos de un arreglo y una función para leer los datos de un arreglo. Considere que las dimensiones de los arreglos se leen en el programa principal con 1 ≤ m,n,o ≤ 50.
Arreglos de Una Dimensión
45
6.
Se tiene el arreglo ventas
0 v ene
1 v feb
2 v mar
. .
10 v nov
11 v dic
donde se almacenan las ventas mensuales de una empresa. Elabore una función que regrese los siguientes datos: a) b) c) d) 7.
¿En qué mes se dieron las ventas máximas de la empresa? ¿A cuánto ascendieron las ventas máximas? ¿Cuál fue el total de las ventas? ¿Cuál fue el promedio de las ventas?
Dados los datos: n, a0 ,a1,. . .,a n-1,
con:
b0 ,b1, . . . ,bn-1
1 ≤ n ≤ 50 , entero ai , bi reales
Elabore funciones por separado para calcular:
n -1
∑
a i * bi
i=0
n -1
∑
a i * bn −1−i
i =0
¿Requiere de arreglos? ¿Cuántos? ¿Por qué? 8.
Una fábrica de llantas quiere un programa para calcular el costo total de producción de los n modelos de llantas que produce. Los datos con que cuenta son los siguientes: n, ao, a1, ..., an-1, c 0 , c 1, ..., c n-1,
con:
1 ≤ n ≤ 50 , entero ai enteros c i enteros
Donde: ai c i
representa la cantidad de llantas producidas del modelo i representa el costo de producción de una llanta del modelo i
Arreglos de Una Dimensión
46
9.
Se tienen los siguientes datos: n, ic 0, ic 1, ..., ic n-1
con:
1 ≤ n ≤ 32 , entero ic i reales
Donde: representa el ingreso per cápita de cada entidad federativa de la República Mexicana. ic i
Elabore una función para calcular e imprimir el ingreso per cápita promedio de la República, así como para escribir cuántas entidades tienen un ingreso menor que este promedio y cuántas lo tienen mayor o igual. 10.
Sean los datos: n, x 1, x 2, . . . , x n
con:
1 ≤ n ≤ 25 , entero x i reales
Elabore un programa que realice funciones por cada inciso y la función principal que las mande llamar e imprima los resultados: a) b)
Lea los datos y almacene los x i en un arreglo. Calcule e imprima la media de los datos dada por la fórmula: n
−
x = c)
∑ x i
i =1
n
Calcule e imprima la desviación estándar dada por la fórmula: n
−
2 ∑ ( xi − x)
a= 11.
i =1
n
Un casino desea llevar a cabo unas estadísticas sobre el juego de ruleta. Se solicita un programa modular que cuente el número de veces que cada número es ganador en una jornada y al final del día imprima un reporte con lo siguiente: a) b) c) d)
¿Cuántas veces resultó ganador cada elemento de la ruleta? ¿Cuáles elementos no resultaron ganadores en toda la jornada? ¿Cuál fue el número de cada color que ganó más veces?(suponga que sólo hay uno) ¿Cuál fue el elemento que ganó en más ocasiones?
Arreglos de Una Dimensión
47
Recuerde que la ruleta está formada por 70 elementos. Existen del 1 al 34 rojos, del 1 al 34 negros, el 0 y el 00. El casino desconoce el número de juegos de una jornada. Los datos que el casino proporcionará son los siguientes: número, color número, color ... -1, X
Donde: número
color -1,X
12.
representa el número correspondiente al elemento ganador con 0 ≤ número≤ 34 donde el 0 se representa como un 0 rojo y el 00 se representa como un 0 negro. representa el color correspondiente al elemento ganador. con: R = rojo, N = negro representan el fin de la jornada
Una compañía ha clasificado a sus n (1 ≤ n ≤ 50) empleados dentro de los grupos 1 y 2. Cada empleado del grupo 1 recibirá, a partir de ahora, un aumento de $250.00 a la semana sobre su sueldo actual, mientras que a cada uno de los del grupo 2 sólo se le dará $150.00 adicionales por semana. La información que se proporciona de cada empleado es: clave del empleado (comprendida entre 100 y 2500, inclusive), grupo al que pertenece (1 o 2) y sueldo semanal actual (entre $300.00 y $6000.00). Si un empleado del grupo 1 con el nuevo sueldo gana semanalmente más que el sueldo promedio del grupo, entonces debe cambiar al grupo 2. Elabore un programa modular que: a) b) c)
13.
Lea la información de los n empleados e imprima la clave, grupo y sueldo semanal nuevo para cada empleado, actualizando el grupo si es el caso. Calcule el sueldo promedio de los empleados por grupo y calcule también el promedio general de todos, sin considerar el grupo. Indique cuántos empleados cambiaron del grupo 1 al 2.
Se tienen n alumnos (1 ≤ n ≤ 50) de los cuales se conoce la clave y la calificación final. Elabore un programa modular que: a)
Lea dicha información, la cual se da ya ordenada en forma descendente, con respecto a la clave.
b)
Imprima la clave y calificación de todos los alumnos que obtuvieron calificación superior al promedio del grupo.
c)
Imprima la calificación que obtuvieron los alumnos cuyas claves proporcionará el usuario. Se sabrá que el usuario ya no quiere conocer más calificaciones cuando, en lugar de una clave, proporcione un cero. Utilice búsqueda binaria para buscar las claves que el usuario solicita.
Arreglos de Una Dimensión
48
14.
Se tiene un conjunto de n parejas de datos X i , Y i donde cada pareja representa las coordenadas del punto i de un polígono irregular de n lados. Suponga que las coordenadas se proporcionarán en orden adyacente. Elabore una función para leer el número de lados del polígono, leer las coordenadas de los puntos y obtener el área del polígono irregular utilizando la siguiente fórmula: Area = [(X 0 +X 1 )*(Y 0 -Y 1 ) + (X 1+X 2 )*(Y . .+ (X n-1+X 0 )*(Y /2 1-Y 2 )+. n-1-Y 0 ) ]
Suponga que los X i ,Y i son reales y n es entero con 1 ≤ n ≤ 50 . 15.
Elabore una serie de funciones para leer una serie de n datos desordenados, almacenarlos en el arreglo val (de máximo 50 localidades), ordenarlos de manera creciente, utilizando el algoritmo de selección directa, en ese mismo arreglo y, por último, imprimirlos en orden. val
0 v o Variante: 16.
17.
1 v 1
2 v 2
. .
n-1 v n-1
49 ...
En el arreglo final no debe haber datos repetidos.
Partiendo del ejercicio anterior, elabore un programa que contenga funciones para: a)
Buscar un valor x dentro del arreglo utilizando el algoritmo de búsqueda secuencial. La función debe regresar como resultado la posición en la que se encuentra el valor buscado. Si x no se encuentra en el arreglo, la función calcula la posición en la que debería encontrarse y regresa: posición –1.
b)
Buscar un valor x dentro del arreglo utilizando el algoritmo de búsqueda binaria.
c)
Insertar un valor x en el arreglo de tal forma que se siga conservando el orden ascendente de los valores. Al insertar se debe verificar que haya espacio libre y que x no exista en el arreglo. La función debe regresar como resultado 1 si se insertó x en el arreglo, 0 si x ya existía en el arreglo y –1 si no existe espacio libre en el arreglo.
d)
Eliminar un valor x del arreglo, compactando si es necesario para que no haya espacios libres entre valores. La función debe regresar como resultado 1 si se eliminó x, 0 si x no se encontraba en el arreglo y –1 si el arreglo estaba vacío.
e)
Sustituir un valor x ya existente en el arreglo con un valor y de tal manera que el arreglo siga conservando su orden creciente. La función debe regresar como resultado 1 si se hizo la sustitución, 0 si x no se encontraba en el arreglo y –1 si el arreglo estaba vació.
Elabore un programa modular que lea dos arreglos de diferente número de elementos, los ordene y posteriormente los mezcle en un tercer arreglo guardando el orden. Ho hay repetidos.
Arreglos de Una Dimensión
49
Restricción: no se deben unir los arreglos en desorden, ni copiar un arreglo completo, es decir, los elementos que se almacenen en el tercer arreglo se deben ir guardando en orden. 18.
Elabore un programa modular para leer un arreglo cuyos datos se proporcionan en orden ascendente, leer un segundo arreglo cuyos datos se proporcionan en orden descendente, mezclarlos en un tercer arreglo cuyos datos aparezcan en orden ascendente, y por último, imprimir el arreglo resultante.
19.
En el departamento de matemáticas necesitan un programa en C modular (un módulo por inciso) que calcule el producto escalar de dos vectores, la norma de un vector y el coseno del ángulo que forman. Análisis del problema: El producto escalar de dos vectores de n componentes se define de la siguiente forma: n
pe(n,a,b) =
∑ a(i ) * b(i ) i =1
la norma de un vector de n componentes se define de la siguiente forma: n
norma(n,a) =
∑ a(i ) * a(i) =
pe( n, a, a )
i =1
el coseno del ángulo que forman dos vectores de n componentes se define de la siguiente forma: n
∑ a(i) * b(i) i =1
coseno(n,a,b) =
=
n
n
i =1
i =1
∑ a(i) * a(i) * ∑ b(i) * b(i)
pe( n, a, b) norma( n, a ) * norma( n, b)
a) Haga un módulo llamado leerArreglo que lea los datos del arreglo (los datos son reales). b) Haga un módulo llamado calcularProdEscalar que calcule y regrese el producto escalar. c) Haga un módulo llamado calcularNorma que calcule y regrese la norma, utilizando el módulo calcularProdEscalar. d) Haga un módulo llamado calcularCosen que calcule y regrese el coseno utilizando los módulos anteriores. e) Por último, haga el módulo principal, incluyendo las declaraciones necesarias, para leer el número (n) de datos que el usuario va a ingresar (1 ≤ n ≤ 50), mandar llamar a las funciones anteriores e imprimir el producto escalar, la norma y el coseno.
Arreglos de Una Dimensión
50
20.
Haga un módulo llamado mayoritario que calcule y regrese un uno (1) si un arreglo es mayoritario o cero (0) si no lo es. Análisis del problema: Mayoritario: se dice que es mayoritario, si existe un elemento almacenado en el vector que se repite más de n/2 veces, siendo n el total de valores guardados en el arreglo.
21.
Elabore un programa modular que lea los datos de dos polinomios como se explica posteriormente y que, utilizando un menú, efectúe las siguientes operaciones sobre polinomios: a) Suma. b) Resta. c) Multiplicación. Al seleccionar el usuario una de estas tres opciones dará los polinomios sobre los cuales se realizará la operación solicitada. Los datos que el usuario proporcionará son los coeficientes (reales) y los exponentes (enteros, ≥ 0 y ≤ 15 ) de ambos polinomios, los cuales pueden o no estar ordenados. El final de cada polinomio está dado por un –1 como coeficiente y como exponente. Los términos del polinomio resultante deberán ser desplegados en orden descendente, observando el siguiente formato: ± cX ^e
Donde: ±
c ^ e
representa el signo del término representa el coeficiente del término significa exponenciación representa el valor del exponente
Por ejemplo, suponga que los datos son: 2.5 -2
3 2
-4 -3
2 4
6.5 9.1
1 1
3 6.9
4 8
-1 -1
-1 -1
Entonces, los polinomios que se van a operar son: +2.5X3 - 4X2 + 6.5X1 + 3X4 -2X2 - 3X4 + 9.1X1 + 6.9X8 De tal forma que el resultado de la suma es: 6.9X8 + 2.5X3 - 6X2 + 15.6X1 y se desplegaría como:
Arreglos de Una Dimensión
51
22.
+ 6.9X^8 + 2.5X^3 - 6X^2 + 15.6X^1 Dado un número natural n de 4 cifras, no todas iguales, encuentre e imprima el número mayor y el menor que se puede formar con las mismas cifras. Por ejemplo, si n = 6174, entonces el número mayor que se puede formar es 7641 y el menor 1467.
23.
Elabore un programa que utilizando “la criba de Eratóstenes” encuentre los números primos entre 1 y 999, la cual funciona como sigue: a)
Inicialice todos los elementos de un arreglo (comenzando en el índice 2), de 1000 enteros, con 1 (verdadero). Los elementos con índices 0 y 1 deben inicializarse con 0 (falso).
b)
Comience con el índice i=2 del arreglo. Recorra el arreglo, del elemento i+1 al último, y cada vez que encuentre un elemento cuyo valor sea 1, póngale 0 si su índice es múltiplo de i. Vuelva a hacer lo mismo, pero ahora considerando el primer elemento que sea 1 y cuyo índice sea mayor a i. Continúe este proceso hasta que haya probado todos los elementos iguales a 1.
Cuando se haya terminado este proceso, los índices del arreglo cuyos elementos sean 1 son primos. 24.
Se necesita programar una materia para el próximo semestre. En principio se han establecido 10 grupos para la misma. Para conocer cuántos alumnos hay interesados en cada uno de ellos, se les pidió que votaran indicando su preferencia. La información se proporciona de la siguiente manera: clavealumno votogrupo clavealumno votogrupo . . . -1 -1 donde: clavealumno es un entero positivo que representa la clave única del alumno. votogrupo es un entero entre 1 y 10 para elegir al grupo que prefiere el alumno. Se desea conocer el total de alumnos que votaron por cada grupo de la materia, para saber cuáles grupos se abren o se cancelan. a) Haga una función que calcule las suma de votos y regrese cuántos alumnos votaron en total. b) Haga una función que elimine los grupos que tienen menos de 25 alumnos. c) Haga una función que imprima los grupos que pertenecerán abiertos. (son aquellos que tienen 25 o más alumnos) d) Haga la función principal que mande llamar las dos funciones anteriores.
Arreglos de Una Dimensión
52
25.
En estadística, la moda de una serie de números es aquel número que aparece con más frecuencia. Por ejemplo, dada la lista 1,2,2,3,6,4,7,5,4,6,9,4, la moda es 4, ya que aparece tres veces. Calcule e imprima la moda. Si todos los números son diferentes entonces no hay moda, con lo cual se debe indicar que hubo error. Haga un programa completo en C que deberá tener una función que lea la serie de números, otra función que reciba como parámetro la serie de números y arroje la moda o si no la hay –1 y la función principal que mande llamar las anteriores e imprima la moda (número que mas veces se repitió en caso de haber dos iguales o más mencione el primero).
26.
La tienda “Dulcecito” vende como máximo 100 productos diferentes. La información sobre los productos se encuentra almacenada en los siguientes arreglos paralelos: Producto 0 1 2 … 99
Cantidad 0 1 2 … 99
Producto guarda la clave de los diferentes dulces. Cantidad es la cantidad de cajas de dulces de un productoi. El administrador necesita un programa en C modular (un módulo por inciso) para: f)
Saber: ¿cuál es la clave del producto que tiene la mayor cantidad de cajas? (Función llamada mayor que reciba como parámetro el arreglo Cantidad y regrese el índice de la mayor cantidad de cajas. Asuma que no habrá cantidades iguales.) g) Saber: ¿cuáles son los productos que necesita pedir al proveedor ya que tiene más de una caja y menos de 50 cajas en existencia? (Función llamada pedido que regrese como parámetro el total de productos que necesita pedir al proveedor y generar un vector con las claves de los productos cuya cantidad sea 0
Arreglos de Una Dimensión
53
27.
Se tienen los siguientes datos n x0 f (x0) x1 f (x1) . . . xn-1 f (xn-1) valx
donde: n es el número de xi y f(xi) que se proporcionarán (1<= n <= 50) xi son los valores de x (en orden creciente) f(xi) es el valor de una función para xi valx es el valor de x con el que se va a trabajar. Realiza un programa en C que: Lea en arreglos paralelos los valores de x y f(x). Si existe una xi = valx, imprima f(valx). Si no existe una xi = valx, calcule f(valx) de acuerdo a la fórmula que se da a continuación, inserte este nuevo valor de x (valx) así como el valor calculado f(valx) en sus respectivos arreglos manteniendo el orden creciente de las x´s sin utilizar ningún algoritmo de ordenamiento, e imprima el valor calculado de f(valx) . Suponiendo que valx debe insertarse en la posición k, si k=0 entonces f(valx)=f(x0) si k=n entonces f(valx)=f(xn-1) en cualquier otro caso f(valx) = f(xk-1) + ( (valx - xk-1)* (f(xk) – f(xk-1))/(xk- xk-1) )
Arreglos de Una Dimensión
54
28.
Una cooperativa de productores de naranjas almacena el total de toneladas cosechadas durante el último año en N parcelas (1≤ N ≤ 50). En cada parcela se pueden cultivar dos tipos de naranjas: para jugo y para comer. Se conoce el total de toneladas cosechadas de cada uno de los tipos de naranjas. Si en una parcela no se hubiera cosechado alguno de los tipos, entonces habrá 0. La información se almacena en un arreglo como se muestra en el siguiente ejemplo: Naranjas para para Naranjas Naranjas para para ugo comer
100
500
600
0
800
700
0
1
2
3
4
5
Parcela 1 • •
Parcela 2
Parcela 3
.
.
.
.
2N2N-2
2N2N-1
.
.
MAX - 1
Parcela N
En la parcela 1 se cosecharon: 100 toneladas de naranjas para jugo y 500 toneladas de naranjas para comer. En la parcela 2 se cosecharon: 600 toneladas de naranjas para jugo y 0 toneladas de naranjas para comer.
NOTA: Observe que la información de una misma parcela ocupa posiciones consecutivas en el arreglo. Se le pide que haga un programa en C, usando módulos, que pueda: a) Leer la información: N (1≤ N ≤ 50) y las toneladas por tipo de naranja de cada una las parcelas. b) Calcular e imprimir el total de la producción por parcela. c) Eliminar la información de una parcela. El dato requerido para esta opción es el número de parcela a eliminar. d) Buscar e imprimir el número de una parcela (si hubiera) que no haya tenido producción de ninguno de los tipos de naranjas. Es decir, durante el último año su producción total fue 0.
Arreglos de Una Dimensión
55