Você está na página 1de 63

11 Tipos de objetos III: Estructuras

^
Las estructuras son el segundo tipo de datos estructurados que veremos (valga la
redundancia).
Al contrario que los arrays, las estructuras nos permiten agrupar varios datos, que
mantengan algn tipo de relacin, aunque sean de distinto tipo, permitiendo manipularlos
todos juntos, usando un mismo identificador, o cada uno por separado.
Las estructuras son llamadas tambin muy a menudo registros, o en ingls records. Tienen
muchos aspectos en comn con los registros usados en bases de datos. Y siguiendo la
misma analoga, cada objeto de una estructura se denomina a menudo campo, o field.
Sintaxis:
struct [<identificador>] {
[<tipo> <nombre_objeto>[,<nombre_objeto>,...]];
} [<objeto_estructura>[,<objeto_estructura>,...];

El identificador de la estructura es un nombre opcional para referirse a la estructura.


Los objetos de estructura son objetos declarados del tipo de la estructura, y su inclusin
tambin es opcional. Sin bien, an siendo ambos opcionales, al menos uno de estos
elementos debe existir.
En el interior de una estructura, entre las llaves, se pueden definir todos los elementos que
consideremos necesarios, del mismo modo que se declaran los objetos.
Las estructuras pueden referenciarse completas, usando su nombre, como hacemos con los
objetos que ya conocemos, y tambin se puede acceder a los elementos definidos en el
interior de la estructura, usando el operador de seleccin (.), un punto.
Una vez definida una estructura, es decir, si hemos especificado un nombre para ella, se
puede usar igual que cualquier otro tipo de C++. Esto significa que se pueden declarar ms
objetos del tipo de estructura en cualquier parte del programa. Para ello usaremos la forma
normal de declaracin de objetos, es decir:
[struct] <identificador> <objeto_estructura>
[,<objeto_estructura>...];

En C++ la palabra struct es opcional en la declaracin de objetos, al contrario de lo que


sucede en C, en el que es obligatorio usarla.
Ejemplo:

struct Persona {
char Nombre[65];
char Direccion[65];
int AnyoNacimiento;
} Fulanito;

Este ejemplo define la estructura Persona y declara a Fulanito como un objeto de ese tipo.
Para acceder al nombre de Fulanito, por ejemplo para visualizarlo, usaremos la forma:
cout << Fulanito.Nombre;

Funciones en el interior de estructuras


^
C++, permite incluir funciones en el interior de las estructuras. Normalmente estas
funciones tienen la misin de manipular los datos incluidos en la estructura, y su uso est
muy relacionado con la programacin orientada a objetos.
Aunque esta caracterstica se usa casi exclusivamente con las clases, como veremos ms
adelante, tambin puede usarse en las estructuras. De hecho, en C++, las diferencias entre
estructuras y clases son muy tenues.
Dos funciones muy particulares son las de inicializacin, o constructor, y el destructor.
Veremos con ms detalle estas funciones cuando asociemos las estructuras y los punteros.
El constructor es una funcin sin tipo de retorno y con el mismo nombre que la estructura.
El destructor tiene la misma forma, salvo que el nombre va precedido el smbolo "~".
Nota: para aquellos que usen un teclado espaol, el smbolo "~" se obtiene pulsando las
teclas del teclado numrico 1, 2, 6, mientras se mantiene pulsada la tecla ALT,
([ALT]+126). Tambin mediante la combinacin [Atl Gr]+[4] y un espacio (la tecla [4] de
la zona de las letras, no del teclado numrico).
Veamos un ejemplo sencillo para ilustrar el uso de constructores:
Forma 1:
struct Punto {
int x, y;
Punto() {x = 0; y = 0;} // Constructor
} Punto1, Punto2;

Forma 2:
struct Punto {
int x, y;
Punto(); // Declaracin del constructor

} Punto1, Punto2;
// Definicin del constructor, fuera de la estructura
Punto::Punto() {
x = 0;
y = 0;
}

Si no usramos un constructor, los valores de x e y para Punto1 y Punto2 estaran


indeterminados, contendran la "basura" que hubiese en la memoria asignada a estas
estructuras durante la ejecucin. Con las estructuras ste ser el caso ms habitual, ya que si
necesitamos usar constructores para asignar valores iniciales, ser mucho ms lgico usar
clases que estructuras.
Mencionar aqu, slo a ttulo de informacin, que el constructor no tiene por qu ser nico.
Se pueden definir varios constructores, pero veremos esto mucho mejor y con ms detalle
cuando veamos las clases.
Usando constructores nos aseguramos los valores iniciales para los elementos de la
estructura. Veremos que esto puede ser una gran ventaja, sobre todo cuando combinemos
estructuras con punteros, en captulos posteriores.
Tambin podemos incluir otras funciones, que se declaran y definen como las funciones
que ya conocemos.
Otro ejemplo:
#include <iostream>
using namespace std;
struct stPareja {
int A, B;
int LeeA() { return
int LeeB() { return
void GuardaA(int n)
void GuardaB(int n)
} Par;

A;}
B;}
{ A
{ B

// Devuelve el valor de A
// Devuelve el valor de B
= n;} // Asigna un nuevo valor a A
= n;} // Asigna un nuevo valor a B

int main() {
Par.GuardaA(15);
Par.GuardaB(63);
cout << Par.LeeA() << endl;
cout << Par.LeeB() << endl;
return 0;
}

En este ejemplo podemos ver cmo se define una estructura con dos campos enteros, y dos
funciones para modificar y leer sus valores. El ejemplo es muy simple, pero las funciones
de guardar valores se pueden elaborar para que no permitan determinados valores, o para
que hagan algn tratamiento de los datos.

Por supuesto se pueden definir otras funciones y tambin constructores ms elaborados e


incluso, redefinir operadores. Y en general, las estructuras admiten cualquiera de las
caractersticas de las clases, siendo en muchos aspectos equivalentes.
Veremos estas caractersticas cuando estudiemos las clases, y recordaremos cmo
aplicarlas a las estructuras.

Inicializacin de estructuras
^
De un modo parecido al que se inicializan los arrays, se pueden inicializar estructuras, tan
slo hay que tener cuidado con las estructuras anidadas. Por ejemplo:
struct
int
int
int
};

A {
i;
j;
k;

struct B {
int x;
struct C {
char c;
char d;
} y;
int z;
};
A ejemploA = {10, 20, 30};
B ejemploB = {10, {'a', 'b'}, 20};

Cada nueva estructura anidada deber inicializarse usando la pareja correspondiente de


llaves "{}", tantas veces como sea necesario.

Asignacin de estructuras
^
La asignacin de estructuras est permitida, pero slo entre objetos del mismo tipo de
estructura, (salvo que se usen constructores), y funciona como la intuicin nos dice que
debe hacerlo.
Veamos un ejemplo:
struct Punto {
int x, y;
Punto() {x = 0; y = 0;}
} Punto1, Punto2;

int main() {
Punto1.x = 10;
Punto1.y = 12;
Punto2 = Punto1;
}

La lnea Punto2 = Punto1; equivale a Punto2.x = Punto1.x; Punto2.y =


Punto1.y;.
Quizs te hayas quedado intrigado por el comentario anterior, que adelantaba que se pueden
asignar estructuras diferentes, siempre que se usen los constructores adecuados.
Esto, en realidad, se puede extender a cualquier tipo, no slo a estructuras. Por ejemplo,
definiendo el constructor adecuado, podemos asignar un entero a una estructura. Veamos
cmo hacer esto.
Hasta ahora, los constructores que hemos visto no usaban argumentos, pero eso no
significa que no puedan tenerlos.
Crearemos como ejemplo, una estructura para manejar nmeros complejos. Un nmero
complejo est compuesto por dos valores reales, el primero contiene lo que se llama la parte
real y el segundo la parte imaginaria.
struct complejo {
double real;
double imaginario;
};

Esta estructura es suficiente para muchas de las cosas que podemos hacer con nmeros
imaginarios, pero aprovechando que podemos crear funciones, podemos aadir algunas que
hagan de una forma ms directa cosas que de otro modo requieren aadir cdigo externo.
Por ahora nos limitaremos a aadir unos cuantos constructores. El primero es el ms
lgico: un constructor por defecto:
struct complejo {
complejo() { real=0; imaginario = 0; }
double real;
double imaginario;
};

Este construtor se usar, por ejemplo, si declaramos un array:


complejo array[10];

El constructor por defecto ser llamado para cada elemento del array, aunque no aparezca
tal llamada en ningn punto del programa.

Otro constructor nos puede servir para asignar un valor a partir de dos nmeros:
struct complejo {
complejo() { real=0; imaginario = 0; }
complejo(double r, double i) { real=r; imaginario = i; }
double real;
double imaginario;
};

Mediante este constructor podemos asignar valores inciales en la declaracin:


complejo c1(10.23, 213.22);

Los nmeros reales se consideran un subconjunto de los imaginarios, en los que la parte
imaginaria vale cero. Esto nos permite crear otro constructor que slo admita un valor real:
struct complejo {
complejo() { real=0; imaginario = 0; }
complejo(double r, double i) { real=r; imaginario = i; }
complejo(double r) { real=r; imaginario = 0; }
double real;
double imaginario;
};

Este constructor nos permite, como en el caso anterior, inicializar un valor de un complejo
en la declaracin, pero tambin nos permite asignar un valor double a un complejo, y por el
sistema de promocin automtico, tambin podemos asignar valores enteros o en coma
flotante:
complejo c1(19.232);
complejo c2 = 1299.212;
int x = 10;
complejo c3 = x;

Este tipo de constructores se comportan como conversores de tipo, nada nos impide crear
constructores con cualquier tipo de parmetro, y tales constructores se podrn usar para
convertir cualquier tipo al de nuestra estructura.

Arrays de estructuras
^
La combinacin de las estructuras con los arrays proporciona una potente herramienta para
el almacenamiento y manipulacin de datos.
Ejemplo:
struct Persona {
char Nombre[65];
char Direccion[65];

int AnyoNacimiento;
} Plantilla[200];

Vemos en este ejemplo lo fcil que podemos declarar el array Plantilla que contiene los
datos relativos a doscientas personas.
Podemos acceder a los datos de cada uno de ellos:
cout << Plantilla[43].Direccion;

O asignar los datos de un elemento de la plantilla a otro:


Plantilla[0] = Plantilla[99];

Estructuras anidadas
^
Tambin est permitido anidar estructuras, con lo cual se pueden conseguir superestructuras
muy elaboradas.
Ejemplo:
struct stDireccion {
char Calle[64];
int Portal;
int Piso;
char Puerta[3];
char CodigoPostal[6];
char Poblacion[32];
};
struct stPersona {
struct stNombre {
char Nombre[32];
char Apellidos[64];
} NombreCompleto;
stDireccion Direccion;
char Telefono[10];
};
...

En general, no es una prctica corriente definir estructuras dentro de estructuras, ya que


tienen un mbito local, y para acceder a ellas se necesita hacer referencia a la estructura
ms externa.
Por ejemplo para declarar un objeto del tipo stNombre hay que utilizar el operador de
acceso (::):
stPersona::stNombre NombreAuxiliar;

Sin embargo para declarar un objeto de tipo stDireccion basta con declararla:
stDireccion DireccionAuxiliar;

Comentarios de los usuarios (39)

Oscar
2011-09-18 09:10:29
Hola, disculpen pero como puedo declarar dimensin de un array de una estructura, por
ejemplo:
struct Persona \{
char Nombre[65];
char Direccion[65];
int AnyoNacimiento;
} Plantilla[variable];
Si mi programa empieza con la funcin principal
int main()
{
int variable;
cout<<Cuantas personas declararas en tu lista?;
cin>>variable;
....
como es que devuelvo este valor a la estructura? para poder declarar el valor de su objeto
Plantilla[variable] y no tener espacio reservado de memoria sin utilizar o quedarme corto de
espacio
Por su ayuda de antemano muchas gracias.

Steven R. Davidson
2011-09-18 12:41:11
Hola scar,
En primer lugar, no deberas definir una variable ni un array de estructuras globalmente. En
tu caso, sera as,
struct Persona
{
char Nombre[65];
char Direccion[65];
int AnyoNacimiento;
};
int main()
{
Persona Plantilla[10];
...
}

La regla general es que las variables son locales y lo dems es global: tipos de datos,
constantes, y funciones (prototipos y definiciones).
En segundo lugar, no puedes crear un array con un tamao variable, porque el compilador
es quien gestiona su creacin y por tanto gestiona la memoria requerida para albergar sus
elementos (el array en s). Por consiguiente, no puedes imponer una cantidad variable de
elementos; el compilador necesita tener toda la informacin para crear un array y la
cantidad variable sera informacin obtenida durante la ejecucin del programa.
Tenemos dos soluciones ante este problema:
1. Creamos el array con una cantidad mxima de elementos, pero no usamos todos los
elementos del array. Esto significa que podemos variar la cantidad actual de elementos,
pero siempre tomando en cuenta que hay un tope. El esquema del programa sera as,
int main()
{
Persona Plantilla[10];
int nCantActual;
cout << "Cuantas personas declararas en tu lista? (Max: 10)";
cin >> nCantActual;
...
}

Aqu podemos usar 'nCantActual' para tratar el array segn la cantidad actual de elementos.
Obviamente, deberamos agregar ms cdigo fuente para asegurarnos de que esta cantidad
no rebase el tope de 10, ni tampoco que sea menor a 1.

2. Usamos memoria dinmicamente adjudicada. An no hemos visto esta opcin, as que no


quisiera confundirte ahora mismo con esta otra solucin. Por otro lado, veremos este tema,
que involucra el tema de punteros, en el siguiente captulo 12 y posteriormente en los
captulos 13 y 17, principalmente.
Espero que esto te aclare las dudas.
Steven

pablo
2011-10-11 23:32:05
como puedo completar mi tarea
Supn que se est diseando el mdulo de procesamiento de un sistema para manipulacin
de grficos. En este caso te han asignado manipular los siguientes poliedros
tridimensionales:
Tetraedro
Cubo
Octaedro
Las actividades a realizar son las siguientes:
o Define las estructuras necesarias para representar los objetos dados.
o Disea un programa en lenguaje C que solicite las coordenadas de los vrtices de los tres
objetos.
o Disea un men, una vez que cuentas con las coordenadas de los objetos, en el cual se
puedan elegir las siguientes operaciones a realizar sobre los poliedros:
Traslacin: Se debern proporcionar la traslacin en direccin del eje X, la traslacin en
direccin del eje Y, y la traslacin en direccin del eje Z.
Rotacin: Se deber proporcionar el ngulo en radianes a rotar. Adems, deber indicarse
alrededor de qu eje del espacio tridimensional se lleva a cabo la rotacin: X, Y o Z.
Escalamiento: Se debern proporcionar el escalamiento en direccin del eje X, el
escalamiento en direccin del eje Y, y el escalamiento en direccin del eje Z.

o Presenta los nuevos valores de sus coordenadas, al momento en que los objetos han sido
transformados de acuerdo a la operacin elegida.
#include <stdio.h>
struct punto
{
int x;
int y;
int z;
};
int main()
{
struct tetraedro
{
struct punto p1;
struct punto p2;
struct punto p3;
struct punto p4;
};
struct cubo
{
struct punto p1;
struct punto p2;
struct punto p3;
struct punto p4;

struct punto p5;


struct punto p6;
};
struct octaedro
{
struct punto p1;
struct punto p2;
struct punto p3;
struct punto p4;
struct punto p5;
struct punto p6;
struct punto p7;
struct punto p8;
};

Steven R. Davidson
2011-10-12 01:44:22
Hola Pablo,
Podras definir un punto 3D con coordenadas enteras, pero sugiero que sean de coma
flotante, como por ejemplo 'float' o 'double'.
Las representaciones de los 3 poliedros no estn mal, pero recomiendo que uses un array de
puntos, para representar una lista de sus vrtices. Por ejemplo,
struct tetraedro
{
struct punto vertices[4];
};

Me temo que deberas cambiar la definicin del cubo por la del octaedro, y viceversa. El
cubo tiene 8 vrtices y el octaedro (regular) tiene 6 vrtices.
Para el resto de las tareas que debes implementar, sugiero que busques informacin acerca
de las transformaciones afines que son la traslacin, rotacin, y cambio de escala.
Si quieres, puedes consultar el captulo 6 de nuestro curso de grficos (
http://graficos.conclase.net/curso/index.php?cap=006#inicio ) acerca del modelado y de las
transformaciones afines. El problema es que el captulo 6 trata el caso de 2D, pero puedes
extender los conceptos a 3D, sin mucho problema. Las rotaciones son algo ms
complicadas, pero seguro que puedes encontrar las frmulas y matrices sin problemas en
internet.
Espero que esto te oriente.
Steven

anonimo
2011-10-30 00:16:39
Por favor, pueden arreglar lo de las barras en los cdigos? la verdad molesta mucho...

belky sagrario velasquez


2012-02-28 04:31:38
mire tengo un programa en el cual me piden que usando uif y for muestre cual es la nota
mayor y cual es la menor no entiendo me pueden ayudar se los agradesere mucho

gyakuza
2012-02-29 01:50:35
podrian ayudarme tengo el siguiente codigo y me piden que lo compile y encientre los
errores, corrija y describa como es que funciona pero no le encuentro como sobre todo
cuando guarda los datos en el registro c del arreglo y en donde pide buscar al perro por la
clave, podrian checarlo gracias, mi correo es gyakuza@gmail.com po si no sale con el
comentario:
#include <stdio.h>
#include <stdlib.h>

#include <conio.h>
main(){
/* Declaracin del arreglo de tipo estructura perro */
struct perro{
char fecha[10];
char raza[30];
char color[50];
char nombre[30];
int edad;
float peso;
} perros[100];
int c=0, op, clave;
do{ /* Inicio del ciclo que imprime el men*/
printf( "\n----------------------------------------\n");
printf( "\nRefugio para perros -Ladrido Feliz- \n");
printf( "\n----------------------------------------\n");
printf( "1) Registrar un perro \n");
printf( "2) Buscar un perro \n");
printf( "3) Salir \n");
printf( "Elige una opci%cn:",162 );
scanf("%d",&op);
switch (op){
case 1: /*Opcin Registrar perro */

printf( "\n------------------------------\n");
if(c>=100) /* Verifica si hay espacio */
printf("El refugio esta lleno\n");
else{
/*Si hay espacio pide los datos del perro y los guarda en el registro c del arreglo */
printf( "Ingresa los datos del perro:");
printf( "Clave:%.3d\n", &c);
printf( "fecha de ingreso[dd/mm/aa]: ");
scanf( "%s", perros[c].fecha);
printf( "nombre: ");
fflush(stdin);
gets( perros[c].nombre);
printf( "color: ");
gets( perros[c].color);
printf( "raza: ");
gets( perros[c].raza);
printf( "edad: ");
scanf("%d" ,&perros[c].edad);
printf( "peso: ");
scanf("%f" ,&perros[c].peso);
c++;
}
break;

case 2: /* Opcin buscar perro */


printf( "\n-------------------------------\n");
printf( "Clave: ");
scanf("%d",&clave);
/* verifica que la clave sea vlida */
while(clave>=100 || clave <0){
/* Imprime los datos del perro correspondiente a la clave */
printf( "nombre:%s\n",perros[clave].nombre);
printf( "fecha de ingreso: %s\n", perros[clave].fecha);
printf( "color: %s\n", perros[clave].color);
printf( "raza: %s\n", perros[clave].raza);
printf( "edad: %d a%cos\n", perros[clave].edad,164);
printf( "peso: %.2f kilos\n", perros[clave].peso);
}
break;
case 3: /* Caso salir, no hace nada */
break;
default: /* Caso opcin invlida */
printf( "Opcion no valida\n");
}
}while (op!=3); /* El ciclo do-while se repite mientras la opcin no sea salir (3) */
}

Evy
2012-03-17 20:13:42
Es posible inicializar una cadena de caracteres en main(),si se encuentra en una estructura
y su objeto es un array?
Lo he visto posible con int
struct Persona {
char Nombre[65];
char Direccion[65];
int AnyoNacimiento;
} Plantilla[200];
main()
{
cout<<"Cual es tu nombre?";
cin>>Plantilla[0].Nombre;
Plantilla[0].AnyoNacimiento=1988;
cout<<Plantilla[0].AnyoNacimiento<<endl;
cout<<Plantilla[0].Nombre<<endl;
Plantilla[1].Nombre="Evy";//No se por que no puedo inicializar, creo que espor que intento
guardar varios
caracteres en una sola posicin
cout<<Plantilla[0].Nombre<<endl;
}
GRACIAS

Steven R. Davidson
2012-03-17 23:21:10
Hola Evy,
En primer lugar, la funcin 'main()' DEBE definirse como 'int' para el tipo de retorno.
En cuanto a tu comentario:
Plantilla[1].Nombre="Evy";//No se por que no puedo inicializar, creo que
es por que intento guardar varios caracteres en una sola posicin

Hay dos matices a comentar:


- No se trata de una inicializacin, sino de una mera asignacin.
- La razn de que no se puede realizar esta asignacin es que no se puede hacer
directamente entre dos arrays. Veremos el porqu en el siguiente captulo 13. Bsicamente,
ests intentando modificar el array con una direccin de memoria, y no lo que pretendes
hacer, que es asignar los elementos de un array al otro. Para esto, tendrs que copiar
carcter a carcter explcitamente. La otra opcin es invocar la funcin estndar, 'strcpy()',
declarada en <cstring> (o <string.h> si usas C). Esto es,
strcpy( Plantilla[1].Nombre, "Evy" );

Espero que esto aclare la duda.


Steven

marcillo
2012-05-04 03:40:02
Tengo un problema para que la funcion "verificacion" coja los valores ingresados en
"ingresar"
#include <iostream.h>
#include <stdio.h>
//Estructura clase 03/05/2012
struct competencia
{ char nombre_atleta[50];

float tiempo_alcanzado;
};
void verificacion(struct competencia estr);
void ingresar(struct competencia A);
void ingresar(struct competencia A)
{
printf("Ingrese el nombre: "); scanf("%s",&A.nombre_atleta);
printf("Ingrese el tiempo alcanzado: "); scanf("%f",&A.tiempo_alcanzado);
}
void verificacion(struct competencia estr, ingresar)
{
if(estr.tiempo_alcanzado<=3)
printf("el altleta %s logro un tiempo menos a 3.01
min",estr.nombre_atleta,estr.tiempo_alcanzado);
else printf("\n\tEl atleta %s logro un tiempo superior a 3.00 minutos",estr.nombre_atleta);
getch();
}
void main()
{
clrscr();
struct competencia A;
ingresar(A);
verificacion(A);
printf("\n%s Tiempo alcanzadado %.2f minutos",A.nombre_atleta,A.tiempo_alcanzado);

getch();
}

Humberto
2012-05-16 04:50:52
Alguien me puede Ayudar con este Proyecto se los voy agradecer mucho..!!!
El proyecto final consiste en el desarrollo de una aplicacin que aplique los conceptos de
arreglos, procedimientos, funciones, libreras y escritura/lectura de datos en archivos.
Su programa deber tomar en cuenta el uso de cuatro archivos de texto:
Clientes, Productos, Inventario, Facturas
Clientes: Cdigo de cliente, Nombre
Productos: Cdigo de Producto, Nombre, Precio
Inventario: Cdigo de Producto, Cantidad
Facturas: Cdigo de Cliente, Cdigo de Producto, Cantidad, precio
Transacciones de Clientes:
Creacin/Edicin/Eliminar Clientes
Transacciones de Productos:
Creacin/Edicin/Eliminar Productos
Transacciones de Inventario:
Actualizar inventario
Transacciones de Facturas:
Realizar compras de productos que estn disponibles en inventario por parte de clientes que
estn registrados. Despus de realizar la compra se debe actualizar los valores en inventario
y almacenar la transaccin en el archivo de Facturas.
Bsquedas requeridas:

Producto que genero ms ventas


Producto que genero ms ingresos
Cliente que realizo la mayor cantidad de compras
Cliente que realizo la mayor inversin en compras
Todas las facturas que tengan el Producto X
Todas las facturas del cliente Y.
El producto que se encuentra en su nivel ms bajo.
Observaciones:
Las bsquedas tienen que involucrar una transferencia del contenido de los archivos a un
arreglo para que la bsqueda sea realizada en el arreglo. En este proyecto se permiten
grupos de un mximo de 2 integrantes.

Liz|
2012-06-26 02:44:27
Hola, me podran ayudar de menos con ideas para realizar este programa xfavor? es que
esta muy revuelto y no estoy logrando mucho, gracias de antemano.
Programar en lenguajes C un inventario de nombre dado por el usuario, que contenga
registros con los siguientes campos: Identificador del Producto, Nombre del Producto,
Descripcin, cantidad en existencia, precio de compra, precio de venta. El programa deber
permitir
a. La lectura de 5 en 5 registros utilizando un vector de tamao 5.
b. Almacenar el vector de registros en el inventario.
c. Mostrar el contenido total del inventario.
d. Borrar un registro del inventario.
e. Modificar un registro del inventario.
f. Buscar un registro en el inventario (por identificador y por nombre del producto).
g. Eliminar todo el inventario.

h. Mostrar la cantidad total de la inversin que se tiene en el inventario.


Cada accin deber ser programada en funciones y la aplicacin deber proporcionar un
men en donde se muestren todas las opciones.

Claudia
2012-06-26 07:35:51
Hola necesito ayuda, no se si aplique bien la funcin STRUCT pero siento que pruebo y
pruebo y no me da, me gustara saber cual es el problema que tengo en este ejercicio?
El objetivo de este ejercicio es tener un registro de los hurfanos de los orfanatos de
diferentes distritos de un pas y ver cual de estos orfanatos tiene mas hurfanos.
#include<stdio.h>
#include <stdlib.h>
#include<conio.h>
#include <string.h>
struct huer {
char nom[20];
char norf[50];
char est[40];
int n, sex, edad;
};
struct huer;
int main()
printf("\n\n\t\t Ingrese el Nombre del Huerfano: ");
scanf("%s",&nom);
printf("\n\n\t\t Nombre del Orfanatorio: ");

scanf("%s",&norf);
printf("\n\n\t\t Estado de la Republica al que pertenece el Orfanatorio: ");
scanf("%s",&est);
printf("\n\n\t\t Sexo: ");
scanf("%d",&sex);
printf("\n\n\t\t Ingrese el numero total de Huerfanos del Estado de Mexico: ");
scanf("%d",&n);
float porcen, nest;
porcen=(nest*100)/n;
printf("\n\n\t\t\t El Porcentaje de Huerfanos de DF es de: %.2f ",porcen);
getch();
return(0);
}

Angel
2012-08-17 17:39:15
hola, buen dia
me podrian ayudar en encontrar el error es que no me copila he corregido problemas y
sigue sin copilar gracias!!
#include <iostream>
#include <stdio.h>
void Leer(Estudiante&Est);
void Imprimir(Estudiante&Est);
using namespace std;

struct Estudiante
{
long int Boleta;
char Nombre[100];
float Edad;
char Carrera[5];
float Calif[4];
};
int main()
{
Estudiante Est;
Leer(Est);
Imprimir(Est);
system("PAUSE");
}
void Leer(Estudiante&Est)
{
cout<<"Captura Boleta: "<<endl;
cin>>Est.Boleta;
cout<<"Captura Nombre: "<<endl;
gets(Est.Nombre);
cout<<"Captura Edad: "<<endl;
cin>>Est.Edad;

cout<<"Captura Carrera: "<<endl;


gets(Est.Carrera);
cout<<"Captura Calificacion: "<<endl;
cin>>Est.Calif;
}
void Imprimir(Estudiante&Est)
{
cout<<"Boleta: "<<Est.Boleta<<endl;
cout<<"Nombre: "<<Est.Nombre<<endl;
cout<<"Edad: "<<Est.Edad<<endl;
cout<<"Captura Carrera: "<<Est.Carrera<<endl;
cout<<"Captura Calificacion: "<<Est.Calif<<endl;
}

Steven R. Davidson
2012-08-17 18:39:41
Hola ngel,
Cuando tengas errores de compilacin, debes decirnos cules son los mensajes que te dan,
ya que podemos centrarnos en la parte que falla del programa, en lugar de mirar todo el
cdigo fuente. El error, que te da el compilador, seguramente tiene que ver con 'Estudiante'
en estas dos lneas:
void Leer( Estudiante &Est );
void Imprimir( Estudiante &Est );

Esto es porque no has definido 'Estudiante' previamente. Ten presente que el compilador
comienza su tarea "leyendo" el cdigo fuente de arriba a abajo y de izquierda a derecha. Si
se encuentra algo que no existe en el lenguaje y no tiene su definicin, obtenida
previamente, entonces marca un error y no contina con la compilacin.

La solucin en tu caso es sencillamente mudar los prototipos de estas dos funciones


despus de la definicin del tipo 'Estudiante'; esto es,
struct Estudiante
{
long int Boleta;
char Nombre[100];
float Edad;
char Carrera[5];
float Calif[4];
};
void Leer( Estudiante &Est );
void Imprimir( Estudiante &Est );

Existen otros matices a destacar en tu cdigo fuente:


- El nombre correcto es <cstdio>, al menos que uses un compilador antiguo y de una
versin obsoleta.
- No necesitas las funciones en <cstdio>, porque tienes la funcionalidad de <iostream>.
- Invocas 'system()', pero no has #incluido el fichero estndar de cabecera que la declara.
Escribe:
#include <cstdlib>

- La funcin 'main()' DEBE retornar un entero, que por convenio es 0, para indicar que el
programa ha terminado con xito.
- En 'Leer()', lees primero un entero, para el campo 'Boleta', y luego lees una cadena de
caracteres. Obtendrs un comportamiento inesperado e indeseado. El programa aparentar
"saltarse" la lectura de esta cadena y pasar a leer el entero, 'Edad'. Esto es porque en el
canal de entrada (el teclado) queda un carcter '\n'. Al leer una cadena de caracteres, se lee
este carcter sin pedir caracteres al usuario. Esto aparenta "saltarse" la lectura.
La solucin es extraer ese carcter, '\n', antes de comenzar la lectura del siguiente campo.
Puedes usar 'cin.get()' para esta tarea. El resultado sera,
cin >> Est.Boleta;
cin.get(); // Extraemos '\n' que queda pendiente

- Usas la funcin 'gets()' que es de <cstdio>. Esta funcin es demasiado problemtica para
ser usada, aunque sea estndar. En su lugar, aconsejamos usar 'getline()' conjuntamente con
'cin'. Esto es,
cin.getline( Est.Nombre, 100 );

Espero que todo esto te aclare las dudas.

Steven

Sony Turcios
2012-08-29 23:59:56
Hola viendo tu pag me ayudo con el tema de las estructuras, pero tengo una duda en un
programa ya q ue no me quedo como me lo pidieron.
Lo que pide el maestro del programa es esto :
Elaborar un programa usando struct que permita controlar la informacion de 3 personas
(nombre y Edad) ademas escriba una funcion que permita comparar la edad de dos personas
(Funcion dentro de Struct).
Lo que tengo del programa es esto
#include <iostream>
using namespace std;
struct NombreEdad
{
char nombre[20];
int edad;
void CompararEdad(int n,int m)
{
cout<<"Las edades de las personas 2 y 3 son: "<<n<<" Y "<<m<<endl;
}
}persona[3];
int main()
{
NombreEdad EDAD;

for(int i=1;i<4;i++)
{
cout<<"Ingrese Nombre de persona:"<<" "<<i<<endl;
cin>>persona[i].nombre;
cout<<"Ingrese Edad:";
cin>>persona[i].edad;
cout<<"\n\n";
}
EDAD.CompararEdad(2,3);
system("PAUSE");
return 0;
}
Como ven las edades de las personas no se comparan ya que al momento de correr el
programa no se muestran las edades ingresadas por el usuario, solo dice que las edades
comparadas son las del 2 y 3 que en realidad no compara nada, solo copia y escribe en
pantalla el 2 y el 3
Alguien me podria dar una solucion para poder realmente comparar las edades

Gavilan
2012-11-24 05:11:58
URGENTE!
Como declaro los arrays dentro de las estructuras?

ricardo
2012-12-01 22:47:18

hola me podrias ayudar lo que tengo muy poco que empece a programar y me encargaron
una tarea y no encuentro la solucion y lo que hice es contactarme con ustedes ayudenmepor
favor este es el programa
que tengo que hacer
Hacer un programa en c++ usando una estructura definida por arreglos:
Abstraccion del programa: Programa que hace el promedio final de una materia, pide el
nombre y apellido del alumno, su matricula y el nombre de la materia, pide el resultado del
primer, segundo y tercer parcial, los promedia e imprime un resultado final, todo esto
almacenandolo dentro de una estructura.
ejemplo de resultado de salida:
Nombre Alumno: Jon
Apellido: Luna
Materia: Programacion
Resultado 1er Parcial: 10
Resultado 2do Parcial: 10
Resultado 3er Parcial: 10
Promedio Final de <aqui nombre del Alumno y Apellido> es: <aqui el resultado final
promediado de los 3 terminos parciales>
confio en usted !!!!!!

migue
2012-12-23 19:13:33
Mi problema es el siguiente; quiero hacer una tabla que pida las asignaturas en las que esta
matriculado un alumno (maximo 8 asignaturas), y luego me pida el nombre de cada
asignatura.
He hecho lo siguiente, pero no se solucionarlo.
#include <iostream>
using namespace std;

typedef char cad[50];


int main(){
int nasign=0;
char asig[40]; //nombre de la asignatura
do{
cout<<"introduce el numero de asignaturas en la que esta matriculado: "; cin>>nasign;
if(nasign<=0 || nasign>8) cout<< "\nError. el numro de asignaturas no puede ser negativo ni
mayor que 8\n";
system("Pause");
system("cls");
}while(nasign<=0 || nasign>8);
cout<<"introduce el nombre de las asignaturas: "<<endl;
for(int a=1;a<=nasign ;a++) {
cout<<"Asignatura "<< a <<" : "; cin>> asig[a];cin>>asig[a];}
system("pause");
return 0;
}

fulanito
2013-01-14 11:50:43
me podrian ayudar con un programa de c++
debes crear dos numeros aleatorios ponerlos en
struct fnum { int num; int serie;}; (como loteria numero y reintegro) despues tienes crear
una matriz ccon primer premio, segundo premio y lugar (para el lugar te dan un archivo con
todas las convinaciones)

deberia quedar asi


numero reintegro lugar
1 premio 0000 1 calle trilla
2 premio 9999 10 administracion n56

Diego
2013-01-24 00:04:19
Buenos dias..
tengo un problema bien interesante, quiza ustedes me puedan colaborar con una solucin.
Tengo una aplicacion hecha con objetos es una aplicacin bien grande.
resulta que ahora tengo que implementarla sobre un procesador, que por su estructura no
soporta binarios generados desde codigo en C++, por lo que debo esribir el codigo
directamente sobre C. Realmente deseo
De una clase basica de triangulo(a modo de ejemplo)
class Triangulo
{
public:
float cat_opuesto;
float cat_adyacente;
float hipotenusa;
Triangulo();
};
La idea es que no tenga que hacer mucho para poder migrar el codigo.
He tratado definiendo dentro de la estrictura con punteros a funciones. de esta manera.
---------triangulo.h------------------

typedef void (*PTRN_Triangulo)(void);


typedef struct Triangulo_1
{
float cat_opuesto;
float cat_adyacente;
float hipotenusa;
PTRN_Triangulo FnTriangulo;
// Constructor de la clase
}TRIANGULO;
void Triangulo(void);
-------------------------------------Triangulo.c----------static TRIANGULO _triangulo = {1,2,1,Triangulo};
void Triangulo(void)
{
_triangulo.cat_opuesto = 0;
_triangulo.cat_adyacente = 0;
_triangulo.hipotenusa = 0;
}
-----------------------------Asi tengo lo mas parecido a una clase.
el problema radica que dentro del "Metodo" no puedo usar los "Atributos".
La idea es que no tenga que mantener una "Instancia" activa todo el tiempo que la
aplicacion este en funcionamiento ya que tengo limitaciones de hardware.

En el .c tengo obligatoriamente que hacer la definicin de "mini la clase" y tendria que


mantenerla "Viva", en toda la aplicacin.
S que es algo poco convencional pero si alguien sabe como lo puedo usar algo muy
parecido a usar objetos les inmenzamente agradecido.
Gracias.

Edwin Bohorquez
2013-01-28 00:59:59
Hola, tengo una pregunta: Como puedo acceder a los campos de una estructura anidada,
para realizar una asignacion?.
En el siguiente codigo asigne una cadena a cada uno de estos campos, para despues
imprimirlos, pero el compilador me dice que tengo errores.
#include<iostream.h>
using namespace std;
struct stPersona {
struct stNombre {
char Nombre[32];
char Apellidos[64];
} NombreCompleto;
char Telefono[10];
};
int main()
{
stPersona ::stNombre NombreAuxiliar;//declaro un objeto de tipo stNombre
NombreAuxiliar.Nombre="Edwin";
NombreAuxiliar.Apellidos="Bohorquez";

cout<<NombreAuxiliar.Nombre<<endl<<endl;
cout<<NombreAuxiliar.Apellidos<<endl;
system("pause");
}
Estos son los errores que me genera el compilador:
16 D:\Curso C++\pract.cpp incompatible types in assignment of `const char[6]' to `char[32]'
17 D:\Curso C++\pract.cpp incompatible types in assignment of `const char[10]' to
`char[64]'
Este codigo lo tome del capitulo 11 del curso de C++, solo lo modifique un poco.
De antemano muchas gracias por su explicacion!!

SaraTeleco
2013-01-28 17:43:48
HOLA! MAANA (29-1-2013) TENGO QUE ENTREGAR UNA PRCTICA Y LA
VERDAD QUE ME ESTOY VOLVIENDO LOCA PUES NO CONSIGO SOLUCIONAR
LOS ERRORES DE COMPILACIN. TRABAJO CON CENTOS DE VMWARE, Y LA
PRCTICA ES LA SIGUIENTE:
Se desea disear una aplicacin informtica que almacene la informacin de la cartelera de
los
cines Alameda, PLazaMayor, Larios y Albniz. En cada una de sus distintas salas (Salas 1 a
la
Sala 6 para todos ellos) hay 5 sesiones diarias, en las que pueden exhibirse pelculas
distintas,
y en horarios no fijos (varan para cada cine, da y sala). Por ejemplo, en el cine Alameda,
en la
Sala 3, el mircoles proyectan las siguientes pelculas en sus cinco sesiones:
Harry Potter y la Piedra Filosofal, hora de inicio: 12:30h., Daniel Radcliffe y Richard
Harris, TP

Sentido y Sensibilidad, hora de inicio: 16:30h., Emma Thomson y Kate Winslet, TP


"El Secreto de Thomas Crown", hora de inicio: 20 h., Ren Ruso y Pierce Brosnan, TP
Torrente 2, hora de inicio: 22:30h., Santiago Segura y Gabino Diego, M18
Oceans Eleven, hora de inicio: 24:00h., George Clooney y Brad Pitt, M18
Se pide realizar un men para la gestin de esta aplicacin informtica. En concreto hay
que
escribir un programa donde se definan las estructuras de datos necesarias para almacenar la
informacin de dicha cartelera. Para cada pelcula se deber almacenar la hora de comienzo
(ya que es variable segn el da, cine y sala), su ttulo, sus dos principales protagonistas, y
su
calificacin por edades enumerado que podr ser TP (todos los pblicos), M13 (Mayores
de
13 aos) o M18 (Mayores de 18). Ver ms abajo una posible plantilla para el programa. El
programa debe presentar un men con las opciones que se muestran a continuacin:
Elaborado por: <Nombre> <Apellidos>
Fecha: <Fecha>
A.
B.
C.
D.
X.
MENU PRACTICA 9
================
Leer pelcula.
Visualizar informacin en una sala concreta.

Buscar pelcula.
Listar pelculas por edades.
Salir del Programa.
Introduzca Opcin:
Habr que realizar adems un procedimiento para inicializar la estructura con datos
(actualizada cada semana con la nueva cartelera).
Descripcin de las Opciones:
A.- Leer pelcula. Se deber pedir al usuario (gestor de la aplicacin) la informacin
concreta
de una pelcula y el cine, el da, la sala y la sesin en el cual quiere que se proyecte. La
pelcula ser entonces incluida en la cartelera segn los datos indicados. Si ya haba alguna
pelcula, est ser sustituida por la proporcionada en esta opcin.
B.- Visualizar informacin en una sala concreta. Se pedir al usuario que proporcione el
cine, la sala, la sesin y el da correspondiente, y el programa listar la informacin de la
pelcula que est proyectada en la cartelera. En caso de no haber pelcula proyectada, se
visualizar el mensaje correspondiente.
Ejemplo:
Cine: Alameda
Da: Mircoles
Programacin I
1o Grado de Ingeniera de Sistemas de Telecomunicacin
Prctica Evaluable
E.T.S.I. TELECOMUNICACIN
Sala: 3

Sesin: 2
Pelcula proyectada: Sentido y Sensibilidad
Hora de inicio: 16:30h.,
Actores/actrices: Emma Thomson y Kate Winslet,
Calificacin: TP
C.- Buscar pelcula. Dado el ttulo de una pelcula se visualizarn en pantalla todas aquellas
salas donde se proyecta en la cartelera.
Ejemplo:
Ttulo: Sentido y Sensibilidad
Se proyecta en:
El Cine Alameda, el Mircoles, en la sala 3 y Sesin 2.
Hora de comienzo: 16.30
El Cine Albeniz, ...
D.- Listar pelculas por edades. Lea desde teclado una cadena de caracteres con una
calificacin por edades, y muestre la lista de las pelculas que con dicha calificacin se
proyectan esta semana. Para cada una de stas deber mostrarse el ttulo junto con la
informacin del cine donde se proyecta, da de la semana, sala y horario.
Debern definirse completamente todos los procedimientos o funciones auxiliares que se
precisen. Se recomienda que los cines sean tambin definidos como enumerados.
Nota: Esta prctica es un ejercicio que apareci en el examen Ordinario de Febrero de 2004
de
la asignatura de Elementos de Programacin en la ETSI en Informtica..
X. Salir del Programa. Se solicita confirmacin y slo en caso de sea afirmativa se sale del
programa.

Ejemplo:
Introduzca su opcion: x
Esta seguro de salir (S/N)?
Y EL PROGRAMA QUE HE DISEADO ES:
#include <iostream>
#include <string>
#include <array>
using namespace std;
//-------------------------------//
//---DECLARACIN DE CONSTANTES---//
//-------------------------------//
const unsigned int MAX_CINES = 4;
const unsigned int MAX_DIAS = 7;
const unsigned int MAX_SALAS = 5;
//-------------------------------//
//------DECLARACIN DE TIPOS-----//
//-------------------------------//
enum calificaciones {TP, M13, M18};
enum cines {Alameda, PlazaMayor, Larios, Albeniz};
struct TpInfopeli{
calificaciones calificacion_edades;
string protagonistas, pelicula;
cines nombre_cine;

}informacion;
typedef array <TpInfopeli,MAX_CINES> TpCines;
enum dias {Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo};
struct TpFecha{
dias dia_semana;
}dia;
typedef array <TpFecha,MAX_DIAS> TpSemana;
enum salas {sala1, sala2, sala3, sala4, sala5, sala6};
enum hora {sesion1, sesion2, sesion3, sesion4, sesion5};
enum peliculas {ElHobbit, RompeRalph!, ElCuerpo, ElAlucinanteMundoDeNorman,
LoImposible};
struct TpHorario{
salas numero_sala;
hora hora_sesion;
peliculas peli
}horario;
typedef array <TpHorario,MAX_SALAS> TpSalas;
//--------------------------------//
//---DECLARACIN DE PROTOTIPOS----//
//--------------------------------//
//LEERPELICULA: se pide al usuario que introduzca la informacion de la pelicula.
void LeerPelicula (const TpInfopeli &informacion);
//VISUALIZARINFORMACION: si existen los datos anteriores, se muestra la informacion
de la pelicula. En caso contrario, se muestra otra opcion (cine:Alameda, Da:Miercoles).

void VisualizarInformacion(const TpInfopeli &informacion);


//INSERTARPELICULA:
void InsertarPelicula(TpCines &cartelera, const TpInfopeli &informacion);
//BUSCARPELICULA: se pide al usuario que introduzca el nombre de una pelicula; si est
en la cartelera, se le muestra la informacion de su proyeccion.
void BuscarPelicula (const TpCines &cartelera, const string &nombre, bool &encontrado,
TpInfopeli &informacion);
//LISTARPELICULAS: se pide al ususario que introduzca una edad y se muestran todas las
peliculas con dicha calificacion.
void ListarPeliculas (const TpInfopeli &informacion);
//SALIR: se le pregunta al usuario si desea salir del programa (se necesita confirmacion
para salir del mismo).
bool SalirDelPrograma(salir);
//-----------------------------//
//-----FUNCION PRINCIPAL-------//
//-----------------------------//
int main (){
unsigned int opcion;
TpInfopeli informacion;
TpCines cartelera;
string protagonistas;
bool encontrado;
string nombre;
do{
cout << "MEN:" << endl;

cout << "0:\tInsertar pelculas en la cartelera" << endl;


cout << "1:\tVisualizar informacin de la cartelera" << endl;
cout << "2:\tBuscar pelcula por su nombre" << endl;
cout << "3:\tListar pelculas de la cartelera" << endl;
cout << "4:\tSalir del programa." << endl;
cout << "Opcion?: ";
cin >> opcion;
switch (opcion){
case 0: cartelera = LeerPelicula();
InsertarPelicula(cartelera, informacion);
break;
case 1: VisualizarInformacion(cartelera);
break;
//
case 1: //VisualizarInformacion
//
case 2: cout << "Nombre de pelcula: ";
cin >> pelicula;
BuscarPelicula(cartelera, pelicula, encontrado, informacion);
if (encontrado){
cout << "Pelcula encontrada " << endl;
LeerPelicula(informacion);
}

else{
cout << "La pelcula no se encuentra en la cartelera " << endl;
}
break;
case 3: ListarPeliculas(informacion.pelicula);
break;
case 4: cout << "Desea abandonar el programa?" << endl;
SalirDelPrograma(salir);
break;
}
}while(opcion != 5 );
return 0;
}
//-------------------------------------//
//-----IMPLEMENTACIN DE FUNCIONES-----//
//-------------------------------------//
//LeerPelicula
void LeerPelicula(const TpInfopeli &informacion){
cout << "Cine\t";
cin >> informacion.nombre_cine;
cout << "Pelcula:\t";
cin >> informacion.pelicula;
cout << "Protagonistas:\t";

cin >> informacion.protagonistas;


cout << "Calificacin por edades (TP,M13,M18):\t";
cin >> informacion.calificacion_edades;
return informacion;
}
//InsertarPelicula
void InsertarPelicula(TpCines &cartelera, const TpInfopeli &informacion);{
unsigned int i = 0;
if (Buscar(cartelera,informacion.nombre_cine.pelicula.protagonistas.calificacion_edades)
== -1){
while(i < MAX_CINES && cartelera[i].ocupada) // Buscar hueco
i++;
if (i < MAX_CINES){
cartelera[i].informacion = info;
cartelera[i].ocupada = true;
}
}
}
//VisualizarInformacion
void VisualizarInformacion(const TpInfopeli &informacion){
cout << "LISTA DE PRODUCTOS DE LA FARMACIA: " << endl;
for (unsigned int i = 0; i < MAX_CINES; i++)
if (informacion[i].ocupada)
LeerPelicula(informacion[i].nombre_cine.pelicula.protagonistas.calificacion_edades);

}
//BuscarPelicula
void BuscarPelicula(const TpCines &cartelera, const string &pelicula, bool &encontrado,
TpInfopeli &informacion){
unsigned int i = 0;
encontrado = false;
while(i < MAX_CINES && !encontrado){
if (cartelera[i].ocupada && cartelera[i].informacion.pelicula == pelicula)
encontrado = true;
else
i++;
}
if (encontrado){
informacion = cartelera[i].informacion;
}
}
//ListarPeliculas
void ListarPeliculas(const TpCines &cartelera, TpInfopeli &informacion){
cout << "PELCULAS EN CARTELERA " << endl;
for (unsigned int i = 0; i < MAX_CINES; i++)
if (cartelera[i].ocupada)
EscribirPelicula(cartelera[i].informacion);
}
//Salir

bool SalirDelPrograma(salir){
cin >> salir >> endl;
if (salir = S){
salir = true;
}else salir = false;
}
LES ESTARA ETERNAMENTE AGRADECIDA SI CONSIGUIERAN AYUDARME
CON MI PROBLEMA, YA QUE CON LA SUBIDA DEL PRECIO DE LOS CRDITOS
PARA LA UNIVERSIDAD ME AMARGARA EL AO QUE VIENE SI ME
QUEDARA ESTA ASIGNATURA. MUCHAS GRACIAS.

angel
2013-06-23 01:02:06
como puedo hacer esto en c++ estoy usando estructura
Destino (1= Sn Jose- Miami, 2= Miami-Sn Jose, 3=Sn Jose-Espaa, 4=Espaa-Sn Jose),
estado de la reservacin (1= Reserva 2= Anulado 3=Pagado),
precio tiquete (*),
impuesto venta 13% (*),
impuesto salida 3% (hacia Miami) 4.5% (hacia Espaa) (*),
total precio tiquete, saldo.
Cuando est en reserva el saldo es el mismo monto del total,
cuando esta anulado o cancelado el saldo es cero.
** Los precios se muestran al final en una tabla.
**Precios
Nio Adulto Adulto Mayor

SJ CR-Miami 225 450 375


Miami-SJ CR 305 510 399
SJ CR-Espaa 890 1350 1050
Espaa-SJ CR 950 1600 1400
//este es el proceso de incluir datos lo que me falta eshacer lo arriba
void ingresar_datos()
{
char sigue;
do{
system("cls");
if (a<z)
{
system("cls");
printf("Ingresando Registro %i: \n",a);
printf("Ingresar numero de tiquete:");
scanf("%i",&aerolinea[a].tiquete);
printf("Numero de cedula es :");
scanf("%i",&aerolinea[a].cedula);
printf("Nombre de pasajero:");
fflush(stdin);gets(aerolinea[a].nom
printf("Dijite Ao de nacimiento del pasajero:");
scanf("%i",&aerolinea[a].ao_nac);
printf("Dijite Ao actual:");

scanf("%i",&aerolinea[a].ao);
aerolinea[a].edad=aerolinea[a].ao-
if
(aerolinea[a].edad>=0 && aerolinea[a].edad <12)
strcpy(aerolinea[a].mensaje,"Eres un nino");
else if(aerolinea[a].edad>12 && aerolinea[a].edad <55)
strcpy(aerolinea[a].mensaje,"adulto
else
strcpy(aerolinea[a].mensaje,"Eres un adulto mayor");
do
{
printf("destino");
printf("[1]=san jose-Miami [2]=Miami-san jose [3]=San_jose-Espana [4]=EspanaSan_jose");
aerolinea[a].destino=getch();
}while(aerolinea[a].destino!='1' && aerolinea[a].destino!='2' && aerolinea[a].destino!='3'
&& aerolinea[a].destino!='4' );
system("cls");
printf("**Resultados**");
printf("\nNumero de tiquete es:%i",aerolinea[a].tiquete);
printf("\nNumero de cedula es :%i",aerolinea[a].cedula);
printf("\nNombre de pasjero es :%s",aerolinea[a].nom);
printf("\nFecha de nacimiento es :%i",aerolinea[a].ao_nac);
printf("\nAo actual es :%i",aerolinea[a].ao);

printf("\nEdad es :%i",aerolinea[a].edad);
printf("\nTipo de pasajero :%s",aerolinea[a].mensaje);
a++;
do
{
printf("\nDesea continuar S/N?");
sigue=getch();
}while(toupper(sigue)!= 'S' && toupper(sigue)!= 'N'); }
else
{
printf("Vectores llenos....!");
sigue= 'N';
getch();
}
}while(toupper(sigue)=='S');
}

Juan M.
2013-07-09 02:21:28
Hola! Tengo un pequeo problemita este es mi programa:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct Salon

{
char M[6];
char A[6];
char C[6];
float B[4];
};
typedef struct Salon vec;
int main()
{
int i,n;
vec V[i];
float Pa,s;
s=0;
for(i=0; i<n; i++)
{
printf("Introducir Nombre de V:");
scanf("%s",&V[i].M);
printf("Introducir Apellido de V:");
scanf("%s",&V[i].A);
printf("Introducir Cedula de V:");
scanf("%s",&V[i].C);
printf("Introducir Notas de V:");
scanf("%f",&V[i].B);

s=s+V[i].B;
Pa=s/4;
}
printf("Promedio de alumno:", Pa);
system ("PAUSE");
return 0;
}
Y en el sumador me marca "invalid operands of types `float' and `float[4]' to binary
`operator+'" A que se debe eso?

Steven R. Davidson
2013-07-09 02:46:00
Hola Juan M.,
Tienes varios errores:
int i,n;
vec V[i];
...
scanf("%s",&V[i].M);
scanf("%s",&V[i].A);
scanf("%s",&V[i].C);
scanf("%f",&V[i].B);
s=s+V[i].B;

El primero se basa en que no puedes crear un array (esttico) de una cantidad variable de
elementos. Si necesitas tal comportamiento, entonces necesitas usar memoria
dinmicamente adjudicada, invocando 'malloc()'. Si no puedes, entonces elige una cantidad
mxima de elementos para 'V', pero mantn la cantidad actual de elementos en tal array.
Los tres siguientes errores tienen que ver con el uso del operador & para una cadena de
caracteres. No debes usar tal operador; simplemente pasa el array de 'char' a 'scanf()'. Esto
es,
scanf( "%s", V[i].M );
scanf( "%s", V[i].A );
scanf( "%s", V[i].C );

El siguiente error se debe a que lees un solo 'float', pero intentas pasar un array de 'float'
como parmetro a 'scanf()'. Esta funcin no lee arrays de 'float'. Por lo tanto, la solucin es
leer cada uno explcitamente. Esto es,
scanf(
scanf(
scanf(
scanf(

"%f",
"%f",
"%f",
"%f",

V[i].B[0]
V[i].B[1]
V[i].B[2]
V[i].B[3]

);
);
);
);

Tambin puedes optar por usar un bucle 'for' para recorrer cada elemento del array 'B'.
El ltimo error se basa en el uso del array, 'B', ya que C no ofrece una suma de elementos
en un array. Si quieres hacer esto, entonces necesitas ser explcito; por ejemplo,
s += V[i].B[0] + V[i].B[1] + V[i].B[2] + V[i].B[3];

O como dije antes, puedes usar un bucle para recorrer el array.


Espero que todo esto te oriente.
Steven

Juan Luis
2013-07-13 15:44:13
Buenos das, sera que alguien puede ayudarme?
Tengo este programa, estructura (que es un registro de alumnos), me piden que almacene la
informacin y calcule el promedio de cada alumno, el promedio por cada evaluacin y el
promedio global es decir el promedio de la seccin, mi programa almacena los datos y
calcula el promedio de los alumnos y el problema esta en que no calcula los promedios de
las evaluaciones ni el promedio global, me arroja datos que no tengo.
Este es:
#include <stdlib.h>
#include <stdio.h>
#define N 3
struct salon
{

char Nombre[10];
char Apellido[10];
char Cedula[10];
float Nota[4];
};
typedef struct salon vec;
int main()
{
vec V[N];
float Sa,Sg,Se1,Se2,Se3,Se4,Pa,Pg,Pe1,Pe2,Pe3,Pe4;
int i,j,n;
Se1=0;
Se2=0;
Se3=0;
Se4=0;
Sg=0;
for(i=0; i<N; i++)
{
printf("\n");
printf("Introducir Nombre de Alumno: \n");
fflush(stdin);
gets(V[i].Nombre);
fflush(stdin);

printf("\n");
printf("Introducir Apellido de Alumno: \n");
fflush(stdin);
gets(V[i].Apellido);
fflush(stdin);
printf("\n");
printf("Introducir Cedula de Alumno: \n");
fflush(stdin);
gets(V[i].Cedula);
fflush(stdin);
printf("\n");
Sa=0;
for(j=0; j<4; j++)
{
printf("\n");
printf("Introducir Notas: \n\n");
scanf("%f",&V[i].Nota[j]);
printf("\n");
Sa=Sa+V[i].Nota[j];
Pa=Sa/4.0;
}
printf("\n");
printf("Promedio de Alumno: %.2f\n", Pa);

printf("\n");
}
Se1=Se1+V[i].Nota[1];
Pe1=Se1/3;
printf("Promedio de Evaluacion 1: %.2f\n", Pe1);
Se2=Se2+V[i].Nota[2];
Pe2=Se2/3;
printf("Promedio de Evaluacion 2: %.2f\n", Pe2);
Se3=Se3+V[i].Nota[3];
Pe3=Se3/3;
printf("Promedio de Evaluacion 3: %.2f\n", Pe3);
Se4=Se4+V[i].Nota[4];
Pe4=Se4/3;
printf("Promedio de Evaluacion 4: %.2f\n", Pe4);
system ("PAUSE");
return 0;
}

josue reyes
2013-09-18 07:05:13
sera que me ayudan es que me da un error q al momento de compilar me da el error ne la
llav de void main xfa ayda
#include <stdio.h>
#include <conio2.h>

#define TAM 3
using namespace std;
struct persona
{
char nombre[50];
char equipo[100];
int partidos;
int goles;
float promedio;
};
void main()
{
struct persona jugadores[TAM];
int i;
float auxf;
for(i=0;i<TAM;i++)
{
clrscr();
printf("FICHA DE JUGADOR\n\n");
printf("NOMBRE:");fflush(stdin);gets(jugadores[i].nombre);
printf("EQUIPO:");fflush(stdin);gets(jugadores[i].equipo);
printf("PARTIDOS:");scanf("%d",&jugadores[i].partidos);
printf("GOLES:");scanf("%d",&jugadores[i].goles);

jugadores[i].promedio =(float) jugadores[i].goles / jugadores[i].partidos;


// VALIDAR LA INFORMACION INGRESADA
}
for(i=0;i<TAM;i++)
printf("\nNOMBRE %s EQUIPO %s PARTIDOS %d GOLES %d PROMEDIO DE
GOLES %.2f POR
PARTIDO",jugadores[i].nombre,jugadores[i].equipo,jugadores[i].partidos,jugadores[i].gole
s,jugadores[i].promedio);
getch();
}

Steven R. Davidson
2013-09-18 07:52:58
Hola Josu,
Seguramente el error que te da el compilador es por la definicin de 'main()', la cual debe
retornar un entero. La definicin en C++ de 'main()' es:
int main()

Por convenio, retornamos 0 (cero) para indicar una terminacin exitosa del programa.
Espero que esto te ayude.
Steven

Ludwin
2013-10-02 04:12:35
Hola sera que me pueden ayudar con el siguiente problema ya que no entiendo como
resolverlo.
Utilizando estructuras, vectores/matrices, funciones desarrolle el
siguiente problema.

Se quiere construir un registro para guardar carne, nombre, cdigo del curso,
nombre del curso, punteo de 2 exmenes parciales, zona (tareas-exmenes
cortosproyectos), examen final, examen de retrasada (solo si el estudiante perdi el curso)
para 100 alumnos.
Se debe presentar un men con las siguientes opciones:
1. Ingreso de Datos
a. Cursos.
b. Catedrticos.
c. Estudiantes
. Reportes
a. Por Curso (con toda la informacin de los estudiantes, el usuario
indicara el cdigo del curso que desea consultar).
b. Por Estudiante (con toda la informacin de los estudiantes, el usuario
indicara el carne del estudiante que desea consultar).
c. Por Catedrtico (con toda la informacin de los estudiantes, el usuario
indicara el cdigo del curso que desea consultar).
d. General de Estudiantes con el mayor promedio por semestre.
e. General de Estudiantes que Salieron en Limpio.
f. General de Estudiantes que tienen Retrasadas.
3. Salir

Evelin perez
2013-10-09 21:12:46

necesito ayuda como empezar a escribir en mi programa lo que me esta pidiendo es:
Utilizando funciones y/o procedimientos, escribir un programa que calcule el sueldo liquido
de n
empleados, ingresando el sueldo nominal, das del mes, das trabajados, imprima el total de
empleados ingresados, el total del IGSS, el total de descuentos y el total liquido a recibir.
a. Sueldo= Sueldo / diasmes / diastrabajados
b. Liquido = Sueldo IGSS (4.83%) ISR descuentos. en c++ y hacer diagrama de flujo.
lo agradezco muchisimo ayuda y me puede enviar al eveamayapeba20@hotmail.com
Gracias!!!! :)

Tatiana Vargas
2013-10-16 22:28:39
hola me gustara que me ayudaran con el concepto de estructuras autoreferenciantes y un
posible ejemplo aplicado del tema gracias

Steven R. Davidson
2013-10-17 18:17:36
Hola Tatiana,
Se trata de crear una estructura que contenga cualesquier miembros de los cuales uno sirva
para referirse a un objeto de este mismo tipo de estructura. En C/C++, esto se suele
implementar con punteros. Por ejemplo,
struct nodo
{
int dato;
nodo *pNodo;
};

Al crear un objeto de tipo 'nodo', podemos apuntar a otro 'nodo', y ste posiblemente apunte
a otro; y as sucesivamente.
El uso tpico es encadenar varios objetos (del mismo tipo) y as poder crear una lista cuyas
operaciones de insercin, agregado, y eliminacin son fciles de realizar: una complejidad

temporal de O(1). Tpicamente, estas listas usan memoria dinmicamente adjudicada por lo
que ofrecen una gran flexibilidad. Por ejemplo,
nodo *pCabeza;
nodo *pAux;
// Creamos un nuevo nodo
pAux = new nodo;
// Damos valores iniciales
pAux->dato = 0;
pAux->pNodo = nullptr;
// Relacionamos el nodo principal al nuevo nodo
pCabeza = pAux;
...

Sugiero que consultes nuestro curso de EDD yendo a: http://c.conclase.net/edd/index.php


Otro uso tpico es para crear relaciones de parentesco entre objetos; o sea, una relacin de
"hijo-pariente". Por ejemplo,
struct ventana
{
ventana *apHijas[256];
unsigned char nCantHijas;
...
};

As podramos crear ventanas que posiblemente contengan una lista de ventanas hija. Lo
normal es que esta ventana padre controle algn aspecto de sus hijas, como por ejemplo, si
movemos la ventana padre, sus hijas son mudadas tambin. Esto tambin implicara que
cada ventana hija a su vez puede ser pariente de otras hijas.
Espero que esto te oriente.
Steven

lenin tandalla
2013-11-21 19:17:51
Elabore un programa en G++ con las siguientes indicaciones
a.- Un menu de 3 opciones:
1.- Ingresar Datos
2.- Mostrar Datos

3.- Salir
Utilice una funcin solo para el menu
b.- Utilice la estructura STRUC para definir y almacenar
Cedula, Nombre, Direccin y Edad de personas
c.- Utilice la funcin para ingresar los datos de estas personas
Al seleccionar la opcin 1, lo primero que le pedir es el nmero de personas a registrar los
datos
d.- Utilice la funcin para desplegar o Mostrar los datos ingresados.

victor
2014-01-24 16:23:27
nesecito resolver este problema
escriba las estructuras nesesarias para almacenar informacion d los estudiantes y los
profesores de alguna universidad

Carol
2014-02-28 15:16:27
Hola!! Como hago para realizar el calculo de pares trigonomtricos en precisin simple?
Estoy llevando una clase que utilizo programacin y no se nada con esta pagina estoy
aprendiendo lo basico.

David
2014-05-28 19:08:03
Esta pagina me resuelve muchas dudas y realmente es muy til, pero hay una cosa que no
entiendo. Cuando definimos el struct con varios constructores en este capitulo:
struct complejo {
complejo() { real=0; imaginario = 0; }
complejo(double r, double i) { real=r; imaginario = i; }
complejo(double r) { real=r; imaginario = 0; }

double real;
double imaginario;
};

y luego expones varios ejemplos:


complejo c1(19.232);
complejo c2 = 1299.212;
int x = 10;
complejo c3 = x;

Cuando creas por ejemplo c1, se llama automticamente a todos los constructores? Si es
as, hay funciones de c1 que requieren de mas de un parmetro pero solo pasamos uno.
En c2 que sucede cuando igualas este objeto a un numero? (es decir complejo c2 =
1299.212;)
Gracias de antemano.

Salvador Pozo
2014-05-28 20:32:42
Hola, David:
> Cuando creas por ejemplo c1, se llama automticamente a todos los constructores?
No, slo se llama a uno de ellos.
Se elige aquel cuyos parmetros, por nmero y tipo, ms se aproximen a los argumentos
usados.
En el caso de c1, como se invoca con un valor en punto flotante, se usa el tercer
constructor, y se convierte el parmetro de float a double.
> En c2 que sucede cuando igualas este objeto a un numero?
Suceden dos cosas. Primero, como los dos objetos a ambos lados del igual deben ser del
mismo tipo, se crea un objeto de la clase complejo a partir del valor 1299.212, es decir, de
nuevo usamos el tercer constructor.
Despus se usa el operador de asignacin que el compilador define por defecto para la clase
complejo. El operador de asignacin por defecto asigna a cada dato del objeto de la
izquierda el valor correspondiente del objeto de la derecha. Es decir, a c3.real le asigna el
valor del objeto creado, que ser 1299.212, y a c3.imaginario le asigna 0.

El objeto creado antes de la asignacin se destruye una vez ejecutada la sentencia. Se trata
de un objeto temporal sin nombre.
De todos modos, el compilador suele optimizar este cdigo para no tener que hacer uso de
esos objetos temporales.
Hasta pronto.

Steven R. Davidson
2014-05-28 21:11:38
Hola David,
En general, el compilador busca de entre los candidatos a la funcin invocada para elegir el
mejor a usar.
En el caso de 'c1', vemos que pasamos un solo parmetro de tipo 'double'. Por lo tanto, el
mejor candidato de entre todos los constructores es:
complejo::complejo( double r );

Para el caso de 'c2', no igualamos el objeto, sino que inicializamos el objeto. La forma de
inicializar un objeto es instanciando tal objeto con el valor de la inicializacin. Este resulta
en invocar el constructor debido, que en este caso es,
complejo::complejo( double r );

Esto es igual a,
complejo c2( 1299.212 );

Para terminar, para el caso de 'c3', el compilador ve que necesitamos un constructor del
prototipo,
complejo::complejo( int );

Pero al no encontrar una versin exacta, entonces aplica las reglas de "csting". Se da
cuenta que podemos promocionar un 'int' a un 'double' y as podemos usar este constructor:
complejo::complejo( double r );

Al final, hace esto:


complejo c3( (double) x );

Espero que esto aclare las dudas.


Steven

Você também pode gostar