Herramientas de usuario

Herramientas del sitio


programacionphp2:examenes:start

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

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>
programacionphp2/examenes/start.1340908265.txt.gz · Última modificación: 2017/10/10 16:08 (editor externo)