programacion de c

Upload: bryan-kelvin

Post on 07-Jul-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/18/2019 Programacion de c

    1/129

    Programación C y C++ 1

     

    ProgramaciónLenguaje C y C++

    M. C. Gastón Dehesa Valencia

  • 8/18/2019 Programacion de c

    2/129

    Programación C y C++2

    Derechos Reservados © 2002 por Gastón Dehesa Valencia

    Todos los Derechos Reservados. Se autoriza para que este material pueda ser leiday reproducida por los estudiantes que la requieran.

    En este libro se han incluido programas y descripciones gráficas por su valoreducacional. Han sido debidamente probados pero no se garantizan para ningúnpropósito en particular. El editor no proporciona ninguna garantía o representación,ni acepta ninguna responsabilidad con respecto a los programas y descripcionesgráficas.

    Muchos de los nombres utilizados por los fabricantes o vendedores de software paradistinguir sus productos son marcas registradas. El editor tiene toda la intención deproporcionar la información de la marca registrada acerca de los fabricantes y losproductos mencionados en este libro. Una lista de las designaciones de marcasregistradas se muestra más adelante en esta página.

    Marcas RegistradasC++ Builder es una marca registrada por Inprise Corporation.Turbo C++ es una marca registrada por Borland International, Inc.MS-Windows™ es una marca registrada por Microsoft CorporationMS-DOS es una marca registrada por Microsoft CorporationVisual C++ es una marca registrada por Microsoft Corporation

    Dedico esta obra a mi familiaPor que representan una fuente de

    Energía inagotable, que me impulsaa emprender nuevos proyectos.

  • 8/18/2019 Programacion de c

    3/129

    Programación C y C++ 3

     Contenido

    1.- Introducción al Lenguaje CHistoria del lenguajeEstructura de un programaCompilación y LigadoTipos de Datos y ModificadoresOperadoresEntrada y Salida de DatosEspecificadores de clase de almacenamientoEjercicios

    2.- Sentencias de control de programaSentencias de SelecciónSentencias de IteraciónSentencias de SaltoEjercicios

    3.- Arreglos y ApuntadoresQue son los arreglosArreglos UnidimensionalesCadenasArreglos BidimensionalesApuntadoresPunteros y ArreglosInicialización de ApuntadoresFunciones de Asignación DinámicaEjercicios

    4.- Funciones y EstructurasFuncionesPase de parámetrosEstructurasArreglos de EstructurasEjercicios

    5.- Programación Orientada a ObjetosQue es la POODefinición de una claseTipos de Accesos a una claseTipos de UsuariosRelación entre Usuarios y Tipos de AccesosClases AmigasDatos EstáticosConstructores y Destructores

  • 8/18/2019 Programacion de c

    4/129

    Programación C y C++4

    Ejercicios

    6.- Herencia y Polimorfismo

    Clases DerivadasHerencia Simple y MúltiplesProblema y solución de la Herencia MúltiplesConstructores y Destructores en clases DerivadasPolimorfismoSobrecarga de funcionesFunciones virtualesClases AbstractasEjercicios

  • 8/18/2019 Programacion de c

    5/129

    Programación C y C++ 5

    Prologo

    Este libro puede ser utilizado como guía para el examen de admisión de laMaestría en Informática que el Instituto en Computación y ElectrónicaDehesa ofrece en lo que se refiere a Programación.

    Este libro esta organizado de la siguiente forma: En los cuatro primeroscapítulos se aborda la programación estándar y en los capítulos 5 y 6 losconceptos básicos de la programación orientada a objetos.

    Cada tema expuesto viene acompañado de uno o más ejercicios, el nombre delarchivo aparece como comentario al inicio de cada listado de programa. Los programas que contiene el libro fueron probados usando compiladores deBorland.

    En archivo empaquetado que acompaña al libro encontrará un directorio porcada unidad con los ejercicios desarrollados.

    Espero que al terminar de leer este libro se cubran las expectativas planteadas,cualquier comentario o sugerencia acerca del contenido del material lo puedehacer a la siguiente dirección de correo electrónico: [email protected] 

  • 8/18/2019 Programacion de c

    6/129

    Programación C y C++6

    Capitulo 1

    Introducción al Lenguaje C

    •  Historia del lenguaje•  Estructura de un programa

    •  Compilación y Ligado•  Tipos de Datos y Modificadores•  Operadores•  Entrada y Salida de Datos•  Especificadores de clase de almacenamiento•  Ejercicios

  • 8/18/2019 Programacion de c

    7/129

    Programación C y C++ 7

    HISTORIA DEL LENGUAJE

    El Lenguaje C nació en los Laboratorios Bell de AT&T y ha sido

    estrechamente asociado con el sistema operativo UNIX, ya que su desarrollose realizo en este sistema y debido a que tanto UNIX como el propiocompilador de C y la casi totalidad de los programas y herramientas deUNIX, fueron escritos en C. Su eficiencia y claridad han hecho que ellenguaje ensamblador apenas haya sido utilizado en UNIX.

    Este leguaje está inspirado en el lenguaje B escrito por KenThompson en 1970 con intención de recodificar el UNIX, que en la fase dearranque estaba escrito en ensamblador, en vista a su transportabilidad a otrasmaquinas. B era un lenguaje evolucionado e independiente de la máquina,inspirado en el lenguaje BCPL concebido por Martín Richard en 1967.

    En 1972 , Dennis Ritchie, toma el relevo y modifica el lenguaje B,creando el lenguaje C y rescribiendo el UNIX en dicho lenguaje. La novedadque proporciono él lenguaje C sobre el B fue el diseño de tipos y estructurasde datos.

    En 1980 Bjarne Stroustrup de los laboratorios Bell de Murray Hill, New Jersey, inspirado en el lenguaje Simula67 adiciono las características dela programación orientada a objetos (incluyendo la ventaja de una bibliotecade funciones orientada a objetos) y lo denomino C con clases. Para 1983 dichadenominación cambio a la de C++. Con este nuevo enfoque surge la nueva

    metodología que aumenta las posibilidades de la programación bajo nuevosconceptos.

    Con la popularidad de las microcomputadoras se crearon muchasimplementaciones de C. En lo que se podría decir que era un milagro, loscódigos fuentes aceptados por la mayoría de esas implementaciones eranaltamente compatibles. Sin embargo, como no existía ningún estándar,aparecieron discrepancias. Para remediar la situación, el Instituto deEstándares Americano (ANSI) estableció un comité a mediados de 1983 paracrear un estándar que definiera al lenguaje C. Este comité ANSI termino el proceso de formalización en 1990.

    Actualmente muchas empresas se dedican a vender el Compilador dellenguaje C, dos de estos imperios son:

    Microsoft Visual C++ Ver 6.0Borland C++ Builder 5.0

    La mayoría de los compiladores actuales soportan la programación enC Estándar, C Orientado a Objetos y la Programación Visual.

  • 8/18/2019 Programacion de c

    8/129

    Programación C y C++8

    ESTRUCTURA DE UN PROGRAMA

    Un programa escrito en lenguaje C tiene la siguiente estructura, aunque no

    necesariamente debe contener todos los puntos:1.- Definición de archivos de cabeceras2.- Definición de constantes y variables globales3.- Definición de Funciones del usuario4.- Definición e implementación del programa principal ( main() ) 5.- Implementación de funciones del usuario.

    A manera de ejemplo considérese el siguiente programa://*Est_Prog.cpp 

    //Definición de archivos de cabecera

    #include #include

    //Definición de Constantes y Variables Globales#define PI 3.1416float Area;

    //Definición de funciones del usuariovoid Area_Cir(int R);

    //Definición e implementación del Programa Principalvoid main(){int Radio;

    clrscr();printf("BIEN BENIDO AL LENGUAJE C");printf("\n\n CALCULO DEL AREA DE UN CIRCULO");printf("\n Radio: ");scanf("%i",&Radio);

     Area_Cir(Radio);printf("\n El Area es; %8.2f",Area);getch();

    }

    //Implementación de funciones del Usuariovoid Area_Cir(int R){ Area= 2*PI*R*R;}

    La idea de presentar un programa no muy pequeño de entrada adiferencia de como lo hacen otros autores es para que el estudiante en su primer día conozca gran cantidad de información sobre el Lenguaje C.

    El programa Est_Pro.cpp contiene las 5 partes del que se compone un programa escrito en el lenguaje C. en la sección de Definición de archivos de cabecera se presentan los archivos conio.h y el stdio.h ambos son archivos de

  • 8/18/2019 Programacion de c

    9/129

    Programación C y C++ 9

    cabecera definidos por el lenguaje, existen un gran numero de ellos queacompaña al compilador según la versión y fabricante por lo regular halladosen el directorio \Include, los archivos de cabecera definidos en esta sección

    que pertenezcen al compilador deberán estar entre los signos < > y aquellosque el propio programador cree para sus aplicaciones entre comillas “ “ locual le indicara al compilador que busque el archivo en el directorio detrabajo y no en el directorio por defauld de archivos de cabecera (include).

    La siguiente lista muestra algunos de los archivos de cabeceras quemás se usan así como una breve descripción de su contenido.

     para uso de funciones de entrada/salida standard. para uso de funciones de entrada/salida por flujos. para uso de funciones de entrada/salida por teclado oconsola para la asignación dinámica de memoria

     para uso de funciones relacionadas con gráficas para uso de funciones de entrada/salida de bajo nivel para uso de funciones matemáticas. para uso de funciones de manipulación de memoria. para uso de funciones relacionadas con cadenas para uso de funciones de hora y fecha.

    Para definir un archivo de cabecera se usa una directiva de preprocesamiento llamado #include  seguido del archivo de cabeceraencerrado entre signos < > ó “ ” según el lugar donde este se encuentre, deesta forma el compilador incluirá durante la compilación las variables,

    constantes y funciones que se encuentren en el archivo y que sean usados porel programa en desarrollo.

    En la sección de definición de constantes y variables globales se encuentraotra directiva de preprocesamiento conocido como #define  que permitedefinir la constante, observe que después del identificador PI no existe unsigno =, aunque el significado es que el identificador PI toma el valor de3.1416, para la definición de las variables globales basta con indicar su tipo dedato y el identificador seguido de punto y coma, aquí se define  Area de tiporeal (float), recuerde que una variable global perdura a lo largo de la ejecuciónde todo el programa y puede ser vista, modificable desde cualquier parte del

     programa o función.

    En la sección de definición de funciones del usuario  se requieredefinir todas las funciones que se implementen por el programador, por quesolo de esta forma el compilador puede conocer de forma adelantada laexistencia de los mismos, es decir antes de llamar a una función primero elcompilador necesita saber de su existencia en caso contrario no podríaresolver esta referencia provocando un error en tiempo de compilación, ellenguaje C es un lenguaje estructurado lo cual significa que un programasegún su tamaño se dividirá en varios módulos conocidos como funciones, deesta forma se evita que la función principal este saturada de código. En este

  • 8/18/2019 Programacion de c

    10/129

  • 8/18/2019 Programacion de c

    11/129

    Programación C y C++ 11

    COMPILACIÓN Y LIGADO

    Para crear un archivo ejecutable (Código maquina relocalizable) se realiza

    mediante dos etapas o tiempos que son: Compilación y ligado.Compilación.- Durante este proceso se examina el o los programas

    fuente de la aplicación, los archivos de cabecera para hallar errores desintaxis, de no existir se genera un archivo objeto (.OBJ) por cada programafuente.

    Ligado.- Durante este proceso se unen todos los programas objetosdel que se conforme la aplicación, así como los archivos de librería (.LIB) para formar un solo programa independiente, o programa ejecutable (.EXE).

    Para aclarar lo anterior observe la siguiente figura:

    La implementación de las funciones halladas en los archivos decabecera predefinidos por el lenguaje se encuentran en librerías (Mathl.lib,Cl.lib, etc.) incluidos también en el software del compilador, por lo que seintegran al programa en tiempo de enlace, es por esta razón que si una funcióndefinido por el usuario no esta implementada en el programa ni tampoco enuna librería se detectará en tiempo de enlace.

    De lo anterior se deduce entonces que un archivo de cabeceras (*.h) esdiferente de un archivo de librerías (*.Lib), lo cual es muy cierto y veamosalgunas diferencias:

    Característica Archivo de Cabecera Archivo de LibreríaTipo Texto BinarioCuando se usa Tiempo de Compilación Tiempo de ligadoContenido Definiciones Implementaciones

    compiladas

    Tabla 1. 1 Diferencias entre un archivo de Cabecera y uno de Librería

    Figura 1. 1 Proceso de Compilación y Ligado de un programa en C

    Princi .c Archivo2.c

    stdio.h conio.h

    COMPILACION

    Archivo2.obPrinci .ob

    LIGADO

    Extern.exe

    Mathl.libCl.lib

  • 8/18/2019 Programacion de c

    12/129

    Programación C y C++12

    Es frecuente que se confundan los términos archivo de librería conarchivo de cabecera, la tabla y dibujo anterior precisamente tiene la finalidad

    de hacer notar que son diferentes. Durante la escritura de un programa esfrecuente probar una y otra vez si se esta haciendo lo correcto, para ello se usala ejecución paso a paso de un programa (Depuración), en ocasiones algunosarchivos de cabecera se cargan en el ambiente de programación y se debetener la precaución de no modificarlos para no producir incongruencias entreel archivo de cabecera y el archivo de librería, al final de cuentas estándirectamente relacionados entre si .

    TIPOS DE DATOS Y MODIFICADORES

    Todo lenguaje de programación suministra al diseñador de software un

    conjunto de tipos de datos y un conjunto de instrucciones, el diseñador a partirde estas puede crear nuevos tipos y nuevas instrucciones.

    Palabras reservadas

    Las palabras reservadas del compilador son todas aquellas palabras que seusan para especificar tipos de variables, estructuras cíclicas, estructuras dedecisión, etc., y que no pueden ser usadas por el usuario como nombre devariables, de funciones o de nuevos tipos .Estas palabras son las siguientes:

    asm delete goto public thisauto do huge register union

     break double if return unsignedcase else int Short virtualcarch enum interrupt signet voidchar extern long sizeof volatileclass far near static whileconst float new structcontinue for private switchdefauld friend protected template

    Tabla 1. 2 Palabras Reservadas del Lenguaje

    Las palabras reservadas deben escribirse siempre en minúsculas.

    Tipos de datos

    Un tipo de dato en C es la manera como el compilador almacena lainformación en la memoria, por ejemplo el sistema operativo MS-DOS es unsistema de 16 bits, mientras que Windows 98, Windows 2000, Windows NTson de 32 bits, así que el compilador para cada uno de estos sistemasoperativos almacenara en algunos casos un mismo tipo de dato con longituddiferente, más adelante se presenta una tabla de los tipos de datos para unsistema de 16 bits.

  • 8/18/2019 Programacion de c

    13/129

    Programación C y C++ 13

    C se distingue por ser un lenguaje con demasiados tipos, existen otroslenguajes como PASCAL que cuentan con unos pocos tipos, esta variedad detipos nos obliga a ser demasiado cuidadosos a la hora de usar algunos

    operadores de asignación.Antes de empezar a describir los tipos disponibles en el lenguaje

    estudiemos un poco lo que es una variable.Las variables siempre pertenecen a un tipo de datos, este tipo de datos

     puede ser alguno de los tipos predefinidos por el lenguaje o definido por elusuario, algunos tipos predefinidos para un sistema de 16 bits son.

    Tipos de datos # de Bits Intervalochar 8 -127 a 127int 16 -32768 a 32767long 32 0 a 4294967295float 32 Aprox. 6 dígitos de precisióndouble 64 Aprox. 12 dígitos de precisiónvoid 0 Sin valor

    Tabla 1. 3 Tipos de Datos Básicos de un sistema de 16 bits

    Midificadores

    Los modificadores son palabras reservadas que se le adicionan a los tipos paramodificarles su tamaño y/o su rango, estos son:

    Signedunsignedlongshort

    Estas son algunas de las combinaciones que se pueden presentar:

    Tipo # de Bits Intervalounsigned char 8 0 a 255Char 8 -127 a 127unsigned int 16 0 a 65535short int 16 Lo mismo que int

    Int 16 -32,768 a 32,767unsigned long int 32 0 a 4,294,967,295long int 32 -2,147,483,648 a 2,147,483,647Float 32 3.4E-38 a 3.4E38double float 64 1.7E-308 a 1.7E308

    Tabla 1. 4 Tipos de Datos con modificadores en un Sistema de 16 Bits

    Como se puede observar cada tipo tiene un tamaño en bits, este tamañodefine un rango de operación que limita los números que se puede almacenaren una variable. imagínese que se desea diseñar un programa de nómina que

  • 8/18/2019 Programacion de c

    14/129

    Programación C y C++14

    va ha manejar los sueldos de los empleados, piense en el tipo de datos queusaría para la variable sueldo; seguramente pensó en un tipo unsigned int, siobservamos la tabla anterior el tipo unsigned int almacena valores entre 0 y

    65535, ¿será el tipo unsigned int el más apropiado? Bueno tal vez contestaráque no, ya que los sueldos pueden ser superiores a 65535, tal vez el tipo másapropiado será unsigned long  que almacena valores entre 0 y 4294967295.Bueno, pero que pasaría si escogiéramos el tipo unsigned int para la variablesueldo, en el momento que almacenemos un valor superior a 65535 elcontenido quedará truncado.

    Para el caso de un Sistema Operativo de 32 bits, el compiladoralmacenaría los datos con tamaños diferentes, este sería el caso:

    Tipo # de Bits Intervalounsigned char 8 0 a 255char 8 -128 a 126unsigned int 32 0 a 4,294,967,295short int 16 -32,768 a 32,767int 32 -2,147,483,648 a 2,147,483,648unsigned long int 32 Lo mismo que unsigned intlong int 32 Lo mismo que intfloat 32 1.2E-38 a 3.4E381double float 64 2.2E-308 a 1.8E3082

    Tabla 1. 5 Tipos de Datos con moficadores en un sistema de 32 bits

    Al examinar la tabla anterior se puede observar que int  es lo mismoque long int  mientras que para un sistema de 16 bits estos tienen diferentelongitudes y por lo tanto diferentes intervalos.Como se deduce en consecuencia que la longitud en bytes de un tipo datodepende del sistema operativo y del compilador que se use, para conocer con precisión la longitud en bytes de una variable de un tipo de dato se puedeutilizar el operador sizeof . Por ejemplo:

    int x;x=sizeof(int));

    En un compilador operado en el sistema operativo MS-DOS x tomaríael valor de 2, mientras que en Windows 98 el valor de 4.

    En este libro con la finalidad de evitar las complicaciones del ambientedel compilador se abordarán los aspectos básicos de la programación estándary orientado a objetos usando un compilador que se ejecuta bajo el MS-DOS(Hasta el capitulo 6), la parte restante del libro estará basado en el ambienteWindows para conocer la programación Visual con C++.

    Comentarios

  • 8/18/2019 Programacion de c

    15/129

    Programación C y C++ 15

     Un comentario es una secuencia de caracteres utilizada para explicar el códigofuente y no se toma en cuenta durante la compilación (No se considera como

    código). Existen dos formas para definir un comentario:•  Secuencia de caracteres encerrados entre los símbolos /* y */•  Comienza con los caracteres // y termina al final de la línea.

    Variables

    Es una posición de memoria de cierta longitud según el tipo de dato cuyovalor puede ser modificado a lo largo de la ejecución de un programa .Sintaxis:[clase] tipo identificador[,identificador];Donde:

     clase representa un especificador de clase de almacenamiento (seexplica posteriormente). tipo  determina el tipo de variable (char, int, float, etc.)identificador Indica el nombre de la variable.Una variable que se declara al inicio del programa es considerada

    como variable global y es accesible desde cualquier parte del programa. Porlo contrario una variable declarada dentro de una función se considera comovariable local y es accesible solamente dentro de este.

    Cada variable de un programa, debe declararse antes de ser utilizada.

    La declaración consiste en enunciar el nombre de la variable y asociarle untipo. El tipo determina los valores que puede tomar así como las operacionesque con ella pueden realizarse.Ejemplos:int Suma, Promedio;char Car, Nombre[40];

    Una variable puede ser inicializada cuando se declara:char car = ’\0’ ;int Incremento = 10;char Archivo[] = ”Datos.dbf”;

    Conversión de Tipos de datos 

    Cuando se trabaja con datos de diferentes tipos es frecuente mezclarlosdurante una expresión o asignación, a diferencia de otros lenguajes, C realizala conversión de tipos compatibles de manera automática.Por ejemplo:

    int x=92; //Se declara la variable x de tipo entero inicializándola con 92char car=x; //car es de tipo carácter y se le asigna el valor de un entero x

    En este ejemplo se da la conversión automática de tipos, es decir a lavariable car se le asigna el carácter ’\’ , que es el equivalente del códigoASCII.

  • 8/18/2019 Programacion de c

    16/129

  • 8/18/2019 Programacion de c

    17/129

    Programación C y C++ 17

    Prioridad y orden de Procedencia

    La prioridad de los operadores define el orden en que se evalúa una expresión

    cuando tiene distintos operadores. C y C++ tienen reglas específicas paradeterminar el orden de evaluación. Lo más sencillo de recordar es que lamultiplicación y división tienen prioridad sobre la suma y la resta. A partir deesto, si una expresión no le resulta clara, tampoco lo será para alguien que leael código, por lo que deberá utilizar paréntesis para hacer más explicito elorden de evaluación. Por ejemplo:

     A= x + y – 2 / 2 + z;

    Tendrá un significado distinto dependiendo de cómo se agrupen los paréntesis: A= x + (y - 2) / (2 + z);

    En la siguiente tabla lista los operadores de C y C++ de mayor a menor prioridad, y describe como se asocia cada operador (de izquierda a derecha ode derecha a izquierda). Todos los operadores situados entre líneas tienen elmismo nivel de prioridad.

    Nivel Operadores Asociatividad1 () [] -> :: . Izquierda – Derecha2 !  ~ ++ -- & * Derecha . Izquierda3 * / % Izquierda – Derecha4 + - Izquierda – Derecha5 > Izquierda – Derecha6 < >= Izquierda – Derecha

    7 = != Izquierda – Derecha8 & Izquierda – Derecha9 ∧  Izquierda – Derecha10 | Izquierda – Derecha11 && Izquierda – Derecha12 || Izquierda – Derecha13 = *= -= *= %= < >= &= ∧= |= Derecha – Izquierda14 , Izquierda – Derecha

    Tabla 1. 7 Prioridad y Asociatividad de operadores de C++

    Ejemplos:

    a).- 8/4*62*612

    8*6/448/412

    28/(3*4)28/122

     b).- 3/4*60*60

    3*6/418/44

    c).- (float) 2/42.0/40.5

    d).- -3+4% 5/2-3+4/2-3+2-1

  • 8/18/2019 Programacion de c

    18/129

    Programación C y C++18

    ENTRADA Y SALIDA DE DATOS (ESTÁNDAR Y FLUJOS)

    Prácticamente todos los programas requieren procesar información proveniente de fuentes externas para obtener la solución de un problemaespecífico. Esta información constituye los datos de entrada del algoritmo quedefinen nuestro programa y es mediante ellos que se obtendrá la salida osolución correspondiente:

    De ahí la importancia de proporcionar adecuadamente los valores odatos de aquellas variables  del programa que deba leer la computadora;además de la importancia de incluir mensajes en las ordenes de salida que nosindiquen la naturaleza o nombre de los resultados obtenidos.

    El sistema operativo MS-DOS soporta dos métodos de entrada y salida de

    datos que son:•  Entrada y Salida Estándar•  Entrada y salida por flujosEl sistema operativo Windows la entrada y salida por pantalla lo hace a

    través de un conjunto de controles visuales, los cuales se analizaran posteriormente. En esta sección se analizan los dos primeros métodos.

    Entrada y Salida Estándar 

    Para la entrada y Salida de datos con formato se utilizan dos funcioneshallados en el archivo de cabecera stdio.h : printf()  y  scanf().

    Salida por pantalla

    Printf(char *cadena_de_control, Lista_argumentos);

    La cadena de control está formada por dos tipos de elementos . El primer elemento es el carácter que se mostrará en la pantalla. El segundoelemento contiene especificadores de formato que definen la forma en que semuestran los argumentos posteriores. El espicificador de formato empiezacon un % y va seguido por el código del formato. Debe haber exactamente elmismo número de argumentos que especificadores de formato y ambos debencoincidir en su orden de aparición de izquierda a derecha.

    En la siguiente tabla se muestra una gran variedad de especificadoresde formato.

    Código Formato

    %c Carácter

    %d Entero en decimales con signo

    %i Entero decimales con signo

    %e Notación científica

  • 8/18/2019 Programacion de c

    19/129

    Programación C y C++ 19

    %f Punto flotante)

    %h Entero corto

    %o Octal sin signo

    %s Cadena de caracteres

    %x Hexadecimal sin signo

    Tabla 1. 8 Especificadores de Formato

    Ejemplo:

    printf(“El Lado es: %i El Area del Cuadrado es: %f”,Lado, Area);

    Si la variable Lado=5 por lo tanto la variable Area=25, así el mensaje sería:El Lado es: 5 El Area del Cuadrado es: 25

    También en la cadena de control pueden existir una serie de caracteresque permitan formatear la salida, conocidos como secuencia de escape

    Secuencia de escape Acción realizada\a Alarma\b Retroceso\f Avance de pagina\n Nueva Linea\r Retorno de carro\t Tabulación (horizontal)

    \v Tabulación (vertival)\\ Barra inclinada

    Tabla 1. 9 Secuencias de Escape

    Entrada por teclado

    Scanf(char *cadena_de_control, Lista_argumentos);

    Esta función direcciona automáticamente la lectura de valores por el

    teclado de la microcomputadora. Como se aprecia el formato es idéntico al printf().

    El lenguaje C emplea apuntadores  en lectura de toda cantidadnumérica debido a que asigna dichos valores a través de las direcciones de lasvariables, por tal motivo los nombres de ellas van precedidas del símbolo &(con lo que se indica que se usan apuntadores). En el caso de cadenas, losnombres de las variables son en si mismos apuntadores y no requieren dichosímbolo.

    Ejemplo:

  • 8/18/2019 Programacion de c

    20/129

  • 8/18/2019 Programacion de c

    21/129

    Programación C y C++ 21

     Entrada y Salida por flujos

    C++ proporciona el archivo de cabecera iostream.h  que contiene funcionesque realizan operaciones de Entrada/Salida, este archivo tiene la ventaja sobreel stdio.h  por ser una implementación orientada a objetos, dos de estosobjetos son: cin  y  cout. Donde:

    •   cin  Usado para entrada de datos•   cout  Usado para salida de datos

    Para el manejo de de estos dos objetos se utilizan dos operadores:•  El operador de inserción () lee informaciones del flujo cin  a la

    izquierda del operador y las almacena en las variables indicadas a laderecha. 

    A manera de ejemplo rescribiremos el programa ES-Estan.cpp  pero enlugar de usar printf() y scanf() se usara cout  y cin.

    /*ES-Flujo.cpp*/

    #include #include //En lugar de stdio.h

    void main()

    {char Nom[40];int Edad;float Peso;

    clrscr();cout

  • 8/18/2019 Programacion de c

    22/129

    Programación C y C++22

     palabra. Para leer más de una palabra se puede utilizar la función getline() dela siguiente forma:

    cin.getline(Cadena, num);

    Donde:Cadena  es cualquier arreglo de caracteres que se haya definido conanterioridad y que contiene la cadena de entrada. Num es el número máximo de caracteres que desea leer con getline() 

    Ejemplo:cin.getline(Nom, 40); //Se puede almacenar hasta 40 caracteres en Nom

    En la penúltima línea se observa que se pueden concatenar varios operadores efectúan automáticamente las conversiones necesarias.

    Los ejemplos que se mostraran a partir de esta parte del libro en adelante,usarán el cout   y el cin  para la entrada y salida de datos en pantalla. Sinembargo al abordar el tema de la programación visual se dejará de usar.

    ESPECIFICADORES DE CLASE DE ALMACENAMIENTO

    Aunque este tema esta ligado más con el tema de Variables se dejo para estasección porque se requiere de los conocimientos anteriores para comprenderlocon más claridad.

    Existen cuatro especificadores de clase de almacenamiento sopórtados por C:

    •  extern•  static•  register•  auto

    Los especificadores le indican al compilador cómo debe almacenar lavariable. La clase de almacenamiento precede a la declaración de la variable.Su forma general es:

    [clase] tipo identificador[,identificador];

    •  extern 

    Dado que C permite enlazar juntos módulos de un programa, compilados porseparado con el fin de acelerar la compilación y ayudar a la gestión de grandes proyectos, debe haber alguna forma de hacer conocer a todos los archivos lasvariables globales requeridas por el programa, las variables globales se debende declarar sólo una vez. Si se declaran dos variables globales con el mismonombre en el mismo archivo, el compilador imprimirá un mensaje de errorindicando que se ha duplicado un nombre de variable, lo que significa que elcompilador no sabe que variable se va ha usar cada vez. Lo mismo ocurre sideclaran todas las variables globales necesitadas por el programa en cadaarchivo. Aunque el compilador no daría ningun mensaje de error en tiempo de

  • 8/18/2019 Programacion de c

    23/129

    Programación C y C++ 23

    compilación , realmente se intenta crear dos o más de cada variable. El problema aparecería al intentar enlazar los modulos. El Enlazador mostraría elmensaje de error “Identificador duplicado” por que no sabría que variable

    usar. La solución está en declarar todas las variables globales en un archivo yusar declaraciones extern en los otros.Ejemplo:

    /*Princip.cpp proyecto:exten.prj */#include #include

    float Prom;

    void Promedio();

    void main(){clrscr();cout

  • 8/18/2019 Programacion de c

    24/129

    Programación C y C++24

    Creación de Proyectos 

    En la mayoría de los ambientes de programación modernos se considera este

    método, los pasos a seguir diferirán unos de otros dependiendo del fabricantey versión, a manera de ejemplo se explicará como se lleva a cabo la creaciónde proyectos usando el Software de Borland ver. 1.0 para MS-DOS, para poder compilar y enlazar de manera directa y transparente para el programador el programa Extern.prj. El nombre que se le da a un proyectoserá el mismo que tendrá el programa ejecutable despues de su compilación yligado. Pasos:

    1.- Crear un directorio de trabajo estando en el directorio del compiladorC:\tc>md ejerc-I

    2.- Ejecutar el programa del compiladorC:\tc>tc

    3.- En el ambiente definir como directorio de trabajo el directorio reciencreadoSeleccionar File | Change dir... y escribir en la caja de dialogos c:\tc\ejerc-I y OK

    4.- Crear el proyecto, por defauld se guarda en el directorio de trabajoSeleccionar Project | Open Project… escribir en la caja de dialogos extern.prj yseleccionar el botón OK

    5.- Agregar los archivos fuentes al proyectoEstando en la ventana project oprimir la tecla en la caja de dialogos escribirel nombre del primer archivo fuente: Princip.cpp y seleccionar el boton “Add” seobserva como el nombre del archivo aparece ahora en la ventana projects, escribir elnombre del segundo archivo: Archivo2.cpp y seleccionar “Add”, este proceso puedeseguir para cada archivo fuente que se desee agregar, para el programa anterior conesto basta.

    6.- Escribir el código en cada programa fuentePara abrir un archivo fuente que pertenesca al proyecto basta con posicionarsesobre él en la ventana Project y obrimir se abre la venta de edición donde sepodrá escribir todo el código necesario como muestra la siguiente figura, no olvideguardar los cambios que se realizan

  • 8/18/2019 Programacion de c

    25/129

    Programación C y C++ 25

     

    Figura 1. 2.- Ventana de BorlandC 1.0 para manejo de proyectos

    7.- Ejecutar el programaCon las teclas + se compila, enlaza y ejecuta el programa si noaparecen errores.

    •  static

    Las varibles static son variables permanentes dentro de una función o archivo

    según si se declaran como locales o globales respectivamente.

    Variables static locales 

    Cuando se aplica el modificador static a una variable local, el compilador creaun almacenamiento permanente para ella de forma muy parecida que cuandocrea almacenamiento para una variable global. La diferencia clave entre unavariable local static y una variable global es que la variable local static  esuna variable local que retiene su valor entre llamadas de funciones.Ejemplo:/*Estatic1.cpp */#include #include

    void serie();

    void main(){int x;clrscr();for (x=0;x

  • 8/18/2019 Programacion de c

    26/129

    Programación C y C++26

    void serie(){static int cont=0; //Variable Local staticcont=cont+10;

    cout

  • 8/18/2019 Programacion de c

    27/129

    Programación C y C++ 27

     En el archivo Staticg2.cpp se define la variable cont  como variable global

    static, lo cual impide que se pueda acceder desde otro archivo, este será vista

    y modificada solamente en el propio archivo, por eso se requiere de unafunción adicional para poder inicializarla desde otro archivo. La salida del programa será exactamente igual que el archivo Estatic1.cpp aunque usandouna técnica diferente. 

    •  registerEl especificador de almacenamiento register  originalmente pedía alcompilador que mantuviera el valor de una variable en un registro de la CPUen lugar de en memoria, que es donde se almacena normalmente las variables.Esto significaba que las operaciones debían de realizarse con mayor rapidez.Actualmente el estándar ANSI simplemente establece “que el acceso al objeto

    sea lo más rápido posible”, lo anterior es aplicado a cualquier tipo de dato.El especificador registers solo puede aplicarse a variables locales y a

    los parámetros de una función. Ejemplo:

    void imprime_Caracter(){

    register int x;for (x=0; to N; x++)

    cout

  • 8/18/2019 Programacion de c

    28/129

    Programación C y C++28

    EJERCICIOS RESUELTOS

    1.- Usando la entrada salida estándar escribir un programa que calculé el área

    de un triangulo a partir de su base y altura usando la formula: Area=(Base*Altura)/2. 

    /* Area.cpp */

    #include #include

    void main (){float Altura,Base,Area;clrscr();printf ("CALCULA EL AREA DE UN TRIANGULO.");printf("\n\nTECLEE LA BASE: ");scanf("%f",&Base);printf("\nTECLEE LA ALTURA: ");scanf("%f",&Altura);Area=(Base*Altura)/2;printf("\nEl EL AREA ES: %8.2f", Area);printf("\nPRESIONE PARA TERMINAR");getch();

    2.- Usando la entrada salida estándar escribir un programa que calcule elsueldo de un empleado, solicitando su nombre, Número de horas trabajadas y

    el costo por hora./* Sueldo.cpp 

    # include # include

    void main (){char nombre[40];float chr, hrst, Sueldo;clrscr();printf ("\n CALCULA EL SUELDO DE UN EMPLEADO");printf ("\n\n NOMBRE DEL EMPLEADO: ");gets(nombre);

    printf ("\n HORAS TRABAJADAS: ");scanf ("%f", &hrst);printf ("\n COSTO POR HORA: ");scanf ("%f",&chr);Sueldo=hrst*chr;printf("\n EL SUELDO DE %s es de: $ %8.2f",nombre,Sueldo);getch();

    }

  • 8/18/2019 Programacion de c

    29/129

    Programación C y C++ 29

    3.- Programa que calcula el precio de venta de un artículo . El precio de ventase calcula añadiéndole al costo el 120% como utilidad y el 15% de impuesto.

    /*Preventa.cpp 

    # include # include

    void main (){char descripcion[40];float CosP, Temp, CVenta;clrscr();printf ("\n CALCULA EL PRECIO DE VENTA DE UN ARTICULO.");printf ("\n\n DESCRIPCION DEL ARTICULO: ");gets (descripcion);

    printf ("\n COSTO DE PRODUCCION: ");scanf("%f", &CosP);Temp= (CosP+(CosP*1.2));CVenta=Temp + Temp*.15;printf("\n EL COSTO DE VENTA DE %s ES: $ %8.2f", descripcion,

    CVenta);getch();

    }

    4. – Usando la entrada salida por flujos escribir un programa que lee lalongitud de los lados  A  y  B  de un triangulo y calcule la hipotenusa (C ),aplicando el teorema de Pitágoras, C  2 = A2 + B2. o sea:

    C  2 = a2 + b2.

    /* Hipotenu.cpp */# include # include # include //Por las funciones matemáticas 

    void main (){float A, B, C;clrscr();cout

  • 8/18/2019 Programacion de c

    30/129

  • 8/18/2019 Programacion de c

    31/129

    Programación C y C++ 31

    7.- Utilizando el especificador extern  escriba un programa compuesto por 3archivos que calcule el interés simple y la deuda de un Préstamo a una taza deinterés en N años:

    En el archivo  Banco2.cpp Leerá la Inversión, La taza de interés y elnúmero de años, calculando el Interés simple a partir de estos datos

    En el archivo Banco3.cpp calculará la deuda acumuladaEn el archivo Banco1.cpp mostrará en pantalla tanto el Interés como la

    deuda calculados.

    /*Banco1.cpp proyecto: Banco.prj */

    # include # include

    float Inversion,Interes,Deuda;

    void Calcula();void Calcula2();

    void main(){clrscr();cout

  • 8/18/2019 Programacion de c

    32/129

    Programación C y C++32

    EJERCICIOS PROPUESTOS.

    1.  Elaborar un programa que calcule e imprima el costo de un terrenocuadrado o rectangular, teniendo como datos la anchura, la longitud enmetros, y el costo del metro cuadrado.

    2.  Una temperatura en grados centígrados (C ) se puede convertir a suequivalente Fahrenheit (F ) con la fórmula:F  = 9/5 C  + 32 .Elaborar un programa que lea una temperatura en grados centígradosy obtenga e imprima la temperatura Fahrenheit equivalente.

    3.  Elabore un programa que lea un número de pies y calcule e imprima su

    equivalente en yardas, pulgadas, centímetros y metros, de acuerdo conlas siguientes equivalencias:1 pie = 12 pulgadas, 1 yarda = 3 pies, 1 pulgada =2.54 cms. , 1 metro =100 cm.

    4.  Elaborar un programa que lea el artículo y su costo; la utilidad es el200% y el impuesto es el 15%; calcular e imprimir el artículo, utilidad,impuesto y precio de venta.

    5.  Elaborar un programa que lea dos números enteros y positivos eimprima la media aritmética, es decir, el punto medio entre los dosnúmeros.

    6.  Elaborar un programa que lea el radio (r) de una esfera, calcule eimprima el volumen y el área.Volumen = 4/3 Π r 3 Area= 4 Π r 2

    7. Elaborar un programa que lea una cantidad de horas e imprima suequivalente en minutos, segundos y días.

    8.- Elaborar un programa que lea el valor de w e imprima el valor de z.

    Z= 1 / 2Π  e  –w2/2 

    9.- Elaborar un programa que lea la cantidad de dólares a comprar y el tipo decambio en pesos (costo de un dólar en pesos); calcular e imprimir la cantidad a pagar en pesos por la cantidad de dólares indicada.

    10.- Utilizando el especificador extern, escriba un programa compuesto por 2archivos que calcule la distancia que recorre la luz en un tiempo dado.

    En el archivo Luz2.cpp deberá leer el tiempo en segundos y calcularála distancia recorrida (Distancia = Velocidad* Tiempo)

    En el archivo Luz.cpp deberá imprimir el resultado.

  • 8/18/2019 Programacion de c

    33/129

    Programación C y C++ 33

     

    Capitulo 2

    Sentencias de control de programa 

    •  Sentencias de Selección•  Sentencias de Iteración•  Sentencias de Salto•  Ejercicios

    En este capitulo se discute el conjunto de sentencias de control de programaque el lenguaje C soporta .

  • 8/18/2019 Programacion de c

    34/129

    Programación C y C++34

    SENTENCIAS DE SELECCIÓNA las sentencia de selección tambien se les conoce como sentenciacondicional, entre las que se incluyen if   y switch 

    Muchas sentencias de C se basan en una prueba condicional quedetermina la acción que se ha de llaver acabo. Una expresión condicionaltiene como resultado un valor cierto o falso. En C cualquier valor distinto decero es cierto, incluyendo los números negativos. El 0 es el único valor falso.

    •  if, if-else

    La sintaxis de esta sentencia es:if (expresion es verdadera){

    sentencia_1;sentencias_2;}

    Si al evaluar la expresión, ésta es verdadera se ejecutan las sentenciasdel bloque (un bloque comienza con { y termina en }), en caso contrario seejecutan las sentencias a continuación del bloque. La cláusula else  se puedeañadir a la sentencia if   cuando la expresión es falsa y se desean ejecutarsentencias distintas.if (expresion es verdadera){

    sentencia_1;sentencias_2;

    }else {

    sentencia_11;sentencias_22;

    }

    Ejemplo:/*IF.cpp Determina si una persona es mayor o menor de edadusando la Instrucción if*/

    #include #include

    void main(){int Edad;clrscr();coutEdad;

    if (Edad

  • 8/18/2019 Programacion de c

    35/129

    Programación C y C++ 35

    Si el usuario escribe un número menor que 18 entonces se muestra elmensaje “Aun es menor de edad” y si escribe un número igual o mayor que 18entonces el mensaje será “Es mayor de edad”. 

    Se pueden anidar if  evaluándose de arriba hacia abajo tan pronto comose encuentre una condición cierta, se ejecuta la sentencia asociada con ella yse pasa por alto el resto de la escala.Ejemplo:

    /*IF2.cp Encuentra el mayor de 3 números*/

    #include #include

    void main(){clrscr();int A=3,B=10,C=15; //Probar con otros valoresint Mayor;

    if ((A>B) &&(A>C))Mayor=A;

    elseif ((B>A) && (B>C))Mayor=B;

    elseMayor=C;

    cout

  • 8/18/2019 Programacion de c

    36/129

    Programación C y C++36

    La siguientes reglas se aplican en el uso de la sentencia switch 

    •  Expresión entera, puede ser una constante, una variable, una llamada afunción o una expresión. La sentencia switch no funciona con datos detipo coma flotante

    •  El valor después de cada etiqueta case debe ser una constante entera ocarácter, como 3 o ‘b’, o bien una expresión que se evalúe a unaconstante como ‘a’ +’32’.

    •   Necesita utilizar una sentencia break  después de cada conjunto desentencias ejecutables. La sentencia break  hace que la ejecución del programa se reanude después del final de la sentencia switch actual. Sino se utiliza la sentencia break, la ejecución del programa se reanudaráen las siguientes etiquetas case.

    •  El conjunto de sentencias case no necesita ser encerradas entre llaves.•  Si ninguno de la valores de constante_1, constante_2, etc. Coincide con

    el valor de expresión_entera, se ejecutarán las sentencias que vienen acontinuación de la sentencia opcional default. 

    Ejemplo:/*Switch.cpp Calcula el área de figuras Geométricasusando la Instrucción switch*/

    #include #include

    void main(){char op;int L,B,H,R;float Area;

    clrscr();cout

  • 8/18/2019 Programacion de c

    37/129

    Programación C y C++ 37

      case '3': coutR;Area=2*3.1416*R*R;

    break;default:cout

  • 8/18/2019 Programacion de c

    38/129

    Programación C y C++38

    instrucción;

    Cuando se encuentra la instrucción for  se ejecuta primero la expresión de

    inicialización, no volviendo a ejecutarse más. Generalmente esta instrucciónrealiza la inicialización de la variable de control de ciclo. Tras esto se pruebala condición. Siempre que condición se evalúa como verdadero, la instruccióno instrucciones dentro del ciclo son ejecutados. Después de entrar en el cicloy ejecutar todas las instrucciones dentro de éste se ejecutaexpresión_incremento. Sin embargo si condición toma el valor   Falso, lasinstrucciones dentro del ciclo son ignoradas y la ejecución continúa con lainstrucción al final del ciclo.

    Cuando se necesitan ejecutar varias instrucciones dentro del ciclo sehacen necesarias definir el bloque con las llaves {}Ejemplo:/*for.cpp Efectúa ciclos según Ini, Fin, Inc */

    #include #include

    void main(){clrscr();

    int x, Ini=0, Inc=5, Fin=20; //Probar con otros valoresfor (x=Ini;x

  • 8/18/2019 Programacion de c

    39/129

  • 8/18/2019 Programacion de c

    40/129

  • 8/18/2019 Programacion de c

    41/129

    Programación C y C++ 41

    Ejemplo:/*Do-While.cpp Menu de Opciones */

    #include #include

    void main(){clrscr();char op;do{ cout

  • 8/18/2019 Programacion de c

    42/129

    Programación C y C++42

     Return (expresión) 

    Donde: el valor de expresión se devuelve como valor a la función.

    Se puede usar tantas sentencias return como se quiera en una función.Sin embargo, la función termina tan pronto como encuentra el primer return.Una función declarada como void no debe contener una sentencia return. Lafunción exit() definido en el archivo de cabecera stdio.h es parecida a return aunque este en lugar de afectar a una función afecta a todo el programa, másadelante en el tema de funciones se podrán apreciar ejemplos.

    •  goto La sentencia goto  se puede usar para realizar ciclos usando una etiqueta, o para saltar a otra parte de un programa, actualmente no es recomendable suuso por que hace ilegible el código.

    Etiqueta:Setencia_1;Sentencia_2;...goto Etiqueta;

    Donde: Etiqueta es cualquier etiqueta valida anterior o posterior al goto.Ejemplo:/*goto.cp */

    #include #include

    void main(){clrscr();int x=0;Inicio:

    x++;cout

  • 8/18/2019 Programacion de c

    43/129

  • 8/18/2019 Programacion de c

    44/129

    Programación C y C++44

    EJERCICIOS RESUELTOS

    1.- Programa para calcula la calificación final de un alumno, teniendo como

    datos N  calificaciones parciales (3). Imprime el nombre, la calificación final yun comentario de “Aprobado” si obtiene 70 o más y “Reprobado” en casocontrario.

    /* Alumno.cpp */

    #include #include #include #define N 3

    void main()

    { clrscr();float Prom,SumCal=0,Cal;int x;char Nom[40];cout

  • 8/18/2019 Programacion de c

    45/129

    Programación C y C++ 45

    2.- En un hotel se hace un descuento del 10% si el cliente se hospeda más de5 días, el 15% si se hospeda más de 10 días y del 20% si se hospeda más de 15días. Programa que lee el número de días y el precio diario de la habitación e

    imprima el subtotal a pagar, el descuento y el total a pagar.

    /*Hotel.cpp */

    #include #include

    void main(){ clrscr();float CosHabi,Dias,Desc,SubTotal,Total;cout

  • 8/18/2019 Programacion de c

    46/129

    Programación C y C++46

    3.- Programa que calcula el salario de un empleado, Según el número de horastrabajadas por semana y el salario por hora. Si el número de horas trabajadases menor o igual a 40 se paga la cuota normal por hora. Si el número de horas

    rebasa las 40 horas reglamentarias, el excedente se paga como tiempo extra:1 a 10 hrs. Extras se paga al doble de la cuota por hora11 a 20 hrs. Extras se paga al triple de la cuota por hora21 ó más hrs. Extras se paga al cuádruple de la cuota por hora

    En ningún caso el número de horas trabajadas por semana podrá ser superior a80./*Salario.cpp */#include #include #include

    void main()

    { clrscr();float SalSem, SalHra, SalTE=0,SalBase;int Hrs;char Nom[40];cout

  • 8/18/2019 Programacion de c

    47/129

    Programación C y C++ 47

    4.- Escribir un programa para dibujar un rectángulo en modo texto en la pantalla, solicitar las coordenadas x1, y1, x2 y y2, según la siguiente figura:

    /*Rectang.cpp */

    #include #include

    void main(){ clrscr();int x,y,x1,y1,x2,y2;

    coutx2>>y2;

    for (x=x1;x

  • 8/18/2019 Programacion de c

    48/129

    Programación C y C++48

    EJERCICIOS PROPUESTOS.

    1.- Elabore un programa para calcular e imprimir el precio de un terreno delcual se tienen los siguientes datos: largo, ancho y precio por metro cuadrado.Si el terreno tienen más de 400 metros cuadrados se hace un descuento de10%, si el terreno tiene más de 500 metros cuadrados el descuento es de 17%y si tiene más de 1000 el descuento es de 25%.

    2.- Una librería vende libros con las condiciones siguientes: Si el cliente estipo 1 se le descuenta el 30%, si el cliente es tipo 2 se le descuenta el 20%, siel cliente es tipo 3 se le descuenta 10%. Cuando el cliente realiza una comprase generan los datos siguientes: Nombre del cliente, Tipo de cliente (1,2,3),cantidad de libros, costo por libro. Elabore un programa que lea estos datos e

    imprima: Nombre del cliente, Total a pagar, Descuento y el Neto a pagar.

    3.- Igual que el ejercicio anterior, pero además:Si la cantidad de libros solicitada es mayor que 50, se hace un descuentoadicional de 5%; en caso de ser mayor que 100 el descuento adicional es de10%.

    4.- Elaborar un programa que lea los datos de un estudiante: nombre y trescalificaciones parciales e imprimir el nombre y la calificación final deacuerdo a lo siguiente: Para aprobar el curso, debe tener 70 o más en cadauna de las tres calificaciones, la calificación final será el promedio. En caso

    de haber reprobado uno o más exámenes ordinarios, la calificación final será NA (NO ACREDITADO).

    5.- En un almacén de ventas de trajes si se compra uno se hace el 50% dedescuento, si compra 2 el 55%, si compra 3 el 60% y si compra más de 3 el65%. Elaborar un programa que lea la cantidad de trajes y el precio unitario(todos tienen el mismo precio) e imprima el subtotal a pagar, el descuento yel total a pagar.

    6.- Reescriba el programa del ejercicio resulto 1 pero sin usar ciclos

    7.- Programa que dibuje una secuencia de N  rectangulos (5) a partir de unrectangulo cuyas coordenadas sean proporcionados por el usuario, losrectangulos siguientes se irán haciendo más pequeños en forma proporcionalcada vez.

  • 8/18/2019 Programacion de c

    49/129

    Programación C y C++ 49

     

    Capitulo 3

    Arreglos y Apuntadores

    •  Que son los arreglos•  Arreglos unidimensionales•  Cadenas

    •  Arreglos bidimensionales•  Apuntadores•  Punteros y arreglos•  Inicialización de apuntadores•  Funciones de asignación dinámica•  Ejercicios

    Los arreglos, punteros y cadenas de caracteres son conceptos relacionados enel lenguaje C, por esta razón se integran en este capitulo.

  • 8/18/2019 Programacion de c

    50/129

    Programación C y C++50

    QUE SON LOS ARREGLOS

    Un arreglo es una colección de variables del mismo tipo que se referencia por

    un nombre común. A un elemento específico de un arreglo se accedemediante un índice. En C todos los arreglos constan de posiciones dememoria contiguas. La dirección más baja corresponde al primer elemento yla dirección más alta al último elemento. Los arreglos pueden tener una o másdimensiones.

    ARREGLOS UNIDIMENSIONALES

    A los arreglos unidimensionales también se les conoce como listas.

    Tipo nombre[Tamaño];

    Tipo nombre[]; Donde: tipo  Indica el tipo de datos de los elementos del arreglo.

    nombre  Es el identificador del arreglotamaño  Especifica el número de elementos del arreglo. El tamaño

     puede omitirse cuando se inicializa el arreglo, cuando se declara como un parámetro en una función o cuando se hace referencia a un arreglo declaradoen otra parte del programa, es recomendable que el tamaño sea definido comouna constante para garantizar no rebasar el límite del arreglo.Ejemplo:

    #define N 30int Calif[N];

    La declaración de la variable anterior hace que el compilador reserveespacio de memoria para almacenar 30 datos de tipo entero. En C todos losarreglos tienen el 0  como índice de su primer elemento, por tanto el primerelemento de la variable anterior sería Calif[0] y el último elemento Calif[29].

    El lenguaje C no checa los límites de un arreglo. Es responsabilidaddel programador realizar este tipo de operaciones para no escribir o modificar porciones de memoria que no le pertenecen al arreglo.

    La cantidad de memoria requerida para guardar un arreglo estadirectamente relacionada con su tipo y su tamaño. Para un arreglounidimensional, el tamaño total en bytes se calcula:

    Tatal en bytes =sizeof(tipo)*tamaño = sizeof(nombre_ arreglo). 

    Ejemplo:float Salario[10];int Tam;Tam=sizeof (Salario); //Tam=40

    •  Inicialización de un arreglo 

    Cuando se crea un arreglo sólo se puede utilizar constantes para inicializarloe aquí algunos ejemplos:int Calif[4]={80,90,75,100}; float real[5]={23.45,90.34,70.1,75,10};

  • 8/18/2019 Programacion de c

    51/129

    Programación C y C++ 51

    char Caracter[]={‘a’,’b’,’c’,’d’,’e’,’f’};char Cadena[11]=”HOLA AMIGOS”;char Cadena2[]=”PROGRAMACIÓN EN LENGUAJE C”;

    Para comprender mejor el manejo de los arreglos se presentan a continuaciónalgunos ejemplos:

    /* Arreglo2.cpp.cppVisualiza el contenido de un arreglo */

    #include #include #define N 4

    void main()

    { clrscr();int Cal[N],x;Cal[0]=90; Cal[1]=80;Cal[2]=100; Cal[3]=70;for (x=0;x

  • 8/18/2019 Programacion de c

    52/129

    Programación C y C++52

    En cada ejecución del programa la secuencia de números aleatorios cambia, por loconsiguiente también la salida, aquí se presenta una de ellas:79 24 59 18 41 37 64 3 23 29

    El mayor es: 79

    /* Arreglo4.cppOrdena un arreglo unidimensional en forma ascendenteaplicando el método de selección */

    #include #include #define N 10void main(){ clrscr();

    int A[N]={79,24,59,18,41,37,64,3,23,29}; //Arr. inicializadoint menor,temp,ind,x,y;for (x=0;x

  • 8/18/2019 Programacion de c

    53/129

    Programación C y C++ 53

    CADENAS C no tiene un tipo de dato para cadenas de caracteres. Una cadena decaracteres es un arreglo unidimensional, en el cual todos sus elementos son de

    tipo char, al final del arreglo contiene el carácter nulo ‘/0’. C soporta una granvariedad de funciones para el manejo de cadenas definidos en el archivo decabecera string.h e aquí algunos:

    Nombre Funciónstrcpy(c1,c2) Copia c2 en c1 strcat(c1,2) Concatena c2 al final de c1 strlen(c1,c2) Devuelve la longitud de la cadenastrcmp(c1,c2) Devuelve 0 si c1 y c2 son iguales; menor que 0 si c1c2 strchr(c1,car) Devuelve un puntero a la primera ocurrencia de car  en c1 strstr(c1,c2) Devuelve un puntero a la primera ocurrencia de c2 en c1 

    Tabla 3. 1.- Funciones para el manejo de cadenaEjemplos:

    /*Cadena.cpp */

    #include #include #include

    void main(){ clrscr();

    int L,x;char Cad[]="HOLA AMIGO"; //Esta es la cadenaL=strlen(Cad); //Longitud de la cadenafor (x=L-1;x>=0;x--)

    cout

  • 8/18/2019 Programacion de c

    54/129

    Programación C y C++54

    /*Cadena2.cpp Operaciones con cadena */

    #include #include #include #include #define N 40

    void main(){ clrscr();int L,x;char C1[]="INSTITUTO ";char C2[]="TECNOLOGICO DEL ISTMO";char C[N];char Est[N];

    strcpy(C,C1); //Copia C1 en Cstrcat(C,C2); //Concatena C2 en Ccout

  • 8/18/2019 Programacion de c

    55/129

    Programación C y C++ 55

     0 1 2 3

    0 0 5 10 15

    1 20 25 30 352 40 45 50 553 60 65 70 754 80 85 90 95

    Un programa que asigne valores a los elementos del arreglo bidimensionalcomo en la tabla anterior sería:

    /* A_Bidim.cpp Asigna valores múltiplos de 5 a un arreglo bidimensional */

    #define N 5#define K 4

    void main(){ int Tabla[N][K];int x,y,cont=0;for (x=0;x

  • 8/18/2019 Programacion de c

    56/129

    Programación C y C++56

    { clrscr();int Calif[N][K];float Prom[N], Aprov;

    int x,y, Suma1,Suma2=0;cout

  • 8/18/2019 Programacion de c

    57/129

    Programación C y C++ 57

    modificar el valor de N , en lugar de 5 alumnos puede modificarse a 10, en el programa se incluye la instrucción gotoxy() hallado en el archivo de cabeceraconio.h para el control del cursor en la pantalla.

    Un programa bien escrito debe reunir la característica anterior para adaptarse ante uncambio sin ninguna o casi ninguna modificación en el código.

    El lenguaje C permite arreglos de más de dos dimensiones . El límite, si lo haydepende del compilador. La forma general de declaración de un arreglomultidimensional es:

    Tipo nombre[T1][T2][T3]...[Tn] 

    Es raro que en algún programa se utilicen los arreglos de tres o más

    dimensiones por la cantidad de memoria que se requiere para almacenarlos.Ejemplo:

     Int Tri[20][10][5];Requeriría de 2*20*10*5 = 2,000 bytes de memoria para almacenarla.

    APUNTADORES

    Un puntero es una variable que contiene una dirección de memoria. Normalmente, esa dirección es la posición de otra variable de memoria. Si unavariable contiene la dirección de otra variable, entonces se dice que la primeravariable apunta a la segunda.

    Dirección dememoria

    Variable enmemoria

    *P 2C00 2C032C012C02

    Car 2C03 ‘A’

    Figura 3. 1.- Una variable apuntando a otra

    P es una variable de tipo puntero, que apunta a la dirección de memoria2C03H, es decir apunta a la variable Car , este último es una variable estáticaque contiene el carácter ‘A’.

    •  Declaración de un Apuntador

    Una declaración de un puntero consiste en un tipo base, un * y el nombre de lavariable. La forma general para declarar una variable puntero es:

    Tipo * nombre; Ejemplo:

    int *P; 

  • 8/18/2019 Programacion de c

    58/129

    Programación C y C++58

    Existen dos operadores especiales de punteros: & y *. El &  es un operadormonario (sólo necesita un operando) que devuelve la dirección de memoria desu operando; El *, es el complemento de &, devuelve el valor de la variable

    localizada en la dirección que sigue.

    Ejemplo:int x=10,y;int *P;P=&x; //Asigna la dirección de x  a Py=*P; //Asigna el cont. de lo apuntado por P a y, o sea 10

    Las variables puntero deben apuntar siempre a otra variable de sumismo tipo, aunque C permite apuntar a una variable de un tipo distinto sinmensajes de error durante la compilación en algunos casos, hacerlo seríaincongruente. Ejemplo:

    float x=10;int *P;P=&x; //Las variables no son del mismo tipo

    •  Aritmética de punteros

    Existen sólo dos operaciones aritméticas que se pueden realizar con los punteros: la suma(++) y la resta(--). Cada vez que se incrementa un puntero,apunta a la posición de memoria del siguiente elemento de su tipo base. Cadavez que se decrementa, apunta a la posición del elemento anterior. Con

     punteros a caracteres , parece una aritmética normal. Sin embargo, el resto delos punteros aumentan o decrementan en la longitud del tipo de datos a los queapuntan. Suponiendo los enteros de 2 bytes de longitud, cuando se incrementaun puntero a entero, su valor aumenta en 2. El siguiente programa ilustra esteejemplo:

    /* Apunta2.cpp Aritmética de punteros/

    #include #include

    void main(){ clrscr();int x;int *P;for (x=0;x

  • 8/18/2019 Programacion de c

    59/129

    Programación C y C++ 59

      Al principio el apuntador P  apunta a la dirección 0x3dc10000,  en el primer ciclo se incrementa un elemento de tipo entero es decir un incrementode 2 por lo que ahora apunta a la dirección 0x3dc10002, y así sucesivamente

     por cada ciclo.La dirección inicial de una apuntador no siempre va a ser el mismo en

    cada ejecución del programa, la dirección inicial dependerá del estado de lamemoria en el momento de la ejecución, es decir dependerá del sistemaoperativo y los programas de aplicación cargados. Si al probar el programaanterior las direcciones no coinciden con los aquí mostrados se debe precisamente a esta situación.

    El siguiente ejemplo muestra un sencillo programa para manejar una pila de enteros.

    /* Apunta3.cpp

    Pila de Enteros */

    #include #include #define N 5

    void main(){ clrscr();int Pila[N],Val;int *P,*Tope;P=Pila; //Apunta al inicio de la pilaTope=Pila+N; //Apunta al final de la pilacoutVal;if (Val!=0) //Agrega elementos a la pilaif(P

  • 8/18/2019 Programacion de c

    60/129

    Programación C y C++60

    309550

    1040Pila Llena0Contenido de la pila10 50 95 30 80

    PUNTEROS Y ARREGLOSExiste una estrecha relación entre los punteros y los arreglos, considérese elsiguiente fragmento:int Arr[10], *Ap;

     Ap=Arr;Aquí Ap ha sido asignado a la dirección del primer elemento del arreglo  Arr , por que el nombre de un arreglo sin índice devuelve la dirección de inicio delarreglo. Para acceder al tercer elemento del arreglo Arr , se escribe: Arr[2] ó *(Ap+2);Ambas sentencias devuelven el tercer valor. Para acceder a los elementos deun arreglo se puede efectuar por cualquiera de los dos métodos: La indexacióndel arreglo ó la aritmética de punteros, la ventaja del segundo método es quemejora la velocidad. Ejemplo:

    /* Apunta4.cpp */#include

    #include

    void main(){ clrscr();int Arr[10]={10,20,30,40,50,60,70,80,90,100};int *Ap,x;Ap=Arr; //Apunta al inicio del arreglo*(Arr+2)=999; //Cambia el valor del tercer elementofor (x=0;x

  • 8/18/2019 Programacion de c

    61/129

    Programación C y C++ 61

    El primer método consiste en asignarle la dirección de otra variable previamente definida, ya sea una variable local o global, simple ó a un arreglocomo en el programa anterior. El segundo método es el que se aborda a

    continuación.

    FUNCIONES DE ASIGNACIÓN DINÁMICALa asignación dinámica es la forma en que un programa puede obtenermemoria mientras se esta ejecutando. A las variables globales se le asignamemoria en tiempo de compilación. Las variables locales usan la pila. Sinembargo, durante la ejecución de un programa no se pueden añadir variablesglobales o locales. Pero hay ocasiones en que un programa necesita usarcantidades de memorias variables. Por ejemplo: un procesador de textos, unahoja de cálculos, etc.

    La memoria dispuesta mediante las funciones de asignación dinámica

    de C se obtienen del montón (La región de memoria libre que queda entre el programa y la pila), generalmente contiene una gran cantidad de memorialibre.

    En los programas tradicionales de C, toda asignación dinámica dememoria se manipula mediante funciones tales como malloc()  y free() hallados en el archivo de cabecera stdlib.h. La función malloc()  estable bloques de memoria, mientras que free() se utiliza para liberar estos bloquesasignados. En C++ se define un método para signar memoria dinámicautilizando los operadores new y delete.

    En el siguiente ejemplo se ilustra un programa para la asignación dinámica de

    memoria en C./* As_Dinam.cpp*/

    #include #include #include //Por las funciones de asignación dinámica

    void main(){ clrscr();int *P;P=(int *) malloc(2*sizeof(int)); //Asigna espacio para 2 Ent.

      *P=1;P++;

    *P=2;cout

  • 8/18/2019 Programacion de c

    62/129

    Programación C y C++62

    { int *P;P=new int[2]; //Asigna espacio para 2 Enteros (4 bytes)*P=1;

    P++;*P=2;cout

  • 8/18/2019 Programacion de c

    63/129

    Programación C y C++ 63

    •  delete

    El operador delete  libera la memoria asignada con new.delete dirección

    El operador delete toma como argumento un puntero. El bloque de memoriaapartado por este puntero se libera, es decir, se devuelve al sistema operativo para que pueda ser reutilizada.

    EJERCICIOS RESUELTOS 

    1.- Un vendedor de equipo de computo desea saber la ganancia total por la

    venta de N partes de computadoras. Escribir un programa que lea el costo decompra de cada uno de los N artículos, calcule el costo de venta agregándoleel 35% de ganancia más el 15% de IVA sobre el precio de compra y visualicelos resultados en forma de tabla.

    /*Ganacia.cpp */

    #include #include #define N 5

    void main(){ clrscr();int x,GanTotal=0;float CosArt[N], Gan[N],Iva[N], Venta[N];cout

  • 8/18/2019 Programacion de c

    64/129

    Programación C y C++64

    2.- Programa que lea los nombres de N alumnos y los ordene en formaascendente aplicando el método de burbuja.

    /*Burbuja.cpp */

    #include #include #include #include #define N 5

    void main(){ clrscr();char Nom[N][40],Temp[40];int x,y;cout

  • 8/18/2019 Programacion de c

    65/129

    Programación C y C++ 65

     /*OpcionVI.cpp */

    #include #include #define N 2 //No. de Alumnos#define M 5 //No. de Materias#define S 3 //No. de Sinodales

    void main(){ clrscr();int CalEs[N][M];int CalOr[N][S];float PrEs[N], PrOr[N],PrGrl[N];int x,y, Sum;cout

  • 8/18/2019 Programacion de c

    66/129

    Programación C y C++66

    4.- Utilizando apuntadores y asignación dinámica de memoria construya un programa para dar de alta una serie de N números, comprobar la existencia dememoria al hacer la asignación dinámica, al finalizar el programa mostrar los

    números ordenados en forma ascendente utilizando el método de burbuja.

    /*Ordenar.cpp */

    #include #include #include #define N 5 //Numero de elementos

    void main(){ clrscr();int *Num,x,y,Temp;Num=new int [N];

    if (Num==0) //Verifica si no hay memoria dinámica{

    cout

  • 8/18/2019 Programacion de c

    67/129

    Programación C y C++ 67

    5.- El Maestro de la materia de Programación III desea conocer el Índice deAprobación y Reprobación de su grupo de N alumnos, la calificación mínimaque se considera como aprobatoria es de 70%. Escribir un programa que lea

    las calificaciones del grupo de alumnos visualice el Número de alumnosaprobados, el índice de aprobación, el número de alumnos reprobados y elíndice de reprobación.

    /*Indice.cpp */

    #include #include #define N 5 //Número de alumnos

    void main(){ clrscr();

    int x, Cal[N];float NApr=0,NRep=0,IApr,IRep;cout

  • 8/18/2019 Programacion de c

    68/129

    Programación C y C++68

    EJERCICIOS PROPUESTOS

    1.- Tomando como base el programa del ejercicio resuelto 1, calcular ademásel Costo total , El IVA total y el Precio de Venta Total de los N artículos.2.- Ordenar en forma descendente una lista de N Nombres aplicando elmétodo de Inserción3.- Igual que el ejercicio 2 pero aplicando el método Shell4.- Considérese la siguiente secuencia de nombres proporcionados al programa del ejercicio resuelto 2: Ana, Carlos, Zenaido, Raúl, Víctor.Explique el proceso de ordenamiento.5.- AGREGAR MAS EJERCICIOS

  • 8/18/2019 Programacion de c

    69/129

    Programación C y C++ 69

     

    Capitulo 4

    Funciones y Estructuras

    •  Funciones•  Pase de parámetros•  Estructuras•  Arreglos de Estructuras•  Ejercicios

  • 8/18/2019 Programacion de c

    70/129

    Programación C y C++70

    FUNCIONESLas funciones son la piedra angular en C y C++. Todo lo que se programa enC y C++ esta dentro de una función. Esto se debe a que todos los programas

    deben incluir la función main(), que es en si misma una función. Aunque C++esta orientada a objetos, las funciones siguen siendo parte de este estilo de programación ya que dentro de las clases se hayan un conjunto de funciones,este tema se tratará más adelante, en este capitulo se va ha destacar laimportancia de la programación modular.

    La ejecución de un programa comienza por la función main(), cuandose llama a una función, el control se pasa a la misma para su ejecución; ycuando finaliza, el control es devuelto de nuevo al módulo que llamo, paracontinuar con la ejecución del mismo a partir de la sentencia que efectuó lallamada.

    Sintaxis:Tipo_de_retorno  Nombre_funcion (Lista de parámetros){

    cuerpo de la función }

    Donde:Tipo_de_retorno especifica el tipo de valor que devuelve la sentencia

    return  de la función. El valor puede ser cualquier tipo válido. Si no seespecifica ningún tipo, el compilador asume que la función devuelve comoresultado un entero, las funciones que no devuelven ningún valor deben tener

    el tipo void. La  Lista de parámetros  es la lista de nombres de variablesseparados por comas con sus tipos asociados que reciben los valores de losargumentos cuando se llama a la función. Una función puede no tener parámetros en cuyo caso la lista de parámetros esta vacía. Sin embargo,incluso cuando no hay parámetros se requieren los paréntesis y la lista de parámetros puede estar sustituida por void.

    Ejemplo:float Area_Triang(int Base, int Altura){float Area;

     Area=(Base*Altura)/2;return(Area);}

    La función  Area_Tring  retorna un valor real (observe la sentenciareturn), y recibe como parámetro dos enteros. Las variables que se definan enel interior de la función son considerados como variables locales, estosincluyen a los parámetros, por lo que se crean cuando se llama a la función y perduran solamente durante la ejecución de la misma, destruyéndose en elmomento de finalizar, excepto si tienen el especificador static.

  • 8/18/2019 Programacion de c

    71/129

    Programación C y C++ 71

    •  Llamada a una funciónLa llamada a una función tiene la forma:

    [Variable=]Nombre_Funcion([Lista de argumentos])

    Donde:Variable.- Especifica la variable donde va a ser almacenado el valor devuelto por la función. La llamada puede prescindir del valor devuelto por la función. Lista de argumentos.- Es la lista de expresiones separados por comas, Losvalores resultantes son pasados a la función y asignados a suscorrespondientes parámetros, el número de argumentos debe ser igual alnúmero de parámetros definidos en la función.Ejemplo: A=Area_Triang(10,15);

    La llamada a la función  Area_Triang  envía como argumentos losvalores 10 y 15, y se almacenan en las variables  Base  y  Altura respectivamente que están definidos como  parámetros en la implementaciónde la función, dentro de la función se realiza el calculo y el resultado seretorna, asignándosele a la variable A.

    PASE DE PARÁMETROS

    Se pueden pasar argumentos a las funciones de dos formas:•  Llamada por valor

    •  Llamada por referencia

    El primer método copia el valor de un argumento en el parámetro de la función. De esta

    forma , los cambios en los parámetros en la función no afectan a las variables que se usan

    en la llamada.

    La llamada por referencia  copia la dirección  del argumento en el parámetro. Dentro de la función se usa la dirección para acceder al argumentousado en la llamada. Esto significa que los cambios hechos a los parámetrosafectan a la variable usada en la llamada a la función.

    Ejemplo:/*Referen.cpp */

    #include #include void Intercambio(int *A, int *B);

    void main(){ int x=10,y=50;Intercambio(&x, &y);  //Llamada por referenciacout

  • 8/18/2019 Programacion de c

    72/129

    Programación C y C++72

    }

    void Intercambio(int *A, int *B)

    {int temp;temp=*A;*A=*B;*B=temp;} 

    La función Intercambio() recibe como parámetros dos punteros A  y  B e intercambia sus contenidos. Desde la función main()  se encuentrandefinidos las variables x, y con los valores 10 y 50 respectivamente, al llamar ala función intercambio  se pasan como argumentos sus direcciones,anteponiendo a cada variable el operador &, al retorno de la función los

    valores de x, y se encuentran intercambiados.Cuando se desee modificar el argumento se recomienda efectuar

    una llamada por referencia y si no se desea modificar el argumentoentonces se hará una llamada por valor.

    •  Pase de arreglos como parámetros

    Cuando se usa un arreglo como argumento de una función, sólo se pasa ladirección del arreglo, no una copia del arreglo entero. Cuando se llama a unafunción con un nombre de un arreglo, se pasa a la función un puntero al

     primer elemento del arreglo, esto significa que la declaración del parámetrodebe ser un tipo puntero compatible. Existen tres formas de declarar un parámetro que va a recibir un puntero a un arreglo:

    •  Como un arreglo determinado•  Como un arreglo indeterminado (sin tamaño)•  Como un puntero

    Ejemplo:/* Ar_para.cpp Lee el salario por día de N trabajadores, calcula el total apagar por semana a cada trabajador y el monto total.*/

    #include #include #define N 5

    //Definición de funcionesvoid Leer(float SD[N]);void Calcular(float SD[], float SS[]);void Visualizar(float *SD, float *SS);

    float Monto=0; //Variable global

    void main(){float SalDia[N], SalSem[N];

  • 8/18/2019 Programacion de c

    73/129

    Programación C y C++ 73

     Leer(SalDia);Calcular(SalDia,SalSem);

    Visualizar(SalDia,SalSem);getch();}

    void Leer(float SD[N]) //Arreglo como parámetro determinado{ clrscr();int x;cout

  • 8/18/2019 Programacion de c

    74/129

    Programación C y C++74

    En la función principal se definen los arreglos SalDia y SalSem de tipoentero y tamaño N (5), estas variables son locales a la función principal por loque no pueden ser vistas desde otra función, cuando se crean los arreglos por

    defauld se inicializan con el valor de 0 para cada uno de sus elementos, La primera función que se llama es la función Leer(), enviando como argumentoel arreglo SalDia (la dirección de su primer elemento), dentro de la función sele asigna por el usuario desde teclado valores a cada uno de sus elementos, alretornar de la función el arreglo SalDia, ahora ya tiene asignado valores,mientras que el arreglo SalSem  aun no, ambos arreglos son enviados comoargumento a la función Calcular(), que utiliza los valores del arreglo SalDia  para calcular el salario semanal y almacenarlos en el arreglo SalSem que mástarde serán usados para su visualización en pantalla.

    Se puede observar en cada implementación de las funciones que el

    nombre de los identificadores de los arreglos difieren del nombre que tienendesde donde se hacen las llamadas, sin embargo por el hecho de que lasllamadas se hacen por referencia (Una dirección) es posible modificar elcontenido de los argumentos dentro de la función.

    De las tres formas que se puede declarar un parámetro que va a recibirun puntero a un arreglo, la más común es como un puntero, esto se permite porque cualquier puntero se puede indexar usando []  como si fuese unarreglo.

    ESTRUCTURAS

    Una estructura  es un conjunto de datos relacionados entre sí y referenciado bajo un único nombre. Cada elemento de una estructura recibe el nombre deDato miembro.Sintaxis para la definición de una estructura:struct etiqueta{

    Tipo varible1;Tipo variable2;Tipo variable3;..

    . };

    Etiqueta.- Es un identificador de la estructura que va a representar unnuevo tipo de datos definido por el programador, en el interior se definen cadauno de los datos miembros (variables), al finalizar la estructura lleva ;  queíndica que es el final de la sentencia.

    Ejemplo:Supóngase que se desea contar con información de los alumnos de unaInstitución:

  • 8/18/2019 Programacion de c

    75/129

    Programación C y C++ 75

     struct Alumnos{char N_Ctrl[9];

    char Nom[40];char Dir[40];char Ciudad[40];char Tel[15];int Edad;

     };

    Hasta el momento solo se ha definido la estructura más no se hadeclarado una variable de tipo estructura, para hacerlo sería:

     Alumnos A;

    Cuando se declara una variable de tipo estructura es cuando elcompilador reserva espacio en memoria para almacenar la estructura, lacantidad de memoria requerida será igual a la suma de la memoria requerida por cada uno de sus datos miembros, en este caso se requeriría un total de 146 bytes (9+40+40+40+15+2).

    La definición de la estructura representa un nuevo tipo de dato, por loque se pueden declarar a partir de ella el número de variables que se deseen.Ejemplo: Alumnos A2,A3,An;

    Los elementos individuales de la estructura se referencían utilizando eloperador . (operador punto). Sintaxis:

     Nombre_var_estructura.Dato_miembro;

    Por ejemplo, el siguiente código asigna la edad 20 al dato miembroEdad  de la variable estructura A: A.Edad=20;

    El ejemplo completo para asignar y visualizar los datos a una estructura

    Alumnos se muestra a continuación:/*Estruct.cpp*/

    #include #include #include struct Alumnos{char N_Ctrl[9];char Nom[40];char Dir[40];char Ciudad[40];char Tel[15];int Edad;

  • 8/18/2019 Programacion de c

    76/129

    Programación C y C++76

    };

    void main(){ clrscr();Alumnos A; //Definición de una variable estructura//Asignación de datosstrcpy(A.N_Ctrl,"95190205");strcpy(A.Nom,"Sanchez L¢pez Juan");strcpy(A.Dir,"Av. 5 de Mayo No. 37");strcpy(A.Ciudad,"Juchitan, Oax.");A.Edad=20;//Visualizacióncout

  • 8/18/2019 Programacion de c

    77/129

    Programación C y C++ 77

      char Nom[40];char Dir[40];char Ciudad[40];

    char Tel[15];int Edad;};

    void main(){ clrscr();Alumnos Al[N]; //Definición del arreglo de estructuraint i;cout

  • 8/18/2019 Programacion de c

    78/129

    Programación C y C++78

    int Cant;};

    void Visualizar(Producto Pr);void main(){ clrscr();Producto P;strcpy(P.Prod,"Tarjeta Madre Pentium III");P.Pr_unid=1080;P.Cant=5;Visualizar(P);

    getch();}

    void Visualizar(Producto Pr) //Parámetro por valor

    {cout

  • 8/18/2019 Programacion de c

    79/129

    Programación C y C++ 79

      float Pr_unid;

    int Cant;

    };void Leer(Producto *Pr);void Visualizar(Producto Pr);

    void main(){ clrscr();Producto P; //Definicón de la variable de estructuraLeer(&P);Visualizar(P);getch();

    }

    void Leer(Producto *Pr) //Parámetro por referencia

    {strcpy(Pr->Prod,"Tarjeta Madre Pentium III");Pr->Pr_unid=1080;Pr->Cant=5;

    void Visualizar(Producto Pr) //Parámetro por valor{cout

  • 8/18/2019 Programacion de c

    80/129

    Programación C y C++80

    realidad se trata de la dirección de inicio del arreglo, la segunda línea por lotanto es una llamada por referencia, que no debe confundirse con una llamada por valor, en este caso se trata de un arreglo y en el último una estructura

    simple.

    EJERCICIOS RESUELTOS 

    1.- Programa que muestre un menú de opciones en pantalla con las siguientesopciones: Altas, Bajas, Visualizar y Terminar, para manejar un arreglo deestructuras de N alumnos con los siguientes datos: Número de control,nombre, dirección, ciudad, teléfono y edad. En la opción de altas validar si elregistro esta vacío para proceder y si no indicarlo con un mensaje; en el proceso de bajas caso inverso. Durante la visualización solamente se

    mostrarán los registros que ya fueron dados de alta.

    /* Alumnos.cpp */

    #include #include #include #include #define N 10 //10 Alumnos, se puede modificar

    struct Alumnos{ //definición de estructurachar N_Ctrl[9];

    char Nom[40];char Dir[40];char Ciudad[40];char Tel[15];int Edad;

    }; //definición de funciones del usuariovoid Formatear(Alumnos A[N]);void Altas(Alumnos A[N]);void Bajas(Alumnos A[N]);void Visualizar(Alumnos A[N]);

    void main(){ char op;

    Alumnos A[N]; // Arreglo de estructuras Formatear(A);do{

    clrscr();cout

  • 8/18/2019 Programacion de c

    81/129

    Programación C y C++ 81

     switch (op){case '1': Altas(A); //Llamada por referencia

    break;case '2': Bajas(A);break;

    case '3': Visualizar(A);break;

    }}while (op!='4');

    }

    //formatea todos los registros desde 0 hasta N-1void Formatear(Alumnos A[N]){ int x;for(x=0;x

  • 8/18/2019 Programacion de c

    82/129

    Programación C y C++82

    }}while(Reg!=0);

    }//Da de baja el registro si esta ocupado, valida el intervalovoid Bajas(Alumnos A[N]){ int Reg;do{

    do{clrscr();cout

  • 8/18/2019 Programacion de c

    83/129

    Programación C y C++ 83

  • 8/18/2019 Programacion de c

    84/129

    Programación C y C++84

    2.- Programa que simule un cajero automático de un banco. Al iniciar el programa presentará una pantalla con las siguientes opciones: Deposito,Retiro, Saldo y Salir. El saldo inicial deberá ser igual a $2,500.00. Después de

    realizar un deposito y un retiro se mostrará el saldo actualizado, verificandoque no se permita retirar una cantidad superior al saldo, si esto ocurre sedeberá mostrar el mensaje correspondiente.

    /*Cajero.cpp */#include #include void Deposito();void Saldo();void Retiro();float Sal=2500; //Saldo inicial

    void main(){ char op;do{

    clrscr();cout

  • 8/18/2019 Programacion de c

    85/129

    Programación C y C++ 85

    void Saldo() //Visualiza el Saldo{clrscr();

    cout

  • 8/18/2019 Programacion de c

    86/129

    Programación C y C++86

    void main(){ char op;

    Inicializa();do{clrscr();cout

  • 8/18/2019 Programacion de c

    87/129

    Programación C y C++ 87

      cin>>E[reg].Edad;cout

  • 8/18/2019 Programacion de c

    88/129

    Programación C y C++88

    EJERCICIOS PROPUESTOS.

    1.- Complementar el ejercicio resuelto Cajero.cpp para que ante un depositola cantidad no rebase los $3,000.00 y ante un retiro no sea superior a$2,000.00 en cada proceso.2.- Complementar el ejercicio resuelto Escolar.cpp  para que además de lasopciones que maneja contenga la opción de Bajas.3.- Rescribir el programa  Alumnos.cpp  , con un ligero cambio: En lugar deque la variable de tipo estructura sea una variable local a la función main() que sea una variable global.4.- En una tienda de videos se desea llevar el control de las películas paratener a la mano los siguientes datos: Titulo, duración, mes y año de compra.Escribir un programa que una vez dado de alta cada una de las N películas, los

    muestre ordenados por su fecha de compra.5.- Programa para calcular el área de las siguientes figuras geométricas:Rectángulo, Circulo, Trapecio. Por cada figura se contará con una funciónque retornará el área calculada, usar un menú de opciones.6.- Una tienda de ferretería desea contar con información de los artículos quevende tales como: Nombre, Precio unitario y Existencia, Si la existencia esta por debajo del punto de pedido (PP = 3), deberá generar una ficha de compraque contenga los Nombres y cantidades (PP + 6) de artículos que deseaadquirir.

  • 8/18/2019 Programacion de c

    89/129

    Programación C y C++ 89

     

    Capitulo 5

    Programación Orientada a Objetos 

    •  Que es la POO•  Definición de una clase•  Tipos de Accesos a una clase•  Tipos de Usuarios•  Relación entre Usuarios y Tipos de

    Accesos•  Clases Amigas•  Datos Estáticos•  Constructores y Destructores•  Ejercicios

    La programación Orientada a Objetos a revolucionado la técnica del

    análisis y diseño de programas, la mayoría de lenguajes de programación actuales utiliza esta técnica, de aquí la importancia deconocerlo. En esta unidad y el siguiente se abordan los conceptos básicos para poder utilizarlo.

  • 8/18/2019 Programacion de c

    90/129

  • 8/18/2019 Programacion de c

    91/129

    Programación C y C++ 91

    Class Nombre{ Dato_miembro1; Dato_miembro2;

    ... función_miembro_1(); función_miembro2();...

     }

    Ejemplo:class Empleado{

    char Nom[40]; float Salario;void Asignar(char *N,float S);

    void Calcular(); };

    El ejemplo muestra una clase llamada Empleado con los datos miembros Nom y Salario, y funciones miembros Asignar() y Calcular(), esto es solamente ladefinición de la clase, cuando se define una variable de esa clase es cuando secrea una instancia de la clase o un objeto de la clase. Ejemplo:

    Empleado E; //Definición de un Objeto de la clase Empleado.

    Observe la sintaxis que es exactamente igual que la sintaxis para la definición

    de una variable, en el tema de estructuras se observaron varios ejemplossimilares.

    Un objeto es por lo tanto una variable de un clase en particular. Para acceder aun dato miembro de la clase o a una función miembro de la clase se usa eloperador . (operador punto) al igual que una estructura si el objeto es estáticoy si es un puntero entonces se usa el operador -> (Operador flecha).

    Podría pensarse que para asignar el valor de 1500 al dato miembro Salario se podría realizar de la siguiente manera:

    void main(){

    Empleado E; //Definición de un Objeto de la clase Empleado.E.Salario=1500; //Error

     }Sin embargo dentro de una clase cada uno de sus miembros tienen un controlde acceso, y en este caso si dentro de la clase no se especifica ninguno pordefault es del tipo privado, que impide que se pueda manipular desdecualquier otra parte que no sea la clase misma. Para entender lo anterior primero analicemos los diferentes tipos de Accesos de una clase

  • 8/18/2019 Programacion de c

    92/129

    Programación C y C++92

    TIPOS DE ACCCESOS A UNA CLASEExisten tres niveles de privilegio de acceso que se asocian con una palabra

    reserva que son:

    Tipo de Acceso Palabra reservada1.- Privado private2.- Protegido protected3.- Publico public

    Tabla 5. 1 Tipos de Acceso de una clase

    TIPOS DE USUARIOS

    El código de un programa puede hallarse en diferentes puntos y según

    el lugar donde se encuentre se le conoce como una clase de usuario, que puedeser:

    •  La propia Clase•  Clases derivadas•  Usuarios genéricos

    Toda función que se encuentre definido dentro de una clase se le conocecomo usuarios de la propia clase, y las funciones que se encuentren en unaclase derivada (Se trata en el tema de Herencia) se les conoce como usuariosde la clase derivada, finalmente una función que no pertenezca ni a la propia clase ni a una clase derivada se le conoce como usuario genérico, tal es elcaso de la función main() o cualquier otra que se utilice en el programa comocomplemento del mismo.

    RELACIÓN ENTRE USUARIOS Y TIPOS DE ACCESOS

    Una vez que se conocen los diferentes tipos de usuarios y los tipos deacceso, se puede establecer la relación entre los tipos de usuarios y los tiposde acceso, como se muestra en la siguiente tabla.

    Tipos de UsuariosTipo de AccesoLa propia Clase Clases derivadas Usuarios gener.

    Private *Protected * *Public * * *

    Tabla 5. 2.- Relación entre usuarios y tipos de accesos

    La