Sunteți pe pagina 1din 35

SAETI

CENTRO DE ESTUDIOS TECNOLGICO INDUSTRIAL Y DE SERVICIOS No. 50 Mariano Matamoros Guridi

ALUMNO:

Valerio Toledo Miguel Antonio

TURNO:

Vespertino

PERIODO:

Febrero 2012

TRABAJO DE INVESTIGACIN SOBRE:

Lenguaje de programacin II

INDICE
UNIDAD I. LENGUAJE A UTILIZAR: C O PASCAL
1.1.- Conceptos generales 1.2.- Concepto de campo 1.3.- Conceptos de estructuras 1.4.- Manipulacin de estructuras

UNIDAD II. ARCHIVO


2.1.- Conceptos generales campo, estructura, archivo 2.2.- Archivos de texto: introduccin, declaracin, apertura, y manipulacin 2.3.- Archivos de estructuras: introduccin, declaracin, apertura, y manipulacin 2.4.- Archivos sin tipo: introduccin, declaracin, apertura, y manipulacin

UNIDAD III. APUNTADORES


3.1.- Direcciones de memoria 3.2.- Apuntadores 3.3.- Apuntadores a enteros 3.4.- Apuntadores a reales 3.5.- Apuntadores a caracteres 3.6.- Apuntadores a arreglos 3.7.- Apuntadores a estructuras

UNIDAD IV. UNIDADES


4.1- Subrutinas 4.2.- Unidades y/o libreras 4.3.- Encabezado 4.4.- Declaracin 4.5.- Cuerpo 4.6.- Creacin 4.7.- Declaracin dentro de un programa 4.8.- Uso y mantenimiento

UNIDAD I. LENGUAJE A UTILIZAR: C O PASCAL


1.1.- Conceptos generales

EVOLUCIN DEL LENGUAJE C El lenguaje C fue desarrollado por Dennis Ritchie en los Laboratorios Bell en 1972 e implementado sobre un DEC PDP-11 utilizando el sistema operativo UNIX. La idea inicial era crear un lenguaje de propsito general que facilitara la programacin y la realizacin de muchas de las tareas anteriormente reservadas al lenguaje ensamblador.

En 1980 el Dr. Bjarne Stroustrup de los laboratorios ATT Bell comienza el desarrollo del denominado en aquella poca C con clases , apareciendo en 1986 como resultado de dicho trabajo el lenguaje de programacin C++ que surge como acoplamiento al C de muchas de las caractersticas de la denominada POO (programacin orientada a objetos). C++ es un lenguaje muy potente, flexible y eficaz frente al resto de los lenguajes orientados a objetos, caractersticas que han hecho que se le considere como lenguaje estandar dentro de la programacin orientada a objetos. CARACTERSTICAS DEL LENGUAJE C
El lenguaje C ha sido utilizado para el desarrollo de infinidad de herramientas de trabajo (sistemas operativos, compiladores, procesadores de texto, bases de datos, etc.). Mientras que otros lenguajes de programacin se caracterizan por ser utilizados en reas ms concretas: Fortran mbito Cientfico Pascal soporte a la enseanza COBOL gestin El C se caracteriza por no tener ninguna connotacin sectorial; dicho de otra forma es un lenguaje de propsito general. La ventaja ms destacable es la transportabilidad o portabilidad, es decir, la posibilidad de utilizarlo tanto en macroordenadores como en mini y microordenadores. Ventajas del lenguaje C: Es un lenguaje muy flexible Muy apropiado para controlar rutinas hechas en ensamblador
Permite general programas de fcil modificacin Lenguaje predominante bajo cualquier mquina UNIX Muy veloz y potente, lo que permite un software efectivo

Posibilita una programacin estructurada o modular Produce programas de cdigo compacto y eficiente

Caractersticas de Alto nivel que conserva caractersticas de bajo nivel, por lo que se puede clasificar como lenguaje de bajo-medio nivel. Es un lenguaje compilado El cdigo fuente se escribe mayoritariamente en minsculas

Algunas desventajas:

No dispone de editor propio Se requiere ms tiempo en conseguir el ejecutable, porque cada vez compila todo el fichero. La modularidad en C tiende a incrementar el tiempo de compilacin Poco legible y eminentemente crptico

Al desarrollarse las primeras computadoras electrnicas, se vio la necesidad de programarlas, es decir, de almacenar en memoria la informacin sobre la tarea que iban a ejecutar. Las primeras se usaban como calculadoras simples; se les indicaban los pasos de clculo, uno por uno. John Von Neumann desarroll el modelo que lleva su nombre, para describir este concepto de "programa almacenado". En este modelo, se tiene una abstraccin de la memoria como un conjunto de celdas, que almacenan simplemente nmeros. Estos nmeros pueden representar dos cosas: los datos, sobre los que va a trabajar el programa; o bien, el programa en s. Cmo es que describimos un programa como nmeros? Se tena el problema de representar las acciones que iba a realizar la computadora, y que la memoria, al estar compuesta por switches correspondientes al concepto de bit, solamente nos permita almacenar nmeros binarios. La solucin que se tom fue la siguiente: a cada accin que sea capaz de realizar nuestra computadora, asociarle un nmero, que ser su cdigo de operacin (opcode) . Por ejemplo, una calculadora programable simple podra asignar los opcodes : 1 = SUMA, 2 = RESTA, 3 = MULTIPLICA, 4 = DIVIDE. Supongamos que queremos realizar la operacin 5 * 3 + 2, en la calculadora descrita arriba. En memoria, podramos "escribir" el programa de la siguiente forma:

Localidad Opcode Significado Comentario 0 5 5 En esta localidad, tenemos el primer nmero de la frmula 1 3 * En esta localidad, tenemos el opcode que representa la multiplicacin. 2 3 3 En esta localidad, tenemos el segundo nmero de la frmula 3 1 + En esta localidad, tenemos el opcode que representa la suma. 4 2 2 En esta localidad, tenemos el ltimo nmero de la frmula Podemos ver que con esta representacin, es simple expresar las operaciones de las que es capaz el hardware (en este caso, nuestra calculadora imaginaria), en la memoria. La descripcin y uso de los opcodes es lo que llamamos lenguaje de mquina . Es decir, la lista de cdigos que la mquina va a interpretar como instrucciones, describe las capacidades de programacin que tenemos de ella; es el lenguaje ms primitivo, depende directamente del hardware, y requiere del programador que conozca el funcionamiento de la mquina al ms bajo nivel. los lenguajes ms primitivos fueron los lenguajes de mquina. Esto, ya que el hardware se desarroll antes del software, y adems cualquier software finalmente tiene que expresarse en el lenguaje que maneja el hardware. La programacin en esos momentos era sumamente tediosa, pues el programador tena que "bajarse" al nivel de la mquina y decirle, paso a pasito, cada punto de la tarea que tena que realizar. Adems, deba expresarlo en forma numrica; y por supuesto, este proceso era propenso a errores, con lo que la productividad del programador era muy limitada. Sin embargo, hay que recordar que en estos momentos, simplemente an no exista alternativa. El primer gran avance que se dio, como ya se coment, fue la abstraccin dada por el Lenguaje Ensamblador, y con l, el nacimiento de las primerasherramientas automticas para generar el cdigo mquina. Esto redujo los errores triviales, como poda ser el nmero que corresponda a una operacin, que son sumamente engorrosos y difciles de detectar, pero fciles de cometer. Sin embargo, an aqu es fcil para el programador perderse y cometer errores de lgica, pues debe bajar al nivel de la forma en que trabaja el CPU, y entender bien todo lo que sucede dentro de l. Con el desarrollo en los 50s y 60s de algoritmos de ms elevado nivel, y el aumento de poder del hardware, empezaron a entrar al uso de computadoras cientficos de otras ramas; ellos conocan mucho de Fsica, Qumica y otras ramas similares, pero no de Computacin, y por supuesto, les era sumamente complicado trabajar con lenguaje Ensamblador en vez de frmulas. As, naci el concepto de Lenguaje de Alto Nivel, con el primer compilador de FORTRAN (FORmula TRANslation), que, como su nombre indica, inici como un "simple" esfuerzo de traducir un lenguaje de frmulas, al lenguaje ensamblador y por consiguiente al lenguaje de mquina. A partir de FORTRAN, se han desarrollado innumerables lenguajes, que siguen el mismo concepto: buscar la mayor abstraccin posible, y facilitar la vida al programador, aumentando la productividad, encargndose los compiladoreso intrpretes de traducir el lenguaje de alto nivel, al lenguaje de computadora.

Hay que notar la existencia de lenguajes que combinan caractersticas de los de alto nivel y los de bajo nivel (es decir, Ensamblador). Mi ejemplo favorito es C: contiene estructuras de programacin de alto nivel, y la facilidad de usar libreras que tambin son caractersticas de alto nivel; sin embargo, fue diseado con muy pocas instrucciones, las cuales son sumamente sencillas, fciles de traducir al lenguaje de la mquina; y requiere de un entendimiento apropiado de cmo funciona la mquina, el uso de la memoria, etctera. Por ello, muchas personas consideramos a lenguajes como C (que fue diseado para hacer sistemas operativos), lenguajes de nivel medio. Java El lenguaje de programacin Java, fue diseado por la compaa Sun Microsystems Inc, con el propsito de crear un lenguaje que pudiera funcionar enredes computacionales heterogneas ( redes de computadoras formadas por ms de un tipo de computadora, ya sean PC, MAC's, estaciones de trabajo, etc.),y que fuera independiente de la plataforma en la que se vaya a ejecutar. Esto significa que un programa de Java puede ejecutarse en cualquier mquina o plataforma. El lenguaje fue diseado con las siguientes caractersticas en mente: Simple. Elimina la complejidad de los lenguajes como "C" y da paso al contexto de los lenguajes modernos orientados a objetos. Orientado a Objetos. La filosofa de programacin orientada a objetos es diferente a la programacin convencional. Familiar. Como la mayora de los programadores estn acostumbrados a programar en C o en C++, el sintaxis de Java es muy similar al de estos. Robusto. El sistema de Java maneja la memoria de la computadora por ti. No te tienes que preocupar por apuntadores, memoria que no se est utilizando, etc. Java realiza todo esto sin necesidad de que uno se lo indique. Seguro. El sistema de Java tiene ciertas polticas que evitan se puedan codificar virus con este lenguaje. Existen muchas restricciones, especialmente para los applets, que limitan lo que se puede y no puede hacer con los recursos crticos de una computadora. Portable. Como el cdigo compilado de Java (conocido como byte code) es interpretado, un programa compilado de Java puede ser utilizado por cualquier computadora que tenga implementado el interprete de Java. Independiente a la arquitectura. Al compilar un programa en Java, el cdigo resultante un tipo de cdigo binario conocido como byte code. Este cdido es interpretado por diferentes computadoras de igual manera, solamente hay que implementar un intrprete para cada plataforma. De esa manera Java logra ser un lenguaje que no depende de una arquitectura computacional definida. Multithreaded. Un lenguaje que soporta multiples threads es un lenguaje que puede ejecutar diferentes lneas de cdigo al mismo tiempo.

Interpretado. Java corre en mquina virtual, por lo tanto es interpretado. Dinmico. Java no requiere que compiles todas las clases de un programa para que este funcione. Si realizas una modificacin a una clase Java se encarga de realizar un Dynamic Bynding o un Dynamic Loading para encontrar las clases. Java puede funcionar como una aplicacin sola o como un "applet", que es un pequeo programa hecho en Java. Los applets de Java se pueden "pegar" a una pgina de Web (HTML), y con esto puedes tener un programa que cualquier persona que tenga un browser compatible podr usar.

1.2.- Concepto de campo En informtica, un campo es un espacio de almacenamiento para un dato en particular. En las bases de datos, un campo es la mnima unidad de informacin a la que se puede acceder; un campo o un conjunto de ellos forman un registro, donde pueden existir campos en blanco, siendo ste un error del sistema operativo. En las hojas de clculo(como los programas de Excel) los campos son llamados celdas. La mayora de los campos tienen atributos asociados a ellos. Por ejemplo, algunos campos son numricos mientras otros almacenan texto, tambin vara el tamao de estos. Adicionalmente, cada campo tiene un nombre. 1.3.- Conceptos de estructuras La estructura (del latn structra) es la disposicin y orden de las partes dentro de un todo. Tambin puede entenderse como un sistema de conceptos coherentes enlazados, cuyo objetivo es precisar la esencia del objeto de estudio. Tanto la realidad como ellenguaje tienen estructura. Uno de los objetivos de la semntica y de la ciencia consiste en que la estructura del lenguaje refleje fielmente la estructura de la realidad. 1.4.- Manipulacin de estructuras Una estructura contiene varios datos. La forma de definir una estructura es haciendo uso de la palabra clave struct. Aqui hay ejemplo de la declaracion de una estructura: struct mystruct { int int_member; double double_member; char string_member[25]; } Variable;

"variable" es una instancia de "mystruct" y no es necesario ponerla aqu. Se podria omitir de la declaracion de "mystruct" y ms tarde declararla usando: struct mystruct variable; Tambin es una prctica muy comn asignarle un alias o sinnimo al nombre de la estructura, para evitar el tener que poner "struct mystruct" cada vez. C nos permite la posibilidad de hacer esto usando la palabra clave typedef, lo que crea un alias a un tipo: typedef struct { ... } Mystruct; La estructura misma no tiene nombre (por la ausencia de nombre en la primera linea), pero tiene de alias "Mystruct". Entonces se puede usar as: Mystruct variable; Note que es una convencion, y una buena costumbre usar mayscula en la primera letra de un sinnimo de tipo. De todos modos lo importante es darle algn identificador para poder hacer referencia a la estructura: podriamos tener una estructura de datos recursiva de algn tipo. Ejemplo de una estructura : /* * * * * * * * * * * Nombre Miembro Titulo Artista Tipo para el wikilibro "Programacin en C (fundamentos)" bajo licencia FDL, adaptado del Dominio Pblico Julio Csar Brizuela <brizuelaalvarado@gmail.com> 2009 estructura.c

char[30] char[25]

* * */

Precio Total Canciones

float int

#include <stdio.h> #include <string.h>

/* definimos una estructura para cds */ struct cd { char titulo[30]; char artista[25]; float precio; int canciones; } Cd1 = { /* inicializamos la estructura Cd1 creaa con sus valores * usando las definiciones iniciales*/ "Canciones Bebe", /* titulo */ "Pinocho", /* artista */ 12.50, /* precio */ 16 /* total canciones */ };

int main(void) { struct cd Cd2; /* definimos una nueva estructura llamado cd2 */

/* asignamos valores a los tipos de datos del cd2 */ strcpy(Cd2.titulo, "New Age");

/* la forma de insertar valores a un * tipo char en una estructura es usando strcpy * de la libreria string.h */ strcpy(Cd2.artista, "Old Man"); Cd2.precio = 15.00; Cd2.canciones = 12;

/* la forma de acceder a los valores de una estructura */ /* es usando el "." despues de la definicion del dato*/ printf("\n Cd 1"); printf("\n Titulo: %s ", Cd1.titulo); printf("\n Artista: %s ", Cd1.artista); printf("\n Total Canciones: %d ", Cd1.canciones); printf("\n Precio Cd: %f ", Cd1.precio);

printf("\n"); printf("\n Cd 2"); printf("\n Titulo: %s ", Cd2.titulo); printf("\n Artista: %s ", Cd2.artista); printf("\n Total Canciones: %d ", Cd2.canciones); printf("\n Precio Cd: %.2f ", Cd2.precio); /* el .2 que esta entre %f * sirve para mostrar unicamente

* 2 decimales despues del punto*/

return 0;

UNIDAD II. ARCHIVO


2.1.- Conceptos generales campo, estructura, archivo

En informtica, un campo es un espacio de almacenamiento para un dato en particular. En las bases de datos, un campo es la mnima unidad de informacin a la que se puede acceder; un campo o un conjunto de ellos forman un registro, donde pueden existir campos en blanco, siendo ste un error del sistema operativo. En las hojas de clculo(como los programas de excel) los campos son llamados celdas. La mayora de los campos tienen atributos asociados a ellos. Por ejemplo, algunos campos son numricos mientras otros almacenan texto, tambin vara el tamao de estos. Adicionalmente, cada campo tiene un nombre. Los cuadernos de la hoja de clculo Quattro Pro constan de 256 hojas con 8192 filas y 198 columnas cada una. Para el desarrollo de esta Aplicacin se han usado tres cuadernos, Nutricio.wb3, Nutrip. Wb3 y Datanutr.wb3. En esta seccin se describen primero los elementos informticos utilizados en cada cuaderno y posteriormente cada uno de los cuadernos. Un archivo o fichero informtico es un conjunto de bits almacenado en un dispositivo. Un archivo es identificado por un nombre y la descripcin de la carpeta o directorio que lo contiene. Los archivos informticos se llaman as porque son los equivalentes digitales de los archivos en tarjetas, papel o microfichas del entorno de oficina tradicional. Los archivos informticos facilitan una manera de organizar los recursos usados para almacenar permanentemente datos en un sistema informtico.

2.2.- Archivos de texto: introduccin, declaracin, apertura, y manipulacin El estndar de C contiene funciones varias para la edicin de ficheros, estas estn definidas en la cabecera stdio.h y por lo general empiezan con la letra f, haciendo referencia a file. Adicionalmente se agrega un tipo FILE, el cual se usar como apuntador a la informacin del fichero. La secuencia que usaremos para realizar operaciones ser la siguiente: Crear un apuntador del tipo FILE * Abrir el archivo utilizando la funcin fopen y asignndole el resultado de la llamada a nuestro apuntador. Hacer las diversas operaciones (lectura, escritura, etc). Cerrar el archivo utilizando la funcin fclose. Esta funcin sirve para abrir y crear ficheros en disco. El prototipo correspondiente de fopen es: FILE * fopen (const char *filename, const char *opentype); Los parmetros de entrada de fopen son: filename: una cadena que contiene un nombre de fichero vlido. opentype: especifica el tipo de fichero que se abrir o se crear. Una lista de parmetros opentype para la funcin fopen son: "r" : abrir un archivo para lectura, el fichero debe existir. "w" : abrir un archivo para escritura, se crea si no existe o se sobreescribe si existe. "a" : abrir un archivo para escritura al final del contenido, si no existe se crea. "r+" : abrir un archivo para lectura y escritura, el fichero debe existir. "w+" : crear un archivo para lectura y escritura, se crea si no existe o se sobreescribe si existe. "a+" : abrir/crear un archivo para lectura y escritura al final del contenido Adicionalmente hay tipos utilizando "b" (binary) los cuales no sern mostrados por ahora y que solo se usan en los sistemas operativos que no pertenecen a la familia fclose Esta funcin sirve para poder cerrar un fichero que se ha abierto. El prototipo correspondiente de fclose es:

Un valor de retorno cero indica que el fichero ha sido correctamente cerrado, si ha habido algn error, el valor de retorno es la constante EOF. Un ejemplo pequeo para abrir y cerrar el archivo llamado fichero.in en modo lectura: #include <stdio.h> int main(int argc, char** argv) FILE *fp; fp = fopen ( "fichero.in", "r" ); fclose ( fp ); return 0; Como vemos, en el ejemplo se utiliz el opentype "r", que es para la lectura. Otra cosa importante es que el lenguaje C no tiene dentro de si una estructura para el manejo de excepciones o de errores, por eso es necesario comprobar que el archivo fue abierto con xito "if (fp == NULL)". Si fopen pudo abrir el archivo con xito devuelve la referencia al archivo (FILE *), de lo contrario devuelve NULL y en este caso se debera revisar la direccion del archivo o los permisos del mismo. En estos ejemplos solo vamos a dar una salida con un retorno de 1 que sirve para sealar que el programa termino por un error. Esta funcin sirve para determinar si el cursor dentro del archivo encontr el final (end of file). Existe otra forma de verificar el final del archivo que es comparar el caracter que trae fgetc del archivo con el macro EOF declarado dentro de stdio.h, pero este mtodo no ofrece la misma seguridad (en especial al tratar con los archivos "binarios"). La funcin feof siempre devolver cero (Falso) si no es encontrado EOF en el archivo, de lo contrario regresar un valor distinto de cero (Verdadero). El prototipo correspondiente de feof es: int feof(FILE *fichero); Literalmente significa "rebobinar", sita el cursor de lectura/escritura al principio del archivo. El prototipo correspondiente de rewind es: void rewind(FILE *fichero); Un archivo generalmente debe verse como un string (una cadena de caracteres) que esta guardado en el disco duro. Para trabajar con los archivos existen

diferentes formas y diferentes funciones. Las funciones que podramos usar para leer un archivo son: char fgetc(FILE *archivo) char *fgets(char *buffer, int tamano, FILE *archivo) size_t fread(void *puntero, size_t tamano, size_t cantidad, FILE *archivo); int fscanf(FILE *fichero, const char *formato, argumento, ...);

Las primeras dos de estas funciones son muy parecidas entre si. Pero la tercera, por el numero y el tipo de parmetros, nos podemos dar cuenta de que es muy diferente, por eso la trataremos aparte junto al fwrite que es su contraparte para escritura. Esta funcin lee un caracter a la vez del archivo que esta siendo sealado con el puntero *archivo. En caso de que la lectura sea exitosa devuelve el caracter ledo y en caso de que no lo sea o de encontrar el final del archivo devuelve EOF. El prototipo correspondiente de fgetc es: char fgetc(FILE *archivo); Esta funcin se usa generalmente para recorrer archivos de texto. A manera de ejemplo vamos a suponer que tenemos un archivo de texto llamado "prueba.txt" en el mismo directorio en que se encuentra el fuente de nuestro programa. Un pequeo programa que lea ese archivo ser: #include <stdio.h> #include <stdlib.h> int main() return 0; Esta funcin est diseada para leer cadenas de caracteres. Leer hasta n-1 caracteres o hasta que lea un retorno de lnea. En este ltimo caso, el carcter de retorno de lnea tambin es ledo. El prototipo correspondiente de fgets es: char *fgets(char *buffer, int tamao, FILE *archivo);

El primer parmetro buffer lo hemos llamado as porque es un puntero a un espacio de memoria del tipo char (podramos usar un arreglo de char). El segundo parmetro es tamao que es el limite en cantidad de caracteres a leer para la funcion fgets. Y por ultimo el puntero del archivo por supuesto que es la forma en que fgets sabra a que archivo debe leer. #include <stdio.h> #include <stdlib.h> int main() FILE *archivo; char caracteres[100]; archivo = fopen("prueba.txt","r"); if (archivo == NULL) Este es el mismo ejemplo de antes con la diferencia de que este hace uso de fgets en lugar de fgetc. La funcin fgets se comporta de la siguiente manera, leer del archivo apuntado por archivo los caracteres que encuentre y a ponerlos en buffer hasta que lea un caracter menos que la cantidad de caracteres especificada en tamao o hasta que encuentre el final de una linea (\n) o hasta que encuentre el final del archivo (EOF). En este ejemplo no vamos a profundizar mas que para decir que caracteres es un buffer, los pormenores seran explicados en la seccin de manejo dinmico de memoria. El beneficio de esta funcin es que se puede obtener una linea completa a la vez. Y resulta muy til para algunos fines como la construccin de un parser de algn tipo de archivo de texto. size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); Esta funcin lee un bloque de una "stream" de datos. Efecta la lectura de un arreglo de elementos "count", cada uno de los cuales tiene un tamao definido por "size". Luego los guarda en el bloque de memoria especificado por "ptr". El indicador de posicin de la cadena de caracteres avanza hasta leer la totalidad de bytes. Si esto es exitoso la cantidad de bytes ledos es (size*count).

PARAMETROS:

ptr : Puntero a un bloque de memoria con un tamao mnimo de (size*count) bytes. size : Tamao en bytes de cada elemento (de los que voy a leer). count : Nmero de elementos, los cuales tienen un tamao "size". stream: Puntero a objetos FILE, que especifica la cadena de entrada. La funcin fscanf funciona igual que scanf en cuanto a parmetros, pero la entrada se toma de un fichero en lugar del teclado. El prototipo correspondiente de fscanf es: Podemos ver un ejemplo de su uso, abrimos el documento "fichero.txt" en modo lectura y leyendo dentro de el. #include <stdio.h> Escritura As como podemos leer datos desde un fichero, tambin se pueden crear y escribir ficheros con la informacin que deseamos almacenar, Para trabajar con los archivos existen diferentes formas y diferentes funciones. Las funciones que podramos usar para escribir dentro de un archivo son: int fputc(int caracter, FILE *archivo) int fputs(const char *buffer, FILE *archivo) size_t fwrite(void *puntero, size_t tamano, size_t cantidad, FILE *archivo); int fprintf(FILE *archivo, const char *formato, argumento, ...) Esta funcin escribe un carcter a la vez del archivo que esta siendo sealado con el puntero *archivo. El valor de retorno es el carcter escrito, si la operacin fue completada con xito, en caso contrario ser EOF El prototipo correspondiente de fputc es: int fputc(int carcter, FILE *archivo); Mostramos un ejemplo del uso de fputc en un "fichero.txt", se escribira dentro del fichero hasta que presionemos la tecla enter. #include <stdio.h> int main ( int argc, char **argv )

FILE *fp; fp = fopen ( "fichero.txt", "r+" ); printf("\nIntrouce un texto al fichero: "); while((caracter = getchar()) != '\n') printf("%c", fputc(caracter, fp)); fclose ( fp ); fput La funcin fputs escribe una cadena en un fichero. No se aade el carcter de retorno de lnea ni el carcter nulo final. El valor de retorno es un nmero no negativo o EOF en caso de error. Los parmetros de entrada son la cadena a escribir y un puntero a la estructura FILE del fichero donde se realizar la escritura. El prototipo correspondiente de fputs es: int fputs(const char *buffer, FILE *archivos para ver su funcionamiento mostramos el siguiente ejemplo: #include <stdio.h> int main ( int argc, char **argv ) FILE *fp; char cadena[] = "Mostrando el uso de fputs en un fichero.\n"; fputs( cadena, fp ); fclose ( fp ); return 0; fwrit Esta funcin est pensada para trabajar con registros de longitud constante y forma pareja con fread. Es capaz de escribir hacia un fichero uno o varios registros de la misma longitud almacenados a partir de una direccin de memoria determinada. El valor de retorno es el nmero de registros escritos, no el nmero de bytes. Los parmetros son: un puntero a la zona de memoria de donde se obtendrn los datos a escribir, el tamao de cada registro, el nmero de registros a escribir y un puntero a la estructura FILE del fichero al que se har la escritura. El prototipo correspondiente de fwrite es:

size_t fwrite(void *puntero, size_t tamano, size_t cantidad, FILE *archivo); Un ejemplo concreto del uso de fwrite con su contraparte fread y usando funciones es: /* * * * * */ #include <stdio.h> Copyright 2009 Julio Csar Brizuela <brizuela@linux-qxlk> FicheroCompleto.c

void menu(); void CrearFichero(FILE *Fichero); void InsertarDatos(FILE *Fichero); void VerDatos(FILE *Fichero); struct sRegistro { char Nombre[25]; int Edad; float Sueldo; registro; int main() int opcion; int exit = 0; FILE *fichero; while (!exit) menu(); printf("\nOpcion: ");

scanf("%d", &opcion); switch(opcion) case 1: CrearFichero(fichero); break; case 2: InsertarDatos(fichero); break; case 3: VerDatos(fichero); break; case 4: exit = 1; break; default: printf("\nopcion no valida"); return 0; void menu() printf("\nMenu:"); printf("\n\t1. Crear fichero"); printf("\n\t2. Insertar datos"); printf("\n\t3. Ver datos"); printf("\n\t4. Salir"); void CrearFichero(FILE *Fichero) Fichero = fopen("fichero", "r"); if(!Fichero)

Fichero = fopen("fichero", "w"); printf("\nArchivo creado!"); printf("\nEl fichero ya existe!"); fclose (Fichero); return; void InsertarDatos(FILE *Fichero) Fichero = fopen("fichero", "a+"); if(Fichero == NULL) printf("\nFichero no existe! \nPor favor creelo"); return; printf("\nDigita el nombre: "); scanf("%s", &registro.Nombre); printf("\nDigita la edad: "); scanf("%d", &registro.Edad); printf("\nDigita el sueldo: "); scanf("%f", &registro.Sueldo); fwrite(&registro, sizeof(struct sRegistro), 1, Fichero); fclose(Fichero); return; void VerDatos(FILE *Fichero) int numero = 1; Fichero = fopen("fichero", "r"); if(Fichero == NULL) printf("\nFichero no existe! \nPor favor creelo"); return; fread(&registro, sizeof(struct sRegistro), 1, Fichero);

printf("\nNumero \tNombre \tEdad \tSueldo"); registro.Edad, registro.Sueldo); fread(&registro, sizeof(struct sRegistro), 1, Fichero); numero++; fclose(Fichero); return; fprintf La funcin fprintf funciona igual que printf en cuanto a parmetros, pero la salida se dirige a un archivo en lugar de a la pantalla. El prototipo correspondiente de fprintf es: int fprintf(FILE *archivo, const char *formato, argumento, ...); Podemos ver un ejemplo de su uso, abrimos el documento "fichero.txt" en modo lectura/escritura y escribimos dentro de el. #include <stdio.h> int main ( int argc, char **argv ) FILE *fp; char buffer[100] = "Esto es un texto dentro del fichero."; fp = fopen ( "fichero.txt", "r+" ); fprintf(fp, buffer); fprintf(fp, "%s", "\nEsto es otro texto dentro del fichero."); fclose ( fp ); return 0;

UNIDAD III. APUNTADORES


3.1.- Direcciones de memoria En informtica, una direccin de memoria es un identificador para una localizacin de memoria con la cual un programa informtico o un dispositivo de hardware pueden almacenar un dato para su posterior reutilizacin.

Una forma comn de describir la memoria principal de un ordenador es como una coleccin de celdas que almacenan datos e instrucciones. Cada celda est identificada unvocamente por un nmero o direccin de memoria. La informacin que se almacena en cada celda es un byte (conjunto de ocho bits), que es la unidad mnima de almacenamiento de datos e instrucciones, puesto que un bit solo puede contener el valor cero o uno y eso no es suficiente para guardar datos o instrucciones, por lo que se debe almacenar en bytes.

Para poder acceder a una ubicacin especfica de la memoria, la CPU genera seales en el bus de direccin, que habitualmente tiene un tamao de 32 bits en la mayora de mquinas actuales. Un bus de direccin de 32 bits permite especificar a la CPU = 4.294.967.296 direcciones de memoria distintas.

Debido a la estructura de 32 bits de un procesador comn como los de Intel, las direcciones de memoria se expresan a menudo en hexadecimal. Por ejemplo, para no tener que escribir 111111010100000000000010101100 podemos escribir 3F5000AC en hexadecimal. 3.2.- Apuntadores Los apuntadores son variables que almacenan direcciones de memoria. En general una variable contiene un valor especfico dependiendo de como fue declarada. Un apuntador contiene la direccin de una variable que contiene un valor especfico. Una variable se refiere directamente a un valor y un apuntador se refiere indirectamente a un valor. Apuntadores usados en C debido a que a veces son la nica manera de expresar un clculo. Se puede llegar a obtener un cdigo ms compacto y eficiente. Cuando se emplean sin cuidado pueden crear programas imposibles de entender.

Cuentan con una declaracin propia. Los apuntadores disponen de dos operadores: El operador unario o mondico & devuelve la direccin de memoria de una variable; El operador de indireccin o des referencia * devuelve el ``contenido de un objeto apuntado por un apuntador''. 3.6.- Apuntadores a arreglos Puede provocar confusin el uso de arreglos de dos dimensiones y un arreglo de apuntadores. Considerar: int a[10][10]; El uso de a y b puede ser parecido, desde el momento en que a[5][5] y b[5][5] son referencias validas a un int El arreglo a es un arreglo verdadero, existen 100 celdas de memoria asignadas y se efecta el clculo de subndices rectangulares convencional para localizar un elemento dado Sin embargo, a b la declaracin solo le asigna 10 apuntadores, cada uno de los cuales deber de apuntar a un arreglo de enteros La desventajas de b son: Ocupa ms espacio, suponiendo que cada uno apunta a un arreglo de 10 elementos, el tamao ser de 10 apuntadores ms 100 elementos.

Se debe de crear el espacio de los arreglos antes de asignarlos. La declaracin b tiene dos ventajas: El acceso se hace ms rpido, una indereccin es ms rapida que el hacer una multiplicacin seguida de una suma. El tamao de los arreglos apuntados por cada una de las diez localidades pueden ser diferentes. Un arreglo multidimensional puede ser visto en varias formas en C, por ejemplo: Un arreglo de dos dimensiones es un arreglo de una dimensin, donde cada uno de los ele Por lo tanto, la notacin a[n][m]

nos indica que los elementos del arreglo estn guardados rengln por rengln. Cuando se pasa una arreglo bidimensional a una funcin se debe especificar el nmero de columnas -- el nmero de renglones es irrelevante. La razn de lo anterior, es nuevamente los apuntadores. C requiere conocer cuantas son las columnas para que pueda brincar de rengln en rengln en la memoria. Considerando que una funcin deba recibir int a[5][35], se puede declarar el argumento de la funcin como: f( int a[][35] ) { ..... } o an f( int (*a)[35] ) { ..... } En el ltimo ejemplo se requieren los parnteis (*a) ya que [ ] tiene una precedencia ms alta que *. Por lo tanto: int (*a)[35]; declara un apuntador a un arreglo de 35 enteros, y por ejemplo si hacemos la siguiente referencia a+2, nos estaremos refiriendo a la direccin del primer elemento que se encuentran en el tercer rengln de la matriz supuesta, mientras que int *a[35]; declara un arreglo de 35 apuntadores a enteros. Ahora veamos la diferencia (sutil) entre apuntadores y arreglos. El manejo de cadenas es una aplicacin comn de esto. Considera: char *nomb[10]; char anomb[10][20]; En donde es vlido hacer nomb[3][4] y anomb[3][4] en C. Sin embargo: anomb es un arreglo verdadero de 200 elementos de dos dimensiones tipo char. El acceso de los elementos anomb en memoria se hace bajo la siguiente frmula 20*renglon + columna + direccin_base En cambio nomb tiene 10 apuntadores a elementos. NOTA: si cada apuntador en nomb indica un arreglo de 20 elementos entonces y solamente entonces 200 chars estarn disponibles (10 elementos).

Con el primer tipo de declaracin se tiene la ventaja de que cada apuntador puede apuntar a arreglos de diferente longitud. Considerar: char *nomb[] = { "No mes", "Ene", "Feb", "Mar", .... };

char anomb[][15] = { "No mes", "Ene", "Feb", "Mar", ... };

3.7.- Apuntadores a estructuras Pseudotipos (typedef): Es un alias para declarar variables de tipo struct. Apuntadores a estructuras: Se usa la notacin p->member Arreglos de estructuras: e.g. struct tipo x[8]; typedef struct { char member_1; int member_2; } s_type; s_type x={'U',2}, *p = &x; p->member_1 = 'R'; // Equivale a (*p).member_1 = 'R';

UNIDAD IV. UNIDADES


4.1- Subrutinas En computacin, una subrutina o subprograma (tambin llamada procedimiento, funcin o rutina), como idea general, se presenta como un subalgoritmo que forma parte del algoritmo principal, el cual permite resolver una tarea especfica. Algunos lenguajes de programacin, como Visual Basic .NET o Fortran, utilizan el nombre funcin para referirse a subrutinas que devuelven un valor.

Una subrutina al ser llamada dentro de un programa hace que el cdigo principal se detenga y se dirija a ejecutar el cdigo de la subrutina, en cambio cuando se llama a una macro, el compilador toma el cdigo de la macro y lo implanta donde fue llamado, aumentando as el cdigo fuente y por consiguiente el objeto.

4.2.- Unidades y/o libreras Escribir un programa en un solo fichero de texto est bien si el programa no es muy grande. Pero si el programa es grande, el fichero de texto puede volverse ingobernable. En estos casos, se hace necesario dividir el programa en mdulos o, en terminologa de Pascal, units Adems, las unidades son reusables. Puedes escribir una librera de cdigo ahora, y usarla en cuantos programas necesites. Y lo que es ms interesante, puedes distribuir esas libreras, y otros programadores pueden tener acceso a ellas. Por ejemplo, el Lazarus se basa en la librera LCL, y esa es la librera que usas cuando construyes entornos grficos. Imaginarse tener que programar todas esas libreras cada vez que empiezas un proyecto... realmente solo de pensarlo se hace imposible. La idea bsica es: no programes aquello que est ya programado. Es sorprendente lo que se puede llegar a hacer combinando unas cuantas libreras, y haciendo tu programa como si fuera el pegamento que las une y da sentido a una nueva aplicacin. Aqu aprenderemos tanto a crear tus propias libreras, como a usar las ya existentes.

4.3.- Encabezado ENCABEZADOS (*.H)Encabezado Funcin LIBMOUSE.h Encabezado con las declaraciones y la mayora de las rutinas de manejo del mouse TEC.h Encabezado con el escudo del Instituto Tecnolgico de Nuevo Laredo y el escudo de ISC BLT.h Encabezado de con rutinas de ventanas, marcos y letreros

4.4.- Declaracin Una declaracin es una construccin del lenguaje que asocia un nombre con una entidad. Ada distingue cuidadosamente entre declaraciones (que introducen nuevos identificadores) y sentencias (que utilizan dichos identificadores). Hay dos clases de declaraciones: Implcitas: que ocurren como consecuencia de la semntica de otra construccin. Explcitas: aparecen en el texto del programa y pueden ser: Declaraciones de tipo, subtipos, variables y constantes (objetos), excepciones, especificaciones de subprogramas o paquetes, clusulas de representacin o clusulas use. Los cuerpos de los subprogramas, paquetes y tareas.

4.5.- Cuerpo En este sencillo ejemplo (lo es, aunque ahora no te lo creas) se presentan seis secciones claramente diferenciadas. Como puedes ver, cada seccin est caracterizada por alguna palabra especial. Como por ejemplo, var para la seccin de variables. Estas palabras forman parte de un conjunto llamado palabras reservadas.

Muchas secciones no son obligatorias. Por tanto, en un programa no tienen por que aparecer todas estas palabras. Por otro lado, como ciertos compiladores exigen que el orden de las secciones sea el que aparece aqu, y otros no ponen ninguna restriccin, lo mejor que puedes hacer es seguir siempre este orden.

A continuacin tienes una tabla que empareja secciones con palabras reservadas. Adems aparecen en el orden correcto: Partes de un programa Cabecera (ttulo) Palabras reservadas

program uses const

Declaracin de unidades Declaracin de constantes Declaracin de tipos type Declaracin de variables

var function o procedure

Declaracin de subprogramas Cuerpo del programa 4.6.- Creacin 1 Sinopsis

begin, end y punto(.)

Programming is the art of expressing solutions to problems so that a computer can execute those solutions. Bjarne Stroustrup: "Programming: Principles and Practice Using C++". Escribir un programa es establecer el comportamiento de una mquina mediante una serie de algoritmos que definirn su funcionamiento. En el estado actual de la ciencia, este algoritmo se plasma por escrito utilizando un lenguaje artificial comprensible por el humano-programador. Generalmente estas instrucciones, que aqu se denominan cdigo fuente, vienen acompaadas de algunos datos en forma de texto o imgenes, contenidas en uno o varios ficheros denominados ficheros de recursos ("resources"). Sin embargo, las instrucciones y recursos solo pueden ser utilizadas por la mquina despus de un proceso de traduccin que es realizado por la propia mquina (puede ser distinta de la que ejecuta el programa). El proceso exige que el cdigo fuente sea transformado en una nueva secuencia de instrucciones segn un nuevo sistema de codificacin (el lenguaje mquina), y que los recursos adopten una disposicin particular. Este conjunto de instrucciones y datos, que constituyen el denominado ejecutable, corresponden a acciones concretas y datos, que pueden ser entendidas, ejecutadas y utilizados por la mquina.

En general este comportamiento pretende modelar o mimetizar el comportamiento de una entidad del mundo real, o de una abstraccin que hemos imaginado; y es de tipo genrico. Se pretende que la mquina se comporte como una funcin que acepta un conjunto de condiciones de entrada y devuelve como salida un comportamiento concreto y predecible para cada combinacin de las condiciones de entrada.

2 Presentacin del problema Hay bastante literatura sobre programacin en general; a los acadmicos les gusta hablar de "Teora de la Programacin", y mucha gente se ha dedicado a especular sobre el tema. Incluso hay modas al respecto [4]. Es posible confeccionar una lista de las caractersticas que "debe" y "no debe" tener un buen programa (incluyendo la del Jefe, que solo tiene dos puntos: "Que est para ayer; que salga barato"). El propio Stroustrup ( TC++PL) compara las condiciones para escribir un buen programa con las de escribir buena prosa. Segn l, existen dos respuestas: "Saber que se quiere decir" y "Prctica. Imitar buenos escritores". Ms adelante nos recuerda que aprender a manejar bien un lenguaje puede constar tanto tiempo y esfuerzo como aprender a expresarse en un lenguaje natural o tocar un instrumento. Por supuesto sera un atrevimiento por mi parte contradecir tan docta opinin, pero puestos a filosofar me gustara puntualizar que el verdadero problema est en el segundo punto de la segunda respuesta; la primera, aunque ciertamente importante, me parece la verdad de Perogrullo . Siempre me ha parecido que programar (programar bien) tiene mucho de arte. Me parece que debe ocurrir como con la msica; seguramente muchos pueden decir que debe tener una buena ejecucin de violn, pero imitar a Paganini debe ser harina de otro costal. Seguramente los profesores de armona saben que debe tener y no tener una buena sinfona, pero otra cosa debe ser imitar a Mozart. Bajando a la tierra; tampoco se trata aqu de hacer "Paganinis de la programacin C++" (ya me gustara para m); el mensaje que quisiera transmitir es doble: El contenido en un viejo Refrn Espaol: "La Universidad no presta lo que la naturaleza no da". Como suena un poco duro, aadir un consuelo para los que somos menos dotados; un proverbio que le hace tiempo, en lnea con la respuesta de Stroustrup: "Por el dinero del trabajo los Dioses lo venden todo".

A continuacin se comentan brevemente los pasos imprescindibles en la creacin de un programa C++. Vaya por delante, que las anotaciones de los puntos 3, 4 y 5 son opinin del que suscribe basados en la propia experiencia, por tanto totalmente subjetivos y opinables. 3 Comprender el problema. "Custom development is that murky world where a customer tells you what to build, and you say, "are you sure?" and they say yes, and you make an absolutely beautiful spec, and say, "is this what you want?" and they say yes, and you make them sign the spec in indelible ink, nay, blood, and they do, and then you build that thing they signed off on, promptly, precisely and exactly, and they see it and they are horrified and shocked, and you spend the rest of the week reading up on whether your E&O insurance is going to cover the legal fees for the lawsuit you've gotten yourself into or merely the settlement cost. Or, if you're really lucky, the customer will smile wanly and put your code in a drawer

and never use it again and never call you back". Joel on Software "Set Your Priorities" www.joelonsoftware.com "As more became known about what people wanted to do with computer, it became clear that there would always be increasingly more complex problems to solve. A part of that realization is the realization that our ability to accurately describe the problem determines the ability for the problem to be solved. Most people are incapable of clearly and precisely articulating -- to the level necessary -- the problems that they're trying to solve. This is a problem that is getting larger and not smaller". Robert Bogue (Jupitermedia Corp) en "Breaking Down Software Development Roles".

"Often, a problem is only fully understood through the process of programming a solution for it". Bjarne Stroustrup: "Programming: Principles and Practice Using C++". Esta es la tpica obviedad que a veces se pasa por alto. Hemos dicho que escribir un programa es establecer el comportamiento de una mquina; parece lo ms natural del mundo enterarse primero de cual es ese comportamiento. Tener una imagen mental lo ms clara posible de las caractersticas de lo que pretendemos modelar. Esta cuestin es lo que los tericos denominan el "espacio" del problema, "'What' domain" en la literatura inglesa.

A esta fase se la suele denominar anlisis, y mi consejo particular es que despus de una primera toma de contacto, el segundo paso sea definir de la forma ms detallada posible el principio y el final del problema. Es decir: cual es la informacin de partida (incluyendo su formato y en que soporte se recibe) y cual es la informacin final y en que soporte se proporcionar; no es lo mismo mostrar una imagen que componer una factura o disparar un proceso si un sensor analgico-digital nos suministra una determinada seal (por citar algn ejemplo).

Normalmente en ambas cuestiones tiene mucho que decir el cliente [2], es lo que se llama especificacin; el resto (lo que hay entre los datos de entrada y la salida), debe rellenarlo el programador. Generalmente si se tienen bien definidos ambos extremos, se tiene resuelta la mitad del problema; cuando se tengan diseados los ficheros se tendrn dos terceras partes -ver a continuacin-. Este sistema tiene adems la ventaja de poner inmediatamente de manifiesto las indefiniciones de partida; a veces los clientes no saben exactamente qu desean y hay que ayudarles a centrar el problema.

Dentro de esta fase tiene especialsima importancia el tema de los lmites; esto se refiere al orden de magnitudes que se manejarn. De que rango sern las magnitudes

numricas? Podrn adoptar valores negativos? Hay informacin alfanumrica? Como son de largas estas cadenas?. Especialmente si el programa implica diseo de archivos (como es casi seguro), Cual podr llegar a ser su tamao dentro de la vida del programa?. Si se manejan ficheros u objetos binarios, Como son de grandes? Que concepto tiene el cliente de los que sera "rpido" o "lento"? (milisegundos, minutos, horas?). En esta fase sea especialmente precavido y no se crea a pi juntillas todo lo que le digan (intente hacer de abogado del diablo).

Como postre, disee las lneas maestras de una estrategia de recuperacin de errores de ejecucin, incluyendo que har con los no recuperables (errores fatales). Piense por ejemplo que si algn da lo llaman para ver "que ha pasado", quizs le interese disponer de un volcado de texto ASCII en el disco con una descripcin del estatus del programa como parte de las funciones de salida ( 1.5). Hoy da, cuando se empieza a hablar de frigorficos que avisarn de que faltan provisiones o de lavadoras que avisarn al tcnico si se estropean, no estara de ms que sus programas estuviesen a la altura de las circunstancias.

4 Disear los ficheros y mdulos

Si el programa debe utilizar ficheros que no vengan impuestos (ya existentes), y suponiendo que todo lo anterior est suficientemente claro, este es el momento de hacerlo. Ponga por escrito la especificacin de tales ficheros, incluyendo el nombre que dar a las variables y, en su caso, el que tendrn en el disco o almacenamiento externo. Esto puede concretarse quizs a la definicin de algunas estructuras ( 4.5). En esta fase es posible que tenga que repreguntar alguna cosa que se pas por alto.

Teniendo ya una imagen ms o menos clara de lo que har su programa, si ste es mediano o grande, es posible que todava tenga que realizar una labor previa antes de ponerse a escribir el cdigo: disear a grandes rasgos cuales sern los mdulos del programa; mdulos que se correspondern aproximadamente con la distribucin del cdigo en ficheros fuente independientes. Quizs tenga que decidir tambin si algunas partes aparecern como libreras [1]. Recuerde lo indicado al respecto al tratar de los Subespacios de Nombres ( 4.1.11).

Esta fase es especialmente importante en el caso de programas muy grandes, cuyo desarrollo se reparte entre varios programadores que se encargan de uno o varios de

estos mdulos. En estos casos, el anlisis, la especificacin, la subdivisin en partes (con sus especificaciones particulares), y la asignacin de estas como tareas a los programadores, lo habr realizado el jefe de programacin y desarrollo.

5 Escribir el cdigo

Suponiendo cumplimentados los pasos anteriores, el programador est en condiciones de construir una imagen mental clara de como ser esa conexin entre la informacin de entrada y la salida, es lo que se denomina "espacio" de la solucin ("'How' domain"); su forma concreta es justamente el fuente del programa que se pretende. La codificacin consiste justamente trasportar a papel (en el lenguaje de programacin elegido) la imagen mental de esa conexin.

Para escribir el cdigo fuente de un programa C++ solo se puede utilizar un subconjunto de 96 caracteres del juego total de caracteres US-ASCII ( 2.2.1a). Son los siguientes 4.7.- Declaracin dentro de un programa 1 Sinopsis La declaracin ( 4.1.2) da a conocer la funcin al compilador, de forma que a partir del punto de declaracin, ya se pueden realizar invocaciones a la misma. A su vez, la definicin estar en algn otro punto del programa, tal vez en una librera externa (en forma ya compilada) o en otro mdulo de programa (como texto fuente).

Una funcin puede ser declarada varias veces en un mismo programa, y las declaraciones pueden aparecer en cualquier orden; en un fichero fuente o en varios, pero en cualquier caso antes de su uso, es decir: antes de cualquier invocacin a la funcin [5]. Adems de declarar el nombre de la funcin y el tipo devuelto (por defecto se supone int ) se declaran tambin el tipo de los parmetros. 2 Sintaxis: [extern] <tipo-devuelto> nombre-funcion () [extern] <tipo-devuelto> nombre-funcion (<tipo>, ...) // 2a // 2b

[extern] <tipo-devuelto> nombre-funcion (<tipo> <parametro>, ... ) // 2c 2.1 Ejemplos:

extern int funcion1 (); extern int funcion1 (void); funcion2 (char, int); int funcion2 (char, int);

// no acepta ningn argumento // mejor que la anterior // por defecto supone que devuelve int // mejor que la anterior

char funcion3 (char c, int i); // incluye nombres de parmetros 2.2 Comentario El especificador <tipo-devuelto> es opcional. Por defecto se supone int, as que las declaraciones que siguen son equivalentes [4]: int func (<tipo> <parmetro>, ...) func (<tipo> <parmetro>, ...) Nota: los compiladores MS Visual C++ y Borland C++ admiten que ciertos especificadores opcionales acompaen a la declaracin de funciones y otros objetos. Tales especificadores son de utilidad en circunstancias especficas ( 4.4.1b)

S-ar putea să vă placă și