UNIVERSIDAD AUTÓNOMA DE OCCIDENTE FACULTAD DE INGENIERÍA DEPARTAMENTO DE OPERACIONES Y SISTEMAS
C CÓ ÓDIGO: ÓDIGO:
ALGORITMIA Y PROGRAMACIÓN
NOMBRE:
Taller: Arreglos Unidimensionales PRIMERA PARTE
GRUPO __ __
FECHA: _____/ _____/___ /___
Ejemplos resueltos
1. Elabore una solución que permita ingresar los nombres completos y el salario de un conjunto conocido de funcionarios de una organización del estado y muestre como resultado el promedio pagado; los datos de entrada deben ser igualmente mostrados después de realizar el cálculo del promedio, la GUI a utilizar puede ser como se muestra a continuación:
A. Proceso: Principal
Tipo
Entradas Identificación
Entero Real [ ] Cadena [ ] Cadena [ ]
Cantidad de funcionarios Sueldo Nombre Apellido
PROCESO: Principal Resultados Temporales Tipo Identificación Entero
Constantes: Proceso: Leer la cantidad de funcionarios ( mayor a 0 )
Contador funcionarios
Tipo
Salidas Identificación
Real Cadena [ ] Cadena [ ] Real [ ]
promedio nombre apellido sueldo
Asignar 0 a contador funcionarios Procesar para cada funcionario ( contador funcionario < cantidad funcionario) Leer nombre [contador funcionario] Leer Apellido [contador funcionario] Leer sueldo [contador funcionario] ( mayor a 0) Incrementar en 1 el contador de funcionario Repetir para siguiente funcionario Calcular el promedio de sueldo mediante sub-proceso: calcularPromedio, pasándole los valores: sueldos y cantidad de funcionarios asignar 0 a contador de funcionario Procesar para cada funcionario ( contador funcionario < cantidad funcionario) Imprimir nombre[contador funcionario], apellido[contador funcionario] y sueldo[contador funcionario] Incrementar en 1 el contador de funcionario Repetir para siguiente funcionario Imprimir promedio Terminar
B. Sub-Proceso: calcularPromedio
Tipo Entero Real [ ]
Entradas Identificación Cantidad de funcionarios Sueldo
PROCESO: calcularPromedio Resultados Temporales Tipo Identificación Tipo Entero Real
Contador de funcionarios Acumulador de sueldo
Real
Salidas Identificación Promedio
Constantes: Proceso: Recibir cantidad de funcionarios Recibir valores de sueldos Asignar 0 contador de funcionarios Asignar 0 a acumulador de sueldos Procesar para cada funcionario ( contador funcionarios < cantidad funcionarios) Acumular en acumulador de sueldos el valor de sueldo [contador funcionarios] Incrementar 1 a contador de funcionarios Repetir para la siguiente funcionario Calcular promedio con fórmula: acumulador de sueldos / cantidad de sueldos Regresar promedio Terminar
SOLUCION: Para entender el código tenga en consideración los nombres de los campos tal y como aparecen en la siguiente imagen:
btProcesar
textMsgAccion
btLimpiar
btResultado
btSalir
En el código prestar especial atención a las instrucciones resaltadas en rojo, ellas indican lo que Usted debe incluir en la solución
namespace Arreglos_y_Promedios_NEW_Version_2014 { public partial class Form1 Form {
int contadorDatos = 1; string[] nombre; string[] apellido; double[] sueldo; bool primeraVez = true; public Form1!" { #nitiali$e%omponent!"& ' pri(ate (oid bt)esultados_%lic*!ob+ect sender, E(entArgs e" { calcularFuera%iclo!"& ' pri(ate (oid btProcesar_%lic*!ob+ect sender, E(entArgs e" { principal!"& ' pri(ate (oid calcularFuera%iclo!" { string respuesta - ..& double promedio/ueldo - 00& calculos por uera del ciclo promedio/ueldo - calcularPromedio!sueldo"&
for (int contadorDatos = 0; contadorDatos < n ombre.Lengt; !!contadorDatos" # respuesta != apellido [contadorDatos] ! $ $ ! nombre [contadorDatos] ! $ $ ! sueldo[contadorDatos] ! %&stem.'nironment.)e*Line; + respuesta != %&stem.'nironment.)e*Line ! $ 'l ,romedio calculado para las $ ! sueldo.Lengt ! $ personas fue de- $ ! promedio%ueldo; te3t)espuestae3t - respuesta& ' pri(ate (oid principal!" { int cantidad5atos - intParse!te3t%antidad5atose3t"& te3t%antidad5atosEnabled - alse&
if (primeraVez" # primeraVez = false; nombre = ne* string[cantidadDatos]; apellido = ne* string[cantidadDatos]; sueldo = ne* double[cantidadDatos]; + nombre [contadorDatos 1] = te/t)ombre.e/t.opper("; apellido [contadorDatos 1] = te/t2pellido.e/t.opper("; sueldo[contadorDatos 1] = double.,arse(te/t%ueldo.e/t"; te3t#ngresoNumeroe3t - contador5atoso/tring!"& te3tNombre%lear!"& te3tApellido%lear!"& te3t/ueldo%lear!"& 66contador5atos& i !contador5atos 7 cantidad5atos" { bt)esultadosVisible - true& bt)esultadosEnabled - true& btProcesarEnabled - alse& bt8impiarEnabled - alse& te3tNombreEnabled - alse& te3tApellidoEnabled - alse& te3t/ueldoEnabled - alse& te3t9sgAccionVisible - true& ' ' pri(ate double calcularPromedio!double:; sueldo" { double acumula/ueldo - 00& double promedio/ueldo - 00&
for (int contadorDatos = 0; contadorDatos < sueldo.Lengt; !!contadorDatos" # acumula%ueldo != sueldo[contadorDatos]; + promedio/ueldo - acumula/ueldo sueldo8engt<& return !promedio/ueldo"& '
pri(ate (oid bt8impiar_%lic*!ob+ect sender, E(entArgs e" { te3tNombre%lear!"& te3tApellido%lear!"& te3t/ueldo%lear!"& te3t)espuesta%lear!"& te3t#ngresoNumero%lear!"& ' pri(ate (oid bt/alir_%lic*!ob+ect sender, E(entArgs e" { %lose!"& ' ' '
2. Elabore una solución que permita ingresar los nombres, apellidos y salarios de un grupo de X personas. Luego de ingresar se debe poder dar un apellido y mostrar si hace parte de los datos ingresados inicialmente, la GUI a utilizar puede ser como se muestra a continuación:
SEGUNDA PARTE
Ejercicios propuestos
3. Elabore una solución que conociendo los nombres, los apellidos y la edad de un grupo de personas, cuya cantidad se conoce; lea un apellido y con este valor determine y muestre qué tipo de búsqueda obtuvo. Los diferentes tipos de búsqueda que pueden darse son: a. Tipo de búsqueda 1, si un nombre solicitado al usuario, se encuentra una sola vez entre los datos leídos. b. Tipo de búsqueda 2, si un nombre solicitado al usuario, se encuentra más de una vez entre los datos leídos. c. Tipo de búsqueda 0, si un nombre solicitado al usuario, no se encuentra entre los datos leídos.
4. Elabore una solución qué mediante una opción seleccionada por el usuario (a, b, c) sea capaz de realizar las siguientes tareas (cada opción debe realizarse en sub-procesos individuales: a. Lea dos (2) arreglos unidimensionales de “N” elementos de naturaleza real y los sume término a término. b. Lea un arreglo unidimensional y calcule su magnitud, mediante la siguiente expresión:
2
x 0
2 2 2 + x1 + x 2 + x3 +
... + x n2
c. Lea un arreglos unidimensional y calcule su media geométrica y su media armónica, mediante las siguientes expresiones, el usuario debe indicar el tipo de cálculo que desea:
mediaGeometrica
mediaArmonica
=
n
x 0
*n
x1
*n
x 2
* ... * n
x n
n =
1
∑ x
i
Se muestra la solución de los puntos b y c . Reto: Incluir la “parte a”
A. Proceso: Principal Entradas Identificación
Tipo Entero Real [ ] Caracter
Cantidad de valores valorX opción deseada
PROCESO: Principal Resultados Temporales Tipo Identificación Entero
Contador de valores
Tipo
Salidas Identificación
Real Real Real
Magnitud Media geométrica Media Armónica
Constantes: Proceso: Leer la cantidad de valores ( mayor a 0 ) Asignar 0 a contador valores Procesar para cada valor ( contador valores < cantidad valores ) Leer valorX [contador valores] Incrementar en 1 el contador de valores Repetir para siguiente valor Leer opción deseada ( M = Magnitud, G = Geométrica, A = Armónica () Si la opción deseada es M Calcular magnitud del vector mediante subproceso calcularMagnitud, pasándole: cantidad de valores y valorX Imprimir magnitud del vector Sino Si la opción deseada es G Calcular media geométrica mediante subproceso calcularMediaGeometrica, pasándole: cantidad de valores y valorX Imprimir media geométrica Sino Calcular media armónica mediante subproceso calcularMediaArmonica, pasándole: cantidad de valores y valorX Imprimir media armónica Terminar
B. Sub-Proceso: calcularMagnitud
Tipo
Entradas Identificación
PROCESO: calcularMagnitud Resultados Temporales Tipo Identificación Tipo
Entero Real [ ]
Cantidad de valores valorX
Entero Real
Constantes: Proceso: Recibir cantidad de valores Recibir valoresX Asignar 0 contador de valores Asignar 0 a suma términos cuadrados
Contador de valores Suma términos cuadrados
Real
Salidas Identificación Magnitud
Procesar para cada valor ( contador valores < cantidad valores) Acumular en suma términos cuadrados el valor de potencia( valorX [contador valores], 2) Incrementar 1 a contador de valores Repetir para la siguiente valor Calcular magnitud con fórmula: raíz cuadrada (suma de términos cuadrados) Regresar magnitud Terminar
C. Sub-Proceso: calcularMediaGeometrica
Tipo
Entradas Identificación
Entero Real [ ]
Cantidad de valores valorX
PROCESO: calcularMediaGeometrica Resultados Temporales Tipo Identificación Tipo
Salidas Identificación
Entero
Media geométrica
Contador de valores
Real
Constantes: Proceso: Recibir cantidad de valores Recibir valoresX Asignar 0 contador de valores Asignar 1 a media geométrica Procesar para cada valor ( contador valores < cantidad valores) Acumular multiplicando en media geométrica el valor de potencia( valorX [contador valores], 1 / cantidad valores) Incrementar 1 a contador de valores Repetir para la siguiente valor Regresar media geométrica Terminar
D. Sub-Proceso: calcularMediaArmonica
Tipo
Entradas Identificación
PROCESO: calcularMediaArmonica Resultados Temporales Tipo Identificación Tipo
Entero Real [ ]
Cantidad de valores valorX
Entero Real
Contador de valores Acumulador términos inversos
Constantes: Proceso: Recibir cantidad de valores Recibir valoresX Asignar 0 contador de valores Asignar 0 a acumulador términos inversos
Real
Salidas Identificación Media armónica
Procesar para cada valor ( contador valores < cantidad valores) Acumular en acumulador de términos inversos el valor de: 1 / valorX [contador valores] Incrementar 1 a contador de valores Repetir para la siguiente valor Calcular media armónica con formula: cantidad valores / acumulador términos inversos Regresar media armónica Terminar
5. Elabore una solución que permia leer los nombres completos y las calificaciones de “N” estudiantes. Se desea mostrar como resultado CUANTOS estudiantes están por encima del promedio y CUANTOS estudiantes están por debajo del promedio. 6. Elabore una solución que permita ingresar los nombres completos y los sueldos de una cantidad conocida de empleados de una compañía, este comportamiento debe determinar CUALES empleados ganan más de del salario mínimo y CUALES empleados ganan por debajo del salario mínimo. 7. Elabore una solución que procese los nombres completos y las edades de los “N” participantes del grupo de Algoritmia y Programación, mostrando como resultado el nombre del mayor de los estudiantes. La solución debe igualmente, determinar si un participante se encuentra cursando el curso o si no lo está, buscándolo por el apellido. Los valores de entrada deben ser almacenados haciendo uso de estructuras de datos: Unidimensionales. 8. Se tienen los valores de producción de una planta de químicos, para cada uno de los 12 meses de un año en particular y se desea saber en qué mes se produjo su pico más alto de producción. 9. Elabore un aplicativo que almacene las placas, tipo de vehículo ( a-para automovil y m-para moto) y tiempo de permanencia, de un conjunto de vehículos que ingresaron a un parqueadero, y permita generar cualquiera de los siguientes reportes: a. Generar el listado de las placas de todos los vehículos que son del tipo de vehículo indicado por el usuario. b. Generar un reporte que contenga el número de vehículos y sumatoria de tiempos de permanencia del tipo de vehículo indicado por el usuario. c. Generar un reporte que contenga la placa, tiempo de permanencia y valor a cancelar por el parqueo, de todos los vehículos almacenados, teniendo en las políticas para su computó, las cuales son indicadas en la siguiente tabla.
Automóvil
Moto
Cobra $3.500 por cada hora (o su
Cobra $#.00 por cada hora (o su
correspondiente por fracción), si el tiempo de
correspondiente por fracción), en las 3 primeras
permanecía fue inferior a 4 horas. Para tiempos de permanencia iuales o ma!ores, cobra
horas. %n las restantes cobra $#.400 por cada
$".500 por cada hora (o su correspondiente por
hora (o su correspondiente por fracción).
fracción).
d. Generar un reporte que contenga las placas y tiempos de permanencia de aquellos vehículos, cuya permanencia estuvo entre un par de tiempos solicitados al usuario. e. Generar un reporte que contenga placa, nombre completo del tipo de vehículo (automóvil o moto) y tiempo, del vehículo con menor tiempo de permanencia.
TERCERA PARTE
Pruebas de escritorio
1. Realice la prueba de escritorio al siguiente segmento de código: double [ ] valoresEntrada = {6.0, 2.5, 3.0, 1.0, 4.0}; for ( int counter = 0; counter < valoresEntrada.Length; counter ++ ){ valoresEntrada[counter] = valoresEntrada [counter] * 2; } for ( int counter = 0; counter < valoresEntrada.Length; counter ++ ){ Console.WriteLine ( valoresEntrada[counter]); }
2. Realice la prueba de escritorio al siguiente segmento de código: double [ ] valoresEntrada = {6.0, 2.5, 3.0, 1.0, 4.0}; for ( int counter = valoresEntrada.Length – 1 ; counter >= 0; - - counter ){ Console.WriteLine ( valoresEntrada[counter]); }
3. Con la declaración de la matriz: int[ ] vectorDatos = { 3, -8, 2, 0, -3, 6 }; resuelva el siguiente segmento de código: double resultado = vectorDatos [2] * vectorDatos.Length – vectorDatos [0] / vectorDatos[5] Console.WriteLine (“La respuesta es: “ + resultado);
4. Realice un seguimiento al siguiente código y realice la prueba de escritorio, indicando cada resultado y la impresión final del mismo.
private void principal ( ) { string cadena = “ “; int datos [ ] = { -2, 3, -4, 5, 1 }; int resultado = calcularRespuesta( datos, 'S' ); if( resultado % 2 == 0 ){ cadena = "EXITOSO" ; }else{ cadena = "NO EXITOSO" ; }
public int calcularRespuesta ( int valor[ ], char opcion){ int msg = 0; for (int cont = 0; cont < valor.Length; ++ cont){ msg += valor[cont]; if (valor[cont]<0 && opcion == 'S'){ valor[cont] = valor[cont] * ( -1); msg += valor[cont]; }
Console.WriteLine ("Fue: " + cadena) ;
} return(msg);
} }
}
Indique (en el siguiente cuadro) los valores que vaya tomando cada uno de las variables de los procesos y subprocesos:
-2
datos 3 -4
resultado 5
cadena
Valor de impresión
1
cont
valor[cont]
opcion
msg