Un registro es una estructura de datos formado por un conjunto de

Anuncio
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIÓN
ALGORITMOS Y PROGRAMACIÓN
LABORATORIO #6 (Parte I y II)
REGISTROS Y ARCHIVOS
Parte I: Registros
Un registro es una estructura de datos formado por un conjunto de elementos llamados campos, no
necesariamente del mismo tipo y que permiten almacenar una serie de datos relacionados entre sí bajo un
nombre común.
Declaración
Un registro se declara de la siguiente manera:
Pseudocódigo
Tipo Registro
<Tipo de
<Tipo de
...
<Tipo de
Fregistro;
<identificador> =
dato>1 <Identificador>1;
dato>2 <Identificador>2;
dato>N
<Identificador>N;
C++
struct <identificador> {
<tipo de dato>1
<Identificador>1;
<tipo de dato>2
<Identificador>2;
...
<tipo de dato>N
<Identificador>N;
} ;
En el siguiente ejemplo se declara un registro y luego variables de ese tipo de registro:
Pseudocódigo
C++
//Se declara un tipo registro
//Se declara un tipo registro
struct producto {
string nombre;
int cantidad;
float precio;
float peso;
};
Tipo Registro Producto =
String nombre;
Entero cantidad;
Real precio;
Real peso;
Fregistro;
//Se declaran las variables de tipo producto
Producto prod1, prod2;
//Se
declaran
las
variables
producto
producto prod1, prod2;
de
tipo
Operaciones
A los registros se le pueden aplicar varias operaciones, como aplicar la operación constructora para inicializarlos
o la operación selectora para cambiar los valores de los campos.
Utilizando el registro y las variables declaradas en ejemplo anterior, se pueden aplicar las siguientes operaciones:
1
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIÓN
ALGORITMOS Y PROGRAMACIÓN
Pseudocódigo y C++
//Se inicializa prod1 utilizando la operación constructora
prod1 = {“Cámara digital”, 5, 800.0, 0.5};
//Se inicializa prod2 utilizando la operación selectora para cada campo
prod2.nombre = “Impresora inalámbrica”;
prod2.cantidad = 2;
prod2.precio = 580.0;
prod2.peso = 7.0;
//Se incrementa el campo cantidad de prod1
prod1.cantidad = prod1.cantidad + 1;
Pase de parámetros
Para pasar un registro como parámetro a una acción o función se puede hacer de la siguiente manera:
C++
//AL DEFINIR LA ACCIÓN O FUNCIÓN:
void proc(producto p){
//p es el registro de tipo producto previamente declarado
//Cuerpo de la acción
}
//AL INVOCAR A LA ACCIÓN:
//se debe tener el arreglo declarado
producto p3;
//se invoca a la acción
proc(p3);
Ejemplo:
A continuación se presenta un ejemplo donde se define un registro el cual representa cartas, indicando el número
o cara de las cartas, así como también la pinta o palo. Este algoritmo permite definir un arreglo del tipo carta, para
manejar así las cartas que forman parte de un mazo.
2
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIÓN
ALGORITMOS Y PROGRAMACIÓN
#include <iostream>
using namespace ::std;
/* definición de la estrcutura carta */
struct carta {
string cara; /* define el campo cara */
string palo; /* define el campo palo */
}; /* fin de la estructura carta */
void llenaCarta( carta wCarta[] ,string wCara[], string wPalo[] );
int main(){
carta mazo[52]; /* define el arreglo carta */
int i,j;
/* inicializa el arreglo de cadena de caracteres */
string cara[] = { "As", "Dos", "Tres", "Cuatro", "Cinco",
"Seis", "Siete", "Ocho", "Nueve", "Diez",
"Joto", "Quina", "Rey"};
/* inicializa el arreglo de apuntadores */
string palo[] = { "Corazones", "Diamantes", "Treboles", "Espadas"};
llenaCarta( mazo, cara, palo ); /* carga el mazo con las cartas */
/* Mostrar las primeras 3 cartas de cada palo */
for(i=0;i<4;i++){
for(j=0;j<3;j++){
cout << mazo[j+i*13].cara << " de " << mazo[j+i*13].palo << endl;
}
}
return 0;
} /* fin de main */
/* coloca cadenas dentro de las estructuras Carta */
void llenaCarta( carta wCarta[], string wCara[], string wPalo[] ){
int i;
/* ciclo a través de wCarta */
for ( i = 0; i <= 51; i++ ) {
wCarta[i].cara = wCara[ i % 13 ];
wCarta[i].palo = wPalo[ i / 13 ];
} /* fin de for */
} /* fin de la función llenaCarta */
Ejercicios
1. Proporcione la definición de los registros para cada uno de los siguientes casos:
a. El registro fecha que contiene tres enteros dia, mes y año (anio).
b. El registro persona que contiene dos cadenas de caracteres nombre y apellido, un
campo del tipo fecha (definido previamente) fecha_de_nacimiento.
3
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIÓN
ALGORITMOS Y PROGRAMACIÓN
2. Partiendo de los registros definidos previamente, desarrolle un algoritmo en el cual se definan dos
variables correspondientes a dos personas, solicite la información necesaria al usuario para asignarle los
valores de nombre, apellido y fecha de nacimiento de cada uno y luego muestre la información por
pantalla. Haga uso de procedimientos.
Parte II: Archivos
Un archivo es una secuencia de elementos del mismo tipo, que residen generalmente en memoria auxiliar. Los
archivos son utilizados cuando se desea que los datos puedan recuperarse aún después de haber apagado la
máquina y también cuando se manejan grandes volúmenes de información.
Declaración
Antes de empezar a utilizar un archivo se debe declarar una variable que haga referencia al archivo con el que se
va a trabajar. A continuación se muestra como se puede hacer:
Pseudocódigo
C++
//Inclusión de bibliotecas
//Declaración de dos archivos
#include <fstream>
Archivo archivoEntrada, archivoSalida;
using namespace std;
. . .
//Declaración de dos archivos
fstream archivoEntrada, archivoSalida;
Operaciones
Al trabajar con archivos secuenciales se pueden realizar diversas operaciones tales como:
• Abrir el archivo: se debe hacer antes de hacer otras operaciones en le archivo.
• Cerrar el archivo: se debe hacer cuando se termina de utilizar el archivo.
• Verificar el fin del archivo (FDA o EOF).
• Leer del archivo.
• Escribir en el archivo.
A continuación se muestran ejemplos de estas operaciones utilizando los archivos declarados anteriormente.
4
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIÓN
ALGORITMOS Y PROGRAMACIÓN
Ejemplo de abrir archivos:
Pseudocódigo
C++
//Abrir archivo de texto para lectura
//Abrir archivo de texto para lectura
AbrirArchivo(archivoEntrada,
“prueba1.txt”, Lectura y Texto);
archivoEntrada.open(“prueba1.txt”, ios::in);
//Abrir archivo de texto para escritura
AbrirArchivo(archivoSalida,
“prueba2.txt”, Escritura y Texto);
//Abrir archivo de texto para escritura
archivoSalida.open(“prueba2.txt”, ios::out);
Ejemplo de lectura de un archivo caracter por caracter (asumiendo que el archivo está abierto y es de lectura):
Pseudocódigo
C++
//Se declara un caracter
//Se declara un caracter
Caracter c;
char c;
//Mientras no sea el fin del archivo
//Mientras no sea el fin del archivo
Mientras NO FDA(archivoEntrada)
while(!archivoEntrada.eof()){
//se lee una línea y se guarda en c
//se lee una línea y se guarda en c
LeerArchivo(archivoEntrada, c);
archivoEntrada >> c;
//se muestra el caracter leído
//se muestra el caracter leído
Escribir(c);
cout << c;
Fmientras
}
//Se cierra el archivo
//Se cierra el archivo
CerrarArchivo(archivoEntrada);
archivoEntrada.close();
Ejemplo de escritura en un archivo (asumiendo que el archivo está abierto y es de escritura):
Pseudocódigo
C++
//Se declara un String y se inicializa
//Se declara un string y se inicializa
String cad;
string cad;
cad = “segunda línea de escritura”;
cad = “segunda línea de escritura”;
//Se escribe la primera línea
//Se escribe la primera línea
EscribirArchivo(archivoSalida,“primera
escritura”);
archivoSalida << “primera escritura” << endl;
//Se escribe la segunda línea
EscribirArchivo(archivoSalida, cad);
//Se cierra el archivo
//Se escribe la segunda línea
archivoSalida << cad << endl;
//Se cierra el archivo
archivoSalida.close();
CerrarArchivo(archivoSalida);
5
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIÓN
ALGORITMOS Y PROGRAMACIÓN
Ejemplos:
1.- El siguiente ejemplo permite leer la información almacenada en un archivo “info.dat”:
#include <iostream>
#include <fstream>
using namespace ::std;
int main(){
string nombre;
float monto;
fstream archivo;
// Declaración para el archivo clientes.dat
archivo.open( "info.dat", ios::in );
if (!archivo.is_open()){//Se verifica si el archivo se ha abierto o no
cout << "No se pudo abrir el archivo" << endl;
} else {
while (!archivo.eof()){
archivo >> nombre;
archivo >> monto;
cout << nombre << ": " << monto << endl;
}
archivo.close(); // cierra el archivo
}
return 0;
} /* fin de main */
Toma en consideración que para ejecutar este ejemplo debes contar con un archivo “info.dat”, el cual puede tener
inicialmente los siguientes valores:
Maria
Jose
Pedro
Carlos
20.4
17.4
56.7
67.1
6
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIÓN
ALGORITMOS Y PROGRAMACIÓN
2.- El siguiente ejemplo permite crear un archivo e ingresar la información en un archivo “info.dat”.
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
using namespace ::std;
int main(){
int i;
string nombres[]={"Maria","Jose","Victor","Manuel"};
float montos[]={323.2,643.5,231.6,784.7};
fstream archivo;
// Declaración para el archivo clientes.dat
archivo.open( "info.dat", ios::out );
if (!archivo.is_open()){//Se verifica que el archivo se haya abierto o no
cout << "No se pudo abrir el archivo" << endl;
} else {
for(i=0;i<4;i++){
archivo << nombres[i] << "
" << montos[i] << endl; //Escribe la
información en el archivo
}
archivo.close(); // cierra el archivo
}
return 0;
} /* fin de main */
Ejercicios:
1.- Considere que usted es el dueño de una tienda de herramientas y necesita mantener un inventario que le
permita llevar un control mínimo de cuáles herramientas tiene, cuántas tiene y el costo de cada una. Escriba un
programa que:
a.- le permita listar todas sus herramientas
b.- le permita introducir nuevas herramientas.
c.- le permita actualizar la información de la cantidad de una herramienta en particular.
Almacene la información en un archivo identificado como “inventario.txt” y considere que el mismo tiene la
siguiente información inicialmente:
#Registro
1
2
3
4
Descripción
Martillo
Llave
Serrucho
Destornillador
7
Cantidad
5
10
14
4
Costo
55.0
73.5
24.4
56.7
UNIVERSIDAD CENTRAL DE VENEZUELA
FACULTAD DE CIENCIAS
ESCUELA DE COMPUTACIÓN
ALGORITMOS Y PROGRAMACIÓN
Fuentes:
•
Tema 7. Tipos de datos estructurados. Profa. Yusneyi Carballo.
•
•
http://www.ciens.ucv.ve/algoritmosyprogramacion/documentos/ProfaYusneyi_Tema7_TiposDatosEstructurad
os.doc
C++ Language Tutorial: Data Structures. Juan Soulie. http://www.cplusplus.com/doc/tutorial/structures/
C++ Language Tutorial: Input / Output with files. Juan Soulie. http://www.cplusplus.com/doc/tutorial/files/
Prep. Daniel Romero. GDAP, Nov. 2010
Rev. Prof. Adriana Liendo, Jun. 2010
8
Descargar