You are on page 1of 75

mailxmail - Cursos para compartir lo que sabes

Algoritmos y lenguaje C
Autor: abraham sopla

1
mailxmail - Cursos para compartir lo que sabes

Presentación del curso


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

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

2
mailxmail - Cursos para compartir lo que sabes

1. Introducción
En educación superior quien lleve un curso de Lenguajes de Programación, técnicas
de programación, algoritmos, estructuras de datos, sistemas operativos, etc, se
habrá dado cuenta lo complicados que resultan estos cursos cuando no
entendemos, como es que la computadora maneja internamente las líneas de código
escritas en los programas para realizar una actividad. ¿Quien sabe como se ordenan
los datos en una hoja de calculo Excel?, de manera que, luego de seleccionar datos,
pulsamos el botón ordenar de la barra de herramientas y listo. ¿Quién sabe como
calcula el término n de una sucesión de números?, etc, sinceramente una serie de
problemas.
Todos intentamos manejar las computadoras -usarlas- para resolver problemas,
sin antes hacer por lo menos un pequeño plan acerca de la solución o tantear el
camino a seguir para llegar a la solución de una situación problema dado. Aspectos
que nos obligan a llevar largas horas, sentados frente a las computadoras. Hay
quienes creen que para ser buenos programadores hay que tener una computadora,
talvez no sea tan cierto; pero mas seguro es primero saber resolver los problemas
usando algoritmos para luego llevarlos a las computadoras. En estos casos queda
claro que el uso de la computadora pasa a segundo plano. En consecuencia para
resolver un problema en computadora primero hay que hacer un plan, en otras
palabras un algoritmo.
Los algoritmos que desarrollaremos serán usando pseudocódigo e implementados
en lenguaje C, tratando de no llegar a complicaciones en el uso del lenguaje.
En los primeros capítulos del libro, encontramos teoría suficiente para desarrollar e
implementar los algoritmos en lenguaje C. Tenga en cuenta que este documento no
tiene prioridad en el estudio del lenguaje C si no más bien en el uso del mismo en la
resolución de problemas comunes. Según el avance se trata ejercicios combinados
con los diferentes tipos de sentencias y grado de dificultad. Algunos de los
ejercicios solucionados se encuentran propuestas por otros autores, sin embargo lo
que a nosotros nos interesa es como solucionarlos, para así cumplir con nuestro
objetivo.
Este trabajo está orientado a estudiantes que se inician en educación superior en
carreras de Ingeniería de Sistemas, computación e informática, electrónica,
industrial, etc., a quienes se les sugiere estudiar detenidamente los casos que
presentamos. Claro está que nos es la idea que se los copien o se los aprendan de
memoria las soluciones, si no más bien tengan en sus manos un material de ayuda.

3
mailxmail - Cursos para compartir lo que sabes

2. Indicaciones para principiantes

1.1 PSEUDOCÓDIGO
El pseudocódigo es un lenguaje general, de especificación de la solución del
problema mediante un algoritmo. Se considera como el paso anterior a la
codificación. La ventaja es que, este lenguaje puede ser traducido indistintamente y
sin problemas a cualquier lenguaje de programación de computadora. Un algoritmo
es una secuencia de pasos lógicos que nos conducen hacia la solución de un
determinado problema.
Nosotros haremos los algoritmos usando un lenguaje común, el más sencillo para
todos. Indicamos que no nos distraeremos preocupados por terminismos. La idea
en fin, será solucionar los problemas y así lo haremos, sabiendo que lo más
importante antes de empezar a escribir un programa es necesario hacer el algoritmo.
Lógicamente, si ya tiene el programa que soluciona un problema, ya no necesita
hacerle un algoritmo; pero si de situaciones académicas se trata, hacer el algoritmo,
teniendo el programa no necesita de ningún esfuerzo, solamente pegarse a algunas
reglas y términos de pseudocódigo, como inicio, fin asignar, etc.
1.2 ESTRATEGIA PARA RESOLVER PROBLEMAS CON ALGORITMOS
Cuando usted está resolviendo un examen va donde el profesor cada rato y
pregunta y pregunta acerca de un problema, hasta se olvida que esta rindiendo un
examen, después dice, esta mal planteada la pregunta, y raja, se molesta, tira la silla
y sale del examen y comenta con sus compañeros e insiste que el problema estaba
mal planteado, lógicamente que eso puede suceder; si para usted es todas las veces
así, quizás resulte que en el examen que acaba de desaprobar y después que el
profesor resolvió el problema usted diga ¡claro la pregunta era esa!, ¡verdad esa era
la respuesta!. En el pregrado también lo hacíamos.
¡La experiencia enseña!, habemos personas que intentamos dar respuestas a los
problemas, sin haber entendido de lo que se trata, algo así como que al leer o
escuchar, leemos o escuchamos a medias y si en esta situación nos encontramos
pues lo que estamos haciendo es aumentar la dificultad del problema, que se
supone vamos a solucionar. Ante un problema, hay que leer o escuchar cuantas
veces sean necesarias, hasta comprender o memorizar el enunciado si fuera posible.
Cuantas veces hemos fracasado por no escuchar o saber leer bien, lo que implica
entender. Saber escuchar o leer es saber comprender. ¡Si no entiende un problema
no se atreva a resolverlo, mejor quédese intentado comprenderlo!
A continuación planteamos 3 pasos indispensables en el desarrollo de problemas
usando algoritmos.
1.2.1 PASOS PARA DEFINIR PROBLEMAS
1. COMPRENDER EL PROBLEMA:
Lea o escuche atentamente el problema. Haga un bosquejo, tantee una posible
solución. Si no entiende el problema no continúe al paso 2.
2. IDENTIFICAR LAS ENTRADAS, PROCESOS Y SALIDAS
Entradas: Identifique los datos de ingreso al algoritmo.
Procesos: Son las operaciones, cálculos matemáticos o procesos que se realizan con
los datos de entrada, a veces dependen del conocimiento de algún tema especifico,
puede ser matemáticas, estadística, química, biología, investigación de operaciones,
contabilidad, etc.

4
mailxmail - Cursos para compartir lo que sabes
Salidas: Son los resultados a imprimirse o mostrarse. Es la solución al problema. Son
las respuestas.
3. COMPROBAR:
Consiste en simular para verificar si el algoritmo resuelve el problema realmente, se
hacen con los datos posibles de entrada, puede realizarse en papel y a mano.
Generalmente los problemas con estructuras secuénciales y selectivas son más
complicados de comprender y fáciles de identificar las entradas, procesos y salidas,
ya que las soluciones tratan de al menos de operaciones matemáticas u procesos
sencillos. Por otro lado los problemas donde se usan bucles o repeticiones, son
sencillos de comprender y difíciles de identificar las entradas, procesos y salidas.
EJEMPLO 1: Escribir un algoritmo para un programa que calcule el área de un
trapecio.
1. Comprendiendo el problema:
Luego de saber que el problema se trata de geometría y es un tema que todo
estudiante de educación superior conoce, el problema ya estaría comprendido de
antemano, específicamente se trata del cálculo del área de un trapecio.
2. Identificando las entradas, procesos y salidas
Entradas: Para calcular el área de un trapecio, necesitamos saber el valor numérico
de: la base mayor, base menor y su altura.
Procesos: El proceso general a realizarse sería:

Salidas: La única salida sería el , en ambos casos


3. Comprobando.

Algoritmo
Inicio
Declare area, basemayor, basemenor, altura
Area: ((basemayor+basemenor)/2)* altura
Imprimir area
Fin

EJEMPLO 2: Escriba un programa que calcule la suma de:


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

5
mailxmail - Cursos para compartir lo que sabes
aumentado de 1 en 1 hasta 50.
2. El proceso consiste en una simple suma, sucesiva.
3. La salida es la suma.
Algoritmo
Inicio
Declare suma, a
Suma:0
Desde a=10 hasta a<=50 hacer
Suma: suma+(1/a)
Fin desde
Imprimir suma
Fin

6
mailxmail - Cursos para compartir lo que sabes

3. Apuntes de Lenguaje C

2.1 LIBRERÍAS
Ces un lenguaje pequeño. La funcionalidad de C se obtiene a través de un rico
conjunto de bibliotecas de funciones, llamados también librerías.
Por ejemplo la función sqrt pertenece a la librería math.
#include<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 la
librería math serían sin, cos, tan, etc.
Otras librerías son stdio, stdlib, etc. Las librerías y sus funciones están escritas en la
ayuda del lenguaje C.
¡Cada librería contiene sus propias funciones!
La librería stdio, es la que mas solemos usar para resolver problemas sencillos como
los que veremos mas adelante.
2.2 VARIABLES Y CONSTANTES
2.2.1 VARIABLE: Es un identificador o nombre que sirve para almacenar valores de
un tipo de datos, las variables pueden ser de un máximo de 256 caracteres, el
carácter inicial de las variables será una letra (m1, suma2, da2s, etc). Lo incorrecto
sería por ejemplo 1num, 25hora, 5p1, etc.
2.2.2 CLASIFICACIÓN DE VARIABLES
Las variables pueden ser locales o globales.
Variables Locales: son las que se declaran dentro de un procedimiento o función.
Variables Globales: son aquellas que se definen fuera de las funciones. Pueden ser
utilizadas en cualquier función que se declaren después de ellas, mantienen su valor
entre las distintas llamadas.

2.3 ESTRUCTURA MÁS SIMPLE DE UN PROGRAMA EN C

7
mailxmail - Cursos para compartir lo que sabes

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

NOTA
Del ejemplo anterior:
x y n son variables globales
c y s son variables locales.
- C requiere un punto y coma al final de cada sentencia.
- printf es una función estándar de C, que se usa para escribir o imprimir datos.
- \n significa salto de línea.
- % Salida formateada.
LA FUNCIÓN main()
Representa a la función principal; la programación en C es en base a funciones.

8
mailxmail - Cursos para compartir lo que sabes

4. Apuntes de Lenguaje C II

2.4 DECLARACIÓN DE VARIABLES Y TIPOS DE DATOS


2.4.1 DECLARACIÓN DE VARIABLES
Las variables se escriben usando caracteres, inclusive los números con un tamaño
máximo de 255 letras, siempre empezando con una letra.
Ejemplo de variables: número1, a, b, c, num6, promedio, suma_números, a12,
as12mn, etc. Vea que en todas las variables empezamos con letras. La declaración
de variables se hace de la siguiente manera:
Tipo Variable;
Ejemplo: Int a;
En este caso la variable a de tipo entero, aceptará valores enteros, como 2, -20, 15,
0, -658, etc.
2.4.2 TIPO DE DATOS
Los tipos de datos simples son:

CADENA DE CARACTERES: Se derivan de los de tipo caracter, se declaran así:


char mensaje[20];
En este caso la variable mensaje aceptará un texto o cadena cuya longitud será de
20 caracteres como máximo.
Luego las variables pueden sufrir algunas modificaciones como las mencionamos a
continuación y los tipos de datos pueden quedar clasificados de la siguiente manera:

Los tipos de datos básicos tienen varios modificadores que los preceden. Se usa un
modificador para alterar el significado de un tipo base para encajar con las
necesidades de diversas situaciones.
LOS MODIFICADORES: signed, unsigned, long y short.
Signed, unsigned, long y short pueden ser usados con los tipos char e int. Aunque
permitido, el uso de signed en enteros es redundante porque la declaración de un
entero por defecto asume un número con signo.
2.4.3 LECTURA Y ESCRITURA DE VARIABLES

9
mailxmail - Cursos para compartir lo que sabes
El lenguaje C usa salida formateada. La función printf tiene un carácter especial para
formateo % un carácter enseguida define un cierto tipo de formato para una
variable, por ejemplo d indica que el resultado será entero como se indica en la
tabla a continuación. Ejemplo.

Por ejemplo:
printf(" %c %d %f ",ape, i, x);
Explicación: La sentencia(s) de formato se encierra entre comillas " ", y enseguida las
variables. Asegurarse que el orden de formateo y los tipos de datos de las variables
coincidan -debe existir correspondencia entre las variables y los formatos- en este
caso, el valor de ape será de tipo carácter, i entero decimal, x de coma flotante.
scanf() es la función para entrar valores a variables. Su formato es similar a printf.
Por ejemplo:
scanf("%c %d %f %s",&nombre, &i, &x, cad);
Observar que se antepone & a los nombres de las variables, excepto a la variable de
tipo cadena de caracteres que es de tipo string.
2.4.4 LAS CONSTANTES
Una constante es una variable, a la cual se le asigna un valor y este no puede
cambiar.
Las constantes se declaran usando la palabra clave const, por ejemplo:
const a = 6;
NOTAS:
- Es usual inicializar una constante con un valor, ya que no puede ser cambiada de
alguna otra forma.
2.5 OPERADORES
2.5.1 EL PARÉNTESIS
Se usan para agrupar datos.
No es lo mismo: 4+8/2 que (4+8)/2, si evaluamos en el primer caso tendremos
como resultado 8 y en el otro 6, e ahí la importancia del paréntesis bien usado.
2.5.2 EL OPERADOR DE ASIGNACIÓN:
Es el =, por ejemplo:
m=4; letra='y';
Se lee:
El número 4 es asignado a la variable m
El caracter y es asignado a la variable letra
2.5.3 OPERADORES ARITMÉTICOS
Operadores aritméticos más usuales:
Para: a=5 y b=3

10
mailxmail - Cursos para compartir lo que sabes

2.5.4 OPERADORES RELACIONALES


Para: a=5 y b=3

2.5.5 OPERADORES LÓGICOS


Los operadores lógicos se usan con sentencias condicionales o relacionales, los
operadores básicos lógicos son:
Para: a=5 , b=3, c=5 y d=3.

2.5.6 ORDEN DE PRECEDENCIA DE LOS OPERADORES


Es necesario ser cuidadosos con el significado de expresiones tales como a + b * c,
dependiendo de lo que se desee hacer.
Para a=5 , b=3 y c=5
a + b * c = 20
(a + b) * c = 40
a + (b * c) = 20
Tenga en cuenta los tres resultados anteriores, y vea la importancia del paréntesis,
dependiendo de la operación que desea realizar será utilizado. Sin embargo todos
los operadores tienen una prioridad:
- Los operadores de mayor prioridad son evaluados antes que los que tienen menor
prioridad.
- Los operadores que tienen la misma prioridad son evaluados de izquierda a
derecha, por lo que:
En a + b - c es evaluado como (a + b) - c.
En a - b - c es evaluado como (a - b) - c.

Las () es un símbolo de agrupación.

11
mailxmail - Cursos para compartir lo que sabes

5. Estructuras

3.1 ESTRUCTURAS SECUÉNCIALES


Las estructuras secuenciales están basadas en sentencias de asignación simples.
Ejemplo.
#include<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 caso
anterior valor de suma que se imprime es 29.
3.2 ESTRUCTURAS SELECTIVAS
3.2.1 LA SENTENCIA If
Las tres formas como se puede emplear la sentencia if son:

3.2.2 LA SENTENCIA switch


Con la estructura if ... else if se pueden realizar comprobaciones múltiples, sin
embargo esto puede tornarse en confusiones muy serias para los que leen los
programas, inclusive para uno mismo que ojee su código después de un buen
tiempo de vacaciones.
La sentencia de bifurcación múltiple switch tiene la solución.
Sean Constante1, Constante2, Constante3, etc. valores de la variable opción, los
mismos que pueden ser números o caracteres.

12
mailxmail - Cursos para compartir lo que sabes

3.3 ESTRUCTURAS REPETITIVAS


La explicación para las estructuras repetitivas los haremos a través de un ejemplo
de un programa que:
1. Imprima la serie 3456789
2. Imprima la serie 3579
3.3.1 LA SENTENCIA for
La sentencia for tiene el siguiente formato:
for (expresion1; expresion2; expresion3)
{Bloque de sentencias}
Expresion1: Define la asignación del valor inicial a una variable.
Expresion2: Define la asignación del valor final a una variable.
Expresion3: Define el incremento del valor de la variable
Para la serie 3456789
#include<stdio.h>
int a;
main()
{
for(a=3; a<10; a++)
{
printf("%d",a);
}
}
Mostrará en pantalla: 3456789
Para la serie 3579
#include<stdio.h>
int a;
main()
{
for(a=3; a<10; a+=2)
{
printf("%d",a);
}
}

13
mailxmail - Cursos para compartir lo que sabes
Mostrará en pantalla: 3579
3.3.2 LA SENTENCIA while
La sentencia while es otro ciclo o bucle cuyo formato es:
while (expresión)
{
Sentencias;
}

En este caso las sentencias se ejecutan si la expresión es verdadera. La


comprobación es al inicio del bucle.
Para la serie 3456789
#include<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 al
finalizar.
do{
Sentencias;
} while(condición);
NOTA: Las llaves no son necesarias si solamente se escribe una sentencia dentro de
los bucles.
En el siguiente programa se usa un ciclo do ... while para leer números desde el
teclado hasta que uno de ellos es menor que o igual a 100:
main()
{
int num;

14
mailxmail - Cursos para compartir lo que sabes
int num;
do
{
scanf("%d", &num);
} while ( num>100 );
}
Do-While puede ser útil en el desarrollo de programas con menús.
En el siguiente ejemplo al correr el programa imprime la serie 345678910, fíjese se
supone la impresión debió ser hasta 9 como máximo. Esto explica que luego se
haberse impreso el número 10, recién se hace la comparación.
Para la serie 345678910
#include<stdio.h>
int a;
main()
{
a=3;
do
{ a=a+1;
printf("%d",a);
}while(a<10);
}
Para la serie 357911
#include<stdio.h>
int a;
main()
{
a=3;
do
{ a=a+2;
printf("%d",a);
}while(a<10);
}

15
mailxmail - Cursos para compartir lo que sabes

6. Funciones y procedimientos

4.1 FUNCIONES

Nuevamente la función g(x, y) devuelve un solo valor para dos valores de 2 variables
de entrada, x e y respectivamente.
Las funciones dentro de los lenguajes de programación se tratan teniendo en cuenta
el criterio anterior.
FUNCIÓN: Una función es un grupo de instrucciones cuya ejecución se lleva a cabo
cada vez que se invoca el nombre de la función con valores de entrada y luego de
realizar un cálculo regresa un valor hasta la línea donde se hizo la llamada a la
función.
Toda función regresa un único valor
PROCEDIMIENTO: Cuando una función no regresa valor alguno se llama
procedimiento, en todo caso el valor que regresa es nulo. Un procedimiento es un
grupo de instrucciones, que como su nombre lo dice realiza un procedimiento y
nada mas, cuya ejecución se lleva a cabo cada vez que se invoca el nombre del
procedimiento, posiblemente con algunos valores como argumentos.
Todo procedimiento no regresa valores, sino que hace algo como por ejemplo
ordenar, imprimir, intercambiar valores, etc.
4.1.1 ARGUMENTOS DE LAS FUNCIONES
Son los valores de las variables de la función f(x,y,z), en este caso los argumentos
son x, y, z.
- En un procedimiento no interesa el número de argumentos de ingreso, lo que mas
interesa es el proceso que va ha realizar y sobre ello el valor que devuelve.

16
mailxmail - Cursos para compartir lo que sabes
- En algunos casos los problemas pueden ser solucionados a través de funciones o
procedimientos indistintamente.
En Lenguaje C, main es una función; es decir es la función principal de un programa.
4.1.2 CORRESPONDENCIA ENTRE ARGUMENTOS
Se refiere a que los valores de una misma función pueden ser diferentes, pero
siguen n un orden de correspondencia.
Ejemplo: Sea f(a, b, c) = f(m, n, p)=f(4, 5, -7), en este caso;
a corresponde a m y este a 4 (podría decirse )
b corresponde a n y este a 5 (podría decirse )
c corresponde a p y este a -7 (podría decirse )
Como se ve ¡la función f tiene 3 variables o argumentos!.
4.1.3 RECURSIVIDAD
Normalmente una función f puede llamar a una función g y esta a una función h y
así sucesivamente. cuando una función se llama a si misma se dice que sigue un
proceso recursivo. En este caso una función f se llama así misma, o la función f
llama a la función f; estos conceptos pueden ser utilizados para calcular el factorial
de un número o calcular un elemento de la serie del Italiano Fibonacii.
NUNCA LO OLVIDE:
En un proceso recursivo, identifique primero la semilla, si no logra identificarlo, siga
intentando hasta lograrlo.

SEMILLA: Son los valores iniciales de las series que siguen procesos recursivos.
En el factorial: La semilla es 1, para factorial de 0 o 1.
Serie fibonacii: La semilla es 1,1, para fibonacii de 0 o 1.
LLAMADA A UNA FUNCIÓN:
Variable:función(argumentos);
LLAMADA A UN PROCEDIMIENTO:
Procedimiento(argumentos);

17
mailxmail - Cursos para compartir lo que sabes

7. Estructuras secuenciales

Como ya lo mencionamos anteriormente, los algoritmos que necesitan de


estructuras secuenciales para su solución son los mas difíciles de comprender y mas
sencillos de identificar los procesos que realizará el programa que nos llevarán a la
solución del mismo.
En algunos algoritmos se omite la declaración de variables, en casos que el
algoritmo no es complicado.
Ejercicio 1
Hacer el rastreo manual para:
a = 2
a = a + 1
b = a * 2
b = b - 1
c = a + 2 * b
Presentar "c".
RASTREO: Para el rastreo hay que asignarle a cada línea un número, de la siguiente
manera, de antemano ya nos habremos fijado que el valor de salida es el de la
variable c, el problema sería saber el valor de esta variable c que se mostrará
finalmente.
1) a = 2
2) a = a + 1
3) b = a * 2
4) b = b - 1
5) c = a + 2 * b
6) Presentar "c".
Línea 1: a=2
Línea 2: a=2+1=3
Línea 3: b=3*2=6
Línea 4: b=6-1=5
Línea 5: c=3+2*5=13
Línea 6: Se presenta 13
El valor de la variable c será 13.
Ejercicio 2
Hacer el algoritmo para escribir un programa que evalúe la expresión
Solución: observe que los valores de ingreso serán para las variables x, w.
Algoritmo
Inicio
Declare Resultado, x, w
Leer x,w
Resultado (x+w)/(2*w)
Mostrar Resultado
Fin
Variables
resultado: valor de la expresión luego de ser evaluada.

18
mailxmail - Cursos para compartir lo que sabes
x : guarda un valor numérico ingresado.
w : guarda un valor numérico ingresado.
Programa
#include<stdio.h>
main(void)
{float resultado,x,w;
//se escriben dos valores separados por la barra espaciadora
printf("ingrese el valor de x , también de w \n");
//se leen o capturan dos valores escritos en las variables x y w.
scanf("%f %f",&x,&w);
//Se evalúa la expresión y el resultado es asignado a la variable resultado.
resultado=(x+w)/(2*w);
//se imprime el valor de la variable resultado.
printf("%f",resultado);
}
COMETARIO:
Printf: Permite escribir en pantalla un mensaje o escribir un resultado producto de
un proceso.
Scanf: Permite capturar los valores de los datos ingresados escritos a través de un
printf.
// Evita la ejecución de esta línea, se usa para escribir comentarios, como
aclaraciones, recomendaciones, explicaciones, etc.
/* */ Si necesita escribir un comentario extenso, es decir de varias líneas, puede
usarlo de la siguiente manera.
/*...
...Comentario...
... */
\n Permite escribir datos en la línea siguiente (salta una línea). Si se escribe \n\n\n
saltaremos 3 líneas, \n\n\n\n saltaremos hasta la cuarta línea siguiente para
imprimir o escribir el siguiente dato.
FORMATOS DE LECTURA O IMPRESIÓN
%d 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 que
la forma de capturar de los datos cambia. Quedando de la siguiente manera.
printf("ingrese el valor de x \n");
scanf("%f ",&x);
printf("ingrese el valor de w \n");
scanf("%f ",&w);
Ejercicio 3

19
mailxmail - Cursos para compartir lo que sabes
Hacer el algoritmo para escribir un programa que evalúe la expresión

Algoritmo
Inicio
Declare x, y, Resultado
Leer x,y
Resultado raizcuadrada(3*x*x+4*y*y)
Mostrar resultado
Fin
Variables
x : guarda un valor numérico ingresado.
y : guarda un valor numérico ingresado.
resultado : guarda el valor resultado de la expresión.
Programa
#include<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);
}
COMENTARIO
resultado=sqrt(3*x*x+4*y*y);
printf("%f",resultado);
Lo anterior puede reemplazarse por una sola línea de código como:
printf("%f", sqrt(3*x*x+4*y*y));
Cuando menos líneas tenga el código, el programa es mejor.
Y el programa quedaría con una línea de menos.
#include<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 de
una transacción comercial, siendo el IGV el 19% del total. El dato de ingreso será el
total.
Algoritmo

20
mailxmail - Cursos para compartir lo que sabes
Inicio.
Declare total, subtotal, igv
Leer total
Igv 0.19*total
Subtotal total-igv
Mostrar subtotal, igv
Fin
Variables
total : guarda el valor del total ingresado
subtotal: guarda el valor del subtotal calculado
igv : guarda el valor del total ingresado
Programa
#include<stdio.h>
main()
{float total,subtotal,igv;
printf("ingrese el total a pagar");
scanf("%f",&total);
igv=0.19*total;
subtotal=total-igv;
printf("total: %f, subtotal: %f, igv: %f",total,subtotal,igv);
}

21
mailxmail - Cursos para compartir lo que sabes

8. Estructuras selectivas

5.2.1 SELECCIÓN SIMPLE if


Ejercicio 5
Hacer el algoritmo para escribir un programa que indique si un número ingresado
por el teclado es positivo.
Algoritmo
Inicio
Declare num
Leer num
Si num>0 entonces
Imprimir num es positivo
Fin si
Fin
Variables
Nu2m: Número que se ingresa por el teclado
Programa
#include<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 de
personas para ver una película teniendo en cuenta que si el grupo es menor de 8
personas el pago es de 1.5 soles por persona y para grupos de 8 personas o mas el
pago es 0.5 soles por persona.
Algoritmo
Inicio
Declare num, pago
Leer num
Si num>=8 entonces
Pago=0.5*num
sino
Pago=1.5*num
Fin si
Imprimir pago
Fin
Variables
num: Número que se ingresa por el teclado e indica la cantidad de personas
pago: El valor del pago que se calculará.

22
mailxmail - Cursos para compartir lo que sabes

Programa
#include<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 es
equivalente a 3 horas, 20 minutos, 15 segundos
Algoritmo
Inicio
Declare num, horas, rmin, min
Leer num
Si num>10000 entonces
Horas cociente(num,3600)
Rmin resto(num,3600)
Min cociente(rmin,60)
Seg resto(rmin,60)
Mostrar Horas, min, seg
Fin si
Fin
Variables
num : valor numérico entero ingresado.
horas : cantidad de horas.
rmin : cantidad de segundos, resto de num.
min : cantidad de minutos
seg : cantidad de segundos, resto de min.
Programa
#include<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);

23
mailxmail - Cursos para compartir lo que sabes
printf("%d MINUTOS\n",min);
printf("%d SEGUNDOS\n",seg);
}
}
Ejercicio 8
En el Instituto Superior Pedagógico Toribio Rodríguez de Mendoza, los pagos por
curso desaprobado son de 20 soles, con un cargo máximo de 120 soles
independiente del número de cursos tomados. Ejemplo si un alumno desaprueba 3
cursos pagaría 60 soles, mientras que uno que desaprueba 8 cursos paga 120 soles.
Escriba el algoritmo de un programa en el que las entradas sean el número de
cursos desaprobados y la salida sea el valor del pago total que el alumno haga por
los cursos desaprobados.
Algoritmo
Inicio
Declares x, pago
Leer x
Si x<6 entonces
Pago=20*x
Imprimir pago
Sino
Imprimir el pago es 120 soles
Fin si
Fin
Variables
x : Número de cursos
pago : guarda el pago calculado
Programa
#include<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");
}

24
mailxmail - Cursos para compartir lo que sabes

9. Estructuras selectivas II

Ejercicio 9
De los estudiantes que se matriculan en la UNAT-A, los ex soldados pagan 30 soles
por curso en el que se matriculen, mientras que los demás (regulares), pagan 50
soles por curso. Diseñe el algoritmo para escribir un programa en el que el usuario
introduce los datos del estudiante (ex soldado o regular) y el número de cursos y las
salidas sean la categoría del estudiante (ex soldado o regular), número de cursos y
los costos totales por los cursos a llevar.
Algoritmo
Inicio
Declare categoría, nc, pago
Leer categoría, nc
Si categoría es exsoldado entonces
Pago:nc*30
Imprimir "ex soldado", nc, pago
Sino
Pago:nc*50
Imprimir "regular", nc, pago
Fin si
Fin
Variables
categoría : Asume los valores exsoldado o regular.
nc : Número de cursos.
pago : Pago por el total de cursos matriculados

Programa
#include<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 asigna
costos basados en el sexo y la edad del conductor. Los varones menores de 25 años
pagan los precios más altos, 1000 soles. Los hombres de 25 años o más años pagan
700 soles. Las mujeres de menos de 21 años pagan 800 soles, mientras que las
mujeres de 21 años o más pagan 500 soles. Escribir el algoritmo del programa que
imprima la edad del conductor, sexo, y el pago correspondiente para los clientes de

25
mailxmail - Cursos para compartir lo que sabes
la aseguradora.
Algoritmo
Inicio
Declare sexo, edad, pago
Leer sexo, edad
Si sexo es masculino entonces
Si edad<25 entonces
Pago:1000
Imprimir edad, sexo, pago
Sino
Pago:700
Imprimir edad, sexo, pago
Fin Si
Si no
Si edad<21 entonces
Pago:800
Imprimir edad, sexo, pago
Sino
Pago:500
Imprimir edad, sexo, pago
Fin si
Fin si
Fin
Variables
sexo : Almacena 1 (masculino), 2 (femenino).
edad : Edad del cliente.
pago : valor del pago que hará el cliente
Programa
#include<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 el
número es positivo debe escribirse el número y junto a el positivo (15 POSITIVO). Si

26
mailxmail - Cursos para compartir lo que sabes
el número es cero (0 CERO); Si es negativo debe escribirse el número y junto a el
negativo (-5 NEGATIVO).
Ejemplo
10 Positivo
0 Cero
-15 Negativo.
Algoritmo
Inicio
Declare numero
Leer número
Si número >=0 entonces
Si número>0 entonces
Imprimir número, "POSITIVO"
Sino
Imprimir número, "CERO"
Fin si
Sino
Imprimir número, "NEGATIVO"
Fin si
Fin
Variables
número : Número ingresado por el teclado
Programa
#include<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 una
es de 10 soles; entre 4 y 8 es de 11 soles cada una, si la compra es menor de 4 el
costo es de 15 soles cada una. Escriba el algoritmo para escribir un programa y
saber cuanto pagará un cliente según el número de sillas que compra. Debe
imprimirse el número de sillas que compra y el total a pagar.
Algoritmo
Inicio
Declare num, tot
Leer num, tot
Si num<=8 entonces
Si num<=4 entonces
Tot =num*15

27
mailxmail - Cursos para compartir lo que sabes
Sino
tot=num*11
Fin si
Sino
tot=num*10
Fin si
Imprimir tot
Fin
Variables
num : cantidad de sillas compradas.
tot : Total a pagar.
Programa
#include<stdio.h>
main(void)
{int num,tot;
printf("ingrese un número de sillas\n");
scanf("%d",&num);
if(num<=8)
if(num<=4)
tot=num*15
else
tot=num*11
else
tot=num*10
printf("%d soles",tot);
}

28
mailxmail - Cursos para compartir lo que sabes

10. Selección múltiple switch

Ejercicio 13
Hacer un algoritmo para escribir un programa que devuelva el nombre del día de la
semana siguiendo un orden de correspondencia (1, 2, 3...7) para (lunes, martes,
miércoles... domingo) respectivamente.
Algoritmo
Inicio
Declare numero
Leer número
Selección número
Case 1
Imprimir " LUNES"
Case 2
Imprimir "MARTES"
Case 3
Imprimir "MIERCOLES"
Case 4
Imprimir "JUEVES"
Case 5
Imprimir "VIERNES"
Case 6
Imprimir "SABADO"
Case 7
Imprimir "DOMINGO"
Si no
Imprimir "SOLO NÚMEROS ENTRE 1 Y 7........ "
Fin selección
Fin
Variable
Número : Número correspondiente al día de la semana.
Programa
#include<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;

29
mailxmail - Cursos para compartir lo que sabes
case 4:
printf(" JUEVES\n");
break;
case 5:
printf(" VIERNES\n");
break;
case 6:
printf(" SABADO\n");
break;
case 7:
printf(" DOMINGO\n");
break;
default:
printf(" SOLO NÚMEROS ENTRE 1 Y 7........ ");
}
}
Ejercicio 14
Hacer el algoritmo para un programa que calcule:
- El valor del área de un triángulo, dada la base y la altura.
- El valor de la base de un triángulo dada la altura y el área.
- El valor de la altura de un triángulo dada la base y el área.
Algoritmo
Inicio
Declare opcion, base, altura, area
Leer opcion
Seleccionar opcion
Declare área, altura, base
Caso 1
Leer base, altura
area:base*altura)/2
Imprimir area
Caso 2
Leer area, altura
Base:*area/altura
Imprimir base
Caso 3
Leer area,base
Altura:*area/base
Imprimir altura
Caso contrario
Imprimir " ESO ES TODO AMIGO
Fin selección
Fin
Variables
opcion : 1 para calcular el área, 2 para calcular la base, 3 para calcular la altura.
Base : Valor de la base del triangulo
Altura : Valor de la altura del triangulo
Area : Valor del area del triangulo
Programa

30
mailxmail - Cursos para compartir lo que sabes
#include<stdio.h>
main(void)
{int operación;
printf("EJERCICIOS DE LOS TRIÁNGULOS ........ \n");
printf("============================ \n\n\n");
printf("1 para calcular el área de un triángulo \n");
printf("2 para calcular la base \n");
printf("3 para calcular la altura \n\n");
printf("ingrese una opción ........ ");
scanf("%d",&operación);
switch(operación)
{
float área, altura, base;
case 1:
printf("AREA DEL TRIÁNGULO \n");
printf("ingrese la base ........ ");
scanf("%f",&base);
printf("ingrese la altura ........ ");
scanf("%f",&altura);
printf("el area del triángulo es %f ",base*altura/2);
break;
case 2:
printf("BASE DE UN TRIÁNGULO \n");
printf("ingrese el area ........ ");
scanf("%f",&area);
printf("ingrese la altura ........ ");
scanf("%f",&altura);
printf("la base de area del triángulo es %f ",2*area/altura);
break;
case 3:
printf("ALTURA DE UN TRIÁNGULO \n");
printf("ingrese el area ........ ");
scanf("%f",&area);
printf("ingrese la base ........ ");
scanf("%f",&base);
printf("la base de area del triángulo es %f ",2*area/base);
break;
default:
printf(" nada mas ........ ");
}
}
Ejercicio 14
Hacer el pseudocódigo para escribir un programa que calcule: el área de un
triángulo, un trapecio, un rectángulo y el área de un triángulo en función de sus
lados.
Algoritmo
En este caso usted puede guiarse del algoritmo del ejercicio 14 y escribir el proceso
matemático respectivo para obtener el algoritmo buscado.
Programa
#include<stdio.h>

31
mailxmail - Cursos para compartir lo que sabes
#include<math.h>
main(void)
{int operacion;
printf("CALCULO DE AREAS ........ \n");
printf("============================ \n\n\n");
printf("1 para calcular el área de un 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......... ");

32
mailxmail - Cursos para compartir lo que sabes
scanf("%d",&c);
s=(a+b+c)/2;
printf("el area del triángulo es %f unidades",sqrt(s*(s-a)*(s-b)*(s-c)));
break;
default:
printf(" nada mas ........ ");
}
}

33
mailxmail - Cursos para compartir lo que sabes

11. Bucles o estructuras repetitivas

5.3.1 BUCLE for


Ejercicio 16
Hacer el algoritmo para un programa, que calcule la máxima área de un terreno
rectangular de lados 100-2x y x respectivamente, para valores de x entre 10 y 30.
Algoritmo
Inicio
Declare x, area
Desde x=10 hasta x<=30 hacer
Area=100-2*x
Imprimir x, area
Fin Desde
Fin
Variable
X : asume valores desde 10 hasta 30.
Area : asume el valor del área.
Programa
#include<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 8
números ingresados por el teclado.
Algoritmo
Inicio
Declare num, mayor, menor, x;
mayor:0;
menor:10000;
Desde x=1 hasta x<=8 hacer
leer num
si mayor<num entonces mayor:num;
si menor>num entonces menor:num;
Fin Desde
Imprimir mayor, menor
Fin
Variables
num : guarda un número ingresado
mayor : Para asignarle el valor del mayor de los números leídos.

34
mailxmail - Cursos para compartir lo que sabes
menor : Para asignarle el valor del menor de los números leídos
x : Permite contar los 8 ingresos (valores desde 1 hasta 8).
Programa
#include<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 la
mayor área e imprimir el valor de x para el esta área máxima.
Algoritmo
Inicio
Declare area, x, maxarea, maxx
maxarea:0;
Desde x=10 hasta x<=30 hacer

area:x*(100-2*x);
si maxarea<area entonces
maxarea:area;
maxx:x
Fin si
Fin Desde
imprimir maxarea, maxx
Fin
Variables
area : Valor del area
x : valor de x.
maxarea : valor de la 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)

35
mailxmail - Cursos para compartir lo que sabes
{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 el
nombre, sexo, número de horas de trabajo y el sueldo por hora para cada uno de
seis empleados. La primera parte de la impresión en el papel debe dar el nombre y
el pago para cada empleado. La segunda parte debe dar totales separados y pagos
promedios separados para hombres y para mujeres. El programa puede suponer que
hay al menos un empleado de cada sexo.
Ejemplo:
NOMBRE SEXO *NHT PAGO POR H TOTAL
A M 50 5 250
E F 60 4 240
I M 70 6 420
O F 50 6 300
U F 50 10 500
E M 70 7 490
*Número de horas trabajadas
SEXO PROM TOTAL
H 386,6667 1160
F 346,6667 1040
Algoritmo
Inicio
Declare x, pht, nht, sexo, ptt, sumasm, sumasf, sm, sf, nombre
sumasm:0;
sumasf:0;
sm:0;
sf:0;
Desde x=1 hasta x<=6 hacer
leer sexo
si sexo=1entonces
sm:sm+1;
leer nombre,nht, pht
ptt:nht*pht;
imprimir nombre, ptt
sumasm:sumasm+ptt
else
sf:sf+1;
leer nombre, nht, pht
ptt:nht*pht;
imprimir nombre, ptt
sumasf:sumasf+ptt
fin si
Fin Desde
Imprimir sumasm, sumasm/sm

36
mailxmail - Cursos para compartir lo que sabes
Imprimir sumasf, sumasf/sf
Fin
Variables
x : asume valores de 1 hasta 6.
pht : pago por hora trabajada.
nht : 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

37
mailxmail - Cursos para compartir lo que sabes
printf("los HOMBRES GANAN TOTAL: %d SOLES, PROMEDIO: %f
\n",sumasm,sumasm/sm);
printf("las MUJERES GANAN TOTAL: %d SOLES, PROMEDIO: %f",sumasf,sumasf/sf);
}
Ejercicio 20
Escriba el algoritmo para un programa que imprima la suma de 15 elementos de la
serie: 1/2 +3/4 +7/8 +15/16...
Algoritmo
Inicio
Declare a, c, suma;
a:1
suma:0.5
Desde c=1 hasta c<15 hacer
a:a*2+1
suma:suma+(a/(a+1))
fin Desde
imprimir suma
Fin
NOTA: Tenga en cuenta el bucle es de 14 repeticiones por que suma se inicializa en
0.5.
Variables
a : Asume los valores de los numeradores.
c : Indica las 14 repeticiones.
suma : Acumula el valor de la suma.
Programa
#include<stdio.h>
main(void)
{float a,c,suma;
a=1;
suma=0.5;
for(c=1;c<15;c++)
{a=a*2+1;
suma=suma+(a/(a+1));}
printf("%lf",suma);
}

38
mailxmail - Cursos para compartir lo que sabes

12. Bucles o estructuras repetitivas II

Ejercicio 21
Escriba el algoritmo para un programa que calcule el factorial de un número n
ingresado por el teclado.
Algoritmo
Inicio
Leer c, num, fac
Leer num
Fac:1
Desde c=1 hasta c<=num hacer
fac=fac*c
Fin Desde
Imprimir num, fac
Fin
Variables
fac : acumulador del valor del factorial del numero ingresado.
c : cuenta el número de repeticiones.
num : el número cuyo factorial se va ha calcular.
Programa
#include<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 e
imprima la información de la nómina de sus diez empleados. Para cada caso, el
programa debe leer el nombre, las horas de trabajo, el pago por hora normal y la
edad.
Ejemplo: Un grupo típico de datos podría ser:

NOMBRE N.H.T. P.H. EDAD


Juan Sopla 50 5 57

El pago por hora después de las 40 horas de trabajo tiene un aumento equivalente
al 50% del pago por hora normal. Así, un empleado que trabaja 50 horas a S/. 5.00
por hora tendrá un pago total de S/. 275.00. Al trabajador se le retiene un impuesto
de la siguiente manera:
10 % de los primeros S/. 200.00 y 20 % de la cantidad adicional.
La primera parte de la impresión en papel debe ser la información relevante de

39
mailxmail - Cursos para compartir lo que sabes
cada empleado.
Ejemplo:

La segunda parte debe informar sobre el pago total promedio para los empleados
de al menos 55 años. El nombre y el pago total para el empleado de menos de 55
años con máximo pago total (se puede suponer que no hay empate).
Ejemplo

La solución sería: Empleado menor de 55 años con máximo sueldo es Sergio con
460 soles.
El promedio del sueldo para los empleados mayor de 55 años es: 342.667 soles
Algoritmo
Inicio
Declare me, mp, promedio, nombre, nme, nht, ph, total, neto, impuesto, i, edad
Leer me, mp, promedio, nombre, nme, nht, ph, total, neto, impuesto, i, edad
mp:0;
promedio:0;
Desde i=1 hasta i=10 hacer
leer nombre, nht, ph, edad
si nht>40 entonces total:40*ph+(nht-40)*(ph+0.5*ph)
si no total:nht*ph
si total>200 entonces impuesto:200*0.1+(total-200)*0.2
si no impuesto:total*0.1
neto:total-impuesto
imprimir nombre, nht, ph, edad
imprimir total, impuesto, neto
si edad>=55 entonces promedio:promedio+neto/3
si no
si mp<neto entonces
mp:neto;
me:edad;
nme:nombre
fin si
fin si
fin Desde
imprimir promedio
imprimir nme mp me
Fin
Variables
me : 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.

40
mailxmail - Cursos para compartir lo que sabes
total : total sin descuentos.
neto : neto a pagar.
impuesto : impuesto
i : contador
edad : edad que se ingresa por el teclado.
Programa
#include<stdio.h>
#include<string.h>
main(void)
{
float me,mp;
float promedio;
char nombre[20];
char nme[20];
float nht,ph;
float total, neto,impuesto;
int i,edad;
mp=0;
promedio=0;
for(i=1;i<=10;i++)
{ printf("\n ingrese nombre: ");
7 scanf("%s",nombre);
printf("Ingrese 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

41
mailxmail - Cursos para compartir lo que sabes
alumnos de la UNAT-A. El programa debe leer el nombre y sus 3 calificaciones para
cada alumno. Debe calcular el promedio para cada uno y después determinar si el
alumno es aprobado o no; se requiere un promedio de al menos 12 para aprobar. La
primera parte de la salida en el papel debe ser el nombre del alumno, 3
calificaciones, promedio y un mensaje (aprobado ó desaprobado). La segunda parte
de salida en el papel debe dar el número de alumnos que aprobaron y el número de
los que obtuvieron al menos 18 de nota.
Algoritmo
Declare i, n1, n2, n3, promedio, naa, na18, nombre, condición.
Inicio
Leer i, n1, n2, n3, promedio, naa, na18, nombre, condición.
naa:0;
na18:0;
Desde i=1 hasta i<=40 hacer
12ºleer nombre, n1, n2, n3
promedio:(n1+n2+n3)/3
if promedio>12 entonces
condicion:1;
naa:naa+1;
si no
condicion:2
fin si
si condicion=1 entonces imprimir nombre, n1, n2, n3, promedio
sino imprimir nombre, n1, n2, n3, promedio
si promedio>=18 entonces na18:na18+1
Fin Desde
Imprimir naa, na18
Fin
Variables
i : contador
n1, n2, n3 : notas.
Promedio : promedio de notas.
naa : número de alumnos desaprobados.
na18 : número de alumnos mayores de 18 años.
nombre : nombre del alumno
condición : asume valores 1 (aprobados), 2 desaprobados.
Programa
#include<stdio.h>
#include<string.h>
main(void)
{
int i,n1,n2,n3;
float promedio;
int naa,na18;
char nombre[20];
int condicion;
naa=0;
na18=0;Y54E4332EWWWWWW
for(i=1;i<=40;i++)
{printf("ingrese el nombre ");

42
mailxmail - Cursos para compartir lo que sabes
scanf("%s",nombre);
printf("ingrese el nota1: ");
scanf("%d",&n1);
printf("ingrese el nota2: ");
scanf("%d",&n2);
printf("ingrese el nota3: ");
scanf("%d",&n3);
promedio=(n1+n2+n3)/3;
if(promedio>12)
{condicion=1;
naa=naa+1;
}
else
{ condicion=2; }
if(condicion==1) printf("%s nota1: %d nota2: %d, Nota3: %d, promedio: %lf condicion
:aprobado \n",nombre,n1,n2,n3,promedio);
else printf("%s nota1: %d nota2: %d, Nota3: %d, promedio: %lf condicion
:desaprobado \n",nombre,n1,n2,n3,promedio);
if(promedio>=18) na18=na18+1;
}
printf("hay aprobados: %d y aprobados con mas de 18 %d:\n",naa,na18);
}
Ejercicio 24
Escriba el algoritmo para un programa que calcule la suma de n de términos
ingresado por el teclado de la serie 5/6,11/12,23/14,.....
Algoritmo
Inicio
Declare i, n, num, suma
Leer n
Suma:0;
Num:2;
Desde i=1 hasta i<=n hacer
Num:num*2+1
Suma:suma+num/(num+1)
Fin Desde
Imprimir suma
Fin
Variables
i : Contador
n : Numero de términos de la serie
num : valor del numerador de la serie
suma : Acumulador de la suma
Programa
#include<stdio.h>
main(void)
{
int i,n;
float num,den,suma;
printf("ingrese la cantidad de términos ");

43
mailxmail - Cursos para compartir lo que sabes
scanf("%d",&n);
suma=0;
num=2;
for(i=1;i<=n;i++)
{num=num*2+1;
suma=suma+num/(num+1);
}
printf("suma %lf ",suma);
}
for ANIDADO
Ejercicio 25
Hacer el algoritmo para un programa que imprima 3 grupos, 5 veces
"CHACHAPOYAS" en cada grupo. Antes de cada grupo deberá decir "HOLA".
Algoritmo
Inicio
Declare n, m
Desde n=1hasta n<=3 hacer
Imrpimir "HOLA"
Desde m=1 hasta m<=5 hacer
Imprimir "CHACHAPOYAS"
Fin Desde
Fin Desde
Fin
Variables
n, m : Variables contadores
Programa
#include<stdio.h>
int n,m;
main(void)
{
for(n=1;n<=3;n++)
{ printf(" HOLA \n");
for(m=1;m<=5;m++)
printf("CHACHAPOYAS \n");
}
}
COMENTARIO: Este es un ejemplo de un for anidado.

44
mailxmail - Cursos para compartir lo que sabes

13. Bucles while

Ejercicio 26
Usando la instrucción mientras hacer un algoritmo para un programa que imprima la
serie 1, 3, 5, 7,9.
Algoritmo
Inicio
Declare I
Leer i
i 1
mientras i<=9 hacer
imrimir i
i i+2
fin mientras
Fin
Variables
i : Contador
Programa
#include<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 que
la suma de la serie 1, 2, 3, 4, 5, 6, 7, 8,9,...; supere 30.
Algoritmo
Inicio
Declare i, suma
leer i, suma
i 0
suma 0
mientras suma<=30 hacer
i i+1
suma suma+i
fin mientras
imprimir i
Fin
Variables
i : Contador

45
mailxmail - Cursos para compartir lo que sabes
suma : acumulador del valor de la suma
Programa
#include<stdio.h>
main(void)
{
int i,suma;
i=0;
suma=0;
while(suma<=30)
{
i=i+1;
suma=suma+i;
}
printf(" \n número= %d", i);
}
Ejercicio 28
CONJETURA DE ULAM: Empiece con cualquier número entero positivo. Si es par
divídalo entre 2; y si es impar multiplique por 3 y aumente en 1. Obténgase enteros
positivos repitiendo el proceso hasta llegar a 1. Ejemplo si empezamos en 5 la serie
sería: 5, 16, 8, 4, 2, 1.
Haga el algoritmo para un programa que nos permita obtener secuencias de
números como las anteriores.
Algoritmo
Inicio
Declare i, num
leer num
mientras num>1 hacer
si num modulo 2 = 0 entonces num num/2
sino num num*3+1
imprimir num
fin mientras
Fin
Variables
i : contador
num : numero ingresado
Programa
#include<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);
}
}

46
mailxmail - Cursos para compartir lo que sabes

Ejercicio 29
Hacer el algoritmo para un programa que calcule la suma de ciertos números
ingresados por el teclado. El cálculo de la suma se hará en cualquier momento.
Algoritmo
Inicio
Declare suma, num
Suma 0
Mientras num <> 0 hacer
Leer num
Suma suma+num
Fin mientras
Imprimir suma
Fin
Variables
suma : acumulador de la suma
num : numero ingresado
Programa
#include<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 de
temperaturas Fahrenheit y Celsius. Sugerencia
°F °C
32 0
34 1,1111
36 2,2222
... ...
100 37,778
Algoritmo
Inicio
Declare fareng, cel
fareng 30
Mientras fareng<=100 hacer
Cel (fareng-32)*5/9
fareng fare+2
imprimir fareng, cel

47
mailxmail - Cursos para compartir lo que sabes
imprimir fareng, cel
Fin mientras
Fin
Variables
fareng: valor numérico de los grados farengheit ingresado
cel : valor numérico de los grados celcius calculado
Programa
#include<stdio.h>
main(void)
{int fare;
float cel;
fare=30;
while(fare<=100)
{ cel=(fare-32)*5/9;
fare=fare+2;
printf(" %d grados farengheit es igual a %lf grados celcius \n",fare,cel);
}
}

48
mailxmail - Cursos para compartir lo que sabes

14. Bucles while II

Ejercicio 31
Escriba el algoritmo para un programa que evalúe la función , donde x toma los
valores de 1 a 2 en pasos de 0.1. Para cada valor de x la salida debe dar el valor de y
el mensaje POSITIVO o NEGATIVO según el caso. Ejm: si y= 1.0 POSITIVO, Y=-1
NEGATIVO.
Algoritmo
Inicio
Declare a, y
A 1
Mientras a<2.1 hacer
y 4*a*a-16*a+15
a a+0.1
si y>0 entonces imprimir y, "POSITIVO"
sino imprimir y, "NEGATIVO"
fin si
Fin mientras
Fin
Variables
a : Toma los valores de x desde a hasta 2
y : Toma los valores de la expresión para cada valor de a.
Programa
#include<stdio.h>
main(void)
{float a,y;
a=1;
while(a<2.1)
{ y=4*a*a-16*a+15;
a=a+0.1;
if(y>0) printf(" %lf POSITIVO\n",y);
else printf(" %lf NEGATIVO\n",y);
}
}
USO DE CENTINELA
Se usan centinelas para salir de los bucles en cualquier instante que uno desee, un
centinela es una variable que inicialmente adopta un valor, luego dentro de un bucle
este valor cambia, por lo que nos vemos obligados a abandonarlos. Lo anterior se
comprende a través del ejercicio 32
Ejercicio 32
Escriba el algoritmo para un programa de nómina usando un ciclo mientras con
centinela. Para cada empleado, el programa debe leer el nombre, sexo, horas de
trabajo, sueldo por hora e imprimir el pago. La segunda parte debe imprimir el pago
promedio para las mujeres y el pago promedio para los hombres.
Algoritmo

49
mailxmail - Cursos para compartir lo que sabes
Inicio
Declare pht, nht, sexo, ptt, sumasm, sumasf, sm, sf, nombre, centinela
Sumasm 0
Sumasf 0
Sm 0
Sf 0
Mientras centinela <> 1 hacer
Leer sexo
Si sexo<>1 o sexo <> 2 entonces
Centinela 1 //aquí se origina la salida
Sm 1
Sf 1
sino
si sexo=1 entonces
sm sm+1
leer nombre, nht, pht
ptt nht*pht
imrpimir nombre,ptt
sumasm sumasm+ptt
else
sf sf+1
leer nombre, nht, pht
ptt nht*pht
imrpimir nombre, ptt
sumasf sumasf+ptt
fin si
Fin Si
Fin mientras
Imprimir sumasm, sumasm/sm
Imprimir sumasf, sumasf/sf
Fin
Variables
pht : valor del pago por hora trabajada.
nht : cantidad de horas trabajadas.
sexo : valor numérico que indica (1 masculino, 2 femenino)
ptt : valor del pago por persona.
sumasm: guarda la suma de pagos a los varones.
sumasf: guarda la suma de pagos a las mujeres.
sm : guarda la cantidad de varones ingresados.
sf : guarda la cantidad de mujeres ingresadas.
nombre: guarda los nombres de las personas.
centinela: valor numérico que permite finalizar el programa.
Comentario: para este caso cualquier número asignado a la variable sexo, diferente
de 1 o 2, hará que la variable centinela se cargue a 1, hecho que obligará la salida
del sistema.
Programa
#include<stdio.h>
int x,pht,nht,sexo,ptt,sumasm,sumasf;
float sm,sf;
main(void)
{char nombre[20];

50
mailxmail - Cursos para compartir lo que sabes
int centinela;
sumasm=0;
sumasf=0;
sm=0;
sf=0;
while(centinela!=1)
{printf("ingrese sexo 1 varon, 2 mujer 3 Salir \n ");
scanf("%d",&sexo);
if(sexo!=1 || sexo!=2 )
{centinela=1;
sm=1;
sf=1;}
else
{
if(sexo==1)
{sm=sm+1;
printf("ingrese nombre \n ");
scanf("%s",&nombre);
printf("ingrese nro de horas trabajadas \n");
scanf("%d",&nht);
printf("ingrese pago por hora trabajada\n");
scanf("%d",&pht);
ptt=nht*pht;
printf("%s GANA %d SOLES \n\n",nombre,ptt);
sumasm=sumasm+ptt;}
else
{sf=sf+1;
printf("ingrese nombre \n ");
scanf("%s",&nombre);
printf("ingrese nro de horas trabajadas \n");
scanf("%d",&nht);
printf("ingrese pago por hora trabajada\n");
scanf("%d",&pht);
ptt=nht*pht;
printf("%s GANA %d SOLES \n\n",nombre,ptt);
sumasf=sumasf+ptt;}
}
}
printf("los HOMBRES GANAN TOTAL: %d SOLES, PROMEDIO: %f
\n",sumasm,sumasm/sm);
printf("las MUJERES GANAN TOTAL: %d SOLES, PROMEDIO: %f",sumasf,sumasf/sf);
}
Ejercicio 33
Las potencias de 2 son: 1, 2, 4, 8,16,..... Para obtener la siguiente potencia se
multiplica la anterior por 2. Escribir el algoritmo para un programa que imprima la
primera potencia de 2 que pasa de 1000.
Algoritmo
Inicio
Declare potencia, e
Potencia 1

51
mailxmail - Cursos para compartir lo que sabes
e0
mientras potencia<=1000 hacer
potencia potencia*2
e e+1 //e es el exponente
fin mientras
imprimir e
Fin
Variables
potencia: acumula el producto de la variable potencia y el 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 enteros
positivos entre 1 y 5. El programa debe informar al usuario cuando haya escrito un
número que hace que la suma pase de 21, imprimiendo la suma y el último entero
introducido y el mensaje "mas de 21".
Algoritmo
Inicio
Leer suma, num
Suma 0
Mientras suma<=21 hacer
leer num
si num>=1 y num<=5 entonces suma suma+num
fin si
fin mientras
imprimir suma, num
Fin
Variables
suma : el valor de suma acumulada
num : numero ingresado
Programa
#include<stdio.h>
main(void)
{

52
mailxmail - Cursos para compartir lo que sabes
int suma,num;
suma=0;
printf("INGRESE NÚMEROS ENTRE 1 y 5 \n");
while(suma<=21)
{
printf("ingrese un número ");
scanf("%d",&num);
if(num>=1 && num<=5)
{suma=suma+num;}
}
printf("\ n SUMA: %d, NÚMERO: %d",suma,num);
}
Ejercicio 35
Escriba el algoritmo para un programa que imprima la sucesión completa de ULAM
para un entero de entrada, si la longitud de toda la sucesión es no más de 10. En
caso contrario sólo se imprimirá los 10 primeros enteros de la sucesión. Haga las
pruebas de mano para sucesiones de menores de 10 números iguales a 10 y
mayores de 10.
Ejemplo
5: 16, 8, 4, 3, 1.
25: 76, 38, 19, 58, 29, 88, 44, 22, 11,34.
Algoritmo
Inicio
Declare c, num
Leer num
c 1;
mientras num>1 y c<=10 hacer
si num modulo 2=0 entonces num num/2
sino num num*3+1
fin si
imprimir num
c c+1
fin mientras
Fin
Variables
c : contador
num : número que se imprimirá
Programa
#include<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;

53
mailxmail - Cursos para compartir lo que sabes
printf(" \n número= %d", num);
c=c+1;
}
}

54
mailxmail - Cursos para compartir lo que sabes

15. bucles while III

Ejercicio 36
ex se puede expresar como la siguiente serie infinita.

Si se considera 1 como el término 0, x como el primer término, como el segundo


término, como el tercer término, etc; entonces el término n es igual al término n-1
multiplicado por . Haga el algoritmo para un programa basado en esta serie para
encontrar una aproximación a . El programa debe parar cuando el último término
sumando sea menor de 0.0001. Compruebe el programa para y compare con el
valor de la función que devuelve este valor ( ) en cualquier lenguaje de
programación.
Algoritmo
Inicio
Declare t, a, n, e, x
Leer x
n 2
t x
e 1+x
mientras t>0000.1 hacer
t t*(x/n)
e e+t
n n+1
fin mientras
imprimir x, e
Fin
Variables
t : valor del término
n : posición del término
e : acumulador de t
x : valor del exponente ingresado
Programa
#include<stdio.h>
main(void)
{float n, t,e;
float x;
printf("ingrese el valor de x.. ");
scanf("%f",&x);
n=2;
t=x;
e=1+x;
while(t>0000.1)
{
t=t*(x/n);
e=e+t;
n=n+1;

55
mailxmail - Cursos para compartir lo que sabes
}
printf(" \n e a la %f es = %lf", x,e);
}
Ejercicio 37
Escriba el algoritmo para un programa que cuente el número de cifras de un entero
de entrada hasta 32000. Así para una entrada de 583 la salida debe ser "3 cifras",
asegúrese que el programa funcione para 1 y 10. Para cero la salida debe ser "UNA
CIFRA". El programa no debe cerrarse hasta ingresar el número 0.
Algoritmo
Inicio
Declare x
Mientras x<32000 y x<>0 hacer
Leer x
Si x>=0 y x<10 entonces imprimir x, "TIENE 1 CIFRA" Fin si
Si x>9 y x<100 entonces imprimir x, "TIENE 2 CIFRAS" Fin si
Si x>99 y x<1000 entonces imprimir x, "TIENE 3 CIFRAS" Fin si
Si x>999 y x< 10000 entonces imprimir x, "TIENE 4 CIFRAS" Fin si
Si x>9999 y x<=32000 entonces imprimir "TIENE 5 CIFRAS" Fin si
Fin mientras
Fin
Variables
x : valor ingresado
Programa
#include<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 10
números enteros impares para sumarlos. Elabore el programa de manera que no se
arruine si el usuario escribe algunos enteros pares. El programa debe salir del ciclo e
imprimir la suma sólo cuando se hayan ingresado los 10 enteros impares.
Algoritmo
Inicio
Declare x, suma, c
Mientras e(c<10)

56
mailxmail - Cursos para compartir lo que sabes
Leer x
si x modulo 2 <>0 entonces
suma suma+x
c c+1
fin si
Fin mientras
imprimir suma
Fin
Variables
x : valor ingresado
suma : acumulador de los valores de x
c : contador de números impares.
Programa
#include<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 entre
2 números ingresados por el teclado.
Ejemplo: primer número = 5
Último número =15
Resultado =5, 7, 11, 13
Algoritmo
Inicio
Declare i, n1, n2, j
Leer n1, n2
Desde i=n1 hasta i<=n2 hacer
j 2
mientras i modulo j <>0 hacer
j=j+1
Si i=j entonces imprimir i
Fin si
Fin mientras
Fin Desde
Fin
Variables
i : contador, número primo
j : contador

57
mailxmail - Cursos para compartir lo que sabes
n1 : primer numero del rango
n2 : segundo numero del rango
Programa
#include<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.

58
mailxmail - Cursos para compartir lo que sabes

16. Funciones y procedimientos

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

Programa
#include<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
Algoritmo
Inicio
Declare b, e
Declare potencia(m, n)
Leer b, e
Imprimir potencia(b, e)
Fin
Función potencia(m, n)
Inicio
Declare i, y
y 1
Desde i=1 hasta i<=abs(n) hacer
y y*m

59
mailxmail - Cursos para compartir lo que sabes
si n<0 entonces y 1/y
fin si
Fin Desde
potencia y
Fin
Variables
potencia: es una función
b : valor ingresado
e : valor ingresado
m : toma valores de b
n : toma valores de e
i : contador
y : guarda el valor buscado.
Programa
#include<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 de
circunferencia. Utilizar procedimientos.
Algoritmo
Inicio
Declare r;
Declare circulo(m)
Leer r
circulo(r)
Fin
Procedimiento circulo(m)
Inicio
Declare pi
Pi 3.1416
Imprimir pi*m*m

60
mailxmail - Cursos para compartir lo que sabes
Imprimir 2*pi*m
Fin
Variables
r : valor ingresado
Circulo : funcion
m : toma el valor de r
pi : guarda el valor 3.1416
Programa
#include<stdio.h>
int r;
void circulo(int m);
main(void)
{
printf(" INGRESE EL VALOR DEL RADIO.. ");
scanf("%d",&r);
circulo(r); // llamada a un procedimiento
}
void circulo(int m) // procedimiento
{float pi;
pi=3.1416;
printf("AREA: %f \n",pi*m*m);
printf("LONGITUD: %f",2*pi*m);
}
Ejercicio 43
Hacer un algoritmo para un programa que intercambie los valores de dos variables.
Algoritmo
Inicio
Declare intercambio(x, y)
Declare temp, a, b
Leer a, b
Intercambio(a, b);
Fin
Procedimiento intercambio(x, y)
Inicio
Temp x
Xy
Y temp
Imprimir x, y
Fin
Variables
temp. : temporal
a : valor ingresado
b : valor ingresado
x : toma el valor de a
y : toma el valor de b
intercambio: procedimiento
Programa

61
mailxmail - Cursos para compartir lo que sabes
Programa
#include<stdio.h>
void intercambio(int x,int y);
int temp,a,b;
main(void)
{ printf("ingrese a: ");
scanf("%d",&a);
printf("ingrese a: ");
scanf("%d",&b);
intercambio(a,b);
}
void intercambio(int x, int y)
{
temp=x;
x=y;
y=temp;
printf("nuevos avlores de a:=%d y b:=%d",x,y);
}
COMENTARIO: En este caso vea usted la variable temp no esta declarada dentro del
procedimiento intercambio. Esto significa que la variable temp es una variable global.
El ejercicio 43 no puede ser solucionado usando funciones, la única manera es a
través de procedimientos, es decir una función que no devuelve ningún valor.
Ejercicio 44
Hacer un algoritmo para un programa que calcule el factorial de un número n
Algoritmo
Inicio
Declare n
Declare factorial(a)
Leer n
Imprimir factorial(n) //llamada a la función.
Fin
Función factorial(a)
Inicio
si a=0 o a=1 entonces factorial 1 //semilla 1
sino factorial a*factorial(a-1) //aquí el llamado es nuevamente a la función
factorial(a), hasta que a=0 o a=1
Fin si
Fin
Variables
n : valor que se ingresa para calcular su factorial
a : toma el valor de n
factorial : función
Programa
#include<stdio.h>
int n,factorial(int a);
main(void)
{

62
mailxmail - Cursos para compartir lo que sabes
{
printf(" INGRESE EL NÚMERO.. ");
scanf("%d",&n);
printf("%d",factorial(n)); // llamada a la función
}
int factorial(int a)
{
if(a==0 ||a==1) return 1; //semilla 1
else return a*factorial(a-1); //el llamado es nuevamente a la funcion factorial(a),
hasta que a=0 o a=1.
}
EXPLICACIÓN: Mediante un ejemplo

Ejercicio 45
Hacer un algoritmo para un programa que calcule el enésimo elemento de la serie
FIBONACII. 1, 1, 2, 3, 5, 8,13,...
Algoritmo
Inicio
Declare n
Declare fibonacii(x)
Leer n
Imprimir n, fibonacii(n)
}
Funcion fibonacii(x)
Inicio
si x=0 ó x=1 entonces fibonacii 1 //semilla
sino fibonacii fibonacii(x-2)+fibonacii(x-1); //esta llamando nuevamente a la
función fibonacii(x) hasta que x=0 o x=1.
Fin si
Fin
Variables
n : enésimo elemento de la serie fibonacii
x : toma valores de n
fibonacii : función
Programa
#include<stdio.h>
int n;
int fibonacii(int x);
main(void)
{

63
mailxmail - Cursos para compartir lo que sabes
{
printf(" INGRESE LA POSICION DEL ELEMENTO .. ");
scanf("%d",&n);
printf("FIBONACII DE %d es %d",n,fibonacii(n));
}
int fibonacii(int x)
{
if(x==0 || x==1)return 1; //semilla
else return fibonacii(x-2)+fibonacii(x-1); //está llamando nuevamente a la función
fibonacii(x) hasta que x=0 o x=1.
}
EXPLICACIÓN
Sea la función fibonacii f(4)

Ejercicio 46
Hacer un algoritmo que calcule el enésimo elemento de la serie: 4, 6, 10, 16, 26,
42,...
Algoritmo
Inicio
Declare n
Declare elemento(x)
Leer n
Imprimir n, elemento(n)
Fin
Función elemento(x)
Inicio
Si x=0 entonces elemento 4 fin si //semilla
Si x=1 entonces elemento 6 //semilla
Sino elemento elemento(x-2)+elemento(x-1) //recursividad
Fin si
Fin
Variables
n : enésimo elemento de la serie
x : toma valores de n
elemento : función
Programa
#include<stdio.h>

64
mailxmail - Cursos para compartir lo que sabes
int n;
int elemento(int x);
main(void)
{
printf(" INGRESE LA POSICIÓN DEL ELEMENTO .. ");
scanf("%d",&n);
printf("ELEMENTO DE %d es %d",n,elemento(n));
}
int elemento(int x)
{
if(x==0)return 4; //semilla
if(x==1)return 6; //semilla
else return elemento(x-2)+elemento(x-1); //recursividad
}
Ejercicio 47
Hacer un algoritmo para un programa que calcule el enésimo elemento de la serie:
1, 1, 2, 4, 7, 13, 24, 44,...
Algoritmo
Inicio
Declare n
Declare elemento(x)
Leer n
Imprimir n, elemento(n)
Fin
Función elemento(x)
Inicio
Si x=0 entonces elemento 1 Fin si//semilla
Si x=1 entonces elemento 1 Fin si//semilla
Si x=2 entonces elemento 2 //semilla
Sino elemento elemento(x-3)+elemento(x-2)+elemento(x-1);
//recursividad
Fin
Variables
n : enésimo elemento de la serie fibonacii
x : toma valores de n
elemento : función
Programa
#include<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)

65
mailxmail - Cursos para compartir lo que sabes
{
if(x==0)return 1; //semilla
if(x==1)return 1; //semilla
if(x==2)return 2; //semilla
else return elemento(x-3)+elemento(x-2)+elemento(x-1); //recursividad
}

66
mailxmail - Cursos para compartir lo que sabes

17. Llamada a funciones recursivamente

Ejercicio 48
Hacer un algoritmo para un programa que halle el elemento n de la serie, 2n: 1 2 4
8 16 32 64 128 ... para n = 0,1,2,3,4,5,6,7,8, .... ; También diseñe una función que
regrese el exponente correspondiente a la potencia 2n.
Algoritmo
Inicio
Declare n, potencia
Declare potenciadedos(x), exponente(valor)
Leer n
Potencia potenciadedos(n)
Imprimir n, potencia
Imprimir potencia, exponente(potencia)
Fin
Función potenciadedos(x)
Inicio
Si x=0 entonces potenciadedos 1
Sino potenciadedos 2*potenciadedos(x-1)
Fin si
Fin
Función exponente(valor)
Inicio
Si valor=1 entonces exponente 0
Sino exponente exponente(valor/2)+1
Fin si
Fin
Variables
n : valor ingresado
X : toma valor de n
valor : toma el valor de la variable potencia
potencia : valor de la potencia del témino n
potenciadedos : función
exponente : función
Programa
#include<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));
}

67
mailxmail - Cursos para compartir lo que sabes

int potenciadedos(int x)
{
if(x==0)return 1;
else return 2*potenciadedos(x-1);
}
int exponente(int valor)
{
if(valor==1)return 0;
else return 1+exponente(valor/2);
}
COMENTARIO: ambos procesos son recursivos
En el caso del ejercicio anterior tal vez no note lo que sucede con la función
exponente, ya que la posición que se ingresa representa el exponente. Vea el
ejercicio 49 y lograra comprenderlo mejor.
Ejercicio 49
Compruebe el siguiente algoritmo ingresando valores resultados de la potencia de
2, ejemplo: 256, 32, 1024, etc. y verá la importancia de la función exponente.
Algoritmo
Inicio
Declare n
Declare exponente(valor)
Leer n
Imprimir n, exponente(n)
Fin
Funcion exponente(valor)
Inicio
Si valor=1 exponente 0
Sino exponente exponente(valor/2)+1
Fin si
Fin
Variables
n : valor ingresado
exponente : función
valor : toma el valor de n
Programa
#include<stdio.h>
int exponente(int valor);
int potencia;
main(void)
{
printf(" INGRESE VALOR POTENCIA DE 2 .. ");
scanf("%d",&potencia);
printf("%d es 2 a la %d",potencia, exponente(potencia));
}
int exponente(int valor)
{

68
mailxmail - Cursos para compartir lo que sabes
if(valor==1)return 0;
else return 1+exponente(valor/2);
}
Ejercicio 50
Desarrollar el ejercicio 14, usando funciones y procedimientos.
Algoritmo usando funciones
Inicio
Declare opcion, base, altura, area
Leer opcion
Seleccionar opcion
Caso 1
Leer base, altura
Imprimir area(base, altura)
Caso 2
Leer area, altura
Imprimir base(area,altura)
Caso 3
Leer area, base
Imprimir altura(area,base)
Fin selección
Fin
Función area(base,altura)
Inicio
Area base*altura/2
Fin
Función base(area, altura)
Inicio
base 2*area/altura
Fin
Función altura(area,base)
Inicio
altura 2*area/base
Fin

Variables
opcion : para saber cual es calculo a realizar.
base : valor de la base, también es función
altura : valor de la altura, también es función
area : valor del área, también es función
Comentario: algunas variables pueden funcionar como tal o como funciones, en este
problema, fíjese por que.
Programa usando funciones
#include<stdio.h>
int operacion;
float area(int b,int h);
float base(int a, int h);
float altura(int a,int b);

69
mailxmail - Cursos para compartir lo que sabes
main(void)
{
printf("EJERCICIOS DE LOS TRIÁNGULOS ........ \n");
printf("============================ \n\n\n");
printf("1 para calcular el área de un triángulo \n");
printf("2 para calcular la base \n");
printf("3 para calcular la altura \n\n");
printf("ingrese una opcion ........ ");
scanf("%d",&operacion);
switch(operacion)
{
float a,b,h;
case 1:
printf("AREA DEL TRIÁNGULO \n");
printf("ingrese la base ........ ");
scanf("%f",&b);
printf("ingrese la altura ........ ");
scanf("%f",&h);
printf("%f",area(b,h));
break;
case 2:
printf("AREA DEL TRIÁNGULO \n");
printf("ingrese el area ........ ");
scanf("%f",&a);
printf("ingrese la altura ........ ");
scanf("%f",&h);
printf("%f",base(a,h));
break;
case 3:
printf("AREA DEL TRIÁNGULO \n");
printf("ingrese el area ........ ");
scanf("%f",&a);
printf("ingrese la base ........ ");
scanf("%f",&b);
printf("%f",altura(a,b));
break;
default:
printf(" nada mas ........ ");
}
}
float area(int b,int h)
{return b*h/2;}
float base(int a, int h)
{return 2*a/h;}
float altura(int a,int b)
{return 2*a/b;}

70
mailxmail - Cursos para compartir lo que sabes

18. Algoritmo usando procedimiento

Inicio
Declare area, base, altura
Seleccionar opcion
Caso 1
Area()
Caso 2
Base()
Caso 3
Altura()
Fin selección
Fin
Procedimiento area
Inicio
Declare area, base, altura
Leer base, altura
Area base*altura/2
Mostrar area
Fin
Procedimiento base
Inicio
Declare area, base, altura
Leer area, altura
base 2*area/altura
mostrar base
Fin
Procedimiento altura
Inicio
Declare area, base, altura
Leer area,base
altura 2*area/base
mostrar altura
Fin
Variables
opcion : para saber cual es calculo a realizar.
base : valor de la base, también es procedimiento
altura : valor de la altura, también es procedimiento
area : valor del área, también es procedimiento
Programa usando procedimiento
#include<stdio.h>
int operacion;
void area();
void base();
void altura();
main(void)
{
printf("EJERCICIOS DE LOS TRIÁNGULOS ........ \n");

71
mailxmail - Cursos para compartir lo que sabes
printf("EJERCICIOS DE LOS TRIÁNGULOS ........ \n");
printf("============================ \n\n\n");
printf("1 para calcular el área de un triángulo \n");
printf("2 para calcular la base \n");
printf("3 para calcular la altura \n\n");
printf("ingrese una opcion ........ ");
scanf("%d",&operacion);
switch(operacion)
{
case 1:
area();
break;
case 2:
base();
break;
case 3:
altura();
break;
default:
printf(" nada mas ........ ");
}
}
void area()
{
float altura, base;
printf("AREA DEL TRIÁNGULO \n");
printf("ingrese la base ........ ");
scanf("%f",&base);
printf("ingrese la altura ........ ");
scanf("%f",&altura);
printf("el area del triángulo es %f ",base*altura/2);
}
void base()
{
float area,altura;
printf("BASE DE UN TRIÁNGULO \n");
printf("ingrese el area ........ ");
scanf("%f",&area);
printf("ingrese la altura ........ ");
scanf("%f",&altura);
printf("la base de area del triángulo es %f ",2*area/altura);
}
void altura()
{
float area,base;
printf("ALTURA DE UN TRIÁNGULO \n");
printf("ingrese el area ........ ");
scanf("%f",&area);
printf("ingrese la base ........ ");

72
mailxmail - Cursos para compartir lo que sabes
scanf("%f",&base);
printf("la base de área del triángulo es %f ",2*area/base);
}

73
mailxmail - Cursos para compartir lo que sabes

19. Apéndice

EJERCICIO PROPUESTO
EJERCICIO 1: Desarrollar un algoritmo para un programa que imprima 40 números
generados aleatoriamente distintos entre 1 y 40. Sugerencia use un arreglo.
Ejemplo de resultados:
- 29, 26, 17, 33, 25, 18, 37, 23, 13, 3, 24, 1, 11, 22, 7, 21, 10, 31, 6, 2, 4, 15, 27,
19, 38, 40, 14, 34, 32, 36, 8, 30, 35, 28, 5, 9, 20, 39, 16, 12.
- 16, 13, 4, 20, 12, 5, 24, 11, 10, 40, 30, 28, 38, 9, 34, 8, 37, 18, 29, 31, 2, 14,
39, 6, 25, 27, 21, 19, 23, 35, 17, 22, 7, 1, 15, 32, 36, 3, 33, 26
Con el mismo procedimiento usted puede generar una cantidad mayor de números
para comprobar la verdadera capacidad de microprocesamiento de su computador.
CÓDIGO ASCII
Pulse la tecla Alt y escriba el número -en el bloque de números del
teclado-correspondiente a la columna de los ASCII para obtener el símbolo
requerido.

BIBLIOGRAFÍA

74
mailxmail - Cursos para compartir lo que sabes

- SCHILDT, H. Programación en Turbo C. Primera Edición en español. McGRAW


HILL/INTERAMERICANA DE ESPAÑA. España. 1998.
- JOYANES AGUILAR,J. Fundamentos de programación. Algoritmos y Estructura de
Datos. Primera Edición. McGRAW HILL/INTERAMERICANA DE ESPAÑA. España. 1998.
- MAYNARD KONG. Lenguaje de Programación C. Fondo editorial de la Pontificia
Universidad Católica del Perú. Lima. 1987.
- HENNEFELD, J. Turbo Pascal con Aplicaciones 3.0, 4.0, y 5,0. PWS Publishers.
Estados Unidos de América. 1989.

75

You might also like