lunes, 1 de abril de 2013

Pseudocódigo Sub Procesos II


Ejercicios de Pseudocódigo con sub-procesos usando PSeInt.




Programa que lee dos matrices y permite operar con ellas sumar , restar y multiplicar.




1 //Algoritmo para operar con matrices.
2
3 SubProceso CrearMatriz(Nombre, Filas por referencia, Columnas por referencia)
4      Escribir "Dime las filas de la " , Nombre;
5      Leer Filas;
6      Escribir "Dime las columnas de la ", Nombre;
7      Leer Columnas;
8 FinSubProceso
9
10 SubProceso LlenarMatriz(Matriz, Filas, Columnas)
11     Definir i,j como entero;
12     Para i<-1 hasta Filas hacer
13           Para j<-1 hasta Columnas hacer
14                  Matriz[i,j] <- azar(10) ;
15           FinPara
16     FinPara
17 FinSubProceso
18
19 SubProceso MostrarMatriz(Matriz,Nombre, Filas, Columnas)
20     Definir i,j como entero;
21     Escribir Nombre;
22     Para i<-1 hasta Filas hacer
23           Para j<-1 hasta Columnas hacer
24                  Escribir Matriz[i,j] , " " Sin Saltar;
25           FinPara
26           Escribir "";
27     FinPara
28 FinSubProceso
29
30 SubProceso SumarMatrices(MatrizR, Matriz1 ,Filas1, Columnas1, Matriz2,Filas2, columnas2)
31     Definir i,j como entero;
32     Si Filas1 <> Filas2 | Columnas1 <> Columnas2 entonces
33           Escribir "Solo se pueden sumar matrices de la misma dimension";
34     Sino
35           Para i<-1 hasta Filas1 hacer
36                  Para j<-1 hasta Columnas1 hacer
37                         MatrizR[i,j] <- Matriz1[i,j] + Matriz2[i,j];
38                  FinPara
39           FinPara
40           MostrarMatriz(MatrizR, "Suma",Filas1,Columnas1);
41     FinSi
42 FinSubProceso
43
44 SubProceso RestarMatrices(MatrizR, Matriz1 ,Filas1, Columnas1, Matriz2,Filas2, columnas2)
45     Definir i,j como entero;
46     Si Filas1 <> Filas2 | Columnas1 <> Columnas2 entonces
47           Escribir "Solo se pueden restar matrices de la misma dimension";
48     Sino
49           Para i<-1 hasta Filas1 hacer
50                  Para j<-1 hasta Columnas1 hacer
51                         MatrizR[i,j] <- Matriz1[i,j] - Matriz2[i,j];
52                  FinPara
53           FinPara
54           MostrarMatriz(MatrizR, "Resta",Filas1,Columnas1);
55     FinSi
56 FinSubProceso
57
58 SubProceso MultiplicarMatrices(MatrizR, Matriz1 ,Filas1, Columnas1, Matriz2,Filas2, columnas2)
59     Definir i,j,x como entero;
60     Si Columnas1 <> Filas2 Entonces
61           Escribir "Solo se pueden multiplicar si el número de columnas de la primera matriz coincida con el número de filas de la segunda";
62     Sino
63           Para i<-1 hasta Filas1 Hacer
64                  para j<-1 hasta Columnas2 Hacer
65                  // Suma i,j es Ain*Bnj
66                         MatrizR[i,j] <- 0;
67                         para x<-1 hasta Columnas1 hacer
68                                MatrizR[i,j] <- MatrizR[i,j] + (Matriz1[i,x] * Matriz2[x,j]);
69                         FinPara
70                  FinPara
71           FinPara
72           MostrarMatriz(matrizR, "Poducto",Filas1, Columnas2);
73     FinSi
74 FinSubProceso
75
76 Proceso OpertarConMatrices
77     //Programa que lee dos matrices y permite operar con ellas
78     // 1 = sumar , 2 = restar , 3 = multiplicar , 4 = Fin
79     Definir FilasA , ColumnasA como entero;
80     Definir FilasB , ColumnasB como entero;
81     Definir MatrizA , MatrizB Como Real;
82
83     CrearMatriz( "Matriz A", FilasA , ColumnasA);
84     Dimension MatrizA[FilasA, ColumnasA];
85     LlenarMatriz(MatrizA, FilasA, ColumnasA);
86     CrearMatriz("Matriz b", FilasB, ColumnasB);
87     Dimension MatrizB[FilasB, ColumnasB];
88     LlenarMatriz(MatrizB , FilasB, ColumnasB);
89     MostrarMatriz(MatrizA, "Matriz A", FilasA , ColumnasA);
90     MostrarMatriz(MatrizB, "Matriz B", FilasB , ColumnasB);
91
92     Definir operacion Como Entero; //1 suma 2 resta 3 producto 4 salir
93     Definir MatrizS, MatrizP como real;
94     Dimension MatrizS[FilasA, ColumnasA];
95     Dimension MatrizP[FilasA, ColumnasB];
96     Repetir
97           Escribir "Dime la operacion a realizar 1 Suma 2 Resta 3 Producto 4 Fin";
98           Leer Operacion;
99           segun Operacion hacer
100          1: //sumar
101          SumarMatrices(MatrizS, MatrizA, FilasA, ColumnasA, MatrizB, FilasB, ColumnasB);
102          2: //Restar
103          RestarMatrices(MatrizS, MatrizA, FilasA, ColumnasA, MatrizB, FilasB, ColumnasB);
104          3: //Producto
105          MultiplicarMatrices(MatrizP, MatrizA, FilasA, ColumnasA, MatrizB, FilasB, ColumnasB);
106    FinSegun
107 Hasta Que operacion = 4
108 FinProceso



Escribir una programa que calcule y retorne el número de días que faltan hasta final de año, a partir de una determinada fecha (dia, mes, año) introducida por y teniendo en cuenta si el año es bisiesto.




1 //Algoritmo calculo dias fin de año
2
3 SubProceso res <- EsBisiesto( a )
4      Definir res como logico;
5      res <- falso;
6      si a % 100 = 0 entonces
7            si a % 400 = 0 entonces //Bisiesto
8                   res <- Verdadero;
9            FinSi
10     sino
11           si a % 4 = 0 entonces //Bisiesto
12                  res <- Verdadero;
13           FinSi
14     FinSi
15 FinSubProceso
16
17 SubProceso res<- DiasMes(m, a)
18     Definir res como entero;
19     Segun M hacer
20           1: Res <- 31;
21           2: si EsBisiesto(a) entonces
22                         res<-29;
23                  sino
24                         res<-28;
25                  FinSi
26           3: Res <- 31;
27           4: Res <- 30;
28           5: Res <- 31;
29           6: Res<- 30;
30           7: Res <- 31;
31           8: Res <- 31;
32           9: Res <- 30;
33           10: Res <- 31;
34           11: Res <- 30;
35           12: Res <- 31;
36     FinSegun
37 FinSubProceso
38
39
40 Proceso DiasFinAnyo
41     //Escribir una programa que calcule y retorne el número de días
42     //que faltan hasta final de año, a partir de una determinada
43     //fecha (dia mes año) introducida por teclado
44     //y teniendo en cuenta si el año es bisiesto.
45     Definir Dia, Mes, Anyo como entero;
46     Escribir "Dime el dia mes año";
47     Leer Dia, Mes , Anyo;
48
49     Definir MaxDias, i como entero;
50     Si esBisiesto(Anyo) entonces
51           maxDias <- 366;
52     Sino
53           maxDias <- 365;
54     FinSi
55     Para i<-1 hasta Mes - 1 Con Paso 1 hacer
56           maxDias <- maxDias - DiasMes(i, Anyo);
57     FinPara
58     maxDias <- MaxDias - Dia;
59
60     Escribir "Para fin de año quedan " , MaxDias, " dias";
61
62
63 FinProceso



Otra opción para el mismo algoritmo.




1 //Algoritmo dias fin de año
2
3 SubProceso res <- EsBisiesto( a )
4      Definir res como logico;
5      res <- falso;
6      si a % 100 = 0 entonces
7            si a % 400 = 0 entonces //Bisiesto
8                   res <- Verdadero;
9            FinSi
10     sino
11           si a % 4 = 0 entonces //Bisiesto
12                  res <- Verdadero;
13           FinSi
14     FinSi
15 FinSubProceso
16
17 SubProceso res<- DiasMes(m, a)
18     Definir res como entero;
19     Segun M hacer
20           1,3,5,7,8,10,12: Res <- 31;
21           2: si EsBisiesto(a) entonces
22                         res<-29;
23                  sino
24                         res<-28;
25                  FinSi
26           4,6,9,11: Res <- 30;
27     FinSegun
28 FinSubProceso
29
30
31 Proceso DiasFinAnyo
32     //Escribir una programa que calcule y retorne el número de días
33     //que faltan hasta final de año, a partir de una determinada
34     //fecha (dia mes año) introducida por teclado
35     //y teniendo en cuenta si el año es bisiesto.
36     Definir Dia, Mes, Anyo como entero;
37     Escribir "Dime el dia mes año";
38     Leer Dia, Mes , Anyo;
39
40     Definir MaxDias, i como entero;
41     Si esBisiesto(Anyo) entonces
42           maxDias <- 366;
43     Sino
44           maxDias <- 365;
45     FinSi
46     Para i<-1 hasta Mes - 1 Con Paso 1 hacer
47           maxDias <- maxDias - DiasMes(i, Anyo);
48     FinPara
49     maxDias <- MaxDias - Dia;
50
51     Escribir "Para fin de año quedan " , MaxDias, " dias";
52
53
54 FinProceso



Un programa que lea una temperatura en grados centígrados o Fahrenheit y la convierta.




1 //Algotirmo conversor de temperaturas
2
3 subProceso res <- CelsiusAFahrenheit(grados)
4      // F = (9 / 5) * C + 32;
5      Definir res como real;
6      res <- ((9/5) * grados) + 32;
7 FinSubProceso

8 subProceso res <- FahrenheitACelsius(grados)
9      // C = ( F - 32 ) * (5 /9)
10     Definir res como real;
11     res <- ( grados - 32) * (5/9);
12 FinSubProceso

13 Proceso ConvertirGradosCelsiusAFahrenheit
14     //Permite convertir entre grados Celsius y Fahrenheit
15     //Leer de consola temperatura y tipo de grado C o F
16     //Calcular le tenperatura en la otra escala
17     Definir Grados, GradosCon como real;
18     Definir Escala Como Caracter; //C o F
19     Escribir "Dime la temperatura a calcular";
20     Leer Grados;
21     Escribir "Dime la escala de los grados introducidos";
22     Escribir "C=Celsius y F=Fahrenheit";
23     Leer Escala;
24     Si Escala = "C" Entonces
25           GradosCon <- CelsiusAFahrenheit(Grados);
26     Sino
27           GradosCon <- FahrenheitACelsius(Grados);
28     FinSi
29     Escribir "Los grados son: ", GradosCon;
30 FinProceso



Calcular cuota hipoteca.




1 //Calculo de la cuota mensual hipoteca.
2
3 SubProceso InteresMensual <- CalcularInteresMensual(InteresAnual)
4      // Usando tantos equivalentes
5      // 1 + interes = ( 1 + InteresMensual)^12;
6      //InteresMensual =((1+Interes)^(1/12)) - 1;
7      //Entradas y salidas en %
8      Definir InteresMensual como real;
9      InteresMensual <- ((1 + (InteresAnual/100))^(1/12))-1;
10     InteresMensual <- InteresMensual * 100;
11 FinSubProceso
12
13 SubProceso CuotaMensual <- CalcularCuotaMensual(Capital, InteresAnual, Plazos)
14     //Couta = (Capital * Interes) /
15     // 100 * (1 - (1+(interes/100))^ - plazo)
16     Definir CuotaMensual como real;
17     Definir A, B, InteresM Como Real;
18     Plazos <- -Plazos;
19     InteresM <- CalcularInteresMensual(InteresAnual);
20     A <- Capital * InteresM;
21     B <- 100 * ( 1 - (1 + (InteresM/100))^(Plazos));
22     CuotaMensual <- A / B;
23 FinSubProceso
24
25 Proceso CalcularCuotaHipoteca
26     //Lee los anos, capital , interes anula en %
27     //Muestra la couta con amortización constante.
28     Definir Anyos Como Entero;
29     Definir Capital, Interes Como Real;
30     Definir Cuota Como Real;
31     Escribir "Introduce Capital";
32     Leer Capital;
33     Escribir "Introduce Interes (%) ";
34     Leer Interes;
35     Escribir "Intrduce Años";
36     Leer Anyos;
37     Cuota <- CalcularCuotaMensual(Capital, Interes, Anyos * 12);
38     Escribir "la Cuota es " , Cuota;
39 FinProceso


Hay unos multicines con 5 salas, y cada sala con 100 personas distribuidas en 20 asientos y 5 filas. Si yo pido entrada para una sala, implementar un programa que me diga si hay sitio en la sala.




//Entradas multicines
2
SubProceso InicializarCine(ElCine)
4      Definir SComo Entero;
5      Para S<-hasta Hacer
6            Para F<-hasta Hacer
7                   Para A<-hasta 20 Hacer
8                          ElCine[S,F,A<- (Azar(2) = 1);
9                   FinPara
10           FinPara
11     FinPara
12 FinSubProceso
13
14 SubProceso MostrarCines(ElCine)
15     Definir SComo Entero;
16     Para S<-hasta Hacer
17           Escribir "Sala : "S;
18           Para F<-hasta Hacer
19                  Para A<-hasta 20 Hacer
20                         Si ElCine[S,F,Aentonces //Verdadero ocupado
21                                Escribir " X " sin saltar;
22                         sino
23                                Escribir " . " sin saltar;
24                         FinSi
25                  FinPara
26                  Escribir "";
27           FinPara
28     FinPara
29 FinSubProceso
30
31 SubProceso Ok <- ReservarEntradas(ElCineSalaCantEntradasLasEntradas)
32     Definir OkSeguirBuscado como logico;
33     Definir EntradasResevadasFcomo entero;
34     EntradasResevadas <-0;
35     F<-1;
36     A<-1;
37     SeguirBuscado<-Verdadero;
38     Mientras SeguirBuscado
39           si ElCine[Sala,F,A] = Falso Entonces
40                  EntradasResevadas <- EntradasResevadas 1;
41                  LasEntradas[EntradasResevadas,]<-Sala;
42                  LasEntradas[EntradasResevadas,]<-F;
43                  LasEntradas[EntradasResevadas,]<-A;
44                  si EntradasResevadas CantEntradas Entonces
45                         SeguirBuscado<-falso;
46                  Sino
47                         A<-A+1;
48                         Si 20 entonces
49                                <- 1;
50                                <- 1;
51                                si entonces
52                                      SeguirBuscado<- Falso;
53                                FinSi
54                         FinSi
55                  FinSi
56           sino
57                  A<-A+1;
58                  Si 20 entonces
59                         <- 1;
60                         <- 1;
61                         si entonces
62                                SeguirBuscado<- Falso;
63                         FinSi
64                  FinSi
65           FinSi
66     finMientras
67     Si Entonces //sala ocupada
68           Ok<-Falso;
69     Sino
70           Ok<-Verdadero;
71     finsi
72 FinSubProceso
73
74 Proceso CinesVariasEntradas
75     //Hay unos multicines con 4 salas,
76     //y cada sala con 100 personas distribuidas
77     //en 20 asientos y 5 filas.
78     //Si yo pido un numeros de entradas para una sala, implementar
79     //un programa que me diga si hay sitio en la sala.
80     //Decir fila y asiento
81     Definir Cines como logico//Verdadero es ocupado
82     Dimension Cines[4,5,20]; // 4 salas, 5 filas , 20 asientos
83     Definir SComo Entero;
84     InicializarCine(Cines);
85     MostrarCines(Cines);
86     Definir SalaNumEntradasEntradas Como Entero;
87     Dimension Entradas[153]; // NumEntada(1)Sala (2)Fila (3)Asiento
88     Definir SeguirBuscado como logico;
89     Repetir
90           Escribir "Dime a que sala queires ir??";
91           Leer Sala;
92           Si Sala <> Entonces
93                  Escribir "Dime cuantas entradas max(15) ?";
94                  Leer NumEntradas;
95                  Borrar Pantalla;
96                  Si ~ReservarEntradas(CinesSalaNumEntradasEntradasEntonces //sala ocupada
97                         Escribir "Sala ocupada ";
98                  Sino
99                         Escribir "Tus Entradas:";
100                 Para S<-Hasta NumEntradas Hacer
101                        Sala <- Entradas[S,];
102                        F<-Entradas[S,];
103                        A<- Entradas[S,];
104                        Cines[Sala,F,A<- Verdadero;
105                        Escribir "Entrada " S" en S:" Sala " F:"F" A:",A;
106                 FinPara
107          FinSi
108          MostrarCines(Cines);
109    FinSi
110 Hasta Que Sala 0
111 FinProceso





2 comentarios:

  1. Hola Guillermo, muy bueno tu blog, me haria falta si puedes que hicieses el ordinograma de el ejemplo de calcular los dias que faltan hasta final de año actual, partiendo de una determinada fecha introducida por teclado en día, mes y año, teniendo en cuenta loa años bisiestos, si me puedes mostrar un par de ejemplos de como seria con ordinogramas, gracias.

    ResponderEliminar
  2. Hola tienes el ordinograma en
    http://guillermopardos.blogspot.com/2013/04/ordinograma-de-el-ejemplo-de-calcular.html

    ResponderEliminar