Академический Документы
Профессиональный Документы
Культура Документы
Gua 5
Facultad:
Ingeniera
Escuela:
Computacin
Asignatura: Programacin II
Materiales y Equipo
Computadora con el software DevC++
Gua Nmero 5
Introduccin Terica
Arreglo de objetos.
La funcin bsica de un arreglo es almacenar en una variable ms de un valor de un mismo
tipo de dato, por ejemplo la siguiente declaracin int numero [5]; permite almacenar en la
variable numero, 5 valores enteros.
En las clases el concepto de arreglos es el mismo, con la diferencia que ahora se almacenarn
objetos de una clase o de diferentes clases.
Los objetos se pueden estructurar como un array. Los objetos son variables y tienen las
mismas capacidades y atributos que cualquier tipo de variables, por tanto es posible disponer
objetos en un array.
La sintaxis es exactamente igual a la utilizada para declarar y acceder al array. Tambin
disponemos de arrays bidimensionales.
Cuando se crea un array de objetos stos se inicializan llamando al constructor sin
argumentos. Por consiguiente, siempre que se prevea organizar los objetos en un array, la
clase debe tener un constructor que pueda llamarse sin parmetros.
// Se declara el puntero
/* al puntero se le asigna la memoria en forma dinmica y se crea el
arreglo */
system(cls);
if (!p)
// Se verifica que exista el puntero
{ cout<<Error de asignacion\n;
exit(1);
}
for (i = 0; i < 5; i++)
p[i] = i+1;
Procedimiento
Ejemplo 1:
En el siguiente programa se muestra el uso de arreglos dinmicos de objetos usando NEW y
DELETE
El programa crea una clase denominada alumno, la cual contiene un arreglo para el nombre
del alumno y un arreglo para sus notas. A partir de esta clase se crea un puntero al
objeto alumno y a partir de este puntero se libera memoria para un arreglo de objetos
alumno por medio de NEW y el puntero a objeto para incluir todos los alumnos de una
clase en tiempo de ejecucin.
#include <iostream>
#include <iomanip>
using namespace std;
#define CAL 5 // Define constante para el numero de calificaciones a manejar
class Alumno
{
private:
// Definicin de la clase
// Funcin set
// Muestra el nombre del alumno
// Muestra las notas del alumno
};
void Alumno::ingresar( )
//Ingresa los datos de un alumno
{ fflush(stdin);
cout <<"Ingrese el Nombre del estudiante : ";
gets(nombre);
int i;
for (i = 0; i < CAL; i++)
{ cout << "Por favor ingrese la calificacion No. " << i+1; cout <<" : ";
cin >> calificaciones[i+1];
}
}
void Alumno::mostrar_nombre()
{ cout << nombre;
//Escribe el nombre del alumno en la pantalla
}
void Alumno::reporte()
{ int i;
cout<<"------------------------------------------------------"<<endl;
// Se le da formato a la tabla.
for (i = 0; i < CAL; i++)
{ cout<<setw(15)<<"Nota "<<i+1<<" : "<<calificaciones[i+1]<<setw(5)<<endl;
}
}
int main( )
{ int num_est = 0;
int numero_objeto = 0;
int opcion;
char nom[50];
int i=0;
int n=0;
int dim;
Alumno *p;
if (p == 0)
{ cout << "Error no hay suficiente memoria";
return 0;
};
do
//estructura do...while que mantiene en el ciclo principal
{
cout<<"
Menu"<<endl;
cout<<" 1. Ingresar datos de un nuevo estudiante. (Nombre y notas)"<<endl;
cout<<" 2. Ver lista de estudiantes inscritos."<<endl;
cout<<" 3. Reporte de un estudiante."<<endl;
cout<<" 4. Salir."<<endl;
cout<<"------------------------------------------------"<<endl;
fflush(stdin);
cout<<"\n Elija una opcion del menu (1-4): ";
cin>>opcion;
switch (opcion)
{
case 1:
(p+numero_objeto) -> ingresar( ); //operador flecha en vez de operador punto
numero_objeto++;
system("cls");
break;
case 2:
cout <<"\n";
cout<<"------------------------------------------------------"<<endl;
cout<<"
LISTADO DE ESTUDIANTES INSCRITOS
cout<<"------------------------------------------------------"<<endl;
"<<endl;
for (i=0;i<numero_objeto;i++)
{ cout << "Estudiante numero " << i+1;
cout << ": ";
(p+i) -> mostrar_nombre( );
cout << "\n";
}
cout<<endl;
system("pause");
system("cls");
break;
case 3:
cout << "Ingrese el numero de lista del estudiante a generar el reporte: ";
cin >> n;
if ( n > 0)
}
}
while (opcion != 4); //sale del programa
delete [ ] p; //libera la memoria asignada a *p
}
Anlisis de Resultados
Ejercicio 1:
Tomar el cdigo anterior como referencia y realizar los cambios que sean necesarios para
crear un programa que simule un sistema de control de notas.
Considere que cada alumno puede cursar como mximo 5 asignaturas por ciclo. Para cada
asignatura se deben considerar notas por cada perodo (el ciclo est formado por 3 perodos) y
una nota final de laboratorio. Las notas deben promediarse para obtener una nota global por
materia, considerando los siguientes porcentajes por perodo (1: 30%; 2: 35% y 3: 35%),
Investigacin Complementaria
1. Investigue cuales son los usos mas comunes de punteros a objetos en C++.
2. Qu es el puntero this. Utilizacin en C++.
3. Utilidad de las clases amigas en C++. Incluir ejemplos de su uso.
Alumno:
Hoja de cotejo:
Mquina No:
Docente:
GL:
Fecha:
Docente:
EVALUACIN
%
CONOCIMIENTO
Del 20
al 30%
APLICACIN
DEL
CONOCIMIENTO
Del 40%
al 60%
1-4
5-7
8-10
Conocimiento
deficiente de
los fundamentos
tericos
Conocimiento
y explicacin
incompleta de
los
fundamentos
tericos
Conocimiento
completo y
explicacin
clara de los
fundamentos
tericos
No tiene
actitud
proactiva.
Actitud
propositiva y
con
propuestas no
aplicables al
contenido de
la gua.
Tiene actitud
proactiva y
sus
propuestas
son
concretas.
ACTITUD
Del 15%
al 30%
TOTAL
100%
Nota