Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
_______________________________________________________________
Estructuras (struct)
Una estructura (struct) es un tipo de dato definido por el usuario. Las estructuras son
similares a los registros utilizados en otros lenguajes de programación.
Una estructura es un tipo de dato estructurado que consta de un conjunto de elementos
que pueden ser del mismo tipo o de tipos diferentes
Los componentes de una estructura se denominan campos. Cada campo tiene un nombre
llamado identificador de campo que es algún identificador elegido por el programador
cuando se declara la estructura.
Struct nombreEstructura{
TipodeDato1 campo1;
TipoDeDato2 campo2:
TipoDeDato3 campo3;
TipoDeDaton campon;
};
Lo que se esta definiendo es un Nuevo tipo de Dato llamado nombreEstruc tura que tiene un
conjunto de campos.
Ejemplos:
- Declarar una estructura llamada Producto con los siguientes campos : codigo, nombre,
precio, stock.
struct Producto{
char codigo[10];
char nombre[60];
float precio;
int stock;
};
-Declarar la Estructura Empleado con los siguientes campos : Apellidos, nombres, sueldo.
struct Empleado{
char apellidos[30];
char nombres[30];
float sueldo;
};
struct Punto{
float x;
float y;
};
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 1
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
Variables Tipo Estructura
Al declarar la estructura se ha creado un nuevo tipo de dato, pero no se ha declarado
variables de ese tipo.
Para declarar variables se puede hacer de la siguiente manera:
struct Producto{
String codigo;
String nombre;
float precio;
int stock;
} prod1, prod2, prod3;
strcpy(X.codigo, ”pr001”);
strcpy(X.nombre, ”ace”);
X.precio = 1.5;
X.stock = 200;
La sentencia de asignación
P2=P1
Equivale a :
P2.x = P1.x;
P2.y=P1.y;
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 2
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
No se puede comparar completamente una variable tipo estructura con otra.
Por ejemplo si se tiene dos variables A y B de tipo estructura
Punto A, B;
Estructuras Anidadas
Es posible declarar una estructura con campos que sean otras estructuras. Una estructura
con uno o mas campos que son tipo estructura se llaman registro jerárquico o anidado.
Ejemplo:
struct NombreEmp{
char apellidos[30];
char nombre[30];
};
struct CalleNumero{
char calle[40];
int numero;
};
Struct Empleado{
NombreEmp nombre;
CalleNumero dir;
};
Empleado E;
strcpy(E.nombre.apellidos,“Juan”);
strcpy(E.nombre.apellidos, “Peréz”);
strcpy(E.dir.calle, “Zela”);
E.dir.numero= 254
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 3
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
Ejercicios Resueltos
1) Programa para ingresar las coordenadas de 2 puntos del plano cartesiano. Reportar la
distancia que hay entre ellos y la ecuación de la recta que pasa por ellos.
#include<iostream>
#include<math.h>
using namespace std;
struct Punto{
float x;
float y;
};
int main()
{
Punto P1, P2;
ingresoPunto(P1,"Primer Punto");
ingresoPunto(P2,"Segundo Punto");
cout<<"La distancia entre los puntos es : "<<distancia(P1,P2)<<endl;
system("pause");
return 0;
}
#include<iostream>
#include<math.h>
using namespace std;
struct Complejo{
float real;
float imag;
};
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 4
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 5
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
Complejo multiplicacion(Complejo C1, Complejo C2)
{
Complejo M;
M.real=C1.real*C2.real-C1.imag*C2.i mag;
M.imag=C1.imag*C2.real+C1.real+C2.i mag;
return M;
}
3) Hacer un programa para ingresar los nombres y las notas de los alumnos de Lenguaje de
Programación y se reporte:
a) Una Lista en orden Alfabético
b) Una Lista en orden de Merito.
#include<iostream>
#include<string.h>
struct Alumno{
char nombre[40];
float nota;
};
int main()
{
Alumno A[100];
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 6
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
int n;
numAlumnos(n);
ingreso(A,n);
ordenAlfabetico(A,n);
cout<<"Lista en orden alfabetico"<<endl;
reporte(A,n);
ordenMerito(A,n);
cout<<"Lista en orden de Merito"<<endl;
reporte(A,n);
system("pause");
return 0;
}
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 7
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
if(strcmp(A[i].nombre,A[j].nombre)>0)
{
temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
4) Dada una colección de puntos (xi,yi), i=1, 2, ....,n, existe una recta L : y = Mx + B para la
cual es mínima la suma de los cuadrados de las distancias de los puntos a la recta.
Así, L constituye la recta mas próxima a los puntos dados, y puede ser utilizada para
estimar valores aproximados (x,y)
Escríbase un programa que permita hallar la recta de regresión asociada a una colección
de datos.
Los coeficientes M y B son dados por las formulas:
N * SXY - SX * SY
M = ───────────────────
N * SXX - SX * SX
SXX * SY - SXY * SX
B = ────────────────────
N * SXX - SX * SX
en donde :
SX = X1 + X2 + ... + Xn
SY = Y1 + Y2 + ... + Yn
SXX = X1^2 + X2^2+ ... + Yn^2
SXY = X1*Y1 + X2*Y2 + ... + Xn*Yn
#include<iostream>
#include<math.h>
using namespace std;
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 8
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
struct Punto{
float x;
float y;
};
void numeroDePuntos(int &n);
void ingresoPuntos(Punto P[], int n);
void calculoEcuacion(Punto P[], int n, float &M, float &B);
void reporteEcuacionRecta(float M, float B);
int main()
{
Punto P[MAX];
float M,B;
int n;
numeroDePuntos(n);
ingresoPuntos(P,n);
calculoEcuacion(P,n,M,B);
reporteEcuacionRecta(M,B);
system("pause");
return 0;
}
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 9
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
sx=sx+P[i].x;
sy=sy+P[i].y;
sxy=sxy+P[i].x*P[i].y;
sxx=sxx+P[i].x*P[i].x;
}
den = n*sxx - sx*sx;
M = (n*sxy-sx*sy)/den;
B = (sxx*sy - sxy*sx)/den;
}
5) Hacer un programa para manipular los datos de Productos. En el se podrá ingresar sus
datos, consultar, modificarlos, eliminarlos y reportar, esto debe estar dentro de un menu.
#include<iostream>
#include<string.h>
#include<ctype.h>
using namespace std;
#define MAX 20
struct Producto{
char codigo[10];
char nombre[30];
float precio;
int stock;
};
int main()
{
int op,n=0;
Producto X[MAX];
do{
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 10
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
system("cls");
cout<<"Mantenimiento de Productos "<<endl;
cout<<"[1] Ingreso"<<endl;
cout<<"[2] Consulta"<<endl;
cout<<"[3] Modificacion"<<endl;
cout<<"[4] Eliminacion"<<endl;
cout<<"[5] Reporte"<<endl;
cout<<"[6] Salir "<<endl;
do{
cout<<"Ingrese opcion (1-6) : ";
cin>>op;
}while(op<1 || op>6);
switch(op)
{
case 1 : ingreso(X,n);break;
case 2 : consulta(X,n);break;
case 3 : modificacion(X,n);break;
case 4 : eliminacion(X,n);break;
case 5 : reporte(X,n);break;
}
}while(op!=6);
}
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 11
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
}
p=buscarCodigo(X,n,X[n].codigo);
if(p==-1)
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 12
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
{
cout<<"Nombre : ";
cin.get();
cin.getline(X[n].nombre,30);
do{
cout<<"Precio : ";
cin>>X[n].precio;
}while(X[n].precio<=0);
do{
cout<<"Stock : ";
cin>>X[n].stock;
}while(X[n].stock<=0);
n++;
}
else
cout<<"-- El codigo ya existe !!"<<endl;
resp=continuar("Deseas ingresar otro Producto (s/n) :");
}while(resp=='S');
}
char codigo[10],resp;
do{
system("cls");
cout<<"Modificacion de Datos"<<endl<<endl;
cout<<"Codigo a buscar : ";
cin>>codigo;
p=buscarCodigo(X,n,codigo);
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 13
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
if(p!=-1)
{
mostrarProducto(X[p]);
modificarProducto(X[p]);
}
else
cout<<"el codigo del producto no existe"<<endl;
resp=continuar("Deseas modificar otro producto(s/n) ");
}while(resp=='S');
}
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 14
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
Ejercicios Propuestos
1) Ingresar el nombre, nota del Examen1, nota del Examen2 y nota de Trabajos de n
alumnos si los pesos de los exámenes son 0.25 y del trabajo 0.5 encontrar el promedio
ponderado de cada alumno y reportarlos en orden de Merito, además reportar el Promedio
general.
2) Ingresar los datos de n clientes de un banco (código, nombre, saldo). Haga un menú
donde se pueda crear una Cuenta, consultar Saldo, depositar una cantidad, retirar una
cantidad y Mostrar todas las cuentas ingresadas.
3) Los términos de un polinomio los podemos colocar como una estructura (coeficiente y
exponente). Ingresar el grado y los términos de un polinomio y Escriba una funcion que
encuentre el valor numérico del polinomio.
4) Hacer un programa para ingresar los datos de n trabajadores (código, nombre, valor por
hora, horas trabajadas). Hacer las siguientes operaciones:
- Mostrar los Trabajadores ordenados por nombre,
- Mostrar los Trabajadores ordenados por sueldo
- Ingresar un codigo de un trabajador y mostrar todos sus datos.
7) De n alumnos se tiene los siguientes datos: código, nombre apellidos, fecha de ingreso.
Se pide ordenar por fecha de ingreso.
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 15
Curso: Fundamentos de Programacion Estructuras
_______________________________________________________________
* Nacionalidad
* Salario
Hacer un programa que haga lo siguiente:
a) El numero, nombre y nacionalidad del profesor que mas ganó el año anterior.
b) El monto total pagado en el año a los profesores del departamento X.
c) El monto total pagado a los profesores extranjeros (nacionalidad distinta a Peru)
d) El nombre del profesor del departamento Y que más ganó en el año anterior.
10) Una inmobiliaria tiene información disponible sobre departamentos de renta. De cada
departamento se conoce:
CLAVE: Variable entera que identifica al inmueble
EXTENSION: Variable tipo real que representa la superficie del departamento en metros
cuadrados.
UBICACIÓN: Variable tipo cadena de caracteres que indica si la ubicación del inmueble es
excelente, buena, regular o mala
PRECIO: variable tipo real que representa el precio del inmueble.
DISPONIBLE: Variable entera que indica si el inmueble esta disponible para la renta o no.
(1: disponible 0: no disponible)
Hacer un programa que haga lo siguiente:
a) Listar los datos de todos los departamentos disponibles que tengan un precio mayor
o igual a un cierto valor P.
b) Listar los datos de los departamentos disponibles que tengan una superficie mayor
o igual a un cierto valor dado E y una ubicación exc elente.
c) Listar el monto de la renta de todos los departamentos alquilados.
11) Un departamento de personal de una escuela tiene registros del nombre, sexo y edad de
cada uno de los profesores adscritos al mismo.
-----------------------------------------------------------------------------------------------------
Docente: Marcelino Torres Villanueva 16