Algoritmos computacion

  • Upload
    hrossi

  • View
    12

  • Download
    0

Embed Size (px)

DESCRIPTION

Guia de algoritmos

Citation preview

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 1/52

    ALGORITMOS ETAPAS PARA DESARROLLAR UN PROGRAMA COMPUTACIONAL El programador disea un programa, para resolver un problema particular. Disear es un proceso creativo. El proceso de diseo de un programa consta de los siguientes pasos o etapas: Pasos Etapa Descripcin

    1 Anlisis del problema 2 Diseo de algoritmo

    Conducen al diseo detallado por medio un cdigo escrito en forma de un algoritmo

    3 Codificacin

    Se implementa el algoritmo en un cdigo escrito en un lenguaje de programacin. Refleja las ideas desarrolladas en las etapas de anlisis y diseo

    4 Compilacin y ejecucin Traduce el programa fuente a programa en cdigo de maquina y lo ejecuta.

    5 Verificacin 6 Depuracin

    Busca errores en las etapas anteriores y los elimina.

    7 Documentacin Son comentarios, etiquetas de texto, que facilitan la comprensin del programa Definicin informal de algoritmo: Es un mtodo para resolver un problema mediante una serie de pasos definidos, precisos y finitos. ) Preciso: implica el orden de realizacin de cada uno de los pasos ) Definido: si se sigue dos veces, se obtiene el mismo resultado. ) Finito: Tiene un nmero determinado de pasos, implica que tiene un fin.

    Para poder desarrollar un algoritmo tienes que primero analizar quienes son las entradas, las salidas y las operaciones internas a realizar. En trminos generales, un Algoritmo debe ser: Realizable: El proceso algortmico debe terminar despus de una cantidad finita de pasos. Se dice que un algoritmo es inaplicable cuando se ejecuta con un conjunto de datos iniciales y el proceso resulta infinito o durante la ejecucin se encuentra con un obstculo insuperable sin arrojar un resultado. Comprensible: Debe ser claro lo que hace, de forma que quien ejecute los pasos (ser humano o mquina) sepa qu, cmo y cundo hacerlo. Debe existir un procedimiento que determine el proceso de ejecucin. Preciso: El orden de ejecucin de las instrucciones debe estar perfectamente indicado. Cuando se ejecuta varias veces, con los mismos datos iniciales, el resultado debe ser el mismo siempre. La precisin implica determinismo. Definicin formal: Esta definicin fue dada por Donald Ervin Knuth(nacido el 10 de enero de 1938 en Milwaukee, Wisconsin, profesor emrito de la Universidad de Stanford). En realidad es un intento de formalizarlo matemticamente: Definicin 1.1 Un mtodo de clculo es una cuaterna (Q ,I,W, f ) donde: Q es un conjunto que contiene a I y W QQf : con wwf =)( para todo w perteneciente a W

    Q es el conjunto de estados del clculo, I es el conjunto de estados de entrada

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 2/52

    W es el conjunto de estados salida y f es la regla de clculo

    Definicin 1.2 Una secuencia de clculo es x0,x1,x2, donde x0 I y k 0 : f (xk)=xk+1 La secuencia de clculo acaba en n pasos si n es el menor entero con xn W. Lo cierto es que nada en este campo esta completamente definido, a continuacin mostraremos las estructuras algortmicas ms importantes que la mayora de programadores podra identificar y es que en realidad son los programadores los que determinan su uso.

    Para poder implementar la solucin de un problema se dispone de las siguientes herramientas algortmicas: Diagrama de flujo Pseudo cdigo Diagramas estructurados (Nassi-Schneiderman)

    DIAGRAMA DE FLUJO Consta de rectngulos que encierran las instrucciones y lneas que apuntan hacia la siguiente instruccin de modo que no se pierda el orden. Adems, las operaciones elementales como la entrada de datos, salida de datos, etc. (ms adelante se explicarn) se reconocen de las dems instrucciones porque no se encierran en rectngulos sino en otra clase de figuras por lo que segn la figura en la que est encerrada la instruccin se reconoce su significado. Es muy didctico, por lo que es muy fcil de entender. Los Diagramas de flujo se dibujan generalmente usando algunos smbolos estndares; sin embargo, algunos smbolos especiales pueden tambin ser desarrollados cuando sean requeridos. Segn ISO 5807, algunos smbolos estndares, que se requieren con frecuencia para diagramar programas de computadora se muestran a continuacin:

    Estructuras Algortmicas

    Secuenciales

    Condicionales

    Cclicas

    Asignacin Entrada Salida

    Simples Mltiples Anidadas

    Para Mientras que Repita Hasta

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 3/52

    Descripcin Smbolo Funcin

    Proceso

    Cualquier tipo de operacin que origine cambio de valor, formato, posicin de la informacin almacenada en memoria, operaciones aritmticas, de transferencia, etc

    Entrada/Salida

    Este es el smbolo mas usado para la introduccin de datos en la memoria desde los perifricos de entrada o salida de resultados hacia los perifricos

    Algunos usan este smbolo para entrada por teclado

    Algunos usan este smbolo para salida por pantalla

    Algunos usan este smbolo para entrada/ salida

    Decisin Indica una condicin lgica que elige el flujo del programa segn el resultado sea falso o verdadero

    Conector

    Sirve para enlazar entre partes cualesquiera de un diagrama de flujo a travs de un conector, pero en la misma pagina.

    Conector

    Sirve para enlazar las partes de un diagrama de flujo a travs de un conector que estn en la diferentes pagina

    Flechas

    Sirve para indicar la direccin del flujo del programa

    Reglas para la elaboracin de diagramas 1. Los Diagramas de flujo deben escribirse de arriba hacia abajo, y/o de izquierda a

    derecha. 2. Los smbolos se unen con lneas, las cuales tienen en la punta una flecha que indica la

    direccin que fluye la informacin, se deben de utilizar solamente lneas de flujo horizontal o verticales (nunca diagonales).

    3. Se debe evitar el cruce de lneas, para lo cual se quisiera separar el flujo del diagrama a un sitio distinto, se pudiera realizar utilizando los conectores. Se debe tener en cuenta que solo se van ha utilizar conectores cuando sea estrictamente necesario.

    4. No deben quedar lneas de flujo sin conectar

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 4/52

    i 0 F 1

    Inicio

    Leer N

    i

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 5/52

    i 1

    Inicio

    Leer n

    i=1?

    Mostrar mayor

    Fin

    Vmayor num

    mayor

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 6/52

    PSEUDOCODIGO Es la representacin narrativa de los pasos que debe seguir un algoritmo para dar solucin a un problema determinado. El Pseudocdigo utiliza palabras que indican el proceso a realizar. Un Pseudocdigo o falso lenguaje, es una serie de normas lxicas y gramaticales parecidas a la mayora de los lenguajes de programacin, pero sin llegar a la rigidez de sintaxis de estos ni a la fluidez del lenguaje coloquial. Esto permite codificar un programa con mayor agilidad que en cualquier lenguaje de programacin, con la misma validez semntica, normalmente se utiliza en las fases de anlisis o diseo de Software, o en el estudio de un algoritmo. Forma parte de las distintas herramientas de la ingeniera de software. En el pseudocodigo, cada instruccin es una lnea y las operaciones elementales se escriben de una forma tan clara que sea imposible que algn programador no las entienda. No hay ningn compilador o intrprete de pseudocdigo informtico, y por tanto no puede ser ejecutado en un ordenador, pero las similitudes con la mayora de los lenguajes informticos lo hacen fcilmente convertible. El pseudocdigo describe un algoritmo utilizando una mezcla de frases en lenguaje comn, instrucciones de programacin y palabras clave que definen las estructuras bsicas. Su objetivo es permitir que el programador se centre en los aspectos lgicos de la solucin, evitando las reglas de sintaxis de los lenguajes de programacin convencionales. No siendo el pseudocdigo un lenguaje formal, varan de un programador a otro, es decir, no hay una estructura semntica ni arquitectura estndar. Es una herramienta gil para el estudio y diseo de aplicaciones, veamos un ejemplo, que podramos definir como: lenguaje imperativo, de tercera generacin, segn el mtodo de programacin estructurada. Problema 1. El ejemplo de cambiar una bombilla fundida es uno de los ms utilizados por su sencillez para mostrar los pasos de un Algoritmo:

    Paso 1. Inicio Paso 2. Ubicar una escalera debajo de la bombilla fundida Paso 3. Tomar una bombilla nueva Paso 4. Subir por la escalera Paso 5. Girar la bombilla fundida hacia la izquierda hasta soltarla Paso 6. Enroscar la bombilla nueva en el plafn hasta apretarla Paso 7. Bajar de la escalera Paso 8. Fin

    Problema 2. Implemente el algoritmo usando un Pseudocdigo para calcular el factorial de un numero N.

    Paso 1: Inicio Paso 2: Leer N Paso 3: Hacer i=0 Paso 4: Hacer F=1 Paso 5: Si i

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 7/52

    Problema 3. Consideremos el algoritmo de Euclides para hallar el Mximo Comn Divisor (MCD) de dos nmeros enteros positivos dados. Obsrvese que no se especifica cules son los dos nmeros, pero si se establece claramente una restriccin: deben ser enteros y positivos.

    Paso 1: Inicio. Paso 2: Leer los dos nmeros (a y b). Avanzar al paso 3. Paso 3: Comparar a y b para determinar cul es mayor. Avanzar al paso 4. Paso 4: Si a y b son iguales, entonces ambos son el resultado esperado y

    termina el algoritmo. En caso contrario, avanzar al paso 5. Paso 5: Si a es menor que b, se deben intercambiar sus valores. Avanzar al

    paso 6; si a no es menor que b, avanzar al paso 6. Paso 6: Realizar la operacin a menos b, asignar el valor de b a a y asignar

    el valor de la resta a b. Ir al paso 3. Paso 7: Fin

    Ejercicio: Ordenar los pasos para pescar:

    ___ El pez se traga el anzuelo.

    ___ Enrollar el sedal.

    ___ Tirar el sedal al agua.

    ___ Llevar el pescado a casa.

    ___ Quitar el Anzuelo de la boca del pescado.

    ___ Poner carnada al anzuelo.

    ___ Sacar el pescado del agua.

    DIAGRAMAS ESTRUCTURADOS (NASSI-SCHNEIDERMAN)

    El diagrama estructurado N-S tambin conocido como diagrama de chapin es como un diagrama de flujo en el que se omiten las flechas de unin y las cajas son contiguas. Las acciones sucesivas se pueden escribir en cajas sucesivas y como en los diagramas de flujo, se pueden escribir diferentes acciones en una caja. Un algoritmo se represente en la siguiente forma: Inicio

    Accion1 Accion1

    Fin

    Inicio Leer Nombre, Hrs, Precio Calcular Salario=Hrs*Precio Calcular Imp=Salario*0.15 Calcular Neto=Salario+Imp Escribir Nombre, Imp, Sneto

    Fin

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 8/52

    LENGUAJES DE PROGRAMACION Los lenguajes de programacin, son como los idiomas de comunicacin para los seres humanos: ingles, espaol, japons, etc, con el cual podemos dar instrucciones a otro ser humano. Los lenguajes de programacin son idiomas de comunicacin con el que, el ser humano puede dar instrucciones a un computador. Estos lenguajes han evolucionado, por las nuevas tecnologas de la informacin que se dispone en estos tiempos. Dentro de los ms reconocidos tenemos a:

    Lenguaje Origen del Nombre Ao Notas/Comentarios

    FORTRAN FORmula TRANslation (Traduccin de Frmulas) 1957

    Primer compilador creado por John Backus en 1957. Lenguaje compilado de alto nivel. Precursor de mltiples conceptos, tales como variables, sentencias condicionales y funciones compiladas separadamente.

    LISP LISt Processing (Procesamiento de Listas) 1958

    Creado por John McCarthy. Lenguaje interpretado de procesamiento de listas orientado a la realizacin de aplicaciones en el mbito de la Inteligencia Artificial.

    ALGOL ALGOrithmic Language (Lenguaje algortmico) 1960

    Primer lenguaje estructurado, usado principalmente para resolver problemas matemticos. Desarrollado por Alan Perlis, John Backus y Peter Naur.

    COBOL COmmon Business-Oriented Language (Lenguaje orientado a tareas sencillas)

    1960 Creado por Grace Murray Hooper para Univac. Crea el concepto de tipo de dato.

    APL A Programming Language (Lenguaje de programacin A) 1961 Lenguaje interpretado que usa un gran conjunto de smbolo especiales y una sintaxis compleja.

    PL/1 Programming Language One 1964

    Complejo lenguaje de programacin. Compilado, estructurado y capaz de manejar errores y multitarea, usado en entornos acadmicos y de desarrollo.

    BASIC

    Beginners All-Purpose Symbolic Instruction Code (Cdigo de instruccin simblica multifuncional para principiantes)

    1965 Popular lenguaje de alto nivel, usado frecuentemente por programadores principiantes.

    PASCAL Blaise PASCAL, matemtico e inventor de la Mquina Analtica, primer concepto de ordenador.

    1971

    Lenguaje estructurado compilado basado en ALGOL, al cual aade tipos de datos y simplifica su sintaxis. Creado por el profesor suizo de Ciencias de la Computacin, Niklaus Wirth.

    C Lenguaje posterior al lenguaje B de los Laboratorios Bell 1972 Popular lenguaje estructurado y compilado, muy portable.

    ADA Augusta ADA Byron (Lady Lovelace) 1979 Derivado del PASCAL, usado principalmente para fines militares.

    JAVA Lenguaje de programacin orientado a objetos desarrollado por la empresa Sun Microsystems

    1995

    Similar al C++, con marcadas caractersticas de seguridad y transportabilidad la cual define una mquina virtual independiente de la plataforma donde se ejecuta

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 9/52

    1950 1960 1990

    Fortran(54)

    PL/I(66)

    Ada(95)

    Java(96)

    Basic(66)

    C(72)

    Pascal(70)

    Cobol(58)

    Algol(60)

    Simula(67) Smalltalk(80)

    C++(89)

    Eiffel (86)

    Ada(83)

    PHP(95)

    1980 1970

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 10/52

    Definicin formal de Lenguaje de programacin: 1.- Un lenguaje de programacin es un sistema notacional para describir computaciones de una forma legible tanto para la mquina como para el ser humano. 2.- Un lenguaje de programacin es un lenguaje que puede ser utilizado para controlar el comportamiento de una mquina, particularmente una computadora. Consiste en un conjunto de reglas sintcticas y semnticas que definen su estructura y el significado de sus elementos, respectivamente. 3.- Un lenguaje de programacin permite a un programador especificar de manera precisa: sobre qu datos una computadora debe operar, cmo deben ser estos almacenados y transmitidos y qu acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a travs de un lenguaje que intenta estar relativamente prximo al lenguaje humano o natural, tal como sucede con el lenguaje Lxico. Clasificacin de los lenguajes de programacin Los lenguajes de programacin se determinan segn el nivel de abstraccin, Segn la forma de ejecucin y Segn el paradigma de programacin que poseen cada uno de ellos y esos pueden ser: Segn el nivel de abstraccin Lenguajes de bajo nivel: Son los que se acercan al funcionamiento de una computadora. El lenguaje de ms bajo nivel es, por excelencia, el cdigo mquina. A ste le sigue el lenguaje ensamblador, ya que al programar en ensamblador se trabajan con los registros de memoria de la computadora de forma directa. Lenguajes de medio nivel: Hay lenguajes de programacin que son considerados por algunos expertos como lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas caractersticas que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo tiempo, ciertas cualidades que lo hacen un lenguaje ms cercano al humano y, por tanto, de alto nivel. Lenguajes de alto nivel: Los lenguajes de alto nivel son normalmente fciles de aprender porque estn formados por elementos de lenguajes naturales, como el ingls. En BASIC, el lenguaje de alto nivel ms conocido, los comandos como "IF CONTADOR = 10 THEN STOP" pueden utilizarse para pedir a la computadora que pare si CONTADOR es igual a 10. Por desgracia para muchas personas esta forma de trabajar es un poco frustrante, dado que a pesar de que las computadoras parecen comprender un lenguaje natural, lo hacen en realidad de una forma rgida y sistemtica. Segn la forma de ejecucin Lenguajes compilados: Traduciendo este programa al programa equivalente escrito en lenguaje de mquina. A ese proceso se lo llama compilar. Lenguajes interpretados: Mediante un programa que va adaptando las instrucciones conforme son encontradas, a este proceso se lo llama interpretar. Segn el paradigma de programacin Lenguajes imperativos, Lenguajes declarativos, Funcionales Lgicos ,Lenguajes orientados a objetos. En la Programacin Orientada a Objetos (POO u OOP segn siglas en ingls) se definen los programas en trminos de "clases de objetos", objetos que son entidades que combinan estado (es decir, datos) comportamiento (esto es, procedimientos o mtodos) e identidad (propiedad del objeto que lo diferencia del resto.

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 11/52

    PROBLEMAS PROPUESTOS Problema 1. Implemente el algoritmo usando un diagrama de flujo y pseudocdigo para mostrar los n primeros nmeros capica. Problema 2. Implemente el algoritmo usando un diagrama de flujo y Pseudocdigo para mostrar si un nmero es primo o no. Problema 3. Implemente el algoritmo usando un diagrama de flujo y Pseudocdigo para mostrar los n primeros nmeros primos Problema 4. Implemente el algoritmo usando un diagrama de flujo y Pseudocdigo para mostrar el mayor y el menor de 4 nmeros. Problema 5. Implemente el algoritmo usando un diagrama de flujo y Pseudocdigo para mostrar el segundo mayor de n nmeros. Problema 6. Implemente el algoritmo usando un diagrama de flujo y Pseudocdigo para mostrar el tercer mayor de n nmeros. Problema 7. Implemente el algoritmo usando un diagrama de flujo y pseudocdigo para mostrar la posicin relativa entre dos circunferencias:

    tangentes: que sean tangentes interiormente o exteriormente exteriores: que no estn separadas interior: que uno este dentro de otro.

    Problema 8. Implemente el algoritmo usando un diagrama de flujo y pseudocdigo para mostrar las races de una funcin cuadrtica que tiene los coeficientes a, b, c. El algoritmo deber mostrar las races reales o imaginaras segn sea el caso.

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 12/52

    LENGUAJE C++ En 1967 Martin Richards cre un lenguaje de programacin BCPL, para escribir sistemas operativos y compiladores y Ken Thompson cre el lenguaje B basndose en el BCPL. Con B, Thompson escribi las primeras versiones de UNIX en los laboratorios Bell durante 1970. Estos 2 lenguajes muy rsticos y dejaban muchas tareas al programador. En 1972 Denis Ritchie escribe un lenguaje basado en BCPL y B con varias mejoras que contribuyen a su posterior popularidad; lo llam C. La eficiencia del C en trminos de ejecucin y administracin de recursos lo hizo el preferido de las empresas de software que diseaban sistemas operativos y compiladores. Una de sus principales caractersticas es su independencia del hardware, lo cual permita inicialmente correr programas C en cualquier plataforma con mnimas modificaciones. Pero las empresas de software comenzaron a disear versiones de C particulares que le quitaban portabilidad a los programas. Por eso, en el 1983 el ANSI cre un comit tcnico para su standarizacin. La versin aprobada junto a la ISO vi la luz en 1990 y se lo conoce como ANSI C. En 1980 Bjarne Stroustrup en los Laboratorios Bell, comenz a experimentar con versiones mejoradas de C (C con clases) con la nica finalidad de escribir programas de simulacin orientada a eventos. El nombre de C++ fue idea de Rick Masciatti haciendo uso del operador postincremento del lenguaje y sugera que era el lenguaje que le segua a C. Este compilador fue creciendo con renovadas caractersticas que lo hacen muy original, manteniendo la compatibilidad con su antecesor C. C++ incorpora clases y funciones virtuales basndose en SIMULA67, tipos genricos y expresiones de ADA, la posibilidad de declarar variables en cualquier lugar de ALGOL68, as como otras caractersticas que no existan antes: herencia mltiple, espacios en nombres, funciones virtuales puras, etc. Alex Stepanov y Adrew Koenig idearon la biblioteca STL, la cual le da a C++ una potencia nica entre los lenguajes de alto nivel. Debido a la enorme difusin de C++, y a las diferentes versiones que fueron apareciendo, las organizaciones ANSI e ISO se reunieron en 1990 para definir el Standard de este lenguaje, el cual fue aprobado en 1998. Hoy da, C++ posee una notable insercin en el mundo de las computadoras y es un de los lenguajes clsicos de programacin: tanto sistemas operativos y compiladores, como aplicaciones. PARTES DE UN PROGRAMA EN C++: Un programa escrito en C++ est conformado por pequeos mdulos de cdigo llamados funciones. El mdulo principal o programa principal est conformado por la funcin que denominamos main( ) las instrucciones que conforman sta se encierran entre { }. Sobre la parte superior de la funcin main() y dentro de la funcin se pueden declarar los siguientes objetos que pueden manipular un programa. 1. Directivas para Incluir archivos, #include 2. Directivas para incluir macros y constantes #define 3. Declaracin de Prototipos de funciones 4. Declaracin de Variables globales 5. Declaracin de tipos de datos. 6. Dentro del main() se encuentran las declaraciones de variables y las instrucciones que definen procesos que debe realizar la computadora. 7. Por fuera del main() y despus de la llave } que cierra el main aparecen las declaracin de las funciones.

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 13/52

    Para ello tenemos el siguiente ejemplo de programa en c++, en el cual calculamos la conversin de una coordenada en el espacio de esfrica a cartesiana.

    COMENTARIOS Los comentarios pueden ser usado de 2 maneras: 1) // al iniciar una lnea 2) /* .. */ Los comentarios son muy usados para documentar el programa, como tambin realizar pruebas de secciones de cdigo anulndolo o activndolo. Todo lo que esta como comentario no ser considerado en la compilacin del programa. DIRECTIVA INCLUDE (Archivos con extensin h): Los archivos con extensin h (Ejemplo: stdio.h, conio.h etc ) se llaman archivos de cabecera, contienen informacin tcnica que requiere el compilador para la buena operacin de las funciones que usan nuestros programas. Nuestro programa est usando directivas para incluir archivos son:

    #include #include #include

    Los archivos con extensin h viene con el compilador. Pero tambin podemos crear archivos de este tipo propios. DIRECTIVA #define: (Definicin de Macros) La directiva #define se utiliza para definir un identificador y una cadena que ser sustituida por cada vez que el identificador se utilice en el programa. Al identificador se le denomina nombre de la macro y al proceso de reemplazamiento, sustitucin de macro.

    //Primer ejemplo de programa //Se ingresa las coordenadas esfricas de un punto en el espacio //Se muestra la conversin a coordenadas cartesianas #include #include #include # define sen sin(gamma) void main() {float x,y,z,r,theta,gamma; cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 14/52

    Nuestro programa est usando directivas para incluir (macro) constantes. # define sen sin(gamma) Esta lnea significa que se ha creado una macro llamado sen, cuando se compile el programa sen ser reemplazado por sin(gamma) Otros ejemplos son: #define mensaje El sistema no tiene Solucin Otro tipo de macro podra ser: #define CIERTO 1

    #define FALSO 0 Una vez definido una macro se puede usar el nombre de ella como parte de la definicin de otra, ejemplo:

    #define UNO 1 #define DOS UNO + UNO #define TRES UNO + DOS

    DECLARACIN DE VARIABLES: Antes del main() o despus de l se deben definir las variables, ejemplo: float a, b, x; Las variables que se declaran dentro del main() se dice que son variables locales, las que se declaran fuera se dicen globales, cuando veamos el concepto de funcin ampliaremos la diferencia entre estos tipos de variables. La siguiente tabla muestra los distintos tipos de dato que podemos usar en C para declarar variable en un programa en C. Tipo de datos para 16 bits

    Tipo # bits Rango unsigned char 8 0 ... 255 char 8 -128 ... 127 enum 16 -32,768 ... 32,767 unsigned int 16 0 ... 65,535 short int 16 -32,768 ... 32,767 int 16 -32,768 ... 32,767 unsigned long 32 0 ... 4,294,967,295 long 32 -2,147,483,648 ... 2,147,483,647 float 32 3.4 *10-38 ... 3.4 *1038 (7-digit precision) double 64 1.7 * 10-308 ... 1.7 ^*10308 (15-digit precision) long double 80 3.4*10-4932 ... 1.1*104932 (18-digit precision)

    Tipo de datos para 32 bits Tipo # bits Rango unsigned char 8 0 ... 255 char 8 -128 ... 127 short int 16 -32,768 ... 32,767 unsigned int 32 0 ... 4,294,967,295 int 32 -2,147,483,648 ... 2,147,483,647 unsigned long 32 0 ... 4,294,967,295 enum 32 -2,147,483,648 ... 2,147,483,647 long 32 -2,147,483,648 ... 2,147,483,647 float 32 3.4 * 10-38 ... 1.7* 1038 (7-digit) precision) double 64 1.7* 10-308 ... 3.4* 10308 (15-digit precision) long double 80 3.4* 10-4932 ... 1.1* 104932 (18-digit precision)

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 15/52

    FUNCIONES DE ENTRADA Y SALIDA La cadena de formato consiste de una secuencia de caracteres simples, secuencias de escape y/o especificadores de formato, todos ellos delimitados por " (comillas dobles)

    Secuencia de Escape Carcter de Salida \a Sonar alerta \b Retroceso \f Salto de Pgina \n Salto de Lnea \t Tabulador Horizontal \v Tabulador Vertical \r Retorno de Carro \ Doble Comillas \ Comilla Simple \\ Barra Invertida \? Signo de Interrogacin

    \DDD Cdigo Octal \xHHH Cdigo Hexadecimal de un carcter

    La biblioteca estndar de E/S para C, descrita por el archivo de cabecera stdio.h est disponible en C++. Sin embargo, C++ introduce sus propios archivos de cabecera; por ejemplo, iostream.h, fstream.h y strstream.h, que implementan su coleccin particular en funciones de E/S: cin, cout En C++ los flujos stdin, stdout son: cin, cout. Estos dos flujos se abren automticamente cuando comienza la ejecucin de programas, y se convierte en la interfaz entre el programa y el usuario. El flujo cin esta asociado con el teclado del terminal. El flujo cout se asocia con el monitor de vdeo. Los operadores >> y > ("get from" o extraccin ) y puede manipular todos los tipos de datos estndar, clases incluidas. Los siguientes dos ejemplos muestran de manera rpida la mayor facilidad de manejo de E/S (entrada y salida) Utilizando printf del C estndar: printf("Un entero %d, un real %f", a,b); Ahora equivalente en C++: cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 16/52

    Primero pueden escribir una lista de argumentos de longitud arbitraria. Segundo, la impresin est controlada por formatos simples de la misma forma que printf en stdio.h Ejemplos : cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 17/52

    main() { double numero=123.1234567; cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 18/52

    cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 19/52

    OTROS OPERADORES DE ASIGNACIN En C existen los siguientes operadores de asignacin :+=, *=, =, /= y %=, donde la sintaxis cuando se quiere utilizar uno de esos operadores es :

    Veamos algunos ejemplos del uso de esos operadores :

    EXPRESIN EXPRESIN EQUIVALENTE

    a=a+2 a+=2 ; b=b+(i+1) b+=i+5 ; z=z/10 z/=10 ; j= j%(j-2) j%=(j-2)

    El identificador es una variable. JERARQUA DE LOS OPERADORES ARITMTICOS : Cuando la computadora evala una expresin aritmtica sigue los siguientes criterios para obtener el resultado. 1. En una operacin aritmtica que incluya varios operadores aritmticos, los operadores ++,-- tienen la mxima prioridad, le siguen en prioridad *, /, %. 2. En una expresin aritmtica compuesta, las operaciones que estn asociadas con los operadores +, - se ejecutan despus de haberse ejecutado todos los operadores aritmticos enunciados en la primera regla. 3 . Si en una expresin existen varios operadores aritmticos que tengan la misma prioridad, estos se resuelven de izquierda a derecha Ejemplo:

    xb b ac

    a=

    2 42

    La expresin queda bien escrita si se usan los parntesis as: X = (-b + sqrt(b * b - 4*a*c)) / (2 * a); CONVERSlN DE TIPO DE DATOS: Se dice que una expresin de asignacin involucra operaciones de modo mixto cuando involucra variables de distinto tipo. Cuando C y C++, evalan una expresin que involucra variables de distinto tipo realiza conversin automtica de un tipo de dato a otro, Que implicaciones tiene eso ? Es bueno tener presente que los datos de diferente tipo son almacenados de modo diferente en memoria. Ejemplo: Si en un programa en C tenemos que a y b son variables de tipo float y c es de tipo int, las siguientes expresiones: a=5.0 ; b=2.0 ; c=a/b ; Almacenaran en c el valor 2 pues la divisin da 2.5 pero al convertirlo a entero lo trunca Ejemplo: resul_float=valor_float*valor_int, La operacin anterior es de tipo mixto, cuando se va a realizar la multiplicacin el valor de la variable valor int se convierte a nmero float y luego se hace la multiplicacin. El proceso se realiza as: la computadora lee el valor almacenado en la variable y es convertido a float para la realizacin de la multiplicacin pero sin cambiar el valor en memoria, cuando se realiza la multiplicacin el resultado es float. Existe una jerarqua de

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 20/52

    conversin en la que el dato de prioridad ms baja es convertido temporalmente al tipo de prioridad ms alta para realizar clculos. La siguiente tabla muestra la jerarqua de conversiones desde la prioridad ms alta hasta la ms baja:

    double float long int

    short Cuando un tipo es convertido a otro tipo que tiene ms dgitos significativos, el valor del nmero y su precisin quedan inalterados. Ejemplo: Supongamos que tenemos el siguiente programa: valorl_int=3 ; valor2_float=4 ; valor_float=7.0 ; resul_float=valor_float + valorl_int/valor2_float; La computadora al dividir valorl_int/valor2_float dicha operacin es de tipo mixta por tanto el 3 se convierte a nmero float y la divisin da 0. 75 que al sumarle 7 da 7.75. INSTRUCCIONES DE CONTROL y CICLOS REPETITIVOS FLUJO DE CONTROL: Se llama flujo de control de un programa al orden en que se ejecutan las instrucciones que lo conforman. El flujo de control de los programas, es lineal, esto significa que la computadora ejecuta una a una las instrucciones que se le indican, sin alterar el orden en que se escriben. EXPRESION LGICA: Una expresin lgica en C es una sentencia que al ser evaluada, la computadora da un valor 0 si es falsa y un valor distinto de cero si es verdadera. OPERADORES DE RELACIN: Los siguientes operadores los utilizaremos para construir expresiones lgicas y establecen relaciones que pueden ser falsas o verdaderas.

    OPERADOR SIGNIFICADO >= Mayor o igual que Mayor que

    Ejemplo: A+B>=C*2; X= ='S'; XS; La expresin: z= a+b>=c*2; Compara el valor de la suma de a y b con el doble de c, si es menor almacena en z el valor 0 si es mayor o igual almacena un valor distinto de cero. OPERADORES LGICOS:

    OPERADORES SIGNIFICADO && Y

    || O ! No

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 21/52

    Ejemplos: Si tenemos la expresin : !(5>3) al evaluarla el resultado que da es 0. La expresin: z=!(5>3); Almacena 0 en la variable z La expresin: z=!(a+b>=c*2) Almacena 1 en la variable z si el resultado de comparar a+b con el doble de c es menor, puesto que la proposicin es falsa, al negarla da verdadera PRIORIDAD DE OPERADORES: Teniendo los operadores ya definidos, debemos definir la prioridad nuevamente as:

    CATEGORA DEL OPERADOR

    OPERADORES

    ASOCIATIVA

    Operadores Monarios -,++,--,!, sizeof(tipo) Derecha a Izquierda Multiplicacin divisin y

    residuo *, /, % Izquierda a Derecha

    Suma y sustraccin aritmtica

    +, - Izquierda a derecha

    Operadores de relacin = Izquierda a derecha Operadores de igualdad = = , != Izquierda a derecha

    y && Izquierda a derecha o || Izquierda a derecha

    Operadores de asignacin =, +=, - =, *=, /=, %= Izquierda a derecha Las expresiones entre parntesis se evalan primero. Los operadores de asignacin tiene menor prioridad que todos los otros operadores. Por tanto las operaciones monarios, aritmticos, de relacin, de igualdad y lgicos se realizan antes que las de asignacin. INSTRUCCIN if (expresin lgica) else: La instruccin si evala la expresin lgica, si sta es verdadera, ejecuta la instruccin definida en , si es falsa se ejecuta la instruccin inmediata al else definida en , despus de eso ejecuta la instruccin siguiente a la y las que le siguen

    if (expresin lgica) ; else ;

    Expresin lgica

    Si No

    Accin A Accin B

    (E.L.) Sentencias 2

    V

    F

    Sentencias 1

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 22/52

    EJEMPLO: Escriba un programa en lenguaje C que le permita a un estudiante calcular la nota definitiva de tres notas, que tienen el mismo valor porcentual. El programa debe imprimir la nota definitiva y un mensaje adecuado que diga Aprob el curso', o 'Desaprob el curso'. #include #include #define gano " Aprob el curso " #define perdio " Desaprob el curso " main() { double nota1, nota2, nota3; double definitiva; coutnota1; coutnota2; coutnota3; definitiva=(nota1+nota2+nota3)/3; if (definitiva>=10) cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 23/52

    } else { preal=-b/(2*a); pimag=sqrt(abs(discri))/(2*a); cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 24/52

    void main() { float x,cx; double cy,y; long double cz,z; //errores de precision cout.precision(80); cout.flags(ios::fixed); x=(1.0/3.0); cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 25/52

    cout.precision(80); cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 26/52

    EJEMPLO: Escriba un programa que lea un nmero entero n y luego calcule y escriba los n primeros trminos de la serie 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89......... #include #include void main() { double n, t, af, ai, an, suma; coutn; af=0; ai=1; an=0; t=1; suma=0; while (t

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 27/52

    case 3: cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 28/52

    Si es 3 termina con la ejecucin del programa. #include #include void main() { char opcion; float a,b,respuesta; do{ clrscr(); gotoxy(10,10); cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 29/52

    cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 30/52

    VARIACIN DEL CICLO for: Utilizando el operador coma se puede hacer que el ciclo for tenga dos o mas variables de control del bucle. EJEMPLO:Escribe un programa que lea un numero entero n, el programa debe encontrar cuanto suman los n primeros nmeros pares e impares. #include #include main ( ) { int n, par, sum,imp, sump, sumi, numeros; sum=sump=sumi = 0; coutn; for(numeros = 1, par=2, imp=1; numeros

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 31/52

    divisor=2; es=1; while (divisor

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 32/52

    while(i

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 33/52

    FUNCIONES Declaracin y Definicin. Las funciones son un conjunto de instrucciones que realizan una tarea especfica. En general toman unos valores de entrada, llamados parmetros y proporcionan un valor de salida o valor de retorno; aunque tanto unos como el otro pueden no existir. Tal vez sorprenda que las introduzca tan pronto, pero como son una herramienta muy valiosa, y se usan en todos los programas C++, creo que debemos tener, al menos, una primera nocin de su uso. Al igual que con las variables, las funciones pueden declararse y definirse. Una declaracin es simplemente una presentacin, una definicin contiene las instrucciones con las que realizar su trabajo la funcin. En general, la definicin de una funcin se compone de las siguientes secciones, aunque pueden complicarse en ciertos casos: Opcionalmente, una palabra que especifique el tipo de almacenamiento, puede ser

    "extern" o "static". Si no se especifica es "extern". Por ahora mencionamos que las funciones declaradas como extern estn disponibles para todo el programa, las funciones static pueden no estarlo.

    El tipo del valor de retorno, que puede ser "void", si no necesitamos valor de retorno. Si no se establece, por defecto ser "int". Aunque en general se considera de mal gusto omitir el tipo de valor de retorno.

    Modificadores opcionales. Tienen un uso muy especfico, de momento no entraremos en este particular, lo veremos en captulos posteriores.

    El nombre de la funcin. Es costumbre, muy til y muy recomendable, poner nombres que indiquen, lo ms claramente posible, qu es lo que hace la funcin, y que permitan interpretar qu hace el programa con slo leerlo. Cuando se precisen varias palabras para conseguir este efecto existen varias reglas aplicables de uso comn. Una consiste en separar cada palabra con un "_", la otra, que yo prefiero, consiste en escribir la primera letra de cada palabra en mayscula y el resto en minsculas. Por ejemplo, si hacemos una funcin que busque el nmero de telfono de una persona en una base de datos, podramos llamarla "busca_telefono" o "BuscaTelefono".

    Una lista de declaraciones de parmetros entre parntesis. Los parmetros de una funcin son los valores de entrada (y en ocasiones tambin de salida). Para la funcin se comportan exactamente igual que variables, y de hecho cada parmetro se declara igual que una variable. Una lista de parmetros es un conjunto de declaraciones de parmetros separados con comas. Puede tratarse de una lista vaca. En C es preferible usar la forma "func(void)" para listas de parmetros vacas. En C++ este procedimiento se considera obsoleto, se usa simplemente "func()"..

    Un cuerpo de funcin que representa el cdigo que ser ejecutado cuando se llame a la funcin. El cuerpo de la funcin se encierra entre llaves "{}" Una funcin muy especial es la funcin "main". Se trata de la funcin de entrada, y debe existir siempre, ser la que tome el control cuando se ejecute un programa en C.

    Los programas Windows usan la funcin WinMain() como funcin de entrada. Existen reglas para el uso de los valores de retorno y de los parmetros de la funcin "main", pero de momento la usaremos como "int main()" o "int main(void)", con un entero como valor de retorno y sin parmetros de entrada. El valor de retorno indicar si el programa ha terminado sin novedad ni errores retornando cero, cualquier otro valor de retorno indicar un cdigo de error.

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 34/52

    Prototipos de funciones En C++ es obligatorio usar prototipos. Un prototipo es una declaracin de una funcin. Consiste en una definicin de la funcin sin cuerpo y terminado con un ";". La estructura de un prototipo es: func(); Por ejemplo: int Mayor(int a, int b); Sirve para indicar al compilador los tipos de retorno y los de los parmetros de una funcin, de modo que compruebe si son del tipo correcto cada vez que se use esta funcin dentro del programa, o para hacer las conversiones de tipo cuando sea necesario. Los nombres de los parmetros son opcionales, y se incluyen como documentacin y ayuda en la interpretacin y comprensin del programa. El ejemplo de prototipo anterior sera igualmente vlido y se podra poner como: int Mayor(int,int); Esto slo indica que en algn lugar del programa se definir una funcin "Mayor" que admite dos parmetros de tipo "int" y que devolver un valor de tipo "int". No es necesario escribir nombres para los parmetros, ya que el prototipo no los usa. En otro lugar del programa habr una definicin completa de la funcin. Normalmente, las funciones se declaran como prototipos dentro del programa, o se incluyen estos prototipos desde un fichero externo, (usando la directiva "#include") ya lo hemos dicho ms arriba, pero las funciones son "extern" por defecto. Esto quiere decir que son accesibles desde cualquier punto del programa, aunque se encuentren en otros ficheros fuente del mismo programa. En contraposicin las funciones declaradas "static" slo son accesibles dentro del fichero fuente donde se definen. La definicin de la funcin se hace ms adelante o ms abajo, segn se mire. Lo habitual es hacerlo despus de la funcin "main". Estructura de un programa C/C++: La estructura de un programa en C o C++ quedara as: [directivas del pre-procesador: includes y defines] [declaracin de variables globales] [prototipos de funciones] funcin main [desarrollo de funciones] Una definicin de la funcin "Mayor" podra ser la siguiente: int Mayor(int a, int b) { if(a > b) return a; else return b; } Los programas complejos se escriben normalmente usando varios ficheros fuente. Estos ficheros se compilan separadamente y se enlazan juntos. Esto es una gran ventaja durante el desarrollo y depuracin de grandes programas, ya que las modificaciones en un fichero fuente slo nos obligarn a compilar ese fichero fuente, y no el resto, con el consiguiente ahorro de tiempo. La definicin de las funciones puede hacerse dentro de los ficheros fuente o enlazarse desde libreras precompiladas. La diferencia entre una declaracin y una definicin es que la definicin posee un cuerpo de funcin.

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 35/52

    En C++ es obligatorio el uso funciones prototipo, y aunque en C no lo es, resulta altamente recomendable. Parmetros por valor y por referencia. Dediquemos algo ms de tiempo a las funciones. Hasta ahora siempre hemos declarado los parmetros de nuestras funciones del mismo modo. Sin embargo, ste no es el nico modo que existe para pasar parmetros. La forma en que hemos declarado y pasado los parmetros de las funciones hasta ahora es la que normalmente se conoce como "por valor". Esto quiere decir que cuando el control pasa a la funcin, los valores de los parmetros en la llamada se copian a "variables" locales de la funcin, estas "variables" son de hecho los propios parmetros. Lo veremos mucho mejor con un ejemplo: #include int funcion(int n, int m); int main() { int a, b; a = 10; b = 20; cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 36/52

    Ejemplo: int main() { int a; int &r = a; a = 10; cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 37/52

    a = 100; p = &a; // Llamamos a funcin con un puntero funcion(p) cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 38/52

    void funcion1(int a, int b=0, int c= 1);// Legal void funcion2(int a=1, int b, int c); // Ilegal Los argumentos por defecto empiezan a asignarse empezando por el ltimo. int funcion1(int a, int b=0, int c=1); ... funcion1(12, 10); // Legal, el valor para "c" ser 1 funcion1(12); // Legal, los valores para "b" y "c" sern 0 y 1 funcion1(); // Ilegal, el valor para "a" es obligatorio Funciones con nmero de argumentos variable Tambin es posible crear funciones con un nmero indeterminado de argumentos, para ello la declararemos los argumentos conocidos del modo tradicional, de este tipo debe existir al menos uno, y los desconocidos se sustituyen por tres puntos (...), del siguiente modo: int funcion2(int a, float b, ...); Los parmetros se pasan usando la pila, (esto es siempre as con todos los parmetros, pero normalmente no tendremos que prestar atencin a este hecho). Adems es el programador el responsable de decidir el tipo de cada argumento, lo cual limita bastante el uso de esta forma de pasar parmetros. Para hacer ms fcil la vida de los programadores, se incluyen algunas macros en el fichero de cabecera "stdarg.h", estas macros permiten manejar "fcilmente" las listas de argumentos desconocidos. Tipos: En el fichero de cabecera "stdarg.h" de define un tipo: va_list Ser necesario declarar una variable de este tipo para tener acceso a la lista de parmetros. Macros: Tambin se definen tres macros: va_start, va_arg y va_end. void va_start(va_list ap, ultimo); Ajusta el valor de "ap" para que apunte al primer parmetro de la lista. es el identificador del ltimo parmetro fijo antes de comenzar la lista. tipo va_arg(va_list ap, tipo); Devuelve el siguiente valor de la lista de parmetros, "ap" debe ser la misma variable que se actualiz previamente con "va_start", "tipo" es el tipo del parmetro que se tomar de la lista. void va_end(va_list va); Permite a la funcin retornar normalmente, restaurando el estado de la pila, esto es necesario porque algunas de las macros anteriores pueden modificarla, haciendo que el programa termine anormalmente. Uso de las macros para leer la lista de parmetros: funcion( [, ...], ...) { va_list ar; // Declarar una variable para manejar la lista // debe ser el nombre del ltimo parmetro antes de ... va_start(ar, ); ; // es una variable para recoger un parmetro // debe ser el mismo que es de while(( = va_arg(ar, )) != 0) { // Manejar } va_end(ar); // Normalizar la pila } Hay que usar un sistema que permita determinar cul es el ltimo valor de la lista de parmetros. Una forma es que el ltimo valor de la lista de parmetros en la llamada a la funcin sea un 0, (o ms en general, un valor conocido). Tambin puede hacerse que uno de los parmetros conocidos sea la cuenta de los parmetros desconocidos.

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 39/52

    Adems es necesario que el programador conozca el tipo de cada parmetro, para as poder leerlos adecuadamente, lo normal es que todos los parmetros sean del mismo tipo, o que se use un mecanismo como la de "printf", donde analizando el primer parmetro se pueden deducir el tipo de todos los dems. Este ltimo sistema tambin sirve para saber el nmero de parmetros. Ejemplos: #include #include void funcion(int a, ...); int main() { funcion(1, "cadena 1", 0); funcion(1, "cadena 1", "cadena 2", "cadena 3", 0); funcion(1, 0); return 0; } void funcion(int a, ...) { va_list p; va_start(p, a); char *arg; while ((arg = va_arg(p, char*))) { cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 40/52

    Muy a menudo necesitamos especificar valores u opciones a nuestros programas cuando los ejecutamos desde la lnea de comandos. Por ejemplo, si hacemos un programa que copie ficheros, del tipo del "copy" de MSDOS, necesitaremos especificar el nombre del archivo de origen y el de destino. Hasta ahora siempre hemos usado la funcin "main" sin parmetros, sin embargo, como veremos ahora, se pueden pasar argumentos a nuestros programas a travs de los parmetros de la funcin main. Para tener acceso a los argumentos de la lnea de comandos hay que declararlos en la funcin "main", la manera de hacerlo puede ser una de las siguientes:

    int main(int argc, char *argv[]); int main(int argc, char **argv);

    Que como sabemos son equivalentes. El primer parmetro, "argc", es el nmero de argumentos que se han especificado en la lnea de comandos. El segundo, "argv", es un array de cadenas que contiene los argumentos especificados en la lnea de comandos. Por ejemplo, si nuestro programa se llama "programa", y lo ejecutamos con la siguiente lnea de comandos: programa arg1 arg2 arg3 arg4 argc valdr 5, ya que el nombre del programa tambin se cuenta como un argumento. argv[] contendr la siguiente lista: "C:\programasc\programa", "arg1", "arg2", "arg3" y "arg4". Ejemplo: #include int main(int argc, char **argv) { for(int i = 0; i < argc; i++) cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 41/52

    { if(a > b) return a; else return b; }

    int main() { cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 42/52

    cout 1) return n*factorial(n-1); /* Recursividad */ return 1; /* Condicin de terminacin, n == 1 */ } Veamos paso a paso, lo que pasa cuando se ejecuta esta funcin, por ejemplo: factorial(4): 1 Instancia

    n=4 n > 1 salida 1 salida

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 43/52

    3 Instancia n > 1 salida retorna 1

    3 Instancia (recupera n=2 de la pila) retorna 1*2=2

    2 instancia (recupera n=3 de la pila) retorna 2*3=6

    1 instancia (recupera n=4 de la pila) retorna 6*4=24 Valor de retorno -> 24

    La funcin factorial es un buen ejemplo para demostrar cmo se hace una funcin recursiva, sin embargo la recursividad no es un buen modo de resolver esta funcin, que sera ms sencilla y rpida con un bucle "for". La recursividad consume muchos recursos de memoria y tiempo de ejecucin, y se debe aplicar a funciones que realmente le saquen partido.

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 44/52

    ARREGLOS Son variables en memoria que pueden almacenar ms de un dato del mismo tipo. Estas variables tienen una caracterstica y es que nos referimos a los elementos, almacenados en los vectores o matrices, utilizando un nombre y nmeros enteros que indican la posicin de la celda en el vector o la matriz. En C++ podemos tener vectores que almacenen datos de tipo: carcter, enteros, reales, punteros y estructuras. Propiedades: 1. Los datos individuales se llaman elementos. 2. Todos los elementos tienen que pertenecer al mismo tipo de dato. 3. Todos los datos son almacenados en celdas contiguas en la memoria de la computadora, y el subndice del primer dato es el cero. 4. El nombre del array es una Cte. que representa la direccin en memoria que ocupa el primer elemento del vector.

    DECLARACIN DE UN VECTOR O ARREGLO UNIDIMENSIONAL Para declarar un vector siga la siguiente estructura:

    tipo_de_dato nombre[ tamao ] Donde el tamao es un nmero entero que indica cuantas posiciones tiene el vector.

    Ejemplo: nombre float nombre[4]; 0 1 2 3 int datos[3]; 0 1 2

    Observe en la declaracin anterior el nmero entero n entre corchetes indica cuantas posiciones tiene el vector en memoria. Las celdas en memoria se numeran desde 0 hasta n-1. El vector nombre puede almacenar nmeros de tipo float, el vector datos puede almacenar 3 nmeros enteros. INICIALIZACIN DE ARREGLOS: C permite darle valores a las celdas de un vector de la siguiente manera: 1. Por omisin, cuando son creados. El estndar ANSI de C especifica que siempre que declaremos un vector (arreglo), este se inicializa con ceros. 2. Explcitamente, al declarar el vector suministrando datos iniciales constantes. 3. Durante la ejecucin del programa. En los siguientes renglones les vamos a mostrar como realizar dichas acciones. Sintaxis: tipo nombre_del_arreglo[tamao]={ lista de valores } Inicializacin Explcita:

    Significa que en el momento de declarar el vector, se especifican los valores as: int numero[3]={1,2,3};

    numero 1 2 3

    float horas[ 4 ]={1.2,13.89,23.5,45.8}; horas 1.2 13.89 23.5 45.8 0 1 2 3

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 45/52

    Inicializacin en tiempo de ejecucin: Significa que la computadora ejecuta un ciclo while o for y con la instruccin cin el programa almacena los valores en las variables. Ejemplos: El siguiente ciclo muestra como se pueden almacenar datos en un vector de n posiciones, usando la instruccin cin: for (i=0;i

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 46/52

    { cout

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 47/52

    El ciclo anidado anterior entra los datos a una matriz, por filas.

    Ejemplo: El siguiente ciclo muestra como se pueden almacenar datos en una matriz de m filas y n columnas, usando la instruccin cin: for(j=0; j

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 48/52

    for (i=0;i

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 49/52

    for(k=0;k

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 50/52

    cin>>n; for(j=0;j

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 51/52

    Si declaramos los siguientes vectores de caracteres: char agua_estado1[4]; char agua_estado2[7]; Podemos inicializar la variable agua_estado1[4] as: agua_estado1[0] = 'g'; agua_estado1[1]= 'a'; agua_estado1[2]= 's'; agua_estado1[3]= '\0'; Por medio de una instruccin de Lectura:

    Se puede utilizar la funcin cin, pero no podr digitar espacios en blanco pues la instruccin cin no los lee.

    Para poder entrar datos que contenga espacios en blanco utilice la funcin cin.get(nombre_vector,longitud);

    Donde nombre_vector es la variable donde se va almacenar lo que se digita, lngitud es un nmero entero que indica cuantos elementos se van almacenar.

    FUNCIONES PARA EL MANEJO DE CADENAS.

    Funcin strcpy() pertenece a copia la cadena apuntada por s2 en la apuntada por s1. sintaxis: char *strcpy (char *s1, const char *s2); Ejemplo: Suponga que se declara una variable as: char frase[ 5];

    frase

    Despus de la ejecucin de strcpy(frase,"Mio"); La variable en memoria es:

    M i o '\0' En el lenguaje C est prohibido cosas como: frase="Mio";

    Funcin strcat() : pertenece a Une la cadena apuntada por s2 en la apuntada por s1. sintaxis: char *strcat ( char *s1, const char *s2); jemplo: Suponga que declara las siguientes dos variables: char frase[25]="La casa", frase2[10]=" es mia";

    Despus de ejecutar la instruccin strcat(frase,frase2); en la memoria dla computadora la variable frase se puede ver as:

    frase L a C a S a e s M i a \0

    Funcin strlen(): Devuelve la longitud de una cadena. sintaxis: int strlen ( const char *s1);

    Funcin strcmp ( const char *s1, const char *s2) Compara s1 y s2. Devuelve cero si las dos cadenas son iguales, mayor que cero si la

    cadena apuntada por s1 es mayor que s2 y menor que cero si la cadena apuntada por s1 es menor que la apuntada por s2.

    Variable en memoria

  • UNIVERSIDAD NACIONAL DE INGENIERIA-FIM COMPUTACION I

    Elaborado por: Mximo Obregn R. Pg. 52/52

    Ejercicio: Escriba un programa que lea una palabras. Luego el programa debe invertir la palabra as obtenida e imprimir la palabra que se obtiene al revs. Ejemplo: Si la palabra es logroes debe imprimir: seorgol. #include #include #include #include void main(void) { char frase[50],inversa[50]; double longitud,i; clrscr(); cout