Recopilación de Ejemplos de algoritmos en PSeudoCodigo con pseint
Nota: estos ejemplos se encuentran desactualizados. Si bien continúan siendo válidos, algunas operaciones pueden simplificarse gracias a nuevas características del intérprete, y hay además aspectos del lenguaje que no están cubiertos en ninguo de estos ejemplos (como la definición de funciones o subprocesos). Finalmente, la sintaxis de un ejemplo puede variar según el perfil de lenguaje con que el usuario configure al intérprete. Para obtener una lista más completa de ejemplos, y visualizar su sintaxis adaptada a una cierta configuración consulte la ayuda del editor.
AdivinaNumero : simple juego en el que hay que adivinar un nro aleatorio entre 1 y 100 en menos de 10 intentos.
Factorizacion : descompone un numero en sus factores primos.
Hanoi : juego de las torres de Hanoi, donde se deben mover discos entre tres torres cumpliendo ciertas limitaciones, hasta colocarlos todos en la ultima torre.
Matematicas : presenta un menu que permite realizar diferentes operaciones matematicas sobre un numero (funciones trigonometricas, calcular valor absolto, truncar, determinar si es primo, hallar el factorial, hallar la raiz cuadrada, etc.).
Mayores : Busca los dos mayores de una lista de N datos
Modulo : Ejemplo trivial del uso del operador de módulo (MOD o %).
OrdenaLista : ordena una lista de nombres alfabeticamente.
Promedio : calcula el promedio de una lista de datos.
Resolvente : calcula e informa las raices de una ecuacion de cuadratica, considerando los tres casos (reales iguales, reales distintas, o complejas conjugadas).
Sucursales : se obtienen datos acerca de las ventas de una empresa ingresando las cantidades vendidas por articulo y sucursal, junto con el listado de precios.
Triangulo : calcula el area de un triangulo rectangulo, verificando primero que lo sea mediante el teorema de pitagoras.
Página 1 de 42
AdivinaNumero.psc
// Juego simple que pide al usuario que adivine un numero en 10 intentos
Proceso Adivina_Numero intentos<-9; num_secreto <- azar(100)+1; Escribir "Adivine el numero (de 1 a 100):"; Leer num_ingresado; Mientras num_secreto<>num_ingresado Y intentos>0 Hacer Si num_secreto>num_ingresado Entonces Escribir "Muy bajo"; Sino Escribir "Muy alto"; FinSi Escribir "Le quedan ",intentos," intentos:"; Leer num_ingresado; intentos <- intentos-1; FinMientras Si intentos=0 Entonces Escribir "El numero era: ",num_secreto; Sino Escribir "Exacto! Usted adivino en ",11-intentos," intentos."; FinSi FinProceso
Factorizacion.psc
Proceso Factorizacion Escribir "Ingrese el numero: "; Leer num; Escribir "Factorizacion: "; factorizar<-verdadero; Mientras factorizar Y num>1 hacer div<-0; Si num/2 = trunc(num/2) Entonces Escribir 2; num<-num/2; Sino div<-1; factor_primo<-Verdadero; Mientras div<=rc(num) Y factor_primo Hacer div <- div+2; Si num/div = trunc(num/div) Entonces factor_primo <- Falso; FinSi FinMientras Si factor_primo Entonces
Página 2 de 42
escribir num; factorizar<-falso; sino escribir div; num<-num/div; factor_primo<-verdadero; FinSi FinSi FinMientras FinProceso
Hanoi.psc
// El objetivo del juego es mover los discos de la torre 1 a la 3 en la// menor cantidad de movimientos posible. No se puede colocar un disco de // un tamanio sobre otro mas chico
// Hay una matriz que representa las torres, cada columna contiene// nros que representan los tamanios de los discos en esas torres (solo// interesan los valores hasta la cantidad de discos de esa torre).// Cuantos discos tiene cada torre lo dice el vector cant_discos.
Proceso Hanoi Dimension torres[3,10], cant_discos[3]; // pedir y validar cuantos discos colocar en la primer torre Escribir "Ingrese el nro de discos (1-5):"; leer discos; mientras discos<1 O discos>8 Hacer Escribir "El numero de discos debe ser mayor a 0 y menor a 5:"; leer discos; finmientras
// inicializar los datos cant_discos[1]<-discos; cant_discos[2]<-0; cant_discos[3]<-0; para i<-1 hasta discos hacer torres[1,i]<-discos-i+1; finpara cant_movs<-0; // jugar! mientras cant_discos[3]<>discos Hacer // mientras no esten todos los discos en la tercer torre, el juego sigue para i<-1 hasta 3 Hacer // dibujar las tres torres escribir ""; escribir "Torre ",i; si cant_discos[i]=0 Entonces Escribir ""; sino para j<-cant_discos[i] hasta 1 con paso -1 Hacer
Página 3 de 42
// recorrer los discos de la torre, de arriba hacia abajo segun torres[i,j] Hacer // dibujar cada disco 1: escribir " XX"; 2: escribir " XXXXXX"; 3: escribir " XXXXXXXXXX"; 4: escribir " XXXXXXXXXXXXXX"; 5: escribir " XXXXXXXXXXXXXXXXXX"; 6: escribir " XXXXXXXXXXXXXXXXXXXXXX"; 7: escribir " XXXXXXXXXXXXXXXXXXXXXXXXXX"; 8: escribir " XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; finsegun FinPara finsi Escribir " ----------------------------------"; escribir ""; FinPara // solicitar movimiento Escribir "Mover desde la torre: "; leer t1; Escribir "hacia la torre: "; leer t2; si t1<0 O t1>3 O t2<0 O t2>3 Entonces // controlar que el nro de torre sea valido escribir "Movimiento invalido"; sino si cant_discos[t1]=0 Entonces // controlar que la torre 1 tengo al menos un disco escribir "Movimiento invalido"; Sino disco_a_mover <- torres[t1,cant_discos[t1]]; // obtener tamanio del disco que se quiere mover puede_mover<-verdadero; si cant_discos[t2]<>0 entonces // controlar que la torre dos no tenga discos o tenga discos mas grandes si torres[t2,cant_discos[t2]]<disco_a_mover Entonces puede_mover<-Falso; FinSi FinSi si puede_mover Entonces // si paso todos los controles, mover cant_movs <- cant_movs+1; cant_discos[t2]<-cant_discos[t2]+1; torres[t2,cant_discos[t2]] <- disco_a_mover; cant_discos[t1]<-cant_discos[t1]-1;
Página 4 de 42
Sino escribir "Movimiento invalido"; finsi FinSi finsi finmientras // mostrar resultado escribir ""; escribir ""; escribir "Juego finalizado en ",cant_movs," movimientos!"; escribir ""; FinProceso
Matematicas.psc
// Este ejemplo muestra el uso de expresiones, operadores y funciones matematicas
Proceso Matematicas Salir<-0; Escribir 'Ingresar Numero:'; Leer N; Repetir Escribir ' '; Escribir 'Presione Enter para continuar'; Leer x; Escribir '1 - Seno, Coseno, ArcoTangente'; Escribir '2 - Lograritmo Natural, Funcion Exponencial'; Escribir '3 - Truncar, Redondear'; Escribir '4 - Raiz Cuadrada'; Escribir '5 - Valor Absoluto'; Escribir '6 - Separar parte entera y decimal'; Escribir '7 - Hallar Factorial'; Escribir '8 - Averiguar si es primo'; Escribir '9 - Ingresar Otro Numero'; Escribir ' '; Escribir '0 - para Salir'; Escribir ' '; Leer Opcion; Segun Opcion Hacer 1: Escribir 'Seno:',Sen(N); Escribir 'Coseno:',Cos(N); Escribir 'ArcTangente:',Atan(N); 2: Si N<=0 Entonces Escribir 'El numero debe ser mayor a cero!'; Sino Escribir 'Log Nat.:',ln(N); Escribir 'Func Expon.:',exp(N); FinSi 3: Escribir 'Turncar:',trunc(N); Escribir 'Redondear:',redon(N);
Página 5 de 42
4: Escribir 'Raiz Cuad.:',rc(N); 5: Escribir 'Valor Abs.:',abs(N); 6: Escribir 'Parte Entera:',Trunc(n); Escribir 'Parte Decimal:',n-Trunc(n); 7: Si N<>Trunc(N) Entonces Escribir 'El numero debe ser entero!'; Sino Si abs(N)>50 Entonces Escribir 'Resultado muy grande!'; Sino r<-1; f<-1; Mientras f<=abs(N) Hacer Si N<0 Entonces r<-(-f)*r; Sino r<-f*r; FinSi f<-f+1; FinMientras Escribir 'Factorial:',r; FinSi FinSi 8: Si N<>Trunc(N) Entonces Escribir 'El numero debe ser entero!'; Sino Primo<-'Si'; Si N/2=trunc(N/2) Entonces Primo<-'No'; FinSi Si N<0 entonces Nu<-N*-1; sino Nu<-N; FinSi Nu<-RC(Nu); f<-3; Mientras f<=Nu Y Primo='Si' Hacer Si N/F=trunc(N/F) Entonces Primo<-'No'; FinSi f<-f+2; FinMientras Escribir 'Numero Primo:',Primo; Si f=3 Entonces F<-4; FinSi Si Primo='No' Entonces Escribir N,'=',f-2,'x',N/(f-2); FinSi FinSi 9: Escribir 'Ingrese Numero:';
Página 6 de 42
Leer N; 0: Salir<-1; De Otro Modo: Escribir 'Opcion No Valida!'; FinSegun Hasta que Salir=1FinProceso
Mayores.psc
// Busca los dos mayores de una lista de N datos
Proceso Mayores
Dimension datos[200]; Escribir "Ingrese la cantidad de datos:"; Leer n; Para i<-1 Hasta n Hacer Escribir "Ingrese el dato ",i,":"; Leer datos[i]; FinPara
Si datos[1]>datos[2] Entonces may1<-datos[1]; may2<-datos[2]; Sino may1<-datos[2]; may2<-datos[1]; FinSi Para i<-3 Hasta n Hacer Si datos[i]>may1 Entonces may2<-may1; may1<-datos[i]; Sino Si datos[i]>may2 Entonces may2<-datos[i]; FinSi FinSi FinPara
Escribir "El mayor es: ",may1; Escribir "El segundo mayor es: ",may2; FinProceso
Modulo.psc
Proceso Modulo Escribir "Ingrese el numero: "; Leer N;
Página 7 de 42
Escribir "Ingrese el divisor: "; Leer M; Si N mod M = 0 Entonces Escribir M," es divisor exacto de ",N,"."; Sino Escribir "El resto de dividir ",N," por ",M," es: ",N mod M; FinSiFinProceso
OrdenaLista.psc
// Se ingresa una lista de nombres (la lista termina// cuando se ingresa un nombre en blanco) no permitiendo// ingresar repetidos y luego se ordena y muestra
Proceso OrdenaLista Dimension lista[200]; Escribir "Ingrese los nombres (enter en blanco para terminar):"; // leer la lista cant<-0; Leer nombre; Mientras nombre<>"" Hacer cant<-cant+1; lista[cant]<-nombre; Repetir // leer un nombre y ver que no este ya en la lista Leer nombre; se_repite<-Falso; Para i<-1 Hasta cant Hacer Si nombre=lista[i] Entonces se_repite<-Verdadero; FinSi FinPara Hasta Que NO se_repite FinMientras // ordenar Para i<-1 Hasta cant-1 Hacer // busca el menor entre i y cant pos_menor<-i; Para j<-i+1 Hasta cant Hacer Si lista[j]<lista[pos_menor] Entonces pos_menor<-j; FinSi FinPara // intercambia el que estaba en i con el menor que encontro aux<-lista[i]; lista[i]<-lista[pos_menor]; lista[pos_menor]<-aux; FinPara // mostrar como queda la lista Escribir "La lista ordenada es:"; Para i<-1 Hasta cant Hacer
Página 8 de 42
Escribir " ",lista[i]; FinPara FinProceso
Resolvente.psc
// calcula las raices de una ecuacion de segundo grado
Proceso Resolvente // cargar datos Escribir "Ingrese el coeficiente A:"; Leer a; Escribir "Ingrese el coeficiente B:"; Leer b; Escribir "Ingrese el coeficiente C:"; Leer c; // determinar si son reales o imaginarias disc <- b^2-4*a*c; Si disc<0 Entonces // si son imaginarias preal<- (-b)/(2*a); pimag<- rc(-disc)/(2*a); Escribir "Raiz 1: ",preal,"+",pimag,"i"; Escribir "Raiz 2: ",preal,"-",pimag,"i"; Sino Si disc=0 Entonces // ver si son iguales o distintas r <- (-b)/(2*a); Escribir "Raiz 1 = Raiz 2: ",r; Sino r1 <- ((-b)+rc(disc))/(2*a); r2 <- ((-b)-rc(disc))/(2*a); Escribir "Raiz 1: ",r1; Escribir "Raiz 2: ",r2; FinSi FinSi FinProceso
Sucursales.psc
// Problema Ejemplo: // Se ingresan los precios de 5 articulos y las cantidades vendidas // por una empresa en sus 4 sucursales. Informar: // * Las cantidades totales de cada articulo. // * La cantidad de articulos en la sucursal 2. // * La cantidad del articulo 3 en la sucursal 1. // * La recaudacion total de cada sucursal. // * La recaudacion total de la empresa. // * La sucursal de mayor recaudacion.
Página 9 de 42
Proceso Sucursales // Inicializar Prec=Arreglo de precios y Cant=Arreglo para cantidades Dimension Prec[5], Cant[4,5]; // Leer Precios Para I<-1 Hasta 5 Hacer Escribir 'Ingrese Precio Articulo ',I,':'; Leer Prec[I]; FinPara // Leer Cantidades Para J<-1 Hasta 4 Hacer Para I<-1 Hasta 5 Hacer Escribir 'Ingrese Cant. de Articulo ',I,', en Sucursal ',J,':'; Leer Cant[J,I]; FinPara FinPara // Sumar cantidades por articulos Escribir 'Cantidades por articulos:'; Para I<-1 Hasta 5 Hacer Suma<-Cant[1,I]+Cant[2,I]+Cant[3,I]+Cant[4,I]; Escribir 'Total articulo ',I,':',Suma; FinPara // Informar Total de Articulos Sucursal 2 Suc2<-0; Para I<-1 Hasta 5 Hacer Suc2<-Suc2+Cant[2,I]; FinPara Escribir 'Total Sucursal 2:',Suc2; // Informar Sucursal 1, Articulo 3: Escribir 'Sucursal 1, Articulo 3:',Cant[1,3]; // Acumular total de cada sucursal (TotSuc) y // total de la empresa (TotEmp) MayorRec<-0; NumMayor<-0; TotEmp<-0; Para J<-1 Hasta 4 Hacer TotSuc<-0; Para I<-1 Hasta 5 Hacer TotSuc<-TotSuc+(Cant[J,I]*Prec[i]); FinPara Escribir 'Recaudaciones Sucursal ',J,':',TotSuc; Si TotSuc>MayorRec entonces MayorRec<-TotSuc; NumMayor<-J; FinSi TotEmp<-TotEmp+TotSuc; FinPara Escribir 'Recaudacion total de la empresa:',TotEmp; Escribir 'Sucursal de Mayor Recaudacion:',NumMayor;
FinProceso
Triangulo.pscPágina 10 de 42
// Lee los tres lados de un triangulo rectangulo, determina // si corresponden (por Pitargoras) y en caso afirmativo // calcula el area
Proceso TrianguloRectangulo // cargar datos Escribir "Ingrese el lado 1:"; Leer l1; Escribir "Ingrese el lado 2:"; Leer l2; Escribir "Ingrese el lado 3:"; Leer l3; // encontrar la hipotenusa (mayor lado) Si l1>l2 Entonces cat1<-l2; Si l1>l3 Entonces hip<-l1; cat2<-l3; Sino hip<-l3; cat2<-l1; FinSi Sino cat1<-l1; Si l2>l3 Entonces hip<-l2; cat2<-l3; Sino hip<-l3; cat2<-l2; FinSi FinSi // ver si cumple con Pitagoras Si hip^2 = cat1^2 + cat2^2 Entonces // calcualar area area<-(cat1*cat2)/2; Escribir "El area es: ",area; Sino Escribir "No es un triangulo rectangulo."; FinSi FinProceso
Ejemplos en PseintFecha de entrega 26/11/12
1. En el siguiente ejemplo se intenta caclular el promedio de 10 numeros, observa bien el codigo, copialo a Pseint y luego fijate si es correcto sino identifica los problemas y resuelvelos:
Proceso Promedio
Página 11 de 42
//Calcula el promedio de una lista de numeros Escribir "Ingrese un numero:"; Leer n; Escribir "Ingrese un numero:"; Leer n; Escribir "Ingrese un numero:"; Leer n; Escribir "Ingrese un numero:"; Leer n; Escribir "Ingrese un numero:"; Leer n; Escribir "Ingrese un numero:"; Leer n; Escribir "Ingrese un numero:"; Leer n; Escribir "Ingrese un numero:"; Leer n; Escribir "Ingrese un numero:"; Leer n; Escribir "Ingrese un numero:"; Leer n; //Declaro una variable promedio para asignarle el promedio promedio<-n1+n2+n3+n4+n5+n6+n7+n8+n9+n10 / 10; //Muestro el promedio Escribir "El promedio es: ",promedio;FinProceso
2. En este otro ejemplo se trata de mostrar los primeros 50 numeros pares, haz lo mismo que en el ejemplo anterior, copia el codigo en pseint y fijate si es correcto.
Proceso NumerosPares //Muestra los numeros pares del 0 al 50 Escribir "Ingrese un numero:"; Leer x; Repetir //la funcion MOD calcula el resto de la division por 2, si es cero entonces es par Si x MOD 2 = 0 Entonces Escribir "Numero: ",x; FinSi Hasta Que x = 50 Escribir "Ultimo Numero: ",x; Escribir "Fin de listado";FinProceso
3. Este algoritmo intenta mostrar los numeros del 1 al 100, hace lo mismo que en los ejemplos anteriores, fijate si es correcto
Proceso Repetir1al100//Hacer un pseudocodigo que imprima los numeros del 1 al 100c <- 0MIENTRAS c < 100 HACER ESCRIBIR c;
Página 12 de 42
FINMIENTRASESCRIBIR "ultimo ciclo: " c;ESCRIBIR "Fin de repeticion";FinProceso
4. Este codigo es el mismo que el ejercicio anterior pero utiliza la estructura Repetir - Hasta, ¿Funciona?,haz lo mismo que en los ejercicios anteriores, busca los errores
Proceso Repetir1al100conRepetir//Hacer un pseudocodigo que imprima los numeros del 1 al 100c <- 0
Repetir ESCRIBIR c; Hasta Que c < 100
ESCRIBIR "ultimo ciclo: " c;ESCRIBIR "Fin de repeticion";FinProceso
5. En el siguiente codigo se quiere mostrar los numeros del 100 al 0, haz lo mismo busca los errores
Proceso Repetir1al100conRepetir//Hacer un pseudocodigo que imprima los numeros del 100 al 0 en orden decrecientec <- 100
Repetir ESCRIBIR c; Hasta Que c <= 0
ESCRIBIR "ultimo ciclo: " c;ESCRIBIR "Fin de repeticion";FinProceso
6. Realizar un algoritmo que pida 3 numeros, verifique que sean positivos, luego calcule el promedio y busque el mayor de todos.7. Realizar un algoritmo que pida un numero y luego calcule la raiz cuadrada del mismo.8. Realizar un algoritmo que muestre los primeros 50 numeros pares.
quien me puede ayudar con este ejercicio inicio Una persona debe realizar un muestreo con 80 personas para determinar el promedio de //peso de los niños, jóvenes, adultos y viejos que existen en su zona habitacional. Se //determinan las categorías con base en la siguiente tabla: //CATEGORIA EDAD //Niños 0 - 10 //Adolecente 11-17 //Jóvenes 18 - 29 //Adultos 30 - 59 //Viejos 60 en adelante
Hola Jessica fijate el siguiente scriptProceso PesoPromedio//Inicializo a 0 los contadores para edad y pesonumeroNiños<-0;
Página 13 de 42
numeroAdolescentes<-0;numeroJovenes<-0;numeroAdultos<-0;numeroViejos<-0;pesoNiños<-0;pesoAdolescentes<-0;pesoJovenes<-0;pesoAdultos<-0;pesoViejos<-0;pesoPromedioNiños <-0;pesoPromedioAdolescentes <-0;pesoPromedioJovenes <-0;pesoPromedioAdultos <-0;pesoPromedioViejos <-0;
numeroPersonas<-0;Repetir
//Pido el peso y la edad de la personaEscribir 'De el peso de la persona';Leer peso;Escribir 'De la edad de la persona';Leer edad;
//Veo en que categoria de edad esta la personaSi (edad >= 0 y edad <=10) Entonces numeroNiños<-numeroNiños + 1; //añado 1 niño a esta categoria pesoNiños<-pesoNiños + peso; //sumo al contador de peso de los niños el niño encontradoFinSi
Si (edad >= 11 y edad <=17) Entonces numeroAdolescentes<-numeroAdolescentes + 1; //añado 1 adolescente a esta categoria pesoAdolescentes<-pesoAdolescentes + peso; //sumo al contador de peso de los adolescentes el adolescente encontradoFinSi
Si (edad >= 18 y edad <=29) Entonces numeroJovenes<-numeroJovenes + 1; //añado 1 Jovenes a esta categoria pesoJovenes<-pesoJovenes + peso; //sumo al contador de peso de los Jovenes el Jovenes encontradoFinSi
Si (edad >= 30 y edad <=59) Entonces numeroAdultos<-numeroAdultos + 1; //añado 1 Jovenes a esta categoria pesoAdultos<-pesoAdultos + peso; //sumo al contador de peso de los Jovenes el Jovenes encontradoFinSi
Si (edad >= 60) Entonces numeroViejos<-numeroViejos + 1; //añado 1 Viejos a esta categoria pesoViejos<-pesoViejos + peso; //sumo al contador de peso de los Viejos el Viejos encontradoFinSi
numeroPersonas<-numeroPersonas + 1;Hasta Que numeroPersonas = 80
//Calculo el promedio de cada categoriaSi numeroNiños > 0 EntoncespesoPromedioNiños <- pesoNiños / numeroNiños;
Página 14 de 42
FinSiSi numeroAdolescentes > 0 EntoncespesoPromedioAdolescentes <- pesoAdolescentes / numeroAdolescentes;FinSiSi numeroJovenes > 0 EntoncespesoPromedioJovenes <- pesoJovenes / numeroJovenes;FinSiSi numeroAdultos > 0 EntoncespesoPromedioAdultos <- pesoAdultos / numeroAdultos;FinSiSi numeroViejos > 0 EntoncespesoPromedioViejos <- pesoViejos / numeroViejos; FinSi
Escribir 'Peso Promedio niños: ' pesoPromedioNiños;Escribir 'Peso Promedio niños: ' pesoPromedioAdolescentes;Escribir 'Peso Promedio niños: ' pesoPromedioJovenes;Escribir 'Peso Promedio niños: ' pesoPromedioAdultos;Escribir 'Peso Promedio niños: ' pesoPromedioViejos;FinProceso
Debido a la tabla de categorias hay que pedir por cada persona el peso y la edadluego hay que usar condiciones para saber a que categoria de edad pertenece esta persona y luego usar contadores para actualizar la cantidad de niños, jovenes etc y tambien sumar el peso en otro contador para luego dividir cada peso de cada categoria por la cantidad de personas encontradas de esa categoria y encontrar el promedio dividiendo
Hola fijate el script, se piden dos matrices M y N. En la matriz R se guarda el resultado: se multiplica toda una fila de la M con una columna de la N
Proceso Matriz//Primero se crea la matriz de 2 x 2 y se define su tipo, asi como los dos indices para la fila y columnaDimension M[2,2];Dimension N[2,2];Dimension R[2,2];Definir N,M,I,J como Entero;
// Leer valores, aqui se cargan los valores en cada celdaPara J<-1 Hasta 2 HacerPara I<-1 Hasta 2 HacerEscribir 'Ingrese valor para indice ',I,', en columna ',J;Leer M[I,J];FinParaFinPara
// Leer valores, aqui se cargan los valores en cada celdaPara J<-1 Hasta 2 HacerPara I<-1 Hasta 2 HacerEscribir 'Ingrese valor para indice ',I,', en columna ',J;Leer N[I,J];FinParaFinPara
// Mostrar valores de cada celdaPara I<-1 Hasta 2 HacerPara J<-1 Hasta 2 HacerEscribir 'El valor para indice ',I,', en columna ',J,'es :' M[I,J]; FinPara
Página 15 de 42
FinPara
// Mostrar valores de cada celdaPara I<-1 Hasta 2 HacerPara J<-1 Hasta 2 HacerEscribir 'El valor para indice ',I,', en columna ',J,'es :' N[I,J]; FinParaFinPara
// Se hace el producto y se muestraPara I<-1 Hasta 2 HacerPara J<-1 Hasta 2 HacerR[I,J] <- M[I,J] * N[I,J];Escribir 'El producto para indice ',I,', en columna ',J,'es :' R[I,J]; FinParaFinPara
FinProceso
Página 16 de 42
Página 17 de 42
Ejemplos de Pseudocódigo
Ejemplo: Realizar el pseudocódigo de un programa que permita calcular el área de un rectángulo. Se debe
introducir la base y la altura para poder realizar el cálculo..Programa; áreaEntorno: BASE, ALTURA, AREA son número enterosAlgoritmo: escribir “Introduzca la base y la altura” leer BASE, ALTURA calcular AREA = BASE * ALTURA escribir “El área del rectángulo es “AREAFinprograma
Ejemplo: Realizar el pseudocódigo que permita al usuario introducir por teclado dos notas, calculando la suma y
el producto de las notas.Programa: SumaProductoEntorno: NOTA1,NOTA2,SUMA,PRODUCTO son números enterosAlgoritmo:
escribir “Introduzca las notas”leer NOTA1,NOTA2calcular SUMA = NOTA1 + NOTA2calcular PRODUCTO = NOTA1 * NOTA2escribir “La suma de las dos notas es:” SUMAescribir “El producto de las dos notas es :”PRODUCTO
Finprograma
Ejemplo: Realizar el pseudocódigo de un programa que permita saber si un número es mayor, menor o igual a
cero. Programa: ComparaNúmeros Entorno: NUMERO es un número entero
Algoritmo:Escribir “Introduzca un número “leer NUMEROSI NUMERO>0 ENTONCES escribir “El número introducido es positivo”SI NO SI NUMERO<0 ENTONCES escribir “El número introducido es negativo” SI NO escribir “El número es cero” FINSIFINSI
Finprograma
Supongamos un algoritmo que lea las coordenadas de tres puntos y los mueva tres puntos en la coordenada x y escriba el resultado en algún dispositivo de salida: ALGORITMO lee_tres_verticesENTRADA: las coordenadas (x,y) de tres puntosSALIDA: las coordenadas (x,y) de los tres puntos movidos 3 puntos hacia la derecha.VARIABLES: i:entera
x,y: realINICIO
PARA i=1 HASTA 3 CON INCREMENTO +1ESCRIBE "Abscisa del punto número ", iLEER x
Página 18 de 42
ESCRIBE "Ordenada del punto número ", iLEER YESCRIBE "El punto es (" x+3","y")"
FIN_PARAFIN El programa equivalente a este algoritmo se muestra a continuación. Como podemos apreciar en un programa en Pascal es importantísimo no olvidar detalles de sintaxis. Por ejemplo cada sentencia termina en punto y coma. De cualquier forma es inmediato apreciar los simples cambios existentes. program lee_tres_vertices;var x,y:real;i:integer;beginfor i:=1 to 3 dobeginwrite ('Abscisa del punto número ',i); readln(x);
write ('Ordenada del punto número ',i); readln(y);writeln (' El punto es (',x+3,',',y,')');end;
end;
Problema: calcular y mostrar la suma de los diez primeros números entre 1 y 1000 que sean divisibles por uno dado. programa suma_divisiblesvariables natural : divisor, suma, contador, número inicio programadivisor leer ‘Introduce el divisor: ’suma 0contador 0para número desde 1 hasta 1000 hacer
si divisor divide a número entoncessuma suma + númerocontador contador + 1
fin si si contador = 10 entonces
interrumpir fin sifin para escribir ‘La suma es’, suma fin programa
Página 19 de 42
Ejercicios en Pseudocódigo
Aquí les dejo 52 ejercicios en Pseudo-código, para reforzar los conocimientos dados en el la saga de postsCómo aprender a programar y no morir en el intento, estos ejercicios son muy buenos para desarrollar la lógica y están enfocados para los estudiantes en Ingeniería de Sistemas y a fines. Al final de cada consigna esta el ejercicio resuelto, trata de resolverlo sin mirar el resultado.
Que es el PseudocódigoEl Pseudo-Código sirve para orientar a los programadores, pero sin la sintaxis ni la estructura propia de ningún lenguaje (C#, VisaualBasic, etc.). En vez de escribir el programa directamente en un lenguaje de programación determinado (C, Basic, etc.), crearemos un borrador entendible para todos los lenguajes, para luego de tener bien en claro lo que se debe hacer, para pasar a la programación propiamente dicha. En pocas palabras lo que se hace es marcar la estructura de cómo sería hacer un "Programa" con cualquier lenguaje. No importa donde lo hagas en tu mano, bloc de notas, papel higiénico, etc. ya que es solo para comprender la estructura o lógica de cómo se programaría en un lenguaje real.
Los ejercicios están divididos en 9 temas:
-Bucles y tomas de decision -Bucles anidados y subprogramas -Presentación en pantalla y cabeceras -Números aleatorios y menus -Arrays unidimensionales -Arrays bidimensionales -Arrays multidimensionales -Ficheros -Informes y rupturas de control -Organización aleatoria y secuencial
Bucles y tomas de decisión
1.-Hacer un pseudocodigo que imprima los numeros del 1 al 100.
PROGRAMA contador1 ENTORNO: c <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS c < 101 HACER ESCRIBIR c c <- c + 1 FINMIENTRAS FINPROGRAMA
Página 20 de 42
2.-Hacer un pseudocodigo que imprima los numeros del 100 al 0, en orden decreciente.
PROGRAMA contador2 ENTORNO: c <- 100 ALGORITMO: Borrar_pantalla( ) MIENTRAS c <= 0 HACER ESCRIBIR c c <- c - 1 FINMIENTRAS FINPROGRAMA
3.-Hacer un pseudocodigo que imprima los numeros pares entre 0 y 100.
PROGRAMA pares ENTORNO: c <- 2 ALGORITMO: Borrar_pantalla( ) MIENTRAS c < 101 HACER ESCRIBIR c c <- c + 2 FINMIENTRAS FINPROGRAMA
4.-Hacer un programa que imprima la suma de los 100 primeros numeros.
PROGRAMA suma ENTORNO: c <- 1 suma <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS c <= 100 HACER suma <- suma + c c <- c + 1 FINMIENTRAS ESCRIBIR "La suma de los 100 primeros n£meros es: " ESCRIBIR suma FINPROGRAMA
5.-Hacer un pseudocódigo que imprima los numeros impares hasta el 100 y que imprima cuantos impares hay.
PROGRAMA impares ENTORNO: c <- 1 son <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS c < 100 ESCRIBIR c c <- c + 2 son <- son + 1 FINMIENTRAS ESCRIBIR "El n£mero de impares: " ESCRIBIR son FINPROGRAMA
6.-Hacer un pseudocodigo que imprima todos los numeros naturales que hay desde- la unidad hasta un Página 21 de 42
numero que introducimos por teclado.
PROGRAMA natural ENTORNO: i <- 0 n <- 0 ALGORITMO: Borrar_pantalla( ) ESCRIBIR "Introduce un n£mero: " LEER n MIENTRAS i < n HACER i <- i + 1 ESCRIBIR i FINMIENTRAS FINPROGRAMA
7.-Introducir tantas frases como queramos y contarlas.
PROGRAMA frases ENTORNO: res <- "S" frase <- Espacios( 30 ) c <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS res = "S" HACER ESCRIBIR "Frase: " LEER frase c <- c + 1 ESCRIBIR "Deseas introducir m s frases (S/N): " LEER res FINMIENTRAS ESCRIBIR "El n£mero de frases introducidas son: " ESCRIBIR c FINPROGRAMA
8.-Hacer un pseudocodigo que solo nos permita introducir S o N.
PROGRAMA sn ENTORNO: res <- " " ALGORITMO: Borrar_pantalla( ) MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Introduce S o N" LEER res res <- Convertir_may£sculas( res ) FINMIENTRAS FINPROGRAMA
9.-Introducir un numero por teclado. Que nos diga si es positivo o negativo.
PROGRAMA signo ENTORNO: num <- 0 ALGORITMO: Borrar_pantalla( ) ESCRIBIR "Introduce un n£mero: " LEER num SI num >= 0 ENTONCES ESCRIBIR "es positivo" SINO ESCRIBIR "es negativo"
Página 22 de 42
FINSI FINPROGRAMA
10.-Introducir un numero por teclado. Que nos diga si es par o impar.
PROGRAMA paridad ENTORNO: num <- 0 ALGORITMO: Borrar_pantalla( ) ESCRIBIR "Introduce un n£mero: " LEER num SI num = int( num / 2 ) * 2 ENTONCES ESCRIBIR "es par" SINO ESCRIBIR "es impar" FINSI FINPROGRAMA
11.-Imprimir y contar los multiplos de 3 desde la unidad hasta un numero que introducimos por teclado.
PROGRAMA multiplo3 ENTORNO: i <- 3 n <- 0 c <- 0 ALGORITMO: Borrar_pantalla( ) ESCRIBIR "N£mero: " LEER n MIENTRAS i <= n HACER SI i = int( i / 3 ) * 3 ENTONCES ESCRIBIR i c <- c + 1 FINSI i <- i + 1 FINMIENTRAS ESCRIBIR "El n£mero de m£ltiplos de 3 son: " ESCRIBIR c FINPROGRAMA
12.-Hacer un pseudocodigo que imprima los numeros del 1 al 100. Que calcule la suma de todos los numeros pares por un lado, y por otro, la de todos los impares.
PROGRAMA par_impar ENTORNO: i <- 1 sumapar <- 0 sumaimp <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS i < 101 HACER SI i = int( i / 2 ) * 2 ENTONCES sumapar <- sumapar + i SINO sumaimp <- sumaimp + i FINSI i <- i + 1 FINMIENTRAS ESCRIBIR "La suma de los pares es: " ESCRIBIR sumapar ESCRIBIR "La suma de los impares es: "
Página 23 de 42
ESCRIBIR sumaimp FINPROGRAMA
13.-Imprimir y contar los numeros que son multiplos de 2 o de 3 que hay entre 1 y 100.
PROGRAMA multiplo_2_3 ENTORNO: i <- 1 c <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS i < 101 HACER SI i = int( i / 2 ) * 2 O i = int( i / 3 ) * 3 ENTONCES c <- c + 1 ESCRIBIR i FINSI i <- i + 1 FINMIENTRAS ESCRIBIR "El n£mero de m£ltiplos es de: " ESCRIBIR c FINPROGRAMA
14.-Hacer un pseudocodigo que imprima el mayor y el menor de una serie de cinco numeros que vamos introduciendo por teclado.
PROGRAMA mayor_menor ENTORNO: con <- 0 n <- 0 maximo <- 0 minimo <- 99999 ALGORITMO: Borrar_pantalla( ) MIENTRAS con <= 5 HACER ESCRIBIR "N£mero: " LEER n SI n > maximo ENTONCES maximo = n FINSI SI n < minimo ENTONCES minimo <- n FINSI con <- con + 1 FINMIENTRAS ESCRIBIR "El mayor de los n£meros es: " ESCRIBIR maximo ESCRIBIR "El menor de los n£meros es: " ESCRIBIR minimo FINPROGRAMA
15.-Introducir dos numeros por teclado. Imprimir los numeros naturales que hay entre ambos numeros empezando por el m s pequeño, contar cuantos hay y cuantos de ellos son pares. Calcular la suma de los impares.
PROGRAMA par_impar ENTORNO: num1 <- 0 num2 <- 0 aux <- 0 son <- 0 pares <- 0 sumaimpa <- 0
Página 24 de 42
ALGORITMO: Borrar_pantalla( ) ESCRIBIR "N£mero: " LEER num1 ESCRIBIR "N£mero: " LEER num2 SI num1 > num2 ENTONCES aux <- num1 num1 <- num2 num2 <- aux FINSI MIENTRAS num1 >= num2 HACER ESCRIBIR num1 son <- son + 1 SI num1 = int( num1 / 2 ) * 2 ENTONCES pares <- pares + 1 SINO sumaimpa <- sumaimpa + num1 FINSI num1 <- num1 + 1 FINMIENTRAS ESCRIBIR "N£meros visualizados: " ESCRIBIR son ESCRIBIR "Pares hay: " ESCRIBIR pares ESCRIBIR "La suma de los impares es: " ESCRIBIR sumaimpa FINPROGRAMA
Bucles anidados y subprogramas
16.-Imprimir diez veces la serie de numeros del 1 al 10.
PROGRAMA diez ENTORNO: serie <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS serie <= 10 HACER numero <- 1 MIENTRAS numero <= 10 HACER ESCRIBIR numero numero <- numero + 1 FINMIENTRAS serie <- serie + 1 FINMIENTRAS FINPROGRAMA
17.-Imprimir, contar y sumar los multiplos de 2 que hay entre una serie de numeros, tal que el segundo sea mayor o igual que el primero.
PROGRAMA multiplo2 ENTORNO: res <- "S" ALGORITMO: Borrar_pantalla( ) MIENTRAS res = "S" HACER c <- 0 sum <- 0 num1 <- 0 num2 <- -999 ESCRIBIR "N£mero: " LEER num1
Página 25 de 42
ESCRIBIR "N£mero mayor que el anterior" MIENTRAS num1 >= num2 HACER LEER num2 FINMIENTRAS num1 <- num1 + 1 MIENTRAS num1 <= num2 - 1 HACER SI num1 = int( num1 / 2 ) * 2 ENTONCES ESCRIBIR num1 c <- c + 1 sum <- sum + num1 FINSI num1 <- num1 + 1 FINMIENTRAS ESCRIBIR "N£mero de m£ltiplos de 2: " ESCRIBIR c ESCRIBIR "Su suma es: " ESCRIBIR sum res <- Espacios( 1 ) MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Otra serie de n£meros (S/N): " LEER res res <- Convertir_may£sculas( res ) FINMIENTRAS FINMIENTRAS FINPROGRAMA
18.-Hacer un pseudocodigo que cuente las veces que aparece una determinada letra en una frase que introduciremos por teclado.
PROGRAMA letra ENTORNO: frase <- Espacios( 30 ) letra <- Espacios( 1 ) longitud <- 0 a <- 0 res <- "S" ALGORITMO: MIENTRAS res = "S" HACER Borrar_pantalla( ) ESCRIBIR "Introduce una frase: " LEER frase longitud <- Hallar_longitud( frase ) i <- 1 ESCRIBIR "Letra a buscar: " LEER letra MIENTRAS i <= longitud HACER SI letra = Caracter( frase, i, 1 ) ENTONCES a <- a + 1 FINSI i <- i + 1 FINMIENTRAS Borrar_pantalla( ) ESCRIBIR "El n£mero de veces que aparece la letra " ESCRIBIR letra ESCRIBIR " en la frase " ESCRIBIR frase ESCRIBIR " es de " ESCRIBIR a res <- Espacios( 1 ) MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Desea introducir más frases (S/N): " LEER res res <- Convertir_may£sculas( res )
Página 26 de 42
FINMIENTRAS FINMIENTRAS FINPROGRAMA
19.-Hacer un pseudocodigo que simule el funcionamiento de un reloj digital y que permita ponerlo en hora.
PROGRAMA reloj ENTORNO: horas <- 0 minutos <- 0 segundos <- 0 res <- "S" ALGORITMO: Borrar_pantalla( ) ESCRIBIR "Horas: " LEER horas ESCRIBIR "Minutos: " LEER minutos ESCRIBIR "Segundos: " LEER segundos MIENTRAS res = "S" HACER MIENTRAS horas < 24 HACER MIENTRAS minutos < 60 HACER MIENTRAS segundos < 60 HACER ESCRIBIR horas ESCRIBIR minutos ESCRIBIR segundos segundos <- segundos + 1 FINMIENTRAS minutos <- minutos + 1 segundos <- 0 FINMIENTRAS horas <- horas + 1 minutos <- 0 FINMIENTRAS horas <- 0 FINMIENTRAS FINPROGRAMA
20.-Calcular el factorial de un numero, mediante subprogramas.
PROGRAMA factorial ENTORNO: res <- "S" ALGORITMO: MIENTRAS res = "S" HACER Borrar_pantalla( ) factorial <- 1 ESCRIBIR "N£mero: " LEER numero SI numero < 0 ENTONCES ESCRIBIR "No tiene factorial" SINO HACER Calculos FINSI HACER Mas FINMIENTRAS FINPROGRAMA ------------------------------ SUBPROGRAMA Calculos MIENTRAS numero > 1 HACER factorial <- factorial * numero
Página 27 de 42
numero <- numero - 1 FINMIENTRAS HACER Imprimir FINSUBPROGRAMA ------------------------------ SUBPROGRAMA Mas res <- " " MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Desea calcular más factoriales (S/N): " LEER res res <- Convertir_may£sculas( res ) FINMIENTRAS FINSUBPROGRAMA ------------------------------ SUBPROGRAMA Imprimir ESCRIBIR "Su factorial es: " ESCRIBIR factorial FINSUBPROGRAMA
21.-Hacer un programa que calcule independientemente la suma de los pares y los impares de los numeros entre 1 y 1000, utilizando un switch.
PROGRAMA suma ENTORNO: par <- 0 impar <- 0 sw <- 0 i <- 1 ALGORITMO: Borrar_pantalla( ) MIENTRAS i <= 1000 HACER SI sw = 0 ENTONCES impar <- impar + i sw <- 1 SINO par <- par + i sw <- 0 FINSI i <- i + 1 FINMIENTRAS ESCRIBIR "La suma de los pares es: " ESCRIBIR par ESCRIBIR "La suma de los impares es: " ESCRIBIR impar FINPROGRAMA
Presentacion en pantalla y cabeceras
22.-Introducir una frase por teclado. Imprimirla cinco veces en filas consecutivas, pero cada impresion ir desplazada cuatro columnas hacia la derecha.
PROGRAMA frase ENTORNO: frase <- Espacios( 30 ) ALGORITMO: Borrar_pantalla( ) EN 5,15 ESCRIBIR "Frase: " EN 5,22 LEER frase fi <- 8 co <- 15 veces <- 0 MIENTRAS veces <= 5 HACER
Página 28 de 42
EN fi,co ESCRIBIR frase veces <- veces + 1 co <- co + 4 fi <- fi + 1 FINMIENTRAS FINPROGRAMA
23.-Hacer un pseudocodigo que imprima los n£meros del 0 al 100, controlando las filas y las columnas.
PROGRAMA numeros ENTORNO: c <- 0 ALGORITMO: Borrar_pantalla( ) EN 5,20 ESCRIBIR "Los n£meros del 0 al 100 son: " fi <- 7 col <- 5 MIENTRAS c < 101 HACER EN fi,col ESCRIBIR c c <- c + 1 col <- col + 4 SI col > 75 ENTONCES fi <- fi + 2 col <- 5 FINSI FINMIENTRAS FINPROGRAMA
24.-Comprobar si un numero mayor o igual que la unidad es primo.
PROGRAMA primo ENTORNO: res <- "S" ALGORITMO: MIENTRAS res = "S" HACER Borrar_pantalla( ) numero <- 0 sw <- 0 MIENTRAS numero < 1 HACER EN 8,10 ESCRIBIR "N£mero: " EN 8,18 LEER numero FINMIENTRAS i <- numero - 1 MIENTRAS i > 1 Y sw <> 1 HACER SI numero = Int( numero / i ) * i ENTONCES sw = 1 SINO i <- i - 1 FINSI FINMIENTRAS SI sw = 1 ENTONCES EN 10,10 ESCRIBIR "no es primo" SINO EN 10,10 ESCRIBIR "s¡ es primo" FINSI HACER Mas FINMIENTRAS FINPROGRAMA ------------------------------ SUBPROGRAMA Mas res <- " " MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Desea introducir m s n£meros (S/N): "
Página 29 de 42
LEER res res <- Convertir_mayusculas( res ) FINMIENTRAS FINSUBPROGRAMA
25.-Introducir un numero menor de 5000 y pasarlo a numero romano.
PROGRAMA romano ENTORNO: res <- "S" ALGORITMO: MIENTRAS res = "S" HACER Borrar_pantalla( ) num <- 0 MIENTRAS num < 1 O num > 5000 HACER EN 8,10 ESCRIBIR "N£mero: " EN 8,18 ESCRIBIR num FINMIENTRAS col <- 15 MIENTRAS num >= 1000 HACER EN 15,col ESCRIBIR "M" num <- num - 1000 col <- col + 1 FINMIENTRAS SI num >= 900 ENTONCES EN 15,col ESCRIBIR "CM" num <- num - 900 col <- col + 2 FINSI SI num >= 500 ENTONCES EN 15,col ESCRIBIR "D" num <- num - 500 col <- col + 1 FINSI MIENTRAS num >= 100 HACER EN 15,col ESCRIBIR "C" num <- num - 100 col <- col + 1 FINMIENTRAS SI num >= 90 ENTONCES EN 15,col ESCRIBIR "XC" num <- num - 90 col <- col + 2 FINSI SI num >= 50 ENTONCES EN 15,col ESCRIBIR "L" num <- num - 50 col <- col + 1 FINSI SI num >= 40 ENTONCES EN 15,col ESCRIBIR "XL" num <- num - 40 col <- col + 2 FINSI MIENTRAS num >= 10 HACER EN 15,col ESCRIBIR "X" num <- num - 10 col <- col + 1 FINMIENTRAS SI num = 9 ENTONCES EN 15,col ESCRIBIR "IX" num <- num - 9 col <- col + 2 FINSI
Página 30 de 42
SI num >= 5 ENTONCES EN 15,col ESCRIBIR "V" num <- num - 5 col <- col + 1 FINSI SI num >= 4 ENTONCES EN 15,col ESCRIBIR "IV" num <- num - 4 col <- col + 2 FINSI MIENTRAS num > 0 HACER EN 15,col ESCRIBIR "I" num <- num - 1 col <- col + 1 FINMIENTRAS HACER Mas FINMIENTRAS FINPROGRAMA ------------------------------ SUBPROGRAMA Mas res <- " " MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Desea introducir m s n£meros (S/N): " LEER res res <- Convertir_mayusculas( res ) FINMIENTRAS FINSUBPROGRAMA
26.-Introducir una frase por teclado. Imprimirla en el centro de la pantalla.
PROGRAMA centro ENTORNO: res <- "S" frase <- Espacios( 40 ) ALGORITMO: MIENTRAS res = "S" HACER Borrar_pantalla( ) EN 5,15 ESCRIBIR "Frase: " EN 5,22 LEER frase EN 12,40 - Int( Longitud( frase ) / 2 ) ESCRIBIR frase HACER Mas FINMIENTRAS FINPROGRAMA
27.-Realizar la tabla de multiplicar de un numero entre 0 y 10.
PROGRAMA tabla ENTORNO: num <- -1 ALGORITMO: HACER Numero Borrar_pantalla( ) EN 5,10 ESCRIBIR "Tabla de multiplicar del n£mero: " EN 5,40 LEER num i <- 0 fi <- 8 MIENTRAS i <= 10 HACER EN fi,15 ESCRIBIR num EN fi,19 ESCRIBIR " * " EN fi,23 ESCRIBIR i EN fi,25 ESCRIBIR " = " EN fi,29 ESCRIBIR num * i fi <- fi + 1
Página 31 de 42
i <- i + 1 FINMIENTRAS FINPROGRAMA ------------------------------ SUBPROGRAMA Numero MIENTRAS num < 0 HACER Borrar_pantalla( ) EN 10,25 ESCRIBIR "N£mero: " EN 10,33 LEER num FINMIENTRAS FINSUBPROGRAMA
Numeros aleatorios y menus
28.-Simular el lanzamiento de una moneda al aire e imprimir si ha salido cara o cruz.
PROGRAMA moneda ENTORNO: res <- "S" ALGORITMO: MIENTRAS res = "S" HACER Borrar_pantalla( ) SI Rnd( ) <= 0.5 ENTONCES EN 10,35 ESCRIBIR "Cara" SINO EN 10,35 ESCRIBIR "Cruz" FINSI HACER Mas FINMIENTRAS FINPROGRAMA ------------------------------ SUBPROGRAMA Mas res <- Espacios( 1 ) MIENTRAS res <> "S" Y res <> "N" HACER EN 20,30 ESCRIBIR "M s lanzamientos (S/N): " EN 20,57 LEER res res <- Convertir_mayusculas( res ) FINMIENTRAS FINSUBPROGRAMA
29.-Simular cien tiradas de dos dados y contar las veces que entre los dos suman 10.
PROGRAMA dado ENTORNO: c <- 0 i <- 0 ALGORITMO: Borrar_pantalla( ) MIENTRAS i < 101 HACER SI Int( Rnd( ) * 6 ) + Int( Rnd( ) * 6 ) + 2 = 10 ENTONCES c <- c + 1 FINSI i <- i + 1 FINMIENTRAS EN 10,20 ESCRIBIR "Las veces que suman 10 son: " EN 10,48 ESCRIBIR c FINPROGRAMA
30.-Simular una carrera de dos caballos si cada uno tiene igual probabilidad de ganar.
PROGRAMA caballos ENTORNO:
Página 32 de 42
dibujo <- "****" col1 <- 4 col2 <- 4 ALGORITMO: Borrar_pantalla( ) EN 10,col1 ESCRIBIR dibujo EN 10,col2 ESCRIBIR dibujo MIENTRAS col1 <= 75 Y col2 <= 75 HACER SI Rnd( ) <= 0.5 ENTONCES EN 10,col1 ESCRIBIR Espacios( 4 ) col1 <- col1 + 4 EN 10,col1 ESCRIBIR dibujo SINO EN 12,col2 ESCRIBIR Espacios( 4 ) col2 <- col2 + 4 EN 12,col2 ESCRIBIR dibujo FINSI FINMIENTRAS EN 16,20 ESCRIBIR "El ganador es el caballo n£mero: " SI col1 >= 75 ENTONCES EN 16,54 ESCRIBIR "1" SINO EN 16,54 ESCRIBIR "2" FINSI FINPROGRAMA
31.-Introducir dos nymeros por teclado y mediante un menu, calcule su suma, su resta, su multiplicacion o su division.
PROGRAMA menu1 ENTORNO: op <- 0 ALGORITMO: EN 10,20 ESCRIBIR "N£mero: " EN 10,29 LEER n1 EN 12,20 ESCRIBIR "N£mero: " EN 12,29 LEER n2 MIENTRAS op <> 5 HACER op <- 0 Borrar_pantalla( ) EN 6,20 ESCRIBIR "Men£ de opciones" EN 10,25 ESCRIBIR "1.- Suma" EN 12,25 ESCRIBIR "2.- Resta" EN 14,25 ESCRIBIR "3.- Multiplicaci¢n" EN 16,25 ESCRIBIR "4.- Divisi¢n" EN 18,25 ESCRIBIR "5.- Salir del programa" EN 22,25 ESCRIBIR "Elija opci¢n: " EN 22,39 LEER op Borrar_pantalla( ) HACER CASO CASO op = 1 EN 10,20 ESCRIBIR "Su suma es: " EN 10,33 ESCRIBIR n1 + n2 Pausa( ) CASO op = 2 EN 10,20 ESCRIBIR "Su resta es: " EN 10,33 ESCRIBIR n1 - n2 Pausa( ) CASO op = 3 EN 10,20 ESCRIBIR "Su multiplicaci¢n es: " EN 10,33 ESCRIBIR n1 * n2 Pausa( ) CASO op = 4
Página 33 de 42
EN 10,20 ESCRIBIR "Su divisi¢n es: " EN 10,33 ESCRIBIR n1 / n2 Pausa( ) FINCASO FINMIENTRAS FINPROGRAMA
32.-Hacer un programa que nos permita introducir un numero por teclado y sobre el se realicen las siguientes operaciones: comprobar si es primo, hallar su factorial o imprimir su tabla de multiplicar.
PROGRAMA menu2 ENTORNO: op <- 0 ALGORITMO: EN 10,20 ESCRIBIR "N£mero: " EN 10,29 LEER n MIENTRAS op <> 4 HACER op <- 0 Borrar_pantalla( ) EN 6,30 ESCRIBIR "Men£ de opciones" EN 10,25 ESCRIBIR "1.- Comprobar si es primo" EN 12,25 ESCRIBIR "2.- Hallar su factorial" EN 14,25 ESCRIBIR "3.- Tabla de multiplicar" EN 16,25 ESCRIBIR "4.- Salir del programa" EN 22,25 ESCRIBIR "Elija opci¢n: " EN 22,39 LEER op HACER CASO CASO op = 1 HACER Primo CASO op = 2 HACER Factorial CASO op = 3 HACER Tabla FINCASO FINMIENTRAS FINPROGRAMA ------------------------------ SUBPROGRAMA Primo sw <- 0 i <- n - 1 MIENTRAS i > 1 Y sw <> 1 HACER SI n = Int( n / i ) * i ENTONCES sw <- 1 SINO i <- i - 1 FINSI FINMIENTRAS Borrar_pantalla( ) SI sw = 1 ENTONCES EN 10,10 ESCRIBIR "no es primo" SINO EN 10,10 ESCRIBIR "s¡ es primo" FINSI Pausa( ) FINSUBPROGRAMA ------------------------------ SUBPROGRAMA Factorial fac <- 1 Borrar_pantalla( ) SI n < 0 ENTONCES EN 10,10 ESCRIBIR "No tiene factorial" SINO MIENTRAS n > 1 HACER
Página 34 de 42
fac <- fac * n n <- n - 1 FINMIENTRAS EN 10,10 ESCRIBIR "Su factorial es: " EN 10,27 ESCRIBIR fac FINSI Pausa( ) FINSUBPROGRAMA ------------------------------ SUBPROGRAMA Tabla i <- 0 fi <- 10 Borrar_pantalla( ) MIENTRAS i <= 10 HACER EN 8,10 ESCRIBIR "Tabla de multiplicar" EN fi,10 ESCRIBIR n EN fi,15 ESCRIBIR "*" EN fi,20 ESCRIBIR i EN fi,25 ESCRIBIR "=" EN fi,30 ESCRIBIR n * i i <- i + 1 FINMIENTRAS Pausa( ) FINSUBPROGRAMA
Arrays unidimensionales
33.-Crear un array unidimensional de 20 elementos con nombres de personas. Visualizar los elementos de la lista debiendo ir cada uno en una fila distinta.
PROGRAMA nombres ENTORNO: DIMENSIONA datos[ 20 ] i <- 1 ALGORITMO: Borrar_pantalla( ) fi <- 10 MIENTRAS i < 21 HACER EN fi,10 ESCRIBIR "Nombre: " EN fi, 18 LEER datos[ i ] i <- i + 1 FINMIENTRAS Borrar_pantalla( ) i <- 1 fi <- 3 EN 1,20 ESCRIBIR "Elementos de la lista" MIENTRAS i < 21 HACER EN fi,28 ESCRIBIR datos[ i ] fi <- fi + 1 i <- i + 1 FINMIENTRAS FINPROGRAMA
34.-Hacer un programa que lea las calificaciones de un alumno en 10 asignaturas, las almacene en un vector y calcule e imprima su media.
PROGRAMA notamedia ENTORNO: DIMENSIONA notas[ 10 ] suma <- 0 media <- 0 ALGORITMO:
Página 35 de 42
Borrar_pantalla( ) fi <- 7 PARA i DESDE 1 HASTA 10 HACER EN fi,15 ESCRIBIR "Nota " EN fi,20 ESCRIBIR i EN fi,21 ESCRIBIR ": " EN fi,23 LEER notas[ i ] fi <- fi + 1 FINPARA PARA i DESDE 1 HASTA 10 HACER suma <- suma + notas[ i ] FINPARA media <- suma / 10 EN 20,20 ESCRIBIR "Nota media: " EN 20,32 ESCRIBIR media FINPROGRAMA
35.-Usando el segundo ejemplo, hacer un programa que busque una nota en el vector.
PROGRAMA buscar ENTORNO: i <- 0 num <- 0 ALGORITMO: Borrar_pantalla( ) ESCRIBIR "Nota a buscar: " LEER num ITERAR i <- i + 1 SI notas[ i ] = num O i = 10 ENTONCES SALIR FINSI FINITERAR SI notas[ i ] = num ENTONCES ESCRIBIR "Encontrado en posición: " ESCRIBIR i SINO ESCRIBIR "No existe esa nota" FINSI FINPROGRAMA
Arrays bidimensionales
36.-Generar una matriz de 4 filas y 5 columnas con numeros aleatorios entre 1 y 100, e imprimirla.
PROGRAMA matriz ENTORNO: DIMENSIONAR A[ 4, 5 ] i <- 1 fi <- 10 co <- 15 ALGORITMO: Borrar_pantalla( ) EN 6,25 ESCRIBIR "Elementos de la matriz" MIENTRAS i <= 4 HACER j <- 1 MIENTRAS j <= 5 HACER A[ i, j ] <- Int( Rnd( ) * 100 ) + 1 EN fi,co ESCRIBIR A[ i, j ] co <- co + 5 j <- j + 1 FINMIENTRAS co <- 15
Página 36 de 42
fi <- fi + 2 i <- i + 1 FINMIENTRAS FINPROGRAMA
37.-Generar una matriz de 4 filas y 5 columnas con n£meros aleatorios entre 1y 100, y hacer su matriz transpuesta.
PROGRAMA transpuesta ENTORNO: DIMENSIONAR A[ 4, 5 ] DIMENSIONAR B[ 5, 4 ] fi <- 8 co <- 10 fit <- 8 cot <- 40 i <- 1 ALGORITMO: Borrar_pantalla( ) EN 6,15 ESCRIBIR "Matriz uno" EN 6,45 ESCRIBIR "Transpuesta" MIENTRAS i <= 4 HACER j <- 1 MIENTRAS j <= 5 HACER A[ i, j ] <- Int( Rnd( ) * 100 ) + 1 B[ j, i ] <- A[ i, j ] EN fi,co ESCRIBIR A[ i, j ] EN fit,cot ESCRIBIR B[ j, i ] co <- co + 4 fit <- fit + 2 j <- j + 1 FINMIENTRAS fi <- fi + 2 co <- 10 fit <- 8 cot <- cot + 4 i <- i + 1 FINMIENTRAS FINPROGRAMA
38.-Cargar en una matriz las notas de los alumnos de un colegio en funcion del numero de cursos (filas) y del n£mero de alumnos por curso (columnas).
PROGRAMA notas ENTORNO: i <- 1 j <- 1 ALGORITMO: Borrar_pantalla( ) EN 10,20 ESCRIBIR "N£mero de cursos: " EN 10,39 LEER M EN 12,20 ESCRIBIR "N£mero de alumnos: " EN 12,40 LEER N DIMENSIONAR A[ M, N ] Borrar_pantalla( ) EN 2,25 ESCRIBIR "Introducci¢n de las notas" MIENTRAS i <= M HACER EN 10,25 ESCRIBIR "Curso: " EN 10,32 ESCRIBIR i MIENTRAS j <= N HACER EN 14,25 ESCRIBIR "Alumno: " EN 14,33 ESCRIBIR j EN 16,25 ESCRIBIR "Nota: "
Página 37 de 42
EN 16,32 LEER A[ i, j ] j <- j + 1 FINMIENTRAS i <- i + 1 FINMIENTRAS FINPROGRAMA
39.-Ordenar una matriz de M filas y N columnas por la primera columna utilizando el m‚todo SHELL (por insercion).
PROGRAMA ordenar ENTORNO: i <- 1 j <- 1 fi <- 10 co <- 15 M <- 0 N <- 0 ALGORITMO: Borrar_pantalla( ) EN 10,20 ESCRIBIR "Filas: " EN 10,27 LEER M EN 12,20 ESCRIBIR "Columnas: " EN 12,30 LEER N DIMENSIONAR A[ M, N ] Borrar_pantalla( ) MIENTRAS i <= M HACER MIENTRAS j <= N HACER A[ i, j ] = Int( Rnd( ) * 100 ) + 1 EN fi,co ESCRIBIR A[ i, j ] co <- co + 5 j <- j + 1 FINMIENTRAS co <- 15 fi <- fi + 2 i <- i + 1 FINMIENTRAS salto <- Int( M / 2 ) MIENTRAS salto >= 1 HACER sw <- 1 MIENTRAS sw <> 0 HACER sw <- 0 i <- 1 MIENTRAS i <= M - salto HACER SI A[ i, 1 ] > A[ i + salto, 1 ] ENTONCES HACER Cambios FINSI i <- i + 1 FINMIENTRAS FINMIENTRAS salto <- Int( salto / 2 ) FINMIENTRAS FINPROGRAMA ------------------------------ SUBPROGRAMA Cambios j <- 1 MIENTRAS j <= N HACER aux <- A[ i + salto, j ] A[ i + salto, j ] <- A[ i, j ] A[ i, j ] <- aux j <- j + 1 FINMIENTRAS sw <- 1
Página 38 de 42
FINSUBPROGRAMA
Arrays multidimensionales
40.-Crear una tabla de 3 paginas, 4 filas y 5 columnas donde el primer elemento valga 1, el segundo 2, el tercero 3 y as¡ sucesivamente, e imprimirla.
PROGRAMA tabla ENTORNO: DIMENSIONAR A[ 3, 4, 5 ] i <- 1 j <- 1 k <- 1 b <- 0 fi <- 8 co <- 12 ALGORITMO: MIENTRAS i <= 3 HACER Borrar_pantalla( ) EN fi,co ESCRIBIR "Elementos de la p gina: " EN fi,co + 24 ESCRIBIR i fi <- fi + 2 MIENTRAS j <= 4 HACER MIENTRAS k <= 5 HACER b <- b + 1 A[ i, j, k ] <- b EN fi,co ESCRIBIR A[ i, j, k ] co <- co + 4 k <- k + 1 FINMIENTRAS fi <- fi + 2 co <- 12 j <- j + 1 FINMIENTRAS EN fi + 2,20 ESCRIBIR "Pulse INTRO para continuar ..." Pausa( ) i <- i + 1 FINMIENTRAS FINPROGRAMA
41.-Se dispone de una tabla de 5 p ginas, 10 filas y 20 columnas, que se refieren al centro, al curso y al numero de alumnos de un colegio respectivamente. Imprimir la nota media por curso y la nota media maxima y su centro de pertenencia.
PROGRAMA notas ENTORNO: max <- -1 sum <- 0 centro <- 0 i <- 1 j <- 1 k <- 1 fi <- 10 ALGORITMO: Borrar_pantalla( ) EN 8,18 ESCRIBIR "Centro" EN 8,38 ESCRIBIR "Nota media" MIENTRAS i <= 5 HACER MIENTRAS j <= 10 HACER MIENTRAS k <= 20 HACER sum <- sum + A[ i, j, k ] k <- k + 1
Página 39 de 42
FINMIENTRAS j <- j + 1 FINMIENTRAS EN fi,20 ESCRIBIR i EN fi,40 ESCRIBIR sum / 20 fi <- fi + 2 SI sum / 20 > max ENTONCES max <- sum / 20 centro <- i FINSI i <- i + 1 FINMIENTRAS EN fi + 2,20 ESCRIBIR "Nota media m xima: " EN fi + 2,39 ESCRIBIR max EN fi + 4, 20 ESCRIBIR "pertenece al centro: " EN fi + 4,41 ESCRIBIR centro FINPROGRAMA
42.-Una empresa guarda en una tabla de 3x12x4 las ventas realizadas por sus tres representantes a lo largo de doce meses de sus cuatro productos, VENTAS[ representante, mes, producto ]. Queremos proyectar el array tridimensional sobre uno de dos dimensiones que represente el total de ventas, TOTAL[ mes, producto ], para lo cual sumamos las ventas de cada producto de cada mes de todos los representantes. Imprimir ambos arrays.
PROGRAMA ventas ENTORNO: ** Las variables est n definidas en cada subprograma ALGORITMO: HACER Volcar HACER Imp_Tres HACER Imp_Dos FINPROGRAMA ------------------------------ SUBPROGRAMA Volcar DIMENSIONAR TOTAL[ 12, 4 ] j <- 1 MIENTRAS j <= 12 HACER k <- 1 MIENTRAS k <= 4 HACER i <- 1 suma <- 0 MIENTRAS i <= 3 HACER suma <- suma + VENTAS[ i, j, k ] i <- i + 1 FINMIENTRAS TOTAL[ j, k ] <- suma k <- k + 1 FINMIENTRAS j <- j + 1 FINMIENTRAS FINSUBPROGRAMA ------------------------------ SUBPROGRAMA Imp_Tres i <- 1 MIENTRAS i <= 3 HACER Borrar_pantalla( ) fi <- 8 co <- 12 EN fi,co ESCRIBIR "Ventas del representante: " EN fi,co + 26 ESCRIBIR i fi <- fi + 2 j <- 1 MIENTRAS j <= 12 HACER
Página 40 de 42
k <- 1 MIENTRAS k <= 4 HACER EN fi,co ESCRIBIR VENTAS[ i, j, k ] co <- co + 4 k <- k + 1 FINMIENTRAS fi <- fi + 2 co <- 12 j <- j + 1 FINMIENTRAS Pausa( ) i <- i + 1 FINMIENTRAS FINSUBPROGRAMA ------------------------------ SUBPROGRAMA Imp_Dos Borrar_pantalla( ) j <- 1 EN 8,20 ESCRIBIR "Ventas totales" fi <- 10 co <- 16 MIENTRAS j <= 12 HACER k <- 1 MIENTRAS k <= 4 HACER EN fi,co ESCRIBIR TOTAL[ j, k ] co <- co + 4 k <- k + 1 FINMIENTRAS fi <- fi + 2 co <- 12 j <- j + 1 FINMIENTRAS FINSUBPROGRAMA
Ficheros
43.-Hacer un programa que nos permita dar altas en el fichero secuencial DATOS.DAT, cuyos campos son: DNI, NOMBRE, APELLIDOS, DIRECCION y PROVINCIA.
[code] PROGRAMA altas ENTORNO: res <- "S" ALGORITMO: MIENTRAS res = "S" HACER ABRIR "DATOS.DAT" sw <- 0 num <- 0 Borrar_pantalla( ) EN 5,10 ESCRIBIR "D.N.I.: " EN 5,18 LEER num MIENTRAS NO Eof( ) Y sw = 0 HACER SI dni = num ENTONCES EN 10,10 ESCRIBIR "Alta duplicada" EN 15,10 ESCRIBIR "Pulse INTRO para continuar" Pausa( ) sw <- 1 SINO Siguiente_registro( ) FINSI FINMIENTRAS
Página 41 de 42
SI sw = 0 ENTONCES EN 7,5 ESCRIBIR "Nombre: " EN 9,5 ESCRIBIR "Apellidos: " EN 11,5 ESCRIBIR "Dirección: " EN 13,5 ESCRIBIR "Provincia: " EN 7,16 LEER nombre EN 9,16 LEER apellidos EN 11,16 LEER direccion EN 13,16 LEER provincia dni <- num Final_fichero( ) Escribir_registro( ) FINSI CERRAR "DATOS.DAT" res <- Espacios( 1 ) HACER Mas FINMIENTRAS FINPROGRAMA ------------------------------ SUBPROGRAMA Mas MIENTRAS res <> "S" Y res <> "N" HACER ESCRIBIR "Desea m s altas (S/N): " LEER res res <- Convertir_mayusculas( res )
Página 42 de 42
Top Related