Mostrando entradas con la etiqueta Sub Procesos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Sub Procesos. Mostrar todas las entradas

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