martes, 19 de julio de 2011

Pseudocódigo

Como paso previo a adentrarnos en la progamación en C, hemos estado desarrollando algoritmos para resolver ciertos problemas comunes mediante pseudocódigo. El objetivo fundamental es familiarizarse con las estructuras lógicas más utilizadas en programación (independientemente del lenguaje). Sin embargo, para quién no está habituado a programar puede resultar un poco abstracto resolver los problemas de este modo. Por eso he decidido mostrar algunos ejemplos de pseudocódigo acompañados por el correspondiente código en C. He tratado de utilizar las estructurar más comunes (if, while, for, switch).
INICIO
A=0, B=0
Leer A, B
SI A=B
Mostrar “Los números introducidos son iguales”
SINO
Mostrar “Los números introducidos no son iguales”
FIN

#include
int main() {
int a=0,b=0;

printf("Introduce el primer número: ");
scanf("%d",&a);
printf("Introduce el segundo número: ");
scanf("%d",&b);

if (a==b) printf("Los números introducidos son iguales\n");
else printf("Los números introducidos no son iguales\n");

return(0);
}
Pedir por teclado el número de mes y responder por pantalla el nombre del mes y el número de días que tiene(realizar para los 4 primeros meses)
INICIO
NUM_MES=0
MOSTRAR “Introduzca un número de mes(1-4):”
LEER NUM_MES
HACER EN CASO
EN CASO NUM=1:
MOSTRAR “El mes es enero y tiene 31 días”
EN CASO NUM=2:
MOSTRAR “El mes es febrero y tiene 28 días”
EN CASO NUM=3:
MOSTRAR “El mes es marzo y tiene 31 días”
EN CASO NUM=4:
MOSTRAR “El mes es abril y tiene 30 días”
SEA OTRO VALOR:
MOSTRAR “El número introducido no está en el rango indicado”
FIN

#include
int main() {
int num_mes=0;

printf("Introduzca un número de mes (1-4):");
scanf("%d",&num_mes);

switch(num_mes) {
  case 1:
    printf("El mes es enero y tiene 31 días\n");
    break;
  case 2:
    printf("El mes es febrero y tiene 28 días\n");
    break;
  case 3:
    printf("El mes es marzo y tiene 31 días\n");
    break;
  case 4:
    printf("El mes es abril y tiene 30 días\n");
    break;
  default:
    break;
  }
  return (0);
}
INICIO
NUM_MAX=0, NUM=0
MOSTRAR “Introduzca el número máximo:”
LEER NUM_MAX
MIENTRAS (NUM<=NUM_MAX) HACER MOSTRAR NUM NUM = NUM +1 FIN MIENTRAS FIN

#include <stdio.h>
int main() {
  int num_max=0, num=0;

  printf("Introduzca el número máximo: ");
  scanf("%d",&num_max);
  while (num<=num_max) {
    printf("%d ", num);
    num = num +1;
  }
  printf("\n");
  return(0);
}
Factorial de un número

INICIO
NUM_MAX=0, NUM=1, PROD=1
MOSTRAR “Introduzca el número: “
LEER NUM
MIENTRAS (NUM <= NUM_MAX) HACER
  PROD = PROD * NUM
  NUM = NUM + 1
FIN MIENTRAS
MOSTRAR “El factorial de NUM_MAX es: “ PROD
FIN

#include <stdio.h>
int main() {
  int num_max=0, num=1, prod=1;

  printf("Introduzca un número: ");
  scanf("%d",&num_max);

  while (num<=num_max) {
    prod = prod * num;
    num = num + 1;
  }
  printf ("El factorial de %d es: %d\n",num_max,prod);

  return(0);
}

INICIO
numMax=0
MOSTRAR “Introduzca el número hasta el que quiere contar: “
LEER numMax
PARA valor=0 HASTA numMax
MOSTRAR “El valor es: “ valor
FIN PARA

#include <stdio.h>
int main() {
  int numMax=0, valor=0;

  printf("Introduzca el número hasta el que quiere contar: ");
  scanf("%d",&numMax);

  for (valor=0; valor<=numMax; valor++) {
    printf("El valor es: %d\n", valor);
  }

  return(0);
}
Leer un número (entero y positivo, no hace falta comprobarlo) y determinar si es divisible por 5, 4, 3, 2, y 1 al mismo tiempo.

INICIO
Num=0
MOSTRAR “Introduzca un número: “
LEER Num
SI RESTO(Num/5)=0 Y RESTO(Num/4) =0 Y RESTO(Num/3)=0 Y RESTO(Num/2)=0
MOSTRAR “El número es divisible por 5,4,3,2 y 1”
SINO
MOSTRAR “El número no es divisible por 5,4,3,2 y 1”
FIN

(Solución alternativa)
INICIO
Num=0, Divisible=cierto
MOSTRAR “Introduzca un número: “
LEER Num
SI RESTO(Num/5) <> 0 Divisible=falso
SI RESTO(Num/4) <> 0 Divisible=falso
SI RESTO(Num/3) <> 0 Divisible=falso
SI RESTO(Num/2) <> 0 Divisible=falso
SI Divisible=cierto MOSTRAR “El número es divisible por 5,4,3,2 y 1”
SINO MOSTRAR “El número no es divisible por 5,4,3,2 y 1”
FIN
Indicar si un año es bisiesto.

INICIO
Ano=0;
MOSTRAR “Introducir el año: “
LEER Ano
SI RESTO(Ano/4)=0 Y ((RESTO(Ano/400) =0 Ó RESTO(Ano/100)<>0)) MOSTRAR “El año es bisiesto”
SINO MOSTRAR “El año no es bisiesto”
FIN

/* Código en C para comprobar si un año es bisiesto o no */
#include <stdio.h>
int main() {
  int ano=0;

  printf("Introducir el año: ");
  scanf("%d",&ano);

  if ((ano%4==0) && ((ano%400==0) || (ano%100!=0)))
    printf("El año es bisiesto\n");
  else
    printf("El año no es bisiesto\n");

  return(0);
}
Una compañía precisa de una administrativa.
A las candidatas se les realizan unas preguntas:
-¿Está soltera (1) o casado (2), otro (0)?
-¿Cantidad de hijos que tiene? Si no tiene indicar 0
-¿Posee algún título técnico S/N?
-¿Cuántos años tiene?
Serán preseleccionadas las que cumplan los siguientes requisitos:
+Mujeres solteras que estén en posesión de un título técnico, sin hijos y menores de 25 años.
+Mujeres casadas con edad superior a 40 años y con hijos
Tras introducir los datos indicar a la aspirante si está preseleccionada o no.

INICIO
estadoCivil=0,numHijos=0,titulo=”N”,anos=0
MOSTRAR “¿Está soltera(1), casada(2), otro(0)?”
LEER estadoCivil
MOSTRAR “¿Cantidad de hijos?”
LEER numHijos
MOSTRAR “¿Posee algún título técnico(S/N)?”
LEER titulo
MOSTRAR “¿Cuántos años tiene?”
LEER anos
SI ((estadoCivil=1) Y (numHijos=0) Y (titulo=”S”) Y (anos<25)) O ((estadoCivil=2) Y (edad>40) Y (numHijos>0)) MOSTRAR “Ha sido seleccionada”
SINO MOSTRAR “No ha sido seleccionada”
FIN

#include <stdio.h>
#include <string.h>
int main() {
  int estadoCivil=0, numHijos=0, anos=0;
  char titulo=' ', kk;

  printf("¿Está soltera(1), casada(2), otro(0)?");
  scanf("%d",&estadoCivil);
  printf("¿Cantidad de hijos?");
  scanf("%d",&numHijos);
  printf("¿Posee algún título técnico(S/N)?");
  scanf("%c",&kk);
  scanf("%c",&titulo);
  printf("¿Cuántos años tiene?");
  scanf("%d",&anos);

  if (((estadoCivil==1)&&(numHijos==0)&&(titulo=='S')) ||
     ((estadoCivil==2)&&(anos>40)&&(numHijos>0)))
     printf("Ha sido seleccionada\n");
  else
     printf("No ha sido seleccionada\n");

  return(0);
}

Solicitar por teclado un número entero entre 1 y 2000, y sacarlo por pantalla en números romanos.

INICIO
Num=0, Miles=0, Cientos=0, Decenas=0, Unidades=0, Aux=0
MOSTRAR  “Introduzca un número en el rango 1 a 2000”
LEER Num
MILES = Num/1000
Aux = RESTO(Num/1000)
CIENTOS = Aux/100
Aux = RESTO (Aux/100)
DECENAS = Aux/10
Aux = RESTO (Aux/10)
UNIDADES = Aux

//Mostrar los miles
PARA VALOR=1 HASTA MILES
        MOSTRAR “M”
FIN PARA

//Mostrar las centenas
HACER EN CASO
        EN CASO CIENTOS=1 MOSTRAR “C”
        EN CASO CIENTOS=2 MOSTRAR “CC”
        EN CASO CIENTOS=3 MOSTRAR “CCC”
        EN CASO CIENTOS=4MOSTRAR “CD”
        EN CASO CIENTOS=5 MOSTRAR “D"
        EN CASO CIENTOS=6 MOSTRAR “DC”
        EN CASO CIENTOS=7 MOSTRAR “DCC”
        EN CASO CIENTOS=8 MOSTRAR “DCCC”
        EN CASO CIENTOS=9MOSTRAR “CM”
FIN EN CASO
//Mostrar las decenas

HACER EN CASO
        EN CASO DECENAS =1 MOSTRAR “X”
        EN CASO DECENAS =2 MOSTRAR “XX”
        EN CASO DECENAS =3 MOSTRAR “XXX”
        EN CASO DECENAS =4MOSTRAR “XL”
        EN CASO DECENAS =5 MOSTRAR “L”
        EN CASO DECENAS =6 MOSTRAR “LX”
        EN CASO DECENAS =7 MOSTRAR “LXX”
        EN CASO DECENAS =8 MOSTRAR “LXXX”
        EN CASO DECENAS =9MOSTRAR “XC”
FIN EN CASO

//Mostrar las unidades
HACER EN CASO
        EN CASO UNIDADES =1 MOSTRAR “I”
        EN CASO UNIDADES =2 MOSTRAR “II”
        EN CASO UNIDADES =3 MOSTRAR “III"
        EN CASO UNIDADES =4MOSTRAR “IV”
        EN CASO UNIDADES =5 MOSTRAR “V”
        EN CASO UNIDADES =6 MOSTRAR “VI”
        EN CASO UNIDADES =7 MOSTRAR “VII”
        EN CASO UNIDADES =8 MOSTRAR “VIII”
        EN CASO UNIDADES =9MOSTRAR “IX”
FIN EN CASO
FIN

#include <stdio.h>
int main() {
  int num=0, miles=0, cientos=0, decenas=0, unidades=0, aux=0, i=0;

  printf ("Introduzca un número en el rango 1 a 3999: ");

  scanf("%d", &num);

  miles = num/1000;
  aux = num%1000;
  cientos=aux/100;
  aux=aux%100;
  decenas=aux/10;
  aux=aux%10;
  unidades=aux;

  printf ("El equivalente en números romanos es:  ");

  //Mostrar los miles
  for (i=1; i<=miles; i++) printf("%s","M");

  //Mostrar las centenas
  switch (cientos) {
    case 1:
      printf("%s","C");
      break;
    case 21:
      printf("%s","CC");
      break;
    case 3:
      printf("%s","CCC");
      break;
    case 4:
      printf("%s","CD");
      break;
    case 5:
      printf("%s","D");
      break;
    case 6:
      printf("%s","DC");
      break;
    case 7:
      printf("%s","DCC");
      break;
    case 8:
      printf("%s","DCCC");
      break;
    case 9:
      printf("%s","CM");
      break;
  }

  //Mostrar las decenas
  switch (decenas) {
    case 1:
      printf("%s","X");
      break;
    case 2:
      printf("%s","XX");
      break;
    case 3:
      printf("%s","XXX");
      break;
    case 4:
      printf("%s","XL");
      break;
    case 5:
      printf("%s","L");
      break;
    case 6:
      printf("%s","LX");
      break;
    case 7:
      printf("%s","LXX");
      break;
    case 8:
      printf("%s","LXXX");
      break;
    case 9:
      printf("%s","XC");
      break;
  }

  //Mostrar las unidades
  switch (unidades) {
    case 1:
      printf("%s","I");
      break;
    case 2:
      printf("%s","II");
      break;
    case 3:
      printf("%s","III");
      break;
    case 4:
      printf("%s","IV");
      break;
    case 5:
      printf("%s","V");
      break;
    case 6:
      printf("%s","VI");
      break;
    case 7:
      printf("%s","VII");
      break;
    case 8:
      printf("%s","VIII");
      break;
    case 9:
      printf("%s","IX");
      break;

  }
printf ("\n");
}

No hay comentarios:

Publicar un comentario