Algoritmos y lenguaje CAutor: abraham sopla
[http://www.mailxmail.com/curso-algoritmos-lenguaje-c]
Descubre miles de cursos como éste en www.mailxmail.com 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 losordenadores.
Puedes descubrir cada paso que realizan, cómo lo realizan, qué es lo qué utilizan yen qué orden lo utilizan.
Visita más cursos como este en mailxmail:[http://www.mailxmail.com/cursos-informatica][http://www.mailxmail.com/cursos-programacion]
¡Tu opinión cuenta! Lee todas las opiniones de este curso y déjanos la tuya:[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/opiniones]
Cursos Valoración Alumnos Vídeo
Introducción básica a LinuxCurso básico de linux explicando aspectos importantes de fedora core, knopix, suse yotras distribuciones de linux. este curso está recomendado para usuarios que ya h... [14 /07/06]
11.995
SQLSql (structured query language) es un lenguaje de programación para acceder y manipularbases de datos. sql surgió de un proyecto de ibm en el que investigaba e... [10 /05/04]
24.968
Manual de programaciónEl objetivo de este curso consiste en ofrecer conocimientos básicos de programación. nopretender enseñar cómo programar en un lenguaje específico, ni utilizar ninguna te... [31 /01/08]
1.316
Introducción básica al protocolo HTTPEs el conjunto de reglas que siguen dos computadores para intercambiar información através de una red como internet. un protocolo es una regla establecida para determina... [03 /06/08]
493
Procesos en C. Sincronización (primera parte)Curso de informática sobre sincronización de procesos en c y señales en linux que teofrece la posibilidad de comprender los mecanismos de comunicación entre procesosinf... [21 /10/08]
4 9
Cursos similares
Descubre miles de cursos como éste en www.mailxmail.com 2
mailxmail - Cursos para compartir lo que sabes
1. Introducción[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/introduccion]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.
Descubre miles de cursos como éste en www.mailxmail.com 3
mailxmail - Cursos para compartir lo que sabes
2. Indicaciones para principiantes[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/indicaciones-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,
Descubre miles de cursos como éste en www.mailxmail.com 4
mailxmail - Cursos para compartir lo que sabes
puede ser matemáticas, estadística, química, biología, investigación de operaciones,contabilidad, etc.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.
Descubre miles de cursos como éste en www.mailxmail.com 5
mailxmail - Cursos para compartir lo que sabes
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 vanaumentado 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
Descubre miles de cursos como éste en www.mailxmail.com 6
mailxmail - Cursos para compartir lo que sabes
3. Apuntes de Lenguaje C[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/apuntes-lenguaje-c-1]
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.
Descubre miles de cursos como éste en www.mailxmail.com 7
mailxmail - Cursos para compartir lo que sabes
2.3 ESTRUCTURA MÁS SIMPLE DE UN PROGRAMA EN C
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.
Descubre miles de cursos como éste en www.mailxmail.com 8
mailxmail - Cursos para compartir lo que sabes
4. Apuntes de Lenguaje C II[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/apuntes-lenguaje-c-2]
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.
Descubre miles de cursos como éste en www.mailxmail.com 9
mailxmail - Cursos para compartir lo que sabes
2.4.3 LECTURA Y ESCRITURA DE VARIABLES
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:
Descubre miles de cursos como éste en www.mailxmail.com 10
mailxmail - Cursos para compartir lo que sabes
Para: a=5 y b=3
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.
Descubre miles de cursos como éste en www.mailxmail.com 11
mailxmail - Cursos para compartir lo que sabes
5. Estructuras[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/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.
Descubre miles de cursos como éste en www.mailxmail.com 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 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); }}
Descubre miles de cursos como éste en www.mailxmail.com 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. 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;
Descubre miles de cursos como éste en www.mailxmail.com 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 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);}
Descubre miles de cursos como éste en www.mailxmail.com 15
mailxmail - Cursos para compartir lo que sabes
6. Funciones y procedimientos[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/funciones-procedimientos-1]
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 mas
Descubre miles de cursos como éste en www.mailxmail.com 16
mailxmail - Cursos para compartir lo que sabes
interesa es el proceso que va ha realizar y sobre ello el valor que devuelve.- 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);
Descubre miles de cursos como éste en www.mailxmail.com 17
mailxmail - Cursos para compartir lo que sabes
7. Estructuras secuenciales[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/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
Variables
Descubre miles de cursos como éste en www.mailxmail.com 18
mailxmail - Cursos para compartir lo que sabes
resultado: valor de la expresión luego de ser evaluada.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
Descubre miles de cursos como éste en www.mailxmail.com 19
mailxmail - Cursos para compartir lo que sabes
Ejercicio 3
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.
Descubre miles de cursos como éste en www.mailxmail.com 20
mailxmail - Cursos para compartir lo que sabes
AlgoritmoInicio.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);}
Descubre miles de cursos como éste en www.mailxmail.com 21
mailxmail - Cursos para compartir lo que sabes
8. Estructuras selectivas[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/estructuras-selectivas-1]
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
Variables
Descubre miles de cursos como éste en www.mailxmail.com 22
mailxmail - Cursos para compartir lo que sabes
num: Número que se ingresa por el teclado e indica la cantidad de personaspago: El valor del pago que se calculará.
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);
Descubre miles de cursos como éste en www.mailxmail.com 23
mailxmail - Cursos para compartir lo que sabes
seg=rmin%60; printf("%d HORAS\n",horas); 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");}
Descubre miles de cursos como éste en www.mailxmail.com 24
mailxmail - Cursos para compartir lo que sabes
9. Estructuras selectivas II[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/estructuras-selectivas-2]
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 las
Descubre miles de cursos como éste en www.mailxmail.com 25
mailxmail - Cursos para compartir lo que sabes
mujeres 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 dela 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
Descubre miles de cursos como éste en www.mailxmail.com 26
mailxmail - Cursos para compartir lo que sabes
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). Siel 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
Descubre miles de cursos como éste en www.mailxmail.com 27
mailxmail - Cursos para compartir lo que sabes
Si num<=4 entonces Tot =num*15 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);}
Descubre miles de cursos como éste en www.mailxmail.com 28
mailxmail - Cursos para compartir lo que sabes
10. Selección múltiple switch[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/seleccion-multiple-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");
Descubre miles de cursos como éste en www.mailxmail.com 29
mailxmail - Cursos para compartir lo que sabes
printf(" MIERCOLES\n"); break; 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
Descubre miles de cursos como éste en www.mailxmail.com 30
mailxmail - Cursos para compartir lo que sabes
Programa#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.
Descubre miles de cursos como éste en www.mailxmail.com 31
mailxmail - Cursos para compartir lo que sabes
Programa#include<stdio.h>#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 ........ ");
Descubre miles de cursos como éste en www.mailxmail.com 32
mailxmail - Cursos para compartir lo que sabes
scanf("%d",&b); printf("ingrese lado c......... "); 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 ........ ");}}
Descubre miles de cursos como éste en www.mailxmail.com 33
mailxmail - Cursos para compartir lo que sabes
11. Bucles o estructuras repetitivas [http://www.mailxmail.com/curso-algoritmos-lenguaje-c/bucles-estructuras-repetitivas-1]
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 ingresado
Descubre miles de cursos como éste en www.mailxmail.com 34
mailxmail - Cursos para compartir lo que sabes
mayor : Para asignarle el valor del mayor de los números leídos.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);
Descubre miles de cursos como éste en www.mailxmail.com 35
mailxmail - Cursos para compartir lo que sabes
if(maxarea<area) {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 Desde
Descubre miles de cursos como éste en www.mailxmail.com 36
mailxmail - Cursos para compartir lo que sabes
Imprimir sumasm, sumasm/smImprimir 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;} }
Descubre miles de cursos como éste en www.mailxmail.com 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 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);}
Descubre miles de cursos como éste en www.mailxmail.com 38
mailxmail - Cursos para compartir lo que sabes
12. Bucles o estructuras repetitivas II[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/bucles-estructuras-repetitivas-2]
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:
Descubre miles de cursos como éste en www.mailxmail.com 39
mailxmail - Cursos para compartir lo que sabes
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 decada 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.
Descubre miles de cursos como éste en www.mailxmail.com 40
mailxmail - Cursos para compartir lo que sabes
nht : número de horas trabajadas.ph : pago por hora normal.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
Descubre miles de cursos como éste en www.mailxmail.com 41
mailxmail - Cursos para compartir lo que sabes
Escriba el algoritmo para un programa Interactivo para calificar a un grupo de 40alumnos 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
Descubre miles de cursos como éste en www.mailxmail.com 42
mailxmail - Cursos para compartir lo que sabes
for( i=1; i<=40; i++){printf("ingrese el nombre ");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;
Descubre miles de cursos como éste en www.mailxmail.com 43
mailxmail - Cursos para compartir lo que sabes
float num,den,suma;printf("ingrese la cantidad de términos ");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.
Descubre miles de cursos como éste en www.mailxmail.com 44
mailxmail - Cursos para compartir lo que sabes
13. Bucles while[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/bucles-while-1]
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
Variables
Descubre miles de cursos como éste en www.mailxmail.com 45
mailxmail - Cursos para compartir lo que sabes
Variablesi : Contadorsuma : 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);
Descubre miles de cursos como éste en www.mailxmail.com 46
mailxmail - Cursos para compartir lo que sabes
}}
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
Descubre miles de cursos como éste en www.mailxmail.com 47
mailxmail - Cursos para compartir lo que sabes
Cel (fareng-32)*5/9 fareng fare+2imprimir 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); }}
Descubre miles de cursos como éste en www.mailxmail.com 48
mailxmail - Cursos para compartir lo que sabes
14. Bucles while II[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/bucles-while-2]
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.
Descubre miles de cursos como éste en www.mailxmail.com 49
mailxmail - Cursos para compartir lo que sabes
AlgoritmoInicioDeclare 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)
Descubre miles de cursos como éste en www.mailxmail.com 50
mailxmail - Cursos para compartir lo que sabes
{char nombre[20];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, e
Descubre miles de cursos como éste en www.mailxmail.com 51
mailxmail - Cursos para compartir lo que sabes
Potencia 1e 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)
Descubre miles de cursos como éste en www.mailxmail.com 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); 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;
Descubre miles de cursos como éste en www.mailxmail.com 53
mailxmail - Cursos para compartir lo que sabes
else num=num*3+1; printf(" \n número= %d", num); c=c+1; }}
Descubre miles de cursos como éste en www.mailxmail.com 54
mailxmail - Cursos para compartir lo que sabes
15. bucles while III[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/bucles-while-3]
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);
Descubre miles de cursos como éste en www.mailxmail.com 55
mailxmail - Cursos para compartir lo que sabes
e=e+t; n=n+1; }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.
AlgoritmoInicio
Descubre miles de cursos como éste en www.mailxmail.com 56
mailxmail - Cursos para compartir lo que sabes
Declare x, suma, cMientras e(c<10) 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
Variables
Descubre miles de cursos como éste en www.mailxmail.com 57
mailxmail - Cursos para compartir lo que sabes
i : contador, número primoj : contadorn1 : 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.
Descubre miles de cursos como éste en www.mailxmail.com 58
mailxmail - Cursos para compartir lo que sabes
16. Funciones y procedimientos[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/funciones-procedimientos-2]
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 1
Descubre miles de cursos como éste en www.mailxmail.com 59
mailxmail - Cursos para compartir lo que sabes
Desde i=1 hasta i<=abs(n) hacery y*msi 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 pi
Descubre miles de cursos como éste en www.mailxmail.com 60
mailxmail - Cursos para compartir lo que sabes
Pi 3.1416Imprimir pi*m*mImprimir 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 b
Descubre miles de cursos como éste en www.mailxmail.com 61
mailxmail - Cursos para compartir lo que sabes
intercambio: procedimiento
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);
Descubre miles de cursos como éste en www.mailxmail.com 62
mailxmail - Cursos para compartir lo que sabes
main(void){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)
Descubre miles de cursos como éste en www.mailxmail.com 63
mailxmail - Cursos para compartir lo que sabes
main(void){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
Descubre miles de cursos como éste en www.mailxmail.com 64
mailxmail - Cursos para compartir lo que sabes
#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){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));}
Descubre miles de cursos como éste en www.mailxmail.com 65
mailxmail - Cursos para compartir lo que sabes
int elemento(int x){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}
Descubre miles de cursos como éste en www.mailxmail.com 66
mailxmail - Cursos para compartir lo que sabes
17. Llamada a funciones recursivamente[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/llamada-funciones-recursivamente]
Ejercicio 48
Hacer un algoritmo para un programa que halle el elemento n de la serie, 2n: 1 2 4 816 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);
Descubre miles de cursos como éste en www.mailxmail.com 67
mailxmail - Cursos para compartir lo que sabes
printf("%d es 2 a la %d",potencia, exponente(potencia));}
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 el ejercicio49 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.
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));}
Descubre miles de cursos como éste en www.mailxmail.com 68
mailxmail - Cursos para compartir lo que sabes
int exponente(int valor){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);
Descubre miles de cursos como éste en www.mailxmail.com 69
mailxmail - Cursos para compartir lo que sabes
float base(int a, int h);float altura(int a,int b);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;}
Descubre miles de cursos como éste en www.mailxmail.com 70
mailxmail - Cursos para compartir lo que sabes
Descubre miles de cursos como éste en www.mailxmail.com 71
mailxmail - Cursos para compartir lo que sabes
18. Algoritmo usando procedimiento[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/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)
Descubre miles de cursos como éste en www.mailxmail.com 72
mailxmail - Cursos para compartir lo que sabes
{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);
Descubre miles de cursos como éste en www.mailxmail.com 73
mailxmail - Cursos para compartir lo que sabes
printf("ingrese la base ........ "); scanf("%f",&base); printf("la base de área del triángulo es %f ",2*area/base);}
Descubre miles de cursos como éste en www.mailxmail.com 74
mailxmail - Cursos para compartir lo que sabes
19. Apéndice[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/apendice]
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.
Descubre miles de cursos como éste en www.mailxmail.com 75
mailxmail - Cursos para compartir lo que sabes
BIBLIOGRAFÍA
- 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.
Visita más cursos como este en mailxmail:[http://www.mailxmail.com/cursos-informatica][http://www.mailxmail.com/cursos-programacion]
¡Tu opinión cuenta! Lee todas las opiniones de este curso y déjanos la tuya:[http://www.mailxmail.com/curso-algoritmos-lenguaje-c/opiniones]
Cursos Valoración Alumnos Vídeo
Manual de programaciónEl objetivo de este curso consiste en ofrecer conocimientos básicos de programación. nopretender enseñar cómo programar en un lenguaje específico, ni utilizar ninguna te... [31 /01/08]
1.316
Introducción a OracleEn el curso se introducen los conceptos básicos para saber que es un gestor de bases dedatos relacional, y la utilidad de oracle para este cometido.... [01 /02/06]
14.487
SQLSql (structured query language) es un lenguaje de programación para acceder y manipularbases de datos. sql surgió de un proyecto de ibm en el que investigaba e... [10 /05/04]
24.968
Introducción básica al protocolo HTTPEs el conjunto de reglas que siguen dos computadores para intercambiar información através de una red como internet. un protocolo es una regla establecida para determina... [03 /06/08]
493
Introducción básica a LinuxCurso básico de linux explicando aspectos importantes de fedora core, knopix, suse yotras distribuciones de linux. este curso está recomendado para usuarios que ya h... [14 /07/06]
11.995
Cursos similares
Descubre miles de cursos como éste en www.mailxmail.com 76
mailxmail - Cursos para compartir lo que sabes