jueves, 21 de julio de 2011

Pseudocódigo (II)

En esta ocasión voy a mostrar el pseudocódigo y el correspondiente código en lenguaje C de un problema un poco más complejo que los anteriores. Además, reflejaré el pseudocódigo sin modificaciones y, a continuación, el el código probado y depurado. De este modo se pueden observar las modificaciones y errores detectados una vez que el código fue compilado, ejecutado y probado. En este caso las modificaciones no fueron muchas, pero tuve que realizar algunas para que el programa funcionase del modo deseado.

Indicar a partir del número de días a partir del 01-01-2011, ¿Cuántos años, meses, semanas y días constituyen el número de días.
Funciones: BISIESTO(ano), DIASMES(mes)

INICIO
DíasInicio=0,anos, meses=0, semanas=0, anoActual=2011, diasRestantes=0
MOSTRAR “Introduzca el número de días: “
LEER días
diasRestantes=dias
MIENTRAS (diasRestantes>0) HACER
  SI (diasRestantes>366)
    SI ESBISIESTO(anoActual)
      diasRestantes=diasRestantes-366
    SINO
      diasRestantes=diasRestantes-365
      anos=anos+1
      anoActual=anoActual+1
    FIN SI
  SINO
    SI (diasRestantes>365)
      diasRestantes=diasRestantes-365
      anos=anos+1
      anoActual=anoActual+1
    SINO
      Índice=0
      MIENTRAS (diasRestantes>NDIAS(i))
        SI ESBISIESTO(anoActual) Y (índice=2)
          diasRestantes=diasRestantes-NDIAS(índice)-1
          meses=meses+1
          índice = índice + 1
        SINO
          Días= días + NDIAS(índice)
          diasRestantes = diasRestantes – NDIAS(índice)
          meses=meses + 1
          índice = índice +1
        FIN SI
      FIN MIENTRAS
      SI (diasRestantes>=7)
        Semanas=diasRestantes/7
        Días=RESTO(diasRestantes/7)
        diasRestantes=0 //Condición de finalización
      FIN SI
    FIN SI
  FIN SI
FIN MIENTRAS
MOSTRAR “El número de años es: “ anos
MOSTRAR “El número de meses es: “ meses
MOSTRAR “El número de semanas es: “ semanas
MOSTRAR “El número de días es: “ dias
FIN


#include <stdio.h>
int main() {
  int diasInicio=0,dias=0, meses=0,anos=0, semanas=0, anoActual=2011, diasRestantes=0;
  int indice=0;

  printf("Introduzca el número de días: ");
  scanf("%d",&diasInicio);

  diasRestantes=diasInicio;
  while (diasRestantes>0) {
    if (diasRestantes>=366) {
      if (esBisiesto(anoActual)) {
        diasRestantes=diasRestantes-366;
      }else {
        diasRestantes=diasRestantes-365;
      }
      anos=anos+1;
      anoActual=anoActual+1;
    }
    else {
      if ((diasRestantes==365)&&(!esBisiesto(anoActual))) {        
          diasRestantes=diasRestantes-365;
          anos=anos+1;
          anoActual=anoActual+1;
      }
      else {
        indice=1;
        while (diasRestantes>=diasMes(indice)) {
          if (esBisiesto(anoActual)&&(indice==2)) {
            diasRestantes=diasRestantes-diasMes(indice)-1;
            meses=meses+1;
            indice++;
          }
          else {
            dias=dias+diasMes(indice);
            diasRestantes=diasRestantes-diasMes(indice);
            meses=meses+1;
            indice++;
          }
        }
       
        if (diasRestantes>=7) {
          semanas=diasRestantes/7;
          dias=diasRestantes%7;
          diasRestantes=0;
        }
        else {
          dias=diasRestantes;
          diasRestantes=0;
        }
      }
    }
  }
 
  printf ("El número de años= %d\n", anos);
  printf ("El número de meses es= %d\n", meses);
  printf ("El número de semanas es= %d\n", semanas);
  printf ("El número de días es= %d\n", dias);

  return(0);
}

int esBisiesto(int ano) {
  if ((ano%4==0) && ((ano%400==0) || (ano%100!=0)))
    return 1;
  else
    return 0;
}

int diasMes(int mes) {
  short diasMeses[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
 
  return (diasMeses[mes-1]);
}

No hay comentarios:

Publicar un comentario