Algoritmos Y Lenguaje C

Preview only show first 6 pages with water mark for full document please download

Transcript

mailxmail - Cursos para compartir lo que sabes Algoritmos y lenguaje C Autor: abraham sopla 1 mailxmail - Cursos para compartir lo que sabes Presentación del curso Este curso pretende dar a conocer las explicaciones más simples del trabajo de los ordenadores. Puedes descubrir cada paso que realizan, cómo lo realizan, qué es lo qué utilizan y en qué orden lo utilizan. 2 mailxmail - Cursos para compartir lo que sabes 1. Introducción En educación superior quien lleve un curso de Lenguajes de Programación, técnicas de programación, algoritmos, estructuras de datos, sistemas operativos, etc, se habrá dado cuenta lo complicados que resultan estos cursos cuando no entendemos, como es que la computadora maneja internamente las líneas de código escritas en los programas para realizar una actividad. ¿Quien sabe como se ordenan los datos en una hoja de calculo Excel?, de manera que, luego de seleccionar datos, pulsamos el botón ordenar de la barra de herramientas y listo. ¿Quién sabe como calcula el término n de una sucesión de números?, etc, sinceramente una serie de problemas. Todos intentamos manejar las computadoras -usarlas- para resolver problemas, sin antes hacer por lo menos un pequeño plan acerca de la solución o tantear el camino a seguir para llegar a la solución de una situación problema dado. Aspectos que nos obligan a llevar largas horas, sentados frente a las computadoras. Hay quienes creen que para ser buenos programadores hay que tener una computadora, talvez no sea tan cierto; pero mas seguro es primero saber resolver los problemas usando algoritmos para luego llevarlos a las computadoras. En estos casos queda claro que el uso de la computadora pasa a segundo plano. En consecuencia para resolver un problema en computadora primero hay que hacer un plan, en otras palabras un algoritmo. Los algoritmos que desarrollaremos serán usando pseudocódigo e implementados en lenguaje C, tratando de no llegar a complicaciones en el uso del lenguaje. En los primeros capítulos del libro, encontramos teoría suficiente para desarrollar e implementar los algoritmos en lenguaje C. Tenga en cuenta que este documento no tiene prioridad en el estudio del lenguaje C si no más bien en el uso del mismo en la resolución de problemas comunes. Según el avance se trata ejercicios combinados con los diferentes tipos de sentencias y grado de dificultad. Algunos de los ejercicios solucionados se encuentran propuestas por otros autores, sin embargo lo que a nosotros nos interesa es como solucionarlos, para así cumplir con nuestro objetivo. Este trabajo está orientado a estudiantes que se inician en educación superior en carreras de Ingeniería de Sistemas, computación e informática, electrónica, industrial, etc., a quienes se les sugiere estudiar detenidamente los casos que presentamos. Claro está que nos es la idea que se los copien o se los aprendan de memoria las soluciones, si no más bien tengan en sus manos un material de ayuda. 3 mailxmail - Cursos para compartir lo que sabes 2. Indicaciones para principiantes 1.1 PSEUDOCÓDIGO El pseudocódigo es un lenguaje general, de especificación de la solución del problema mediante un algoritmo. Se considera como el paso anterior a la codificación. La ventaja es que, este lenguaje puede ser traducido indistintamente y sin problemas a cualquier lenguaje de programación de computadora. Un algoritmo es una secuencia de pasos lógicos que nos conducen hacia la solución de un determinado problema. Nosotros haremos los algoritmos usando un lenguaje común, el más sencillo para todos. Indicamos que no nos distraeremos preocupados por terminismos. La idea en fin, será solucionar los problemas y así lo haremos, sabiendo que lo más importante antes de empezar a escribir un programa es necesario hacer el algoritmo. Lógicamente, si ya tiene el programa que soluciona un problema, ya no necesita hacerle un algoritmo; pero si de situaciones académicas se trata, hacer el algoritmo, teniendo el programa no necesita de ningún esfuerzo, solamente pegarse a algunas reglas y términos de pseudocódigo, como inicio, fin asignar, etc. 1.2 ESTRATEGIA PARA RESOLVER PROBLEMAS CON ALGORITMOS Cuando usted está resolviendo un examen va donde el profesor cada rato y pregunta y pregunta acerca de un problema, hasta se olvida que esta rindiendo un examen, después dice, esta mal planteada la pregunta, y raja, se molesta, tira la silla y sale del examen y comenta con sus compañeros e insiste que el problema estaba mal planteado, lógicamente que eso puede suceder; si para usted es todas las veces así, quizás resulte que en el examen que acaba de desaprobar y después que el profesor resolvió el problema usted diga ¡claro la pregunta era esa!, ¡verdad esa era la respuesta!. En el pregrado también lo hacíamos. ¡La experiencia enseña!, habemos personas que intentamos dar respuestas a los problemas, sin haber entendido de lo que se trata, algo así como que al leer o escuchar, leemos o escuchamos a medias y si en esta situación nos encontramos pues lo que estamos haciendo es aumentar la dificultad del problema, que se supone vamos a solucionar. Ante un problema, hay que leer o escuchar cuantas veces sean necesarias, hasta comprender o memorizar el enunciado si fuera posible. Cuantas veces hemos fracasado por no escuchar o saber leer bien, lo que implica entender. Saber escuchar o leer es saber comprender. ¡Si no entiende un problema no se atreva a resolverlo, mejor quédese intentado comprenderlo! A continuación planteamos 3 pasos indispensables en el desarrollo de problemas usando algoritmos. 1.2.1 PASOS PARA DEFINIR PROBLEMAS 1. COMPRENDER EL PROBLEMA: Lea o escuche atentamente el problema. Haga un bosquejo, tantee una posible solución. Si no entiende el problema no continúe al paso 2. 2. IDENTIFICAR LAS ENTRADAS, PROCESOS Y SALIDAS Entradas: Identifique los datos de ingreso al algoritmo. Procesos: Son las operaciones, cálculos matemáticos o procesos que se realizan con los datos de entrada, a veces dependen del conocimiento de algún tema especifico, puede ser matemáticas, estadística, química, biología, investigación de operaciones, contabilidad, etc. 4 mailxmail - Cursos para compartir lo que sabes Salidas: Son los resultados a imprimirse o mostrarse. Es la solución al problema. Son las respuestas. 3. COMPROBAR: Consiste en simular para verificar si el algoritmo resuelve el problema realmente, se hacen con los datos posibles de entrada, puede realizarse en papel y a mano. Generalmente los problemas con estructuras secuénciales y selectivas son más complicados de comprender y fáciles de identificar las entradas, procesos y salidas, ya que las soluciones tratan de al menos de operaciones matemáticas u procesos sencillos. Por otro lado los problemas donde se usan bucles o repeticiones, son sencillos de comprender y difíciles de identificar las entradas, procesos y salidas. EJEMPLO 1: Escribir un algoritmo para un programa que calcule el área de un trapecio. 1. Comprendiendo el problema: Luego de saber que el problema se trata de geometría y es un tema que todo estudiante de educación superior conoce, el problema ya estaría comprendido de antemano, específicamente se trata del cálculo del área de un trapecio. 2. Identificando las entradas, procesos y salidas Entradas: Para calcular el área de un trapecio, necesitamos saber el valor numérico de: la base mayor, base menor y su altura. Procesos: El proceso general a realizarse sería: Salidas: La única salida sería el , en ambos casos 3. Comprobando. Algoritmo Inicio Declare area, basemayor, basemenor, altura Area: ((basemayor+basemenor)/2)* altura Imprimir area Fin EJEMPLO 2: Escriba un programa que calcule la suma de: 1/10+1/11+1/12+1/13+...+1/50 Usemos los pasos para definir el problema. 1. El problema trata de la suma de una serie de fracciones cuyo numerador es 1 y los denominadores están en sucesión aritmética empezando del 10 y van 5 mailxmail - Cursos para compartir lo que sabes aumentado de 1 en 1 hasta 50. 2. El proceso consiste en una simple suma, sucesiva. 3. La salida es la suma. Algoritmo Inicio Declare suma, a Suma:0 Desde a=10 hasta a<=50 hacer Suma: suma+(1/a) Fin desde Imprimir suma Fin 6 mailxmail - Cursos para compartir lo que sabes 3. Apuntes de Lenguaje C 2.1 LIBRERÍAS Ces un lenguaje pequeño. La funcionalidad de C se obtiene a través de un rico conjunto de bibliotecas de funciones, llamados también librerías. Por ejemplo la función sqrt pertenece a la librería math. #include //declaración de librería {... a=sqrt(25); //uso de la función sqrt en el programa principal ... } La función sqrt devuelve la raíz cuadrada de un número, ejm sqrt(25) regresa 5 NOTA: Si usted intenta usar la función sqrt sin declarar la librería math, tendrá errores justamente en la línea donde este escrita esta función. Otras funciones de la librería math serían sin, cos, tan, etc. Otras librerías son stdio, stdlib, etc. Las librerías y sus funciones están escritas en la ayuda del lenguaje C. ¡Cada librería contiene sus propias funciones! La librería stdio, es la que mas solemos usar para resolver problemas sencillos como los que veremos mas adelante. 2.2 VARIABLES Y CONSTANTES 2.2.1 VARIABLE: Es un identificador o nombre que sirve para almacenar valores de un tipo de datos, las variables pueden ser de un máximo de 256 caracteres, el carácter inicial de las variables será una letra (m1, suma2, da2s, etc). Lo incorrecto sería por ejemplo 1num, 25hora, 5p1, etc. 2.2.2 CLASIFICACIÓN DE VARIABLES Las variables pueden ser locales o globales. Variables Locales: son las que se declaran dentro de un procedimiento o función. Variables Globales: son aquellas que se definen fuera de las funciones. Pueden ser utilizadas en cualquier función que se declaren después de ellas, mantienen su valor entre las distintas llamadas. 2.3 ESTRUCTURA MÁS SIMPLE DE UN PROGRAMA EN C 7 mailxmail - Cursos para compartir lo que sabes Lo explicamos a través de un ejemplo que imprime la suma de 4 y 7. NOTA Del ejemplo anterior: x y n son variables globales c y s son variables locales. - C requiere un punto y coma al final de cada sentencia. - printf es una función estándar de C, que se usa para escribir o imprimir datos. - \n significa salto de línea. - % Salida formateada. LA FUNCIÓN main() Representa a la función principal; la programación en C es en base a funciones. 8 mailxmail - Cursos para compartir lo que sabes 4. Apuntes de Lenguaje C II 2.4 DECLARACIÓN DE VARIABLES Y TIPOS DE DATOS 2.4.1 DECLARACIÓN DE VARIABLES Las variables se escriben usando caracteres, inclusive los números con un tamaño máximo de 255 letras, siempre empezando con una letra. Ejemplo de variables: número1, a, b, c, num6, promedio, suma_números, a12, as12mn, etc. Vea que en todas las variables empezamos con letras. La declaración de variables se hace de la siguiente manera: Tipo Variable; Ejemplo: Int a; En este caso la variable a de tipo entero, aceptará valores enteros, como 2, -20, 15, 0, -658, etc. 2.4.2 TIPO DE DATOS Los tipos de datos simples son: CADENA DE CARACTERES: Se derivan de los de tipo caracter, se declaran así: char mensaje[20]; En este caso la variable mensaje aceptará un texto o cadena cuya longitud será de 20 caracteres como máximo. Luego las variables pueden sufrir algunas modificaciones como las mencionamos a continuación y los tipos de datos pueden quedar clasificados de la siguiente manera: Los tipos de datos básicos tienen varios modificadores que los preceden. Se usa un modificador para alterar el significado de un tipo base para encajar con las necesidades de diversas situaciones. LOS MODIFICADORES: signed, unsigned, long y short. Signed, unsigned, long y short pueden ser usados con los tipos char e int. Aunque permitido, el uso de signed en enteros es redundante porque la declaración de un entero por defecto asume un número con signo. 2.4.3 LECTURA Y ESCRITURA DE VARIABLES 9 mailxmail - Cursos para compartir lo que sabes El lenguaje C usa salida formateada. La función printf tiene un carácter especial para formateo % un carácter enseguida define un cierto tipo de formato para una variable, por ejemplo d indica que el resultado será entero como se indica en la tabla a continuación. Ejemplo. Por ejemplo: printf(" %c %d %f ",ape, i, x); Explicación: La sentencia(s) de formato se encierra entre comillas " ", y enseguida las variables. Asegurarse que el orden de formateo y los tipos de datos de las variables coincidan -debe existir correspondencia entre las variables y los formatos- en este caso, el valor de ape será de tipo carácter, i entero decimal, x de coma flotante. scanf() es la función para entrar valores a variables. Su formato es similar a printf. Por ejemplo: scanf("%c %d %f %s",&nombre, &i, &x, cad); Observar que se antepone & a los nombres de las variables, excepto a la variable de tipo cadena de caracteres que es de tipo string. 2.4.4 LAS CONSTANTES Una constante es una variable, a la cual se le asigna un valor y este no puede cambiar. Las constantes se declaran usando la palabra clave const, por ejemplo: const a = 6; NOTAS: - Es usual inicializar una constante con un valor, ya que no puede ser cambiada de alguna otra forma. 2.5 OPERADORES 2.5.1 EL PARÉNTESIS Se usan para agrupar datos. No es lo mismo: 4+8/2 que (4+8)/2, si evaluamos en el primer caso tendremos como resultado 8 y en el otro 6, e ahí la importancia del paréntesis bien usado. 2.5.2 EL OPERADOR DE ASIGNACIÓN: Es el =, por ejemplo: m=4; letra='y'; Se lee: El número 4 es asignado a la variable m El caracter y es asignado a la variable letra 2.5.3 OPERADORES ARITMÉTICOS Operadores aritméticos más usuales: Para: a=5 y b=3 10 mailxmail - Cursos para compartir lo que sabes 2.5.4 OPERADORES RELACIONALES Para: a=5 y b=3 2.5.5 OPERADORES LÓGICOS Los operadores lógicos se usan con sentencias condicionales o relacionales, los operadores básicos lógicos son: Para: a=5 , b=3, c=5 y d=3. 2.5.6 ORDEN DE PRECEDENCIA DE LOS OPERADORES Es necesario ser cuidadosos con el significado de expresiones tales como a + b * c, dependiendo de lo que se desee hacer. Para a=5 , b=3 y c=5 a + b * c = 20 (a + b) * c = 40 a + (b * c) = 20 Tenga en cuenta los tres resultados anteriores, y vea la importancia del paréntesis, dependiendo de la operación que desea realizar será utilizado. Sin embargo todos los operadores tienen una prioridad: - Los operadores de mayor prioridad son evaluados antes que los que tienen menor prioridad. - Los operadores que tienen la misma prioridad son evaluados de izquierda a derecha, por lo que: En a + b - c es evaluado como (a + b) - c. En a - b - c es evaluado como (a - b) - c. Las () es un símbolo de agrupación. 11 mailxmail - Cursos para compartir lo que sabes 5. Estructuras 3.1 ESTRUCTURAS SECUÉNCIALES Las estructuras secuenciales están basadas en sentencias de asignación simples. Ejemplo. #include int x; main() {int a,b,suma; a=5; b=12; suma=a+b; suma=suma+b; printf("%d",suma); } En este caso, la evaluación se hace línea por línea, siguiendo un orden. En el caso anterior valor de suma que se imprime es 29. 3.2 ESTRUCTURAS SELECTIVAS 3.2.1 LA SENTENCIA If Las tres formas como se puede emplear la sentencia if son: 3.2.2 LA SENTENCIA switch Con la estructura if ... else if se pueden realizar comprobaciones múltiples, sin embargo esto puede tornarse en confusiones muy serias para los que leen los programas, inclusive para uno mismo que ojee su código después de un buen tiempo de vacaciones. La sentencia de bifurcación múltiple switch tiene la solución. Sean Constante1, Constante2, Constante3, etc. valores de la variable opción, los mismos que pueden ser números o caracteres. 12 mailxmail - Cursos para compartir lo que sabes 3.3 ESTRUCTURAS REPETITIVAS La explicación para las estructuras repetitivas los haremos a través de un ejemplo de un programa que: 1. Imprima la serie 3456789 2. Imprima la serie 3579 3.3.1 LA SENTENCIA for La sentencia for tiene el siguiente formato: for (expresion1; expresion2; expresion3) {Bloque de sentencias} Expresion1: Define la asignación del valor inicial a una variable. Expresion2: Define la asignación del valor final a una variable. Expresion3: Define el incremento del valor de la variable Para la serie 3456789 #include int a; main() { for(a=3; a<10; a++) { printf("%d",a); } } Mostrará en pantalla: 3456789 Para la serie 3579 #include int a; main() { for(a=3; a<10; a+=2) { printf("%d",a); } } 13 mailxmail - Cursos para compartir lo que sabes Mostrará en pantalla: 3579 3.3.2 LA SENTENCIA while La sentencia while es otro ciclo o bucle cuyo formato es: while (expresión) { Sentencias; } En este caso las sentencias se ejecutan si la expresión es verdadera. La comprobación es al inicio del bucle. Para la serie 3456789 #include int a; main() { a=3; while(a<10) { printf("%d",a); a=a+1; } } Para la serie 3579 #include int a; main() { a=3; while(a<10) { printf("%d",a); a=a+2; } } 3.3.3 LA SENTENCIA do-while A diferencia de del bucle for y while, el bucle do-while, verifica la condición al finalizar. do{ Sentencias; } while(condición); NOTA: Las llaves no son necesarias si solamente se escribe una sentencia dentro de los bucles. En el siguiente programa se usa un ciclo do ... while para leer números desde el teclado hasta que uno de ellos es menor que o igual a 100: main() { int num; 14 mailxmail - Cursos para compartir lo que sabes int num; do { scanf("%d", &num); } while ( num>100 ); } Do-While puede ser útil en el desarrollo de programas con menús. En el siguiente ejemplo al correr el programa imprime la serie 345678910, fíjese se supone la impresión debió ser hasta 9 como máximo. Esto explica que luego se haberse impreso el número 10, recién se hace la comparación. Para la serie 345678910 #include int a; main() { a=3; do { a=a+1; printf("%d",a); }while(a<10); } Para la serie 357911 #include int a; main() { a=3; do { a=a+2; printf("%d",a); }while(a<10); } 15 mailxmail - Cursos para compartir lo que sabes 6. Funciones y procedimientos 4.1 FUNCIONES Nuevamente la función g(x, y) devuelve un solo valor para dos valores de 2 variables de entrada, x e y respectivamente. Las funciones dentro de los lenguajes de programación se tratan teniendo en cuenta el criterio anterior. FUNCIÓN: Una función es un grupo de instrucciones cuya ejecución se lleva a cabo cada vez que se invoca el nombre de la función con valores de entrada y luego de realizar un cálculo regresa un valor hasta la línea donde se hizo la llamada a la función. Toda función regresa un único valor PROCEDIMIENTO: Cuando una función no regresa valor alguno se llama procedimiento, en todo caso el valor que regresa es nulo. Un procedimiento es un grupo de instrucciones, que como su nombre lo dice realiza un procedimiento y nada mas, cuya ejecución se lleva a cabo cada vez que se invoca el nombre del procedimiento, posiblemente con algunos valores como argumentos. Todo procedimiento no regresa valores, sino que hace algo como por ejemplo ordenar, imprimir, intercambiar valores, etc. 4.1.1 ARGUMENTOS DE LAS FUNCIONES Son los valores de las variables de la función f(x,y,z), en este caso los argumentos son x, y, z. - En un procedimiento no interesa el número de argumentos de ingreso, lo que mas interesa es el proceso que va ha realizar y sobre ello el valor que devuelve. 16 mailxmail - Cursos para compartir lo que sabes - En algunos casos los problemas pueden ser solucionados a través de funciones o procedimientos indistintamente. En Lenguaje C, main es una función; es decir es la función principal de un programa. 4.1.2 CORRESPONDENCIA ENTRE ARGUMENTOS Se refiere a que los valores de una misma función pueden ser diferentes, pero siguen n un orden de correspondencia. Ejemplo: Sea f(a, b, c) = f(m, n, p)=f(4, 5, -7), en este caso; a corresponde a m y este a 4 (podría decirse ) b corresponde a n y este a 5 (podría decirse ) c corresponde a p y este a -7 (podría decirse ) Como se ve ¡la función f tiene 3 variables o argumentos!. 4.1.3 RECURSIVIDAD Normalmente una función f puede llamar a una función g y esta a una función h y así sucesivamente. cuando una función se llama a si misma se dice que sigue un proceso recursivo. En este caso una función f se llama así misma, o la función f llama a la función f; estos conceptos pueden ser utilizados para calcular el factorial de un número o calcular un elemento de la serie del Italiano Fibonacii. NUNCA LO OLVIDE: En un proceso recursivo, identifique primero la semilla, si no logra identificarlo, siga intentando hasta lograrlo. SEMILLA: Son los valores iniciales de las series que siguen procesos recursivos. En el factorial: La semilla es 1, para factorial de 0 o 1. Serie fibonacii: La semilla es 1,1, para fibonacii de 0 o 1. LLAMADA A UNA FUNCIÓN: Variable:función(argumentos); LLAMADA A UN PROCEDIMIENTO: Procedimiento(argumentos); 17 mailxmail - Cursos para compartir lo que sabes 7. Estructuras secuenciales Como ya lo mencionamos anteriormente, los algoritmos que necesitan de estructuras secuenciales para su solución son los mas difíciles de comprender y mas sencillos de identificar los procesos que realizará el programa que nos llevarán a la solución del mismo. En algunos algoritmos se omite la declaración de variables, en casos que el algoritmo no es complicado. Ejercicio 1 Hacer el rastreo manual para: a = 2 a = a + 1 b = a * 2 b = b - 1 c = a + 2 * b Presentar "c". RASTREO: Para el rastreo hay que asignarle a cada línea un número, de la siguiente manera, de antemano ya nos habremos fijado que el valor de salida es el de la variable c, el problema sería saber el valor de esta variable c que se mostrará finalmente. 1) a = 2 2) a = a + 1 3) b = a * 2 4) b = b - 1 5) c = a + 2 * b 6) Presentar "c". Línea 1: a=2 Línea 2: a=2+1=3 Línea 3: b=3*2=6 Línea 4: b=6-1=5 Línea 5: c=3+2*5=13 Línea 6: Se presenta 13 El valor de la variable c será 13. Ejercicio 2 Hacer el algoritmo para escribir un programa que evalúe la expresión Solución: observe que los valores de ingreso serán para las variables x, w. Algoritmo Inicio Declare Resultado, x, w Leer x,w Resultado (x+w)/(2*w) Mostrar Resultado Fin Variables resultado: valor de la expresión luego de ser evaluada. 18 mailxmail - Cursos para compartir lo que sabes x : guarda un valor numérico ingresado. w : guarda un valor numérico ingresado. Programa #include main(void) {float resultado,x,w; //se escriben dos valores separados por la barra espaciadora printf("ingrese el valor de x , también de w \n"); //se leen o capturan dos valores escritos en las variables x y w. scanf("%f %f",&x,&w); //Se evalúa la expresión y el resultado es asignado a la variable resultado. resultado=(x+w)/(2*w); //se imprime el valor de la variable resultado. printf("%f",resultado); } COMETARIO: Printf: Permite escribir en pantalla un mensaje o escribir un resultado producto de un proceso. Scanf: Permite capturar los valores de los datos ingresados escritos a través de un printf. // Evita la ejecución de esta línea, se usa para escribir comentarios, como aclaraciones, recomendaciones, explicaciones, etc. /* */ Si necesita escribir un comentario extenso, es decir de varias líneas, puede usarlo de la siguiente manera. /*... ...Comentario... ... */ \n Permite escribir datos en la línea siguiente (salta una línea). Si se escribe \n\n\n saltaremos 3 líneas, \n\n\n\n saltaremos hasta la cuarta línea siguiente para imprimir o escribir el siguiente dato. FORMATOS DE LECTURA O IMPRESIÓN %d %f %c %s Si el dato que se imprimirá o leerá será un número entero Si el dato que se imprimirá o leerá será un número real Si el dato que se imprimirá o leerá será un carácter. Si el dato que se imprimirá o leerá será una cadena EXPLICACIÓN: Estas dos líneas de código: printf("ingrese el valor de x , también de w \n"); scanf("%f %f",&x,&w); Pueden ser escritas en cuatro líneas de la siguiente manera, con la diferencia de que la forma de capturar de los datos cambia. Quedando de la siguiente manera. printf("ingrese el valor de x \n"); scanf("%f ",&x); printf("ingrese el valor de w \n"); scanf("%f ",&w); Ejercicio 3 19 mailxmail - Cursos para compartir lo que sabes Hacer el algoritmo para escribir un programa que evalúe la expresión Algoritmo Inicio Declare x, y, Resultado Leer x,y Resultado raizcuadrada(3*x*x+4*y*y) Mostrar resultado Fin Variables x : guarda un valor numérico ingresado. y : guarda un valor numérico ingresado. resultado : guarda el valor resultado de la expresión. Programa #include #include main(void) {int x,y; float resultado; printf("ingrese el valor de x, también y \n"); scanf("%d %d",&x,&y); resultado=sqrt(3*x*x+4*y*y); printf("%f",resultado); } COMENTARIO resultado=sqrt(3*x*x+4*y*y); printf("%f",resultado); Lo anterior puede reemplazarse por una sola línea de código como: printf("%f", sqrt(3*x*x+4*y*y)); Cuando menos líneas tenga el código, el programa es mejor. Y el programa quedaría con una línea de menos. #include #include main(void) {int x,y; float resultado; printf("ingrese el valor de x, también y \n"); scanf("%d %d",&x,&y); printf("%f", sqrt(3*x*x+4*y*y)); } Ejercicio 4 Hacer el algoritmo para escribir un programa que imprima el subtotal y el IGV de una transacción comercial, siendo el IGV el 19% del total. El dato de ingreso será el total. Algoritmo 20 mailxmail - Cursos para compartir lo que sabes Inicio. Declare total, subtotal, igv Leer total Igv 0.19*total Subtotal total-igv Mostrar subtotal, igv Fin Variables total : guarda el valor del total ingresado subtotal: guarda el valor del subtotal calculado igv : guarda el valor del total ingresado Programa #include main() {float total,subtotal,igv; printf("ingrese el total a pagar"); scanf("%f",&total); igv=0.19*total; subtotal=total-igv; printf("total: %f, subtotal: %f, igv: %f",total,subtotal,igv); } 21 mailxmail - Cursos para compartir lo que sabes 8. Estructuras selectivas 5.2.1 SELECCIÓN SIMPLE if Ejercicio 5 Hacer el algoritmo para escribir un programa que indique si un número ingresado por el teclado es positivo. Algoritmo Inicio Declare num Leer num Si num>0 entonces Imprimir num es positivo Fin si Fin Variables Nu2m: Número que se ingresa por el teclado Programa #include main(void) {int num; printf("ingrese un número.... "); scanf("%d",&num); if(num>0) printf("el número es positivo"); } 5.2.2 SELECCIÓN DOBLE if else Ejercicio 6 Hacer un algoritmo para un programa que calcule el pago que hacen un grupo de personas para ver una película teniendo en cuenta que si el grupo es menor de 8 personas el pago es de 1.5 soles por persona y para grupos de 8 personas o mas el pago es 0.5 soles por persona. Algoritmo Inicio Declare num, pago Leer num Si num>=8 entonces Pago=0.5*num sino Pago=1.5*num Fin si Imprimir pago Fin Variables num: Número que se ingresa por el teclado e indica la cantidad de personas pago: El valor del pago que se calculará. 22 mailxmail - Cursos para compartir lo que sabes Programa #include main(void) {float num, pago; printf(" ingrese número de personas scanf("%d",&num); if(num<8) pago=1.5*num; else pago=0.5*num; printf("el pago es %f",pago); } "); Ejercicio 7 Hacer un algoritmo para un programa que convierta un número mayor de 10000, dado en segundos a horas minutos y segundos. Ejemplo 12015 segundos es equivalente a 3 horas, 20 minutos, 15 segundos Algoritmo Inicio Declare num, horas, rmin, min Leer num Si num>10000 entonces Horas cociente(num,3600) Rmin resto(num,3600) Min cociente(rmin,60) Seg resto(rmin,60) Mostrar Horas, min, seg Fin si Fin Variables num : valor numérico entero ingresado. horas : cantidad de horas. rmin : cantidad de segundos, resto de num. min : cantidad de minutos seg : cantidad de segundos, resto de min. Programa #include #include #include main(void) {int num, rmin, seg; div_t horas,min; printf("ingrese un número mayor de 10000 ........ scanf("%d",&num); if(num>10000) {horas=div(num,3600); rmin= num % 3600; min=div(rmin,60); seg=rmin%60; printf("%d HORAS\n",horas); 23 "); mailxmail - Cursos para compartir lo que sabes printf("%d MINUTOS\n",min); printf("%d SEGUNDOS\n",seg); } } Ejercicio 8 En el Instituto Superior Pedagógico Toribio Rodríguez de Mendoza, los pagos por curso desaprobado son de 20 soles, con un cargo máximo de 120 soles independiente del número de cursos tomados. Ejemplo si un alumno desaprueba 3 cursos pagaría 60 soles, mientras que uno que desaprueba 8 cursos paga 120 soles. Escriba el algoritmo de un programa en el que las entradas sean el número de cursos desaprobados y la salida sea el valor del pago total que el alumno haga por los cursos desaprobados. Algoritmo Inicio Declares x, pago Leer x Si x<6 entonces Pago=20*x Imprimir pago Sino Imprimir el pago es 120 soles Fin si Fin Variables x : Número de cursos pago : guarda el pago calculado Programa #include main(void) {int x; printf("ingrese el número de cursos desaprobados \n"); scanf("%d",&x); if(x<=6) printf("el pago será de %d soles ",x*20); else printf("el pago será de 120 soles"); } 24 mailxmail - Cursos para compartir lo que sabes 9. Estructuras selectivas II Ejercicio 9 De los estudiantes que se matriculan en la UNAT-A, los ex soldados pagan 30 soles por curso en el que se matriculen, mientras que los demás (regulares), pagan 50 soles por curso. Diseñe el algoritmo para escribir un programa en el que el usuario introduce los datos del estudiante (ex soldado o regular) y el número de cursos y las salidas sean la categoría del estudiante (ex soldado o regular), número de cursos y los costos totales por los cursos a llevar. Algoritmo Inicio Declare categoría, nc, pago Leer categoría, nc Si categoría es exsoldado entonces Pago:nc*30 Imprimir "ex soldado", nc, pago Sino Pago:nc*50 Imprimir "regular", nc, pago Fin si Fin Variables categoría : Asume los valores exsoldado o regular. nc : Número de cursos. pago : Pago por el total de cursos matriculados Programa #include main(void) {int x,pago,nc; printf("ingrese la categoría: 1. ex soldado 2. regular\n"); scanf("%d",&x); printf("ingrese el número de cursos\n"); scanf("%d",&nc); if(x==1) printf("categoría: ex soldado, %d cursos, pago: %d soles ",nc,nc*30); else printf("categoría: regular, %d cursos, pago: %d soles ",nc,nc*50); } if ANIDADO Ejercicio 10 En la ciudad de Chachapoyas, una agencia de seguros para automóviles asigna costos basados en el sexo y la edad del conductor. Los varones menores de 25 años pagan los precios más altos, 1000 soles. Los hombres de 25 años o más años pagan 700 soles. Las mujeres de menos de 21 años pagan 800 soles, mientras que las mujeres de 21 años o más pagan 500 soles. Escribir el algoritmo del programa que imprima la edad del conductor, sexo, y el pago correspondiente para los clientes de 25 mailxmail - Cursos para compartir lo que sabes la aseguradora. Algoritmo Inicio Declare sexo, edad, pago Leer sexo, edad Si sexo es masculino entonces Si edad<25 entonces Pago:1000 Imprimir edad, sexo, pago Sino Pago:700 Imprimir edad, sexo, pago Fin Si Si no Si edad<21 entonces Pago:800 Imprimir edad, sexo, pago Sino Pago:500 Imprimir edad, sexo, pago Fin si Fin si Fin Variables sexo : Almacena 1 (masculino), 2 (femenino). edad : Edad del cliente. pago : valor del pago que hará el cliente Programa #include main(void) {int x,pago,edad; printf("ingrese el sexo: 1. Masculino 2.Femenino \n"); scanf("%d",&x); printf("ingrese la edad \n"); scanf("%d",&edad); if(x==1) if(edad<25) printf("edad: %d años, sexo: masculino, pago: %d soles ",edad,1000); else printf("edad: %d años, sexo: masculino, pago: %d soles ",edad,700); else if(edad<21) printf("edad: %d años, sexo: femenino, pago: %d soles ",edad,800); else printf("edad: %d años, sexo: femenino, pago: %d soles ",edad,500); } Ejercicio 11 Escribir el algoritmo para un programa que solicita se le ingrese un número. Si el número es positivo debe escribirse el número y junto a el positivo (15 POSITIVO). Si 26 mailxmail - Cursos para compartir lo que sabes el número es cero (0 CERO); Si es negativo debe escribirse el número y junto a el negativo (-5 NEGATIVO). Ejemplo 10 Positivo 0 Cero -15 Negativo. Algoritmo Inicio Declare numero Leer número Si número >=0 entonces Si número>0 entonces Imprimir número, "POSITIVO" Sino Imprimir número, "CERO" Fin si Sino Imprimir número, "NEGATIVO" Fin si Fin Variables número : Número ingresado por el teclado Programa #include main(void) {int num; printf("ingrese un número\n"); scanf("%d",&num); if(num>=0) if(num>0) printf("%d POSITIVO",num); else printf("%d CERO",num); else printf("%d NEGATIVO",num); } Ejercicio 12 En una tienda donde se venden sillas, si se compran más de 8 el costo por cada una es de 10 soles; entre 4 y 8 es de 11 soles cada una, si la compra es menor de 4 el costo es de 15 soles cada una. Escriba el algoritmo para escribir un programa y saber cuanto pagará un cliente según el número de sillas que compra. Debe imprimirse el número de sillas que compra y el total a pagar. Algoritmo Inicio Declare num, tot Leer num, tot Si num<=8 entonces Si num<=4 entonces Tot =num*15 27 mailxmail - Cursos para compartir lo que sabes Sino tot=num*11 Fin si Sino tot=num*10 Fin si Imprimir tot Fin Variables num : cantidad de sillas compradas. tot : Total a pagar. Programa #include main(void) {int num,tot; printf("ingrese un número de sillas\n"); scanf("%d",&num); if(num<=8) if(num<=4) tot=num*15 else tot=num*11 else tot=num*10 printf("%d soles",tot); } 28 mailxmail - Cursos para compartir lo que sabes 10. Selección múltiple switch Ejercicio 13 Hacer un algoritmo para escribir un programa que devuelva el nombre del día de la semana siguiendo un orden de correspondencia (1, 2, 3...7) para (lunes, martes, miércoles... domingo) respectivamente. Algoritmo Inicio Declare numero Leer número Selección número Case 1 Imprimir " LUNES" Case 2 Imprimir "MARTES" Case 3 Imprimir "MIERCOLES" Case 4 Imprimir "JUEVES" Case 5 Imprimir "VIERNES" Case 6 Imprimir "SABADO" Case 7 Imprimir "DOMINGO" Si no Imprimir "SOLO NÚMEROS ENTRE 1 Y 7........ " Fin selección Fin Variable Número : Número correspondiente al día de la semana. Programa #include main(void) {int dia; printf("ingrese un número entre 1 y 7........ "); scanf("%d",&dia); switch(dia) { case 1: printf(" LUNES \n"); break; case 2: printf(" MARTES \n"); break; case 3: printf(" MIERCOLES\n"); break; 29 mailxmail - Cursos para compartir lo que sabes case 4: printf(" JUEVES\n"); break; case 5: printf(" VIERNES\n"); break; case 6: printf(" SABADO\n"); break; case 7: printf(" DOMINGO\n"); break; default: printf(" SOLO NÚMEROS ENTRE 1 Y 7........ "); } } Ejercicio 14 Hacer el algoritmo para un programa que calcule: - El valor del área de un triángulo, dada la base y la altura. - El valor de la base de un triángulo dada la altura y el área. - El valor de la altura de un triángulo dada la base y el área. Algoritmo Inicio Declare opcion, base, altura, area Leer opcion Seleccionar opcion Declare área, altura, base Caso 1 Leer base, altura area:base*altura)/2 Imprimir area Caso 2 Leer area, altura Base:*area/altura Imprimir base Caso 3 Leer area,base Altura:*area/base Imprimir altura Caso contrario Imprimir " ESO ES TODO AMIGO Fin selección Fin Variables opcion : 1 para calcular el área, 2 para calcular la base, 3 para calcular la altura. Base : Valor de la base del triangulo Altura : Valor de la altura del triangulo Area : Valor del area del triangulo Programa 30 mailxmail - Cursos para compartir lo que sabes #include main(void) {int operación; printf("EJERCICIOS DE LOS TRIÁNGULOS ........ \n"); printf("============================ \n\n\n"); printf("1 para calcular el área de un triángulo \n"); printf("2 para calcular la base \n"); printf("3 para calcular la altura \n\n"); printf("ingrese una opción ........ "); scanf("%d",&operación); switch(operación) { float área, altura, base; case 1: printf("AREA DEL TRIÁNGULO \n"); printf("ingrese la base ........ "); scanf("%f",&base); printf("ingrese la altura ........ "); scanf("%f",&altura); printf("el area del triángulo es %f ",base*altura/2); break; case 2: printf("BASE DE UN TRIÁNGULO \n"); printf("ingrese el area ........ "); scanf("%f",&area); printf("ingrese la altura ........ "); scanf("%f",&altura); printf("la base de area del triángulo es %f ",2*area/altura); break; case 3: printf("ALTURA DE UN TRIÁNGULO \n"); printf("ingrese el area ........ "); scanf("%f",&area); printf("ingrese la base ........ "); scanf("%f",&base); printf("la base de area del triángulo es %f ",2*area/base); break; default: printf(" nada mas ........ "); } } Ejercicio 14 Hacer el pseudocódigo para escribir un programa que calcule: el área de un triángulo, un trapecio, un rectángulo y el área de un triángulo en función de sus lados. Algoritmo En este caso usted puede guiarse del algoritmo del ejercicio 14 y escribir el proceso matemático respectivo para obtener el algoritmo buscado. Programa #include 31 mailxmail - Cursos para compartir lo que sabes #include main(void) {int operacion; printf("CALCULO DE AREAS ........ \n"); printf("============================ \n\n\n"); printf("1 para calcular el área de un triángulo \n"); printf("2 para calcular el área de un trapecio \n"); printf("3 para calcular el área de un rectángulo \n"); printf("4 para calcular el área de un triángulo en función de sus lados\n\n\n"); printf("ingrese el número que le corresponde al área que desea calcular ........ "); scanf("%d",&operacion); switch(operacion) { case 1: int bt,ht; printf("AREA DEL TRIÁNGULO \n"); printf("ingrese la base ........ "); scanf("%d",&bt); printf("ingrese la altura ........ "); scanf("%d",&ht); printf("el area del triángulo es %d ",bt*ht/2); break; case 2: int bmayt,bment,at; printf("AREA DEL TRAPECIO \n"); printf("ingrese la base mayor ........ "); scanf("%d",&bmayt); printf("ingrese la base menor ........ "); scanf("%d",&bment); printf("ingrese la altura del trapecio ........ "); scanf("%d",&at); printf("el area del trapecio es %d unidades",((bmayt+bment)/2)*at); break; case 3: int ac,hc; printf("AREA DE UN RECTANGULO \n"); printf("ingrese la ancho ........ "); scanf("%d",&ac); printf("ingrese la alttura ........ "); scanf("%d",&hc); printf("el area del cuadrado es %d ",ac*hc); break; case 4: int a,b,c; float s; printf("ÁREA DEL TRIÁNGULO EN FUNCIÓN DE SUS LADOS printf("ingrese lado a ........ "); scanf("%d",&a); printf("ingrese lado b ........ "); scanf("%d",&b); printf("ingrese lado c......... "); 32 \n"); mailxmail - Cursos para compartir lo que sabes scanf("%d",&c); s=(a+b+c)/2; printf("el area del triángulo es %f unidades",sqrt(s*(s-a)*(s-b)*(s-c))); break; default: printf(" nada mas ........ } } "); 33 mailxmail - Cursos para compartir lo que sabes 11. Bucles o estructuras repetitivas 5.3.1 BUCLE for Ejercicio 16 Hacer el algoritmo para un programa, que calcule la máxima área de un terreno rectangular de lados 100-2x y x respectivamente, para valores de x entre 10 y 30. Algoritmo Inicio Declare x, area Desde x=10 hasta x<=30 hacer Area=100-2*x Imprimir x, area Fin Desde Fin Variable X : asume valores desde 10 hasta 30. Area : asume el valor del área. Programa #include main(void) {int x; for(x=10; x<=30;x++) printf("%d unidades, para x=%d \n",x*(100-2*x),x); } NOTA: El mayor valor de área es 1250 para un valor de x =25 Ejercicio 17 Hacer el algoritmo para un programa que calcule el mayor y el menor número de 8 números ingresados por el teclado. Algoritmo Inicio Declare num, mayor, menor, x; mayor:0; menor:10000; Desde x=1 hasta x<=8 hacer leer num si mayornum entonces menor:num; Fin Desde Imprimir mayor, menor Fin Variables num : guarda un número ingresado mayor : Para asignarle el valor del mayor de los números leídos. 34 mailxmail - Cursos para compartir lo que sabes menor : Para asignarle el valor del menor de los números leídos x : Permite contar los 8 ingresos (valores desde 1 hasta 8). Programa #include main(void) {int num,mayor,menor,x; mayor=0; menor=10000; for(x=1; x<=8;x++) { printf("INGRESAR NÚMERO %d\n",x); scanf("%d",&num); if(mayornum) menor=num; } printf("NÚMERO MAYOR: %d MENOR: %d \n",mayor,menor); return 0; } Ejercicio 18 Hacer el algoritmo para el ejercicio 16, para encontrar solamente el valor de la mayor área e imprimir el valor de x para el esta área máxima. Algoritmo Inicio Declare area, x, maxarea, maxx maxarea:0; Desde x=10 hasta x<=30 hacer area:x*(100-2*x); si maxarea main(void) {int area, x; int maxarea,maxx; maxarea=0; for(x=10; x<=30;x++) { area=x*(100-2*x); if(maxarea #include #include int x,pht,nht,sexo,ptt,sumasm,sumasf; float sm,sf; main(void) {char nombre[20]; sumasm=0; sumasf=0; sm=0; sf=0; for(x=1; x<=6;x++) {printf("ingrese sexo 1 varon, 2 mujer\n "); scanf("%d",&sexo); if(sexo==1) {sm=sm+1; printf("ingrese nombre \n "); scanf("%s",&nombre); printf("ingrese nro de horas trabajadas \n"); scanf("%d",&nht); printf("ingrese pago por hora trabajada\n"); scanf("%d",&pht); ptt=nht*pht; printf("%s GANA %d SOLES \n\n",nombre,ptt); sumasm=sumasm+ptt;} else {sf=sf+1; printf("ingrese nombre \n "); scanf("%s",&nombre); printf("ingrese nro de horas trabajadas \n"); scanf("%d",&nht); printf("ingrese pago por hora trabajada\n"); scanf("%d",&pht); ptt=nht*pht; printf("%s GANA %d SOLES \n\n",nombre,ptt); sumasf=sumasf+ptt;} } printf("los HOMBRES GANAN TOTAL: %d SOLES, PROMEDIO: %f 37 mailxmail - Cursos para compartir lo que sabes printf("los HOMBRES GANAN TOTAL: %d SOLES, PROMEDIO: %f \n",sumasm,sumasm/sm); printf("las MUJERES GANAN TOTAL: %d SOLES, PROMEDIO: %f",sumasf,sumasf/sf); } Ejercicio 20 Escriba el algoritmo para un programa que imprima la suma de 15 elementos de la serie: 1/2 +3/4 +7/8 +15/16... Algoritmo Inicio Declare a, c, suma; a:1 suma:0.5 Desde c=1 hasta c<15 hacer a:a*2+1 suma:suma+(a/(a+1)) fin Desde imprimir suma Fin NOTA: Tenga en cuenta el bucle es de 14 repeticiones por que suma se inicializa en 0.5. Variables a : Asume los valores de los numeradores. c : Indica las 14 repeticiones. suma : Acumula el valor de la suma. Programa #include main(void) {float a,c,suma; a=1; suma=0.5; for(c=1;c<15;c++) {a=a*2+1; suma=suma+(a/(a+1));} printf("%lf",suma); } 38 mailxmail - Cursos para compartir lo que sabes 12. Bucles o estructuras repetitivas II Ejercicio 21 Escriba el algoritmo para un programa que calcule el factorial de un número n ingresado por el teclado. Algoritmo Inicio Leer c, num, fac Leer num Fac:1 Desde c=1 hasta c<=num hacer fac=fac*c Fin Desde Imprimir num, fac Fin Variables fac : acumulador del valor del factorial del numero ingresado. c : cuenta el número de repeticiones. num : el número cuyo factorial se va ha calcular. Programa #include main(void) {int c,num; float fac; printf("ingrese el número n para calcular su factorial "); scanf("%d",&num); fac=1; for(c=1;c<=num;c++) fac=fac*c; printf("el factorial de %d es %lf",num,fac); } Ejercicio 22 Para "Gaseosas Amazonía" escriba el algoritmo para un programa que procese e imprima la información de la nómina de sus diez empleados. Para cada caso, el programa debe leer el nombre, las horas de trabajo, el pago por hora normal y la edad. Ejemplo: Un grupo típico de datos podría ser: NOMBRE Juan Sopla N.H.T. 50 P.H. EDAD 5 57 El pago por hora después de las 40 horas de trabajo tiene un aumento equivalente al 50% del pago por hora normal. Así, un empleado que trabaja 50 horas a S/. 5.00 por hora tendrá un pago total de S/. 275.00. Al trabajador se le retiene un impuesto de la siguiente manera: 10 % de los primeros S/. 200.00 y 20 % de la cantidad adicional. La primera parte de la impresión en papel debe ser la información relevante de 39 mailxmail - Cursos para compartir lo que sabes cada empleado. Ejemplo: La segunda parte debe informar sobre el pago total promedio para los empleados de al menos 55 años. El nombre y el pago total para el empleado de menos de 55 años con máximo pago total (se puede suponer que no hay empate). Ejemplo La solución sería: Empleado menor de 55 años con máximo sueldo es Sergio con 460 soles. El promedio del sueldo para los empleados mayor de 55 años es: 342.667 soles Algoritmo Inicio Declare me, mp, promedio, nombre, nme, nht, ph, total, neto, impuesto, i, edad Leer me, mp, promedio, nombre, nme, nht, ph, total, neto, impuesto, i, edad mp:0; promedio:0; Desde i=1 hasta i=10 hacer leer nombre, nht, ph, edad si nht>40 entonces total:40*ph+(nht-40)*(ph+0.5*ph) si no total:nht*ph si total>200 entonces impuesto:200*0.1+(total-200)*0.2 si no impuesto:total*0.1 neto:total-impuesto imprimir nombre, nht, ph, edad imprimir total, impuesto, neto si edad>=55 entonces promedio:promedio+neto/3 si no si mp #include main(void) { float me,mp; float promedio; char nombre[20]; char nme[20]; float nht,ph; float total, neto,impuesto; int i,edad; mp=0; promedio=0; for(i=1;i<=10;i++) { printf("\n ingrese nombre: "); 7 scanf("%s",nombre); printf("Ingrese número de horas trabajadas: "); scanf("%f",&nht); printf("Ingrese el valor del pago por hora: "); scanf("%f",&ph); printf("Ingrese la edad: "); scanf("%d",&edad); if(nht>40) total=40*ph+(nht-40)*(ph+0.5*ph); else total=nht*ph; if(total>200) impuesto=200*0.1+(total-200)*0.2; else impuesto=total*0.1; neto=total-impuesto; printf("%s trabajo %lf horas, pago por hora %lf, edad %d años \n",nombre,nht,ph,edad); printf("total %lf, impuesto %lf, neto %lf soles ",total,impuesto,neto); if(edad>=55) promedio=promedio+neto/3; else { if(mp12 entonces condicion:1; naa:naa+1; si no condicion:2 fin si si condicion=1 entonces imprimir nombre, n1, n2, n3, promedio sino imprimir nombre, n1, n2, n3, promedio si promedio>=18 entonces na18:na18+1 Fin Desde Imprimir naa, na18 Fin Variables i : contador n1, n2, n3 : notas. Promedio : promedio de notas. naa : número de alumnos desaprobados. na18 : número de alumnos mayores de 18 años. nombre : nombre del alumno condición : asume valores 1 (aprobados), 2 desaprobados. Programa #include #include main(void) { int i,n1,n2,n3; float promedio; int naa,na18; char nombre[20]; int condicion; naa=0; na18=0;Y54E4332EWWWWWW for(i=1;i<=40;i++) {printf("ingrese el nombre "); 42 mailxmail - Cursos para compartir lo que sabes scanf("%s",nombre); printf("ingrese el nota1: "); scanf("%d",&n1); printf("ingrese el nota2: "); scanf("%d",&n2); printf("ingrese el nota3: "); scanf("%d",&n3); promedio=(n1+n2+n3)/3; if(promedio>12) {condicion=1; naa=naa+1; } else { condicion=2; } if(condicion==1) printf("%s nota1: %d nota2: %d, Nota3: %d, promedio: %lf condicion :aprobado \n",nombre,n1,n2,n3,promedio); else printf("%s nota1: %d nota2: %d, Nota3: %d, promedio: %lf condicion :desaprobado \n",nombre,n1,n2,n3,promedio); if(promedio>=18) na18=na18+1; } printf("hay aprobados: %d y aprobados con mas de 18 %d:\n",naa,na18); } Ejercicio 24 Escriba el algoritmo para un programa que calcule la suma de n de términos ingresado por el teclado de la serie 5/6,11/12,23/14,..... Algoritmo Inicio Declare i, n, num, suma Leer n Suma:0; Num:2; Desde i=1 hasta i<=n hacer Num:num*2+1 Suma:suma+num/(num+1) Fin Desde Imprimir suma Fin Variables i : Contador n : Numero de términos de la serie num : valor del numerador de la serie suma : Acumulador de la suma Programa #include main(void) { int i,n; float num,den,suma; printf("ingrese la cantidad de términos "); 43 mailxmail - Cursos para compartir lo que sabes scanf("%d",&n); suma=0; num=2; for(i=1;i<=n;i++) {num=num*2+1; suma=suma+num/(num+1); } printf("suma %lf ",suma); } for ANIDADO Ejercicio 25 Hacer el algoritmo para un programa que imprima 3 grupos, 5 veces "CHACHAPOYAS" en cada grupo. Antes de cada grupo deberá decir "HOLA". Algoritmo Inicio Declare n, m Desde n=1hasta n<=3 hacer Imrpimir "HOLA" Desde m=1 hasta m<=5 hacer Imprimir "CHACHAPOYAS" Fin Desde Fin Desde Fin Variables n, m : Variables contadores Programa #include int n,m; main(void) { for(n=1;n<=3;n++) { printf(" HOLA \n"); for(m=1;m<=5;m++) printf("CHACHAPOYAS \n"); } } COMENTARIO: Este es un ejemplo de un for anidado. 44 mailxmail - Cursos para compartir lo que sabes 13. Bucles while Ejercicio 26 Usando la instrucción mientras hacer un algoritmo para un programa que imprima la serie 1, 3, 5, 7,9. Algoritmo Inicio Declare I Leer i i 1 mientras i<=9 hacer imrimir i i i+2 fin mientras Fin Variables i : Contador Programa #include main(void) { int i; i=1; while(i<=9) { printf(" \n número= %d", i); i=i+2; } } Ejercicio 27 Hacer un algoritmo para un programa que encuentre el primer entero que haga que la suma de la serie 1, 2, 3, 4, 5, 6, 7, 8,9,...; supere 30. Algoritmo Inicio Declare i, suma leer i, suma i 0 suma 0 mientras suma<=30 hacer i i+1 suma suma+i fin mientras imprimir i Fin Variables i : Contador 45 mailxmail - Cursos para compartir lo que sabes suma : acumulador del valor de la suma Programa #include main(void) { int i,suma; i=0; suma=0; while(suma<=30) { i=i+1; suma=suma+i; } printf(" \n número= %d", i); } Ejercicio 28 CONJETURA DE ULAM: Empiece con cualquier número entero positivo. Si es par divídalo entre 2; y si es impar multiplique por 3 y aumente en 1. Obténgase enteros positivos repitiendo el proceso hasta llegar a 1. Ejemplo si empezamos en 5 la serie sería: 5, 16, 8, 4, 2, 1. Haga el algoritmo para un programa que nos permita obtener secuencias de números como las anteriores. Algoritmo Inicio Declare i, num leer num mientras num>1 hacer si num modulo 2 = 0 entonces num num/2 sino num num*3+1 imprimir num fin mientras Fin Variables i : contador num : numero ingresado Programa #include main(void) { int i,num; printf("ingrese un número.. "); scanf("%d",&num); while(num>1) { if(num%2==0)num=num/2; else num=num*3+1; printf(" \n número= %d", num); } } 46 mailxmail - Cursos para compartir lo que sabes Ejercicio 29 Hacer el algoritmo para un programa que calcule la suma de ciertos números ingresados por el teclado. El cálculo de la suma se hará en cualquier momento. Algoritmo Inicio Declare suma, num Suma 0 Mientras num <> 0 hacer Leer num Suma suma+num Fin mientras Imprimir suma Fin Variables suma : acumulador de la suma num : numero ingresado Programa #include main(void) {int suma,num; suma=0; printf("CUANDO PULSE 0, TERMINA EL PROGRAMA.. \n"); while(num!=0) { printf(" ingrese un número.. "); scanf("%d",&num); suma=suma+num; } printf(" \n la suma es= %d", suma); } Ejercicio 30 Escribir un algoritmo para un programa que imprima la siguiente tabla de temperaturas Fahrenheit y Celsius. Sugerencia °F °C 32 0 34 1,1111 36 2,2222 ... ... 100 37,778 Algoritmo Inicio Declare fareng, cel fareng 30 Mientras fareng<=100 hacer Cel (fareng-32)*5/9 fareng fare+2 imprimir fareng, cel 47 mailxmail - Cursos para compartir lo que sabes imprimir fareng, cel Fin mientras Fin Variables fareng: valor numérico de los grados farengheit ingresado cel : valor numérico de los grados celcius calculado Programa #include main(void) {int fare; float cel; fare=30; while(fare<=100) { cel=(fare-32)*5/9; fare=fare+2; printf(" %d grados farengheit es igual a %lf grados celcius \n",fare,cel); } } 48 mailxmail - Cursos para compartir lo que sabes 14. Bucles while II Ejercicio 31 Escriba el algoritmo para un programa que evalúe la función , donde x toma los valores de 1 a 2 en pasos de 0.1. Para cada valor de x la salida debe dar el valor de y el mensaje POSITIVO o NEGATIVO según el caso. Ejm: si y= 1.0 POSITIVO, Y=-1 NEGATIVO. Algoritmo Inicio Declare a, y A 1 Mientras a<2.1 hacer y 4*a*a-16*a+15 a a+0.1 si y>0 entonces imprimir y, "POSITIVO" sino imprimir y, "NEGATIVO" fin si Fin mientras Fin Variables a : Toma los valores de x desde a hasta 2 y : Toma los valores de la expresión para cada valor de a. Programa #include main(void) {float a,y; a=1; while(a<2.1) { y=4*a*a-16*a+15; a=a+0.1; if(y>0) printf(" %lf POSITIVO\n",y); else printf(" %lf NEGATIVO\n",y); } } USO DE CENTINELA Se usan centinelas para salir de los bucles en cualquier instante que uno desee, un centinela es una variable que inicialmente adopta un valor, luego dentro de un bucle este valor cambia, por lo que nos vemos obligados a abandonarlos. Lo anterior se comprende a través del ejercicio 32 Ejercicio 32 Escriba el algoritmo para un programa de nómina usando un ciclo mientras con centinela. Para cada empleado, el programa debe leer el nombre, sexo, horas de trabajo, sueldo por hora e imprimir el pago. La segunda parte debe imprimir el pago promedio para las mujeres y el pago promedio para los hombres. Algoritmo 49 mailxmail - Cursos para compartir lo que sabes Inicio Declare pht, nht, sexo, ptt, sumasm, sumasf, sm, sf, nombre, centinela Sumasm 0 Sumasf 0 Sm 0 Sf 0 Mientras centinela <> 1 hacer Leer sexo Si sexo<>1 o sexo <> 2 entonces Centinela 1 //aquí se origina la salida Sm 1 Sf 1 sino si sexo=1 entonces sm sm+1 leer nombre, nht, pht ptt nht*pht imrpimir nombre,ptt sumasm sumasm+ptt else sf sf+1 leer nombre, nht, pht ptt nht*pht imrpimir nombre, ptt sumasf sumasf+ptt fin si Fin Si Fin mientras Imprimir sumasm, sumasm/sm Imprimir sumasf, sumasf/sf Fin Variables pht : valor del pago por hora trabajada. nht : cantidad de horas trabajadas. sexo : valor numérico que indica (1 masculino, 2 femenino) ptt : valor del pago por persona. sumasm: guarda la suma de pagos a los varones. sumasf: guarda la suma de pagos a las mujeres. sm : guarda la cantidad de varones ingresados. sf : guarda la cantidad de mujeres ingresadas. nombre: guarda los nombres de las personas. centinela: valor numérico que permite finalizar el programa. Comentario: para este caso cualquier número asignado a la variable sexo, diferente de 1 o 2, hará que la variable centinela se cargue a 1, hecho que obligará la salida del sistema. Programa #include int x,pht,nht,sexo,ptt,sumasm,sumasf; float sm,sf; main(void) {char nombre[20]; 50 mailxmail - Cursos para compartir lo que sabes int centinela; sumasm=0; sumasf=0; sm=0; sf=0; while(centinela!=1) {printf("ingrese sexo 1 varon, 2 mujer 3 Salir \n "); scanf("%d",&sexo); if(sexo!=1 || sexo!=2 ) {centinela=1; sm=1; sf=1;} else { if(sexo==1) {sm=sm+1; printf("ingrese nombre \n "); scanf("%s",&nombre); printf("ingrese nro de horas trabajadas \n"); scanf("%d",&nht); printf("ingrese pago por hora trabajada\n"); scanf("%d",&pht); ptt=nht*pht; printf("%s GANA %d SOLES \n\n",nombre,ptt); sumasm=sumasm+ptt;} else {sf=sf+1; printf("ingrese nombre \n "); scanf("%s",&nombre); printf("ingrese nro de horas trabajadas \n"); scanf("%d",&nht); printf("ingrese pago por hora trabajada\n"); scanf("%d",&pht); ptt=nht*pht; printf("%s GANA %d SOLES \n\n",nombre,ptt); sumasf=sumasf+ptt;} } } printf("los HOMBRES GANAN TOTAL: %d SOLES, PROMEDIO: %f \n",sumasm,sumasm/sm); printf("las MUJERES GANAN TOTAL: %d SOLES, PROMEDIO: %f",sumasf,sumasf/sf); } Ejercicio 33 Las potencias de 2 son: 1, 2, 4, 8,16,..... Para obtener la siguiente potencia se multiplica la anterior por 2. Escribir el algoritmo para un programa que imprima la primera potencia de 2 que pasa de 1000. Algoritmo Inicio Declare potencia, e Potencia 1 51 mailxmail - Cursos para compartir lo que sabes e0 mientras potencia<=1000 hacer potencia potencia*2 e e+1 //e es el exponente fin mientras imprimir e Fin Variables potencia: acumula el producto de la variable potencia y el número 2. e : guarda el valor del exponente. Programa #include main(void) { int potencia,e; potencia=1; e=0; while(potencia<=1000) { potencia=potencia*2; e=e+1; //e es el exponente } printf("%d",e); } NOTA: Ciertamente es 10, porque 210 = 1024 Ejercicio 34 Escriba un algoritmo para un programa en el que el usuario debe introducir enteros positivos entre 1 y 5. El programa debe informar al usuario cuando haya escrito un número que hace que la suma pase de 21, imprimiendo la suma y el último entero introducido y el mensaje "mas de 21". Algoritmo Inicio Leer suma, num Suma 0 Mientras suma<=21 hacer leer num si num>=1 y num<=5 entonces suma suma+num fin si fin mientras imprimir suma, num Fin Variables suma : el valor de suma acumulada num : numero ingresado Programa #include main(void) { 52 mailxmail - Cursos para compartir lo que sabes int suma,num; suma=0; printf("INGRESE NÚMEROS ENTRE 1 y 5 \n"); while(suma<=21) { printf("ingrese un número "); scanf("%d",&num); if(num>=1 && num<=5) {suma=suma+num;} } printf("\ n SUMA: %d, NÚMERO: %d",suma,num); } Ejercicio 35 Escriba el algoritmo para un programa que imprima la sucesión completa de ULAM para un entero de entrada, si la longitud de toda la sucesión es no más de 10. En caso contrario sólo se imprimirá los 10 primeros enteros de la sucesión. Haga las pruebas de mano para sucesiones de menores de 10 números iguales a 10 y mayores de 10. Ejemplo 5: 16, 8, 4, 3, 1. 25: 76, 38, 19, 58, 29, 88, 44, 22, 11,34. Algoritmo Inicio Declare c, num Leer num c 1; mientras num>1 y c<=10 hacer si num modulo 2=0 entonces num num/2 sino num num*3+1 fin si imprimir num c c+1 fin mientras Fin Variables c : contador num : número que se imprimirá Programa #include main(void) { int c,num; printf("ingrese un número.. "); scanf("%d",&num); c=1; while(num>1 && c<=10) { if(num%2==0)num=num/2; else num=num*3+1; 53 mailxmail - Cursos para compartir lo que sabes printf(" \n número= %d", num); c=c+1; } } 54 mailxmail - Cursos para compartir lo que sabes 15. bucles while III Ejercicio 36 ex se puede expresar como la siguiente serie infinita. Si se considera 1 como el término 0, x como el primer término, como el segundo término, como el tercer término, etc; entonces el término n es igual al término n-1 multiplicado por . Haga el algoritmo para un programa basado en esta serie para encontrar una aproximación a . El programa debe parar cuando el último término sumando sea menor de 0.0001. Compruebe el programa para y compare con el valor de la función que devuelve este valor ( ) en cualquier lenguaje de programación. Algoritmo Inicio Declare t, a, n, e, x Leer x n 2 t x e 1+x mientras t>0000.1 hacer t t*(x/n) e e+t n n+1 fin mientras imprimir x, e Fin Variables t : valor del término n : posición del término e : acumulador de t x : valor del exponente ingresado Programa #include main(void) {float n, t,e; float x; printf("ingrese el valor de x.. "); scanf("%f",&x); n=2; t=x; e=1+x; while(t>0000.1) { t=t*(x/n); e=e+t; n=n+1; 55 mailxmail - Cursos para compartir lo que sabes } printf(" \n e a la %f es = %lf", x,e); } Ejercicio 37 Escriba el algoritmo para un programa que cuente el número de cifras de un entero de entrada hasta 32000. Así para una entrada de 583 la salida debe ser "3 cifras", asegúrese que el programa funcione para 1 y 10. Para cero la salida debe ser "UNA CIFRA". El programa no debe cerrarse hasta ingresar el número 0. Algoritmo Inicio Declare x Mientras x<32000 y x<>0 hacer Leer x Si x>=0 y x<10 entonces imprimir x, "TIENE 1 CIFRA" Fin si Si x>9 y x<100 entonces imprimir x, "TIENE 2 CIFRAS" Fin si Si x>99 y x<1000 entonces imprimir x, "TIENE 3 CIFRAS" Fin si Si x>999 y x< 10000 entonces imprimir x, "TIENE 4 CIFRAS" Fin si Si x>9999 y x<=32000 entonces imprimir "TIENE 5 CIFRAS" Fin si Fin mientras Fin Variables x : valor ingresado Programa #include main(void) { int x; printf("PULSE 0 PARA TERMINAR Y OTRO NÚMERO PARA CONTINUAR"); while(x<32000 && x!=0) {printf("\n ingrese un número "); scanf("%d",&x); if(x>=0 && x<=9) printf("%d TIENE 1 CIFRA",x); else if(x>=10 && x<=99) printf("%d TIENE 2 CIFRAS",x); else if(x>=100 && x<=999) printf("%d TIENE 3 CIFRAS",x); else if(x>=1000 && x<=9999) printf("%d TIENE 4 CIFRAS",x); else if(x>=10000 && x<=32000) printf("%d TIENE 5 CIFRAS",x); } } Ejercicio 38 Escriba el algoritmo para un programa en el que se pida al usuario ingresar 10 números enteros impares para sumarlos. Elabore el programa de manera que no se arruine si el usuario escribe algunos enteros pares. El programa debe salir del ciclo e imprimir la suma sólo cuando se hayan ingresado los 10 enteros impares. Algoritmo Inicio Declare x, suma, c Mientras e(c<10) 56 mailxmail - Cursos para compartir lo que sabes Leer x si x modulo 2 <>0 entonces suma suma+x c c+1 fin si Fin mientras imprimir suma Fin Variables x : valor ingresado suma : acumulador de los valores de x c : contador de números impares. Programa #include int x,suma,c; main(void) { printf("INGRESE 10 NÚMEROS IMPARES \n"); while(c<10) {printf("ingrese un número "); scanf("%d",&x); if(x%2!=0) {suma=suma+x; c=c+1;} } printf("la suma es %d ",suma); } Ejercicio 39 Hacer un algoritmo para un programa que imprima todos los números primos entre 2 números ingresados por el teclado. Ejemplo: primer número = 5 Último número =15 Resultado =5, 7, 11, 13 Algoritmo Inicio Declare i, n1, n2, j Leer n1, n2 Desde i=n1 hasta i<=n2 hacer j 2 mientras i modulo j <>0 hacer j=j+1 Si i=j entonces imprimir i Fin si Fin mientras Fin Desde Fin Variables i : contador, número primo j : contador 57 mailxmail - Cursos para compartir lo que sabes n1 : primer numero del rango n2 : segundo numero del rango Programa #include main(void) { int i,n1,n2,j; printf("ingrese el primer número "); scanf("%d",&n1); printf("ingrese el segundo número "); scanf("%d",&n2); for(i=n1;i<=n2;i++) {j = 2 ; while(i%j!=0) { j=j+1; if(i==j) printf(" %d ",i); } } } Comentario: Los i son los números primos, entre n1 y n2. 58 mailxmail - Cursos para compartir lo que sabes 16. Funciones y procedimientos Ejercicio 40 Hacer un algoritmo para un programa que calcule el cubo de un número ingresado. Algoritmo Los dos algoritmos hacen lo mismo, el algoritmo tiene una línea de menos. Programa #include float num; float res, cubo(int x); main() { printf("ingrese un número "); scanf("%f",&num); res=cubo(num); printf("%f al cubo es: %f",num,res); return 0; } float cubo(int x) {return x*x*x;} Ejercicio 41 Hacer un algoritmo para un programa que evalúe la expresión Algoritmo Inicio Declare b, e Declare potencia(m, n) Leer b, e Imprimir potencia(b, e) Fin Función potencia(m, n) Inicio Declare i, y y 1 Desde i=1 hasta i<=abs(n) hacer y y*m 59 mailxmail - Cursos para compartir lo que sabes si n<0 entonces y 1/y fin si Fin Desde potencia y Fin Variables potencia: es una función b : valor ingresado e : valor ingresado m : toma valores de b n : toma valores de e i : contador y : guarda el valor buscado. Programa #include #include int b,e; float potencia(int m, int n); main(void) { printf(" INGRESE DOS NÚMEROS.. "); scanf("%d %d",&b,&e); printf("%f",potencia(b,e)); } float potencia(int m, int n) {int i; float y; y=1; for(i=1;i<=abs(n);i++) y=y*m; if(n<0) y=1/y; return y; } Ejercicio 42 Hacer un algoritmo para un programa que calcule el área de círculo y longitud de circunferencia. Utilizar procedimientos. Algoritmo Inicio Declare r; Declare circulo(m) Leer r circulo(r) Fin Procedimiento circulo(m) Inicio Declare pi Pi 3.1416 Imprimir pi*m*m 60 mailxmail - Cursos para compartir lo que sabes Imprimir 2*pi*m Fin Variables r : valor ingresado Circulo : funcion m : toma el valor de r pi : guarda el valor 3.1416 Programa #include int r; void circulo(int m); main(void) { printf(" INGRESE EL VALOR DEL RADIO.. "); scanf("%d",&r); circulo(r); // llamada a un procedimiento } void circulo(int m) // procedimiento {float pi; pi=3.1416; printf("AREA: %f \n",pi*m*m); printf("LONGITUD: %f",2*pi*m); } Ejercicio 43 Hacer un algoritmo para un programa que intercambie los valores de dos variables. Algoritmo Inicio Declare intercambio(x, y) Declare temp, a, b Leer a, b Intercambio(a, b); Fin Procedimiento intercambio(x, y) Inicio Temp x Xy Y temp Imprimir x, y Fin Variables temp. : temporal a : valor ingresado b : valor ingresado x : toma el valor de a y : toma el valor de b intercambio: procedimiento Programa 61 mailxmail - Cursos para compartir lo que sabes Programa #include void intercambio(int x,int y); int temp,a,b; main(void) { printf("ingrese a: "); scanf("%d",&a); printf("ingrese a: "); scanf("%d",&b); intercambio(a,b); } void intercambio(int x, int y) { temp=x; x=y; y=temp; printf("nuevos avlores de a:=%d y b:=%d",x,y); } COMENTARIO: En este caso vea usted la variable temp no esta declarada dentro del procedimiento intercambio. Esto significa que la variable temp es una variable global. El ejercicio 43 no puede ser solucionado usando funciones, la única manera es a través de procedimientos, es decir una función que no devuelve ningún valor. Ejercicio 44 Hacer un algoritmo para un programa que calcule el factorial de un número n Algoritmo Inicio Declare n Declare factorial(a) Leer n Imprimir factorial(n) //llamada a la función. Fin Función factorial(a) Inicio si a=0 o a=1 entonces factorial 1 //semilla 1 sino factorial a*factorial(a-1) //aquí el llamado es nuevamente a la función factorial(a), hasta que a=0 o a=1 Fin si Fin Variables n : valor que se ingresa para calcular su factorial a : toma el valor de n factorial : función Programa #include int n,factorial(int a); main(void) { 62 mailxmail - Cursos para compartir lo que sabes { printf(" INGRESE EL NÚMERO.. "); scanf("%d",&n); printf("%d",factorial(n)); // llamada a la función } int factorial(int a) { if(a==0 ||a==1) return 1; //semilla 1 else return a*factorial(a-1); //el llamado es nuevamente a la funcion factorial(a), hasta que a=0 o a=1. } EXPLICACIÓN: Mediante un ejemplo Ejercicio 45 Hacer un algoritmo para un programa que calcule el enésimo elemento de la serie FIBONACII. 1, 1, 2, 3, 5, 8,13,... Algoritmo Inicio Declare n Declare fibonacii(x) Leer n Imprimir n, fibonacii(n) } Funcion fibonacii(x) Inicio si x=0 ó x=1 entonces fibonacii 1 //semilla sino fibonacii fibonacii(x-2)+fibonacii(x-1); //esta llamando nuevamente a la función fibonacii(x) hasta que x=0 o x=1. Fin si Fin Variables n : enésimo elemento de la serie fibonacii x : toma valores de n fibonacii : función Programa #include int n; int fibonacii(int x); main(void) { 63 mailxmail - Cursos para compartir lo que sabes { printf(" INGRESE LA POSICION DEL ELEMENTO .. "); scanf("%d",&n); printf("FIBONACII DE %d es %d",n,fibonacii(n)); } int fibonacii(int x) { if(x==0 || x==1)return 1; //semilla else return fibonacii(x-2)+fibonacii(x-1); //está llamando nuevamente a la función fibonacii(x) hasta que x=0 o x=1. } EXPLICACIÓN Sea la función fibonacii f(4) Ejercicio 46 Hacer un algoritmo que calcule el enésimo elemento de la serie: 4, 6, 10, 16, 26, 42,... Algoritmo Inicio Declare n Declare elemento(x) Leer n Imprimir n, elemento(n) Fin Función elemento(x) Inicio Si x=0 entonces elemento 4 fin si //semilla Si x=1 entonces elemento 6 //semilla Sino elemento elemento(x-2)+elemento(x-1) //recursividad Fin si Fin Variables n : enésimo elemento de la serie x : toma valores de n elemento : función Programa #include 64 mailxmail - Cursos para compartir lo que sabes int n; int elemento(int x); main(void) { printf(" INGRESE LA POSICIÓN DEL ELEMENTO .. "); scanf("%d",&n); printf("ELEMENTO DE %d es %d",n,elemento(n)); } int elemento(int x) { if(x==0)return 4; //semilla if(x==1)return 6; //semilla else return elemento(x-2)+elemento(x-1); //recursividad } Ejercicio 47 Hacer un algoritmo para un programa que calcule el enésimo elemento de la serie: 1, 1, 2, 4, 7, 13, 24, 44,... Algoritmo Inicio Declare n Declare elemento(x) Leer n Imprimir n, elemento(n) Fin Función elemento(x) Inicio Si x=0 entonces elemento 1 Fin si//semilla Si x=1 entonces elemento 1 Fin si//semilla Si x=2 entonces elemento 2 //semilla Sino elemento elemento(x-3)+elemento(x-2)+elemento(x-1); //recursividad Fin Variables n : enésimo elemento de la serie fibonacii x : toma valores de n elemento : función Programa #include int n; int elemento(int x); main(void) { printf(" INGRESE LA POSICIÓN DEL ELEMENTO .. "); scanf("%d",&n); printf("ELEMENTO DE %d es %d",n,elemento(n)); } int elemento(int x) 65 mailxmail - Cursos para compartir lo que sabes { if(x==0)return 1; //semilla if(x==1)return 1; //semilla if(x==2)return 2; //semilla else return elemento(x-3)+elemento(x-2)+elemento(x-1); //recursividad } 66 mailxmail - Cursos para compartir lo que sabes 17. Llamada a funciones recursivamente Ejercicio 48 Hacer un algoritmo para un programa que halle el elemento n de la serie, 2n: 1 2 4 8 16 32 64 128 ... para n = 0,1,2,3,4,5,6,7,8, .... ; También diseñe una función que regrese el exponente correspondiente a la potencia 2n. Algoritmo Inicio Declare n, potencia Declare potenciadedos(x), exponente(valor) Leer n Potencia potenciadedos(n) Imprimir n, potencia Imprimir potencia, exponente(potencia) Fin Función potenciadedos(x) Inicio Si x=0 entonces potenciadedos 1 Sino potenciadedos 2*potenciadedos(x-1) Fin si Fin Función exponente(valor) Inicio Si valor=1 entonces exponente 0 Sino exponente exponente(valor/2)+1 Fin si Fin Variables n : valor ingresado X : toma valor de n valor : toma el valor de la variable potencia potencia : valor de la potencia del témino n potenciadedos : función exponente : función Programa #include int n; int potenciadedos(int x), exponente(int valor); int potencia; main(void) { printf(" INGRESE LA POSICIÓN DEL ELEMENTO .. "); scanf("%d",&n); potencia=potenciadedos(n); printf("2 a la %d es %d",n,potencia); printf("%d es 2 a la %d",potencia, exponente(potencia)); } 67 mailxmail - Cursos para compartir lo que sabes int potenciadedos(int x) { if(x==0)return 1; else return 2*potenciadedos(x-1); } int exponente(int valor) { if(valor==1)return 0; else return 1+exponente(valor/2); } COMENTARIO: ambos procesos son recursivos En el caso del ejercicio anterior tal vez no note lo que sucede con la función exponente, ya que la posición que se ingresa representa el exponente. Vea el ejercicio 49 y lograra comprenderlo mejor. Ejercicio 49 Compruebe el siguiente algoritmo ingresando valores resultados de la potencia de 2, ejemplo: 256, 32, 1024, etc. y verá la importancia de la función exponente. Algoritmo Inicio Declare n Declare exponente(valor) Leer n Imprimir n, exponente(n) Fin Funcion exponente(valor) Inicio Si valor=1 exponente 0 Sino exponente exponente(valor/2)+1 Fin si Fin Variables n : valor ingresado exponente : función valor : toma el valor de n Programa #include int exponente(int valor); int potencia; main(void) { printf(" INGRESE VALOR POTENCIA DE 2 .. "); scanf("%d",&potencia); printf("%d es 2 a la %d",potencia, exponente(potencia)); } int exponente(int valor) { 68 mailxmail - Cursos para compartir lo que sabes if(valor==1)return 0; else return 1+exponente(valor/2); } Ejercicio 50 Desarrollar el ejercicio 14, usando funciones y procedimientos. Algoritmo usando funciones Inicio Declare opcion, base, altura, area Leer opcion Seleccionar opcion Caso 1 Leer base, altura Imprimir area(base, altura) Caso 2 Leer area, altura Imprimir base(area,altura) Caso 3 Leer area, base Imprimir altura(area,base) Fin selección Fin Función area(base,altura) Inicio Area base*altura/2 Fin Función base(area, altura) Inicio base 2*area/altura Fin Función altura(area,base) Inicio altura 2*area/base Fin Variables opcion : para saber cual es calculo a realizar. base : valor de la base, también es función altura : valor de la altura, también es función area : valor del área, también es función Comentario: algunas variables pueden funcionar como tal o como funciones, en este problema, fíjese por que. Programa usando funciones #include int operacion; float area(int b,int h); float base(int a, int h); float altura(int a,int b); 69 mailxmail - Cursos para compartir lo que sabes main(void) { printf("EJERCICIOS DE LOS TRIÁNGULOS ........ \n"); printf("============================ \n\n\n"); printf("1 para calcular el área de un triángulo \n"); printf("2 para calcular la base \n"); printf("3 para calcular la altura \n\n"); printf("ingrese una opcion ........ "); scanf("%d",&operacion); switch(operacion) { float a,b,h; case 1: printf("AREA DEL TRIÁNGULO \n"); printf("ingrese la base ........ "); scanf("%f",&b); printf("ingrese la altura ........ "); scanf("%f",&h); printf("%f",area(b,h)); break; case 2: printf("AREA DEL TRIÁNGULO \n"); printf("ingrese el area ........ "); scanf("%f",&a); printf("ingrese la altura ........ "); scanf("%f",&h); printf("%f",base(a,h)); break; case 3: printf("AREA DEL TRIÁNGULO \n"); printf("ingrese el area ........ "); scanf("%f",&a); printf("ingrese la base ........ "); scanf("%f",&b); printf("%f",altura(a,b)); break; default: printf(" nada mas ........ } "); } float area(int b,int h) {return b*h/2;} float base(int a, int h) {return 2*a/h;} float altura(int a,int b) {return 2*a/b;} 70 mailxmail - Cursos para compartir lo que sabes 18. Algoritmo usando procedimiento Inicio Declare area, base, altura Seleccionar opcion Caso 1 Area() Caso 2 Base() Caso 3 Altura() Fin selección Fin Procedimiento area Inicio Declare area, base, altura Leer base, altura Area base*altura/2 Mostrar area Fin Procedimiento base Inicio Declare area, base, altura Leer area, altura base 2*area/altura mostrar base Fin Procedimiento altura Inicio Declare area, base, altura Leer area,base altura 2*area/base mostrar altura Fin Variables opcion : para saber cual es calculo a realizar. base : valor de la base, también es procedimiento altura : valor de la altura, también es procedimiento area : valor del área, también es procedimiento Programa usando procedimiento #include int operacion; void area(); void base(); void altura(); main(void) { printf("EJERCICIOS DE LOS TRIÁNGULOS ........ \n"); 71 mailxmail - Cursos para compartir lo que sabes printf("EJERCICIOS DE LOS TRIÁNGULOS ........ \n"); printf("============================ \n\n\n"); printf("1 para calcular el área de un triángulo \n"); printf("2 para calcular la base \n"); printf("3 para calcular la altura \n\n"); printf("ingrese una opcion ........ "); scanf("%d",&operacion); switch(operacion) { case 1: area(); break; case 2: base(); break; case 3: altura(); break; default: printf(" nada mas ........ } } "); void area() { float altura, base; printf("AREA DEL TRIÁNGULO \n"); printf("ingrese la base ........ "); scanf("%f",&base); printf("ingrese la altura ........ "); scanf("%f",&altura); printf("el area del triángulo es %f ",base*altura/2); } void base() { float area,altura; printf("BASE DE UN TRIÁNGULO \n"); printf("ingrese el area ........ "); scanf("%f",&area); printf("ingrese la altura ........ "); scanf("%f",&altura); printf("la base de area del triángulo es %f ",2*area/altura); } void altura() { float area,base; printf("ALTURA DE UN TRIÁNGULO printf("ingrese el area ........ "); scanf("%f",&area); printf("ingrese la base ........ "); \n"); 72 mailxmail - Cursos para compartir lo que sabes scanf("%f",&base); printf("la base de área del triángulo es %f ",2*area/base); } 73 mailxmail - Cursos para compartir lo que sabes 19. Apéndice EJERCICIO PROPUESTO EJERCICIO 1: Desarrollar un algoritmo para un programa que imprima 40 números generados aleatoriamente distintos entre 1 y 40. Sugerencia use un arreglo. Ejemplo de resultados: - 29, 26, 17, 33, 25, 18, 37, 23, 13, 3, 24, 1, 11, 22, 7, 21, 10, 31, 6, 2, 4, 15, 27, 19, 38, 40, 14, 34, 32, 36, 8, 30, 35, 28, 5, 9, 20, 39, 16, 12. - 16, 13, 4, 20, 12, 5, 24, 11, 10, 40, 30, 28, 38, 9, 34, 8, 37, 18, 29, 31, 2, 14, 39, 6, 25, 27, 21, 19, 23, 35, 17, 22, 7, 1, 15, 32, 36, 3, 33, 26 Con el mismo procedimiento usted puede generar una cantidad mayor de números para comprobar la verdadera capacidad de microprocesamiento de su computador. CÓDIGO ASCII Pulse la tecla Alt y escriba el número -en el bloque de números del teclado-correspondiente a la columna de los ASCII para obtener el símbolo requerido. BIBLIOGRAFÍA 74 mailxmail - Cursos para compartir lo que sabes - SCHILDT, H. Programación en Turbo C. Primera Edición en español. McGRAW HILL/INTERAMERICANA DE ESPAÑA. España. 1998. - JOYANES AGUILAR,J. Fundamentos de programación. Algoritmos y Estructura de Datos. Primera Edición. McGRAW HILL/INTERAMERICANA DE ESPAÑA. España. 1998. - MAYNARD KONG. Lenguaje de Programación C. Fondo editorial de la Pontificia Universidad Católica del Perú. Lima. 1987. - HENNEFELD, J. Turbo Pascal con Aplicaciones 3.0, 4.0, y 5,0. PWS Publishers. Estados Unidos de América. 1989. 75