dfd

20
Fundamentos de Programación I.E.S San Sebastián - Huelva © Santiago D. Página 1 de 20 Presentación 2 - Diagramas de flujo u Ordinogramas La resolución 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 solución propuesta no es la única, ni la mejor, ni la más bella, si es que se puede entender de forma absoluta en alguna situación los términos anteriores. El objetivo es que el alumno entienda la solución propuesta, sabiendo verificar si su solución es correcta. Puede que algunas notaciones sintácticas 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 mayúsculas donde no se lo piden. En las comillas “, que deben ser el mismo carácter 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 pseudocódigo no conllevan ningún problema, pero cuando escriba en el lenguaje de programación el algoritmo debe respetar las normas léxicas y sintácticas del lenguaje o tendrá errores de compilación Los ejercicios están numerados referenciado en primer lugar a la diapositiva en la que se encuentran, y en segundo lugar el número de ejercicio dentro de la diapositiva en cuestión. 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 número por el teclado e indique si el número leído es mayor que 10 y si el número leído es menor que 20. Programa CompararNumero; Entorno Entero numero; Inicio Escribe “Introduce un número:”; Lee numero; Si numero > 10 entonces Escribe “El número es mayor que 10”; Fin si; Si numero < 20 entonces Escribe “El número es menor que 20”; Fin si; Fin; 8.2 Algoritmo que lea dos números 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; // Nºs leidos por teclado Entero cuadrado, cubo; // Vars. Temporales Inicio Escribe “Introduce el primer número”; Lee num1; Escribe “Introduce el segundo número”; Lee num2;

Upload: cristian-barq

Post on 10-Mar-2016

221 views

Category:

Documents


5 download

DESCRIPTION

dfd for you

TRANSCRIPT

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 1 de 20

Presentación 2 - Diagramas de flujo u Ordinogramas La resolución 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 solución propuesta no es la única, ni la mejor, ni la más bella, si es que se puede entender

de forma absoluta en alguna situación los términos anteriores. El objetivo es que el alumno

entienda la solución propuesta, sabiendo verificar si su solución es correcta.

Puede que algunas notaciones sintácticas 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 mayúsculas donde no se lo piden.

• En las comillas “, que deben ser el mismo carácter 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 pseudocódigo no conllevan ningún problema, pero

cuando escriba en el lenguaje de programación el algoritmo debe respetar las normas léxicas y

sintácticas del lenguaje o tendrá errores de compilación

Los ejercicios están numerados referenciado en primer lugar a la diapositiva en la que se

encuentran, y en segundo lugar el número de ejercicio dentro de la diapositiva en cuestión. 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 número por el teclado e indique si el número leído es mayor que 10 y si el número leído es menor que 20.

Programa CompararNumero; Entorno Entero numero; Inicio

Escribe “Introduce un número:”; Lee numero; Si numero > 10 entonces

Escribe “El número es mayor que 10”; Fin si; Si numero < 20 entonces

Escribe “El número es menor que 20”; Fin si;

Fin;

8.2 Algoritmo que lea dos números 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; // Nºs leidos por teclado Entero cuadrado, cubo; // Vars. Temporales Inicio

Escribe “Introduce el primer número”; Lee num1; Escribe “Introduce el segundo número”; Lee num2;

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 2 de 20

cuadrado = n1 * n1; cubo = n2 * n2 * n2; Si cuadrado > cubo entonces

Escribe “El cuadrado del 1º es mayor que el cubo de l 2º”; Fin si;

Fin;

8.3 Algoritmo que lean un número entero entre 1 y 10, y nos muestre por pantalla el número en letra (el literal). Si el número leído no esta comprendido entre 1 y 10 mostrar dicha incidencia.

Programa NumeroALiteral; Entorno

Entero n; Inicio

Escribe “Introduce un número: “; Lee n; /* Aunque se cumpla una condición el ordenador debe evaluarlas todas, con el coste de rendimiento que esto represe nta */ 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 número no está entre 1 y 10 pa ra mostrar mensaje */ Si n < 1 o n> 10 entonces

Escribe “El número no está entre 1 y 10”; Fin si;

Fin;

10.1 Realizar un algoritmo que lea tres números por teclado y nos indique cual de ellos es el mayor.

Programa NumerosOrdenados; Entorno

Entero n1, n2, n3; // Nºs leidos por teclado

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 3 de 20

Inicio Escribe “Introduce 3 números”; 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 números cualesquiera y los escribe ordenados de forma ascendente.

Programa NumerosOrdenAscendente; Entorno

Entero n1, n2, n3; Inicio

Escribe “Introduce tres números: “; 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 calificación numérica entre 0 y 10 y la transforma en calificación alfabética, escribiendo el resultado

0<=Nota<3 MD

3<=Nota<5 INS

5<=Nota<6 SUF

6<=Nota<7 BIE

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 4 de 20

7<=Nota<9 NOT

9<=Nota<=10 SOB

Programa NumeroALiteral; Entorno

Entero n; Inicio

Escribe “Introduce un número: “; Lee n; /* No sangraremos todas las sentencias incluidas de ntro del Sino pues no hay espacio en el papel y además está form a es más 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 número no está entre 1 y 10 para mostrar mens aje */ Escribe “El número no está entre 1 y 10”;

Fin si; Fin Si; Fin Si; … Fin Si; /* A diferencia de la implementación del ejercicio 8.3 este algoritmo cuando una condición es cierta no evalúa el resto innecesariamente */

Fin;

11.1 Algoritmo que lee tres números cualesquiera y nos indica todas sus relaciones de igualdad

Programa RelacionesIgualdad; Entorno

Entero n1, n2, n3; Inicio

Escribe “Introduce tres números: “; Lee n1, n2, n3; Si n1 = n2 y n1 = n3 entonces

Escribe “Los tres números 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”;

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 5 de 20

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 serán 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 después son las: “, hora, “:”, min, “:”, seg;

Fin;

11.3 Algoritmo que lee como dato de entrada un año y nos dice si se trata de un año bisiesto o no. Se sabe que son bisiestos todos los años múltiplos de 4, excepto los que sean múltiplos de 100 sin ser múltiplos de 400.

Programa EsBisiesto; Entorno

Entero anyo; Inicio

Escribe “Introduce Año: “; Lee anyo; Si (anyo % 4 = 0) y No ( anyo % 100 = 0 y no ( anyo % 400 =0) ) ento nces

Escribe “El año “, anyo , “ es bisiesto”; Sino

Escribe “El año “, anyo , “ NO es bisiesto”; Fin si;

Fin;

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

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 6 de 20

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/10 0), “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 fórm ula matemática se debe utilizar. Apenas tiene complejid ad algorítmica */ Dto = (1-PrecioFinal/PrecioTarifa)*100; Escibe “Descuento = “, Dto, “%”;

Fin;

12.3 Algoritmo que lee 3 números distintos y nos dice cual de ellos es el menor.

Programa NumeroMenor; Entorno

Entero n1, n2, n3; // Nºs leidos por teclado Inicio

Escribe “Introduce 3 números”; Lee n1, n2, n3; Si n1=n2 o n1=n3 o n2=n3 entonces

Escribe “Los números 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;

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 7 de 20

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 día (1..31), mes (1..12, y año y nos dice la fecha que será el día siguiente. Se supondrá que febrero tiene siempre 28 días.

Programa UnDiaDespues; Entorno

Entero dia, mes, anyo; Entero numDiasMes;

Inicio Escribe “Introduce Dia: “; Lee dia; Escribe “Introduce Mes: “; Lee mes; Escribe “Introduce Año: “; Lee Año; Si mes = 2 entonces

numDiasMes = 28; Sino

Si mes=4 o mes=6 o mes=9 o mes=11 entonces // Meses de 30 días: Abrir, Junio, Sept. Nov. NumDiasMes = 30;

Sino // El resto tiene 31 días 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 día después es: “, dia, “/”, mes, “/”, anyo;

Fin;

12.5 Plantea el algoritmo anterior sin suponer que febrero tiene 28 días.

Programa UnDiaDespues; Entorno

Entero dia, mes, anyo; Entero numDiasMes;

Inicio Escribe “Introduce Dia: “; Lee dia; Escribe “Introduce Mes: “; Lee mes;

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 8 de 20

Escribe “Introduce Año: “; Lee Año; Si mes = 2 entonces

Si (anyo % 4 = 0) y No ( anyo % 100 = 0 y no ( anyo % 400 =0) ) ento nces

// 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 días: Abrir, Junio, Sept. Nov. NumDiasMes = 30;

Sino // El resto tiene 31 días 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 día después es: “, dia, “/”, mes, “/”, anyo;

Sino Escribe “La fecha es incorrecta”;

Fin Si; Fin;

12.6 Algoritmo que lee dos números enteros, positivos y distintos y nos dice si el mayor es múltiplo del menor o, lo que es lo mismo, si el menor es divisor del mayor.

Programa EsDivisorElMenor; Entorno

Entero n1, n2; // Nºs leídos por teclado Entero mayor, menor; // Variables temporales

Inicio Escribe “Introduce 2 números”; 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 múltiplo de ”, menor; Sino

Escribe “No existe ninguna relación entre los númer os”; Fin si;

Fin

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 9 de 20

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 año actual menos el año de nacimiento. Si aun no ha cumplido años en el año actual habrá que restarle 1*/ Edad = a_a – a_n; /* Comprobamos si ya ha cumplido los años o no */ Si m_a < m_n o (m_a = m_n y dia_a < d_n) entonces

// Aun no ha cumplido los años este año Edad = Edad - 1;

Fin si; Escribe “Edad = “, Edad;

Fin;

16.1 Realizar un algoritmo que muestre por pantalla los números 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 números múltiplos de 5 menores que 10000.

Programa MultDe5Menor1000; Entorno

Entero n; Inicio

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 10 de 20

n = 5; Mientras n<1000 hacer

Escribe n; n = n + 5;

Fin Mientras; Fin

16.3 Algoritmo que lea un número por teclado e imprima por pantalla todos los números positivos menores que N

Programa ListaNumeros; Entorno

Entero n; Entero i; // Contador

Inicio Escribe “Introduce un número: “; 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 número: “; Lee n; Mientras n>1 hacer

n = n - 1; Escribe n;

Fin Mientras; Fin

20.1 Algoritmo que lee una secuencia de 10 números 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 número: “; 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;

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 11 de 20

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

Fin

20.2 Algoritmo que lee una secuencia de números no nulos, terminada con la introducción de un 0, y obtiene e imprime el mayor, visualizando un mensaje de si ha leído algún número negativo.

Programa CuentaNumeros; Entorno

Entero n; Entero mayor; // Guarda el valor del mayor Booleano hayNegativos; // switch

Inicio hayNegativos = false; // suponemos que no hay negat ivos /* El menor de los posibles, cualquier número de lo s leídos por teclado será mayor que este */ mayor = -9999999; hacer

Escribe “Introduce un número: “; Lee n; Si n <> 0 entonces

// Procesamos el número leído Si n < 0 entonces

hayNegativos = true; // Se ha encontrado un negativ o FinSi; Si n > mayor entonces

/* Se ha encontrado un número 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 números negativos”; Fin Si;

Fin

Otra forma, no presuponemos ningún número 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 número: “; Lee n; Si n <> 0 entonces

// Procesamos el número leído Si n < 0 entonces

hayNegativos = true; // Se ha encontrado un negativ o FinSi; Si esPrimeraVez o n > mayor entonces

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 12 de 20

/* Se ha encontrado un número mayor que el actual o es el primer número leido, lo seleccionamos como mayor */ mayor = n; esPrimeraVez = false;

Fin si; Fin si;

Mientras n <> 0; Si esPrimeraVez entonces

Escribe “No se ha introducido ningún número”; Sino

Escribe “El mayor es :”, mayor; Fin si; Si hay Negativos entones

Escribe “Se han encontrado números negativos”; Fin Si;

Fin

20.3 Algoritmo que lee un número entero positivo N y calcula e imprime el factorial de N!. Si lee un número negativo indica con un mensaje que no es posible la operación.

Programa Factorial; Entorno

Entero n; Entero i; // Contador Entero resultado;

Inicio Escribe “Introduce un número: “; Lee n; Si n < 0 entonces

Escribe “No existe factorial de un número 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 número 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 número: “; 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;

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 13 de 20

Escribe x, “elevado a ”, n, “ es ”, resultado; Fin si;

Fin

20.5 Algoritmo que obtenga el producto de dos números enteros positivos mediante sumas sucesivas.

/* Ampliamos el problema para permitir números nega tivos */ Programa Producto; Entorno

Entero n1, n2; Entero i; // Contador Entero resultado; Booleano resultadoNeg;

Inicio Escribe “Introduce un número 1º: “; Lee n1; Escribe “Introduce un número 2º: “; Lee n2; /* Debemos considerar el caso de que alguno de los números sea negativo, lo mejor es poner los dos números 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 números 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 números enteros positivos mediante restas.

/* Ampliamos el problema para permitir números nega tivos */ 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 números sea negativo, lo mejor es poner los dos números en positivo y luego considerar el signo.

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 14 de 20

Vamos a evitar usar el operador de producto * */ resultadoNeg = (dividendo < 0 o divisor < 0) y no ( dividendo < 0 y divisor < 0); // Convertimos los números 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 ”, coci ente , “ con resto “, resto;

Fin

20.7 Algoritmo que lee tres números A, B, C, y los imprime en orden creciente e indica si fueron introducidos en ese orden.

/* Este problema es casi idéntico a uno resulto con anterioridad */ Programa NumerosOrdenAscendente; Entorno

Entero n1, n2, n3; Inicio

Escribe “Introduce tres números: “; 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 números se introdujeron ordenados”;

Fin si; Fin si;

Fin si Fin;

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 15 de 20

21.1 Algoritmo que lea un número por teclado y nos diga si es primo.

/* Un número es primo cuando solo es divisible por si mismo y por el 1. Para saber si un número es primo debemos dividirlo sucesivamente por sus posibles divisores (números menor que él) y si encontramos algún divisor diremos que el número NO es primo, es caso contrario será un número primo. */ Programa NumeroPrimo; Entorno

Entero n, cont; Booleano esPrimo; // Variable que indicará si es pr imo o no

Inicio Escribe “Introduce un número: “; Lee n; esPrimo = true; // suponemos que el número es prim o cont = 2; // Empezamos dividiendo por 2 /* Iremos dividiendo el número por sus posibles div isores hasta que encontremos un divisor, y por tanto el número d eje de ser primo o hasta que acabemos la lista de posibles div isores (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 número “, n, “ es primo”; Sino

Escribe “El número “, n, “ NO es primo”; Fin si;

Fin;

21.2 Algoritmo que genera la lista de los N primeros números primos, siendo N el dato de entrada.

/* Para resolver este algoritmo es necesario realiz ar una aproximación descendente. Partiendo del hecho de qu e ya sabemos calcular si un número es o no primo, damos por supu esta esta operación e intentamos resolver el problema. La aproximación primera sería

Lee n; i = 1; // Contador que avanza por los números nPrimos = 0; // Nº de primos que hemos visualizado mientras i < n hacer

Si i es un número primo entonces Escribe i; nPrimos = nPrimos + 1;

Fin Si; /* Fijarse que está fuera del si, se incrementa sie mpre independiente de que el número i sea primo o no */

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 16 de 20

i = i + 1; Fin Mientras;

Una vez tenemos la 1ª aproximación tan solo tenemo s que introducir el código que nos indica si un número es primo donde proceda. Cuando veamos funciones, veremos que está tarea es trivial. */ Programa NPrimerosPrimos; Entorno

// Variables utilizadas para ver si el número i es primo Entero i, cont; Booleano esPrimo; // Variable que indicará si es pr imo o no // Variables utilizadas para ir probando los número s Entero nPrimos; Entero n; // Enterio i; � Declarada previamente

Inicio Escribe “Introduce un número: “; Lee n; i = 1; // Contador que avanza por los números nPrimos = 0; // Nº de primos que hemos visualizado mientras i < n hacer /* Si i es un numero primo entonces */ esPrimo = true; // suponemos que el número es prim o 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 sie mpre independiente de que el número i sea primo o no */ i = i + 1;

Fin Mientras; Fin;

21.3 Algoritmo lea un número N y muestre por pantalla los números primos menores que N.

/* Para resolver este algoritmo es necesario realiz ar una aproximación descendente. Partiendo del hecho de qu e ya sabemos calcular si un número es o no primo, damos por supu esta esta operación e intentamos resolver el problema. La aproximación primera sería

Lee n; Para i=1 hasta n-1 hacer

Si i es un número primo entonces

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 17 de 20

Escribe i; Fin Si;

Fin Para; Una vez tenemos la 1ª aproximación tan solo tenemo s que introducir el código que nos indica si un número es primo donde proceda. Cuando veamos funciones, veremos que está tarea es trivial. Este algoritmo a diferencia del anterior saca los n úmeros primos menores que N, mientras que el otro sacaba los N pr imeros 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 número i es primo Entero i, cont; Booleano esPrimo; // Variable que indicará si es pr imo o no // Variables utilizadas para ir probando los número s Entero n; // Enterio i; � Declarada previamente

Inicio Escribe “Introduce un número: “; Lee n; Para i=1 hasta n-1 /* Si i es un numero primo entonces */ esPrimo = true; // suponemos que el número es prim o 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 números perfectos menores que 1000. (Un número es perfecto si la suma de sus divisores, excepto él mismo, es igual al propio número.).

/* Para resolver este algoritmo es necesario realiz ar una aproximación descendente. Damos por supuesta la ope ración es numero perfecto que más adelante desarrollaremos La aproximación primera sería

Para n=1 hasta 999 hacer Si n es numero perfecto entonces

Escribe n; Fin Si;

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 18 de 20

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 número perfecto Fin si;

De nuevo unimos las dos soluciones y ya tenemos res uelto 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 número perfecto Escribe n;

Fin Si; Fin Para;

Fin;

21.5 Algoritmo que evalúa 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 po linomio 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 número entero positivo N e imprime su tabla de multiplicar.

Programa TablaMultiplicar; Entorno

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 19 de 20

Entero n, i; Inicio

Escribe “Introduce un número: “; Lee n; Para i=1 hasta 10

Escribe i, “ x “, n, “ = “, i*n; // Siguiente térm ino de la Fin Para;

Fin

22.1 Algoritmo que lee un número entero y positivo N y escribe la lista de sus divisores.

Programa ListaDivisores; Entorno

Entero n, i; Inicio

Escribe “Introduce un número: “; 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 número entero y positivo y calcula y escribe la suma de sus divisores.

Programa SumaDivisores; Entorno

Entero n, i; Entero suma;

Inicio Escribe “Introduce un número: “; 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 número entero y positivo N y escribe los N primeros términos de la sucesión de Fibonacci. La sucesión se caracteriza porque cada término es igual a la suma de sus dos anteriores, dandose por definición 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 número: “;

Fundamentos de Programación I.E.S San Sebastián - Huelva

© Santiago D. Página 20 de 20

Lee n; // Casos base, triviales Si n > 0 entonces

Escribe “0”; Fin si; Si n > 1 entonces

Escribe “0”; Fin si; // 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 término siguien te Escribe suma; // Los dos últimos términos avanzan una posición an_1 = an; an = suma;

Fin Para; Fin