Está en la página 1de 75

mailxmail - Cursos para compartir lo que sabes

Algoritmos y lenguaje C
Autor: abraham sopla

mailxmail - Cursos para compartir lo que sabes

Presentacin del curso


Este curso pretende dar a conocer las explicaciones ms simples del trabajo de los ordenadores. Puedes descubrir cada paso que realizan, cmo lo realizan, qu es lo qu utilizan y en qu orden lo utilizan.

mailxmail - Cursos para compartir lo que sabes

1. Introduccin
En educacin superior quien lleve un curso de Lenguajes de Programacin, tcnicas de programacin, 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 lneas de cdigo 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 botn ordenar de la barra de herramientas y listo. Quin sabe como calcula el trmino n de una sucesin de nmeros?, etc, sinceramente una serie de problemas. Todos intentamos manejar las computadoras -usarlas- para resolver problemas, sin antes hacer por lo menos un pequeo plan acerca de la solucin o tantear el camino a seguir para llegar a la solucin de una situacin 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 sern usando pseudocdigo e implementados en lenguaje C, tratando de no llegar a complicaciones en el uso del lenguaje. En los primeros captulos del libro, encontramos teora 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 ms bien en el uso del mismo en la resolucin de problemas comunes. Segn 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 educacin superior en carreras de Ingeniera de Sistemas, computacin e informtica, electrnica, 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 ms bien tengan en sus manos un material de ayuda.

mailxmail - Cursos para compartir lo que sabes

2. Indicaciones para principiantes


1.1 PSEUDOCDIGO El pseudocdigo es un lenguaje general, de especificacin de la solucin del problema mediante un algoritmo. Se considera como el paso anterior a la codificacin. La ventaja es que, este lenguaje puede ser traducido indistintamente y sin problemas a cualquier lenguaje de programacin de computadora. Un algoritmo es una secuencia de pasos lgicos que nos conducen hacia la solucin de un determinado problema. Nosotros haremos los algoritmos usando un lenguaje comn, el ms 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 ms importante antes de empezar a escribir un programa es necesario hacer el algoritmo. Lgicamente, si ya tiene el programa que soluciona un problema, ya no necesita hacerle un algoritmo; pero si de situaciones acadmicas se trata, hacer el algoritmo, teniendo el programa no necesita de ningn esfuerzo, solamente pegarse a algunas reglas y trminos de pseudocdigo, 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, despus dice, esta mal planteada la pregunta, y raja, se molesta, tira la silla y sale del examen y comenta con sus compaeros e insiste que el problema estaba mal planteado, lgicamente que eso puede suceder; si para usted es todas las veces as, quizs resulte que en el examen que acaba de desaprobar y despus que el profesor resolvi el problema usted diga claro la pregunta era esa!, verdad esa era la respuesta!. En el pregrado tambin lo hacamos. La experiencia ensea!, 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 situacin 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 qudese intentado comprenderlo! A continuacin 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 solucin. Si no entiende el problema no contine al paso 2. 2. IDENTIFICAR LAS ENTRADAS, PROCESOS Y SALIDAS Entradas: Identifique los datos de ingreso al algoritmo. Procesos: Son las operaciones, clculos matemticos o procesos que se realizan con los datos de entrada, a veces dependen del conocimiento de algn tema especifico, puede ser matemticas, estadstica, qumica, biologa, investigacin de operaciones, contabilidad, etc.

mailxmail - Cursos para compartir lo que sabes


Salidas: Son los resultados a imprimirse o mostrarse. Es la solucin 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 secunciales y selectivas son ms complicados de comprender y fciles de identificar las entradas, procesos y salidas, ya que las soluciones tratan de al menos de operaciones matemticas u procesos sencillos. Por otro lado los problemas donde se usan bucles o repeticiones, son sencillos de comprender y difciles 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 geometra y es un tema que todo estudiante de educacin superior conoce, el problema ya estara comprendido de antemano, especficamente se trata del clculo del rea de un trapecio. 2. Identificando las entradas, procesos y salidas Entradas: Para calcular el rea de un trapecio, necesitamos saber el valor numrico de: la base mayor, base menor y su altura. Procesos: El proceso general a realizarse sera:

Salidas: La nica salida sera 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 estn en sucesin aritmtica empezando del 10 y van

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

mailxmail - Cursos para compartir lo que sabes

3. Apuntes de Lenguaje C
2.1 LIBRERAS Ces un lenguaje pequeo. La funcionalidad de C se obtiene a travs de un rico conjunto de bibliotecas de funciones, llamados tambin libreras. Por ejemplo la funcin sqrt pertenece a la librera math. #include<math.h> //declaracin de librera {... a=sqrt(25); //uso de la funcin sqrt en el programa principal ... } La funcin sqrt devuelve la raz cuadrada de un nmero, ejm sqrt(25) regresa 5 NOTA: Si usted intenta usar la funcin sqrt sin declarar la librera math, tendr errores justamente en la lnea donde este escrita esta funcin. Otras funciones de la librera math seran sin, cos, tan, etc. Otras libreras son stdio, stdlib, etc. Las libreras y sus funciones estn escritas en la ayuda del lenguaje C. Cada librera contiene sus propias funciones! La librera 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 mximo de 256 caracteres, el carcter inicial de las variables ser una letra (m1, suma2, da2s, etc). Lo incorrecto sera por ejemplo 1num, 25hora, 5p1, etc. 2.2.2 CLASIFICACIN DE VARIABLES Las variables pueden ser locales o globales. Variables Locales: son las que se declaran dentro de un procedimiento o funcin. Variables Globales: son aquellas que se definen fuera de las funciones. Pueden ser utilizadas en cualquier funcin que se declaren despus de ellas, mantienen su valor entre las distintas llamadas.

2.3 ESTRUCTURA MS SIMPLE DE UN PROGRAMA EN C

mailxmail - Cursos para compartir lo que sabes


Lo explicamos a travs 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 funcin estndar de C, que se usa para escribir o imprimir datos. - \n significa salto de lnea. - % Salida formateada. LA FUNCIN main() Representa a la funcin principal; la programacin en C es en base a funciones.

mailxmail - Cursos para compartir lo que sabes

4. Apuntes de Lenguaje C II
2.4 DECLARACIN DE VARIABLES Y TIPOS DE DATOS 2.4.1 DECLARACIN DE VARIABLES Las variables se escriben usando caracteres, inclusive los nmeros con un tamao mximo de 255 letras, siempre empezando con una letra. Ejemplo de variables: nmero1, a, b, c, num6, promedio, suma_nmeros, a12, as12mn, etc. Vea que en todas las variables empezamos con letras. La declaracin 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 mximo. Luego las variables pueden sufrir algunas modificaciones como las mencionamos a continuacin y los tipos de datos pueden quedar clasificados de la siguiente manera:

Los tipos de datos bsicos 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 declaracin de un entero por defecto asume un nmero con signo. 2.4.3 LECTURA Y ESCRITURA DE VARIABLES

mailxmail - Cursos para compartir lo que sabes


El lenguaje C usa salida formateada. La funcin printf tiene un carcter especial para formateo % un carcter 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 continuacin. Ejemplo.

Por ejemplo: printf(" %c %d %f ",ape, i, x); Explicacin: 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 carcter, i entero decimal, x de coma flotante. scanf() es la funcin 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 PARNTESIS 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 parntesis bien usado. 2.5.2 EL OPERADOR DE ASIGNACIN: Es el =, por ejemplo: m=4; letra='y'; Se lee: El nmero 4 es asignado a la variable m El caracter y es asignado a la variable letra 2.5.3 OPERADORES ARITMTICOS Operadores aritmticos ms 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 LGICOS Los operadores lgicos se usan con sentencias condicionales o relacionales, los operadores bsicos lgicos 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 parntesis, dependiendo de la operacin 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 smbolo de agrupacin.

11

mailxmail - Cursos para compartir lo que sabes

5. Estructuras
3.1 ESTRUCTURAS SECUNCIALES Las estructuras secuenciales estn basadas en sentencias de asignacin simples. Ejemplo. #include<stdio.h> int x; main() {int a,b,suma; a=5; b=12; suma=a+b; suma=suma+b; printf("%d",suma); } En este caso, la evaluacin se hace lnea por lnea, 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 mltiples, sin embargo esto puede tornarse en confusiones muy serias para los que leen los programas, inclusive para uno mismo que ojee su cdigo despus de un buen tiempo de vacaciones. La sentencia de bifurcacin mltiple switch tiene la solucin. Sean Constante1, Constante2, Constante3, etc. valores de la variable opcin, los mismos que pueden ser nmeros o caracteres.

12

mailxmail - Cursos para compartir lo que sabes

3.3 ESTRUCTURAS REPETITIVAS La explicacin para las estructuras repetitivas los haremos a travs 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 asignacin del valor inicial a una variable. Expresion2: Define la asignacin del valor final a una variable. Expresion3: Define el incremento del valor de la variable Para la serie 3456789 #include<stdio.h> int a; main() { for(a=3; a<10; a++) { printf("%d",a); } } Mostrar en pantalla: 3456789 Para la serie 3579 #include<stdio.h> 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 (expresin) { Sentencias; } En este caso las sentencias se ejecutan si la expresin es verdadera. La comprobacin es al inicio del bucle. Para la serie 3456789 #include<stdio.h> int a; main() { a=3; while(a<10) { printf("%d",a); a=a+1; } } Para la serie 3579 #include<stdio.h> 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 condicin al finalizar. do{ Sentencias; } while(condicin); 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 nmeros 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 mens. En el siguiente ejemplo al correr el programa imprime la serie 345678910, fjese se supone la impresin debi ser hasta 9 como mximo. Esto explica que luego se haberse impreso el nmero 10, recin se hace la comparacin. Para la serie 345678910 #include<stdio.h> int a; main() { a=3; do { a=a+1; printf("%d",a); }while(a<10); } Para la serie 357911 #include<stdio.h> 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 funcin 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 programacin se tratan teniendo en cuenta el criterio anterior. FUNCIN: Una funcin es un grupo de instrucciones cuya ejecucin se lleva a cabo cada vez que se invoca el nombre de la funcin con valores de entrada y luego de realizar un clculo regresa un valor hasta la lnea donde se hizo la llamada a la funcin. Toda funcin regresa un nico valor PROCEDIMIENTO: Cuando una funcin 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 ejecucin 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 funcin f(x,y,z), en este caso los argumentos son x, y, z. - En un procedimiento no interesa el nmero 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 travs de funciones o procedimientos indistintamente. En Lenguaje C, main es una funcin; es decir es la funcin principal de un programa. 4.1.2 CORRESPONDENCIA ENTRE ARGUMENTOS Se refiere a que los valores de una misma funcin 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 (podra decirse ) b corresponde a n y este a 5 (podra decirse ) c corresponde a p y este a -7 (podra decirse ) Como se ve la funcin f tiene 3 variables o argumentos!. 4.1.3 RECURSIVIDAD Normalmente una funcin f puede llamar a una funcin g y esta a una funcin h y as sucesivamente. cuando una funcin se llama a si misma se dice que sigue un proceso recursivo. En este caso una funcin f se llama as misma, o la funcin f llama a la funcin f; estos conceptos pueden ser utilizados para calcular el factorial de un nmero 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 FUNCIN: Variable:funcin(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 solucin son los mas difciles de comprender y mas sencillos de identificar los procesos que realizar el programa que nos llevarn a la solucin del mismo. En algunos algoritmos se omite la declaracin 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 lnea un nmero, de la siguiente manera, de antemano ya nos habremos fijado que el valor de salida es el de la variable c, el problema sera 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". Lnea 1: a=2 Lnea 2: a=2+1=3 Lnea 3: b=3*2=6 Lnea 4: b=6-1=5 Lnea 5: c=3+2*5=13 Lnea 6: Se presenta 13 El valor de la variable c ser 13. Ejercicio 2 Hacer el algoritmo para escribir un programa que evale la expresin Solucin: observe que los valores de ingreso sern 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 expresin luego de ser evaluada.

18

mailxmail - Cursos para compartir lo que sabes


x : guarda un valor numrico ingresado. w : guarda un valor numrico ingresado. Programa #include<stdio.h> main(void) {float resultado,x,w; //se escriben dos valores separados por la barra espaciadora printf("ingrese el valor de x , tambin de w \n"); //se leen o capturan dos valores escritos en las variables x y w. scanf("%f %f",&x,&w); //Se evala la expresin 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 travs de un printf. // Evita la ejecucin de esta lnea, se usa para escribir comentarios, como aclaraciones, recomendaciones, explicaciones, etc. /* */ Si necesita escribir un comentario extenso, es decir de varias lneas, puede usarlo de la siguiente manera. /*... ...Comentario... ... */ \n Permite escribir datos en la lnea siguiente (salta una lnea). Si se escribe \n\n\n saltaremos 3 lneas, \n\n\n\n saltaremos hasta la cuarta lnea siguiente para imprimir o escribir el siguiente dato. FORMATOS DE LECTURA O IMPRESIN %d %f %c %s Si el dato que se imprimir o leer ser un nmero entero Si el dato que se imprimir o leer ser un nmero real Si el dato que se imprimir o leer ser un carcter. Si el dato que se imprimir o leer ser una cadena

EXPLICACIN: Estas dos lneas de cdigo: printf("ingrese el valor de x , tambin de w \n"); scanf("%f %f",&x,&w); Pueden ser escritas en cuatro lneas 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 evale la expresin

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 numrico ingresado. y : guarda un valor numrico ingresado. resultado : guarda el valor resultado de la expresin. Programa #include<stdio.h> #include<math.h> main(void) {int x,y; float resultado; printf("ingrese el valor de x, tambin 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 lnea de cdigo como: printf("%f", sqrt(3*x*x+4*y*y)); Cuando menos lneas tenga el cdigo, el programa es mejor. Y el programa quedara con una lnea de menos. #include<stdio.h> #include<math.h> main(void) {int x,y; float resultado; printf("ingrese el valor de x, tambin 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 transaccin 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<stdio.h> 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 SELECCIN SIMPLE if Ejercicio 5 Hacer el algoritmo para escribir un programa que indique si un nmero 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: Nmero que se ingresa por el teclado Programa #include<stdio.h> main(void) {int num; printf("ingrese un nmero.... "); scanf("%d",&num); if(num>0) printf("el nmero es positivo"); } 5.2.2 SELECCIN DOBLE if else Ejercicio 6 Hacer un algoritmo para un programa que calcule el pago que hacen un grupo de personas para ver una pelcula 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: Nmero 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<stdio.h> main(void) {float num, pago; printf(" ingrese nmero 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 nmero 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 numrico 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<stdio.h> #include<stdlib.h> #include<math.h> main(void) {int num, rmin, seg; div_t horas,min; printf("ingrese un nmero 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 Pedaggico Toribio Rodrguez de Mendoza, los pagos por curso desaprobado son de 20 soles, con un cargo mximo de 120 soles independiente del nmero de cursos tomados. Ejemplo si un alumno desaprueba 3 cursos pagara 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 nmero 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 : Nmero de cursos pago : guarda el pago calculado Programa #include<stdio.h> main(void) {int x; printf("ingrese el nmero 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 dems (regulares), pagan 50 soles por curso. Disee el algoritmo para escribir un programa en el que el usuario introduce los datos del estudiante (ex soldado o regular) y el nmero de cursos y las salidas sean la categora del estudiante (ex soldado o regular), nmero de cursos y los costos totales por los cursos a llevar. Algoritmo Inicio Declare categora, nc, pago Leer categora, nc Si categora es exsoldado entonces Pago:nc*30 Imprimir "ex soldado", nc, pago Sino Pago:nc*50 Imprimir "regular", nc, pago Fin si Fin Variables categora : Asume los valores exsoldado o regular. nc : Nmero de cursos. pago : Pago por el total de cursos matriculados Programa #include<stdio.h> main(void) {int x,pago,nc; printf("ingrese la categora: 1. ex soldado 2. regular\n"); scanf("%d",&x); printf("ingrese el nmero de cursos\n"); scanf("%d",&nc); if(x==1) printf("categora: ex soldado, %d cursos, pago: %d soles ",nc,nc*30); else printf("categora: regular, %d cursos, pago: %d soles ",nc,nc*50); } if ANIDADO Ejercicio 10 En la ciudad de Chachapoyas, una agencia de seguros para automviles asigna costos basados en el sexo y la edad del conductor. Los varones menores de 25 aos pagan los precios ms altos, 1000 soles. Los hombres de 25 aos o ms aos pagan 700 soles. Las mujeres de menos de 21 aos pagan 800 soles, mientras que las mujeres de 21 aos o ms 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<stdio.h> 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 aos, sexo: masculino, pago: %d soles ",edad,1000); else printf("edad: %d aos, sexo: masculino, pago: %d soles ",edad,700); else if(edad<21) printf("edad: %d aos, sexo: femenino, pago: %d soles ",edad,800); else printf("edad: %d aos, sexo: femenino, pago: %d soles ",edad,500); } Ejercicio 11 Escribir el algoritmo para un programa que solicita se le ingrese un nmero. Si el nmero es positivo debe escribirse el nmero y junto a el positivo (15 POSITIVO). Si

26

mailxmail - Cursos para compartir lo que sabes


el nmero es cero (0 CERO); Si es negativo debe escribirse el nmero y junto a el negativo (-5 NEGATIVO). Ejemplo 10 Positivo 0 Cero -15 Negativo. Algoritmo Inicio Declare numero Leer nmero Si nmero >=0 entonces Si nmero>0 entonces Imprimir nmero, "POSITIVO" Sino Imprimir nmero, "CERO" Fin si Sino Imprimir nmero, "NEGATIVO" Fin si Fin Variables nmero : Nmero ingresado por el teclado Programa #include<stdio.h> main(void) {int num; printf("ingrese un nmero\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 ms 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 segn el nmero de sillas que compra. Debe imprimirse el nmero 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<stdio.h> main(void) {int num,tot; printf("ingrese un nmero 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. Seleccin mltiple switch


Ejercicio 13 Hacer un algoritmo para escribir un programa que devuelva el nombre del da de la semana siguiendo un orden de correspondencia (1, 2, 3...7) para (lunes, martes, mircoles... domingo) respectivamente. Algoritmo Inicio Declare numero Leer nmero Seleccin nmero 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 NMEROS ENTRE 1 Y 7........ " Fin seleccin Fin Variable Nmero : Nmero correspondiente al da de la semana. Programa #include<stdio.h> main(void) {int dia; printf("ingrese un nmero 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 NMEROS ENTRE 1 Y 7........ "); } } Ejercicio 14 Hacer el algoritmo para un programa que calcule: - El valor del rea de un tringulo, dada la base y la altura. - El valor de la base de un tringulo dada la altura y el rea. - El valor de la altura de un tringulo 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 seleccin 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<stdio.h> main(void) {int operacin; printf("EJERCICIOS DE LOS TRINGULOS ........ \n"); printf("============================ \n\n\n"); printf("1 para calcular el rea de un tringulo \n"); printf("2 para calcular la base \n"); printf("3 para calcular la altura \n\n"); printf("ingrese una opcin ........ "); scanf("%d",&operacin); switch(operacin) { float rea, altura, base; case 1: printf("AREA DEL TRINGULO \n"); printf("ingrese la base ........ "); scanf("%f",&base); printf("ingrese la altura ........ "); scanf("%f",&altura); printf("el area del tringulo es %f ",base*altura/2); break; case 2: printf("BASE DE UN TRINGULO \n"); printf("ingrese el area ........ "); scanf("%f",&area); printf("ingrese la altura ........ "); scanf("%f",&altura); printf("la base de area del tringulo es %f ",2*area/altura); break; case 3: printf("ALTURA DE UN TRINGULO \n"); printf("ingrese el area ........ "); scanf("%f",&area); printf("ingrese la base ........ "); scanf("%f",&base); printf("la base de area del tringulo es %f ",2*area/base); break; default: printf(" nada mas ........ "); } } Ejercicio 14 Hacer el pseudocdigo para escribir un programa que calcule: el rea de un tringulo, un trapecio, un rectngulo y el rea de un tringulo en funcin de sus lados. Algoritmo En este caso usted puede guiarse del algoritmo del ejercicio 14 y escribir el proceso matemtico respectivo para obtener el algoritmo buscado. Programa #include<stdio.h>

31

mailxmail - Cursos para compartir lo que sabes


#include<math.h> main(void) {int operacion; printf("CALCULO DE AREAS ........ \n"); printf("============================ \n\n\n"); printf("1 para calcular el rea de un tringulo \n"); printf("2 para calcular el rea de un trapecio \n"); printf("3 para calcular el rea de un rectngulo \n"); printf("4 para calcular el rea de un tringulo en funcin de sus lados\n\n\n"); printf("ingrese el nmero que le corresponde al rea que desea calcular ........ "); scanf("%d",&operacion); switch(operacion) { case 1: int bt,ht; printf("AREA DEL TRINGULO \n"); printf("ingrese la base ........ "); scanf("%d",&bt); printf("ingrese la altura ........ "); scanf("%d",&ht); printf("el area del tringulo 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 TRINGULO EN FUNCIN DE SUS LADOS printf("ingrese lado a ........ "); scanf("%d",&a); printf("ingrese lado b ........ "); scanf("%d",&b); printf("ingrese lado c......... ");

\n");

32

mailxmail - Cursos para compartir lo que sabes


scanf("%d",&c); s=(a+b+c)/2; printf("el area del tringulo 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 mxima 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<stdio.h> 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 nmero de 8 nmeros 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 mayor<num entonces mayor:num; si menor>num entonces menor:num; Fin Desde Imprimir mayor, menor Fin Variables num : guarda un nmero ingresado mayor : Para asignarle el valor del mayor de los nmeros ledos.

34

mailxmail - Cursos para compartir lo que sabes


menor : Para asignarle el valor del menor de los nmeros ledos x : Permite contar los 8 ingresos (valores desde 1 hasta 8). Programa #include<stdio.h> main(void) {int num,mayor,menor,x; mayor=0; menor=10000; for(x=1; x<=8;x++) { printf("INGRESAR NMERO %d\n",x); scanf("%d",&num); if(mayor<num) mayor=num; if(menor>num) menor=num; } printf("NMERO 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 mxima. Algoritmo Inicio Declare area, x, maxarea, maxx maxarea:0; Desde x=10 hasta x<=30 hacer area:x*(100-2*x); si maxarea<area entonces maxarea:area; maxx:x Fin si Fin Desde imprimir maxarea, maxx Fin Variables area : Valor del area x : valor de x. maxarea : valor de la mxima rea. maxx : valor delmximo valor de x. Programa #include<stdio.h> main(void) {int area, x; int maxarea,maxx; maxarea=0; for(x=10; x<=30;x++) { area=x*(100-2*x); if(maxarea<area)

35

mailxmail - Cursos para compartir lo que sabes


{maxarea=area; maxx=x;} } printf("rea mxima %d unidades, para x=%d \n",maxarea,maxx); } NOTA: En este caso la mayor rea es 1250, para x=25. Ejercicio 19 Escrbase el algoritmo para un programa en el que se pide al usuario ingresar el nombre, sexo, nmero de horas de trabajo y el sueldo por hora para cada uno de seis empleados. La primera parte de la impresin en el papel debe dar el nombre y el pago para cada empleado. La segunda parte debe dar totales separados y pagos promedios separados para hombres y para mujeres. El programa puede suponer que hay al menos un empleado de cada sexo. Ejemplo: NOMBRE SEXO *NHT PAGO POR H TOTAL A M 50 5 250 E F 60 4 240 I M 70 6 420 O F 50 6 300 U F 50 10 500 E M 70 7 490 *Nmero de horas trabajadas SEXO PROM TOTAL H 386,6667 1160 F 346,6667 1040 Algoritmo Inicio Declare x, pht, nht, sexo, ptt, sumasm, sumasf, sm, sf, nombre sumasm:0; sumasf:0; sm:0; sf:0; Desde x=1 hasta x<=6 hacer leer sexo si sexo=1entonces sm:sm+1; leer nombre,nht, pht ptt:nht*pht; imprimir nombre, ptt sumasm:sumasm+ptt else sf:sf+1; leer nombre, nht, pht ptt:nht*pht; imprimir nombre, ptt sumasf:sumasf+ptt fin si Fin Desde Imprimir sumasm, sumasm/sm

36

mailxmail - Cursos para compartir lo que sabes


Imprimir sumasf, sumasf/sf Fin Variables x : asume valores de 1 hasta 6. pht : pago por hora trabajada. nht : nmero de horas trabajadas. sexo : sexo. ptt : pago total. sumasm : suma de pagos de las hombres. sumasf : suma de pagos de las mujeres. sm : nmero de hombres cuyos datos se ingresaron. sf : nmero de mujeres cuyos datos se ingresaron. nombre : nombre de los trabajadores. Programa #include<stdio.h> #include<stdlib.h> #include<math.h> 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<stdio.h> 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 nmero 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 nmero de repeticiones. num : el nmero cuyo factorial se va ha calcular. Programa #include<stdio.h> main(void) {int c,num; float fac; printf("ingrese el nmero 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 Amazona" escriba el algoritmo para un programa que procese e imprima la informacin de la nmina 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 tpico de datos podra ser: NOMBRE Juan Sopla N.H.T. 50 P.H. 5 EDAD 57

El pago por hora despus 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 impresin en papel debe ser la informacin 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 aos. El nombre y el pago total para el empleado de menos de 55 aos con mximo pago total (se puede suponer que no hay empate). Ejemplo

La solucin sera: Empleado menor de 55 aos con mximo sueldo es Sergio con 460 soles. El promedio del sueldo para los empleados mayor de 55 aos 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<neto entonces mp:neto; me:edad; nme:nombre fin si fin si fin Desde imprimir promedio imprimir nme mp me Fin Variables me : la mxima edad. mp : mximo promedio. promedio : promedio que se calcula. nombre : nombre que se ingresa por el teclado. nme : nombre del que tiene la mxima edad. nht : nmero de horas trabajadas. ph : pago por hora normal.

40

mailxmail - Cursos para compartir lo que sabes


total : total sin descuentos. neto : neto a pagar. impuesto : impuesto i : contador edad : edad que se ingresa por el teclado. Programa #include<stdio.h> #include<string.h> 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 nmero 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 aos \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(mp<neto) {mp=neto; me=edad; strcpy(nme,nombre); } } } printf("\n\n pago promedio: %lf soles",promedio); printf("\n %s gana %lf soles edad: %lf aos\n",nme,mp,me); } Ejercicio 23 Escriba el algoritmo para un programa Interactivo para calificar a un grupo de 40

41

mailxmail - Cursos para compartir lo que sabes


alumnos de la UNAT-A. El programa debe leer el nombre y sus 3 calificaciones para cada alumno. Debe calcular el promedio para cada uno y despus determinar si el alumno es aprobado o no; se requiere un promedio de al menos 12 para aprobar. La primera parte de la salida en el papel debe ser el nombre del alumno, 3 calificaciones, promedio y un mensaje (aprobado desaprobado). La segunda parte de salida en el papel debe dar el nmero de alumnos que aprobaron y el nmero de los que obtuvieron al menos 18 de nota. Algoritmo Declare i, n1, n2, n3, promedio, naa, na18, nombre, condicin. Inicio Leer i, n1, n2, n3, promedio, naa, na18, nombre, condicin. naa:0; na18:0; Desde i=1 hasta i<=40 hacer 12leer nombre, n1, n2, n3 promedio:(n1+n2+n3)/3 if promedio>12 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 : nmero de alumnos desaprobados. na18 : nmero de alumnos mayores de 18 aos. nombre : nombre del alumno condicin : asume valores 1 (aprobados), 2 desaprobados. Programa #include<stdio.h> #include<string.h> 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 trminos 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 trminos de la serie num : valor del numerador de la serie suma : Acumulador de la suma Programa #include<stdio.h> main(void) { int i,n; float num,den,suma; printf("ingrese la cantidad de trminos ");

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<stdio.h> 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 instruccin 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<stdio.h> main(void) { int i; i=1; while(i<=9) { printf(" \n nmero= %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<stdio.h> main(void) { int i,suma; i=0; suma=0; while(suma<=30) { i=i+1; suma=suma+i; } printf(" \n nmero= %d", i); } Ejercicio 28 CONJETURA DE ULAM: Empiece con cualquier nmero entero positivo. Si es par divdalo entre 2; y si es impar multiplique por 3 y aumente en 1. Obtngase enteros positivos repitiendo el proceso hasta llegar a 1. Ejemplo si empezamos en 5 la serie sera: 5, 16, 8, 4, 2, 1. Haga el algoritmo para un programa que nos permita obtener secuencias de nmeros 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<stdio.h> main(void) { int i,num; printf("ingrese un nmero.. "); scanf("%d",&num); while(num>1) { if(num%2==0)num=num/2; else num=num*3+1; printf(" \n nmero= %d", num); } }

46

mailxmail - Cursos para compartir lo que sabes


Ejercicio 29 Hacer el algoritmo para un programa que calcule la suma de ciertos nmeros ingresados por el teclado. El clculo 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<stdio.h> main(void) {int suma,num; suma=0; printf("CUANDO PULSE 0, TERMINA EL PROGRAMA.. \n"); while(num!=0) { printf(" ingrese un nmero.. "); 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 numrico de los grados farengheit ingresado cel : valor numrico de los grados celcius calculado Programa #include<stdio.h> 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 evale la funcin , 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 segn 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 expresin para cada valor de a. Programa #include<stdio.h> 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 travs del ejercicio 32 Ejercicio 32 Escriba el algoritmo para un programa de nmina 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 numrico 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 numrico que permite finalizar el programa. Comentario: para este caso cualquier nmero 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<stdio.h> 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 nmero 2. e : guarda el valor del exponente. Programa #include<stdio.h> 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 nmero 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<stdio.h> main(void) {

52

mailxmail - Cursos para compartir lo que sabes


int suma,num; suma=0; printf("INGRESE NMEROS ENTRE 1 y 5 \n"); while(suma<=21) { printf("ingrese un nmero "); scanf("%d",&num); if(num>=1 && num<=5) {suma=suma+num;} } printf("\ n SUMA: %d, NMERO: %d",suma,num); } Ejercicio 35 Escriba el algoritmo para un programa que imprima la sucesin completa de ULAM para un entero de entrada, si la longitud de toda la sucesin es no ms de 10. En caso contrario slo se imprimir los 10 primeros enteros de la sucesin. Haga las pruebas de mano para sucesiones de menores de 10 nmeros 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 : nmero que se imprimir Programa #include<stdio.h> main(void) { int c,num; printf("ingrese un nmero.. "); 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 nmero= %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 trmino 0, x como el primer trmino, como el segundo trmino, como el tercer trmino, etc; entonces el trmino n es igual al trmino n-1 multiplicado por . Haga el algoritmo para un programa basado en esta serie para encontrar una aproximacin a . El programa debe parar cuando el ltimo trmino sumando sea menor de 0.0001. Compruebe el programa para y compare con el valor de la funcin que devuelve este valor ( ) en cualquier lenguaje de programacin. 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 trmino n : posicin del trmino e : acumulador de t x : valor del exponente ingresado Programa #include<stdio.h> 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 nmero de cifras de un entero de entrada hasta 32000. As para una entrada de 583 la salida debe ser "3 cifras", asegrese que el programa funcione para 1 y 10. Para cero la salida debe ser "UNA CIFRA". El programa no debe cerrarse hasta ingresar el nmero 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<stdio.h> main(void) { int x; printf("PULSE 0 PARA TERMINAR Y OTRO NMERO PARA CONTINUAR"); while(x<32000 && x!=0) {printf("\n ingrese un nmero "); 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 nmeros 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 slo 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 nmeros impares. Programa #include<stdio.h> int x,suma,c; main(void) { printf("INGRESE 10 NMEROS IMPARES \n"); while(c<10) {printf("ingrese un nmero "); 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 nmeros primos entre 2 nmeros ingresados por el teclado. Ejemplo: primer nmero = 5 ltimo nmero =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, nmero primo j : contador

57

mailxmail - Cursos para compartir lo que sabes


n1 : primer numero del rango n2 : segundo numero del rango Programa #include<stdio.h> main(void) { int i,n1,n2,j; printf("ingrese el primer nmero "); scanf("%d",&n1); printf("ingrese el segundo nmero "); 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 nmeros 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 nmero ingresado. Algoritmo Los dos algoritmos hacen lo mismo, el algoritmo tiene una lnea de menos.

Programa #include<stdio.h> float num; float res, cubo(int x); main() { printf("ingrese un nmero "); 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 evale la expresin Algoritmo Inicio Declare b, e Declare potencia(m, n) Leer b, e Imprimir potencia(b, e) Fin Funcin 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 funcin 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<stdio.h> #include <math.h> int b,e; float potencia(int m, int n); main(void) { printf(" INGRESE DOS NMEROS.. "); 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 crculo 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<stdio.h> 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<stdio.h> 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 travs de procedimientos, es decir una funcin que no devuelve ningn valor. Ejercicio 44 Hacer un algoritmo para un programa que calcule el factorial de un nmero n Algoritmo Inicio Declare n Declare factorial(a) Leer n Imprimir factorial(n) //llamada a la funcin. Fin Funcin 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 funcin 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 : funcin Programa #include<stdio.h> int n,factorial(int a); main(void) {

62

mailxmail - Cursos para compartir lo que sabes


{ printf(" INGRESE EL NMERO.. "); scanf("%d",&n); printf("%d",factorial(n)); // llamada a la funcin } 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. } EXPLICACIN: Mediante un ejemplo

Ejercicio 45 Hacer un algoritmo para un programa que calcule el ensimo 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 funcin fibonacii(x) hasta que x=0 o x=1. Fin si Fin Variables n : ensimo elemento de la serie fibonacii x : toma valores de n fibonacii : funcin Programa #include<stdio.h> 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 funcin fibonacii(x) hasta que x=0 o x=1. } EXPLICACIN Sea la funcin fibonacii f(4)

Ejercicio 46 Hacer un algoritmo que calcule el ensimo elemento de la serie: 4, 6, 10, 16, 26, 42,... Algoritmo Inicio Declare n Declare elemento(x) Leer n Imprimir n, elemento(n) Fin Funcin 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 : ensimo elemento de la serie x : toma valores de n elemento : funcin Programa #include<stdio.h>

64

mailxmail - Cursos para compartir lo que sabes


int n; int elemento(int x); main(void) { printf(" INGRESE LA POSICIN 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 ensimo 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 Funcin 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 : ensimo elemento de la serie fibonacii x : toma valores de n elemento : funcin Programa #include<stdio.h> int n; int elemento(int x); main(void) { printf(" INGRESE LA POSICIN 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, .... ; Tambin disee una funcin 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 Funcin potenciadedos(x) Inicio Si x=0 entonces potenciadedos 1 Sino potenciadedos 2*potenciadedos(x-1) Fin si Fin Funcin 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 tmino n potenciadedos : funcin exponente : funcin Programa #include<stdio.h> int n; int potenciadedos(int x), exponente(int valor); int potencia; main(void) { printf(" INGRESE LA POSICIN 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 funcin exponente, ya que la posicin 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 funcin 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 : funcin valor : toma el valor de n Programa #include<stdio.h> 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 seleccin Fin Funcin area(base,altura) Inicio Area base*altura/2 Fin Funcin base(area, altura) Inicio base 2*area/altura Fin Funcin altura(area,base) Inicio altura 2*area/base Fin Variables opcion : para saber cual es calculo a realizar. base : valor de la base, tambin es funcin altura : valor de la altura, tambin es funcin area : valor del rea, tambin es funcin Comentario: algunas variables pueden funcionar como tal o como funciones, en este problema, fjese por que. Programa usando funciones #include<stdio.h> 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 TRINGULOS ........ \n"); printf("============================ \n\n\n"); printf("1 para calcular el rea de un tringulo \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 TRINGULO \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 TRINGULO \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 TRINGULO \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 seleccin 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, tambin es procedimiento altura : valor de la altura, tambin es procedimiento area : valor del rea, tambin es procedimiento Programa usando procedimiento #include<stdio.h> int operacion; void area(); void base(); void altura(); main(void) { printf("EJERCICIOS DE LOS TRINGULOS ........ \n");

71

mailxmail - Cursos para compartir lo que sabes


printf("EJERCICIOS DE LOS TRINGULOS ........ \n"); printf("============================ \n\n\n"); printf("1 para calcular el rea de un tringulo \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 TRINGULO \n"); printf("ingrese la base ........ "); scanf("%f",&base); printf("ingrese la altura ........ "); scanf("%f",&altura); printf("el area del tringulo es %f ",base*altura/2); } void base() { float area,altura; printf("BASE DE UN TRINGULO \n"); printf("ingrese el area ........ "); scanf("%f",&area); printf("ingrese la altura ........ "); scanf("%f",&altura); printf("la base de area del tringulo es %f ",2*area/altura); } void altura() { float area,base; printf("ALTURA DE UN TRINGULO 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 tringulo es %f ",2*area/base); }

73

mailxmail - Cursos para compartir lo que sabes

19. Apndice
EJERCICIO PROPUESTO EJERCICIO 1: Desarrollar un algoritmo para un programa que imprima 40 nmeros 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 nmeros para comprobar la verdadera capacidad de microprocesamiento de su computador. CDIGO ASCII Pulse la tecla Alt y escriba el nmero -en el bloque de nmeros del teclado-correspondiente a la columna de los ASCII para obtener el smbolo requerido.

BIBLIOGRAFA

74

mailxmail - Cursos para compartir lo que sabes


- SCHILDT, H. Programacin en Turbo C. Primera Edicin en espaol. McGRAW HILL/INTERAMERICANA DE ESPAA. Espaa. 1998. - JOYANES AGUILAR,J. Fundamentos de programacin. Algoritmos y Estructura de Datos. Primera Edicin. McGRAW HILL/INTERAMERICANA DE ESPAA. Espaa. 1998. - MAYNARD KONG. Lenguaje de Programacin C. Fondo editorial de la Pontificia Universidad Catlica del Per. Lima. 1987. - HENNEFELD, J. Turbo Pascal con Aplicaciones 3.0, 4.0, y 5,0. PWS Publishers. Estados Unidos de Amrica. 1989.

75

También podría gustarte