algoritmos

May 16, 2018 | Author: Cristian Madrid | Category: Algorithms, Computer Program, C++, Programming Language, Technology
Share Embed Donate


Short Description

Download algoritmos...

Description

A lg o r it m o s y D ia g r a m a s " e f lu jo A p lic a d o s O



Megrabyte ue GRUPO

EDITORIAL

Primera Edición, Octubre 2006 : Computación e informática Hecho el Depósito Legal en la Biblioteca Nacional del Perú N e 2006 - 5844 (Ley N s 26905/D.S. N?017-98-ED) R.U.C. ND20507993444 ISBN: 9972-821 -83-8 Area

© Edward Aburto Correa Gerente General

 © Robert Jaime Pantigoso Silva ____   © GGan Cario Apolinario García Autor

__„

Un Hbro abierto es un cerebro que habla; cerrado un amigo que espera; olvidado, un alma que perdona; destruido, un corazón que llora.

Proverbio hindú   Dedico estas páginas a quienes me apoyan día a día y a ti que en la distancia iluminas el camino hacia la felicidad, te iubesc mult mon   petit puiutz.

Contenido de CD

C o n t e n id o d e l E! Cd adjunto a este iibro contiene todos los programas desarrollados en =r  irascurso del texto, con la finalidad de q ue el leyente comprue be la veracidad

ÍNDICE Capítulo: Conceptos Básicos Algoritmos Características de los algoritmos Programa Diagrama de flujo Variables Constantes Expresiones Operadores

19 ¡9 19 20 21 21 2] 22

  Algoritmos y Diagramas de flujo aplicados e n C++

Pseudocódigo Ejemplo 1.1: Área de un triángulo Ejemplo 1.2: Escritura en forma inversa Ejemplo 1.3: Resolver (A+B)72 Ejemplo 1.4: Promedio de un alumno Ejemplo 1.5: Cuadrado y cubo de un número positivo.. Ejemplo 1.6: Perímetro y superficie de un rectángulo... Ejemplo 1.7: Área de circunferencia Problema 1.8: Conversión de unidades Problema 1.9: Casa de cambio Problema 1.10: Área y volumen de un cilindro Problema I.II: Conversión de acres a hectárea Problema 1.12: Velocidad en olimpiadas Problema 1.13: Área del triángulo en base a sus lados. Problema Í.I4: Intercambio de tres valores Problema 1.15: Intercambio de cinco números Problema 1.16: Invertir número de tres cifras Problema 1.17: Número mínimo de billetes Problema 1.18: Operaciones sobre un cono Problema 1.19: Área y volumen de una esfera Problema 1.20: Operaciones sobre un cubo Problema 1.21: Distancia entre dos puntos

índice

27 27 29 30 32 ió

34 36 37 39 40 41 42 45 46 48 49 52 53 56 57 59

< ii |> f tu l o I I : E s t r u c t u r a s l ó g i c a s s e l e c t i v a s Intrndi

n

SL,.Entonces (Selección simple) 3 I: Alumno aprobado Amurillo n trabajador ..Si no (Alternativa doble)

63 63 64 65 67

GRITO EDITORIAL MEGABYTE

Ejemplo 2.3: Alumno aprobado II Ejemplo 2.4: Aumento a trabajador II Anudamiento de Estructuras condicionales Ejemplo 2.5: Validación de nota ingresada Ejemplo 2.6: Número par o impar I ,i estructura de selección múltiple Ejemplo 2.7: Resolver función Ejemplo 2.8: Aumento de sueldo según1 categoría Ejemplo 2.9: Números en forma descendente Ejemplo 2.10; Número de sonidos emitidos por un grillo Ejemplo 2.11: Factores q satisfacen a P3 + Q4 - 2*P2 < 680 Ejemplo 2.12: Mayor y menor de dos números Ejemplo 2.13: Reportar calificación según rango de notas Ejemplo 2.14: Mayor de tres números Ejemplo 2.15: Números ordenados Ejemplo 2.5 6: Al menos dos letras iguales Ejemplo 2.17: Menú de operaciones Ejemplo 2.18: Aumento de trabajador según categoría Ejemplo 2.19: Promedio de alumno Ejemplo 2.20: Número capicúa Ejemplo 2.21 Formato de Fechas Ejemplo 2.22: Validar fecha Ejemplo 2.23: Calcular día siguiente Ejemplo 2.24: Días transcurridos

67 69 71 73 74 75 77 79 82 83 84 85 88 90 91 92 94 98 101 103 105 109 112

¡ipltulo III: Estructuras lógicas repetitivas Dtrotlucción 1

111 u 11 ira

117 Hacer Mientras

lo 3.1: Nómina de una empresa I ••• KMTORIAL MEGABYTE

117

119

índic

  Algoritmos y Diagramas de flujo aplicados en

Ejemplo 3.2; Nómina con estructura Hacer mientras

121

Ejemplo 3.3: Obtene r número de ceros ingresado s

123

Estruct ura Mient ras

125

i mplo 1,2: Media aritm étic a mpl o4 ,3 : Máximo y mínimo de unas lista de números il.

iii' iiln de un vector

|d(1 til 111 burbuja

173 174 176 176

líjcmplo 3.4: Suma de gastos de viaje

126

Ejemplo 3.5: Calcul ar el cubo de un grupo de número s

128

I femplo 3.6: Cálcuio de compr a total

130

I [emplo 3.7: Pago de trabajadores

131

Ejemplo 3.8: Cálcul o de serie 100 + 98 + 96 + 94 + . . . + 0

133

I ¡emplo 3.9: Mostrar los N núme ros enteros

133

líjcmplo 3.10: Prom edio de un grupo de alumno s

135

litlii i Inc ul

19 5

rjomplo 3.11: Operaciones con números pares e impares

137

• l 'i . . l. i l u n a r i a

198

Ejemplo 3.12: Tabla de multiplicar.

• >l> orde nam iento de la burbuja mejor ada r orden amient o por Inserción i de Selección lOÜü tic She ll I < )peraciones con un vector auto genera do

226

1 ¡emplo 4. 1: Suma de elementos de un arreglo

171

GRUPO EDITORIAL MEGABYTE

I DIIONIAI. MliííABYTE

 Introducción

In tr o d u c c ió n • = ¿oritmos forman parte de nuestra vida cotidiana, a menudo los hacemos sin •B cuenta. Por ejemplo al ¡r de compras, estamos pensando que cosas se alaran, hasta que precio estamo s dispuestos a pagar, si no encontramos lo que s s r o s podemos reem plazarlo?, cuanto tiem po tenem os para realizar las compras?, -\-  po suficiente que podemos hacer?. " ~jchas interrogantes que intuitivamente vamos resolviendo mediante un ~: es por ello que e l algoritm o es una form a de resolver un problem a. S e trata : T :.e dicho algoritmo sea el mas eficiente.

Capítulo I Concentos "Básicos capítulo contiene:

Capítulo I:

I^nceptos básicos de algoritmia

Conceptos Básicos

 Algoritmos y Diagramas de flujo aplicados en

Capítulo I:

C++

Conceptos Básicos

Ínstrucciaxiñs_que forman el algoritmo (ya codificados en un lenguaje de programación) y que se dan a una computadora para solucionar un problema

Salida: Se utiliza para mostrar datos, será el símbolo usado en este texto.

específico.

Conector: Sirve para enlazar dos paites cualesquiera de un diagrama a través de un conector en la salida y otro conector en la entrada.

Heurística l )n algoritmo que da o produce una solución a un problema planteado aunque estii solución lio sea la óptima es llamado "Heurístico".

Salida: Indica operaciones lógicas o de comparación entre datos y en función del resultado de la misma determina cual de los distintos caminos alternativos del programa se debe seguir.

Diagrama de flujo El diagrama de flujo es. la representación gráfica de dicha secuencia de instrucciones que conforman el algoritmo^ El siguiente es un ejemplo de un diagrama de flujo para sumar dos variables B y H, el resultado es almacenado en la variable A.

En caso de: Usado para indicar varias acciones posibles según sea un dato de entrado al control. •

Desde: Estructura repetitiva q indica un ciclo de N repeticiones de una o mas acciones.

1

.mi los elementos que se utilizan para contener datos de distintos tipos: números, lis, cadenas de caracteres, valores lógicos, etc. El valor contenido en una Bflílblc puede cambiara lo largo de la ejecución de un programa.

< onstantes Los símbolos mas comunes y los cuales usaremos son: Terminal: Se usa para indicar el inicio o fin de un diagrama de flujo Proceso: Cualquier tipo de operación que pueda originar cambio de valor, operaciones aritméticas, de transformaciones, etc. Entrada/Salida: Se usa para indicar el ingreso o salida de datos. GRUPO EDITORIAL MEGAIÍYTE

MUÍ elementos que contienen datos, el valor asignado a una constante es fijo y i |fl puede cambiar durante toda la ejecución de un programa.

i (¿presiones I as expresiones son combinaciones de constantes, variables, símbolo de Dpi i.u-ión, paréntesis y nombres de funciones especiales. Por ejemplo a + (b + 3 )/ c

Cuda expresión toma un valor que se determina tomando los valores de las •Hables y constantes implicadas y la ejecución de las operaciones implicadas. miro EDITORIAL MEGABYTE

Capítulo I: Conceptos Básicos

¡lmo\ y l>utgi-gnuis de flujo aplicados en C++

I iiui («presión consta de operadores y operandos. Según sea el tipo de datos qU9 manipulan, se clasifican las expresiones en: Aritméticas Relaciónales i ógicas

Operadores i .os operadores aritméticos nos permiten, básicamente, hacer cualquier operación .111 (mélica (suma, resta, multiplicación y división). En la siguiente tabla se muestran los operadores de los que se dispone.

+ * / A

aperadores Lógicos

1 os operadores lógicos producen un resultado booleano, y sus operandos son liimhién valores lógicos o asimilables a ellos (los valores numéricos son asimilados ii filerto o falso según su valor sea cero o distinto de cero). I os operadores lógicos son tres; dos de ellos son binarios, el último (negación) i . imano. AND (Y)

Operadores Aritméticos

Operador -

i

Acción

Ejemplo

Resta Suma Multiplicación División Potencia Módulo División entera

x = 5- 3

x = 2+ 3 x=2* 3 x = 6/ 2 x =3

A

2

Resultado 2 5 6 3 9

Produce un resultado con valor de verdad true cuando ambos operandos tienen Vfllor de verdad true; en cualquier otro caso el resultado tendrá un valor de verdad lillsc. Sintaxis: operando! AND.operando2 OR (O)

Produce un resultado con yalor de falso cuando ambos operadores ti enen valores I.ilsos; en cualquier otro caso el resultado tendrá un valor de verdad. Sintaxis: operando 1 ORoperan do2 NOT (NO)

El operador MOD nos devuelve el residuo de una división entera, mientras que el operador DTV  permite realizar una división entre dos números enteros, allí  radica la diferencia con e! operador "/".

Invierte el valor de verdad de operando. Sintaxis: NOT operando I Ejemplo: Si operando tiene un valor de verdad, not operando produce un resultado con vnlor falso.

Operadores relaciónales

l'i ioridad de los Operadores

MOD D1V

x = 5MOD2 x=5 DIV2



Al igual que en matemáticas, estos operadores nos permitirán evaluar las relaciones (igualdad, mayor, menor, etc) entre un par de operandos (en principio, pensemos en números). Los operadores relaciónales de los que disponemos son:

Los operadores deben ser evaluados según la siguiente prioridad I.-O 2.-

Operador > < , =, iuf>ramas de flujo aplicados en C++

a. Por medio tic los dispositivos de entrada el usuario ingresa los datos a prOCSI&ren el sistema y los dispositivos de salida presentan los resultados en un l'ui mulo legible. I ,ns Instrucciones de E/S dan acceso al programador a las funciones básicas de • 108 dispositivos, permitiéndole capturar datos de los dispositivos de entrada y niigrmrlOS a variables para operar con ellos y mostrar resultados del proceso en lu-, dispositiv os de salida.

tmtrucclón

  \ ilinaciones I finí asignació n consiste en darle un deter minad o valor a una variable o Itílllte, por ejemplo en la siguiente sentencia observamos que a la variable A, h I >uwn y el Bottom Up.

Illp Pown

i



Tiiwbicn conocida como de arriba-abajo y consiste en establecer una serie de lllVt'lrs de mayor a menor complejidad (arriba-abajo) que den solución al problema. I iiiiNiMc en efectuar una relación entre las etapas de la estructuración de forma t|IH< IIIIII etapa jerárq uica y su inmediato inferior se relacionen mediant e entradas  \  ífilulus de información. Este diseño consiste en una serie de descomposiciones «HrCNÍvus del problema inicial, que recibe el refinamiento progresivo del repertorio  \\v UiHlrucciones que van a formar parte del programa.

Son iquolloi 11 pos de datos cuyos miembros están com puesto s por un solo ítem (dalo) I oí lipes de datos escalares nativos son aquel los tipos de datos escalares que y.i - itáfl Imp lcmentados en el lenguaje jun to a sus respectivas oper aciones.

I ti utilización de la técnica de diseño Top-Down tiene los siguientes objetivos ItAtlctis;

Entra CSlOS lipos tic datos tenemos Entero, Real, Carácter, Booleano; más «pelante veremos otros tipos de datos como por ejemplo los tipos de datos agregado

• l ns diferentes partes del pr oblema pueden ser progra madas de modo lililí-pendiente e incluso por diferentes persona s.

GRUPO EDITORIAL MEGABVTE

• Simplificación del problema y de los subprograma s de cada descomposición.

miro

KIMTORIAL MEGABYTE

 Aiuorttuios .1» DUltílWUm ttfjllijo apliciutos en

Capítulo I: Conceptos Básicos

C++

•Mil imprimid Ilntll i|uodíi estructurado en forma de bloque o módulos lo que lince mas scncillti su lectura y mantenimiento.

Bottom lip El diseño ascendente se refiere a la identificación de aquellos procesos que necesitan computan zarse conforme vayan apareciendo, su análisis como sistema y su codificación, o bien, ía adquisición de paquetes de software para satisfacer el problema inmediato. * Cuando la programación se realiza internamente y haciendo un enfoque ascendente, es difícil llegar a integrar- los subsistemas ai grado tal de que el desempeño global, sea fluido. Los problemas de integración entre los subsistemas son sumamente costosos y muchos de ellos no se solucionan hasta que la programación alcanza la fecha límite para la integración total del sistema. En esta lecha, ya se cuenta con muy poco tiempo, presupuesto o paciencia de los usuarios, como para corregir aquellas delicadas interfaces, que en un principio, se ignoran. Aunque cada subsistema parece ofrecer lo que se requiere, cuando se contempla al sistema como una entidad global, adolece de ciertas limitaciones por haber lomado un enfoque ascendente. Uno de ellos es ia duplicación de esfuerzos para acceder el software y mas aún al introducir los datos. Otro es, que se introducen al sistema muchos datos carentes de valor. : Un tercero y tal- vez el mas serio inconveniente del enfoque ascendente, es que los objetivos globales de la organización no fueron considerados y en consecuericia no se satisfacen.

Entonces... La diferencia entre estas dos técnicas de programación se fundamenta en el resultado que presentan frente a un problema dado. Imagine una empresa, la cual se compone de varios departamentos (contabilidad, mercadeo,...) , en cada uno de ellos se fueron presentando problemas a los cuales se les dio una solución basada en un enfoque ascendente (Bottom Up): creando programas que satisfacían sólo el problema que se presentaba. Cuando la empresa decidió integrar un sistema global para suplir todas las necesidades de todos los departamentos se dio cuenta que cada una de las soluciones presentadas no era compatible ía una con la otra, no representaba una globalidad, característica principal de los sistemas. GRUPO EDITORIAL MEGABYTE

Como no hubo un previo análisis, diseñó de una solución a nivel global en todos IIS departamentos, centralización de información, que son características propias i' un diseño Descendente (Top Down) y características fundamentales de los i .lemas; la empresa no pudo satisfacer su necesidad a nivel global. La creación de algoritmos es basado sobre la técnica descendente, la cual i •mida el diseño ideal para la solución de un problema.

l'scudocódigo I Kremos que una notación es un pseudocódigo si mediante ella podemos describir I ulgoritmo, utilizando palabras y frases del lenguaje natural sujetas a unas Bterminadas reglas. I i ido pseudocódigo debe posibilitar la descripción de: •¡•Instrucciones de entrada / salida. •¡•Instrucciones de proceso. •!• Sentencias de control del flujo de ejecución. • Acciones compuestas, a refinar posteriormente. Tara entender mejor estos conceptos veamos algunos ejemplos. i propio 1.1 l/  I ¡labore un algoritmo y su pseudocódigo para calcular e imprimir el área de un l'l ingulo. Kollición

I leclarar Variables b,h: real I' ntrada: (datos a introducir al computador) Base = b Altura = h (Ipcración: calcular área del triángulo (Base x Altura)/2 Salida: (Resultado que mostrará el computador) PdCUdocódigo: I . Ini cia r proceso 2. Declarar variables (¿utico EDITORIAL MEGABYTE

Capítulo I: Conceptos Básicos

  Algoritmos y Diagramas de flujo aplicados en C++

h b A 3. LEER 4. LEER

DI ucrania de flujo

: real : real : real b h

Codificación en C++ #include \

#include void main()

5. A = ( b * h ) / 2

float h; float b; float A; clrscr(); cin>>b; cin>>h;

6. ESCRIBIR A 7. Terminar el proceso

Este pseudocódigo es fácil pero daremos una pequeña explicación de ello. 1. Se inicia el proceso, todo programa o bloque de programa, debe tener un indicativo de inicio, ya sea inicio de bloque o inicio de programa. 2. Declaramos las variables a usar, nótese que las variables h y b son de tipo real, de eso se deduce que el resultado de una operación entre estas dos variables también sea del tipo real, p or eso A es del tipo real. Las siguiente línea, tiene el mismo resultado para la declaración de las variables b, hyA. b,h, A: Real 3. Leemos el valor de la variables b, por ejemplo digamos el valor introducido sea 5 4. Leemos el valor de la variable h, para este ejemplo ingresemos 7. 5. Calculamos la expresión (b*h)/2 y dicho resultado lo almacenamos en la variable A, entonces será: A = (5*7)/2, por lo tanto tendremos A = 17.5 6. Escribimos el resultado de la operación,1 en este caso será 7. 7.Cuando un proceso o programa se inicia, debemos indicar su fin, caso contrario,, dicho proceso puede ejecutarse infinitamente, es decir al ser traducido a uir lenguaje de programación Una vez elaborado el algoritmo, el problema a programar está prácticamente resuelto, ya que lo único que faltaría sería la codificación correspondiente en el lenguaje de programación que se esté usando, técnicamente un algoritmo es codificable en cualquier lenguaje de programación. Primero veamos cual es el diagrama de flujo de este ejercicio y luego su codificación en C++

GRUPO EDITORIAL MEGABYTE

A - ( b * h )

\

V

• .



/ 2;

' , • 

Las dos primeras líneas del programa en C++ hacen referencia a las librerías i|iic deben usar para la ejecución de ¡os comandos usados, tales como clrscr() y líi'tch(), funciones que nos permiten limpiar la pantalla y detener la acción hasta presionar una tecla. I íl comando cin nos permite leer un dato desde el teclado mientras que el comando i mil nos muestra por pantalla el contenido de una variable o un comentario i imlquiera. I ,a declaración de las variables os del tipo float q es lo mismo que decir del tipo h'iil

KJcmplo 1.2 (Construya un pseudocódigo, que dados los datos A, B, C y D que representan números enteros, escriba los mismos en orden inverso. Notación

Declarar variables A, B, C, D : Entero Ingresar datos A, B, C, D Imprimir datos invertidos Nótese que por ahora este ejercicio solo es una simple lectura y escritura de illllos. La declaración de datos lo hemos hecho en una sola línea debido a que ludas las variables son del mismo tipo. EDITORIAL MEGABYTE

\

\ W\ :

COut«A;

getch{);}

\

'\'r

^ e^tSP^O tu»t^ e^> nY^

  Algoritmos y Diagramas de flujo aplicados en

C++

Capítulo I: Conceptos Básicos

Suponiendo que se ingresan los valores: 7, 28,150, 35, la impresión produce lo siguiente: 35,15 0,28 ,7. - Pseudocódigo 1. Iniciar proceso 2. Declarar variables A, B, C, D : Entero 3. LEER A, B, C, D 4. ESCRIBIR D, C, B, A 5. Termi nar el proceso

-. •

^

.

.'.'.

-

' • •

¡

Nótese que en la línea 3 y 4, usamos una línea para leer y escribir el contenido Y  de las variables respectivamente. Diagr ama de flujo Codificación en C++ . -, >

#include (

Inicio )

A, B : Entero Ingresar A, B Realizar un proceso, donde se ejecute la formula indicada ((A + B)2)/3. Mostrar el resultado Pseudocódigo 1. Iniciar proceso 2. Declarar variables A, B : Entero R : Real 3. LEER A, B 4. Calcular R = ((A + B) A 2)/3 4. ESCRIBIR R 5. Terminar el proceso

#include void main() int A, B, C, D; clrscr(); cin>>A>>B>>C>>D COut; cout «"In grese código del alumno: cin>>CODIGO; cout>A; c o u t « " ing rese ba se de l re ctán gul o: " ;

cm =»BÍB ,

PER

__

+ A)

SUP - B * A;

*

2;

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF