Title: Algoritmos y Programacin Clase 10
1Algoritmos y ProgramaciónClase 10
- TDU (Tipos de datos Definidos por el Usuario)
- Ordenamiento y búsqueda
2Repaso vectores
- Un archivo de datos contiene las notas de un
parcial - Encuentre cuál es la nota más frecuente y cuántas
veces se repite
3Moda
- Leer datos de archivo y almacenar en vector
dinámico nota(). Al finalizar esta parte del
programa, se conocen las dimensiones (1..n) y los
componentes de nota. - Para encontrar la moda, recorrer el vector,
comparando cada elemento con todos los demás - Dos ciclos anidados (ciclo i1..n y ciclo j1..n)
- En el ciclo externo se cuenta la nota que aparece
más veces - En el ciclo interno se cuenta cuántas veces se
repite una nota i (nota(i)nota(j)?)
4Moda definir variables
Dim n As Integer 'número de estudiantes Dim
nota() As Double 'vector que almacena las notas.
Las entradas se leen desde un archivo Dim nveces
As Double 'número de veces que se repite cada
nota Dim moda As Double 'nota más frecuente Dim
mayor_freq As Double 'mayores repeticiones de una
nota Dim nota_actual As Double 'nota que se está
buscando
5Moda (interfaz)
Muestra cuántas observaciones se leyeron (n)
Lee de archivo Redimensiona y llena el vector
nota(1..n)
Command button mode.Sub mode_Click() Encuentra
la moda
Textbox show_moda
6Al oprimir encontrar moda
- Private Sub mode_Click()
- 'inicializar contador de las mayores repeticiones
- mayor_freq 0
- moda 0
- 'iniciar recorrido, ciclo i
- For i 1 To n
- nveces 0
- nota_actual nota(i)
- 'recorrido comparando la nota actual con todas
las demás ciclo interior j - For j 1 To n
- If nota_actual nota(j) Then
- nveces nveces 1
- Next j
- 'si el número de veces que se repite la nota
actual es mayor que el de la - 'mayor frecuencia encontrada, actualice el
contador y la moda. - If nveces gt mayor_freq Then
- mayor_freq nveces
- moda nota_actual
- Else
nota_actual guarda la variable cuyo número de
ocurrencias contamos
nveces cuenta cuántas veces ocurre nota_actual
En el ciclo externo se cuenta la nota que aparece
más veces (moda, que aparece mayor_freq veces)
7Ejemplo 2
- El archivo Datos.txt contiene varios registros
con los siguientes datos de estudiantes sexo
(M, F), edad (14, 35), código de la comuna
donde vive (1, 16). - Elaborar un programa en VB que efectúe los
siguientes procesos - Leer todos los registros de datos.
- Calcular el total y el porcentaje de mujeres y de
hombres. - Calcular el total y el porcentaje de los mayores
de edad y de los menores de edad. - Determinar el porcentaje de los estudiantes que
viven en las comunas de código impar pero
distinto de 3.
8Ejemplo 2 Definición de variables
- Datos de entrada
- Ei ? Registro i-ésimo de un estudiante.
- Cada registro tiene
- - Un elemento Sexo de tipo String
- - Un elemento Edad de tipo Integer
- - Un elemento CodComuna de tipo Integer
- Datos de salida
- NumH ? Número total de Hombres
- NumM ? Número total de Mujeres
- PorcH ? Porcentaje de Hombres
- PorcM ? Porcentaje de Mujeres
9Ejemplo 2 Definición de variables
- MenE ? Número de menores de edad
- MayE ? Número de mayores de edad
- PorcMenE ? Porcentaje de menores de edad
- PorcMayE ? Porcentaje de mayores de edad
- PorcImpar ? Porcentaje de estudiantes que viven
en comunas de código impar y distinto de 3. - Variables auxiliares
- N ? Contador de estudiantes
- NumImpar ? Número de estudiantes que viven en
comunas de código impar y distinto de 3.
10Ejemplo 2 Código fuente
- '(en un módulo estándar)
- 'Requerir declaración de variables
- Option Explicit
- 'Declaración del TDU Estudiante
- Public Type Estudiante
- Sexo As String 1
- Edad As Integer
- CodComuna As Integer
- End Type
- 'Declaración de variables globales
- Dim N As Integer, E() As Estudiante, NumH As
Integer - Dim NumM As Integer, PorcH As Single, PorcM As
Single - Dim MenE As Integer, MayE As Integer
- Dim PorcMenE As Single, PorcMayE As Single
- Dim PorcImpar As Single, NumImpar As Integer
11Ejemplo 2 Código fuente
- '(en el evento Click de un CommandButton)
- ChDrive App.Path 'Cambiamos el drive actual
- ChDir App.Path 'Cambiamos el directorio actual
- 'Abrimos el archivo
- Dim NumArch As Integer
- NumArch FreeFile()
- Open "Datos.txt" For Input As NumArch
- 'Leer datos mientras no sea el final del archivo
- N 0
- Do While Not EOF(NumArch)
- N N 1
- ReDim Preserve E(1 To N)
- Input NumArch, E(N).Sexo, E(N).Edad,
E(N).CodComuna - Loop
- Close NumArch
12Ejemplo 2 Código fuente
- 'Cálculos
- NumH 0 NumM 0 MenE 0 MayE 0 NumImpar
0 - Dim I As Integer
- For I 1 To N
- If E(I).Sexo "M" Then NumH NumH 1
- Else NumM NumM 1 End If
- If E(I).Edad lt 18 Then MenE MenE 1
- Else MayE MayE 1 End If
- If E(I).CodComuna Mod 2 1 And _
- E(I).CodComuna ltgt 3 Then NumImpar NumImpar
1 - Next I
- PorcH NumH / N PorcM NumM / N
- PorcMenE MenE / N PorcMayE MayE / N
- PorcImpar NumImpar / N
13Ejemplo 2 Código fuente
- 'Mostrar resultados
- Dim Aux As String
- Aux Aux "NumH " NumH vbCrLf
- Aux Aux "NumM " NumM vbCrLf
- Aux Aux "PorcH " PorcH vbCrLf
- Aux Aux "PorcM " PorcM vbCrLf
- Aux Aux "MenE " MenE vbCrLf
- Aux Aux "MayE " MayE vbCrLf
- Aux Aux "PorcMenE " PorcMenE vbCrLf
- Aux Aux "PorcMayE " PorcMayE vbCrLf
- Aux Aux "PorcImpar " PorcImpar vbCrLf
- I FreeFile()
- Open "Resultados.txt" For Output As I
- Print I, Aux
- Close I
14Ejemplo Ordenar vector
- Dado un vector de N componentes, ordenarlo de
menor a mayor (en orden ascendente)
15Ejemplo Ordenar vector
Sub ejecutar_Click()
N
V(i) i1..N
16ii,N-1,1
Valmenor?V(i) Posmenor?i
ji1,N,1
V(1) V(2) V(3) . . . V(i) V(i1) . . . V(N-1) V(N)
V(j)ltV(valmenor)
no
sí
Valmenor?V(j) Posmenor?j
Ciclo i Recorrer V i1..N-1
sí
iltgtj
Ciclo j Recorrer V ji1N
no
Aux?V(i) V(i)?V(posmenor) V(posmenor)?Aux
17Ejemplo Ordenar vector
- Private Sub ejecutar_Click()
- Dim aux2 As String
- For i 1 To dimv - 1
- valmenor v(i)
- posmenor i
- For j i 1 To dimv
- If v(j) lt valmenor Then
- valmenor v(j)
- posmenor j
- End If
- Next j
- If posmenor ltgt i Then
- aux1 v(i)
- v(i) v(posmenor)
- v(posmenor) aux1
- End If
- Next i
Ciclo j Encuentra el menor valor y su
posición Entre i1 y N
Ciclo i
Si se encontró un valor menor que V(i),
intercambiarlo con V(i)
18Ejemplo Ordenar vector
- Mostrar vector en cuadro de texto aux2
- For i 1 To dimv
- aux2 aux2 "v" i "" v(i) vbCrLf
- Next i
- orderv.Text aux2
- End Sub