Sunteți pe pagina 1din 5

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

Facultad de Ingeniería de Sistemas e Informatica


Eap. Ingeniería de Sistemas
Curso: Algorítmica I
Prof. G. A. Salinas A.
Laboratorio de Registros
TEMA: Registros.
 Implementación de una Aplicación en C aplicando las buenas practicas.
 Construcciones de algoritmos con funciones en C.
 Mejorar soluciones planteadas
DURACIÓN ESTIMADA : 02:00 horas. Tiempo mínimo de práctica del alumno 4 horas.
I. OBJETIVOS
El presente laboratorio tiene por objetivos:
 Implementar los subprogramas de acuerdo a las especificaciones para ejecutar operaciones básicas de
registros, esto es, vectores de registros.
o Modular y especificar operaciones. (modulo o subprogramas)
o Aplicar y reconocer funciones, procedimientos y predicados, los parámetros por valor u referencia.
o Aplicar lo aprendido sobre las operaciones básicas en vectores de enteros.
 Aplicación a problemas concretos
II. RESUMEN
En esta práctica usted implementa una Aplicación con las operaciones básicas de un vector de registros
utilizando subprogramas, debe aplicar su experiencia ganada con vectores de enteros.
III.CONSTRUCCION DE LA APLICACIÓN
Implemente y ejecute las implementaciones presentadas en el presente laboratorio, analice y luego comente
las líneas de código y agregue las demás operaciones básicas en forma incremental.

#include <…> case 2 :


const int Max = 10; system("cls");
struct ALUMNO{ cout <<"RUTINA DE VIZUALIZACION
int Cod; \n";
char Nom[40]; MostrarVector(a, na);
float Nota; break;
};
int Menu();
void crearVector(ALUMNO x[Max], int *dx); }while(opcion);
void LeerVector(ALUMNO x[Max], int *dx); printf("\n");
void MostrarVector(ALUMNO x[Max], int dx); system("PAUSE");
void Encabezado1(); return(0);
void Raya58(); }
void Raya();
int Menu()
int na; {
int opcion, pos; int op;
ALUMNO da, a[Max]; system("cls");
//Si se desea utilizar varios vectores, como printf(" OPERACIONES CON VECTORES
utilizaria crear vector()? \n\n");
crearVector(a, &na); printf("0. TERMINAR \n\n");
do{ printf("1. Ingreso de datos \n");
opcion = Menu(); printf("2. Mostrar \n");
switch(opcion) printf("3. Insertar por Posicion \n");
{ printf("4. Eliminar por Posicion \n");
case 0 : printf("5. Insertar por Valor \n");
exit(1); printf("6. Eliminar por Valor \n");
case 1 : printf("7. Ordenar Por Codigo
system("cls"); Ascendente\n\n");
cout <<"RUTINA DE INGRESO DE do{
DATOS \n"; printf("Digite su opcion ---> ");
LeerVector(a, &na); scanf("%d",&op);
break; }while(op<0 || op>8);

1
return(op); system("pause");
} exit(1);
void crearVector(ALUMNO x[Max], int *dx) }
{ }
*dx=-1;
} void Encabezado1()
{
void LeerVector(ALUMNO x[Max], int *dx) system("cls");
{ printf("\t\tREPORTE DE ALUMNOS\n\n");
int i, n, val; gotoxy(1,4);Raya58();
printf("\n\nNumero de ALUMNOS ---> "); gotoxy(1,5);printf(" Numero\t Codigo\t N o m b
scanf("%d", &n); r e \t\t\t Nota");
if(n < Max){ gotoxy(1,6);Raya();
for(i=0;i<n;i++){ }
printf("\tAlumno: %d\n", i+1);; void Raya58()
cout <<" Codigo ---> "; {
cin >>x[i].cod;
cout <<" Nombre ---> "; printf("===============================
cin >>x[i].nom; ==========================\n");
cout <<" Nota ---> "; }
cin >>x[i].nota; void Raya()
} {
*dx = i; printf("--------------------------------------------------
} -------\n");
else{ }
printf(" %d dimension fuera de RANGO es
mayor a Max = %d\n\n", n, Max);

Aplicando la programación incremental, agregue cada una de las siguientes operaciones básicas del vector de
registros.
1. Implemente en lenguaje C la siguiente especificación mostrar el vector de registros:
ACCION mostrarVector(Vector x, ENTERO dx)
//Muestra los elementos del vector de registros con un determinado formato
PRE: x = < >  x = <e1, e2 ...,en>
POS: “Vector vacio”  e1, e2 ...en
Solución:
//Muestra los elementos del vector de registros con un determinado formato. Analice si cumple con la
especificacion
void MostrarVector(ALUMNO x[Max], int dx)
{
int i;
if(dx>0){
Encabezado1();
for(i=0;i<dx;i++){
gotoxy(5,7+i);printf("%d",i+1);
gotoxy(10,7+i);printf("%d",x[i].cod);
gotoxy(20,7+i);printf("%s",x[i].nom);
gotoxy(50,7+i);printf("%6.1f\n",x[i].nota);
}
Raya();
cout <<"\n\n";
system("pause");
}
else{
printf("Vector vaciooo...\n\n");
}
}
2. Implemente en lenguaje C la siguiente especificación buscar la posición de un elemento en el vector:
ACCION BuscarDato(Vector x,ENTERO dx, ENTERO dato, ENTERO pos)
//Busca el elemento dato y retorna la posición adecuada que le corresponde en el vector ordenado.

2
PRE: x = < >  x = <e1, e2 ...,en>  dato  Vector
POS: dato < x[0]  pos= 0, dato > x[dx-1]  pos= dx, dato > x[0] y dato < x[dx-1]  pos  [0, dx-1]
Solución:
//¿El subprograma cumple con la implementación especificada?. Tenga presente, lo que usted especifica es
lo que debe implementar y funcione eficientemente.
int BuscarDato(ALUMNO x[Max], int dx, int dato)
{
int i=0, Hallado=0, Posi, Posiv;
//Analice la condicion Porque ?
while((dato<x[0].Cod && dato>x[dx-1].Cod)||(i<dx && Hallado==0)){
Posi = i;
if(x[i].Cod==Dato){
Posiv = i;
Hallado = 1;
}
i=i+1;
}
if(Hallado){
return(Posiv);
}
else
if(dato<x[0].Cod)
return(0); //Esta en el extremo inferior
else
if(dato>x[dx-1].Cod)
return(dx); //Esta en el extremo superior
else
return(Posi); //Esta dentro
}

3. Complete la especificación mostrada para implementación mostrada:


ACCION Insertar xPos( )
//Ellimina el elemento de la posición pos del vector x
PRE:
POS:
Solución:
void InsertarxPos(ALUMNO x[Max], int *dx, int posi, ALUMNO dato)
{
int i;
*dx = *dx + 1;//¿es correcto utilizar *dx. Que problemas habria ?
i = *dx;
if(i < Max){
while(i>posi){
x[i] = x[i-1];
i = i - 1;
}
x[posi].cod = dato.cod;
strcpy(x[posi].nom, dato.nom);
x[posi].nota = dato.nota;
//x[Posi]= dato;// Tambien podemos utilizar esta instruccion. ¿Porque?
printf("\n INSERTADO en posicion %d \n ", posi+1);
}
else{
printf("Dimension fuera de Rango\n");
}
}

4. Complete la especificación para la implementación mostrada:


ACCION ( )

3
//Elimina el elemento de la posición pos del vector.
PRE:
POS:
Solución:
// Analice, podemos ver que le falta la consistencia de existencia. Especifique adecuadamente y corrija el
código.
void EliminarxPos(ALUMNO x[Max], int *dx, int posi)
{
int i, n;
printf(" ALUMNO ha sido ELIMINADO de posicion %d \n ", posi-1);
i = posi-1;
while(i<*dx){
x[i] = x[i+1];
i = i + 1;
}
//N = N - 1;
//*dx = N;
*dx = *dx-1;
}
Analice las especificaciones e implemente adecuadamente.
5. Implemente en lenguaje C la siguiente especificación ordenar vector:
ACCION ordenarxCodigo(Vector x, ENTERO dx)
//Ordena los elementos del vector por el campo código en forma ascendente
PRE: x = < >  x= <e1, e2 ..., ei , ..., en>
POS: “Vacío”  x = <e1, e2 ..., ei , ..., en>  i  [0, dx-1] / ei - 1,<= ei <= ei + 1
Donde ei = x[i]. cod / i  [0, dx-1]

6. Implemente en lenguaje C la siguiente especificación ordenar vector:


ACCION ordenarxNombre(Vector x, ENTERO dx)
//Ordena los elementos del vector por el campo nombre en forma ascendente
PRE: x = < >  x= <e1, e2 ..., ei , ..., en>
POS: “Vacío”  x = <e1, e2 ..., ei , ..., en>  i  [0, dx-1] ei - 1,<= ei <= ei + 1
Donde ei = x[i]. nom / i  [0, dx-1]

7. Implemente en lenguaje C la siguiente especificación eliminar un dato reutilizando las operaciones


anteriores buscar e insertar por posición.
ACCION insertarxValor(Vector x, ENTERO *dx, ALUMNO dato)
//Inserta el elemento dato en la posición adecuada en el vector ordenado
PRE: x = < >  x = <e1, e2 ...,en>  dato  <e1, en>
POS: “Vacío”  x : < dato, e1, e2 ..., en+1>  <e1, e2 ...,dato, ...en+1>  <e1, e2 ..., en , dato >
Donde ei = x[i]

8. Implemente en lenguaje C la siguiente especificación eliminar un dato reutilizando las operaciones


anteriores buscar eliminar por posición:
ACCION eliminarxValor(Vector x, ENTERO *dx, ALUMNO dato)
//Elimina el elemento dato del vector ordenado
PRE: x = < >  x = <e1, e2 ...,en>  dato  <e1, en>
POS: “Vacío”  x : < dato, e1, e2 ..., en+1>  <e1, e2 ...,dato, ...en+1>  <e1, e2 ..., en , dato >
Donde ei = x[i]

9. Implemente en lenguaje C la siguiente especificación editar un dato reutilizando las operaciones


anteriores, esto es, utilice la operación buscar
ACCION editarxValor(Vector x, ENTERO *dx, TD dato)
//Edita el elemento dato en un menú para actualizar lo deseado (excepto el código) en el vector ordenado
PRE: x = < >  x = <e1, e2 ...,en>  dato  [e1, en] / dato es igual a un campo del registro
POS: “Vacío”  “Dato no existe”  x = <e1, e2 ..., en> / dato = ei con la actualización deseada

4
Después de haber implementado todas y cada una de las operaciones básicas, especifique e implemente
lo siguiente:
10. Implemente una aplicación para optimizar espacios de almacenada de una matriz “hueca” o “poca densa” ,
debe implementar lo analizado en clase y adaptar todas las operaciones sobre vectores que conoce.
11. Implemente una aplicación para las operaciones básicas de una agenda.
12. Implemente un programa para gestión de una agencia matrimonial. Por cada cliente se almacenaran los
siguientes datos: Nombre, edad, sexo (M, F), aficiones (lectura, viajes, deportes, cine, gastronomía,
computadoras, juegos de rol, modelismo, mascotas). Una persona puede tener ninguna, una o más
aficiones. Se desea la estructura, las operaciones básicas el procedimiento casar dado el nombre de una
persona, esto es, se busca a una persona afín a ella.
13. Se tienen tres vectores de registros todos ordenados por código. El vector alumnos tiene los campos de
código, nombre, dirección y teléfono, el vector de Exámenes tiene los campos de código de alumno,
examen parcial, final y sustitutorio y por último el vector de prácticas que tiene los campos de código de
alumno y 5 practicas calificadas. Construya una aplicación para crear un vector de calificaciones cuyos
campos son código, nombre y nota que es el promedio final de las prácticas y exámenes también
ordenado por código.
14. Construya una aplicación con las operaciones básicas de números racionales.
15. Crear una aplicación con las operaciones básicas de números complejos.
16. Crear una aplicación con las operaciones básicas de un conjunto de caracteres.
17. Crear 4 problemas de la realidad aplicando registros –investigue- dichos problemas deben tener enunciado
del problema y la su solución.
18. Construya una aplicación para crear un diccionario español-español

Registros

Una estructura o registro es un conjunto de variables, del mismo tipo o no, agrupadas bajo un mismo nombre,
con fin de facilitar el trabajo con ellas. A cada dato dentro de la estructura la llamamos miembro, campo o
elemento.

struct PERSONA {
int dni;
char nombre[30];
char apellido[40];
char telefono[10];
char edad;
};

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