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/21 11:27]
pabrile
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 63: Línea 63:
   * 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>​
 +
 +
 +==== Una alternativa de resolución del Recuperatorio de la cursada 2012 =====
 +
 +==== Enunciado ====
 +
 +{{programacionphp2:​examenes:​recuperatoriophp2012.pdf|Enunciado del Recuperatorio}}
 +
 +<code php>
 +<?php
 +define('​ARCHIVO_DATOS'​ ,'​datos.txt'​);​
 +define('​ARCHIVO_SALIDA','​salida.txt'​);​
 +define('​POS_ESTACION',​0);​
 +define('​POS_FECHA',​1);​
 +define('​POS_TIPO'​ ,2);
 +define('​POS_VALOR',​3);​
 +define('​POS_MES',​1);​
 +define('​POS_ANIO',​2);​
 +define('​SEPARADOR',';'​);​
 +define('​SEPARADOR_FECHA','/'​);​
 +define('​ENCABEZADO_SALIDA',"​Estacion;​Año;​Mes;​Tipo;​Promedio\n"​);​
 + 
 +function leer_estructura($nombre_archivo=ARCHIVO_DATOS){
 +  $archivo = fopen($nombre_archivo,'​r'​);​
 +  $datos_climaticos = array();
 +  if ($archivo){
 +    fgets($archivo);​ //Se ignora el encabezado
 +    while (!feof($archivo)){
 +      $reg = explode(SEPARADOR,​fgets($archivo));​
 +      $fecha = explode (SEPARADOR_FECHA,​$reg[POS_FECHA]);​
 +      $datos_climaticos[$reg[POS_ESTACION]][$fecha[POS_ANIO]][$fecha[POS_MES]][$reg[POS_TIPO]][] = $reg[POS_VALOR];​
 +    }
 +    fclose($archivo);​
 +  }
 +  return $datos_climaticos;​
 +}
 +function promedio($arreglo){
 +  $promedio = 0;
 +  $suma = array_sum($arreglo);​
 +  $cantidad = count($arreglo);​
 +  if ($cantidad > 0)
 +    $promedio = $suma / $cantidad;
 +  return $promedio;
 +}
 +function escribir_promedios($promedios,​ $nombre_archivo=ARCHIVO_SALIDA){
 +  $archivo = fopen($nombre_archivo,'​w+'​);​
 +  if ($archivo){
 +    fputs($archivo,​ENCABEZADO_SALIDA);​
 +    foreach ($promedios as $estacion => $datos_sensores)
 +        foreach ($datos_sensores as $anio => $datos_anuales)
 +          foreach ($datos_anuales as $mes => $datos_mensuales)
 +              foreach ($datos_mensuales as $tipo => $valores)
 +        fputs($archivo,​$estacion . SEPARADOR .$anio. SEPARADOR . $mes . SEPARADOR . $tipo . SEPARADOR . promedio($valores) . "​\n"​);​
 +    fclose($archivo);​
 +  }
 +}
 +escribir_promedios(leer_estructura());​
 +?>
 +</​code>​
  
 ==== 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.1340288842.txt.gz · Última modificación: 2017/10/10 16:08 (editor externo)