Title: Arreglos II: Arreglos unidimensionales
1Arreglos (II)Arreglos unidimensionales
- Clase 13
- Introducción a la Programación
- Marcos Sepúlveda(marcos_at_ing.puc.cl)
2Resumen de la clase anterior
- Un arreglo permite almacenar un conjunto de
valores - Los arreglos almacenan un tipo base
- El tamaño del arreglo se declara en tiempo de
programación - La información almacenada en cada posición del
arreglo puede accesarse a través de su índice - Ejemplos
- Declaración int A100
- Asignación A57
3Ejercicios
- Hacer un programa que pregunta 5 números y luego
los imprime en orden inverso. - Hacer un programa que pregunta los ponderadores
de un polinomio de grado 5(a0 a1x a2x2
a3x3 a4x4 a5x5)y luego evalúa el polinomio
desde x-10 a x10.
4Ejemplo Cálculo de notas
- Se desea calcular el promedio, mínimo y máximo de
una lista de notas correspondientes a un curso.
Se recibirá el número de alumnos y la nota
correspondiente a cada uno, y se entregan los
resultados en la pantalla.
5Ejemplo Cálculo de notas
- 1. Definición del problema
- Conceptualización problema consiste en calcular
el promedio, mínimo y máximo de una lista de
notas de un curso. Cada alumno tiene una nota en
el curso. Se supone que el usuario conoce a
priori la cantidad de alumnos del curso y que
entregará los datos en forma correcta. - Objetivo El objetivo es obtener el promedio, el
máximo, y el mínimo de las notas del curso. - Elementos involucrados Los únicos elementos
involucrados son las notas, la cantidad de
alumnos, el promedio, el mínimo y el máximo.
6Ejemplo Cálculo de notas
- 2. Conceptualización de la solución
- Obtener las notas
-
- 1. Obtener la cantidad de alumnos N
- 2. Iterar para cada uno de los N alumnos
- 2.1 Obtener la nota del alumno
- Calcular el promedio, mínimo y máximo
-
- 1. Inicialmente la suma de notas, SUMA, es 0, el
máximo, MAX, es 1, y el mínimo, MIN, es 7 -
- 2. Iterar para cada para cada uno de los N
alumnos - 2.1 Agregar a SUMA la nota del alumno
- 2.2 Si la nota del alumno es mayor que MAX
- 2.2.1 MAX es ahora la nota del alumno
- 2.3 Si la nota del alumno es menor que MIN
- 2.3.1 MIN es ahora la nota del alumno
-
7Ejemplo Cálculo de notas
- 2. Conceptualización de la solución
- Variables
- N Cantidad de alumnos
- Notas Arreglo de notas de los alumnos del curso
- SUMA Almacena la suma de las notas
- PROM Promedio de notas
- MIN Mínimo de las notas
- MAX Máximo de las notas
8Ejemplo Cálculo de notas
- 3. Especificación del Algoritmo
- Algoritmo
- 1. Obtener las notas
- 2. Calcular el promedio, mínimo y máximo
- 3. Mostrar los resultados
9Ejemplo Cálculo de notas
- 4. Validación
- Es importante analizar casos extremos en los que
el usuario pueda ingresar valores poco usuales.
Por ejemplo, si la cantidad de alumnos es cero o
si es muy grande. Esto es particularmente
importante para validar el programa en C. Por lo
tanto, deben definirse dominios de validación que
representan estas situaciones. - Además, deben considerarse dominios que incluyan
distintos valores para las notas. Por ejemplo,
varias notas distintas y repetidas, todas las
notas iguales, etc. También debe definirse un
dominio en el que el número de estudiantes es
uno, pues podría presentar algún problema.
10Ejemplo Cálculo de notas
- 5. Limitaciones
- Las limitaciones de este algoritmo se presentan
principalmente en su implementación en el
lenguaje de programación C. Dado que se va a
utilizar un arreglo para almacenar las distintas
notas, el máximo número de notas que podrán
ingresarse estará limitado por la dimensión que
se defina para el arreglo. - Por otra parte, no se planean controles de
validez sobre los números que ingresa el usuario,
de modo que se supone que se ingresarán valores
correctos, en el rango de 1 a 7. De no ser así,
el comportamiento del programa no está definido
(es decir, puede pasar cualquier cosa). - También se supone que el número de alumnos es
mayor que cero, o el comportamiento del programa
no está definido. Por ejemplo, si se ingresa como
número de alumnos un cero, esto producirá una
división por cero al calcular el promedio.
11Ejemplo Cálculo de notas
- include ltstdio.hgt
- include ltstdlib.hgt
- define MAX_NUM_ALUMNOS 100
- define MAX_NOTA 7.0
- define MIN_NOTA 1.0
- int main()
-
- int numAlumnos,i
- float notasMAX_NUM_ALUMNOS,
- suma 0.0,
- min MAX_NOTA,
- max MIN_NOTA,
- prom
- printf("Ingrese el numero de alumnos en la
seccion ") - scanf("d", numAlumnos)
12Ejemplo Cálculo de notas
- for (i0 iltnumAlumnos i)
-
- suma notasi
-
- if (notasi lt min) min notasi
- if (notasi gt max) max notasi
-
-
- prom suma/numAlumnos
-
- printf("\tPromedio 1.1f\n", prom)
- printf("\tMinimo 1.1f\n", min)
- printf("\tMaximo 1.1f\n", max)
13Funciones para representar conjuntos
- inicializa_conjunto(int a)
- carga_conjunto(int a)
- longitud_conjunto(int a)
- es_elemento(int a, int b)
- ingresa_elemento(int a, int b)
- imprime_conjunto(int a)
- union_conjuntos(int a, int b, int c)
- interseccion_conjuntos(int a, int b, int c)
14Implementación de funciones de conjuntos
include ltstdio.hgt include ltstdlib.hgt define
TAMANO 20 / Se considera que toda posicion
del arreglo que tiene un 0, no es un elemento
del conjunto entonces un arreglo de TAMANO
posiciones con valores 0, es un conjunto
vacio / void inicializa_conjunto(int a)
int recorrido for (recorrido0recorridoltTAMAN
Orecorrido) arecorrido 0 void
carga_conjunto(int a) int elemento, i
0 do printf("Ingrese el elemento d del
conjunto ",i1) printf("lt 0 para terminar
gt ") scanf("d",elemento) ai
elemento i while(elemento i lt
TAMANO)
15int longitud_conjunto(int a) int
recorrido, longitud0 for
(recorrido0arecorrido!0
recorridoltTAMANOrecorrido) longitud
return(longitud) int es_elemento(int a, int
b) int recorrido for
(recorrido0recorridoltlongitud_conjunto(b)recor
rido) if (a brecorrido) return(1)
return(0) void ingresa_elemento(int a,
int b) int posicion posicion
longitud_conjunto(b) if (!es_elemento(a,b)
posicion lt TAMANO) bposicion a void
imprime_conjunto(int a) int recorrido,
longitud longitud longitud_conjunto(a)
printf("El conjunto tiene d elementos y son
",longitud) for (recorrido0recorridoltlongi
tudrecorrido) if (arecorrido) printf("
d ",arecorrido) printf("\n")
16 void union_conjuntos(int a, int b, int c)
int recorrido int tam0
inicializa_conjunto(a) for(recorrido 0
recorrido lt longitud_conjunto(b) recorrido)
if (!es_elemento(brecorrido,a))
if (tam lt TAMANO) atam brecorrido
tam for(recorrido 0 recorrido lt
longitud_conjunto(c) recorrido) if
(!es_elemento(crecorrido,a)) if
(tam lt TAMANO) atam crecorrido tam
void interseccion_conjuntos(int a,
int b, int c) int recorrido, tam
0 inicializa_conjunto(a) for (recorrido
0 recorrido lt longitud_conjunto(b)
recorrido) if (es_elemento(brecorrido,c))
if (tam lt TAMANO) atam
brecorrido tam
17int main() int conjunto0TAMANO,
conjunto1TAMANO, conjunto2TAMANO,
conjunto32TAMANO inicializa_conjunto(conjun
to0) ingresa_elemento(2,conjunto0)
ingresa_elemento(3,conjunto0)
ingresa_elemento(4,conjunto0)
imprime_conjunto(conjunto0) printf("5 es
elemento del conjunto 0? (0falso,1verdadero)
d\n", es_elemento(5,conjunto0))
printf("Se ingresa 5 al conjunto 0\n")
ingresa_elemento(5,conjunto0) printf("5 es
elemento del conjunto 0? (0falso,1verdadero)
d\n", es_elemento(5,conjunto0))
imprime_conjunto(conjunto0) printf("----\n")
inicializa_conjunto(conjunto1)
inicializa_conjunto(conjunto2)
printf("Ingrese elementos del conjunto 1\n")
carga_conjunto(conjunto1) printf("----\n")
printf("Ingrese elementos del conjunto 2\n")
carga_conjunto(conjunto2) printf("----\n")
printf("Conjunto 1 ") imprime_conjunto(conjun
to1) printf("Conjunto 2 ")
imprime_conjunto(conjunto2) printf("Conjunto1
Conjunto2 que consta de ")
union_conjuntos(conjunto3,conjunto1,conjunto2)
printf("d elementos es\n",longitud_conjunto(conj
unto3)) imprime_conjunto(conjunto3)
printf("\n") printf("Conjunto1 Conjunto2
que consta de ") interseccion_conjuntos(conjunt
o3,conjunto1,conjunto2) printf("d elementos
es\n",longitud_conjunto(conjunto3))
imprime_conjunto(conjunto3) printf("\n")