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 NOT SOB

I.E.S San Sebastin - Huelva

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;

I.E.S San Sebastin - Huelva

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
Escribe Introduce Ao: ; Lee Ao;

I.E.S San Sebastin - Huelva

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
n = 5; Mientras n<1000 hacer Escribe n; n = n + 5; Fin Mientras; Fin

I.E.S San Sebastin - Huelva

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

I.E.S San Sebastin - Huelva

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 = i + 1; Fin Mientras;

I.E.S San Sebastin - Huelva

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;

I.E.S San Sebastin - Huelva

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;

I.E.S San Sebastin - Huelva

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

I.E.S San Sebastin - Huelva

// 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;

I.E.S San Sebastin - Huelva

// 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