Sie sind auf Seite 1von 88

Estructuras

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. Tienen
muchos aspectos en comn con los registros usados en bases de datos.

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, aun 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.

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.

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 A;} // Devuelve el valor de A
int LeeB() { return B;} // Devuelve el valor de B

void GuardaA(int n) { A = n;} // Asigna un nuevo valor a A


void GuardaB(int n) { B = n;} // Asigna un nuevo valor a B
} Par;

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 A {
int i;
int j;

int 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 (41)


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.calificacio
n_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_e
dades);

//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]=Espana-San_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( "%f", V[i].B[0] );


scanf( "%f", V[i].B[1] );
scanf( "%f", V[i].B[2] );
scanf( "%f", 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,juga
dores[i].goles,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
Adri
2015-01-05 00:19:13

Cual es la diferencia entre inicializar una variable de una estructura con


constructor y sin constructor?

//Con constructor
struct A
{
int a;
A(){a = 7;};
};

//Sin constructor
struct A{int a = 7;};

Veo mas ventajoso hacerlo directamente, porque requiere de menos codigo.


Steven R. Davidson
2015-01-05 02:15:20

Hola Adri,

En ambos ejemplo, existe un constructor. En el primer ejemplo, defines uno,


mientras que en el segundo, uno se define implcitamente; este constructor
por defecto no hace nada aparente, que al final se definen los campos en el
orden de aparicin.

La ventaja es que la lgica de la inicializacin del objeto queda en el interior


de la definicin de la estructura. Es una manera de "esconder" estos
detalles que el exterior no necesita conocer. Esto implica que si el exterior
se limita a usar el constructor, no tiene que depender de la representacin
interna de la estructura ni de la organizacin de sus campos.

Usando tu ejemplo, tenemos dos versiones:

A obj; // Invocamos: A()


A st = { 7 }; // Directamente

Ahora imagina que queremos cambiar la definicin de 'A' a lo siguiente:

struct A
{
int a;
char b, c;
float f;

A()
{
a = 7;
b = c = '#';
f = -1.0f;
}
};

El cdigo fuente es ahora,

A obj; // No cambia
A st = { 7, '#', '#', -1.0f };

Como puedes ver, tenemos que cambiar la inicializacin de 'st', porque se


hace explcitamente. Imagnate que tenemos 100 definiciones e
inicializaciones de estructuras por todo el cdigo fuente. Esto implicara
modificar todas correctamente. El problema es que depende de la
representacin interna de 'A'. Si cambia, por la razn que sea, o incluso la
lgica de una inicializacin adecuada, tales inicializaciones deben
modificarse tambin, por lo que suele aumentar la posibilidad de introducir
errores en el cdigo fuente.

Existen otras razones, pero an no hemos visto suficientes conceptos.


Veremos este tema al llegar a la Programacin Orientada a Objetos (POO) a
partir del captulo 27.

Espero haber aclarado el tema.

Das könnte Ihnen auch gefallen