Algoritmos y lenguaje C -...

75
Algoritmos y lenguaje C Autor: abraham sopla 1 mailxmail - Cursos para compartir lo que sabes

Transcript of Algoritmos y lenguaje C -...

Page 1: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

Algoritmos y lenguaje CAutor: abraham sopla

1

mailxmail - Cursos para compartir lo que sabes

Page 2: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

Presentación del curso

Este curso pretende dar a conocer las explicaciones más simples del trabajo de losordenadores.

Puedes descubrir cada paso que realizan, cómo lo realizan, qué es lo qué utilizan yen qué orden lo utilizan.

2

mailxmail - Cursos para compartir lo que sabes

Page 3: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

1. Introducción

En educación  superior quien lleve un curso de Lenguajes de Programación, técnicasde programación, algoritmos, estructuras de datos, sistemas operativos, etc, sehabrá dado cuenta lo complicados que resultan estos cursos cuando noentendemos, como es que la computadora maneja internamente las líneas de códigoescritas en los programas para realizar una actividad. ¿Quien sabe como se ordenanlos 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 comocalcula el término n de una sucesión de números?, etc, sinceramente una serie deproblemas. 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 elcamino a seguir para llegar a la solución de una situación problema dado. Aspectosque nos obligan a llevar largas horas, sentados frente a las computadoras. Hayquienes creen que para ser buenos programadores hay que tener una computadora,talvez no sea tan cierto; pero mas seguro es primero saber resolver los problemasusando algoritmos para luego llevarlos a las computadoras. En estos casos quedaclaro que el uso de la computadora pasa a segundo plano. En consecuencia pararesolver un problema en computadora primero hay que hacer un plan, en otraspalabras un algoritmo. Los algoritmos que desarrollaremos serán usando pseudocódigo e implementadosen 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 eimplementar los algoritmos en lenguaje C. Tenga en cuenta que este documento notiene prioridad en el estudio del lenguaje C si no más bien en el uso del mismo en laresolución de problemas comunes. Según el avance se trata ejercicios combinadoscon los diferentes tipos de sentencias y grado de dificultad. Algunos de losejercicios solucionados se encuentran propuestas por otros autores, sin embargo loque a nosotros nos interesa es como solucionarlos, para así cumplir con nuestroobjetivo.Este trabajo está orientado a estudiantes que se inician en educación superior encarreras de Ingeniería de Sistemas, computación e informática, electrónica,industrial, etc.,  a quienes se les sugiere estudiar detenidamente los casos quepresentamos. Claro está que nos es la idea que se los copien o se los aprendan dememoria las soluciones, si no más bien tengan en sus manos un material de ayuda.

3

mailxmail - Cursos para compartir lo que sabes

Page 4: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

2. Indicaciones para principiantes

1.1 PSEUDOCÓDIGO

 El pseudocódigo  es un lenguaje general, de especificación de la solución delproblema mediante un algoritmo. Se considera como el paso anterior a lacodificación. La ventaja es que, este lenguaje puede ser traducido indistintamente ysin problemas a cualquier lenguaje de programación de computadora. Un algoritmoes una secuencia de pasos lógicos que nos conducen hacia la solución de undeterminado problema. Nosotros haremos los algoritmos usando un lenguaje común, el más sencillo paratodos.  Indicamos que no nos distraeremos preocupados por terminismos. La ideaen fin, será solucionar los problemas y así lo haremos, sabiendo que lo másimportante 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 necesitahacerle 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 algunasreglas 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 ypregunta y pregunta acerca de un problema, hasta se olvida que esta rindiendo unexamen, después dice, esta mal planteada la pregunta, y raja, se molesta, tira la sillay sale del examen y comenta con sus compañeros e insiste que el problema estabamal planteado, lógicamente que eso puede suceder; si para usted es todas las vecesasí, quizás resulte que en el examen que acaba de desaprobar y después que elprofesor resolvió el problema usted diga ¡claro la pregunta era esa!, ¡verdad esa erala respuesta!. En el pregrado también lo hacíamos.¡La experiencia enseña!, habemos personas que intentamos dar respuestas a losproblemas, sin haber entendido de lo que se trata, algo así como que al leer oescuchar, leemos o escuchamos a medias y si en esta situación nos encontramospues lo que estamos haciendo es aumentar la dificultad del problema, que sesupone vamos a solucionar. Ante un problema, hay que leer o escuchar cuantasveces sean necesarias, hasta comprender o memorizar el enunciado si fuera posible. Cuantas veces hemos fracasado por no escuchar o saber leer bien, lo que implicaentender. Saber escuchar o leer es saber comprender. ¡Si no entiende un problemano se atreva a resolverlo, mejor quédese intentado comprenderlo! A continuación planteamos 3 pasos indispensables en el desarrollo de problemasusando algoritmos.

1.2.1 PASOS PARA DEFINIR PROBLEMAS

1. COMPRENDER EL PROBLEMA:Lea o escuche atentamente el problema. Haga un bosquejo, tantee una posiblesolución. Si no entiende el problema no continúe al paso 2.

2. IDENTIFICAR LAS ENTRADAS, PROCESOS Y SALIDASEntradas: Identifique los datos de ingreso al algoritmo.Procesos: Son las operaciones, cálculos matemáticos o procesos que se realizan conlos 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

Page 5: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

Salidas: Son los resultados a imprimirse o mostrarse. Es la solución al problema. Sonlas respuestas.

3. COMPROBAR:Consiste en simular para verificar si el algoritmo resuelve el problema realmente, sehacen con los datos posibles de entrada, puede realizarse en papel y a mano.

Generalmente los problemas con estructuras secuénciales y selectivas son máscomplicados 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 procesossencillos. Por otro lado los problemas donde se usan bucles o repeticiones, sonsencillos 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 untrapecio.1. Comprendiendo  el problema:Luego de saber que el problema se trata de geometría y es un tema que todoestudiante de educación superior conoce, el problema ya estaría comprendido deantemano, específicamente se trata del cálculo del área de un trapecio.2. Identificando las entradas, procesos y salidasEntradas: Para calcular el área de un trapecio, necesitamos saber el valor numéricode: 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.

                           

AlgoritmoInicioDeclare area, basemayor, basemenor, altura Area: ((basemayor+basemenor)/2)* altura Imprimir areaFin

      

EJEMPLO 2: Escriba un programa que calcule la suma de:1 /10+1 /11+1 /12+1 /13+ . . .+1 /50Usemos los pasos para definir el problema.1. El problema trata de la suma de una serie de fracciones cuyo numerador es 1 ylos denominadores están en sucesión aritmética empezando del 10 y van

5

mailxmail - Cursos para compartir lo que sabes

Page 6: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

aumentado de 1 en 1 hasta 50.2. El proceso consiste en una simple suma, sucesiva.3. La salida es la suma.

AlgoritmoInicioDeclare suma, a Suma:0 Desde a=10 hasta a<=50 hacer  Suma: suma+(1/a) Fin desde Imprimir sumaFin

6

mailxmail - Cursos para compartir lo que sabes

Page 7: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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 ricoconjunto de bibliotecas de funciones, llamados también librerías.Por ejemplo la función sqrt pertenece a la librería math.

#include<math.h>  //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 lalibrerí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 laayuda del lenguaje C.¡Cada librería contiene sus propias funciones!

La librería stdio, es la que mas solemos usar para resolver problemas sencillos comolos que veremos mas adelante.

2.2 VARIABLES Y CONSTANTES

2.2.1 VARIABLE: Es un identificador o nombre que sirve para almacenar valores deun tipo de datos, las variables pueden ser de un máximo de 256 caracteres,  elcarácter inicial de las variables será una letra (m1, suma2, da2s, etc). Lo incorrectoserí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 serutilizadas en cualquier función que se declaren después de ellas, mantienen su valorentre las distintas llamadas.

2.3 ESTRUCTURA MÁS SIMPLE DE UN PROGRAMA EN C

7

mailxmail - Cursos para compartir lo que sabes

Page 8: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

Lo explicamos a través de un ejemplo que imprime la suma de 4 y 7.

NOTADel 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

Page 9: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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ñomá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ónde 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 DATOSLos 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á de20 caracteres como máximo.Luego las variables pueden sufrir algunas modificaciones como las mencionamos acontinuació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 unmodificador para alterar el significado de un tipo base para encajar con lasnecesidades de diversas situaciones.

LOS MODIFICADORES: signed, unsigned, long y short.

Signed, unsigned, long y short pueden ser usados con los tipos char e int. Aunquepermitido, el uso de signed en enteros es redundante porque la declaración de unentero por defecto asume un número con signo.

2.4.3 LECTURA Y ESCRITURA DE VARIABLES

9

mailxmail - Cursos para compartir lo que sabes

Page 10: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

El lenguaje C usa salida formateada. La función printf tiene un carácter especial paraformateo %  un carácter enseguida define un cierto tipo de formato para unavariable, por ejemplo d indica que el resultado será entero como se indica en latabla 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 lasvariables. Asegurarse que el orden de formateo y los tipos de datos de las variablescoincidan -debe existir correspondencia entre las variables y los formatos- en estecaso, 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 detipo 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 puedecambiar.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 dealguna 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 tendremoscomo 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 mEl 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

1 0

mailxmail - Cursos para compartir lo que sabes

Page 11: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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, losoperadores 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=5a + b * c = 20(a + b) * c = 40a + (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 todoslos operadores tienen una prioridad:

- Los operadores de mayor prioridad son evaluados antes que los que tienen menorprioridad.- Los operadores que tienen la misma prioridad son evaluados de izquierda aderecha, 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.

1 1

mailxmail - Cursos para compartir lo que sabes

Page 12: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

5. Estructuras

3.1 ESTRUCTURAS SECUÉNCIALES

Las estructuras secuenciales están basadas en sentencias de asignación 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 evaluación se hace línea por línea, siguiendo un orden. En el casoanterior  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, sinembargo esto puede tornarse en confusiones muy serias para los que leen losprogramas, inclusive para uno mismo que ojee su código después de un buentiempo 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, losmismos que pueden ser números o caracteres.

1 2

mailxmail - Cursos para compartir lo que sabes

Page 13: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

                          

3.3 ESTRUCTURAS REPETITIVAS

La explicación para las estructuras repetitivas los haremos a través de un ejemplode un programa que:1. Imprima la serie 34567892. 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<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);    }}

1 3

mailxmail - Cursos para compartir lo que sabes

Page 14: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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. Lacomprobación 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 condición alfinalizar.

do{Sentencias;} while(condición);NOTA: Las llaves no son necesarias si solamente se escribe una sentencia dentro delos bucles.

En el siguiente programa se usa un ciclo do ... while para leer números desde elteclado hasta que uno de ellos es menor que o igual a 100:main(){    int num;

1 4

mailxmail - Cursos para compartir lo que sabes

Page 15: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

    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 sesupone la impresión debió ser hasta 9 como máximo. Esto explica que luego sehaberse impreso el número 10, recién se hace la comparación.

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);}

1 5

mailxmail - Cursos para compartir lo que sabes

Page 16: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

6. Funciones y procedimientos

4.1 FUNCIONES

Nuevamente la función g(x, y) devuelve un solo valor para dos valores de 2 variablesde entrada, x  e y respectivamente.

Las funciones dentro de los lenguajes de programación se tratan teniendo en cuentael criterio anterior.

FUNCIÓN: Una función es un grupo de instrucciones cuya ejecución se lleva a cabocada vez que se invoca el nombre de la función con valores de entrada y luego derealizar un cálculo regresa un valor hasta la línea donde se hizo la llamada a lafunción.Toda función regresa un único valor

PROCEDIMIENTO: Cuando una función no regresa valor alguno se llamaprocedimiento, en todo caso el valor que regresa es nulo. Un procedimiento es ungrupo de instrucciones, que como su nombre lo dice realiza un procedimiento ynada mas,  cuya ejecución se lleva a cabo cada vez que se invoca el nombre delprocedimiento, posiblemente con algunos valores como argumentos.Todo procedimiento no regresa valores, sino que hace algo como por ejemploordenar, 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 argumentosson x, y, z.- En un procedimiento no interesa el número de argumentos de ingreso, lo que masinteresa es el proceso que va ha realizar y sobre ello el valor que devuelve.

1 6

mailxmail - Cursos para compartir lo que sabes

Page 17: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

- En algunos casos los problemas pueden ser solucionados a través de funciones oprocedimientos 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, perosiguen 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 yasí sucesivamente. cuando una función se llama a si misma se dice que sigue unproceso recursivo. En este caso una función f se llama así misma,  o la función fllama a la función f; estos conceptos pueden ser utilizados para calcular el factorialde 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, sigaintentando 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);

1 7

mailxmail - Cursos para compartir lo que sabes

Page 18: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

7. Estructuras secuenciales

Como ya lo mencionamos anteriormente, los algoritmos que necesitan deestructuras secuenciales para su solución son los mas difíciles de comprender y massencillos de identificar los procesos que realizará el programa que nos llevarán a lasolución del mismo.En algunos algoritmos se omite la declaración de variables, en casos que elalgoritmo no es complicado.

Ejercicio 1

Hacer el rastreo manual para: a = 2 a = a + 1 b = a * 2 b = b - 1 c = a + 2 * bPresentar "c".

RASTREO: Para el rastreo hay que asignarle a cada línea un número, de la siguientemanera, de antemano ya nos habremos fijado que el valor de salida es el de lavariable c, el problema sería saber el valor de esta variable c que se mostraráfinalmente.1) a = 22) a = a + 13) b = a * 24) b = b - 15) c = a + 2 * b6) Presentar "c".

Línea 1: a=2Línea 2: a=2+1=3Línea 3: b=3*2=6Línea 4: b=6-1=5Línea 5: c=3+2*5=13Línea 6: Se presenta 13El 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.

AlgoritmoInicioDeclare Resultado, x, wLeer x,w Resultado (x+w)/(2*w) Mostrar ResultadoFin

Variablesresultado: valor de la expresión luego de ser evaluada.

1 8

mailxmail - Cursos para compartir lo que sabes

Page 19: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

x : guarda un valor numérico ingresado.w : guarda un valor numérico ingresado.

Programa#include<stdio.h>main(void){float resultado,x,w;//se escriben dos valores separados por la barra espaciadoraprintf("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 deun proceso.Scanf: Permite capturar los valores de los datos ingresados escritos a través de unprintf.

// Evita la ejecución de esta línea, se usa para escribir comentarios, comoaclaraciones, recomendaciones, explicaciones, etc.

/*  */ Si necesita escribir un comentario extenso, es decir de varias líneas, puedeusarlo de la siguiente manera./ * . . ....Comentario.... . . * /\n Permite escribir datos en la línea siguiente (salta una línea). Si se escribe \n\n\nsaltaremos 3 líneas, \n\n\n\n saltaremos hasta la cuarta línea siguiente paraimprimir o escribir el siguiente dato.

FORMATOS DE LECTURA O IMPRESIÓN

%d  Si el dato que se imprimirá o leerá será un número entero%f  Si el dato que se imprimirá o leerá será un número real%c  Si el dato que se imprimirá o leerá será un carácter.%s  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 quela 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

1 9

mailxmail - Cursos para compartir lo que sabes

Page 20: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

Hacer el algoritmo para escribir un programa que evalúe la expresión  

AlgoritmoInicioDeclare x, y, ResultadoLeer x,y Resultado raizcuadrada(3*x*x+4*y*y)Mostrar resultadoFin

Variablesx  : guarda un valor numérico ingresado.y  : guarda un valor numérico ingresado.resultado : guarda el valor resultado de la expresión.

Programa#include<stdio.h>#include<math.h>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);}

COMENTARIOresultado=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<stdio.h>#include<math.h>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 deuna transacción comercial, siendo el IGV el 19% del total. El dato de ingreso será eltotal.

Algoritmo

2 0

mailxmail - Cursos para compartir lo que sabes

Page 21: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

Inicio.Declare total, subtotal, igvLeer totalIgv 0.19*totalSubtotal total-igvMostrar subtotal, igvFin

Variablestotal : guarda el valor del total ingresadosubtotal: guarda el valor del subtotal calculadoigv : 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);}

2 1

mailxmail - Cursos para compartir lo que sabes

Page 22: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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 ingresadopor el teclado es positivo.

AlgoritmoInicioDeclare numLeer num Si num>0 entonces  Imprimir num es positivo Fin siFin

VariablesNu2m:  Número que se ingresa por el teclado

Programa#include<stdio.h>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 depersonas para ver una película teniendo en cuenta que si el grupo es menor de 8personas el pago es de 1.5 soles por persona y para grupos de 8 personas o mas elpago es 0.5 soles por persona.AlgoritmoInicioDeclare num, pagoLeer numSi num>=8 entonces Pago=0.5*numsino Pago=1.5*numFin siImprimir pagoFin

Variablesnum:  Número que se ingresa por el teclado e indica la cantidad de personaspago: El valor del pago que se calculará.

2 2

mailxmail - Cursos para compartir lo que sabes

Page 23: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

Programa#include<stdio.h>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 esequivalente a 3 horas, 20 minutos, 15 segundos

AlgoritmoInicioDeclare num, horas, rmin, minLeer numSi num>10000 entonces Horas cociente(num,3600) Rmin resto(num,3600) Min cociente(rmin,60) Seg resto(rmin,60)  Mostrar Horas, min, segFin siFin

Variablesnum : valor numérico entero ingresado.horas : cantidad de horas.rmin : cantidad de segundos, resto de num.min : cantidad de minutosseg : 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 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);

2 3

mailxmail - Cursos para compartir lo que sabes

Page 24: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

 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 porcurso desaprobado son de 20 soles, con un cargo máximo de 120 solesindependiente del número de cursos tomados. Ejemplo si un alumno desaprueba 3cursos 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 decursos desaprobados y la salida sea el valor del pago total que el alumno haga porlos cursos desaprobados.

AlgoritmoInicioDeclares x, pagoLeer x Si x<6 entonces Pago=20*x Imprimir pago Sino  Imprimir el pago es 120 solesFin siFin

Variablesx : Número de cursospago : guarda el pago calculado

Programa#include<stdio.h>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");}

2 4

mailxmail - Cursos para compartir lo que sabes

Page 25: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

9. Estructuras selectivas II

Ejercicio 9

De los estudiantes que se matriculan en la UNAT-A, los ex soldados pagan 30 solespor curso en el que se matriculen, mientras que los demás (regulares), pagan 50soles por curso. Diseñe el algoritmo para escribir un programa en el que el usuariointroduce los datos del estudiante (ex soldado o regular) y el número de cursos y lassalidas sean la categoría del estudiante (ex soldado o regular), número de cursos ylos costos totales por los cursos a llevar.

AlgoritmoInicioDeclare categoría, nc, pagoLeer categoría, nc Si categoría es exsoldado entonces  Pago:nc*30  Imprimir "ex soldado", nc, pagoSino  Pago:nc*50  Imprimir "regular", nc, pagoFin siFin

Variablescategoría : Asume los valores exsoldado o regular.nc  : Número de cursos.pago  : Pago por el total de cursos matriculados Programa#include<stdio.h>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 asignacostos basados en el sexo y la edad del conductor. Los varones menores de 25 añospagan los precios más altos, 1000 soles. Los hombres de 25 años o más años pagan700 soles. Las mujeres de menos de 21 años pagan 800 soles, mientras que lasmujeres de 21 años o más pagan 500 soles. Escribir el algoritmo del programa queimprima la edad del conductor, sexo, y el pago correspondiente para los clientes de

2 5

mailxmail - Cursos para compartir lo que sabes

Page 26: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

la aseguradora.

AlgoritmoInicioDeclare sexo, edad, pagoLeer 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 siFin siFin

Variablessexo : 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 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 elnúmero es positivo debe escribirse el número y junto a el positivo (15 POSITIVO). Si

2 6

mailxmail - Cursos para compartir lo que sabes

Page 27: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

el número es cero (0 CERO); Si es negativo  debe escribirse el número y junto a elnegativo (-5 NEGATIVO).Ejemplo10 Positivo0 Cero-15 Negativo.

AlgoritmoInicioDeclare numeroLeer númeroSi número >=0 entonces  Si número>0 entonces   Imprimir número, "POSITIVO"  Sino   Imprimir número, "CERO"  Fin siSino  Imprimir número, "NEGATIVO"Fin siFin

Variablesnúmero : Número ingresado por el teclado

Programa#include<stdio.h>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 unaes de 10 soles; entre 4 y 8 es de 11 soles cada una, si la compra es menor de 4 elcosto es de 15 soles cada una. Escriba el algoritmo para escribir un programa ysaber cuanto pagará un cliente según el número de sillas que compra. Debeimprimirse el número de sillas que compra y el total a pagar.

AlgoritmoInicioDeclare num, totLeer num, totSi num<=8 entonces Si num<=4 entonces  Tot =num*15

2 7

mailxmail - Cursos para compartir lo que sabes

Page 28: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

 Sino   tot=num*11 Fin siSino tot=num*10Fin siImprimir totFin

Variablesnum : cantidad de sillas compradas.tot : Total a pagar.

Programa#include<stdio.h>main(void){int num,tot; printf("ingrese un número de sillas\n"); scanf("%d",&num);        if(num<=8)   i f(num<=4)   tot=num*15  else   tot=num*11 else tot=num*10  printf("%d soles",tot);}

2 8

mailxmail - Cursos para compartir lo que sabes

Page 29: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

10. Selección múltiple switch

Ejercicio 13

Hacer un algoritmo para escribir un programa que devuelva el nombre del día de lasemana siguiendo un orden de correspondencia (1, 2, 3...7) para (lunes, martes,miércoles... domingo) respectivamente.

AlgoritmoInicioDeclare numeroLeer númeroSelecció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ónFin

VariableNúmero : Número correspondiente al día de la semana.

Programa#include<stdio.h>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;

2 9

mailxmail - Cursos para compartir lo que sabes

Page 30: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

 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.

AlgoritmoInicioDeclare opcion, base, altura, areaLeer opcion Seleccionar opcionDeclare área, altura, baseCaso 1 Leer base, altura area:base*altura)/2 Imprimir areaCaso 2 Leer area, altura Base:*area/altura Imprimir baseCaso 3 Leer area,base Altura:*area/base Imprimir alturaCaso contrario Imprimir " ESO ES TODO AMIGOFin selecciónFin

Variablesopcion : 1 para calcular el área, 2 para calcular la base, 3 para calcular la altura.Base : Valor de la base del trianguloAltura : Valor de la altura del trianguloArea : Valor del area del triangulo

Programa

3 0

mailxmail - Cursos para compartir lo que sabes

Page 31: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

#include<stdio.h>main(void){int operación;printf("EJERCICIOS DE LOS TRIÁNGULOS ........  \n");p r i n t f ( " = = = = = = = = = = = = = = = = = = = = = = = = = = = = \ 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 untriángulo, un trapecio, un rectángulo y el área de un triángulo en función de suslados.

AlgoritmoEn este caso usted puede guiarse del algoritmo del ejercicio 14 y escribir el procesomatemático respectivo para obtener el algoritmo buscado.

Programa#include<stdio.h>

3 1

mailxmail - Cursos para compartir lo que sabes

Page 32: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

#include<math.h>main(void){int operacion;printf("CALCULO DE AREAS ........  \n");p r i n t f ( " = = = = = = = = = = = = = = = = = = = = = = = = = = = = \ 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    \n"); printf("ingrese lado a ........   "); scanf("%d",&a); printf("ingrese lado b ........   "); scanf("%d",&b); printf("ingrese lado c.........   ");

3 2

mailxmail - Cursos para compartir lo que sabes

Page 33: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

 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 ........   ");}}

3 3

mailxmail - Cursos para compartir lo que sabes

Page 34: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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 terrenorectangular  de lados 100-2x y x respectivamente, para valores de x entre 10 y 30.

AlgoritmoInicioDeclare x, area        Desde x=10 hasta  x<=30 hacer  Area=100-2*x  Imprimir x, area Fin DesdeFin

VariableX : 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 número de 8números ingresados por el teclado.

AlgoritmoInicioDeclare 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, menorFin

Variables

num  : guarda un número ingresadomayor : Para asignarle el valor del mayor de los números leídos.

3 4

mailxmail - Cursos para compartir lo que sabes

Page 35: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

menor : Para asignarle el valor del menor de los números leídosx  : 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 NÚMERO %d\n",x);  scanf("%d",&num);  if(mayor<num) mayor=num;  if(menor>num) 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 lamayor área e imprimir el valor de x para el esta área máxima.

AlgoritmoInicioDeclare 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, maxxFin

Variablesarea  : Valor del areax  : valor de x.maxarea : valor de la máxima área.maxx  : valor delmáximo 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)

3 5

mailxmail - Cursos para compartir lo que sabes

Page 36: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

   {maxarea=area;   maxx=x;}  }  printf("área máxima %d unidades, para x=%d \n",maxarea,maxx);}NOTA: En este caso la mayor área es 1250, para x=25.

Ejercicio 19

Escríbase  el algoritmo para un programa en el que se pide al usuario ingresar elnombre, sexo, número de horas de trabajo y el sueldo por hora para cada uno deseis empleados. La primera parte de la impresión en el papel debe dar el nombre yel pago para cada empleado. La segunda parte debe dar totales separados y pagospromedios separados para hombres y para mujeres. El programa puede suponer quehay al menos un empleado de cada sexo.

Ejemplo:NOMBRE SEXO *NHT PAGO POR H TOTALA M 50 5 250E F 60 4 240I M 70 6 420O F 50 6 300U F 50 10 500E M 70 7 490*Número de horas trabajadas

SEXO PROM TOTALH 386,6667 1160F 346,6667 1040

AlgoritmoInicioDeclare x, pht, nht, sexo, ptt, sumasm, sumasf, sm, sf, nombresumasm: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 siFin DesdeImprimir sumasm, sumasm/sm

3 6

mailxmail - Cursos para compartir lo que sabes

Page 37: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

Imprimir sumasf, sumasf/sfFin

Variablesx  : asume valores de 1 hasta 6.pht  : pago por hora trabajada.nht  : número de horas trabajadas.sexo  : sexo.ptt  : pago total.sumasm : suma de pagos de las hombres.sumasf : suma de pagos de las mujeres.sm  : número de hombres cuyos datos se ingresaron.sf  : número 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

3 7

mailxmail - Cursos para compartir lo que sabes

Page 38: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

       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 laser ie: 1/2 +3/4 +7/8 +15/16.. .

AlgoritmoInicioDeclare a, c, suma;a:1suma:0.5Desde c=1 hasta c<15 hacer a:a*2+1 suma:suma+(a/(a+1))fin Desdeimprimir sumaFinNOTA: Tenga en cuenta el bucle es de 14 repeticiones por que suma se inicializa en0.5.

Variablesa  : 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);}

3 8

mailxmail - Cursos para compartir lo que sabes

Page 39: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

12. Bucles o estructuras repetitivas II

Ejercicio 21

Escriba el algoritmo para un programa que calcule el factorial de un número ningresado por el teclado.

AlgoritmoInicioLeer c, num, facLeer numFac:1Desde c=1 hasta c<=num hacerfac=fac*c Fin DesdeImprimir num, facFin

Variablesfac  : 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<stdio.h>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 eimprima la información de la nómina de sus diez empleados. Para cada caso, elprograma debe leer el nombre, las horas de trabajo, el pago por hora normal y laedad. Ejemplo: Un grupo típico de datos podría ser: NOMBRE                 N.H.T.                 P.H.               EDADJuan Sopla                     50                      5                      57 El pago por hora después de las 40 horas de trabajo tiene un aumento equivalenteal 50% del pago por hora normal. Así, un empleado que trabaja 50 horas a S/. 5.00por hora tendrá un pago total de S/. 275.00. Al trabajador se le retiene un impuestode 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

3 9

mailxmail - Cursos para compartir lo que sabes

Page 40: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

cada empleado. Ejemplo:  

                  

  La segunda parte debe informar sobre el pago total promedio para los empleadosde al menos 55 años. El nombre y el pago total para el empleado de menos de 55añ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 con460 soles.El promedio del sueldo para los empleados mayor de 55 años es: 342.667 solesAlgoritmoInicioDeclare me, mp, promedio, nombre, nme, nht, ph, total, neto, impuesto, i, edadLeer me, mp, promedio, nombre, nme, nht, ph, total, neto, impuesto, i, edadmp: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, netosi edad>=55 entonces promedio:promedio+neto/3 si no  si mp<neto entonces    mp:neto;   me:edad;   nme:nombre  fin sifin sifin Desdeimprimir promedioimprimir nme mp meFin

Variablesme  : la máxima edad.mp  : máximo promedio.promedio : promedio que se calcula.nombre : nombre que se ingresa por el teclado.nme  : nombre del que tiene la máxima edad.nht  : número de horas trabajadas.ph  : pago por hora normal.

4 0

mailxmail - Cursos para compartir lo que sabes

Page 41: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

total  : total sin descuentos.neto  : neto a pagar.impuesto : impuestoi  : contadoredad  : 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 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(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 años\n",nme,mp,me);}

Ejercicio 23

Escriba el algoritmo para un programa Interactivo  para calificar a un grupo de 40

4 1

mailxmail - Cursos para compartir lo que sabes

Page 42: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

alumnos de la UNAT-A. El programa debe leer el nombre y sus 3 calificaciones paracada alumno. Debe calcular el promedio para cada uno y después determinar si elalumno es aprobado o no; se requiere un promedio de al menos 12 para aprobar. Laprimera parte de la salida en el papel debe ser el nombre del alumno, 3calificaciones, promedio y un mensaje (aprobado ó desaprobado). La segunda partede salida en el papel debe dar el número de alumnos que aprobaron y el número delos que obtuvieron al menos 18 de nota.

AlgoritmoDeclare i, n1, n2, n3, promedio, naa, na18, nombre, condición.InicioLeer i, n1, n2, n3, promedio, naa, na18, nombre, condición.naa:0;na18:0;Desde i=1 hasta i<=40 hacer12ºleer nombre, n1, n2, n3promedio:(n1+n2+n3)/3 if promedio>12 entonces  condicion:1;  naa:naa+1; si no  condicion:2 fin sisi condicion=1 entonces imprimir nombre, n1, n2, n3, promediosino imprimir nombre, n1, n2, n3, promediosi promedio>=18 entonces na18:na18+1Fin DesdeImprimir naa, na18Fin

Variablesi  : contadorn1, 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 alumnocondición : 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 ");

4 2

mailxmail - Cursos para compartir lo que sabes

Page 43: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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érminosingresado por el teclado de la serie 5/6,11/12,23/14,.....

AlgoritmoInicioDeclare i, n, num, sumaLeer nSuma:0;Num:2;Desde i=1 hasta i<=n hacer Num:num*2+1 Suma:suma+num/(num+1)Fin DesdeImprimir sumaFin

Variablesi : Contadorn : Numero de términos de la serienum : valor del numerador de la seriesuma : Acumulador de la suma

Programa#include<stdio.h>main(void){int i,n;float num,den,suma;printf("ingrese la cantidad de términos ");

4 3

mailxmail - Cursos para compartir lo que sabes

Page 44: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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".

AlgoritmoInicioDeclare n, mDesde n=1hasta n<=3 hacer Imrpimir  "HOLA" Desde m=1 hasta m<=5 hacer  Imprimir "CHACHAPOYAS" Fin DesdeFin DesdeFin

Variablesn, 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.

4 4

mailxmail - Cursos para compartir lo que sabes

Page 45: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

13. Bucles while

Ejercicio 26

Usando la instrucción mientras hacer un algoritmo para un programa que imprima laserie 1, 3, 5, 7,9.AlgoritmoInicioDeclare ILeer ii 1mientras i<=9 hacer imrimir i  i i+2fin mientrasFin

Variablesi : Contador

Programa#include<stdio.h>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 quela suma de la serie 1, 2, 3, 4, 5, 6, 7, 8,9,...; supere 30.

AlgoritmoInicioDeclare i, sumaleer i, sumai 0suma 0mientras suma<=30 haceri i+1suma suma+ifin mientrasimprimir iFin

Variablesi : Contador

4 5

mailxmail - Cursos para compartir lo que sabes

Page 46: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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 número= %d", i);} 

Ejercicio 28

CONJETURA DE ULAM: Empiece con cualquier número entero positivo. Si es pardivídalo entre 2; y si es impar multiplique por 3 y aumente en 1. Obténgase enterospositivos repitiendo el proceso hasta llegar a 1. Ejemplo si empezamos en 5 la seriesería: 5, 16, 8, 4, 2, 1. Haga el algoritmo para un programa que nos permita obtener secuencias denúmeros como las anteriores.

AlgoritmoInicioDeclare i, numleer nummientras num>1 hacer si num modulo 2 = 0 entonces num num/2 sino num num*3+1 imprimir numfin mientrasFin

Variablesi : contadornum : numero ingresado

Programa#include<stdio.h>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); }}

4 6

mailxmail - Cursos para compartir lo que sabes

Page 47: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

Ejercicio 29

Hacer el algoritmo para un programa que calcule la suma de ciertos númerosingresados por el teclado. El cálculo de la suma se hará en cualquier momento.

AlgoritmoInicioDeclare suma, numSuma 0Mientras num <> 0 hacer Leer num Suma suma+numFin mientrasImprimir sumaFin

Variablessuma : acumulador de la sumanum : 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 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 detemperaturas Fahrenheit y Celsius. Sugerencia  

°F °C32 034 1,111136 2,2222... ...100 37,778

AlgoritmoInicioDeclare fareng, celfareng 30Mientras fareng<=100 hacer Cel (fareng-32)*5/9 fareng fare+2imprimir fareng, cel

4 7

mailxmail - Cursos para compartir lo que sabes

Page 48: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

imprimir fareng, celFin mientrasFin

Variablesfareng: valor numérico de los grados farengheit ingresadocel : valor numérico 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); }}

4 8

mailxmail - Cursos para compartir lo que sabes

Page 49: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

14. Bucles while II

Ejercicio 31

Escriba el algoritmo para un programa que evalúe la función  , donde x toma losvalores de 1 a 2 en pasos de 0.1. Para cada valor de x la salida debe dar el valor de yel mensaje POSITIVO o NEGATIVO según el caso.  Ejm: si y= 1.0 POSITIVO, Y=-1NEGATIVO.

AlgoritmoInicioDeclare a, yA 1Mientras 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 siFin mientrasFin

Variablesa : Toma los valores de x desde a hasta 2y : Toma los valores de la expresión 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 CENTINELASe usan centinelas para salir de los bucles en cualquier instante que uno desee, uncentinela es una variable que inicialmente adopta un valor, luego dentro de un bucleeste valor cambia, por lo que nos vemos obligados a abandonarlos. Lo anterior secomprende a través del ejercicio 32

Ejercicio 32

Escriba el algoritmo para un programa de nómina usando un ciclo mientras concentinela. Para cada empleado, el programa debe leer el nombre, sexo, horas detrabajo, sueldo por hora e imprimir el pago. La segunda parte debe imprimir el pagopromedio para las mujeres y el pago promedio para los hombres.

Algoritmo

4 9

mailxmail - Cursos para compartir lo que sabes

Page 50: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

InicioDeclare pht, nht, sexo, ptt, sumasm, sumasf, sm, sf, nombre, centinelaSumasm 0Sumasf 0Sm 0Sf 0Mientras 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*phtimrpimir nombre,ptt          sumasm sumasm+ptt         else    sf sf+1          leer nombre, nht, pht          ptt nht*pht          imrpimir nombre, ptt   sumasf sumasf+pttfin si                Fin SiFin mientrasImprimir sumasm, sumasm/smImprimir sumasf, sumasf/sfFin

Variablespht : 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, diferentede 1 o 2, hará que la variable centinela se cargue a 1, hecho que obligará la salidadel sistema.

Programa#include<stdio.h>int x,pht,nht,sexo,ptt,sumasm,sumasf;float sm,sf;main(void){char nombre[20];

5 0

mailxmail - Cursos para compartir lo que sabes

Page 51: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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 semultiplica la anterior por 2. Escribir el algoritmo para un programa que imprima laprimera potencia de 2 que pasa de 1000.

AlgoritmoInicioDeclare potencia, ePotencia 1

5 1

mailxmail - Cursos para compartir lo que sabes

Page 52: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

e 0mientras potencia<=1000 hacer potencia potencia*2 e e+1     //e es el exponentefin mientrasimprimir eFin

Variablespotencia: acumula el producto de la variable potencia y el número 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 enterospositivos entre 1 y 5. El programa debe informar al usuario cuando haya escrito unnúmero que hace que la suma pase de 21, imprimiendo la suma y el último enterointroducido y el mensaje "mas de 21".

AlgoritmoInicioLeer suma, numSuma 0Mientras suma<=21 hacer leer num si num>=1 y num<=5 entonces  suma suma+numfin sifin mientrasimprimir suma, numFin

Variablessuma : el valor de suma acumuladanum : numero ingresado

Programa#include<stdio.h>main(void){

5 2

mailxmail - Cursos para compartir lo que sabes

Page 53: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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);  i f(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 ULAMpara un entero de entrada, si la longitud de toda la sucesión es no más de 10. Encaso contrario sólo se imprimirá los 10 primeros enteros de la sucesión. Haga laspruebas de mano para sucesiones de menores de 10 números iguales a 10 ymayores de 10.Ejemplo5:  16, 8, 4, 3, 1.25:  76, 38, 19, 58, 29, 88, 44, 22, 11,34.

AlgoritmoInicioDeclare c, numLeer numc 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 numc c+1fin mientrasFin

Variablesc : contadornum : número que se imprimirá

Programa#include<stdio.h>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;

5 3

mailxmail - Cursos para compartir lo que sabes

Page 54: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

 printf(" \n número= %d", num);        c=c+1; }}

5 4

mailxmail - Cursos para compartir lo que sabes

Page 55: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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 segundotérmino,  como el tercer término, etc; entonces el término n es igual al término n-1multiplicado por  . Haga el algoritmo para un programa basado en esta serie paraencontrar una aproximación a  . El programa debe parar cuando el último términosumando sea menor de 0.0001. Compruebe el programa para   y compare con elvalor de la función que devuelve este valor ( ) en cualquier lenguaje deprogramación.

AlgoritmoInicioDeclare t, a, n, e, xLeer xn 2t xe 1+xmientras t>0000.1 hacer t t*(x/n) e e+t         n n+1fin mientrasimprimir x, eFin

Variablest : valor del términon : posición del términoe : acumulador de tx : 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;

5 5

mailxmail - Cursos para compartir lo que sabes

Page 56: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

 }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 enterode 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 "UNACIFRA". El programa no debe cerrarse hasta ingresar el número 0.

AlgoritmoInicioDeclare xMientras x<32000 y x<>0 hacerLeer x Si x>=0 y x<10 entonces imprimir x, "TIENE 1 CIFRA" Fin siSi x>9 y x<100 entonces imprimir x, "TIENE 2 CIFRAS" Fin siSi 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 siFin mientrasFin

Variablesx : valor ingresado

Programa#include<stdio.h>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 10números enteros impares para sumarlos. Elabore el programa de manera que no searruine si el usuario escribe algunos enteros pares. El programa debe salir del ciclo eimprimir la suma sólo cuando se hayan ingresado los 10 enteros impares.

AlgoritmoInicioDeclare x, suma, cMientras e(c<10)

5 6

mailxmail - Cursos para compartir lo que sabes

Page 57: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

 Leer x si x modulo 2 <>0 entonces  suma suma+x          c c+1 fin siFin mientrasimprimir sumaFin

Variablesx :  valor ingresadosuma : acumulador de los valores de xc : contador de números impares.

Programa#include<stdio.h>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 entre2 números ingresados por el teclado. Ejemplo: primer número = 5   Último número =15   Resultado  =5, 7, 11, 13AlgoritmoInicioDeclare i, n1, n2, jLeer n1, n2Desde i=n1 hasta i<=n2 hacerj 2mientras i modulo j <>0 hacer           j=j+1  Si i=j entonces imprimir i  Fin si Fin mientrasFin DesdeFin

Variablesi : contador, número primoj : contador

5 7

mailxmail - Cursos para compartir lo que sabes

Page 58: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

n1 : primer numero del rangon2 : segundo numero del rango

Programa#include<stdio.h>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.

5 8

mailxmail - Cursos para compartir lo que sabes

Page 59: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

16. Funciones y procedimientos

Ejercicio 40

Hacer un algoritmo para un programa que calcule el cubo de un número ingresado.AlgoritmoLos dos algoritmos hacen lo mismo, el algoritmo tiene una línea de menos.

                     

Programa#include<stdio.h>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 

AlgoritmoInicioDeclare b, eDeclare potencia(m, n)Leer b, eImprimir potencia(b, e)Fin

Función potencia(m, n)InicioDeclare i, yy 1Desde i=1 hasta i<=abs(n) hacery y*m

5 9

mailxmail - Cursos para compartir lo que sabes

Page 60: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

si n<0 entonces y 1/yfin siFin Desdepotencia yFin

Variablespotencia: es una funciónb : valor ingresadoe : valor ingresadom : toma valores de bn : toma valores de ei : contadory : 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 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 decircunferencia. Utilizar procedimientos.

AlgoritmoInicioDeclare r;Declare circulo(m)Leer rcirculo(r)Fin

Procedimiento circulo(m)InicioDeclare piPi 3.1416Imprimir  pi*m*m

6 0

mailxmail - Cursos para compartir lo que sabes

Page 61: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

Imprimir 2*pi*mFin

Variablesr  : valor ingresadoCirculo : funcionm  : toma el valor de rpi  : 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.

AlgoritmoInicioDeclare intercambio(x, y)Declare temp, a, bLeer a, bIntercambio(a, b);Fin

Procedimiento intercambio(x, y)InicioTemp xX yY tempImprimir x, yFin

Variablestemp. : temporala  : valor ingresadob  : valor ingresadox  : toma el valor de ay  : toma el valor de bintercambio: procedimiento

Programa

6 1

mailxmail - Cursos para compartir lo que sabes

Page 62: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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 delprocedimiento intercambio. Esto significa que la variable temp es una variable global.

El ejercicio 43 no puede ser solucionado usando funciones, la única manera es atravé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

AlgoritmoInicioDeclare nDeclare factorial(a)Leer nImprimir factorial(n) //llamada a la función.Fin

Función factorial(a)Iniciosi a=0 o a=1 entonces factorial 1  //semilla 1sino factorial a*factorial(a-1)  //aquí el llamado es nuevamente a la funciónfactorial(a), hasta que a=0 o a=1 Fin siFin

Variablesn  : valor que se ingresa para calcular su factoriala  : toma el valor de nfactorial : función

Programa#include<stdio.h>int n,factorial(int a);main(void){

6 2

mailxmail - Cursos para compartir lo que sabes

Page 63: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

{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 1else 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 serieFIBONACII. 1, 1, 2, 3, 5, 8,13,...

AlgoritmoInicioDeclare nDeclare fibonacii(x)Leer nImprimir n, fibonacii(n)}

Funcion fibonacii(x)Iniciosi x=0 ó x=1 entonces fibonacii 1  //semillasino fibonacii fibonacii(x-2)+fibonacii(x-1); //esta llamando nuevamente a lafunción fibonacii(x) hasta que x=0  o x=1.Fin siFin

Variablesn  : enésimo elemento de la serie fibonaciix  : toma valores de nfibonacii : función

Programa#include<stdio.h>int n;int fibonacii(int x);main(void){

6 3

mailxmail - Cursos para compartir lo que sabes

Page 64: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

{printf("   INGRESE LA POSICION DEL ELEMENTO ..   ");scanf("%d",&n);printf("FIBONACII DE %d es %d",n,fibonacii(n));}

int fibonacii(int x){i f(x==0 || x==1)return 1;   / /semil laelse return fibonacii(x-2)+fibonacii(x-1); //está llamando nuevamente a la funciónfibonacii(x) hasta que x=0  o x=1.}

EXPLICACIÓNSea 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,...

AlgoritmoInicioDeclare nDeclare elemento(x)Leer nImprimir n, elemento(n)Fin

Función elemento(x)InicioSi x=0 entonces elemento 4 fin si //semillaSi x=1 entonces elemento 6 //semillaSino elemento elemento(x-2)+elemento(x-1) //recursividadFin siFin

Variablesn   : enésimo elemento de la seriex   : toma valores de nelemento  : función

Programa#include<stdio.h>

6 4

mailxmail - Cursos para compartir lo que sabes

Page 65: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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; //semillaif(x==1)return 6; //semillaelse 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,...

AlgoritmoInicioDeclare nDeclare elemento(x)Leer nImprimir n, elemento(n)Fin

Función elemento(x)InicioSi x=0 entonces elemento 1 Fin si//semillaSi x=1 entonces elemento 1  Fin si//semillaSi x=2 entonces elemento 2 //semillaSino elemento elemento(x-3)+elemento(x-2)+elemento(x-1);//recursividadFin

Variablesn   : enésimo elemento de la serie fibonaciix   : toma valores de nelemento  : función

Programa#include<stdio.h>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)

6 5

mailxmail - Cursos para compartir lo que sabes

Page 66: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

{if(x==0)return 1; //semillaif(x==1)return 1;  //semillaif(x==2)return 2; //semillaelse return elemento(x-3)+elemento(x-2)+elemento(x-1); //recursividad}

6 6

mailxmail - Cursos para compartir lo que sabes

Page 67: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

17. Llamada a funciones recursivamente

Ejercicio 48

Hacer un algoritmo para un programa que  halle el elemento n de la serie, 2n: 1 2 48 16 32 64 128 ...  para n = 0,1,2,3,4,5,6,7,8, .... ; También diseñe una función queregrese el exponente correspondiente a la potencia 2n.

AlgoritmoInicioDeclare n, potenciaDeclare potenciadedos(x), exponente(valor)Leer nPotencia potenciadedos(n)Imprimir n, potenciaImprimir potencia, exponente(potencia)Fin

Función potenciadedos(x)InicioSi x=0 entonces potenciadedos 1Sino potenciadedos 2*potenciadedos(x-1)Fin siFin

Función exponente(valor)InicioSi valor=1 entonces exponente 0Sino exponente exponente(valor/2)+1 Fin siFin

Variablesn  : valor ingresadoX  : toma valor de nvalor  : toma el valor de la variable potenciapotencia : valor de la potencia del témino npotenciadedos : funciónexponente  : función

Programa#include<stdio.h>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));}

6 7

mailxmail - Cursos para compartir lo que sabes

Page 68: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

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 recursivosEn el caso del ejercicio anterior tal vez no note lo que sucede con la funciónexponente, ya que la posición que se ingresa representa el exponente. Vea elejercicio 49 y lograra comprenderlo mejor.

Ejercicio 49

Compruebe el siguiente algoritmo ingresando valores resultados de la potencia de2, ejemplo: 256, 32, 1024, etc. y verá la importancia de la función exponente.

AlgoritmoInicioDeclare nDeclare exponente(valor)Leer nImprimir n, exponente(n)Fin

Funcion exponente(valor)InicioSi valor=1 exponente 0Sino exponente exponente(valor/2)+1 Fin siFin

Variablesn  : valor ingresadoexponente : funciónvalor  : 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){

6 8

mailxmail - Cursos para compartir lo que sabes

Page 69: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

if(valor==1)return 0;else return 1+exponente(valor/2);}

Ejercicio 50

Desarrollar el ejercicio 14, usando funciones y procedimientos.

Algoritmo usando funcionesInicioDeclare opcion, base, altura, area  Leer opcion  Seleccionar  opcion   Caso 1   Leer base, alturaImprimir area(base, altura)   Caso 2   Leer area, altura   Imprimir  base(area,altura)   Caso 3Leer area, baseImprimir altura(area,base)  Fin selecciónFin

Función area(base,altura)Inicio Area base*altura/2Fin

Función base(area, altura)Inicio base 2*area/alturaFin

Función altura(area,base)Inicio altura 2*area/baseFin Variablesopcion : para saber cual es calculo a realizar.base  : valor de la base, también es funciónaltura  : valor de la altura, también es funciónarea  : valor del área, también es función

Comentario: algunas variables pueden funcionar como tal o como funciones, en esteproblema, fíjese 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);

6 9

mailxmail - Cursos para compartir lo que sabes

Page 70: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

main(void){printf("EJERCICIOS DE LOS TRIÁNGULOS ........  \n");p r i n t f ( " = = = = = = = = = = = = = = = = = = = = = = = = = = = = \ 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;}

7 0

mailxmail - Cursos para compartir lo que sabes

Page 71: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

18. Algoritmo usando procedimiento

InicioDeclare area, base, altura  Seleccionar  opcion   Caso 1Area()   Caso 2    Base()   Caso 3Altura()  Fin selecciónFin

Procedimiento areaInicioDeclare area, base, alturaLeer base, alturaArea base*altura/2Mostrar areaFin

Procedimiento baseInicioDeclare area, base, altura Leer area, altura base 2*area/altura mostrar baseFin

Procedimiento alturaInicioDeclare area, base, altura Leer area,basealtura 2*area/basemostrar alturaFin

Variablesopcion : para saber cual es calculo a realizar.base  : valor de la base, también es procedimientoaltura  : valor de la altura, también es procedimientoarea  : valor del área, también es procedimiento

Programa usando procedimiento#include<stdio.h>int operacion;void area();void base();void altura();main(void){printf("EJERCICIOS DE LOS TRIÁNGULOS ........  \n");

7 1

mailxmail - Cursos para compartir lo que sabes

Page 72: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

printf("EJERCICIOS DE LOS TRIÁNGULOS ........  \n");p r i n t f ( " = = = = = = = = = = = = = = = = = = = = = = = = = = = = \ 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    \n"); printf("ingrese el area ........   "); scanf("%f",&area); printf("ingrese la base ........   ");

7 2

mailxmail - Cursos para compartir lo que sabes

Page 73: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

 scanf("%f",&base); printf("la base de área del triángulo es %f ",2*area/base);}

7 3

mailxmail - Cursos para compartir lo que sabes

Page 74: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

19. Apéndice

EJERCICIO PROPUESTO

EJERCICIO 1: Desarrollar un algoritmo para un programa que imprima 40 númerosgenerados 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úmerospara 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 delteclado-correspondiente  a la columna de los ASCII para obtener el símbolorequerido.

                      

                       

BIBLIOGRAFÍA

7 4

mailxmail - Cursos para compartir lo que sabes

Page 75: Algoritmos y lenguaje C - imagenes.mailxmail.comimagenes.mailxmail.com/cursos/pdf/0/algoritmos-lenguaje-c-9200... · de programación, algoritmos, ... como es que la computadora maneja

- SCHILDT, H. Programación en Turbo C. Primera Edición en español. McGRAWHILL/INTERAMERICANA DE ESPAÑA. España. 1998.- JOYANES AGUILAR,J. Fundamentos de programación. Algoritmos y Estructura deDatos. Primera Edición. McGRAW HILL/INTERAMERICANA DE ESPAÑA. España. 1998.- MAYNARD KONG. Lenguaje de Programación C. Fondo editorial de la PontificiaUniversidad 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.

7 5

mailxmail - Cursos para compartir lo que sabes