Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arreglos 6
06.01 Arreglo de una Dimensión
Un arreglo arr de una dimensión (objeto) es una colección de datos del mismo tipo, en el papel podemos representar un areglo de 3
elementos:
2 4 6 8 10 12
0 1 2 3 4 5 // índices
A las posiciones del arreglo se les llama índices, comienzan en 0 y terminan en 5 (uno menos que el número de elementos).
Un arreglo es un objeto muy sencillo; sin embargo tiene muchas aplicaciones; en este capítulo aprenderemos las más frecuentes e
importantes.
int n;
scanf("%d", &n);
int nn[n]; // arreglo de n elementos
arr RAM
Segmento de programa
PÁGINA: 1
Lenguaje C++
Interpretaciones de un arreglo
Se puede interpretar como:
Una función : arr: Indices → valores, ejemplo: arr[2] = 6
Una serie histórica, en la que el índice representa al tiempo y arr puede representar a cualquier variable: para t=2, arr[2] = 2.
Una relación inversa: Valores → Indices, ejemplo: 6 → arr[2], 3 → arr[..] no existe índice,
Flujo de trabajo
1) El programador define un arreglo de una dimensión, ejemplo:
int arr[exp]; // arr tiene exp (expresión ent o char > 0) elementos int
// si exp < 0 compila; pero se producirán errores por corrupción de datos.
Ejemplo:
int n = 2, arr[n+1]; // arr tiene 3 elementos
Cada elemento del arreglo se comporta como una variable simple:
arr[0] = 2; // asigna 2 al primer elemento
arr[1] = 6;
arr[2] = 4;
printf("%d\n", arr[0]); // imprime 2
for(i=0; i < 4; i++) printf("i: %d", arr[i]+1);
2) El compilador valida la sintaxis de las instrucciones, una por una; NO valida la lógica del programa.
3) El sistema operativo aloja el arreglo en la RAM y opera con los valores, conoce la dirección de inicio del arreglo y su tamaño en bytes;
pero no conoce el número de elementos; sin embargo lo puede calcular mediante:
Sizeof(arr)/sizeof(int) ≡ 3
arr
2 6 4
0X ….4 // dirección de inicio del arreglo
Posiciones (índices): [0] [1] [2] // el primer elemento inica en 0
Solo existe físicamente lo que está escrito en negro, lo que está en rojo son notas para el lector.
Notas:
• Tanto al definir como al asignar valores a un arreglo se utilizan expresiones enteras o char:
int , n = 2, arr[n+1] = {1, 2, 3}; // define un arreglo de longitud 3;
arr[n-1] = n+2; // asigna 4 a arr[1]
• Los elementos no asignados, contienen el valor que encontraron en la memoria física.
arr, Atento al índice i
PÁGINA: 3
Lenguaje C++
Si pasa un arreglo arr a una función, NO se pasan todos sus elementos; se pasa solo un valor: la dirección del primer elemento de arr;
esto permite compartir todo arr entre la main() y la función llamada: si se modifican los elementos de arr dentro de la función, se
modifican también dentro de main( ); a diferencia de lo que sucede cuando se pasa una variable simple: NO se modifica.
Ejemplo: Sea arr = {2, 4, 6, 8}, calcular la mitad de sus elementos
#include <cstdio>
void mitad(int, int arr[]);
main(){
int i, arr[4] = {2, 4, 6, 8}; // arr inicia en 0xf...0
mitad(4, arr); // pasa: 4, y la dirección de arr (hexadecimal): 0xf...
for(i=0; i<4; i++)
printf("%d ", arr[i]); // arr == {1, 2, 3, 4}
}
void mitad(int n, int arr[ ]){ // n recibe valor 4, arr recibe la dirección 0xf...0
// void mitad(int n, int arr[n]){ // También es válido
int i;
for(i=0; i < n; i++) arr[i] /=2; // calcula la mitad a arr.
}
Atento a los detalles del paso de argumentos a parámetros de funciones, es una fuente de errores muy frecuente:
• Debe pasar el número de elementos y el arreglo porque la función llamada no tiene modo de saberlo:
mitad(4, arr); // llamando
…
void mitad(int n, int arr[ ]){ // definición de mitad
PÁGINA: 4
Lenguaje C++
• Al ejecutar se corresponden tipos y número de datos en la secuencia 1, 2, 3 4 del siguiente ejemplo:
//Prototipos válidos: // 4: Concuerda en tipo y número de parámetros con suma( ) en 3
int suma(int n , int arr[ ]); // el más usado
// int suma(int m, int n[ ]);
// int sumar(int b, int a[]);
// int sumar(int, int []);
// Prototipos no válidos:
// suma(int n, float m[ ]);
// float suma(int n, int m);
main(){
int n=4, arr[ ] = {1, 2, 3, 4}; // 1: Define variables
// llamadas válidas
int s = suma(4, arr); // 2: llama a suma(): arr[ ] es int, y tiene 4=n elementos
suma(n, arr);
float media = suma(n, arr)/(float)n;
/* Llamadas no válidas:
suma(arr);
suma(1,4);
suma(4, {1,2,3,4});
*/
}
int suma(int n, int arr[ ]){ ... return 10;} // 3: Define a suma( ): n es int , arr[ ] es int.
Ejemplo:
Problema: Hallar todos los números primos menores o iguales a n=26
Análisis: Los números primos son: 2, 3, 5, 7, 11, 13, 17, 19 Y 23
Diseño 1(algortimo de Eratóstenes):
Toma los números arr[ ] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}:
1) busca el primer valor k = 2 != 0, y asigna 0 a todos los elementos múltiplos de k hasta el final:
K=2: Arr[ ] = {2, 3, 0, 5, 0, 7, 0, 9, 0, 11, 0, 13, 0, 15, 0, 17, 0, 19, 0, 21, 0, 23, 0, 25, 0}
2) busca el siguiente valor k = 3 != 0, y asigna 0 a todos los elementos múltiplos de k hasta el final.
K=3: Arr[ ] = {2, 3, 0, 5, 0, 7, 0, 0, 0, 11, 0, 13, 0, 0, 0, 17, 0, 19, 0, 0, 0, 23, 0, 25, 0}
Repiti el paso 2 para k= 5, 7, 11 y 13
K=11: Arr[ ] = {2, 3, 0, 5, 0, 7, 0, 0, 0, 11, 0, 13, 0, 0, 0, 17, 0, 19, 0, 0, 0, 23, 0, 0, 0}
Al conjunto final se le llama Criba de Eratóstenes: Todos los números distintos de 0 son primos
Diseño 2 (Algoritmo que usa arreglos): Utilizaremos la misma idea de Eratóstenes; pero aprovechando un dato que no era
evidente para él: los índices del arreglo -que representarán a los números-, nuestro programa será más veloz. Partamos de:
arr : {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
PÁGINA: 6
Lenguaje C++
Indice i: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
1) Tomemos i=2 y asignemos arr[i] =0 para todos los índices múltiplos de i:
arr : {0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}
Indice i: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
2) busca el siguiente índice i tal que arr[i]=1 → i=3 y asignemos arr[i] =0 para todos los índices múltiplos de i:
arr : {0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0}
Indice i: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Repetir el paso 2: i = 5, 7, 11, y 13:
arr : {0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0}
Indice i: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
//* 06_05.c: Generar la criba de Eratóstenes para n=26
#include<cstdio>
void eratostenes(int n, int arr[]);
main(){
int n = 26+1, arr[n], i;
eratostenes(n, arr);
printf("Números primos: ");
for(i=0; i<n; i++) if(arr[i]) printf("%d ", arr[i]);
}
void eratostenes(int n, int arr[]){
int i, j, n2=n/2;
arr[0] = arr[1] = 0;
for(i=2; i<n; i++) arr[i]=1; // partida
for(i=2; i<n2; i++) if(arr[i]) for(j=2; i*j<n; j++) arr[i*j]=0; // asignar 0
}
Salida: Números primos: 2 3 5 7 9 11 13 17 19 23
/* 06_06.c: Leer un número n > 1, definir dos arreglo nn1[n] y nn2[n], asígnar valores
aleatorios entre 10 y 20 a nn1; asignar valores a nn2 a partir de nn1, invirtiendo los
elementos, ejemplo:
si: nn1 = {12, 17, 20, 16} → nn2 = {16, 20, 17, 12}
Reporte nn1 y nn2.
*/
#include<cstdio>
#include<ctime>
#include<cstdlib>
void asignar (int n, int nn1[]);
void invertir(int n, int nn1[], int nn2[]);
void reportar(int n, int nn[]);
main(){
int n;
printf("Tamaño del arreglo: "); scanf("%d", &n); // se ingresó = 5
int nn1[n], nn2[n];
asignar(n, nn1);
invertir(n, nn1, nn2);
printf("Valores del arreglo: ");
reportar(n, nn1);
printf("Valores invertidos: ");
reportar(n, nn2);
}
void asignar(int n, int nn[]){
int i;
srand(time(NULL)); // Semilla de rand()
for(i=0; i<n; i++) nn[i] = rand()%11+10; // valores entre 10 y 20
}
void invertir(int n, int nn1[], int nn2[]){
int i, j;
for(i=0, j = n-1 ; i<n; i++, j--) nn2[j] = nn1[i];
}
void reportar(int n, int nn[ ]){
int i;
for(i=0; i<n; i++) printf("%d\t", nn[i]);
printf("\n");
PÁGINA: 7
Lenguaje C++
}
Salida:
Tamaño del arreglo: 5
Valores del arreglo: 17 14 12 19 15
Valores invertidos: 15 19 12 14 17
Ejemplo: Escribir un programa que analice el arreglo {2, 3, 4, 5, 9, 20, 22, 50, 12, 15, 16, 17}, el cual contiene números enteros positivos,
encuentre todas las ternas (a, b, c) que formen un triángulo e indique si es rectángulo:
a) imprima los lados del triángulo e indique si es rectángulo.
b) imprima la cantidad total de triángulos .
Ejemplo: para los 5 primeros elementos del arreglo {2, 3, 4, 5, 9}, la salida será:
2, 3, 4
2, 4, 5
3, 4, 5 rectángulo
Triángulos = 3
// 06_07.c: Encontrar todos los triángulos posibles que se pueden formar con los elementos de un arreglo
de números positivos
#include<cstdio>
main(){
int i, j, k, a, b, c, n = 12, sumaT = 0, arr[12] = {2, 3, 4, 5, 9, 20, 22, 50, 12, 15, 16, 17};
printf("Triángulos:\n");
for(i=0; i<n-2; i++) // análisis de ternas
for(j=i+1; j<n-1; j++)
for(k=j+1; k<n; k++){
a = arr[i]; // primer elemento de la terna
b = arr[j]; // segundo elemento de la terna
c = arr[k]; // tercer elemento de la terna
if(a+b>c && a+c>b && b+c>a){ // prueba si es triángulo
printf("%d,\t%d,\t%d", a, b, c);
sumaT++;
a *= a;
b *= b;
c *= c;
if(a+b==c || a+c==b || b+c==a) // prueba si es rectángulo
printf(" \trectángulo");
printf("\n");
}
}
printf("Triángulos = %d\n", sumaT);
}
PÁGINA: 8
Lenguaje C++
Salida:
Triángulos:
2, 3, 4
2, 4, 5
2, 15, 16
2, 16, 17
3, 4, 5 rectángulo
3, 20, 22
…
Triángulos = 59
1) El algoritmo más sencillo es el de la burbuja (bubble sort); que emplea la siguiente estrategia:
Supongamos que ordenaremos ascendentemente al arreglo arr[5] = {17, 16, 18, 10, 19}; longitud n = 5.
Recorreremos el arreglo con dos índices i y j: arr[i] arr[j]:
0<= i <n-1 Arreglo: {17, 16, 18, 10, 19}
Indices j: 0 1 2 3 4
0 Coloca el mínimo (del arreglo) en la posición 0 // intercambia arr[0] con arr[j]
for(j = i+1; j<n; j++) if(arr[i] > arr[j]) {temp = arr[i]; arr[i] = arr[j]; arr[j] = temp } {10, 17, 18, 16, 19
1 Coloca el mínimo (de la parte derecha) en la posición 1: // intercambia arr[1] con arr[j] {10, 16, 18, 17, 19}
2 Coloca el mínimo (de la parte derecha) en la posición 2: // intercambia arr[2] con arr[j] {10, 16, 17, 18, 19}
3 Coloca el mínimo (de la parte derecha) en la posición 3: // intercambia arr[3] con arr[j {10, 16, 17, 18, 19
Diseño del for(i=0; i< n-1; i++)
algoritmo for(j = i+1; j<n; j++) if(arr[i] > arr[j]) {
temp = arr[i]; arr[i] = arr[j]; arr[j] = temp // intercambia arr[i] con arr[j]
}
//Este algoritmo suele ser el más lento porque se hacen muchos intercambios de valores
2) El método insertion sort, es muy natural para los humanos, lo usamos para ordenar fichas, supongamos que las fichas son:
fichas: arr = {17 12 15 18 9 }
indices i: 0 1 2 3 4 (n = 5)
Ordenamos de izquierda a derecha: repitiendo un proceso de 3 pasos:
temp: 12 15 18 9
1 3 3
3 1 3 1 1
arr: { 17 → 12 15 18 9} → {12 17 →15 18 9}→ { 12 15 17 18 9} →{ 12 15 17 18 → 9 } → {9 12 15 17 18}
i: 0 2 1 22 2 3 24
4) El quick (rápido) sort utiliza la estrategia divide y vencerás en modo recurrente: elije un pivot dentro del arreglo, por ejemplo el último
elemento, y divide el arreglo en dos partes: los menores o iguales que el pivot y los mayores; para cada elemento repite el proceso,
en modo recurrente, hasta que cada parte tenga dos elementos, ejemplo:
PÁGINA: 10
Lenguaje C++
fuente: https://www.geeksforgeeks.org/quick-sort/
El arreglo ordenado se obtine coleccionando los pivots de izquierda a derecha: {10, 30, 40, 50, 70, 80, 90}. buscando el algoritmo en
la dirección tenemos:
#include<cstdio>
void quickSort(int arr[], int low, int high);
int partition (int arr[], int low, int high);
void swap(int *m, int *n);
main(){
int arr[] = {10, 80, 30, 90, 40, 50, 70};
quickSort(arr, 0, 6); // índices de 0 a 6
for(int i=0;i<7; i++) printf("%d\n", arr[i]);
}
void quickSort(int arr[], int low, int high){ // función recursiva
int pi;
if (low < high) {
pi = partition(arr, low, high); // pi is partitioning index, arr[pi] is now at right place
quickSort(arr, low, pi - 1); // Before pi
quickSort(arr, pi + 1, high); // After pi
}
}
int partition (int arr[], int low, int high){
int pivot, i, j;
pivot = arr[high]; // pivot (Element to be placed at right position)
i = (low - 1); // Index of smaller element
for (j = low; j <= high- 1; j++) // If current element is smaller than the pivot
if (arr[j] < pivot) {
i++;
swap (&arr[i], &arr[j]);
}
swap (&arr[i + 1], &arr[high]);
return (i + 1);
}
void swap(int *m, int *n){ // usa apuntadores: lo verá en el siguiente capítulo
int k = *m;
*m = *n;
*n = k;
}
Nivel 1
Nivel 2
Nivel 3
PÁGINA: 11
Lenguaje C++
6) El Shell (apellido del autor) sort utiliza funciones recursivas; en internet puede encontrar videos que representan el diseño del
algoritmo y los programas que lo desarrollan.
7) El heapsort puede ser consultado en internet, una dirección interesante que muestra el diseño es:
https://www.youtube.com/watch?v=jPRLy0zudI8
Para el desarrollo se utilizan arboles binarios y funciones recursivas, y también puede buscar en internet.
En los casos de ordenamiento anteriores, normalmente hemos ordenado de izquierda a derecha, también se puede ordenar de derecha
a izquierda, o combinando:
una pasada (i = 0) a derecha→ una pasada (k = n-1) a izqueirda →
una pasada (i = 1) aderecha → una pasada (k = n-2) a izquierda → ...
suele ser más rápido.
Si hay información de la tendencia de los elementos, un algoritmo puede aprovecharla y ser más veloz.
3) Aplicaciones estadísticas como: Calcular la frecuencia de ocurrencia de los elementos. La salida será:
Elemento Frecuencia
2 1
3 3
6 2
7 1
10 1
A este punto, es muy ilustrativo recordar que una estructura de repetición está formada por 5 partes:
1: Inicio de variables: var1, var2, …
2: Condición de repetición del bloqueInstrucción.
3: Bloque o instrucción que se repite usando var1, var2, … y otras.
4: Variación de var1, var2, …
5: fin de repetición.
PÁGINA: 12
Lenguaje C++
Las cuales se comentan en el programa:
// 06_09.c
#include<cstdio>
main(){
int arr[ ] ={2,3,3,3,6,6,7,10}, n=8, i, ant, fre; printf("Elemento Frecuencia\n");
for(i=1, ant= arr[0], fre=1; i<n; i++) // 1; 2; 4
if (arr[i]==ant) fre++; // 3
else{
printf("%d\t %d\n", ant, fre);
ant = arr[i];
fre = 1;
}
printf("%d\t %d\n", ant, fre); // 5
}
Salida: La solicitada
Definición:
int arr[3][2];
Se puede definir y asignar, siempre que al menos una dimensión sea constante:
int arr[3][2] = {{1, 2}, {6, 7}, {12 , 13}};
int arr[3][2] = {1, 2 , 6, 7, 12 , 13};
int m=3, arr[m][2] = {1, 2 , 6, 7, 12 , 13};
int n=2, arr[3][n] = {1, 2 , 6, 7, 12 , 13};
int const m=3, n=2; arr[m][n] = {1, 2 , 6, 7, 12 , 13};
La longitud en una dimensión, es el número de elementos en esa dimensión, ejemplo la longitud, en la dimensión 1, de arr es 3.
Los valores se alojan iniciando en la posición [0,0] y terminan en [longitu1–1, longitud2-1].
Ejemplos:
Printf("\n arr[0][0] = %d, arr[0][1] = %d", arr[0][0], arr[0][1]); // Salida: arr[0][0] = 1, arr[0][1] = 2
arr[0][0] = 6; // Asigna 6 al primer elemento [0,0]
arr[-1][0] = 4; // compila, pero hay problemas en tiempo de ejecución
arr[4][5] = 5; // compila, pero hay problemas en tiempo de ejecución
Atención:
Puede definir y asignar: int m=3, n=2, arr[3][2] = {1, 2 , 6, 7, 12 , 13}; // manejo estático de dimensiones
También compila: int m=3, n=2, arr[m][n] = {1, 2 , 6, 7, 12 , 13}; // manejo paramétrico de dimensiones
pero al momento de ejecutar, solo los valores de la primera fila: 1, 2 , 6 serán correctos; la segunda fila tendrá valores inesperados;
para verificarlo haga un print(“...”, arr[i][j]) del arreglo. Este problema lo resolveremos en el capítulo de apuntadores.
PÁGINA: 13
Lenguaje C++
Paso de argumento arreglo a una función
Si pasa un elemento de un arreglo arr[ ][ ] a una función, se pasa su valor, como lo hace con cualquier variable, ejemplo:
…
void mitad(int n){ // n recibe el valor 4, no conoce nada sobre su procedencia
n = n/2; // n = 4/2; pero el valor de arr[0][1] no cambiará
...
}
main(){
int arr[2][3] = {2 , 4, 6, 8, 10, 12};
mitad(arr[0][1]) ; // llamando pasa el valor 4
…
// arr[0][1] ≡ 4, no cambia su valor
}
Si pasa un arreglo arr[ ][ ] completo a una función, no se pasan todos sus elementos; se pasa solo un valor hexadecimal: la dirección
del primer elemento arr[0][0]; esto permite compartir todo arr entre la main() y la función: si se modifican los elementos de arr dentro de la
función, se modifican también dentro de main( ); a diferencia de lo que sucede cuando se pasa un elemento específico: no se
modifica.
en main( ) arr[3][2] = {2, 3, 6, 8, 10, 12} .
en mitad( ) recibe el arreglo y le saca la mitad, luego arr = {1, 2, 3, 4, 5, 6}.
regresa a main() y verifica los valores de arr = {1, 2, 3, 4, 5, 6}; cosa que no sucede si pasará los elementos uno por uno:
#include <cstdio>
void mitad(int m, int n, int arr[][2]); // prototipo
main(){
int arr[3][2] = {2, 4, 6, 8, 10, 12};
mitad(3, 2, arr); // llamando
// arr = {1, 2, 3, 4, 5, 6} se sacó la mitad
}
void mitad(int m, int n, int arr[][2]){ // m = 3, n= 2
// Restricción: es obligatorio indicar la segunda dimensión [2]; sino no compila, ver la Nota al final
// void mitad(int m, int n, int arr[3][2]) También compila
int i, j;
for(i=0; i < m; i++) for(j=0; j < n; j++) arr[i][j] /=2;
}
El motivo de la restricción anterior es que la función llamada no conoce las longitudes de las dos dimensiones de arr y exige que se le de
la longitud de la segunda dimensión para poder ubicar la matriz en la memoria. Esto es una grave limitación de la parametrización que
será resuelto más adelante, en el capítulo de apuntadores.
Ejemplo:
// 06_10a.c : Hallar la media de arr[ ][ ] en main().
#include<cstdio>
main(){
int arr[3][2] = {1, 2, 6, 7, 12 , 11}, i, j;
float media = 0;
for(i=0; i < 3; i++)
for(j=0; j < 2; j++) media += arr[i][j];
printf("\nLa media es: %f\n", (float)media/(2*3));
}
Salida: La media es: 6.50000
PÁGINA: 14
Lenguaje C++
Salida:
La media es: 6.50000
Se puede definir y asignar, siempre que la primera o al menos dos dimensiones sean constantes:
int int m=3, n=2, k=2, arr[3][2][k] = {1, 2 , 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int int m=3, n=2, k=2, arr[m][3][k] = {1, 2 , 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // error
En este caso: se define arr y luego se asigna a cada elemento por separado
La longitud en una dimensión, es el número de elementos en esa dimensión, ejemplo la longitud, en la dimensión 1, de arr es 3.
Los valores se alojan iniciando en la posición [0][0]... y terminan en [longitud1–1][longitud2-1]...
PÁGINA: 15
Lenguaje C++
}
Salida:
La media es: 6.50000
El motivo de la restricción anterior es que media() no conoce las longitudes de las dimensiones del arreglo, podrían ser: 3 x 2 x 2; 2 x 3 x
2; 2 x 2 x 3; 6 x 2 x 1; etc; por eso exige la segunda y tercera longitudes.
No es la idea que usted aprenda de memoria la solución a estos problemas "tipo"; sinó que:
• Tenga una panorámica de las aplicaciones generales de los arreglos.
• Siga una estrategia de solución: entienda bien el problema (análisis); plantee un modelo de solución (diseño): entienda la lógica,
simule la realidad, por ejemplo para ordenar, use fichas y ordénelas manualmente; programe: interpreta el diseño en el lenguaje
C++ y finalmente verifique la matriz de casos de prueba.
• Estas aplicaciones de los arreglos numéricos, también se aplicarán en arreglos de caracteres, apuntadores y estructuras, que serán
estudiadas más adelante; por lo tanto este es el momento para desarrollar una buena plataforma de conocimientos aplicables a
futuro.
2) Lea n, genere un arreglo de esa longitud con números aleatorios entre 1 y 20 y calcule: el mínimo, el máximo, la media y la
varianza. Ordene el archivo y calcule la mediana.
3) Se tiene:
int vec1[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, vec2[10];
Utilice un for () { .. } para asignar valores a vec2 a partir de vec1, de tal modo que los valores queden en orden inverso: 10, 9, 8, 7,
6, 5, 4, 3, 2, 1.
7) Lea una matriz temp[4][12] que contiene datos de temperatura mes a mes de 4 años a partir del año 2013: Reporte los promedios
anual y mensual en el siguiente formato:
Promedio anual
Año: 2013 2014 2015 2016
Promedio: nn nn nn nn
Promedio mensual
Mes: Enero Febrero Marzo ...
Promedio: nn nn nnn
8) Dado el arreglo aa[8] = {10, 2, 5, 6, 3, 7, 6, 4} ordénelo ascendentemente para que quede: {2, 3, 4, 5, 6, 6, 7, 10} y luego
descendentemente para que quede: {10, 7, 6, 6, 5, 4, 3, 2}.
Sugerencias: complete el código
…
for(i=0; i < 7; i++) // algoritmo de la burbuja
for(j=i+1; j < 8; j++)
if(aa[i] > aa[j]) {
tem = aa[i];
aa[i] = aa[j];
aa[j] = tem;
}
9) Lea un arreglo aa[8] = {10, 2, 5, 6, 3, 7, 6, 4} clasifique en otro arreglo ab[8] para que queden primero los números pares: {10, 2, 6,
6, 4, 5, 3, 7).
10) Sea la matriz:
int arr[3][2]; Dele valores:
12 2
arr = 6 7
1 11
Ordene las filas de arr por la columna 1 para obtener:
1 11
arr = 6 7
12 2
PÁGINA: 17