Está en la página 1de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

Presentacin 2 - Diagramas de flujo u Ordinogramas


La resolucin de estos ejercicios ha sido fruto de las prisas, es por ello que el alumno debe
tener en cuenta los posibles errores que la soluciones pudiesen contener. Todos los ejercicios
aqu resueltos han sido explicados y resueltos en clase.
La solucin propuesta no es la nica, ni la mejor, ni la ms bella, si es que se puede entender
de forma absoluta en alguna situacin los trminos anteriores. El objetivo es que el alumno
entienda la solucin propuesta, sabiendo verificar si su solucin es correcta.
Puede que algunas notaciones sintcticas no se respeten al 100%, fundamentalmente debido a
que el procesador de textos trabaja por su cuenta y a veces hace modificaciones que no
proceden:
Pone maysculas donde no se lo piden.
En las comillas , que deben ser el mismo carcter para cerrar y abrir, cambia los
caracteres de forma que la comilla de apertura y cierre son diferentes.
El alumno debe saber estos errores en el pseudocdigo no conllevan ningn problema, pero
cuando escriba en el lenguaje de programacin el algoritmo debe respetar las normas lxicas y
sintcticas del lenguaje o tendr errores de compilacin
Los ejercicios estn numerados referenciado en primer lugar a la diapositiva en la que se
encuentran, y en segundo lugar el nmero de ejercicio dentro de la diapositiva en cuestin. De
todas formas se incluye el enunciado del ejercicio para que no haya lugar a dudas acerca de lo
que se est resolviendo.

8.1 Algoritmo que lea un nmero por el teclado e indique si el nmero ledo es mayor
que 10 y si el nmero ledo es menor que 20.
Programa CompararNumero;
Entorno
Entero numero;
Inicio
Escribe Introduce un nmero:;
Lee numero;
Si numero > 10 entonces
Escribe El nmero es mayor que 10;
Fin si;
Si numero < 20 entonces
Escribe El nmero es menor que 20;
Fin si;
Fin;

8.2 Algoritmo que lea dos nmeros por teclado y muestre un mensaje por pantalla
indicando si el cuadrado el primero es mayor que el cubo del segundo.
Programa CoparaConOperaciones;
Entorno
Entero num1, num2;
// Ns leidos por teclado
Entero cuadrado, cubo;
// Vars. Temporales
Inicio
Escribe Introduce el primer nmero;
Lee num1;
Escribe Introduce el segundo nmero;
Lee num2;

Santiago D.

Pgina 1 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

cuadrado = n1 * n1;
cubo = n2 * n2 * n2;
Si cuadrado > cubo entonces
Escribe El cuadrado del 1 es mayor que el cubo del 2;
Fin si;
Fin;

8.3 Algoritmo que lean un nmero entero entre 1 y 10, y nos muestre por pantalla el
nmero en letra (el literal). Si el nmero ledo no esta comprendido entre 1 y 10
mostrar dicha incidencia.
Programa NumeroALiteral;
Entorno
Entero n;
Inicio
Escribe Introduce un nmero: ;
Lee n;
/* Aunque se cumpla una condicin el ordenador debe evaluarlas
todas, con el coste de rendimiento que esto representa */
Si n = 1 entonces
Escribe Uno;
Fin si;
Si n = 2 entonces
Escribe Dos;
Fin si;
Si n = 3 entonces
Escribe Tres;
Fin si;
Si n = 4 entonces
Escribe Cuatro;
Fin si;
Si n = 5 entonces
Escribe Cinco;
Fin si;
Si n = 6 entonces
Escribe Seis;
Fin si;
Si n = 7 entonces
Escribe Siete;
Fin si;
Si n = 8 entonces
Escribe Ocho;
Fin si;
Si n = 9 entonces
Escribe Nueve;
Fin si;
Si n = 10 entonces
Escribe Diez;
Fin si;
/* Comprobamos si el nmero no est entre 1 y 10 para mostrar
mensaje */
Si n < 1 o n> 10 entonces
Escribe El nmero no est entre 1 y 10;
Fin si;
Fin;

10.1 Realizar un algoritmo que lea tres nmeros por teclado y nos indique cual de ellos
es el mayor.
Programa NumerosOrdenados;
Entorno
Entero n1, n2, n3; // Ns leidos por teclado

Santiago D.

Pgina 2 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

Inicio
Escribe Introduce 3 nmeros;
Lee n1, n2, n3;
Si n1 > n2 entonces
// El mayor ser n1 o n3
Si n1 > n3 entonces
Escribe El mayor es , n1;
Sino // n1 <= n3
Escribe El mayor es , n3;
Fin si;
Sino
// n1 <= n2, debemos comparar n2 y n3. El mayor ser n2 o n3
Si n2 > n3 entonces
Escribe El mayor es , n2;
Sino
Escribe El mayor es , n3;
Fin si;
Fin si
Fin

10.2 Algoritmo que lee tres nmeros cualesquiera y los escribe ordenados de forma
ascendente.
Programa NumerosOrdenAscendente;
Entorno
Entero n1, n2, n3;
Inicio
Escribe Introduce tres nmeros: ;
Lee n1, n2, n3;
Si n1 > n2 entonces
Si n2 > n3 entonces
Escribe n3, n2, n1;
Sino // n2 <= n3
Si n1 > n3 entonces
Escribe n2, n3, n1;
Sino
Escribe n2, n1, n3;
Fin si;
Fin si;
Sino // n1 <= n2
Si n2 < n3 entonces
Escribe n1, n2, n3;
Sino // n2 >= n3 y n2 >= n1
Si n1 > n3 entonces
Escribe n3 n1, n2;
Sino
Escribe n1, n3, n2;
Fin si;
Fin si;
Fin si
Fin;

10.3 Algoritmo que lee una calificacin numrica entre 0 y 10 y la transforma en


calificacin alfabtica, escribiendo el resultado

0<=Nota<3
3<=Nota<5
5<=Nota<6
6<=Nota<7
Santiago D.

MD
INS
SUF
BIE
Pgina 3 de 20

Fundamentos de Programacin
7<=Nota<9
9<=Nota<=10

I.E.S San Sebastin - Huelva


NOT
SOB

Programa NumeroALiteral;
Entorno
Entero n;
Inicio
Escribe Introduce un nmero: ;
Lee n;
/* No sangraremos todas las sentencias incluidas dentro del
Sino pues no hay espacio en el papel y adems est forma es ms
clara. No hay que olvidar poner tantos Fin si como Si hayamos
abierto */
Si n = 1 entonces
Escribe Uno;
Sino Si n = 2 entonces
Escribe Dos;
Sino Si n = 3 entonces
Escribe Tres;
Sino Si n = 4 entonces
Escribe Cuatro;
Sino Si n = 5 entonces
Escribe Cinco;
Sino Si n = 6 entonces
Escribe Seis;
Sino Si n = 7 entonces
Escribe Siete;
Sino Si n = 8 entonces
Escribe Ocho;
Sino Si n = 9 entonces
Escribe Nueve;
Sino Si n = 10 entonces
Escribe Diez;
Sino
/* El nmero no est entre 1 y 10 para mostrar mensaje */
Escribe El nmero no est entre 1 y 10;
Fin si; Fin Si; Fin Si; Fin Si;
/* A diferencia de la implementacin del ejercicio 8.3 este
algoritmo cuando una condicin es cierta no evala el resto
innecesariamente */
Fin;

11.1 Algoritmo que lee tres nmeros cualesquiera y nos indica todas sus relaciones
de igualdad
Programa RelacionesIgualdad;
Entorno
Entero n1, n2, n3;
Inicio
Escribe Introduce tres nmeros: ;
Lee n1, n2, n3;
Si n1 = n2 y n1 = n3 entonces
Escribe Los tres nmeros son iguales;
Sino
Si n1 = n3 entonces
Escribe El 1 y el 2 son iguales;
Sino
Si n2 = n3 entonces
Escribe El 2 y el 3 son iguales;
Sino
Escribe Todos son distintos;

Santiago D.

Pgina 4 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

Fin si;
Fin si;
Fin si
Fin;

11.2 Algoritmo que recibe como datos de entrada una hora expresada en horas,
minutos y segundos que nos calcula y escribe la hora, minutos y segundos que
sern transcurrido un segundo.
Programa UnSegundoDespues;
Entorno
Entero hora, min, seg;
Inicio
Escribe Introduce hora: ;
Lee hora;
Escribe Introduce minuto: ;
Lee min;
Escribe Introduce segundo: ;
Lee seg;
seg = seg +1;
Si seg > 60 entonces
min = min + 1;
seg = 0;
Si min > 60 entonces
hora = hora + 1;
min = 0;
Si hora > 24 entonces
hora = 0;
Fin si;
Fin si;
Fin si;
Escribe Un segundo despus son las: , hora, :, min, :,
seg;
Fin;

11.3 Algoritmo que lee como dato de entrada un ao y nos dice si se trata de un ao
bisiesto o no. Se sabe que son bisiestos todos los aos mltiplos de 4, excepto los
que sean mltiplos de 100 sin ser mltiplos de 400.
Programa EsBisiesto;
Entorno
Entero anyo;
Inicio
Escribe Introduce Ao: ;
Lee anyo;
Si (anyo % 4
No ( anyo
Escribe El
Sino
Escribe El
Fin si;
Fin;

= 0) y
% 100 = 0 y no ( anyo % 400 =0) ) entonces
ao , anyo , es bisiesto;
ao , anyo , NO es bisiesto;

12.1 En un determinado comercio se realiza un descuento dependiendo del precio de


cada producto. Si el precio es inferior a 6 , no se hace descuento; si es mayor o
igual a 6 y menor que 60 se hace un 5% de descuento, y si es mayor o igual a

Santiago D.

Pgina 5 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

60 se hace un 10% de descuento.


Realizar el algoritmo que lee el precio de un producto y nos calcula y escribe su
precio final.
Programa Calculo_Precio_Final;
Entorno
Entero PrecioInicial, Dto;
Inicio
Escribe Introduce precio Inicial: ;
Lee PrecioInicial;
Si PrecioInicial < 6 entonces
Dto = 0;
Sino
Si PresioInical < 60 entonces
Dto = 5;
Sino
Dto = 10;
Fin si;
Escibe Precio final = , PrecioInicial*(1 + Dto/100),
Descuento = , Dto, %;
Fin;

12.2 Algoritmo que lee el precio final pagado por un producto y su precio de tarifa y
nos calcula el porcentaje de descuento que le ha sido aplicado.
Programa Calculo_Descuento;
Entorno
Entero PrecioFinal, PrecioTarifa;
Inicio
Escribe Introduce precio Tarifa: ;
Lee PrecioTarifa;
Escribe Introduce precio Final: ;
Lee PrecioFinal;
/* La dificultad de este problema es saber que frmula
matemtica se debe utilizar. Apenas tiene complejidad
algortmica */
Dto = (1-PrecioFinal/PrecioTarifa)*100;
Escibe Descuento = , Dto, %;
Fin;

12.3 Algoritmo que lee 3 nmeros distintos y nos dice cual de ellos es el menor.
Programa NumeroMenor;
Entorno
Entero n1, n2, n3; // Ns leidos por teclado
Inicio
Escribe Introduce 3 nmeros;
Lee n1, n2, n3;
Si n1=n2 o n1=n3 o n2=n3 entonces
Escribe Los nmeros no son distintos;
Sino
Si n1 < n2 entonces
// El menor ser n1 o n3
Si n1 < n3 entonces
Escribe El menor es , n1;
Sino // n1 >= n3
Escribe El menor es , n3;
Fin si;

Santiago D.

Pgina 6 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

Sino
// n1 >= n2, debemos comparar n2 y n3. El menor ser n2 o n3
Si n2 < n3 entonces
Escribe El menor es , n2;
Sino
Escribe El menor es , n3;
Fin si;
Fin si;
Fin si;
Fin

12.4 Algoritmo que lee como datos de entrada una fecha expresada en da (1..31),
mes (1..12, y ao y nos dice la fecha que ser el da siguiente. Se supondr que
febrero tiene siempre 28 das.
Programa UnDiaDespues;
Entorno
Entero dia, mes, anyo;
Entero numDiasMes;
Inicio
Escribe Introduce Dia: ;
Lee dia;
Escribe Introduce Mes: ;
Lee mes;
Escribe Introduce Ao: ;
Lee Ao;
Si mes = 2 entonces
numDiasMes = 28;
Sino
Si mes=4 o mes=6 o mes=9 o mes=11 entonces
// Meses de 30 das: Abrir, Junio, Sept. Nov.
NumDiasMes = 30;
Sino
// El resto tiene 31 das
NumDiasMes = 31;
Fin si;
Fin si;
Si dia > numDiasMes entonces
mes = mes + 1;
dia = 1;
Si mes > 12 entonces
anyo = anyo + 1;
mes = 1;
Fin si;
Fin si;
Escribe Un da despus es: , dia, /, mes, /, anyo;
Fin;

12.5 Plantea el algoritmo anterior sin suponer que febrero tiene 28 das.
Programa UnDiaDespues;
Entorno
Entero dia, mes, anyo;
Entero numDiasMes;
Inicio
Escribe Introduce Dia: ;
Lee dia;
Escribe Introduce Mes: ;
Lee mes;

Santiago D.

Pgina 7 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

Escribe Introduce Ao: ;


Lee Ao;
Si mes = 2 entonces
Si (anyo % 4 = 0) y
No ( anyo % 100 = 0 y no ( anyo % 400 =0) ) entonces
// Es bisiesto
numDiasMes = 29;
Sino
numDiasMes = 28;
Fin Si;
Sino
Si mes=4 o mes=6 o mes=9 o mes=11 entonces
// Meses de 30 das: Abrir, Junio, Sept. Nov.
NumDiasMes = 30;
Sino
// El resto tiene 31 das
NumDiasMes = 31;
Fin si;
Fin si;
// Filtramos si la fecha es correcta
Si dia>=1 y dia<=numDiasMes y Mes >= 1 y mes <= 12 entonces
Si dia > numDiasMes entonces
mes = mes + 1;
dia = 1;
Si mes > 12 entonces
anyo = anyo + 1;
mes = 1;
Fin si;
Fin si;
Escribe Un da despus es: , dia, /, mes, /, anyo;
Sino
Escribe La fecha es incorrecta;
Fin Si;
Fin;

12.6 Algoritmo que lee dos nmeros enteros, positivos y distintos y nos dice si el
mayor es mltiplo del menor o, lo que es lo mismo, si el menor es divisor del mayor.
Programa EsDivisorElMenor;
Entorno
Entero n1, n2; // Ns ledos por teclado
Entero mayor, menor; // Variables temporales
Inicio
Escribe Introduce 2 nmeros;
Lee n1, n2;
// Buscamos el mayor y el menor
Si n1 > n2 entonces
mayor = n1;
menor = n2;
Sino
mayor = n2;
menor = n1;
Fin si;
Si mayor % menor = 0 entonces
Escribe Mayor, es mltiplo de , menor;
Sino
Escribe No existe ninguna relacin entre los nmeros;
Fin si;
Fin

Santiago D.

Pgina 8 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

12.7 Algoritmo que calcula la edad de una persona recibiendo como datos de entrada
la fecha de nacimiento, y la fecha actual, ambas en tres variables.
Programa EdadEnAnyos;
Entorno
Entero d_n, m_m, a_n; // Fecha de nacimiento
Entero d_a, m_a, a_a; // Fecha de actual
Entero Edad; // variable temporal
Inicio
Escribe Introduce Fecha nacimiento: ;
Lee d_n, m_n, a_n;
Escribe Fecha actual: ;
Lee d_a, m_a, a_a;
/* La edad de una persona ser igual al ao actual menos el ao
de nacimiento. Si aun no ha cumplido aos en el ao actual
habr que restarle 1*/
Edad = a_a a_n;
/* Comprobamos si ya ha cumplido los aos o no */
Si m_a < m_n o (m_a = m_n y dia_a < d_n) entonces
// Aun no ha cumplido los aos este ao
Edad = Edad - 1;
Fin si;
Escribe Edad = , Edad;
Fin;

16.1 Realizar un algoritmo que muestre por pantalla los nmeros pares menores de
100.
Programa ParesMenoresQue100;
Entorno
Entero n;
Inicio
n = 2;
Mientras n<100 hacer
Escribe n;
n = n + 2;
Fin Mientras;
Fin

Otra forma
Programa ParesMenoresQue100;
Entorno
Entero n;
Inicio
n = 1;
Mientras n<100 hacer
Si n % 2 = 0 entonces
Escribe n;
Fin si;
n = n + 1;
Fin Mientras;
Fin

16.2 Realizar un algoritmo que muestre por pantalla los nmeros mltiplos de 5
menores que 10000.
Programa MultDe5Menor1000;
Entorno
Entero n;
Inicio

Santiago D.

Pgina 9 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

n = 5;
Mientras n<1000 hacer
Escribe n;
n = n + 5;
Fin Mientras;
Fin

16.3 Algoritmo que lea un nmero por teclado e imprima por pantalla todos los
nmeros positivos menores que N
Programa ListaNumeros;
Entorno
Entero n;
Entero i; // Contador
Inicio
Escribe Introduce un nmero: ;
Lee n;
i = 1;
Mientras i < n hacer
Escribe i;
i = i + 1;
Fin Mientras;
Fin

Otra forma
Programa ListaNumeros;
Entorno
Entero n;
Inicio
Escribe Introduce un nmero: ;
Lee n;
Mientras n>1 hacer
n = n - 1;
Escribe n;
Fin Mientras;
Fin

20.1 Algoritmo que lee una secuencia de 10 nmeros y obtiene e imprime cuantos hay
positivos, negativos y nulos.
Programa CuentaNumeros;
Entorno
Entero n;
Entero i; // Variable control del bucle
Entero nPos, nNeg, nNulos; // Contadores
Inicio
nPos=0; nNeg=0; nNulos=0;
i = 0;
Mientras i<10 hacer
Escribe Introduce un nmero: ;
Lee n;
Si n>0 entonces
nPos = nPos + 1; // Es positivo
Sino
Si n < 0 entonces
nNeg = nNeg + 1; // Es negativo
Sino
nNulos = nNulos + 1; // Es cero
FinSi;
FinSi;
i = i + 1;

Santiago D.

Pgina 10 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

Fin Mientras;
Escribe Total positivos :, nPos;
Escribe Total negativos :, nNeg;
Escribe Total nulos
:, nNulos;
Fin

20.2 Algoritmo que lee una secuencia de nmeros no nulos, terminada con la
introduccin de un 0, y obtiene e imprime el mayor, visualizando un mensaje de si
ha ledo algn nmero negativo.
Programa CuentaNumeros;
Entorno
Entero n;
Entero mayor; // Guarda el valor del mayor
Booleano hayNegativos; // switch
Inicio
hayNegativos = false; // suponemos que no hay negativos
/* El menor de los posibles, cualquier nmero de los ledos por
teclado ser mayor que este */
mayor = -9999999;
hacer
Escribe Introduce un nmero: ;
Lee n;
Si n <> 0 entonces
// Procesamos el nmero ledo
Si n < 0 entonces
hayNegativos = true; // Se ha encontrado un negativo
FinSi;
Si n > mayor entonces
/* Se ha encontrado un nmero mayor que el actual, lo
seleccionamos como mayor */
mayor = n
Fin si;
Fin si;
Mientras n <> 0;
Escribe El mayor es :, mayor;
Si hay Negativos entones
Escribe Se han encontrado nmeros negativos;
Fin Si;
Fin

Otra forma, no presuponemos ningn nmero como mayor


Programa CuentaNumeros;
Entorno
Entero n;
Entero mayor; // Guarda el valor del mayor
Booleano hayNegativos; // switch
Booleano esPrimeraVez;
Inicio
hayNegativos = false;
esPrimeraVez = true;
hacer
Escribe Introduce un nmero: ;
Lee n;
Si n <> 0 entonces
// Procesamos el nmero ledo
Si n < 0 entonces
hayNegativos = true; // Se ha encontrado un negativo
FinSi;
Si esPrimeraVez o n > mayor entonces

Santiago D.

Pgina 11 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

/* Se ha encontrado un nmero mayor que el actual o es el


primer nmero leido, lo seleccionamos como mayor */
mayor = n;
esPrimeraVez = false;
Fin si;
Fin si;
Mientras n <> 0;
Si esPrimeraVez entonces
Escribe No se ha introducido ningn nmero;
Sino
Escribe El mayor es :, mayor;
Fin si;
Si hay Negativos entones
Escribe Se han encontrado nmeros negativos;
Fin Si;
Fin

20.3 Algoritmo que lee un nmero entero positivo N y calcula e imprime el factorial de
N!. Si lee un nmero negativo indica con un mensaje que no es posible la
operacin.
Programa Factorial;
Entorno
Entero n;
Entero i; // Contador
Entero resultado;
Inicio
Escribe Introduce un nmero: ;
Lee n;
Si n < 0 entonces
Escribe No existe factorial de un nmero negativo;
Sino
resultado = 1; // Inicializamos el acumulador
i = 1;
Mientras i < n hacer
resultado = resultado * i;
Fin Mientras;
Escribe El factorial de , n, es , resultado;
Fin si;
Fin

20.4 Algoritmo que lee un nmero X y otro entero positivo N y calcula la N-sima
potencia de X (sin utilizar el operador de potencia).
Programa Potencia;
Entorno
Entero x, n;
Entero i; // Contador
Entero resultado;
Inicio
Escribe Introduce un nmero: ;
Lee x;
Escribe Introduce la potencia: ;
Lee n;
Si n < 0 entonces
Escribe No se calcular potencias negativas;
Sino
resultado = 1; // Inicializamos el acumulador
i = 1;
Mientras i < n hacer
resultado = resultado * x;
Fin Mientras;

Santiago D.

Pgina 12 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

Escribe x, elevado a , n, es , resultado;


Fin si;
Fin

20.5 Algoritmo que obtenga el producto de dos nmeros enteros positivos mediante
sumas sucesivas.
/* Ampliamos el problema para permitir nmeros negativos */
Programa Producto;
Entorno
Entero n1, n2;
Entero i; // Contador
Entero resultado;
Booleano resultadoNeg;
Inicio
Escribe Introduce un nmero 1: ;
Lee n1;
Escribe Introduce un nmero 2: ;
Lee n2;
/* Debemos considerar el caso de que alguno de los nmeros
sea negativo, lo mejor es poner los dos nmeros en positivo y
luego considerar el signo.
Vamos a evitar usar el operador de producto * */
resultadoNeg = (n1 < 0 o n2 < 0) y no (n1 < 0 y n2 < 0);
// Convertimos los nmeros a positivo
Si n1 < 0 entonces
n1 = -n1;
Finsi
Si n2 < 0 entonces
n2 = -n2;
Finsi
resultado = 0; // Inicializamos el acumulador
i = 1;
Mientras i < n2 hacer
resultado = resultado + n1;
Fin Mientras;
Si resultadoNeg entonces
resultadoNeg = -resultadoNeg; // Cambiamos de signo
Fin si;
Escribe n1, por , n2, es , resultado;
Fin si;
Fin

20.6 Algoritmos que obtenga el cociente y el resto de dos nmeros enteros positivos
mediante restas.
/* Ampliamos el problema para permitir nmeros negativos */
Programa Division;
Entorno
Entero dividendo, divisor;
Entero resto, cociente;
Booleano resultadoNeg;
Inicio
Escribe Introduce dividendo: ;
Lee dividendo;
Escribe Introduce divisor: ;
Lee divisor;
/* Debemos considerar el caso de que alguno de los nmeros
sea negativo, lo mejor es poner los dos nmeros en positivo y
luego considerar el signo.

Santiago D.

Pgina 13 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

Vamos a evitar usar el operador de producto * */


resultadoNeg = (dividendo < 0 o divisor < 0) y no (dividendo <
0 y divisor < 0);
// Convertimos los nmeros a positivo
Si dividendo < 0 entonces
dividendo = - dividendo;
Finsi
Si divisor < 0 entonces
divisor = - divisor;
Finsi
cociente = 0; // Inicializamos el acumulador
resto = dividendo;
Mientras divisor < resto hacer
resto = resto = divisor;
cociente = cociente + 1;
Fin Mientras;
Si resultadoNeg entonces
cociente = -cociente; // Cambiamos de signo
Fin si;
Escribe dividendo, entre , divisor, da , cociente , con
resto , resto;
Fin

20.7 Algoritmo que lee tres nmeros A, B, C, y los imprime en orden creciente e indica
si fueron introducidos en ese orden.
/* Este problema es casi idntico a uno resulto con anterioridad
*/
Programa NumerosOrdenAscendente;
Entorno
Entero n1, n2, n3;
Inicio
Escribe Introduce tres nmeros: ;
Lee n1, n2, n3;
Si n1 > n2 entonces
Si n2 > n3 entonces
Escribe n3, n2, n1;
Sino // n2 <= n3
Si n1 > n3 entonces
Escribe n2, n3, n1;
Sino
Escribe n2, n1, n3;
Fin si;
Fin si;
Sino // n1 <= n2
Si n2 < n3 entonces
Escribe n1, n2, n3;
Sino // n2 >= n3 y n2 >= n1
Si n1 > n3 entonces
Escribe n3 n1, n2;
Sino
Escribe n1, n3, n2;
Escribe Los nmeros se introdujeron ordenados;
Fin si;
Fin si;
Fin si
Fin;

Santiago D.

Pgina 14 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

21.1 Algoritmo que lea un nmero por teclado y nos diga si es primo.
/* Un nmero es primo cuando solo es divisible por si mismo y por
el 1.
Para saber si un nmero es primo debemos dividirlo sucesivamente
por sus posibles divisores (nmeros menor que l) y si encontramos
algn divisor diremos que el nmero NO es primo, es caso contrario
ser un nmero primo.
*/
Programa NumeroPrimo;
Entorno
Entero n, cont;
Booleano esPrimo; //
Inicio
Escribe Introduce un
Lee n;
esPrimo = true;
//
cont = 2;
//

Variable que indicar si es primo o no


nmero: ;
suponemos que el nmero es primo
Empezamos dividiendo por 2

/* Iremos dividiendo el nmero por sus posibles divisores hasta


que encontremos un divisor, y por tanto el nmero deje de ser
primo o hasta que acabemos la lista de posibles divisores (los
menores que l) */

Mientras cont < n y esPrimo hacer


// La linea anterior es igual a:
// Mientras cont < n y esPrimo=true hacer
Si n % cont == 0 entonces
esPrimo = false; // Se ha encontrado un divisor
Fin si;
Fin mientras;
Si esPrimo entonces
Escribe El nmero , n, es primo;
Sino
Escribe El nmero , n, NO es primo;
Fin si;
Fin;

21.2 Algoritmo que genera la lista de los N primeros nmeros primos, siendo N el dato
de entrada.
/* Para resolver este algoritmo es necesario realizar una
aproximacin descendente. Partiendo del hecho de que ya sabemos
calcular si un nmero es o no primo, damos por supuesta esta
operacin e intentamos resolver el problema.
La aproximacin primera sera
Lee n;
i = 1;
// Contador que avanza por los nmeros
nPrimos = 0;
// N de primos que hemos visualizado
mientras i < n hacer
Si i es un nmero primo entonces
Escribe i;
nPrimos = nPrimos + 1;
Fin Si;
/* Fijarse que est fuera del si, se incrementa siempre
independiente de que el nmero i sea primo o no */

Santiago D.

Pgina 15 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

i = i + 1;
Fin Mientras;
Una vez tenemos la 1 aproximacin tan solo tenemos que
introducir el cdigo que nos indica si un nmero es primo donde
proceda.
Cuando veamos funciones, veremos que est tarea es trivial.
*/
Programa NPrimerosPrimos;
Entorno
// Variables utilizadas para ver si el nmero i es primo
Entero i, cont;
Booleano esPrimo; // Variable que indicar si es primo o no
// Variables utilizadas para ir probando los nmeros
Entero nPrimos;
Entero n;
// Enterio i;
 Declarada previamente
Inicio
Escribe Introduce un nmero: ;
Lee n;
i = 1;
// Contador que avanza por los nmeros
nPrimos = 0; // N de primos que hemos visualizado
mientras i < n hacer
/* Si i es un numero primo entonces */
esPrimo = true;
// suponemos que el nmero es primo
cont = 2;
// Empezamos dividiendo por 2
Mientras cont < i y esPrimo hacer
// Mientras cont < i y esPrimo=true hacer  Hace los mismo
Si n % cont entonces
esPrimo = false; // Se ha encontrado un divisor
Fin si;
Fin mientras;
Si esPrimo entonces
Escribe i;
nPrimos = nPrimos + 1;
Fin Si;
/* Fijarse que est fuera del si, se incrementa siempre
independiente de que el nmero i sea primo o no */
i = i + 1;
Fin Mientras;
Fin;

21.3 Algoritmo lea un nmero N y muestre por pantalla los nmeros primos menores
que N.
/* Para resolver este algoritmo es necesario realizar una
aproximacin descendente. Partiendo del hecho de que ya sabemos
calcular si un nmero es o no primo, damos por supuesta esta
operacin e intentamos resolver el problema.
La aproximacin primera sera
Lee n;
Para i=1 hasta n-1 hacer
Si i es un nmero primo entonces

Santiago D.

Pgina 16 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

Escribe i;
Fin Si;
Fin Para;
Una vez tenemos la 1 aproximacin tan solo tenemos que
introducir el cdigo que nos indica si un nmero es primo donde
proceda.
Cuando veamos funciones, veremos que est tarea es trivial.
Este algoritmo a diferencia del anterior saca los nmeros primos
menores que N, mientras que el otro sacaba los N primeros primos.
La diferencia es la siguiente, para N=5
N primeros : 1,2,3,5,7
< N
: 1,2,3,5
*/
Programa NPrimerosPrimos;
Entorno
// Variables utilizadas para ver si el nmero i es primo
Entero i, cont;
Booleano esPrimo; // Variable que indicar si es primo o no
// Variables utilizadas para ir probando los nmeros
Entero n;
// Enterio i;
 Declarada previamente
Inicio
Escribe Introduce un nmero: ;
Lee n;
Para i=1 hasta n-1
/* Si i es un numero primo entonces */
esPrimo = true;
// suponemos que el nmero es primo
cont = 2;
// Empezamos dividiendo por 2
Mientras cont < i y esPrimo hacer
Si n % cont entonces
esPrimo = false; // Se ha encontrado un divisor
Fin si;
Fin mientras;
Si esPrimo entonces
Escribe i;
Fin Si;
Fin Para;
Fin;

21.4 Algoritmo que calcula e imprime los nmeros perfectos menores que 1000. (Un
nmero es perfecto si la suma de sus divisores, excepto l mismo, es igual al propio
nmero.).
/* Para resolver este algoritmo es necesario realizar una
aproximacin descendente. Damos por supuesta la operacin es
numero perfecto que ms adelante desarrollaremos
La aproximacin primera sera
Para n=1 hasta 999 hacer
Si n es numero perfecto entonces
Escribe n;
Fin Si;

Santiago D.

Pgina 17 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

Fin Para;
Ahora debemos desarrollar el subproblema es numero perfecto
sumaDivisores = 0;
Para i=1 hasta n-1 hacer
Si n % i = 0 entonces
sumaDivisores = sumaDivisores + n;
Fin si;
Fin Para
Si sumaDivisores = n entonces
// N es un nmero perfecto
Fin si;
De nuevo unimos las dos soluciones y ya tenemos resuelto el
problema
*/
Programa NumerosPerfectos;
Entorno
Entero n i, sumaDivisores;
Inicio
Para n=1 hasta 999 hacer
/* Si n es numero perfecto entonces */
sumaDivisores = 0;
Para i=1 hasta n-1 hacer
Si n % i = 0 entonces
sumaDivisores = sumaDivisores + n;
Fin si;
Fin Para
Si sumaDivisores = n entonces
// N es un nmero perfecto
Escribe n;
Fin Si;
Fin Para;
Fin;

21.5 Algoritmo que evala un polinomio de grado N. Los datos de entrada son el valor
de la variable y los coeficientes.
Programa EvaluaPolinomio;
Entorno
Entero coef, grado, x, i;
Entero valorPol;
Inicio
Escribe Grado del polinomio: ;
Lee grado;
Escribe Valor de X: ;
Lee x;
// Acumulador en el que guardaremos el valor del polinomio
valorPol = 0;
Para i=x hasta 0 incremento -1
Escribe Introduce coeficiente de grado (, i, ):;
Lee coef;
valorPol = valorPol + coef * x ^ i;
Fin para;
Escribe El valor del polinomio es: , valorPol;
Fin

21.6 Algoritmo que lee un nmero entero positivo N e imprime su tabla de multiplicar.
Programa TablaMultiplicar;
Entorno

Santiago D.

Pgina 18 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

Entero n, i;
Inicio
Escribe Introduce un nmero: ;
Lee n;
Para i=1 hasta 10
Escribe i, x , n, = , i*n;
Fin Para;
Fin

// Siguiente trmino de la

22.1 Algoritmo que lee un nmero entero y positivo N y escribe la lista de sus
divisores.
Programa ListaDivisores;
Entorno
Entero n, i;
Inicio
Escribe Introduce un nmero: ;
Lee n;
Para i=1 hasta n
Si n % i = 0 entonces
Escribe i;
Fin Si;
Fin Para;
Fin

22.2 Algoritmo que lee un nmero entero y positivo y calcula y escribe la suma de sus
divisores.
Programa SumaDivisores;
Entorno
Entero n, i;
Entero suma;
Inicio
Escribe Introduce un nmero: ;
Lee n;
Suma=0;
Para i=1 hasta n
Si n % i = 0 entonces
Suma = suma + i;
Fin Si;
Fin Para;
Escribe La suma de sus divisores es: , suma;
Fin

22.3 Algotimo que lee un nmero entero y positivo N y escribe los N primeros trminos
de la sucesin de Fibonacci. La sucesin se caracteriza porque cada trmino es
igual a la suma de sus dos anteriores, dandose por definicin el primero (0) y el
segundo (1).

a1 = 0

a2= 1

an = an-1 + an-2

Programa Fibonacci;
Entorno
Entero an, an_1;
Entero suma; // an + an_1
Entero n, cont;
Inicio
Escribe Introduce un nmero: ;

Santiago D.

Pgina 19 de 20

Fundamentos de Programacin

I.E.S San Sebastin - Huelva

Lee n;
// Casos
Si n > 0
Escribe
Fin si;
Si n > 1
Escribe
Fin si;

base, triviales
entonces
0;
entonces
0;

// Comenzamos bucle
an_1 = 0;
an = 1;
/* Los dos casos anteriores ya se han visualizado, por eso
empezamos en 3 */
Para cont=3 hasta n
Suma = an + an_1;
// Calculamos el trmino siguiente
Escribe suma;
// Los dos ltimos trminos avanzan una posicin
an_1 = an;
an = suma;
Fin Para;
Fin

Santiago D.

Pgina 20 de 20

También podría gustarte