Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
programacionphp2:examenes:start [2012/06/28 15:31] pabrile [Enunciado] |
programacionphp2:examenes:start [2017/10/10 16:12] (actual) |
||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== Datos importantes para los exámenes de cursada y finales ====== | ====== Datos importantes para los exámenes de cursada y finales ====== | ||
- | La cursada requiere la realización, entrega y defensa de un trabajo, el mismo lo puede ver | + | La cursada (NO ES PARA EL AÑO 2014 ! ! !) requiere la realización, entrega y defensa de un trabajo, el mismo lo puede ver |
{{:programacionphp2:examenes:tupar_trabajophp.pdf|aquí.}} | {{:programacionphp2:examenes:tupar_trabajophp.pdf|aquí.}} | ||
Línea 11: | Línea 11: | ||
<td>Lógica</td> | <td>Lógica</td> | ||
<td><font color='green'>4</font></td> | <td><font color='green'>4</font></td> | ||
- | </tr> | + | </tr> format |
<tr> | <tr> | ||
<td>Pérez, Juan</td> | <td>Pérez, Juan</td> | ||
Línea 62: | Línea 62: | ||
* ¿Tengo definida alguna variable o parámetro en alguna función que no uso? ¿Y alguna que uso y no definí? | * ¿Tengo definida alguna variable o parámetro en alguna función que no uso? ¿Y alguna que uso y no definí? | ||
* Dentro de cada código, programa o módulo, ¿definí e inicialicé todas las variables que uso al principio? | * Dentro de cada código, programa o módulo, ¿definí e inicialicé todas las variables que uso al principio? | ||
+ | |||
+ | ==== Una alternativa de resolución del Prefinal de la cursada 2012 ===== | ||
+ | |||
+ | ==== Enunciado ==== | ||
+ | |||
+ | {{:programacionphp2:examenes:prefinalphp2012.pdf|Enunciado del Prefinal}} | ||
+ | |||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | define('SEP_CAMPOS_ARCH', ';'); | ||
+ | define('NOMBRE_ARCH_SUCURSALES', 'sucursales.txt'); | ||
+ | define('ARCH_SUCURSALES_POS_CAMPO_PROVINCIA', 1); | ||
+ | define('ARCH_SUCURSALES_POS_CAMPO_ARCHVENTAS', 3); | ||
+ | define('ARCH_VENTAS_POS_CAMPO_FECHA', 1); | ||
+ | define('ARCH_VENTAS_POS_CAMPO_IMPORTE', 2); | ||
+ | |||
+ | function anio($fecha) { | ||
+ | return intval(substr($fecha, 6)); | ||
+ | } | ||
+ | |||
+ | function anio_actual() { | ||
+ | $hoy = getdate(); | ||
+ | return $hoy['year']; | ||
+ | } | ||
+ | |||
+ | function acumular_ventas_anio($nombre_archivo, $anio, &$cantidad_ventas, &$facturacion_total) { | ||
+ | $cantidad_ventas = 0; | ||
+ | $facturacion_total = 0; | ||
+ | $archivo = @fopen($nombre_archivo, 'r'); | ||
+ | if ($archivo) { | ||
+ | if (!feof($archivo)) { // El archivo puede estar vacío | ||
+ | $linea = fgets($archivo); // Se saltea la cabecera | ||
+ | } | ||
+ | $anio_venta = 0; | ||
+ | while (!feof($archivo) && $anio_venta <= $anio) { | ||
+ | $linea = trim(fgets($archivo)); | ||
+ | if ($linea != '') { // Se saltean posibles líneas en blanco | ||
+ | $campos = array_map('trim', explode(SEP_CAMPOS_ARCH, $linea)); | ||
+ | $anio_venta = anio($campos[ARCH_VENTAS_POS_CAMPO_FECHA]); | ||
+ | if ($anio_venta == $anio) { | ||
+ | $facturacion_total += $campos[ARCH_VENTAS_POS_CAMPO_IMPORTE]; | ||
+ | $cantidad_ventas++; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | fclose($archivo); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function mostrar_cabecera_estadisticas_venta_provincia() { | ||
+ | print 'Provincia | Total | Promedio' . PHP_EOL; | ||
+ | print '--------- ----- --------' . PHP_EOL; | ||
+ | } | ||
+ | |||
+ | function mostrar_estadisticas_ventas_provincia($provincia, $cantidad_ventas, $facturacion_total) { | ||
+ | $promedio = $cantidad_ventas != 0 ? $facturacion_total / $cantidad_ventas : 0; | ||
+ | printf("%s | %.2f | %.2f" . PHP_EOL, $provincia, $facturacion_total, $promedio); | ||
+ | } | ||
+ | |||
+ | function mostrar_estadisticas_ventas_por_provincia() { | ||
+ | $arch_sucursales = @fopen(NOMBRE_ARCH_SUCURSALES, 'r'); | ||
+ | if ($arch_sucursales) { | ||
+ | mostrar_cabecera_estadisticas_venta_provincia(); | ||
+ | if (!feof($arch_sucursales)) { // El archivo puede estar vacío | ||
+ | $linea_sucursales = fgets($arch_sucursales); // Se saltea la cabecera | ||
+ | $provincia_actual = NULL; | ||
+ | $anio_pasado = anio_actual() - 1; | ||
+ | while (!feof($arch_sucursales)) { | ||
+ | $linea_sucursales = trim(fgets($arch_sucursales)); | ||
+ | if ($linea_sucursales != '') { // Se saltean posibles líneas en blanco | ||
+ | $campos_sucursales = array_map('trim', explode(SEP_CAMPOS_ARCH, $linea_sucursales)); | ||
+ | $provincia = $campos_sucursales[ARCH_SUCURSALES_POS_CAMPO_PROVINCIA]; | ||
+ | |||
+ | /* | ||
+ | * El archivo está ordenado por provincia, por lo que se pueden | ||
+ | * ir calculando las estadísticas de cada provincia a medida | ||
+ | * que se lee. | ||
+ | */ | ||
+ | |||
+ | if ($provincia != $provincia_actual) { | ||
+ | /* | ||
+ | * Si cambia la provincia, significa que se terminó de leer | ||
+ | * la actual, entonces se muestran los valores y se reinician. | ||
+ | */ | ||
+ | |||
+ | // En la 1er pasada por el while, $provincia_actual es NULL | ||
+ | // y no hay datos para mostrar aún | ||
+ | if (!is_null($provincia_actual)) { | ||
+ | mostrar_estadisticas_ventas_provincia($provincia_actual, $cantidad_ventas, $facturacion_total); | ||
+ | } | ||
+ | $cantidad_ventas = 0; | ||
+ | $facturacion_total = 0; | ||
+ | $provincia_actual = $provincia; | ||
+ | } | ||
+ | |||
+ | acumular_ventas_anio($campos_sucursales[ARCH_SUCURSALES_POS_CAMPO_ARCHVENTAS], | ||
+ | $anio_pasado, $cantidad_ventas_sucursal, $facturacion_total_sucursal); | ||
+ | $cantidad_ventas += $cantidad_ventas_sucursal; | ||
+ | $facturacion_total += $facturacion_total_sucursal; | ||
+ | } | ||
+ | } | ||
+ | if (!is_null($provincia_actual)) { // Va a ser NULL sólo si el archivo no tiene datos | ||
+ | // Cuando se termina el archivo hay que mostrar la última provincia que se estaba leyendo | ||
+ | mostrar_estadisticas_ventas_provincia($provincia_actual, $cantidad_ventas, $facturacion_total); | ||
+ | } | ||
+ | } | ||
+ | fclose($arch_sucursales); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | mostrar_estadisticas_ventas_por_provincia(); | ||
+ | ?> | ||
+ | </code> | ||
Línea 123: | Línea 237: | ||
==== Una alternativa de resolución del Parcial de la cursada 2012 ===== | ==== Una alternativa de resolución del Parcial de la cursada 2012 ===== | ||
+ | |||
+ | ==== Enunciado ==== | ||
+ | |||
+ | {{programacionphp2:examenes:parcialphp2012.pdf|Enunciado del Parcial}} | ||
<code php> | <code php> |