Escolar Documentos
Profissional Documentos
Cultura Documentos
INTRODUCCION
Unidad 9: Archivos
Tabla n° 4 Unidades correspondiente a cada capitulo propuesto en la guía Fuente: La Autora
Realizar
actualizaciones de
manera que se cumpla
todas las necesidades
de cambio de los
usuario.
NRO NRO
PREGUNTA
(SI) (NO)
1. ¿Sabes de Programación? 16 14
2. ¿Has Desarrollado un programa? 5 25
3. ¿Con que nociones cuentas acerca de la programación? ALTO MEDIO BAJO
8 11 11
4. ¿Has desarrollado un programa en lenguaje C++? 6 24
1. C 15
2. C++ 10
3. HTMLS 20
5. ¿Que lenguaje de programación 4. JAVA 3
5. JavaScript 9
has utilizado para desarrollar un
6. RUBY
programa ? (marcar varias opciones) 7. PYTHON
8. PASCAL
9. CLIPPER
10. NINGUNO 25
6. ¿De estos lenguaje de 1. C 25
2. C++ 25
programación cuales conoces?
3. HTMLS 30
(marcar varias opciones) 4. JAVA 3
5. JavaScript 15
6. RUBY
7. PYTHON
8. PASCAL
9. CLIPPER
10. NINGUNO
7 ¿Qué medios utiliza para estudiar 1. LIBROS 10
2. INTERNET 30
programación?
3. APUNTES 30
(marcar varias opciones) 4. EJERCICIOS 10
5. GUIAS 5
6. OTROS 6
Tabla n° 4 Tabulación de las encuestas de alumnos Fuente: La Autora
PREGUNTA SI NO
¿Sabes de Programación? 16 14
¿Has desarrollado un programa? 5 25
¿Con qué nociones cuentas acerca de la programación? Alto Medio Bajo
8 11 11
¿SABES DE PROGRAMACIÓN?
NO
47% SI
53%
¿HAS DESARROLLADO UN PROGRAMA?
SI
17%
NO
83%
ALTO
MEDIO 27%
37%
BAJO
36%
PREGUNTA SI NO
¿Has desarrollado un programa en lenguaje C++? 6 24
¿HAS DESARROLLADO UN PROGRAMA EN
LENGUAJE C++?
SI
20%
NO
80%
18%
1. C
31% 2. C++
3. HTMLS
4. JAVA
5. JavaScript
12%
6. RUBY
7. PYTHON
0%
8. PASCAL
0%
9. CLIPPER
0% 10. NINGUNO
4% 24%
0%
11%
0%
15%
1. C
26%
2. C++
3%
3. HTMLS
4. JAVA
5. JavaScript
6. RUBY
7. PYTHON
8. PASCAL
30%
9. CLIPPER
26% 10. NINGUNO
Medios de Estudios
7% 11%
5%
11% 1. LIBROS
2. INTERNET
3. APUNTES
4. EJERCICIOS
33%
5. GUIAS
6. OTROS
33%
PREGUNTA SI NO
¿Cree que los estudiantes de programación del trayecto I 5 0
del CUC mejorarían su nivel de conocimiento utilizando una
guía de programación práctica y básica de lenguaje C++?
¿Dispone Ud. de una guía para impartir sus clases de 5 0
programación?
GUÍA DE PROGRAMACIÓN PRÁCTICA Y BÁSICA DE LENGUAJE C++
0%
100%
0%
100%
1.3. Conclusiones.
A partir del estudio realizado en este capítulo se puede arribar a las siguientes
conclusiones:
.2 La Propuesta
Objetivo de la propuesta
2.2.2 Estrategia
La documentación de esta está guía esta dirigida a cualquier persona que
quiera iniciarse y aprender los primeros pasos de la programación y en espacial
a los estudiantes del colegio Universitario de Caracas que cursen la Unidad
Curricular “Algorítmica y Programación”.
Esta Guía de C++, es una recopilación de conceptos teóricos y ejercicios
sobre C++ propios de la autora, tomados de Internet y en libros de
programación, que fueron actualizados y probados por la autora, utilizando
para las pruebas los compiladores de Dev-C++, Borland C ++ y Linux de
manera que el estudiante obtenga una formación completa en cuanto a
programación.
Algoritmo y Programas
Estándares de Calidad en el Diseño de Algoritmos y Construcción de
Programas
Capítulos Trimestres
1 Trimestre 1
2 Trimestre 2
Tabla n° 6 Listas de Requisitos Fuente: La Autora
2.2.4 Programación
e
Algoritmo y Programas 10 Clases magistrales donde se
Estándares de Calidad en 10 impartirá la base teórica y se
el Diseño de Algoritmos y expondrán ejemplos aclaratorios. Una
Construcción de vez finalizado un tema teórico se
Programas impartirán sesiones de problemas.
Datos y Entidades 10
1
Primitivas La metodología usada será la
Metodología para el 10
exposición mediante el pizarrón,
Análisis y Planteamiento
retroproyector y computador.
de Problemas
Programación Estructurada 30
Programación Modular El profesor podrá solicitar la
30
Arreglos y Matrices 25 participación activa del estudiante
Tratamiento de Cadenas 25 mediante preguntas rápidas, teniendo
de Caracteres en cuenta los estudiantes que más
Estructuras de Registros 10 participen a la hora de evaluar.
Archivos 40
Prácticas en laboratorio con
resolución y entrega(diseño e
implementación de programas
escritos en C++).
nuevo.
Por esta razón, es fundamental que los estudiantes del trayecto I, obtengan la
máxima capacitación en programación y que sea capaz en un primer momento
de:
2.2.6 Diseño
Tabla 6 Características
2.2.7 Conclusiones
Como conclusión, se puede decir que en este capítulo se lograron los objetivos
del mismo, se mostraron:
CONCLUSIONES
1 C
2 C++
3 HTML5
4 Java
5 JavaScript
6 Ruby
7 Python
8 Pascal
9 Clipper
10
Ninguno
6.- ¿De estos lenguaje de programación cuales conoces ?
1 C
2
C++
3 HTML5
4 Java
5 JavaScript
6 Ruby
7 Pitón
8 Pascal
9 Clipper
10 Ninguno
1 Libros
2 Internet
3 Apuntes
4 Ejercicios
5 Guías
6 Otro
Si quedó algo importante que crees necesario incluir en esta encuesta, por
favor, se aceptan sugerencias.
Si _____ No______
Si_____ No______
ANEXO 2
HISTORIA:
Trabajando con un lenguaje llamado BCPL inventado por Martin Richards (que
luego influyó para crear el B de Ken Thompson), Dennis deseaba un lenguaje
que le permitiese manejar el hardware de la misma manera que el ensamblador
pero con algo de programación estructurada como los lenguajes de alto nivel.
Fue entonces que creó el C que primeramente corría en computadoras PDP-7
y PDP-11 con el sistema operativo UNIX. Pero los verdaderos alcances de lo
que sería éste, se verían poco tiempo después cuando Dennis volvió a escribir
el compilador C de UNIX en el mismo C, y luego Ken Thompson (diseñador del
sistema) escribió UNIX completamente en C y ya no en ensamblador.
C++ es un lenguaje de nivel medio pero no porque sea menos potente que
otro, sino porque combina la programación estructurada de los lenguajes de
alto nivel con la flexibilidad del ensamblador.
2. ESTRUCTURA DE LA GUÍA
3. ESTRATEGIA DE LA GUÍA
4. COMPILADORES DE C/C++
utilizar gcc y generar programas para Win32 (Windows 95, 98, ME,
GNU gcc/g++ El sistema GNU fue desarrollado para ser 100% software libre, libre
2.95.2 para en el sentido de que respeta la libertad del usuario.
Linux.
Casi todo GCC está escrito en C, aunque gran parte del front end de
Ada está escrito en Ada. El 30 de mayo de 2010 se anunció que se
comenzará a utilizar C++ en el desarrollo de GCC.
5. CAPÍTULO I
// Programa principal
void main( void )
{ // Empieza el bloque de la función principal
Instrucciones
} // Final del bloque de la función principal
Características:
Diagrama de Flujo:
3. Codificación.
4. Compilación y ejecución.
5. Verificación.
6. Depuración.
7. Mantenimiento.
8. Documentación.
Existe un teorema debido a [C.Böhm, G.Jacopini, Comm. ACM vol.9, nº5, 366-
371,1966] (Teorema Fundamental de la programación estructurada) que
establece lo siguiente:
“Todo programa propio se puede escribir utilizando únicamente las estructuras
de control secuencial, condicional e iterativa”
Un programa propio es aquel que:
Iteración
Es una estructura de control de ciclo.
INSTRUCCIÓN COUT.
cout << elemento1 << elemento2 << elemento 3 << ... << elementoN;
Ejemplo 2.
Ejemplo 3.
// Ejemplo4.cpp, ilustra el uso del operador de inserción << utilizado en forma de cascada.
#include <iostream.h>
void main( void )
{
cout << "15 más 27 es: " << ( 15 + 27 ) << endl;
}//Fin de main( )
Ejemplo 5.
// Ejemplo5.cpp, muestra como cout visualiza cadena de caracteres y números.
#include <iostream.h>
void main( void )
{
cout << "cout le permite visualizar cadenas de caracteres, números enteros\n";
cout << "y de punto flotante.\n\n";
cout << 1001;
cout << '\n';
cout << 1.2345;
} // Fin de main( )
Ejemplo 6.
/* Muestra como se puede utilizar un solo cout para escribir cadenas y números de diferentes
tipos.*/
#include <iostream.h>
void main( void )
{
cout << "cout visualiza cadenas " << "\n\n" << 1001 << '\n' << 1.2345;
} // Fin de main( )
INSTRUCCIÓN CIN.
Cin es un objeto de la clase istream, enlazado o conectado al dispositivo de
entrada estándar que normalmente es el teclado. El operador de Extracción de
flujo, como se utiliza en la siguiente instrucción, causa que un valor para la
variable entera calificación (suponiendo que calificación ha sido declarada
como int) se reciba desde CIN hacia la memoria:
Ejemplo 7.
// calcula la suma de dos enteros introducidos desde el teclado
#include <iostream.h> //Para cin y cout
void main( )
{
int x, y;
cout << “Introduzca dos números enteros: ”;
cin >> x >> y;
cout << “La suma de ” << x << “ y ” << y << “ es: ”
<< (x + y) << endl;
}//Fin de main( )
Ejemplo 8.
// Ejemplo8.cpp, asigna el número tecleado a la variable numero
#include <iostream.h>
void main(void)
{
int numero ; // El número leído desde el teclado
cout << "Digite su número ENTERO favorito y oprima INTRO: ";
cin >> numero;
cout << "Su número entero favorito es: " << numero << endl;
} //Fin de main()
Ejemplo 9.
Ejemplo 10.
// Ejemplo10.cpp, ilustra la lectura de datos de la clase caracter.
#include <iostream.h>
void main(void)
{
// Define las variables ingresadas y las inicializa con espacio en blanco.
char calificacion1 = ' ';
char calificacion2 = ' ';
char calificacion3 = ' ';
// Lectura/escritura de los datos del usuario
cout << "Introduzca una calificación (R,D,C,B,A): ";
cin >> calificacion1;
cout << "La calificación introducida fue: " << calificacion1 << endl << endl;
cout << "Introduzca una calificación (R,D,C,B,A): ";
cin >> calificacion2;
cout << "La calificación introducida fue: " << calificacion2 << endl << endl;
cout << "Introduzca una calificación (R,D,C,B,A): ";
cin >> calificacion3;
cout << "La calificación introducida fué: " << calificacion3 << endl << endl;
} //Fin de main()
INSTRUCCIÓN IF
Ejemplo 11.
En los siguientes ejemplos se muestra el funcionamiento de la instrucción IF
x = 2; if (x)
y = 3; cout << “El valor de x es diferente de cero.
if (x < y) ” << endl;
{
cout << “x = ” << x << endl;
cout << “y = ” << y << endl;
} // Fin del if
if ((x % y) == 10)
cout << “x es divisible entre y.” << endl;
cout << “x no es divisible entre y.” <<
endl;
Ejemplo 12.
#include <iostream.h>
void main( )
{
int calificacion;
cout << “ Ingrese una calificación “<< endl;
cin>>calificación;
if (calificacion >= 90)
cout << "¡Felicidades, obtuviste una A!" << endl;
} // Fin de main()
Ejemplo 13.
#include <iostream.h>
void main ()
{
int edad = 21;
if (edad == 21)
cout << "La edad del usuario es de 21 años" << endl;
if (edad != 21)
cout << "La edad del usuario no es de 21 años" << endl;
} // Fin de main()
Ejemplo 14.
Ejemplo 15.
/* Programa que utiliza un enunciado compuesto tanto para if como para else.
*/
#include <iostream.h>
void main( )
{
int calificacion;
cout << “ Ingrese una calificación “<< endl;
cin>>calificación;
if (calificacion >= 90)
{
cout << "¡Felicidades, obtuviste una A!" << endl;
cout << "Tu calificación fué de: " << calificacion << endl;
} //Fin de if
else
{
cout << "¡Tiene que trabajar duro!" << endl;
cout << "Perdiste: " << (100 - calificacion) << " puntos " << endl;
} //Fin de else
} //Fin de main()
Ejemplo 16.
#include <iostream.h>
void main( )
{
//Definición de variable.
float temperatura = 0.0;
cout << "Este programa calculará una temperatura para ver si"<<endl<<
"produce hielo, agua o vapor." << endl << endl;
// Obtiene la temperatura dada por el usuario.
cout << "Escriba una temperatura en grados Celsius: ";
cin >> temperatura;
if (temperatura > 0)
{
if (temperatura >= 100)
cout << "VAPOR" << endl;
else
cout << "AGUA" << endl;
}
else
cout << "HIELO" << endl;
} // Fin de main()
INSTRUCCIÓN SWICHT
SINTAXIS
switch (expresion)
case constante 1:
{ Bloque de Instrucciones;
Break;
case constante 2:
{ Bloque de Instrucciones;
Break;
case constante n:
{ Bloque de Instrucciones;
Break;
}
default :
{ Bloque de instrucciones;
break es una instrucción de salto usada para interrumpir (romper) la ejecución normal de
Ejemplo 17.
Ejemplo 18.
INSTRUCCIÓN FOR
SINTAXIS
Bloque de Instrucción(es);
};
Ejemplo 19.
/* Programa que utiliza el ciclo for para visualizar los valores del 1 al 100 en su
pantalla. */
#include <iostream.h>
void main( )
{
int contador;
for (contador = 1; contador <= 100; contador++)
cout << contador << ' ';
} // Fin de main()
Ejemplo 20.
#include <iostream.h>
void main( )
{
int contador;
int valorFinal;
cout << "Indique el numero de repeticiones que desea ejecutar: ";
cin >> valorFinal;
for(contador = 1; contador <= valorFinal; contador++)
cout << contador << ' ';
} //Fin de main()
Ejemplo 21.
#include <iostream.h>
void main( )
{
int contador;
int total = 0;
for(contador = 1; contador <= 100; contador++)
{
cout << "Sumar " << contador << " a " << total;
total = total + contador;
cout << " da un gran total de " << total << endl;
}//Fin del for
} //Fin del main()
INSTRUCCIÓN WHILE
SINTAXIS
Ejemplo 22.
#include <iostream.h>
void main( )
{
int contador = 1; // Inicializa la variable de control
while (contador <= 100) // Prueba la condición
{
cout << contador << ' '; // Ejecuta los enunciados
contador++; // Modifica la variable de control
} // Fin de while
} // Fin de main()
Ejemplo 23.
/* El programa ejecuta un ciclo while, para leer caracteres desde el teclado
hasta que teclee S o N. */
#include <iostream.h>
void main( )
{
int hecho = 0; // Se pone en verdadero cuando se encuentra S o N
char letra;
while (!hecho)
{
cout << "\n Escriba S o N y oprima Enter para continuar: ";
cin >> letra;
if ((letra == 'S') || (letra == 's'))
hecho = 1;
else
if ((letra == 'N') || (letra == 'n'))
hecho = 1;
else
cout << '\a'; // Suena la campana para carácter inválido
} // Fin de while
cout << "La letra que tecleó fué: " << letra << endl;
} // Fin de main()
Ejemplo 24.
#include <iostream.h>
void main()
{
int contador = 0; // Variable para determinar el número de enteros sumados
double suma = 0.0; // Acumulador con la suma de todos los enteros del rango
int primero, ultimo, temporal; // Variable inicial y final del rango.
// temporal es una variable auxiliar, para intercambiar si es necesario los valores
// entre primero y ultimo.
cout << "Introduzca el primer entero: ";
cin >> primero;
cout << "Introduzca el segundo entero: ";
cin >> ultimo;
if (primero > ultimo)
{
temporal = primero;
primero = ultimo;
ultimo = temporal;
} // Fin del if
cout << "La suma de los enteros desde " << primero << " hasta " << ultimo << ": ";
while (primero <= ultimo)
{
contador++;
suma += (double) primero++;
} // Fin del while
cout << suma << endl;
cout << "El promedio es de: " << suma / contador << endl;
} // Fin del main()
INSTRUCCIÓN DO WHILE
SINTAXIS
do
{
enunciado 1;
enunciado 2;
....................
enunciado n;
} while (expresión de verificación);
Ejemplo 25.
#include <iostream.h>
void main( )
{
int contador = 1; // Inicializa la variable de control
do
{
cout << contador << ' '; // Ejecuta los enunciados
contador++; // Modifica la variable de control
} while (contador >= 100) // Prueba la condición
} // Fin de main()
Ejemplo 26.
#include <iostream.h>
void main( )
{
int hecho = 0; // Se pone en verdadero cuando se encuentra S o N
char letra;
do
{
cout << "\n Escriba S o N y oprima Enter para continuar: ";
cin >> letra;
if ((letra == 'S') || (letra == 's'))
hecho = 1;
else
if ((letra == 'N') || (letra == 'n'))
hecho = 1;
else
cout << '\a'; // Suena la campana para carácter inválido
} while (hecho);
cout << "La letra que tecleó fué: " << letra << endl;
} // Fin de main()
Ejemplo 27.
#include <iostream.h>
void main()
{
int contador = 0; // Variable para determinar el número de enteros sumados
double suma = 0.0; // Acumulador con la suma de todos los enteros del rango
int primero, ultimo, temporal; // Variable inicial y final del rango.
// temporal es una variable auxiliar, para intercambiar si es necesario los valores
// entre primero y ultimo.
cout << "Introduzca el primer entero: ";
cin >> primero;
cout << "Introduzca el segundo entero: ";
cin >> ultimo;
if (primero > ultimo)
{
temporal = primero;
primero = ultimo;
ultimo = temporal;
} // Fin del if
cout << "La suma de los enteros desde " << primero << " hasta " << ultimo << ": ";
do
{
contador++;
suma += (double) primero++;
} while (primero >= ultimo)
cout << suma << endl;
cout << "El promedio es de: " << suma / contador << endl;
} // Fin del main()
SINTAXIS
TipoRetorno nombreFuncion (listaParametros)
{
declaración Variables;
Bloque de Instrucciones;
return ;
Donde:
return <expresión> ;
Por Valor:
Ejemplo 28.
#include <iostream.h>
void Ejemplo(int, float);
int main()
{
int pase1=22;
float pase2=33.3;
cout << "Antes de llamar a la función Ejemplo " << endl << " La variable
pase1 tiene el valor de:" << pase1 << endl << " La variable pase2 tiene el
valor de:" << pase2 << endl;
Ejemplo(pase1, pase2);
cout << "Después de volver de la función Ejemplo " << endl << " La variable
pase1 tiene el valor de:" << pase1 << endl << " La variable pase2 tiene el
valor de:" << pase2 << endl;
return 0;
}
p = pase1;
q = pase2;
p = 7777;
q = 12345.67;
Por referencia:
Cuando se envía la lista de parámetros, lo que hacemos es enviar a la función
la dirección de memoria donde se encuentra la variable o dato. Cualquier
modificación SI afectará a las variables utilizadas en la llamada.
Ejemplo 29.
#include <iostream.h>
void Ejemplo(int *, float *);
int main()
{
int pase1=22;
float pase2=33.3;
cout << "Antes de llamar a la función Ejemplo " << endl << " La variable
pase1 tiene el valor de:" << pase1 << endl << " La variable pase2 tiene el
valor de:" << pase2 << endl;
Ejemplo(&pase1, &pase2);
cout << "Después de volver de la función Ejemplo " << endl << " La variable
pase1 tiene el valor de:" << pase1 << endl << " La variable pase2 tiene el
valor de:" << pase2 << endl;
return 0;
}
p = &pase1;
q = &pase2;
3. CAPITULO II
0 1 2 3 4
ELEMENTO
Declaración:
TIPO NOMBRE-ARREGLO[DIMENSION];
Donde:
Ejemplo:
int alumno[10];
Ejemplo 30.
#include <iostream.h>
void main()
int i, arreglo[10];
for(i = 0; i < 10; i++)
arreglo[i] = 0;
for(i= 0; i < 10; i++)
cout << ” Elemento [“ << i << “ ]: ” << arreglo[i] << endl;
}//Fin de main()
Ejemplo 31.
/* inicializa los elementos de un arreglo mediante una declaración y muestra
su contenido */
}//Fin de main()
Ejemplo 32.
#include <iostream.h>
void main()
{
const int TAMANO_ARREGLO = 10;
int j, arreglo[TAMANO_ARREGLO];
for(j = 0; j < TAMANO_ARREGLO;j++)
arreglo[j] = 2 + 2 * j;
for(j = 0; j < TAMANO_ARREGLO; j++)
cout << ” Elemento [“ << i << “ ]: ” << arreglo[i] << endl;
}//Fin de main()
Ejemplo 33.
Ejemplo 34.
Ejemplo 35.
/* imprime un histograma. */
#include <iostream.h>
#include <iomanip.h>
void main()
{
const int TAMANO_ARREGLO = 10;
int arreglo[TAMANO_ARREGLO] = {19, 3, 15, 7, 11, 9, 13, 5, 17, 1};
cout << "Elemento" << setw(13) << "Valor"
<< setw(17) << "Histograma" << endl;
for(int i = 0; i < TAMANO_ARREGLO; i++)
{
cout << setw(7) << i << setw(13) << arreglo[i] << setw(9);
for(int j = 0; j < arreglo[i]; j++) //Imprime una barra
cout << '*';
cout << endl;
}//Fin del for
}//Fin de main()
Ejemplo 36.
#include<iostream.h>
const int TAMANO_ARREGLO = 3;
void raro(char arreglo[TAMANO_ARREGLO]);
void main()
{
char nombre[TAMANO_ARREGLO];
nombre[0] ='I';
nombre[1] ='B';
nombre[2] ='M';
cout << “El contenido de nombre[] antes de raro() es: ”;
for (int i = 0; i < TAMANO_ARREGLO; ++i)
cout << nombre[i];
//LLAMA A LA FUNCIÓN raro()
raro(nombre);
//MUESTRA EL ARREGLO nombre
cout << “\n\nEl contenido de nombre[] después de raro() es: ”;
for (int i = 0; i < TAMANO_ARREGLO; ++i)
cout << nombre[i];
} // Fin de main()
Matrices.
Columnas
0 1 2 3 4 5 6
1
2
3
Declaración:
TIPO NOMBRE-MATRIZ[FILAS][COLUMNAS];
Donde:
TIPO: Tipo de datos para la estructura( int, char, float, etc).
Ejemplo:
int alumno[10][10];
char nombre[20][10];
Ejemplo 37.
#include <iostream.h>
void main(void)
{
int renglon, columna;
float tabla[3][5] = { {1.0, 2.0, 3.0, 4.0, 5.0},
{6.0, 7.0, 8.0, 9.0, 10.0},
{11.0, 12.0, 13.0, 14.0, 15.0}};
for (renglon = 0; renglon < 3; renglon++)
for (columna = 0; columna < 5; columna++)
cout << "tabla[" << renglon << "][" << columna << "] = "
<< tabla[renglon][columna] << endl;
}//Fin de main()
Ejemplo 38.
#include <iostream.h>
void mostrarArreglo(int arreglo[][10], int renglones)
{
int i, j;
for (i = 0; i < renglones; i++)
for (j = 0; j < 10; j++)
cout << "arreglo[" << i << "][" << j << "] = " << arreglo[i][j]
<< endl;
}//Fin de mostrarArreglo()
void main(void)
{
int a[1][10] = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}};
int b[2][10] = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15, 16, 17, 18, 19, 20}};
int c[3][10] = { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15, 16, 17, 18, 19, 20},
{21, 22, 23, 24, 25, 26, 27, 28, 29, 30}};
mostrarArreglo(a, 1);
cout << endl;
mostrarArreglo(b, 2);
cout << endl;
mostrarArreglo(c, 3);
cout << endl;
}//Fin de main()
Ejemplo 39.
#include <iostream.h>
long sumarArreglo(int arreglo[], int elementos)
{
long suma = 0;
int i;
for (i = 0; i < elementos; i++)
suma += arreglo[i];
return(suma);
}//Fin de sumarArreglo()
void main(void)
{
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int b[2][10] = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15, 16, 17, 18, 19, 20}};
int c[3][10] = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15, 16, 17, 18, 19, 20},
{21, 22, 23, 24, 25, 26, 27, 28, 29, 30}};
cout << "La suma de los elementos del arreglo a[10] es = " <<
sumarArreglo(a, 10)<< endl;
cout << "La suma de los elementos del arreglo b[2][10] es = " <<
sumarArreglo((int *)b, 20)<< endl;
cout << "La suma de los elementos del arreglo c[3][10] es = " <<
sumarArreglo((int *)c, 30)<< endl;
}//Fin de
Ejemplo 41.
#include <iostream.h>
const int COL_MAX = 3;
const int REN_MAX = 3;
void main(void)
{
double matriz[REN_MAX][COL_MAX] = { 1, 2, 3,
4, 5, 6,
7, 8, 9 };
double suma, promedio;
int renglones = REN_MAX, columnas = COL_MAX;
// Despliega los elementos de la matriz
cout << "La matriz es:" << endl;
for (int i = 0; i < renglones; i++)
{
for (int j = 0; j < columnas; j++)
{
cout.width(4);
cout.precision(1);
cout << matriz[i][j] << " ";
}//Fin del for interno
cout << endl;
}//Fin del for externo
cout << endl;
// Obtiene la suma de cada columna
for (int j = 0; j < columnas; j++)
{
suma = 0.0; // Inicializa suma
for (int i = 0; i < renglones; i++)
suma += matriz[i][j];
promedio = suma / renglones;
cout << "El promedio de la columna " << j
<< " = " << promedio << endl;
}//Fin del for
}//Fin de main()
Una cadena es una serie de caracteres que se trata como unidad. Una cadena
puede incluir letras, dígitos y diversos caracteres especiales, como +, -, *, /, $ y
otros. En C/C++ las literales de cadena o constantes de cadena se escriben
entre comillas, como sigue: “Iris Rangel” (un nombre), Una cadena en C/C++ es
un arreglo de caracteres que termina con el carácter nulo (‘ \0’).
Se debe incluir la librería “string” en el programa para poder tener acceso a los
prototipos de funciones para el tratamiento de cadenas. La siguiente tabla
Funciones de la Librería string, contiene la descripción de las instrucciones
correspondiente a la librería string.
Utilizadas (explicar que contiene) (esta es la fuente Organízala) fue
tomada de la pagina de es.wikipedia.org/wiki/String.h.
NOMBRE DESCRIPCION
memcpy copia n bytes entre dos áreas de memoria que no deben
solaparse
memmove copia n bytes entre dos áreas de memoria; al contrario
que memcpy las áreas pueden solaparse
memchr busca un valor a partir de una dirección de memoria dada
y devuelve un puntero a la primera ocurrencia del valor
buscado o NULL si no se encuentra
memcmp compara los n primeros caracteres de dos áreas de
memoria
memsets sobre escribe un área de memoria con un patrón de
bytes dado
strcat añade una cadena al final de otra
strncat añade los n primeros caracteres de una cadena al final
de otra
strncat añade los n primeros caracteres de una cadena al final
de otra
strchr localiza un carácter en una cadena, buscando desde el
principio
strrchr localiza un carácter en una cadena, buscando desde el
final
strcmp compara dos cadenas alfabéticamente (‘a’!=’A’)
strncmp compara los n primeros caracteres de dos cadenas
numéricamente (‘a’!=’A’)
strcoll compara dos cadenas según la colación actual (‘a’==’A’)
strcpy copia una cadena en otra
strncpy copia los n primeros caracteres de una cadena en otra
strerror devuelve la cadena con el mensaje de error
correspondiente al número de error dado
strlen devuelve la longitud de una cadena
strspn devuelve la posición del primer carácter de una cadena
que no coincide con ninguno de los caracteres de otra
cadena dada
strcspn devuelve la posición del primer carácter que coincide con
alguno de los caracteres de otra cadena dada
strpbrk encuentra la primera ocurrencia de alguno de los
caracteres de una cadena dada en otra
strstr busca una cadena dentro de otra
strtok parte una cadena en una secuencia de tokens
strrev invierte una cadena
Tabla Nº 7 Funciones de la Librería string Fuente: es.wikipedia.org/wiki/String.h.
Ejemplo 42.
Ejemplo 43.
#include <iostream.h>
#include <string.h>
void main()
{
char s1[20] = "Feliz ";
char s2[] = "Año Nuevo ";
char s3[40] = "";
cout << "s1 = " << s1 << "\ns2 = " << s2;
cout << "\nstrcat(s1, s2) = " << strcat(s1, s2);
cout << "\nstrncat(s3, s1, 6) = " << strncat(s3, s1, 6);
cout << "\nstrcat(s3, s1) = " << strcat(s3, s1) << endl;
}//Fin de main()
Ejemplo 44.
Ejemplo 45.
Definición:
Son estructuras definidas por el usuario que permiten agrupar varios datos, que
mantengan algún tipo de relación, aunque sean de distinto tipo, permitiendo
manipularlos todos juntos, usando un mismo identificador, o cada uno por
separado. Son llamadas también muy a menudo registros, o en inglés records.
Tienen muchos aspectos en común con los registros usados en bases de
datos. Y siguiendo la misma analogía, cada objeto de una estructura se
denomina a menudo campo, o field.
Declaración:
struct nombre
{
tipo nombre_miembro_1;
tipo nombre_miembro_2;
} Registro;
Donde:
Ejemplo:
struct Persona
{
char Nombre[15];
char Direccion[65];
int AnyoNacimiento;
} Fulanito;
Ejemplo 47.
Ejemplo 48.
Estos objetivos deben tenerse en cuenta en todo nuestro estudio de los sistemas de
gestión de archivos.
6.4.1 Concepto.
Tipo de Contenido
Archivos de texto.
Son aquellos que pueden contener cualquier clase de datos y de tal manera
que son “entendibles” por la gente. Los datos en un archivo de texto se
almacenan usando el código ASCII, en el cual cada carácter es representado
por un simple byte. Debido a que los archivos de texto utilizan el código ASCII,
se pueden desplegar o imprimir. En este tipo de archivos, todos sus datos se
almacenan como cadenas de caracteres, es decir, los números se almacenan
con su representación ASCII y no su representación numérica, por lo tanto no
se pueden realizar operaciones matemáticas directamente con ellos.
Archivos binarios.
Almacenan los datos numéricos con su representación binaria. Pueden ser archivos que
contienen instrucciones en lenguaje de máquina listas para ser ejecutadas. Por ejemplo,
cuando se escribe un programa en el lenguaje C/C++, las instrucciones almacenadas en
un archivo de texto llamado programa fuente y una vez que pasa al proceso de
compilación y ejecución, el programa se convierte en un programa ejecutable (en
lenguaje de máquina), que es directamente entendido por la computadora y se crea un
archivo binario. En este tipo de archivos también se pueden almacenar diferentes tipos
de datos incluyendo datos numéricos; sin embargo, cabe destacar que los datos
numéricos se graban con su representación binaria (no con su representación ASCII),
por tal razón, cuando se despliegan con un editor de textos, aparecen caracteres que no
se pueden interpretar.
Tipos de Acceso
Archivos secuenciales
Es la forma más común de estructura de archivos.
Se emplea un formato fijo para los registros, son de la misma longitud y constan del
mismo número de campos de tamaño fijo con un orden determinado.
Se necesita almacenar los valores de cada campo; el nombre del campo y la longitud
de cada uno son atributos de la estructura del archivo. Cada registro tiene un campo
clave que lo identifica (generalmente es el primero de cada registro). Los registros se
almacenan en secuencia por la clave.
Para las aplicaciones interactivas que incluyen peticiones o actualizaciones de
registros individuales, los archivos secuenciales no son óptimos. El acceso requiere una
búsqueda secuencial de correspondencias con la clave. Si el archivo entero o gran parte
de él pueden traerse a la memoria principal de una sola vez, se podrán aplicar técnicas
de búsquedas más eficientes. Al acceder un registro de un archivo secuencial grande, se
produce un procesamiento extra y un retardo considerable.
Archivos indexados:
Se suelen utilizar dos tipos de índices, uno exhaustivo que contiene una
entrada para cada registro del archivo principal y se organiza como un archivo
secuencial para facilitar la búsqueda, el otro índice es parcial que contiene
entrada a los registros donde esté el campo de interés.
Archivos directos:
Los archivos directos son muy usados donde se necesita un acceso muy
rápido, donde se usan registros de longitud fija y donde siempre se accede a
los registros de una vez.
6.4.4 Métodos para realizar la gestión de archivos.
Operaciones de E/S.
istream ostream
fstream
Ejemplo 49.
#include <fstream>
int main()
{
ifstream lectura; // para leer un archivo
ofstream escritura; // para escribir un archivo
fstream lecturaEscritura; // para leer y escribir un archivo
}
Modos de apertura de archivo.
En la tabla 2 se muestra el modo de apertura de archivos.
Ejemplo 50.
#include <fstream>
int main()
{
ifstream lectura; // para leer un archivo físico
ofstream escritura; // para escribir un archivo físico
fstream lecturaEscritura; // para leer y escribir un archivo
// Archivo lógico lectura que lea del archivo de disco ejemplo1.txt.
lectura.open("ejemplo1.txt");
// Archivo lógico escritura que escribe al archivo de disco ejemplo2.txt.
escritura.open("ejemplo2.txt");
// Archivo logico lescturaEscritura que lea y escriba el archivo ejemplo3.txt.
lecturaEscritura.open("ejemplo3.txt", ios::in | ios::out);
}
Ejemplo 51.
/* Después de crear los objetos y abrirlos, se recomienda verificar si la
operación tuvo éxito a través del operador sobrecargado ! de ios, retornando
true si la operación falla. Algunos posibles errores son: intentar abrir un archivo
que no existe en modo lectura, abrir un archivo de lectura sin permiso y abrir un
archivo para escritura si no hay espacio en disco. */
#include <iostream>
#include <fstream>
int main()
{
ifstream lectura; // para leer un archivo
ofstream escritura; // para escribir un archivo
fstream lecturaEscritura; // para leer y escribir un archivo
lectura.open("ejemplo1.txt");
escritura.open("ejemplo2.txt");
lecturaEscritura.open("ejemplo3.txt", ios::in | ios::out);
if (!lectura)
cout << "No se puede abrir el archivo lectura --> ejemplo1.txt" << endl;
if (!escritura)
cout << "No se puede abrir el archivo escritura --< ejemplo2.txt" << endl;
if (!lecturaEscritura)
cout << "No se puede abrir el archivo lecturaEscritura --> ejemplo3.txt" << endl;
}
Ejemplo 52.
#include <iostream>
#include <fstream>
int main()
{
int numl,i;
ofstream salida; // flujo de salida
// Apertura del archivo, crear y abrir un nuevo archivo
salida.open("ejemplo-escribir.txt");
// Verificando la operacion -- si el archivo existe o no
if (!salida)
cout<<"No se puede abrir el archivo\n";
else
{
cout<<"Suministre el total de lineas del archivo: ";
cin>>numl;
for (i=0;i<numl;i++)
{ //Escritura de un archivo de texto
salida << i+1 <<"\n";
}
}
salida.close(); //Cierre del archivo
cout<<"****** Archivo Procesado ******\n";
}
Ejemplo 53.
#include <iostream>
#include <fstream>
#include <string>
int main()
{
string i;
ifstream entrada; // flujo de entrada
// Apertura del archivo: abrir un nuevo existente)
entrada.open("ejemplo-escribir.txt");
// Verificando la operacion -- si el archivo existe o no
if (!entrada)
cout<<"No se puede abrir el archivo\n";
else
{
do
{ //Lectura de un archivo de texto
entrada >> i;
cout << i << endl; // muestra lo pantalla
} while (entrada);
}
entrada.close(); //Cierre del archivo
cout<<"****** Archivo Procesado ******\n";
}
Ejemplo 54.
/* Cuando se tienen archivos de textos estructurados, es decir con más de un valor por
línea y de tamaño fijo el número de campos. Se puede escribir con el operador << y
agregar el separador que se necesite. Para leer de debe usar el operador >> tantas
veces como valores están separados por un espacio en blanco o fin de línea. */
#include <iostream>
#include <fstream>
int main()
{
int numl,i,j;
ofstream salida; // flujo de salida
salida.open("ejemplo-escribir2.txt",ios::out);
if (!salida)
cout<<"No se puede abrir el archivo\n";
else
{
cout<<"Suministre el total de lineas del archivo: ";
cin>>numl;
for (i=0;i<numl;i++)
//Escritura de un archivo de texto
salida << i+1 << " " << numl+i <<"\n";
}
salida.close(); //Cierre del archivo
cout<<"****** Archivo de salida Procesado ******\n";
ifstream entrada; // flujo de entrada
entrada.open("ejemplo-escribir2.txt");
if (!entrada)
cout<<"No se puede abrir el archivo\n";
else
{
do
{ //Lectura de un archivo de texto
entrada >> i >> j;
cout << i << " " << j << endl; // muestra lo pantalla
} while (entrada);
}
entrada.close(); //Cierre del archivo
cout<<"****** Archivo de entrada Procesado ******\n";
}
Ejemplo 55.
#include <iostream>
#include <fstream>
void main()
{
double val;
int num;
cout << "Num datos a generar:"; cin >> num;
fstream foutT("datos.txt",ios::out); //fichero Texto
fstream foutB("datos.dat",ios::out|ios::binary); //fiche. Binario
if (!foutT | !foutB) { cerr << "Error..." << endl; return; }
// generar datos de forma aleatoria y grabarlos en los 2 formatos
foutT.precision(15);
foutT.setf(ios::fixed);
srand(time(NULL));
for (int i=0;i<num;i++)
{
val = (double)rand()*100/RAND_MAX; //entre 0 y 100
foutB.write((char*)&val,sizeof(double));
foutT << val << endl;
}
foutB.close(); //cierra fichero Binario
foutT.close(); //cierra fichero Texto
}
Ejemplo 56.
En el ejemplo 56, ejercicio completo sobre archivo aleatorio y es la automatización de
una agenda, utilizando la siguiente información (nombre, edad, teléfono y dirección. El
programa esta desarrollado en programación estructurada, contiene un menú donde el
usuario podrá seleccionar una opción para:
Crear Archivo
Agregar un registro en la agenda.
Eliminar un registro en la agenda.
Listar el contenido de todos los registros.
Buscar un registro en particular.
Eliminar un registro en particular.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <fstream>
struct reg
{
char nom[25];
int edad;
char tel[15];
char dir[35];
}; reg regage;
/*Funciones */
void Crear();
void Listar();
void Agregar();
void Modificar();
void Borrar();
void Encontrar();
fstream ficha;
void main() // programa principal
{
int opc;
fstream ficha("agenda.dat", ios::in | ios::out | ios::trunc | ios::binary);
if(!ficha)
cout <<" Error: Problema con el archivo agenda.dat"<<endl;
else
{
do
{
clrscr();
cout <<"1. Crear Archivo"<<endl;
cout <<"2. Agregar"<<endl;
cout <<"3. Eliminar"<<endl;
cout <<"4. Listar"<<endl;
cout <<"5. Buscar"<<endl;
cout <<"6. Modificar"<<endl;
cout <<"7. Salir"<<endl;
cout <<"Opcion"<<endl;
cin >> opc;
switch(opc)
{
case 1: Crear();
break;
case 2: Agregar();
break;
case 3: Borrar();
break;
case 4: Listar();
break;
case 5: Encontrar();
break;
case 6: Modificar();
break;
}
}while(opc!=7);
}
}// fin de main (Programa Principal)
/* Funcion que sirve para imprimir todos los un registros del Archivo Binario*/
void Listar()
{
int i=1;
ficha.open ("agenda.dat",ios::in | ios::binary);
if(!ficha)
cout << "\n Error de apuertura del archivo agenda.dat\n";
else
{
cout <<"\n U S U A R I O S E N L A A G E N D A\n";
cout <<"---------------------------------------------------------------\n";
while ((ficha.read((char*) ®age, sizeof(reg))!=0))
{
cout <<"=> Datos del Amigo "<<i << endl;
cout <<"Nombre:" << regage.nom << endl;
cout <<"Edad:" << regage.edad << endl;
cout <<"Telefono:" <<regage.tel <<endl;
cout <<"Direccion:" <<regage.dir<< endl;
i++;
}
cout <<"---------------------------------------------------------------\n";
ficha.close();
}
cin.get();
cin.get();
}
// Funcion que sirve para agregar un registro dentro del Archivo Binario
void Agregar()
{
cout <<"\n Agregando un registro al archivo binario agenda.dat\n";
ficha.open ("agenda.dat",ios::in | ios::binary);
if(!ficha)
cout << "\n Error de apuertura del archivo agenda.dat\n";
else
{
/*Introduciendo los Datos DE LA AGENDA*/
cout <<"Nombre: "<< endl;
cin>>regage.nom;
cout <<"Edad: "<<endl;
cin>>regage.edad;
cout << "Telefono: "<<endl;
cin>>regage.tel;
cout <<"Direccion: " << endl;
cin>>regage.dir;
ficha.write((char*) ®age, sizeof(reg));
cout << "\n Registro Agregado\n";
ficha.close();
}
cin.get();
cin.get();
}// fin de Agregar
// Funcion que sirve para Modificar un registro dentro del Archivo Binario*/
void Modificar()
{
char nombre[25];
char cadena[25],cad[2];
int n;
cout <<"\n Modificando un registro del archivo binario agenda.dat\n";
ficha.open("agenda.dat",ios::in | ios::binary);
if(!ficha)
cout << "\n Error de apuertura del archivo agenda.dat\n";
else
{
cout << "Nombre: ";
cin >>nombre;
/*Buscando nombre dentro del Archivo*/
while (n=ficha.read((char*) ®age, sizeof(reg))!=0 && stricmp(regage.nom,cadena)!
=0);
if (n==0)
cout <<"No existe el registro en la agenda"<<cadena;
else
{
cout << "\n Amigo encontrado....!!!\n";
cout << "Nombre: "<<regage.nom;
cout << "Edad: "<<regage.edad;
cout << "Telefono "<<regage.tel;
cout << "Direccion: \n"<<regage.dir;
cout << "\n CAMBIANDO VALORES \n";
cout << "Dame el nombre nuevo del Amigo: ";
cin>>regage.nom;
cout << "Dame la nueva Edad del Amigo: ";
cin>>regage.edad;
cout << "Dame el nuevo telefono del Amigo: ";
cin>>regage.tel;
cout << "Dame la nueva direccion del Amigo: ";
cin>>regage.dir;
cout << "\n GRABANDO Y CERRANDO ARCHIVO \n";
ficha.seekg((n-1)*sizeof(regage),ios::cur);
ficha.write((char *) ®age, sizeof( regage));
}
ficha.close(); //Cerramos el archivo
}
}
// Funcion que sirve para borrar un registro dentro del Archivo Binario*/
void Borrar()
{
int encontrado=0;
char cadena[25];
/* getch();*/
}
}
}
RECOMENDACIONES Y/O SUGERENCIAS
CONCLUSIONES
Deitel, Harvey M.; Deitel, Paul J. C++, cómo programar. Edit. Pearson
Educación.
4ª ed., 2003. 1320 pp
http://www.zator.com/compiladoresC.htm