Programacion c

March 15, 2017 | Author: diabliux | Category: N/A
Share Embed Donate


Short Description

Download Programacion c...

Description

Programación C y C++

Programación Lenguaje C y C++

M. C. Gastón Dehesa Valencia

1

2

Programación C y C++

Derechos Reservados © 2002 por Gastón Dehesa Valencia Todos los Derechos Reservados. Se autoriza para que este material pueda ser leida y reproducida por los estudiantes que la requieran. En este libro se han incluido programas y descripciones gráficas por su valor educacional. Han sido debidamente probados pero no se garantizan para ningún propósito en particular. El editor no proporciona ninguna garantía o representación, ni acepta ninguna responsabilidad con respecto a los programas y descripciones gráficas. Muchos de los nombres utilizados por los fabricantes o vendedores de software para distinguir sus productos son marcas registradas. El editor tiene toda la intención de proporcionar la información de la marca registrada acerca de los fabricantes y los productos mencionados en este libro. Una lista de las designaciones de marcas registradas se muestra más adelante en esta página.

Marcas Registradas C++ 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 Corporation MS-DOS es una marca registrada por Microsoft Corporation Visual C++ es una marca registrada por Microsoft Corporation

Dedico esta obra a mi familia Por que representan una fuente de Energía inagotable, que me impulsa a emprender nuevos proyectos.

Programación C y C++

Contenido 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 2.- Sentencias de control de programa Sentencias de Selección Sentencias de Iteración Sentencias de Salto Ejercicios 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 4.- Funciones y Estructuras Funciones Pase de parámetros Estructuras Arreglos de Estructuras Ejercicios 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

3

4

Programación C y C++ Ejercicios

6.- Herencia y Polimorfismo Clases Derivadas Herencia Simple y Múltiples Problema y solución de la Herencia Múltiples Constructores y Destructores en clases Derivadas Polimorfismo Sobrecarga de funciones Funciones virtuales Clases Abstractas Ejercicios

Programación C y C++

5

Prologo Este libro puede ser utilizado como guía para el examen de admisión de la Maestría en Informática que el Instituto en Computación y Electrónica Dehesa ofrece en lo que se refiere a Programación. Este libro esta organizado de la siguiente forma: En los cuatro primeros capítulos se aborda la programación estándar y en los capítulos 5 y 6 los conceptos básicos de la programación orientada a objetos. Cada tema expuesto viene acompañado de uno o más ejercicios, el nombre del archivo aparece como comentario al inicio de cada listado de programa. Los programas que contiene el libro fueron probados usando compiladores de Borland. En archivo empaquetado que acompaña al libro encontrará un directorio por cada 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 puede hacer a la siguiente dirección de correo electrónico: [email protected]

6

Programación C y C++

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

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 desarrollo se realizo en este sistema y debido a que tanto UNIX como el propio compilador de C y la casi totalidad de los programas y herramientas de UNIX, fueron escritos en C. Su eficiencia y claridad han hecho que el lenguaje ensamblador apenas haya sido utilizado en UNIX. Este leguaje está inspirado en el lenguaje B escrito por Ken Thompson en 1970 con intención de recodificar el UNIX, que en la fase de arranque estaba escrito en ensamblador, en vista a su transportabilidad a otras maquinas. 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 novedad que proporciono él lenguaje C sobre el B fue el diseño de tipos y estructuras de datos. En 1980 Bjarne Stroustrup de los laboratorios Bell de Murray Hill, New Jersey, inspirado en el lenguaje Simula67 adiciono las características de la programación orientada a objetos (incluyendo la ventaja de una biblioteca de funciones orientada a objetos) y lo denomino C con clases. Para 1983 dicha denominación cambio a la de C++. Con este nuevo enfoque surge la nueva metodología que aumenta las posibilidades de la programación bajo nuevos conceptos. Con la popularidad de las microcomputadoras se crearon muchas implementaciones de C. En lo que se podría decir que era un milagro, los códigos fuentes aceptados por la mayoría de esas implementaciones eran altamente compatibles. Sin embargo, como no existía ningún estándar, aparecieron discrepancias. Para remediar la situación, el Instituto de Estándares Americano (ANSI) estableció un comité a mediados de 1983 para crear 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 del lenguaje C, dos de estos imperios son: Microsoft Borland

Visual C++ Ver 6.0 C++ Builder 5.0

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

8

Programación C y C++

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 cabeceras 2.- Definición de constantes y variables globales 3.- Definición de Funciones del usuario 4.- 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.1416 float Area; //Definición de funciones del usuario void Area_Cir(int R); //Definición e implementación del Programa Principal void 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 Usuario void Area_Cir(int R) { Area= 2*PI*R*R; }

La idea de presentar un programa no muy pequeño de entrada a diferencia 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

Programación C y C++

9

cabecera definidos por el lenguaje, existen un gran numero de ellos que acompaña al compilador según la versión y fabricante por lo regular hallados en el directorio \Include, los archivos de cabecera definidos en esta sección que pertenezcen al compilador deberán estar entre los signos < > y aquellos que el propio programador cree para sus aplicaciones entre comillas “ “ lo cual le indicara al compilador que busque el archivo en el directorio de trabajo y no en el directorio por defauld de archivos de cabecera (include). La siguiente lista muestra algunos de los archivos de cabeceras que má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 o consola 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 cabecera encerrado entre signos < > ó “ ” según el lugar donde este se encuentre, de esta forma el compilador incluirá durante la compilación las variables, constantes y funciones que se encuentren en el archivo y que sean usados por el programa en desarrollo. En la sección de definición de constantes y variables globales se encuentra otra directiva de preprocesamiento conocido como #define que permite definir la constante, observe que después del identificador PI no existe un signo =, aunque el significado es que el identificador PI toma el valor de 3.1416, para la definición de las variables globales basta con indicar su tipo de dato y el identificador seguido de punto y coma, aquí se define Area de tipo real (float), recuerde que una variable global perdura a lo largo de la ejecución de 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 requiere definir todas las funciones que se implementen por el programador, por que solo de esta forma el compilador puede conocer de forma adelantada la existencia de los mismos, es decir antes de llamar a una función primero el compilador necesita saber de su existencia en caso contrario no podría resolver esta referencia provocando un error en tiempo de compilación, el lenguaje C es un lenguaje estructurado lo cual significa que un programa según su tamaño se dividirá en varios módulos conocidos como funciones, de esta forma se evita que la función principal este saturada de código. En este

10

Programación C y C++

ejemplo se define solamente una función, Area_Cir() sin tipo de retorno (void) y recibe como parámetro un entero( El radio del circulo). La función principal (main()) es el primero que se ejecuta cuando inicia un programa, por lo que es indispensable que éste exista, en él se establece la lógica o secuencia que seguirá el programa durante su ejecución. Una descripción de lo que ocurre en el ejemplo es el siguiente: Se define una variable local Radio de tipo entero Borra la pantalla Se Imprimen mensajes en pantalla Lee un dato de tipo entero almacenándolo en la variable Radio Llama a la función Area_Cir() pasándole como argumento el Radio leído Imprime la variable Area calculada en la función Espera la entrada de una tecla para terminar Como puede observarse el orden de los comandos es el orden o secuencia en que estos se ejecutan. Finalmente en la sección de Implementación de funciones se tendrá la implementación de todas las funciones que el programador halla definido en la sección correspondiente, en este caso la función Area_Cir() solamente tiene una línea de código que se encarga de asignar a la variable global Area , el resultado de multiplicar 2*3.1416*R*R , si el usuario introdujo un Radio =5 entonces sería: 2*3.1416*5*5. Si una función se define y se llama desde alguna parte del programa y no esta implementado, se detectara un error en tiempo de enlace y no en tiempo de compilación tema que se tratará en la siguiente sección.

11

Programación C y C++ 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 de sintaxis, de no existir se genera un archivo objeto (.OBJ) por cada programa fuente. Ligado.- Durante este proceso se unen todos los programas objetos del 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: Princip.cpp

Archivo2.cpp

stdio.h

conio.h

COMPILACION

Cl.lib

Princip.obj

Archivo2.obj

Mathl.lib

LIGADO Extern.exe

Figura 1. 1 Proceso de Compilación y Ligado de un programa en C La implementación de las funciones halladas en los archivos de cabecera 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 se integran al programa en tiempo de enlace, es por esta razón que si una función definido por el usuario no esta implementada en el programa ni tampoco en una librería se detectará en tiempo de enlace. De lo anterior se deduce entonces que un archivo de cabeceras (*.h) es diferente de un archivo de librerías (*.Lib), lo cual es muy cierto y veamos algunas diferencias: Característica Archivo de Cabecera Tipo Texto Cuando se usa Tiempo de Compilación Contenido Definiciones

Archivo de Librería Binario Tiempo de ligado Implementaciones compiladas

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

12

Programación C y C++

Es frecuente que se confundan los términos archivo de librería con archivo de cabecera, la tabla y dibujo anterior precisamente tiene la finalidad de hacer notar que son diferentes. Durante la escritura de un programa es frecuente probar una y otra vez si se esta haciendo lo correcto, para ello se usa la ejecución paso a paso de un programa (Depuración), en ocasiones algunos archivos de cabecera se cargan en el ambiente de programación y se debe tener la precaución de no modificarlos para no producir incongruencias entre el archivo de cabecera y el archivo de librería, al final de cuentas están directamente 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 partir de estas puede crear nuevos tipos y nuevas instrucciones. Palabras reservadas Las palabras reservadas del compilador son todas aquellas palabras que se usan para especificar tipos de variables, estructuras cíclicas, estructuras de decisión, etc., y que no pueden ser usadas por el usuario como nombre de variables, de funciones o de nuevos tipos .Estas palabras son las siguientes: asm delete goto public this auto do huge register union break double if return unsigned case else int Short virtual carch enum interrupt signet void char extern long sizeof volatile class far near static while const float new struct continue for private switch defauld 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 la información en la memoria, por ejemplo el sistema operativo MS-DOS es un sistema de 16 bits, mientras que Windows 98, Windows 2000, Windows NT son de 32 bits, así que el compilador para cada uno de estos sistemas operativos almacenara en algunos casos un mismo tipo de dato con longitud diferente, más adelante se presenta una tabla de los tipos de datos para un sistema de 16 bits.

Programación C y C++

13

C se distingue por ser un lenguaje con demasiados tipos, existen otros lenguajes como PASCAL que cuentan con unos pocos tipos, esta variedad de tipos 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 el usuario, algunos tipos predefinidos para un sistema de 16 bits son. Tipos de datos # de Bits Intervalo char 8 -127 a 127 int 16 -32768 a 32767 long 32 0 a 4294967295 float 32 Aprox. 6 dígitos de precisión double 64 Aprox. 12 dígitos de precisión void 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 para modificarles su tamaño y/o su rango, estos son: Signed unsigned long short Estas son algunas de las combinaciones que se pueden presentar: Tipo unsigned char Char unsigned int short int Int unsigned long int long int Float double float

# de Bits Intervalo 8 0 a 255 8 -127 a 127 16 0 a 65535 16 Lo mismo que int 16 -32,768 a 32,767 32 0 a 4,294,967,295 32 -2,147,483,648 a 2,147,483,647 32 3.4E-38 a 3.4E38 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ño define un rango de operación que limita los números que se puede almacenar en una variable. imagínese que se desea diseñar un programa de nómina que

14

Programación C y C++

va ha manejar los sueldos de los empleados, piense en el tipo de datos que usaría para la variable sueldo; seguramente pensó en un tipo unsigned int, si observamos 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ás apropiado será unsigned long que almacena valores entre 0 y 4294967295. Bueno, pero que pasaría si escogiéramos el tipo unsigned int para la variable sueldo, en el momento que almacenemos un valor superior a 65535 el contenido quedará truncado. Para el caso de un Sistema Operativo de 32 bits, el compilador almacenaría los datos con tamaños diferentes, este sería el caso:

Tipo unsigned char char unsigned int short int int unsigned long int long int float double float

# de Bits Intervalo 8 0 a 255 8 -128 a 126 32 0 a 4,294,967,295 16 -32,768 a 32,767 32 -2,147,483,648 a 2,147,483,648 32 Lo mismo que unsigned int 32 Lo mismo que int 32 1.2E-38 a 3.4E381 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 mismo que long int mientras que para un sistema de 16 bits estos tienen diferente longitudes y por lo tanto diferentes intervalos. Como se deduce en consecuencia que la longitud en bytes de un tipo dato depende 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 puede utilizar el operador sizeof. Por ejemplo: int x; x=sizeof(int));

En un compilador operado en el sistema operativo MS-DOS x tomaría el valor de 2, mientras que en Windows 98 el valor de 4. En este libro con la finalidad de evitar las complicaciones del ambiente del compilador se abordarán los aspectos básicos de la programación estándar y 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 ambiente Windows para conocer la programación Visual con C++. Comentarios

Programación C y C++

15

Un comentario es una secuencia de caracteres utilizada para explicar el código fuente 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 cuyo valor 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 (se explica 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. Por lo contrario una variable declarada dentro de una función se considera como variable 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 un tipo. El tipo determina los valores que puede tomar así como las operaciones que 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 mezclarlos durante una expresión o asignación, a diferencia de otros lenguajes, C realiza la 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 92 char 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 la variable car se le asigna el carácter ’\’ , que es el equivalente del código ASCII.

16

Programación C y C++

Cuando se presenten casos de conversión de tipos se debe tener en cuenta que es posible la perdida de datos. Supóngase que x=256 en lugar de 92, en este caso car tomaría el valor de ‘\0’, es decir el carácter nulo. Esto se debe a que un entero es de 16 bits (en MS-DOS) mientras que un char es 8 bits, por lo tanto los 8 bits más significativos del entero se perderán. No todos los compiladores soportan la conversión de tipos durante las asignaciones, algunos solamente lo soportan durante una expresión este es el caso del C++ Builder, por ejemplo: int x; x= Edit1->Text; //Error No se puede convertir una cadena a entero

Como Edit1->Text es una propiedad de tipo cadena (Arreglo de caracteres) no se puede llevar a cabo la conversión de manera directa, para solucionar este problema la asignación se debe realizar de manera indirecta: x = Edit1->Text*1; //OK La conversión se da en la expresión.

OPERADORES Los operadores se utilizan para manipular datos: ejecutan cálculos, buscan igualdades, realizan asignaciones, trabajan con variables y se encargan de muchas otras tareas que los programadores nunca llevan a cabo. En la siguiente tabla se presentan los de uso más común . Operador

Descripción Ejemplo OPERADORES ARITMÉTICOS + Adición x=x+z; Sustracción x=x-z; * Multiplicación x=x*z / División x=x/z; % Modulo o resto x=x%z; OPERADORES LÓGICOS && AND Lógico if (x&&0xFF) || OR Lógico if (x||0xFF) NOT Lógico If (!Soltero) ! OPERADORES RELACIONALES == Igual que if (x==y) Diferente que != < Menor que > Mayor que = Mayor o igual que OPERADORES DE CLASE Y ESTRUCT. :: Resol. de alcance Punto::Dibujar() -> Miembro indirecto P->Dibujar(); . Miembro directo P.Borar();

Operador

Descripción Ejemplo OPERADORES DE ASIGNACIÓN = Asignación x=10; += Asignar y sumar x+=10; -= Asignar y restar x-=10; *= Asignar y multiplicar x*=10; /= Asignar y dividir x/=10; &= Asig. operador AND x&=0x02; |= Asignar operador OR x|=0x02; OPERADORES A NIVEL DE BITS & AND a nivel de bits C=A&B; | OR a nivel de bits XOR a nivel de bits C=A∧B; ∧ >2; ~ NOT a nivel de bits A=~D; OPERADORES DE APUNTADORES * Indirección Int *Ap; & Dirección x=&Ap; OTROS ++ Incremento x++; -Decremento x--;

Tabla 1. 6 Operadores de C++ más usados

17

Programación C y C++ 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 para determinar el orden de evaluación. Lo más sencillo de recordar es que la multiplicación y división tienen prioridad sobre la suma y la resta. A partir de esto, si una expresión no le resulta clara, tampoco lo será para alguien que lea el código, por lo que deberá utilizar paréntesis para hacer más explicito el orden 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 o de derecha a izquierda). Todos los operadores situados entre líneas tienen el mismo nivel de prioridad. Nivel 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Operadores () [] -> :: . ! ~ ++ -- & * * / % + > < >= = != & ∧ | && || = *= -= *= %= < >= &= ∧= |= ,

Asociatividad Izquierda – Derecha Derecha . Izquierda Izquierda – Derecha Izquierda – Derecha Izquierda – Derecha Izquierda – Derecha Izquierda – Derecha Izquierda – Derecha Izquierda – Derecha Izquierda – Derecha Izquierda – Derecha Izquierda – Derecha Derecha – Izquierda Izquierda – Derecha

Tabla 1. 7 Prioridad y Asociatividad de operadores de C++ Ejemplos: a).- 8/4*6 2*6 12 b).- 3/4*6 0*6 0 c).- (float) 2/4 2.0/4 0.5 d).- -3+4% 5/2 -3+4/2 -3+2 -1

8*6/4 48/4 12 3*6/4 18/4 4

28/(3*4) 28/12 2

18

Programación C y C++

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 problema específico. Esta información constituye los datos de entrada del algoritmo que definen nuestro programa y es mediante ellos que se obtendrá la salida o solución correspondiente: De ahí la importancia de proporcionar adecuadamente los valores o datos de aquellas variables del programa que deba leer la computadora; además de la importancia de incluir mensajes en las ordenes de salida que nos indiquen 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 flujos El 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 funciones hallados 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 segundo elemento contiene especificadores de formato que definen la forma en que se muestran los argumentos posteriores. El espicificador de formato empieza con un % y va seguido por el código del formato. Debe haber exactamente el mismo número de argumentos que especificadores de formato y ambos deben coincidir en su orden de aparición de izquierda a derecha. En la siguiente tabla se muestra una gran variedad de especificadores de formato. Código

Formato

%c

Carácter

%d

Entero en decimales con signo

%i

Entero decimales con signo

%e

Notación científica

Programación C y C++ %f

Punto flotante)

%h

Entero corto

%o

Octal sin signo

%s

Cadena de caracteres

%x

Hexadecimal sin signo

19

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 caracteres que permitan formatear la salida, conocidos como secuencia de escape Secuencia de escape \a \b \f \n \r \t \v \\

Acción realizada Alarma Retroceso Avance de pagina Nueva Linea Retorno de carro Tabulación (horizontal) 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 cantidad numérica debido a que asigna dichos valores a través de las direcciones de las variables, 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, los nombres de las variables son en si mismos apuntadores y no requieren dicho símbolo. Ejemplo:

20

Programación C y C++

/*ES-Estan.cpp Muestra el uso de las funciones printf() y scanf() */ #include #include void main() {char Nom[40]; int Edad; float Peso; clrscr(); printf("IDENTIFIQUESE POR FAVOR"); printf("\n\n NOMBRE: "); scanf("%s",Nom); printf("\n EDAD: "); scanf("%i",&Edad); printf("\n PESO: "); scanf("%f",&Peso); printf("\n\n SUS DATOS SON: "); printf("%s %i %4.2f",Nom,Edad,Peso); getch(); } La Salida del programa después de ejecutarla sería: IDENTIFIQUESE POR FAVOR NOMBRE: Juvenal EDAD: 36 PESO: 50.4 SUS DATOS SON:

Juvenal

36

50.40

Observe que al leer las variables Edad y Peso de tipo entero y real respectivamente se utiliza el operador & que indica dirección, mientras que la variable Nom que es un arreglo de caracteres (cadena) no lo requiere, la función printf() hace uso frecuentemente de la secuencia de escape \n para cambiar de línea, por ejemplo el penúltimo printf() hace que se deje una línea en blanco. Existen en el archivo de cabecera stdio.h una serie de funciones que permiten específicamente leer y escribir datos de tipo carácter y cadena, no es la finalidad de este libro profundizar en este tema más sin embargo se considera necesario conocer de su existencia. En la siguiente tabla se sintetizan: Función getchar() getche() getch() putchar() gets() puts()

Operación Lee un carácter del teclado; espera un salto de carro. Lee un carácter con eco; no espera un salto de carro. Lee un carácter sin eco; no espera un salto de carro. Escribe un carácter en pantalla. Lee una cadena del teclado. Escribe una cadena en pantalla.

Tabla 1. 10 Funciones complementarias de E/S

Programación C y C++

21

Entrada y Salida por flujos C++ proporciona el archivo de cabecera iostream.h que contiene funciones que realizan operaciones de Entrada/Salida, este archivo tiene la ventaja sobre el stdio.h por ser una implementación orientada a objetos, dos de estos objetos 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 la derecha. A manera de ejemplo rescribiremos el programa ES-Estan.cpp pero en lugar 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
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF