C++

El lenguaje C fue desarrollado en Laboratorios Bell para su uso en investigación y se caracteriza porun gran número de  propiedades que lo hacen ideal para usos científicos y de gestión.
Es un Lenguaje de programación estructurado y posee una amplia librería de funciones que lo hacen uno de los lenguajes másusados por los programadores.
A continuación le dispongo  algunos ejemplos  desarrollados utilizando la aplicación: PSeInt, espero les resulte de utilidad, para comprender como debemos pensar cuando programamos en Lenguaje C:

1.)    Programa de la Resolvente:

Proceso Resolvente

Definir a como real;

Definir b como real;

Definir c como real;

Definir x1 como real;

Definir x2 como real;

Definir i como real;

Definir vr como real;

Escribir “Este Programa Permite Calcular las Raices de”;

Escribir “una función cuadratica”;

Escribir “escriba el valor de a”;

leer a;

Escribir “escriba el valor de b”;

leer b;

Escribir “escriba el valor de c”;

leer c;

i<-b^2-4*a*c;

si i < 0 Entonces

i<-i*(-1);

vr<- rc(i);

x1 <- (-b+vr)/(2*a);

x2 <- (-b-vr)/(2*a);

Escribir “El valor de x1 es una raiz imaginaria”;

Escribir “El valor de x1 debe multiplicarse por raiz_cuadrada(-1) y x1 es igual a :”,x1;

Escribir “El valor de x2 es una raiz imaginaria”;

Escribir “El valor de x2 debe multiplicarse por raiz_cuadrada(-1) y x2 es igual a :”,x2;

Sino

vr<- rc(i);

x1 <- (-b+vr)/(2*a);

x2 <- (-b-vr)/(2*a);

Escribir “El valor de x1 es igual a :”,x1;

Escribir “El valor de x2 es igual a :”,x2;

FinSi

FinProceso

Diagrama de la resolvente:

diagrama de la resolvente

1.)    Buscar Mayor y Menor

Proceso Buscar_Mayor_Menor

definir a Como Entero;

definir b como Entero;

definir c como Entero;

a<-0;

b<-0;

c<-0;

Escribir “Este programa muestra el mayor y el menor de tres numeros enteros”;

Escribir “Escribir el Valor de A”;

Leer a;

Escribir “Escribir el Valor de b”;

Leer b;

Escribir “Escribir el Valor de c”;

Leer c;

Si a = b Entonces

Si a < c Entonces

Escribir “A y B son Iguales:”,a;

Escribir “A y B son Menores:”,a;

Escribir “C Es el Mayor:”,c;

Sino

si c < a Entonces

Escribir “A y B son Iguales:”,a;

Escribir “A y B son los Mayores:”,a;

Escribir “C Es el Menor:”,c;

FinSi

FinSi

FinSi

Si b = c Entonces

Si b < a Entonces

Escribir “B y C son Iguales:”,b;

Escribir “B y C son Menores:”,b;

Escribir “A Es el Mayor:”,a;

Sino

si a < b Entonces

Escribir “B y C son Iguales:”,b;

Escribir “B y C son los Mayores:”,b;

Escribir “A Es el Menor:”,a;

FinSi

FinSi

FinSi

Si a = c Entonces

Si a < b Entonces

Escribir “A y C son Iguales:”,a;

Escribir “A y C son Menores:”,a;

Escribir “B Es el Mayor:”,b;

Sino

si b < A Entonces

Escribir “A y C son Iguales:”,a;

Escribir “A y C son los Mayores:”,a;

Escribir “B Es el Menor:”,b;

FinSi

FinSi

FinSi

Si a = b  Entonces

Si b = c Entonces

Escribir “A, B y C son Iguales:”,a;

FinSi

FinSi

si a > b Entonces

si b > c Entonces

Escribir “A es el Mayor:”,a;

Escribir “C es el Menor:”,c;

FinSi

Sino

Si b > a Entonces

Si a > c Entonces

Escribir “B es el Mayor:”,b;

Escribir “C es el Menor:”,c;

FinSi

FinSi

FinSi

si a > c Entonces

si c > b Entonces

Escribir “A es el Mayor:”,a;

Escribir “B es el Menor:”,b;

FinSi

Sino

Si c > a Entonces

Si a > b Entonces

Escribir “C es el Mayor:”,c;

Escribir “B es el Menor:”,b;

FinSi

FinSi

FinSi

si b > c Entonces

si c > a Entonces

Escribir “B es el Mayor:”,b;

Escribir “A es el Menor:”,a;

FinSi

Sino

Si c > b Entonces

Si b > a Entonces

Escribir “C es el Mayor:”,c;

Escribir “A es el Menor:”,a;

FinSi

FinSi

FinSi

FinProceso

Diagrama de Flujo de Buscar Mayor y Menor

diagrama de mayor y menor

4.- Calculo de física

 

Proceso Calculo_Distancia

definir op como numerica;

definir d como real;

definir v como real;

definir t como real;

d<- 0;

v<- 0;

t<- 0;

op<- 0;

escribir “Este programa permite calcular algunas”;

escribir “formulas de fisica como la velocidad”;

escribir “Tiempo y Distancia”;

escribir “Escoja 1 para calcular Velocidad”;

escribir “Escoja 2 para calcular Distancia”;

escribir “Escoja 3 para calcular Tiempo”;

leer op;

 

 

Segun op Hacer

1:

escribir “usted escogió calcular Velocidad”;

escribir “Escriba el valor del Tiempo”;

leer t;

escribir “Escriba el valor de la distancia”;

leer d;

Mientras t = 0 Hacer

si t = 0 Entonces

escribir “el tiempo no puede ser cero vuelva a colocarlo”;

escribir “Escriba el valor del Tiempo”;

leer t;

FinSi

FinMientras

v <- d/t;

escribir “El Valor de la Velocidad es: “,v;

2:

escribir “usted escogió calcular Distancia”;

escribir “Escriba el valor del Tiempo”;

leer t;

escribir “Escriba el valor de la Velocidad”;

leer v;

d <- v*t;

escribir “El Valor de la Distancia es: “,d;

3:

escribir “usted escogió calcular Tiempo”;

escribir “Escriba el valor de la Velocidad”;

leer v;

escribir “Escriba el valor de la distancia”;

leer d;

Mientras v = 0 Hacer

si v = 0 Entonces

escribir “La Velocidad no puede ser cero vuelva a colocarlo”;

escribir “Escriba el valor de la Velocidad”;

leer v;

FinSi

FinMientras

t<- d/v;

escribir “El Valor del Tiempo es: “,t;

De Otro Modo:

Escribir “Opcion Invalida fin del Programa”;

FinSegun

FinProceso

 

Diagrama de Flujo de Cálculo de física

diagrama calculo de fisica

A continuación les dispongo algunos ejemplos que puede descargar, espero les resulten de utilidad:

Calculo de intereses anuales y mensuales

Aqui les dejo un ejemplo sencillo, de un programa desarrollado en C++.

En este ejemplo logrará verificar:

  • Estructura de un programa en C++
  • Como incluir librerias y archivos de cabeceras
  • Como hacer comentarios en nuestros programas
  • Declaración de variables (Enteras y de tipo caracter)
  • Mostrar datos por pantalla
  • Capturar datos por pantalla
  • Uso de las funciones
  • Operadores aritmeticos – logicos – relacionales
  • Uso del ciclo repetitivo mientras (while)
  • Uso del ciclo repetitivo for
  • Calculos

Es importante señalar que dependiendo del tipo de archivo de cabecera incorporado en el programa se podran utilizar unas instrucciones u otras, por ejemplo:
Para capturar datos se puede utilizar: scanf ó cin y de igual manera para mostrar datos por pantalla se puede utilizar printf ó cout.

A continuación les coloco el archivo ejemplo para que lo descarguen, una vez descargado deben abrir el archivo, copian el programa y lo pegan en el editor del compilador, recuerden guardarlo (.cpp), luego deben compilarlo y ejecutarlo <Exitos amigos>.

Descargar el programa demo

Le recomiendo que si no logra entender algo de lo descrito en este pequeño programa, es importante que se documente, en internet existen muchos manuales gratis para descargar.

Trabajando con arreglos.

Un arreglo se compone de elementos de igual tamaño almacenados linealmente en posiciones de memoria consecutiva.

Como declaramos un arreglo.

Declaraciones de un arreglo

La sintaxis de declaración de arreglos es:

tipo nombre_arreglo [numero_de_elementos];

Los siguientes son dos ejemplos de declaraciones de arreglos válidas en C/C++ :

int calificaciones[5]; /*Un arreglo de 5 enteros */

char nombre[20];          /*Un arreglo de 20 caracteres */

Asignación de un arreglo:

nombre_variable[índice] = expresión del tipo <tipo>

Esta instrucción asigna el valor asociado de la expresión a la posición índice del arreglo nombre_variable. El índice debe ser una expresión del tipo entero en el rango [0, longitud-1]. Cabe destacar que C++ no chequea que el valor de la expresión sea menor a longitud, simplemente asigna el valor a esa posición de memoria como si formara parte del arreglo.

Acceso al contenido de un arreglo:

nombre_variable[índice] es valor del tipo <tipo> que puede ser asignado a una variable, o pasado como parámetro, imprimirlo, etc.

A continuación les dispongo un ejemplo sencillo donde podran visualizar lo que les he explicado:

arreglo

Descargarlo, colocarlo en visor de c++ compilarlo y a practicar.

Cadenas de caracteres

En C,C++ las cadenas de caracteres no son más que arreglos de caracteres, salvo que a este tipo de arreglos el compilador les da un tratamiento especial. Usted puede manipular las cadenas de caracteres de la misma manera en que manipula cualquier otro tipo de arreglo, sin embargo, es preferible hacer uso de una librería estándar especialmente escrita para manipulación de cadenas de caracteres, aquí me refiero a la librería <string.h> la cual viene incluida con todo compilador de C,C++.

La biblioteca string

Los compiladores de C, C++ dan soporte a la biblioteca de funciones <string.h>, misma que accesible por medio de la directiva #include <string.h>. No veremos en detalle todas las funciones contenidas en dicha biblioteca, y nos limitaremos a mostrar algunos ejemplos de ciertas funciones importantes.
strlen(): Obtener longitud de cadenas

Sintaxis: size_t strlen(const char *s);

Comentarios: La función strlen() devuelve la longitud de la cadena s.

strcpy(): Copiar cadenas

Sintaxis: char *stpcpy(char *dest, const char *src);

Comentarios: stpcpy copia la cadena src hacia dest, la función termina hasta haber encontrado en src el caracter de terminación null.

strcat(): Concatenar cadenas

Sintaxis: char *strcat(char *dest, const char *src);

Comentarios: strcat agrega la cadena src a dest, la función termina hasta haber encontrado en src el caracter de terminación null.

strlwr(): Convertir a minúsculas.

Sintaxis: char *strlwr(char *dest);

Comentarios: strlwr convierte todos los caracteres alfabéticos ( ‘A’ .. ‘Z’ ) en dest a sus correspondientes caracteres alfabéticos ( ‘a’ .. ‘z’ ).

strupr(): Convertir a mayúsculas.

Sintaxis: char *strupr(char *dest);

Comentarios: strupr convierte todos los caracteres alfabéticos ( ‘a’ .. ‘z’ ) en dest a sus correspondientes caracteres alfabéticos ( ‘A’ .. ‘Z’ ).

strchr(): Buscar caracter ( hacia adelante )

Sintaxis: char *strchr(char *s, int c);

Comentarios: strchr busca en s el caracter c. La busqueda se lleva a cabo desde el inicio hasta el final de s.

Regreso: si la operación es exitosa strchr regresa un puntero hacia la primera ocurrencia de c en s, en caso contrario strchr regresa null.
strrchr(): Buscar caracter ( hacia atras )

Sintaxis: char *strrchr(char *s, int c);

Comentarios: strchr busca en s el caracter c. La busqueda se lleva a cabo desde el final hasta el inicio de s.

Regreso: si la operación es exitosa strchr regresa un puntero hacia la última ocurrencia de c en s, en caso contrario strchr regresa null.
strstr(): Buscar subcadena

Sintaxis: char *strstr(const char *s1, char *s2);

Comentarios: strstr busca en s1 la subcadena s2. La busqueda se lleva a cabo desde el el inicio hasta el final de s1.

Regreso: si la operación es exitosa strstr regresa un puntero hacia la primera ocurrencia de s2 en s1, en caso contrario strstr regresa null.

Para que pueda verificar como trabaja cada una de las funciones de manipulación de cadenas, a continuación descargue los siguientes ejemplos, copielos en su editor c++, compilelo y verifique su funcionamiento, es importante que usted haga todas las modificaciones que considere prudente, para lograr así un mayor aprovechamiento de los ejercicios:

cadena

convertir

Como colocar el cursor en un lugar especifico de la pantalla

La función gotoxy (int columna, int fila) es una función declarada en el encabezado <conio.h>, la cual viene en los compiladores de la línea de Turbo C (y también Borland C++) de la compañía Borland. Si esta utilizando  otro compilador debe de buscar una función equivalente. En el compilador Dev C++ hay una emulación de las funciones declaradas en <conio.h>, pero antes tiene que bajarse esta librería y compilarla para poder usarla. Windows ofrece un conjunto de funciones para manejar la consola, entre las cuales está una equivalente a gotoxy, pero para poder usar estas funciones tiene que verificar si su compilador puede usarlas. Esto lo puede ver buscando el archivo de encabezado windows.h en el directorio include de su compilador. La función es SetConsoleCursorPosition (HANDLE hConsoleOutput, COORD coord), pero su uso no es inmediato como la función gotoxy. A continuación le recomiendo descargar los siguientes archivos, en ellos les  muestro el uso de las funciones indicadas.

Luego de descargar estos archivos, ejecute copiar y pegar su contenido en su compilador y cree un nuevo archivo, con el nombre que usted desee, ejecute todos los cambios y practique, con estos ejemplos, lo importante es entender lo que hace cada función:

menu_gotoxy

menu_setpos

Estos son sólo pequeños ejemplos, usted debe crear su propio menú, utilizando algunas de estas ideas que humildemente les he desarrollado, espero le sean de utilidad.

Manejo de archivos.

Regularmente requerimos almacenar cierta cantidad de datos de forma más o menos permanente. La memoria del computador como sabemos es volatil, por tal motivo cuando estamos programando y solicitamos los datos por pantalla, cada valor lo almacenamos en variables ejecutamos los calculos respectivos, pero no lo almacenamos en ninguna parte.

En este sentido, cabe destacar que los archivos los podemos clasificar según el tipo de acceso, en varias categorías:

  1. Dependiendo de la dirección del flujo de datos:
    • De entrada: los datos se leen por el programa desde el archivo.
    • De salida: los datos se escriben por el programa hacia el archivo.
    • De entrada/salida: los datos pueden se escritos o leídos.
  2. Dependiendo del tipo de valores permitidos a cada byte:
    • De texto: sólo están permitidos ciertos rangos de valores para cada byte. Algunos bytes tienen un significado especial, por ejemplo, el valor hexadecimal 0x1A marca el fin de fichero. Si abrimos un archivo en modo texto, no será posible leer más allá de un byte con ese valor, aunque el fichero sea más largo.
    • Binarios: están permitidos todos lo valores para cada byte. En estos archivos el final del fichero se detecta de otro modo, dependiendo del soporte y del sistema operativo. La mayoría de las veces se hace guardando la longitud del fichero. Cuando queramos almacenar valores enteros, o en coma flotante, o imágenes, etc, deberemos usar este tipo de archivos.
  3. Según el tipo de acceso:
    • Archivos secuenciales: imitan el modo de acceso de los antiguos ficheros secuenciales almacenados en cintas magnéticas y
    • Archivos de acceso aleatorio o directos: permiten acceder a cualquier punto de ellos para realizar lecturas y/o escrituras.
  4. Según la longitud de registro:
    • Longitud variable: en realidad, en este tipo de archivos no tiene sentido hablar de longitud de registro, podemos considerar cada byte como un registro. También puede suceder que nuestra aplicación conozca el tipo y longitud de cada dato almacenado en el archivo, y lea o escriba los bytes necesarios en cada ocasión. Otro caso es cuando se usa una marca para el final de registro, por ejemplo, en ficheros de texto se usa el carácter de retorno de línea para eso. En estos casos cada registro es de longitud diferente.
    • Longitud constante: en estos archivos los datos se almacenan en forma de registro de tamaño contante. En C usaremos estructuras para definir los registros. C dispone de funciones de librería adecuadas para manejar este tipo de ficheros.
    • Mixtos: en ocasiones pueden crearse archivos que combinen los dos tipos de registros, por ejemplo, dBASE usa registros de longitud constante, pero añade un registro especial de cabecera al principio para definir, entre otras cosas, el tamaño y el tipo de los registros.

En cuanto a cómo se definen estas propiedades, hay dos casos. Si son binarios o de texto o de entrada, salida o entrada/salida, se define al abrir el archivo, mediante la función fopen en C o mediante el método open de fstream en C++.

En C, los archivos admiten seis modos en cuanto a la dirección del flujo de datos:

  • r: sólo lectura. El fichero debe existir.
  • w: se abre para escritura, se crea un fichero nuevo o se sobrescribe si ya existe.
  • a: añadir, se abre para escritura, el cursor se situa al final del fichero. Si el fichero no existe, se crea.
  • r+: lectura y escritura. El fichero debe existir.
  • w+: lectura y escritura, se crea un fichero nuevo o se sobrescribe si ya existe.
  • a+: añadir, lectura y escritura, el cursor se situa al final del fichero. Si el fichero no existe, se crea.

En cuanto a los valores permitidos para los bytes, se puede añadir otro carácter a la cadena de modo:

  • t: modo texto. Normalmente es el modo por defecto. Se suele omitir.
  • b: modo binario.

Funciones en C++, para manipulación de los archivos:

FILE:

C define la estructura de datos FILE en el archivo de cabecera “stdio.h” para el manejo de archivos.

La definición de ésta estructura depende del compilador, pero en general mantienen un campo con la posición actual de lectura/escritura, un buffer para mejorar las prestaciones de acceso al fichero y algunos campos para uso interno.

fopen:

Sintaxis:

FILE *fopen(char *nombre, char *modo);

ésta función sirve para abrir y crear archivos en disco. El valor de retorno es un puntero a una estructura FILE. Los parámetros de entrada son:

  1. nombre: una cadena que contiene un nombre de archivo válido, esto depende del sistema operativo que estemos usando. El nombre puede incluir el camino completo.
  2. modo: especifica en tipo de archivo que se abrirá o se creará y el tipo de datos que puede contener, de texto o binarios:
    • r: sólo lectura. El archivo debe existir.
    • w: se abre para escritura, se crea un archivo nuevo o se sobreescribe si ya existe.
    • a: añadir, se abre para escritura, el cursor se situa al final del archivo. Si el archivo no existe, se crea.
    • r+: lectura y escritura. El archivo debe existir.
    • w+: lectura y escritura, se crea un archivo nuevo o se sobreescribe si ya existe.
    • a+: añadir, lectura y escritura, el cursor se situa al final del archivo. Si el archivo no existe, se crea.
    • t: tipo texto, si no se especifica “t” ni “b”, se asume por defecto que es “t”
    • b: tipo binario.

fclose:

Sintaxis:

int fclose(FILE *fichero);

Es importante cerrar los archivos abiertos antes de abandonar la aplicación. Esta función sirve para eso. Cerrar un archivo almacena los datos que aún están en el buffer de memoria, y actualiza algunos datos de la cabecera del fichero que mantiene el sistema operativo. Además permite que otros programas puedan abrir el archivo para su uso. Muy a menudo, los archivos no pueden ser compartidos por varios programas.

Un valor de retorno cero indica que el archivo ha sido correctamente cerrado, si ha habido algún error, el valor de retorno es la constante EOF. El parámetro es un puntero a la estructura FILE del fichero que queremos cerrar.

fgetc:

Sintaxis:

int fgetc(FILE *fichero);

Esta función lee un carácter desde un archivo.

El valor de retorno es el carácter leído como un unsigned char convertido a int. Si no hay ningún carácter disponible, el valor de retorno es EOF. El parámetro es un puntero a una estructura FILE del archivo del que se hará la lectura.

fputc:

Sintaxis:

int fputc(int caracter, FILE *fichero);

Esta función escribe un carácter a un archivo.

El valor de retorno es el carácter escrito, si la operación fue completada con éxito, en caso contrario será EOF. Los parámetros de entrada son el carácter a escribir, convertido a int y un puntero a una estructura FILE del archivo en el que se hará la escritura.

feof:

Sintaxis:

int feof(FILE *fichero);

Esta función sirve para comprobar si se ha alcanzado el final del archivo. Muy frecuentemente deberemos trabajar con todos los valores almacenados en un archivo de forma secuencial, la forma que suelen tener los bucles para leer todos los datos de un archivo es permanecer leyendo mientras no se detecte el fin de archivo. Esta función suele usarse como prueba para verificar si se ha alcanzado o no ese punto.

El valor de retorno es distinto de cero sólo si no se ha alcanzado el fin de archivo. El parámetro es un puntero a la estructura FILE del archivo que queremos verificar.

rewind:

Sintaxis:

void rewind(FILE *fichero)

Es una función heredada de los tiempos de las cintas magnéticas. Literalmente significa “rebobinar”, y hace referencia a que para volver al principio de un archivo almacenado en cinta, había que rebobinarla. Eso es lo que hace ésta función, sitúa el cursor de lectura/escritura al principio del archivo.

fgets:

Sintaxis:

char *fgets(char *cadena, int n, FILE *fichero);

Esta función está diseñada para leer cadenas de caracteres. Leerá hasta n-1 caracteres o hasta que lea un retorno de línea. En este último caso, el carácter de retorno de línea también es leído.

El parámetro n nos permite limitar la lectura para evitar derbordar el espacio disponible en la cadena.

El valor de retorno es un puntero a la cadena leída, si se leyó con éxito, y es NULL si se detecta el final del fichero o si hay un error. Los parámetros son: la cadena a leer, el número de caracteres máximo a leer y un puntero a una estructura FILE del archivo del que se leerá.

fputs:

Sintaxis:

int fputs(const char *cadena, FILE *stream);

La función fputs escribe una cadena en un archivo. No se añade el carácter de retorno de línea ni el carácter nulo final.

El valor de retorno es un número no negativo o EOF en caso de error. Los parámetros de entrada son la cadena a escribir y un puntero a la estructura FILE del archivo donde se realizará la escritura.

fread:

Sintaxis:

size_t fread(void *puntero, size_t tamaño, size_t nregistros, FILE *fichero);

Esta función está pensada para trabajar con registros de longitud constante. Es capaz de leer desde un fichero uno o varios registros de la misma longitud y a partir de una dirección de memoria determinada. El usuario es responsable de asegurarse de que hay espacio suficiente para contener la información leída.

El valor de retorno es el número de registros leídos, no el número de bytes. Los parámetros son: un puntero a la zona de memoria donde se almacenarán los datos leídos, el tamaño de cada registro, el número de registros a leer y un puntero a la estructura FILE del archivo del que se hará la lectura.

fwrite:

Sintaxis:

size_t fwrite(void *puntero, size_t tamaño, size_t nregistros, FILE *fichero);
Ejemplo de uso:
fwrite(&Registro, sizeof(Registro), 1, alias);
De donde:
&Registro: Aqui se referencia la estructura creada
sizeof(registro): se determina el tamaña del registro de la estructura.
El 1: se refiere que le estamos indicando que grabe un solo registro
Alias: Constituye el apuntador al cual asignamos la apertura del archivo

Esta función también está pensada para trabajar con registros de longitud constante y forma pareja con fread. Es capaz de escribir hacia un archivo uno o varios registros de la misma longitud almacenados a partir de una dirección de memoria determinada.

El valor de retorno es el número de registros escritos, no el número de bytes. Los parámetros son: un puntero a la zona de memoria donde se almacenarán los datos leídos, el tamaño de cada registro, el número de registros a leer y un puntero a la estructura FILE del archivo del que se hará la lectura.

fprintf:

Sintaxis:

int fprintf(FILE *fichero, const char *formato, ...);

La función fprintf funciona igual que printf en cuanto a parámetros, pero la salida se dirige a un archivo en lugar de a la pantalla.

fscanf:

Sintaxis:

int fscanf(FILE *fichero, const char *formato, ...);

La función fscanf funciona igual que scanf en cuanto a parámetros, pero la entrada se toma de un archivo en lugar del teclado.

fflush:

Sintaxis:

int fflush(FILE *fichero);

Esta función fuerza la salida de los datos acumulados en el buffer de salida delarchivo. Para mejorar las prestaciones del manejo de archivos se utilizan buffers, almacenes temporales de datos en memoria, las operaciones de salida se hacen a través del buffer, y sólo cuando el buffer se llena se realiza la escritura en el disco y se vacía el buffer. En ocasiones nos hace falta vaciar ese buffer de un modo manual, para eso sirve ésta función.

El valor de retorno es cero si la función se ejecutó con éxito, y EOF si hubo algún error. El parámetro de entrada es un puntero a la estructura FILE del archivo del que se quiere vaciar el buffer. Si es NULL se hará el vaciado de todos los archvios abiertos.

Función Ftell()

Se usa la función ftell para conocer la posición actual del apuntador de un
archivo abierto. La posición se expresa en bytes (dirección física) contados desde el principio del archivo.

Su sintaxis de uso es el siguiente:

long int dir_fisica;

dir_fisica = ftell(alias);

Entendiendo que primero se debe declarar la variable que va almacenar la dirección fisica que se calcule, y el alias constituye el apuntador del archivo que se creo.

Para que pueda entender como se utilizan en conjunto estas funciones, debemos tener en cuenta la siguiente idea de trabajo:

  1. Lo primero que debemos hacer es crear nuestro apuntador, utilizando la función FILE.
  2. Luego debemos abrir nuestro archivo, tomando en cuenta el apuntador creado, utilizando la función FOPEN, considerando en que modo vamos a aperturar nuestro archivo, es importante señalar que aqui podemos hacer uso de las validaciones para comprobar si en archivo existe o no.
  3. Capturamos los valores almacenandolos en variables como ya lo sabemos, utilizando comandos como CIN y el COUT.
  4. Ahora procedemos a guardar los valores capturados en las variables en el archivo abierto, para ello podemos utilizar las funciones PUTC, FPUTS.
  5. Una vez grabado los datos, debemos cerrar el o los archivos, para ello utilizamos la función FCLOSE.

A continuación para que pueda jugar un poco con el lenguaje y pueda entender más a fondo como funciona, puede descargar los siguientes archivos, ellos contienen ejemplos sencillos de manipulación de archivos.

Descargar los ejemplos, abrir el archivo, copiar y colocarlos en su visor de lenguaje c++, compilarlos y ejecutarlos.

archivo1

archivo2

Este otro archivo presenta una forma bien concreta de como manipular archivos, de acuerdo a los procesos básicos de mantenimiento como lo constituye: (Incluir, Modificar, Consultar, Eliminar y Listar registros) ya considerando el trabajar con estructuras de archivos  y orientando el trabajo hacia la utilización de archivos binarios, con los cuales podemos manipular mejor los datos almacenados en los mismos. Para lograrlo se utiliza la función fseek():

Función: fseek

Resumen: Salta a una cierta posición de un Archivo

Include: stdio.h

Detalles: Desplaza la posición actual de lectura/escritura del fichero a otro punto. El desplazamiento puede ser positivo (avanzar), cero o negativo (retroceder). La posición de origen se puede indicar con la ayuda de tres constantes: SEEK_SET (0, comienzo), SEEK_CUR (1, actual), SEEK_END (2, final)

Parámetros: El identificador del fichero, el desplazamiento, la posición de origen

Devuelve: Un número cero (0)  si no ha habido problemas.

Descargue el archivo que se muestra a continuación: Una vez descargado, abralo y copielo en el editor de C++, guardelo, compilelo y ejecutelo:

manejodearchivo

Luego de ejecutarlo observará el siguiente Menu:

Por medio del cual usted podrá realizar todos los procesos de mantenimiento sobre archivo, tal como anteriormente se lo indique.

Manipulando archivos Aleatorios o Directos:

En esta sección mostrare  la manera de diseñar funciones que manipulan
registros en un archivo directo. A diferencia del archivo secuencial en el que se hace un recorrido secuencial para localizar la dirección del registro solicitado, en el archivo de acceso directo, se calcula la dirección física y
se posiciona el apuntador del archivo directamente en el registro solicitado usando la función fseek.

Cálculo de direcciones físicas:

Para poder reposicionar el apuntador de un archivo en un registro específico
es necesario calcular su dirección física correspondiente de acuerdo al espacio ocupado por sus registros predecesores.

Para convertir direcciones lógicas en direcciones físicas se utiliza la siguiente
fórmula:

long int dir_fisica, dir_logica;

dir_fisica = dir_logica *sizeof(Registro)

Tomando en cuenta que la función sizeof calcula el tamaño en Bytes de una variable o estructura.

A continuación les dejo un pequeño ejemplo muy parecido al anterior, pero en este estoy utilizando mas funciones, y sobre todo mostrando como se trabaja con archivos Directos, en donde para buscar información en ellos no debemos hacer un recorrido completo sino que lo ubicamos directamente con la función FSEEK.

La idea es que descaguen este archivo, copien su contenido y lo peguen en cualquier editor C y luego lo compilen:

manejodearchivo

A continuación les coloco el mismo programa anterior, pero en este les he trabajado un poco mas el uso de las funciones, les invito a que observen y analicen con detenimiento la forma como esta constuido el programa de “Incluir Registros en el Archivo”,  en este caso se trabajo con el uso de los ciclos y funciones.

Descargue el archivo,  abralo, copi su contenido y peguelo en cualquier editor c, luego simplemente compilelo y ejecutelo.

archivo

La idea es que con estos ejemplos usted pueda hacer todos los cambios que considere prudente para así poner en practica y sobre todo entender como trabaja este lenguaje.

Cabe destacar que estos programas carecen de muchas validaciones, los monto sólo para que puedan observar y practicar la programación en c++, pero validaciones como tamaño de los datos a capturar,  aceptación de un único valor así como la logica de ciclos iterativos para controlar preguntas como ¿Desea Guardar?, ¿Desea continuar?, etc, deben ser controladas por ustedes, ya que todo ese contenido es dado en clases y además a este nivel ya ustedes vieron o deben conocer Diagramación y Lógica.

De igual forma cualquier duda estoy a la orden.

!! Exitos !!

37 pensamientos en “C++”

  1. NECESITO UNA AYUDA! practicamente con la tabla ASCII teniendo el ciclo FOR puedo pintar ciertas cantidad igual de dicho comando para q visualmente se vea como una recta (en caso que sea el codigo ASCII:205).
    Ahora mi duda es, como puedo hacer el mismo proceso de formar una linea recta pero en forma VERTICAL y no horizontal con ese mismo codigo. EXISTE LA POSIVILIDAD? o obligatoriamente se hace punto por punto?
    SE AGRADESE UNA RESPUESTA URGENTE!, estoy trabado alli.. Gracias!

    1. Si es muy sencillo, lo único que debe hacer es crear dos ciclos FOR uno dentro de otro, de manera tal que miestras uno pinta toda la linea horizontal (columnas) otro pinte las verticales, las cuales serian las filas.

      Tal como lo puede verificar en este ejemplo. El cual lo dispongo aqui en beneficio de otras personas que les interese:
      Mis mas sinceras felicitaciones ya que definitivamente, usted esta poniendo en práctica lo dado en clases:

      void fondo()
      {
      //LINEA DE LA COLUMNA//
      int columna;
      for(columna=2;columna<=79;columna++)
      {
      gotoxy(columna,1);printf("%c",205);
      gotoxy(columna,25);printf("%c",205);
      gotoxy(columna,6);printf("%c",205);
      gotoxy(columna,10);printf("%c",205);
      gotoxy(columna,14);printf("%c",205);
      gotoxy(columna,18);printf("%c",205);
      }
      //LINEA DE LA FILA//
      int fila;
      for(fila=2;fila<=24;fila++)
      {
      gotoxy(1,fila);printf("%c",186);
      gotoxy(80,fila);printf("%c",186);
      }
      //LINEA VERTICALES DE DIVISIONES EN EL MENU//
      int x;
      for(x=14;x<=18;x++)
      {
      gotoxy(12,x);printf("%c",186);
      gotoxy(25,x);printf("%c",186);
      gotoxy(39,x);printf("%c",186);
      gotoxy(53,x);printf("%c",186);
      gotoxy(67,x);printf("%c",186);
      }
      //LINEA VERTICAL DE DIVISION EN LA OPCION//
      int j;
      for(j=22;j<=24;j++)
      {
      gotoxy(23,j);printf("%c",186);
      }
      //LINEA HORIZONTALES CORTAS DEL MENU//
      int y;
      for(y=2;y<=22;y++)
      {
      gotoxy(y,21);printf("%c",205);
      }
      //PUNTOS ADICIONALES DE CONECCION//
      gotoxy(80,10);printf("%c",185);
      gotoxy(80,14);printf("%c",185);
      gotoxy(80,18);printf("%c",185);
      gotoxy(80,6);printf("%c",185);
      gotoxy(80,1);printf("%c",187);
      gotoxy(23,21);printf("%c",187);
      gotoxy(80,25);printf("%c",188);
      gotoxy(1,25);printf("%c",200);
      gotoxy(1,1);printf("%c",201);
      gotoxy(12,18);printf("%c",202);
      gotoxy(25,18);printf("%c",202);
      gotoxy(39,18);printf("%c",202);
      gotoxy(53,18);printf("%c",202);
      gotoxy(67,18);printf("%c",202);
      gotoxy(23,25);printf("%c",202);
      gotoxy(12,14);printf("%c",203);
      gotoxy(39,14);printf("%c",203);
      gotoxy(25,14);printf("%c",203);
      gotoxy(53,14);printf("%c",203);
      gotoxy(67,14);printf("%c",203);
      gotoxy(1,6);printf("%c",204);
      gotoxy(1,10);printf("%c",204);
      gotoxy(1,14);printf("%c",204);
      gotoxy(1,18);printf("%c",204);
      gotoxy(1,21);printf("%c",204);
      return;
      }

    1. Gracias Richard.
      Estas herramientas son muy útiles, para todas aquellas personas que aun no migran, sus PC a Sistemas Operativos Basados en Tecnología Libre.

      Aprovecho la oportunidad para que se incorporen a impulsar el Proyecto Canaima GNU/Linux, ya que es un proyecto socio-tecnológico abierto, construido de forma colaborativa, centrado en el desarrollo de herramientas y modelos productivos basados en las Tecnologías de Información Libres (TIL).

      Aqui tienen su dirección Web: http://canaima.softwarelibre.gob.ve/

  2. Necesito una ayuda!
    Quiero saber como puedo validar para que cuando escriba en un campo de texto solo escriba caracteres alfabeticos; y validar que cuando precione una tecla de función o las de desplazamiento no me acepte como letra mayúscula, es decir hay algunas teclas que cuando presiono me acepta como letras mayúsculas y quiero que no las acepte, sino cuando solamente dígite las teclas alfabéticas.
    Por favor espero que me ayude!!

    1. Le pido disculpas no habia entrado para administrar mi Blog, queria saber si ya lo logró o aun requiere ayuda.
      Lo mas recomendable es que estas validaciones las haga por medio de JavaScrip. Dependiendo de lo que usted me responda le puedo aqui colocar algunos ejemplos.

  3. mil gracias por la informacion, muy completa y estructurada. me sirvieron de mucho los ejemplos.
    desde Mexico, estudiante de sistemas computacionales.

    1. Apreciado amigo Manuel.
      Gracias por sus comentarios, estamos a la orden. Me encuentro desarrollando otros ejemplos y además proximamente voy a subir todo un curso completo de java scrip. Lo estoy terminando.
      Desde Caracas – Venezuela, muchas Gracias.

  4. Woah! I’m really enjoying the template/theme of this blog. It’s simple, yet effective.
    A lot of times it’s tough to get that “perfect balance” between usability and visual appearance. I must say that you’ve done a excellent job with this.

    In addition, the blog loads super fast for me on Internet explorer.
    Excellent Blog!

    1. Thank you very much for your comment.

      My idea is that we always share our knowledge with humanity and for this we use the emergence of social networks.

      Gradually CONTINUE providing more information of interest to all.

      Thanks from Caracas – Venezuela

  5. La verdad es que me sirvio bastante muy bien estructurado , yo lo intente hacer con una clase separando las funciones void y el struct en un .h ,luego en un cpp las funciones y el menu , en un ultimo principal) nada mas llamo al menu , pero a la hora de compilar me tira un warnin que dice : “Advertenci warning C4700: se utilizó la variable local ‘apuntador_datos’ sin inicializa”..
    esta variable es la que utilizo en el main para el archivo “FILE *apuntador_datos ”

    Desde Costa Rica saludos , muy bueno el aporte

  6. Whats up are using WordPress for your site platform?
    I’m new to the blog world but I’m trying to get started and set up
    my own. Do you need any coding knowledge to make your own blog?
    Any help would be really appreciated!

    1. Thanks for your feedback.
      There are a variety of options to create your blog, however I recommend wordpress.com, easy to administer, is highly versatile, very useful templates according to what you want to work.

      You need not be an expert in programming, to create and manage their own.

      After creating it, pass me your link I have available in my blog and you put me on yours.

      Thanks, from Caracas – Venezuela.

    1. Thanks for your feedback.
      Procures slowly continue to nurture, with many more interesting information in the area of technology.

      Thanks from Caracas – Venezuela

  7. Please let me know if you’re looking for a article writer for your weblog. You have some really great articles and I believe I would be a good asset. If you ever want to take some of the load off, I’d love to write
    some material for your blog in exchange for a link back to mine.
    Please shoot me an email if interested. Cheers!

  8. consulta necesito realizar un ejercicio en el cual solo acepte letras minúsculas en tu blog encontré los sgte. strlwr() y no se en realidad si hay alguna opción de validar que la letra ingresada solo sean minúsculas
    gracias si existe información al respecto saludos
    desde chile

    1. Gracias por sus comentarios Diego Cares.

      la función en c, que convierte caracteres de Mayusculas a Minisculas es:
      La función tolower() convierte un caracter a minúscula (A-Z a a-z).

      Lo que debe hacer es tomar la cadena de caracteres disponerla en un arreglo, recorrer el arreglo y evaluar caracter por caracter.

      Puede crear una función que haga esta operación y usted la invoca todas las veces que la requiera, pasandole como parámetro la cadena capturada.

      Es sólo una idea, aqui le envio ejemplo de código:

      #include
      #include // para tolower
      #include // UNICAMENTE EN BORLAND (NO ES ANSI C), permite usar getch()

      int main()

      {
      char letra;
      printf(“Ingrese Letra:\n”);
      fflush(stdin);
      scanf(“%c”,&letra);
      letra = tolower(letra);
      printf(“\nSu letra es:%c”,letra);
      getch(); // espera que se tipee un carácter
      }

      Otro ejemplo:

      #include
      #include // para tolower
      #include // UNICAMENTE EN GNU/LINUX – UNIX (SI ES ANSI C), permite usar read

      int main()

      {
      char letra;
      printf(“Ingrese Letra:\n”);
      fflush(stdin);
      scanf(“%c”,&letra);
      letra = tolower(letra);
      printf(“\nSu letra es:%c”,letra);
      system(“read”); // espera que se tipee un carácter
      }

      Estos ejemplos no son mios los tome de: http://es.wikipedia.org/wiki/Tolower

      También tiene ejemplo en: http://espanol.answers.yahoo.com/question/index?qid=20090119120107AAAleL2

      Espero le resulte de utilidad y muchas gracias por sus comentarios.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: