Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
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
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
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
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
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
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
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
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
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
Santiago D.
Pgina 11 de 20
Fundamentos de Programacin
/* 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
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
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
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 = 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
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
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
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
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