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 algún tipo de relación, aunque sean de distinto tipo, permitiendo manipularlos
todos juntos, usando un mismo identificador, o cada uno por separado.
Las estructuras son llamadas también muy a menudo registros, o en inglés records. Tienen
muchos aspectos en común con los registros usados en bases de datos. Y siguiendo la
misma analogía, 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 inclusión
también es opcional. Sin bien, aún 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 también se puede acceder a los elementos definidos en el
interior de la estructura, usando el operador de selección (.), 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 más
objetos del tipo de estructura en cualquier parte del programa. Para ello usaremos la forma
normal de declaración de objetos, es decir:
[struct] <identificador> <objeto_estructura>
[,<objeto_estructura>...];

En C++ la palabra struct es opcional en la declaración 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 misión de manipular los datos incluidos en la estructura, y su uso está
muy relacionado con la programación orientada a objetos.
Aunque esta característica se usa casi exclusivamente con las clases, como veremos más
adelante, también 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 inicialización, o constructor, y el destructor.
Veremos con más detalle estas funciones cuando asociemos las estructuras y los punteros.
El constructor es una función 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 símbolo "~".
Nota: para aquellos que usen un teclado español, el símbolo "~" se obtiene pulsando las
teclas del teclado numérico 1, 2, 6, mientras se mantiene pulsada la tecla ALT,
([ALT]+126). También mediante la combinación [Atl Gr]+[4] y un espacio (la tecla [4] de
la zona de las letras, no del teclado numérico).
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(); // Declaración del constructor

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

Si no usáramos un constructor, los valores de x e y para Punto1 y Punto2 estarían
indeterminados, contendrían la "basura" que hubiese en la memoria asignada a estas
estructuras durante la ejecución. Con las estructuras éste será el caso más habitual, ya que si
necesitamos usar constructores para asignar valores iniciales, será mucho más lógico usar
clases que estructuras.
Mencionar aquí, sólo a título de información, que el constructor no tiene por qué ser único.
Se pueden definir varios constructores, pero veremos esto mucho mejor y con más 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 capítulos posteriores.
También 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 cómo 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 algún tratamiento de los datos.

Punto2. Inicialización de estructuras ^ De un modo parecido al que se inicializan los arrays. 20}. y funciona como la intuición nos dice que debe hacerlo. Cada nueva estructura anidada deberá inicializarse usando la pareja correspondiente de llaves "{}". A ejemploA = {10.Por supuesto se pueden definir otras funciones y también constructores más elaborados e incluso. las estructuras admiten cualquiera de las características de las clases. Asignación de estructuras ^ La asignación de estructuras está permitida. y. Por ejemplo: struct int int int }. j. 20. char d. 'b'}. y recordaremos cómo aplicarlas a las estructuras. Veremos estas características cuando estudiemos las clases. y = 0. 30}. Veamos un ejemplo: struct Punto { int x. pero sólo entre objetos del mismo tipo de estructura. (salvo que se usen constructores). tan sólo hay que tener cuidado con las estructuras anidadas. {'a'. Y en general. B ejemploB = {10. tantas veces como sea necesario. struct B { int x. siendo en muchos aspectos equivalentes. k. }. struct C { char c. Punto() {x = 0. redefinir operadores.} } Punto1. se pueden inicializar estructuras. A { i. . int z. } y.

x.int main() { Punto1. double imaginario. si declaramos un array: complejo array[10]. podemos añadir algunas que hagan de una forma más directa cosas que de otro modo requieren añadir código externo. siempre que se usen los constructores adecuados. Quizás te hayas quedado intrigado por el comentario anterior. El constructor por defecto será llamado para cada elemento del array. Este construtor se usará. equivale a Punto2. una estructura para manejar números complejos. struct complejo { double real. double imaginario. no sólo a estructuras..y = 12. por ejemplo. Un número complejo está compuesto por dos valores reales. se puede extender a cualquier tipo. Punto1. que adelantaba que se pueden asignar estructuras diferentes.x = 10. El primero es el más lógico: un constructor por defecto: struct complejo { complejo() { real=0.x = Punto1. } double real. Punto2. aunque no aparezca tal llamada en ningún punto del programa. en realidad. Crearemos como ejemplo. podemos asignar un entero a una estructura.y. pero eso no significa que no puedan tenerlos. . Esto. Esta estructura es suficiente para muchas de las cosas que podemos hacer con números imaginarios. }. }. Veamos cómo hacer esto. pero aprovechando que podemos crear funciones. Por ahora nos limitaremos a añadir unos cuantos constructores. definiendo el constructor adecuado. los constructores que hemos visto no usaban argumentos. Hasta ahora. el primero contiene lo que se llama la parte real y el segundo la parte imaginaria. } La línea Punto2 = Punto1.y = Punto1. Por ejemplo. imaginario = 0. Punto2 = Punto1.

imaginario = 0.212.232). . Esto nos permite crear otro constructor que sólo admita un valor real: struct complejo { complejo() { real=0. } double real.Otro constructor nos puede servir para asignar un valor a partir de dos números: struct complejo { complejo() { real=0. }. double i) { real=r. Este constructor nos permite.23. complejo c3 = x. imaginario = 0. }. Los números reales se consideran un subconjunto de los imaginarios. double imaginario. imaginario = i. y tales constructores se podrán usar para convertir cualquier tipo al de nuestra estructura. double i) { real=r. 213. y por el sistema de promoción automático. Mediante este constructor podemos asignar valores inciales en la declaración: complejo c1(10. nada nos impide crear constructores con cualquier tipo de parámetro. imaginario = 0. inicializar un valor de un complejo en la declaración. } double real. imaginario = i. pero también nos permite asignar un valor double a un complejo. en los que la parte imaginaria vale cero. también podemos asignar valores enteros o en coma flotante: complejo c1(19. } complejo(double r) { real=r. Ejemplo: struct Persona { char Nombre[65]. Este tipo de constructores se comportan como conversores de tipo. complejo c2 = 1299. como en el caso anterior. int x = 10. char Direccion[65]. Arrays de estructuras ^ La combinación de las estructuras con los arrays proporciona una potente herramienta para el almacenamiento y manipulación de datos.22). } complejo(double r. double imaginario. } complejo(double r.

. O asignar los datos de un elemento de la plantilla a otro: Plantilla[0] = Plantilla[99].int AnyoNacimiento. . }. ya que tienen un ámbito local. Estructuras anidadas ^ También está permitido anidar estructuras. char Poblacion[32]. char Apellidos[64].Direccion.. char Puerta[3]. y para acceder a ellas se necesita hacer referencia a la estructura más externa. char CodigoPostal[6]. con lo cual se pueden conseguir superestructuras muy elaboradas. } Plantilla[200]. no es una práctica corriente definir estructuras dentro de estructuras. Vemos en este ejemplo lo fácil que podemos declarar el array Plantilla que contiene los datos relativos a doscientas personas. Ejemplo: struct stDireccion { char Calle[64]. struct stPersona { struct stNombre { char Nombre[32]. stDireccion Direccion. int Piso. En general. Por ejemplo para declarar un objeto del tipo stNombre hay que utilizar el operador de acceso (::): stPersona::stNombre NombreAuxiliar. Podemos acceder a los datos de cada uno de ellos: cout << Plantilla[43].. }. } NombreCompleto. int Portal. char Telefono[10].

int AnyoNacimiento.. cout<<”Cuantas personas declararas en tu lista?”. Si mi programa empieza con la función principal int main() { int variable. cin>>variable. char Direccion[65].. 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. . } Plantilla[variable]. Comentarios de los usuarios (39) Oscar 2011-09-18 09:10:29 Hola. .. por ejemplo: struct Persona \{ char Nombre[65]. disculpen pero como puedo declarar dimensión de un array de una estructura.Sin embargo para declarar un objeto de tipo stDireccion basta con declararla: stDireccion DireccionAuxiliar.

cin >> nCantActual. . no puedes imponer una cantidad variable de elementos. Obviamente.. . } La regla general es que las variables son locales y lo demás es global: tipos de datos.Steven R. En segundo lugar. int nCantActual. constantes. y funciones (prototipos y definiciones). . pero no usamos todos los elementos del array. int AnyoNacimiento. Tenemos dos soluciones ante este problema: 1. En primer lugar. deberíamos agregar más código fuente para asegurarnos de que esta cantidad no rebase el tope de 10. Davidson 2011-09-18 12:41:11 Hola Óscar. } Aquí podemos usar 'nCantActual' para tratar el array según la cantidad actual de elementos. El esquema del programa sería así. sería así. int main() { Persona Plantilla[10]. no deberías definir una variable ni un array de estructuras globalmente. el compilador necesita tener toda la información para crear un array y la cantidad variable sería información obtenida durante la ejecución del programa. ni tampoco que sea menor a 1. cout << "Cuantas personas declararas en tu lista? (Max: 10)". pero siempre tomando en cuenta que hay un tope. }.. Creamos el array con una cantidad máxima de elementos. En tu caso. Esto significa que podemos variar la cantidad actual de elementos. struct Persona { char Nombre[65]. porque el compilador es quien gestiona su creación y por tanto gestiona la memoria requerida para albergar sus elementos (el array en sí).. no puedes crear un array con un tamaño variable. Por consiguiente. int main() { Persona Plantilla[10]. char Direccion[65]..

en el siguiente capítulo 12 y posteriormente en los capítulos 13 y 17. el escalamiento en dirección del eje Y. la traslación en dirección del eje Y. . en el cual se puedan elegir las siguientes operaciones a realizar sobre los poliedros: § Traslación: Se deberán proporcionar la traslación en dirección del eje X. veremos este tema. principalmente. Además.2. o Diseña un programa en lenguaje C que solicite las coordenadas de los vértices de los tres objetos. Usamos memoria dinámicamente adjudicada. y la traslación en dirección del eje Z. así que no quisiera confundirte ahora mismo con esta otra solución. Y o Z. deberá indicarse alrededor de qué eje del espacio tridimensional se lleva a cabo la rotación: X. una vez que cuentas con las coordenadas de los objetos. 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. § Escalamiento: Se deberán proporcionar el escalamiento en dirección del eje X. Por otro lado. Espero que esto te aclare las dudas. o Diseña un menú. Steven pablo 2011-10-11 23:32:05 como puedo completar mi tarea Supón que se está diseñando el módulo de procesamiento de un sistema para manipulación de gráficos. que involucra el tema de punteros. Aún no hemos visto esta opción. § Rotación: Se deberá proporcionar el ángulo en radianes a rotar. y el escalamiento en dirección del eje Z.

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

struct punto p2. pero recomiendo que uses un array de puntos. struct punto p6. Davidson 2011-10-12 01:44:22 Hola Pablo. struct punto p3. para representar una lista de sus vértices. struct punto p8. struct tetraedro { struct punto vertices[4]. struct punto p7. Podrías definir un punto 3D con coordenadas enteras. pero sugiero que sean de coma flotante. como por ejemplo 'float' o 'double'. struct punto p6. }. Las representaciones de los 3 poliedros no están mal. struct punto p4. struct octaedro { struct punto p1. Por ejemplo. . }. Steven R. }.struct punto p5. struct punto p5.

php?cap=006#inicio ) acerca del modelado y de las transformaciones afines. y viceversa.Me temo que deberías cambiar la definición del cubo por la del octaedro. Para el resto de las tareas que debes implementar. pero seguro que puedes encontrar las fórmulas y matrices sin problemas en internet.com po si no sale con el comentario: #include <stdio. Si quieres. El problema es que el capítulo 6 trata el caso de 2D. rotación. Espero que esto te oriente. podrian checarlo gracias.net/curso/index. sugiero que busques información acerca de las transformaciones afines que son la traslación. pero puedes extender los conceptos a 3D. mi correo es gyakuza@gmail. y cambio de escala.h> #include <stdlib. Las rotaciones son algo más complicadas.h> . 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. Steven anonimo 2011-10-30 00:16:39 Por favor.. sin mucho problema. pueden arreglar lo de las barras en los códigos? la verdad molesta mucho.. puedes consultar el capítulo 6 de nuestro curso de gráficos ( http://graficos. El cubo tiene 8 vértices y el octaedro (regular) tiene 6 vértices.conclase. 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.

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

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

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

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

La razón de que no se puede realizar esta asignación es que no se puede hacer directamente entre dos arrays. Básicamente. Espero que esto aclare la duda. Veremos el porqué en el siguiente capítulo 13. y no lo que pretendes hacer. . La otra opción es invocar la función estándar. la función 'main()' DEBE definirse como 'int' para el tipo de retorno. declarada en <cstring> (o <string.No se trata de una inicialización.h> //Estructura clase 03/05/2012 struct competencia { char nombre_atleta[50].Nombre. . estás intentando modificar el array con una dirección de memoria. En cuanto a tu comentario: Plantilla[1]. que es asignar los elementos de un array al otro. strcpy( Plantilla[1]. creo que es por que intento guardar varios caracteres en una sola posición Hay dos matices a comentar: . Esto es.h> si usas C). "Evy" ). Para esto. sino de una mera asignación.//No se por que no puedo inicializar. En primer lugar.h> #include <stdio.Nombre="Evy". 'strcpy()'. tendrás que copiar carácter a carácter explícitamente. Steven marcillo 2012-05-04 03:40:02 Tengo un problema para que la funcion "verificacion" coja los valores ingresados en "ingresar" #include <iostream.Steven R. Davidson 2012-03-17 23:21:10 Hola Evy.

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

Cantidad.!!! El proyecto final consiste en el desarrollo de una aplicación que aplique los conceptos de arreglos. Inventario. Productos.. Después de realizar la compra se debe actualizar los valores en inventario y almacenar la transacción en el archivo de Facturas. procedimientos. Facturas Clientes: Código de cliente. Precio Inventario: Código de Producto. funciones. precio Transacciones de Clientes: Creación/Edición/Eliminar Clientes Transacciones de Productos: Creación/Edición/Eliminar Productos Transacciones de Inventario: Actualizar inventario Transacciones de Facturas: Realizar compras de productos que estén disponibles en inventario por parte de clientes que están registrados. Su programa deberá tomar en cuenta el uso de cuatro archivos de texto: Clientes. Cantidad Facturas: Código de Cliente. Código de Producto. } Humberto 2012-05-16 04:50:52 Alguien me puede Ayudar con este Proyecto se los voy agradecer mucho. librerías y escritura/lectura de datos en archivos. Búsquedas requeridas: . Nombre.getch(). Nombre Productos: Código de Producto.

Producto que genero más ventas Producto que genero más ingresos Cliente que realizo la mayor cantidad de compras Cliente que realizo la mayor inversión en compras Todas las facturas que tengan el Producto X Todas las facturas del cliente Y. precio de compra. En este proyecto se permiten grupos de un máximo de 2 integrantes. Mostrar el contenido total del inventario. Borrar un registro del inventario. . Programar en lenguajes C un inventario de nombre dado por el usuario. gracias de antemano. f. e. El producto que se encuentra en su nivel más bajo. b. Nombre del Producto. Liz| 2012-06-26 02:44:27 Hola. Modificar un registro del inventario. Almacenar el vector de registros en el inventario. g. c. que contenga registros con los siguientes campos: Identificador del Producto. Eliminar todo el inventario. d. Buscar un registro en el inventario (por identificador y por nombre del producto). Descripción. me podrían ayudar de menos con ideas para realizar este programa xfavor? es que esta muy revuelto y no estoy logrando mucho. La lectura de 5 en 5 registros utilizando un vector de tamaño 5. Observaciones: Las búsquedas tienen que involucrar una transferencia del contenido de los archivos a un arreglo para que la búsqueda sea realizada en el arreglo. cantidad en existencia. precio de venta. El programa deberá permitir a.

Cada acción deberá ser programada en funciones y la aplicación deberá proporcionar un menú en donde se muestren todas las opciones.h> #include<conio. no se si aplique bien la función STRUCT pero siento que pruebo y pruebo y no me da.&nom). int n. printf("\n\n\t\t Nombre del Orfanatorio: "). #include<stdio. .h> struct huer { char nom[20]. struct huer. }.h> #include <stdlib. Mostrar la cantidad total de la inversión que se tiene en el inventario. sex. char est[40]. scanf("%s". edad. Claudia 2012-06-26 07:35:51 Hola necesito ayuda. char norf[50].h> #include <string. me gustaría saber cual es el problema que tengo en este ejercicio? El objetivo de este ejercicio es tener un registro de los huérfanos de los orfanatos de diferentes distritos de un país y ver cual de estos orfanatos tiene mas huérfanos.h. int main() printf("\n\n\t\t Ingrese el Nombre del Huerfano: ").

&n). } Angel 2012-08-17 17:39:15 hola.scanf("%s". 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. scanf("%s". using namespace std. getch(). void Imprimir(Estudiante&Est). porcen=(nest*100)/n.2f ". scanf("%d". nest.h> void Leer(Estudiante&Est).porcen).&est). . scanf("%d". printf("\n\n\t\t Estado de la Republica al que pertenece el Orfanatorio: "). return(0). float porcen.&norf). printf("\n\n\t\t Sexo: "). printf("\n\n\t\t\t El Porcentaje de Huerfanos de DF es de: %. printf("\n\n\t\t Ingrese el numero total de Huerfanos del Estado de Mexico: ").&sex).

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

void Imprimir( Estudiante &Est ). cout<<"Nombre: "<<Est. entonces marca un error y no continúa con la compilación.Calif. obtenida previamente. cout<<"Edad: "<<Est.Carrera<<endl. cout<<"Captura Calificacion: "<<Est.cout<<"Captura Carrera: "<<endl. gets(Est. Ten presente que el compilador comienza su tarea "leyendo" el código fuente de arriba a abajo y de izquierda a derecha. Cuando tengas errores de compilación. cin>>Est. El error. cout<<"Captura Carrera: "<<Est. Esto es porque no has definido 'Estudiante' previamente. seguramente tiene que ver con 'Estudiante' en estas dos líneas: void Leer( Estudiante &Est ).Calif<<endl.Nombre<<endl.Edad<<endl.Boleta<<endl. que te da el compilador.Carrera). en lugar de mirar todo el código fuente. . Si se encuentra algo que no existe en el lenguaje y no tiene su definición. cout<<"Captura Calificacion: "<<endl. Davidson 2012-08-17 18:39:41 Hola Ángel. } void Imprimir(Estudiante&Est) { cout<<"Boleta: "<<Est. } Steven R. debes decirnos cuáles son los mensajes que te dan. ya que podemos centrarnos en la parte que falla del programa.

. aunque sea estándar. '\n'. struct Estudiante { long int Boleta. Espero que todo esto te aclare las dudas. Al leer una cadena de caracteres. En su lugar. char Carrera[5].Usas la función 'gets()' que es de <cstdio>. Escribe: #include <cstdlib> . }. cin. void Leer( Estudiante &Est ). para indicar que el programa ha terminado con éxito. El resultado sería. se lee este carácter sin pedir caracteres al usuario. float Edad. Esto aparenta "saltarse" la lectura. Esta función es demasiado problemática para ser usada. pero no has #incluido el fichero estándar de cabecera que la declara. esto es. y luego lees una cadena de caracteres. aconsejamos usar 'getline()' conjuntamente con 'cin'. El programa aparentará "saltarse" la lectura de esta cadena y pasará a leer el entero. al menos que uses un compilador antiguo y de una versión obsoleta. Existen otros matices a destacar en tu código fuente: . lees primero un entero. 100 ). . porque tienes la funcionalidad de <iostream>. void Imprimir( Estudiante &Est ). Esto es porque en el canal de entrada (el teclado) queda un carácter '\n'.No necesitas las funciones en <cstdio>.La solución en tu caso es sencillamente mudar los prototipos de estas dos funciones después de la definición del tipo 'Estudiante'.El nombre correcto es <cstdio>.En 'Leer()'. Esto es. 'Edad'. cin.Invocas 'system()'. que por convenio es 0.Boleta.getline( Est. .Nombre.get(). cin >> Est.get()' para esta tarea. . La solución es extraer ese carácter. float Calif[4]. para el campo 'Boleta'. Obtendrás un comportamiento inesperado e indeseado. Puedes usar 'cin. char Nombre[100].La función 'main()' DEBE retornar un entero. // Extraemos '\n' que queda pendiente . antes de comenzar la lectura del siguiente campo.

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). int edad. pero tengo una duda en un programa ya q ue no me quedo como me lo pidieron. . int main() { NombreEdad EDAD. } }persona[3].Steven Sony Turcios 2012-08-29 23:59:56 Hola viendo tu pag me ayudo con el tema de las estructuras. void CompararEdad(int n. struct NombreEdad { char nombre[20].int m) { cout<<"Las edades de las personas 2 y 3 son: "<<n<<" Y "<<m<<endl. Lo que tengo del programa es esto #include <iostream> using namespace std.

cout<<"Ingrese Edad:". cin>>persona[i].CompararEdad(2.i<4. return 0. cout<<"\n\n". cin>>persona[i].3). solo dice que las edades comparadas son las del 2 y 3 que en realidad no compara nada.edad. } EDAD.nombre. 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 . system("PAUSE").for(int i=1.i++) { cout<<"Ingrese Nombre de persona:"<<" "<<i<<endl. } 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.

todo esto almacenandolo dentro de una estructura. su matricula y el nombre de la materia. pide el nombre y apellido del alumno. y luego me pida el nombre de cada asignatura. quiero hacer una tabla que pida las asignaturas en las que esta matriculado un alumno (maximo 8 asignaturas). los promedia e imprime un resultado final.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. pero no se solucionarlo. segundo y tercer parcial. 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. . He hecho lo siguiente. pide el resultado del primer. #include <iostream> using namespace std.

system("cls"). cin>> asig[a]. cout<<"introduce el nombre de las asignaturas: "<<endl. char asig[40].} system("pause").}. }while(nasign<=0 || nasign>8). } 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.cin>>asig[a]. segundo premio y lugar (para el lugar te dan un archivo con todas las convinaciones) . int serie. el numro de asignaturas no puede ser negativo ni mayor que 8\n".typedef char cad[50]. //nombre de la asignatura do{ cout<<"introduce el numero de asignaturas en la que esta matriculado: ". (como loteria numero y reintegro) despues tienes crear una matriz ccon primer premio. system("Pause"). int main(){ int nasign=0. if(nasign<=0 || nasign>8) cout<< "\nError.a++) { cout<<"Asignatura "<< a <<" : ". cin>>nasign. return 0.a<=nasign . for(int a=1.

Tengo una aplicacion hecha con objetos es una aplicación bien grande. ---------triangulo. float hipotenusa. Triangulo().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. Realmente deseo De una clase basica de triangulo(a modo de ejemplo) class Triangulo { public: float cat_opuesto. por lo que debo esribir el codigo directamente sobre C. He tratado definiendo dentro de la estrictura con punteros a funciones. }. que por su estructura no soporta binarios generados desde codigo en C++. resulta que ahora tengo que implementarla sobre un procesador. quiza ustedes me puedan colaborar con una solución. float cat_adyacente. tengo un problema bien interesante. La idea es que no tenga que hacer mucho para poder migrar el codigo. de esta manera..h------------------ .

// Constructor de la clase }TRIANGULO. PTRN_Triangulo FnTriangulo. float hipotenusa. el problema radica que dentro del "Metodo" no puedo usar los "Atributos". . _triangulo. typedef struct Triangulo_1 { float cat_opuesto.c----------static TRIANGULO _triangulo = {1. void Triangulo(void).hipotenusa = 0.cat_adyacente = 0. void Triangulo(void) { _triangulo.2. float cat_adyacente. } -----------------------------Asi tengo lo mas parecido a una clase.typedef void (*PTRN_Triangulo)(void).1.cat_opuesto = 0. 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. -------------------------------------Triangulo.Triangulo}. _triangulo.

tengo una pregunta: Como puedo acceder a los campos de una estructura anidada. struct stPersona { struct stNombre { char Nombre[32]. En el siguiente codigo asigne una cadena a cada uno de estos campos.//declaro un objeto de tipo stNombre NombreAuxiliar. Edwin Bohorquez 2013-01-28 00:59:59 Hola.c tengo obligatoriamente que hacer la definición de "mini la clase" y tendria que mantenerla "Viva". .En el . }. char Apellidos[64].h> using namespace std.Apellidos="Bohorquez". char Telefono[10]. Gracias. } NombreCompleto. NombreAuxiliar. int main() { stPersona ::stNombre NombreAuxiliar. para despues imprimirlos.Nombre="Edwin". Sé que es algo poco convencional pero si alguien sabe como lo puedo usar algo muy parecido a usar objetos les inmenzamente agradecido. pero el compilador me dice que tengo errores. en toda la aplicación. #include<iostream. para realizar una asignacion?.

En cada una de sus distintas salas (Salas 1 a la Sala 6 para todos ellos) hay 5 sesiones diarias.Nombre<<endl<<endl..Apellidos<<endl. hora de inicio: 12:30h.cout<<NombreAuxiliar. cout<<NombreAuxiliar. TP . Daniel Radcliffe y Richard Harris. Larios y Albéniz. Por ejemplo. el miércoles proyectan las siguientes películas en sus cinco sesiones: “Harry Potter y la Piedra Filosofal”. } Estos son los errores que me genera el compilador: 16 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++. TRABAJO CON CENTOS DE VMWARE.cpp incompatible types in assignment of `const char[6]' to `char[32]' 17 D:\Curso C++\pract. solo lo modifique un poco. Y LA PRÁCTICA ES LA SIGUIENTE: Se desea diseñar una aplicación informática que almacene la información de la cartelera de los cines Alameda. día y sala). en las que pueden exhibirse películas distintas. De antemano muchas gracias por su explicacion!! SaraTeleco 2013-01-28 17:43:48 HOLA! MAÑANA (29-1-2013) TENGO QUE ENTREGAR UNA PRÁCTICA Y LA VERDAD QUE ME ESTOY VOLVIENDO LOCA PUES NO CONSIGO SOLUCIONAR LOS ERRORES DE COMPILACIÓN. en el cine Alameda. y en horarios no fijos (varían para cada cine. system("pause"). PLazaMayor. en la Sala 3.

En concreto hay que escribir un programa donde se definan las estructuras de datos necesarias para almacenar la información de dicha cartelera.. hora de inicio: 20 h. B. X. hora de inicio: 22:30h. sus dos principales protagonistas. . cine y sala). TP “Torrente 2”. MENU PRACTICA 9 ================ Leer película. Santiago Segura y Gabino Diego.“Sentido y Sensibilidad”. D. George Clooney y Brad Pitt. Emma Thomson y Kate Winslet. El programa debe presentar un menú con las opciones que se muestran a continuación: Elaborado por: <Nombre> <Apellidos> Fecha: <Fecha> A. M18 Se pide realizar un menú para la gestión de esta aplicación informática. Ver más abajo una posible plantilla para el programa. su título.. C. hora de inicio: 24:00h. Visualizar información en una sala concreta. TP "El Secreto de Thomas Crown". Para cada película se deberá almacenar la hora de comienzo (ya que es variable según el día. René Ruso y Pierce Brosnan... hora de inicio: 16:30h. M18 “Ocean’s Eleven”. y su calificación por edades –enumerado que podrá ser TP (todos los públicos). M13 (Mayores de 13 años) o M18 (Mayores de 18).

la sala y la sesión en el cual quiere que se proyecte. Listar películas por edades. Descripción de las Opciones: A. y el programa listará la información de la película que está proyectada en la cartelera. está será sustituida por la proporcionada en esta opción. La película será entonces incluida en la cartelera según los datos indicados. TELECOMUNICACIÓN Sala: 3 .I. se visualizará el mensaje correspondiente. Ejemplo: Cine: Alameda Día: Miércoles Programación I 1o Grado de Ingeniería de Sistemas de Telecomunicación Práctica Evaluable E. B. En caso de no haber película proyectada. Salir del Programa.Buscar película. la sala.. Introduzca Opción: Habrá que realizar además un procedimiento para inicializar la estructura con datos (actualizada cada semana con la nueva cartelera).Leer película.. Si ya había alguna película.T. Se deberá pedir al usuario (gestor de la aplicación) la información concreta de una película y el cine. Se pedirá al usuario que proporcione el cine. la sesión y el día correspondiente.Visualizar información en una sala concreta. el día.S.

Se solicita confirmación y sólo en caso de sea afirmativa se sale del programa. . Calificación: TP C. y muestre la lista de las películas que con dicha calificación se proyectan esta semana. Se recomienda que los cines sean también definidos como enumerados. Deberán definirse completamente todos los procedimientos o funciones auxiliares que se precisen. D... Nota: Esta práctica es un ejercicio que apareció en el examen Ordinario de Febrero de 2004 de la asignatura de Elementos de Programación en la ETSI en Informática.30 El Cine Albeniz.Listar películas por edades. Actores/actrices: Emma Thomson y Kate Winslet. en la sala 3 y Sesión 2.Sesión: 2 Película proyectada: “Sentido y Sensibilidad” Hora de inicio: 16:30h.. el Miércoles. Lea desde teclado una cadena de caracteres con una calificación por edades.... . Ejemplo: Título: “Sentido y Sensibilidad” Se proyecta en: El Cine Alameda. Para cada una de éstas deberá mostrarse el título junto con la información del cine donde se proyecta. Salir del Programa. Dado el título de una película se visualizarán en pantalla todas aquellas salas donde se proyecta en la cartelera. X.Buscar película. día de la semana. Hora de comienzo: 16. sala y horario.

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

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

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

cout << "1:\tVisualizar información de la cartelera" << endl. switch (opcion){ case 0: cartelera = LeerPelicula(). LeerPelicula(informacion). pelicula. cin >> pelicula. informacion). encontrado. if (encontrado){ cout << "Película encontrada " << endl. cout << "¿Opcion?: ". InsertarPelicula(cartelera. cout << "4:\tSalir del programa. BuscarPelicula(cartelera." << endl. case 1: VisualizarInformacion(cartelera). break. break. informacion). // case 1: //VisualizarInformacion // case 2: cout << "Nombre de película: ". cout << "2:\tBuscar película por su nombre" << endl.cout << "0:\tInsertar películas en la cartelera" << endl. cin >> opcion. } . cout << "3:\tListar películas de la cartelera" << endl.

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

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

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

precio tiquete (*). 2= Miami-Sn Jose.bool SalirDelPrograma(salir){ cin >> salir >> endl. **Precios Niño Adulto Adulto Mayor .Miami. total precio tiquete. cuando esta anulado o cancelado el saldo es cero. Cuando está en reserva el saldo es el mismo monto del total. saldo. MUCHAS GRACIAS. } LES ESTARÍA ETERNAMENTE AGRADECIDA SI CONSIGUIERAN AYUDARME CON MI PROBLEMA. impuesto venta 13% (*).5% (hacia España) (*). 3=Sn Jose-España. 4=España-Sn Jose). }else salir = false. impuesto salida 3% (hacia Miami) 4. ** Los precios se muestran al final en una tabla. estado de la reservación (1= Reserva 2= Anulado 3=Pagado). if (salir = S){ salir = true. angel 2013-06-23 01:02:06 como puedo hacer esto en c++ estoy usando estructura Destino (1= Sn Jose. YA QUE CON LA SUBIDA DEL PRECIO DE LOS CRÉDITOS PARA LA UNIVERSIDAD ME AMARGARÍA EL AÑO QUE VIENE SI ME QUEDARA ESTA ASIGNATURA.

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

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

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 pequeño 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 (estático) de una cantidad variable de
elementos. Si necesitas tal comportamiento, entonces necesitas usar memoria
dinámicamente adjudicada, invocando 'malloc()'. Si no puedes, entonces elige una cantidad
máxima de elementos para 'V', pero mantén 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 );

h> #include <stdio. ya que C no ofrece una suma de elementos en un array. ).B[3]. "%f".B[1] V[i].B[0] V[i].B[1] + V[i].B[0] + V[i]. estructura (que es un registro de alumnos).El siguiente error se debe a que lees un solo 'float'. Steven Juan Luis 2013-07-13 15:44:13 Buenos días. s += V[i]. Si quieres hacer esto. 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. me piden que almacene la información y calcule el promedio de cada alumno. El último error se basa en el uso del array. Por lo tanto. puedes usar un bucle para recorrer el array. Este es: #include <stdlib. Esta función no lee arrays de 'float'. O como dije antes. También puedes optar por usar un bucle 'for' para recorrer cada elemento del array 'B'. scanf( scanf( scanf( scanf( "%f". pero intentas pasar un array de 'float' como parámetro a 'scanf()'.B[3] ). ). V[i]. Espero que todo esto te oriente. el promedio por cada evaluación y el promedio global es decir el promedio de la sección. sera que alguien puede ayudarme? Tengo este programa. la solución es leer cada uno explícitamente. entonces necesitas ser explícito.B[2] V[i]. por ejemplo. 'B'. Esto es.B[2] + V[i]. "%f". "%f".h> #define N 3 struct salon { .

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

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

Nota[3].h> .Nota[1]. } 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. Pe1). Se2=Se2+V[i]. Pe4=Se4/3.printf("\n"). Pe2=Se2/3.2f\n". Pe4). Se3=Se3+V[i]. printf("Promedio de Evaluacion 4: %.Nota[2].Nota[4].2f\n". Pe3). system ("PAUSE"). } Se1=Se1+V[i]. Pe2).h> #include <conio2.2f\n".2f\n". Se4=Se4+V[i]. printf("Promedio de Evaluacion 1: %. printf("Promedio de Evaluacion 3: %. Pe3=Se3/3. return 0. Pe1=Se1/3. printf("Promedio de Evaluacion 2: %.

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

jugadores[i]. Steven Ludwin 2013-10-02 04:12:35 Hola sera que me pueden ayudar con el siguiente problema ya que no entiendo como resolverlo. // VALIDAR LA INFORMACION INGRESADA } for(i=0.partidos.2f POR PARTIDO". Davidson 2013-09-18 07:52:58 Hola Josué.jugadores[i]. funciones desarrolle el siguiente problema. getch().partidos.promedio). vectores/matrices.goles / jugadores[i]. la cual debe retornar un entero. Espero que esto te ayude. Utilizando estructuras.equipo. } Steven R.jugadores[i]. . Seguramente el error que te da el compilador es por la definición de 'main()'. La definición en C++ de 'main()' es: int main() Por convenio. retornamos 0 (cero) para indicar una terminación exitosa del programa.jugadores[i].nombre.jugadores[i].gole s.promedio =(float) jugadores[i].jugadores[i].i++) printf("\nNOMBRE %s EQUIPO %s PARTIDOS %d GOLES %d PROMEDIO DE GOLES %.i<TAM.

el usuario indicara el código del curso que desea consultar). General de Estudiantes que tienen Retrasadas. General de Estudiantes que Salieron en Limpio. c. Por Curso (con toda la información de los estudiantes. Por Catedrático (con toda la información de los estudiantes. punteo de 2 exámenes parciales. Estudiantes . Ingreso de Datos a. 3. nombre. el usuario indicara el código del curso que desea consultar). b. Reportes a. f. Por Estudiante (con toda la información de los estudiantes. Salir Evelin perez 2013-10-09 21:12:46 . b.Se quiere construir un registro para guardar carne. examen de retrasada (solo si el estudiante perdió el curso) para 100 alumnos. Catedráticos. nombre del curso. código del curso. e. General de Estudiantes con el mayor promedio por semestre. zona (tareas-exámenes cortosproyectos). Cursos. el usuario indicara el carne del estudiante que desea consultar). c. d. Se debe presentar un menú con las siguientes opciones: 1. examen final.

Sueldo= Sueldo / diasmes / diastrabajados b. Al crear un objeto de tipo 'nodo'. lo agradezco muchisimo ayuda y me puede enviar al eveamayapeba20@hotmail. En C/C++.83%) – ISR – descuentos. escribir un programa que calcule el sueldo liquido de “n” empleados. y así sucesivamente. y eliminación son fáciles de realizar: una complejidad . y éste posiblemente apunte a otro. agregado. Davidson 2013-10-17 18:17:36 Hola Tatiana. nodo *pNodo. }. a. en c++ y hacer diagrama de flujo. ingresando el sueldo nominal. el total de descuentos y el total liquido a recibir. el total del IGSS. días del mes. El uso típico es encadenar varios objetos (del mismo tipo) y así poder crear una lista cuyas operaciones de inserción.necesito ayuda como empezar a escribir en mi programa lo que me esta pidiendo es: Utilizando funciones y/o procedimientos. struct nodo { int dato. días trabajados. podemos apuntar a otro 'nodo'. esto se suele implementar con punteros. imprima el total de empleados ingresados.com Gracias!!!! :) Tatiana Vargas 2013-10-16 22:28:39 hola me gustaría que me ayudaran con el concepto de estructuras autoreferenciantes y un posible ejemplo aplicado del tema gracias Steven R. Liquido = Sueldo – IGSS (4. 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. Por ejemplo.

estas listas usan memoria dinámicamente adjudicada por lo que ofrecen una gran flexibilidad.. sus hijas son mudadas también. Por ejemplo. como por ejemplo. Por ejemplo. Esto también implicaría que cada ventana hija a su vez puede ser pariente de otras hijas. Espero que esto te oriente.net/edd/index. nodo *pAux.. Sugiero que consultes nuestro curso de EDD yendo a: http://c. // Creamos un nuevo nodo pAux = new nodo. unsigned char nCantHijas. // Relacionamos el nodo principal al nuevo nodo pCabeza = pAux. struct ventana { ventana *apHijas[256]. Así podríamos crear ventanas que posiblemente contengan una lista de ventanas hija. .. pAux->pNodo = nullptr.. // Damos valores iniciales pAux->dato = 0.. si movemos la ventana padre. nodo *pCabeza.conclase. 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.temporal de O(1). Típicamente. una relación de "hijo-pariente".php Otro uso típico es para crear relaciones de parentesco entre objetos.Ingresar Datos 2..Mostrar Datos . . }. Lo normal es que esta ventana padre controle algún aspecto de sus hijas.. o sea.

imaginario = 0.Utilice la función para ingresar los datos de estas personas Al seleccionar la opción 1.Utilice la función 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 trigonométricos en precisión simple? Estoy llevando una clase que utilizo programación y no se nada con esta pagina estoy aprendiendo lo basico.Salir Utilice una función solo para el menu b.3.. } complejo(double r. Nombre... Cuando definimos el struct con varios constructores en este capitulo: struct complejo { complejo() { real=0. double i) { real=r. Dirección y Edad de personas c. imaginario = i.Utilice la estructura STRUC para definir y almacenar Cedula. David 2014-05-28 19:08:03 Esta pagina me resuelve muchas dudas y realmente es muy útil. } .. imaginario = 0. lo primero que le pedirá es el número de personas a registrar los datos d. pero hay una cosa que no entiendo. } complejo(double r) { real=r.

David: > Cuando creas por ejemplo c1. como se invoca con un valor en punto flotante. y se convierte el parámetro de float a double. Es decir. como los dos objetos a ambos lados del igual deben ser del mismo tipo. double imaginario. Después se usa el operador de asignación que el compilador define por defecto para la clase complejo. En c2 que sucede cuando igualas este objeto a un numero? (es decir complejo c2 = 1299. Primero. hay funciones de c1 que requieren de mas de un parámetro pero solo pasamos uno. que será 1299. complejo c3 = x. a c3.real le asigna el valor del objeto creado.212. se llama automáticamente a todos los constructores? Si es así.double real. es decir. . En el caso de c1.212. Se elige aquel cuyos parámetros. se usa el tercer constructor. y luego expones varios ejemplos: complejo c1(19. se llama automáticamente a todos los constructores? No. sólo se llama a uno de ellos. Salvador Pozo 2014-05-28 20:32:42 Hola.imaginario le asigna 0.) Gracias de antemano. de nuevo usamos el tercer constructor. y a c3.232). }. complejo c2 = 1299.212. Cuando creas por ejemplo c1. por número y tipo. más se aproximen a los argumentos usados. El operador de asignación por defecto asigna a cada dato del objeto de la izquierda el valor correspondiente del objeto de la derecha. > En c2 que sucede cuando igualas este objeto a un numero? Suceden dos cosas.212. int x = 10. se crea un objeto de la clase complejo a partir del valor 1299.

el compilador busca de entre los candidatos a la función invocada para elegir el mejor a usar. La forma de inicializar un objeto es instanciando tal objeto con el valor de la inicialización. Al final. En general. Davidson 2014-05-28 21:11:38 Hola David. Hasta pronto. Se trata de un objeto temporal sin nombre. no igualamos el objeto. Steven R. complejo::complejo( double r ). que en este caso es. sino que inicializamos el objeto. vemos que pasamos un solo parámetro de tipo 'double'. Este resulta en invocar el constructor debido. En el caso de 'c1'.El objeto creado antes de la asignación se destruye una vez ejecutada la sentencia. complejo::complejo( int ). Esto es igual a. hace esto: complejo c3( (double) x ). Pero al no encontrar una versión exacta. para el caso de 'c3'. el mejor candidato de entre todos los constructores es: complejo::complejo( double r ). el compilador ve que necesitamos un constructor del prototipo. . De todos modos. complejo c2( 1299.212 ). Se da cuenta que podemos promocionar un 'int' a un 'double' y así podemos usar este constructor: complejo::complejo( double r ). entonces aplica las reglas de "cásting". Por lo tanto. Para el caso de 'c2'. Para terminar. el compilador suele optimizar este código para no tener que hacer uso de esos objetos temporales.

Steven .Espero que esto aclare las dudas.