|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - ProfesorX
Páginas: 1 ... 10 11 [12] 13 14 ... 32
276
« en: Martes 1 de Febrero de 2011, 23:39 »
Bueno la respuesta a tu pregunta ya esta contestada con tus mismas palabras. Si utilizas un lenguaje compilado no es posible tener tipos dinamicos. necesitas un lenguaje interpretado (o de script, que es basicamente eso, un lenguaje interpretado) La ventaja de los script radica en poder desarrollar prototipos rapidamente, supongo que esa es la razon por la que utilizan ese tipo de motor en la empresa donde trabajas, pero nada impide que trabajes con C++ normal y compiles de la manera tradicional, sin tener un lenguaje script, es cosa de que te organices tu forma de trabajo, para que recompiles lo menos posible, ya que cuando tienes un proyecto grande es en lo que se pierde mas tiempo, recompilar. Ahora, si aun insistes en implementar un motor como el que usas en la empresa donde trabajas, entonces valga la redundancia deberas hacerlo tu mismo, el camino no sera facil, pero la ventaja que tienes ahora es el internet, que si sabes buscar adecuadamente tendras lo necesario para comenzar, puedes tomar el ejemplo de otros proyectos que desarrollan interpretes (LUA, Python, PHP, etc) y tomar ideas para implementarlas en tu propio motor, incluso puedes buscar intepretes de C++. Saludos
277
« en: Jueves 27 de Enero de 2011, 20:09 »
Tienes la Clase Sumar dentro de un namespace, pero mas adelante la definicion del metodo template<class Type> void Suma<Type>::sumar(Type *p, int nElementos)
esta fuera del namespace, simplemente coloca el metodo dentro del namespace, ademas esta equivocada la variable res, deberia ser: claramente olvidaste un _ Saludos
278
« en: Martes 25 de Enero de 2011, 18:16 »
te recomiendo la versión Professional, si no quieres gastarte dinero, puedes bajarlo de algun lado Eso mi estimado amigo es pirateria y en este foro no fomentmos la pirateria, asi que si no tienes dinero para comparte la version profesional, te recomiendo al igual que Geo, bajar la verion Express, que no le pide nada a la profesional, lo mismo que haces en la profesional lo hace la version Express, el generador de codigo es el mismo en las dos versiones, en realidad la profesional solo incluye ciertas conveniencias a los programadores profesionales, como por ejemplo tener en una sola solucion proyectos de Basic, C++ Y C#, conexion y creacion de bases de datos de cualquier manejador de bases de datos utiliando el IDE (las versiones express, solo admiten creacion desde el IDE de bases de datos de SQL Server), depuracion remota, y algunas otras cosas, pero que en realidad no son tan indispensables, de hecho, microsoft al principio pensaba cobrar por las versiones express, pero al final decidio que fuera gratuito, beneficiando a todos los programadores y en general a los estudiantes, ya que es raro que un estudiante tenga los recursos para comprar una version profesional. Yo mismo utilizo la version Express, y te dire que es fabulosa. Saludos
279
« en: Lunes 24 de Enero de 2011, 19:10 »
Recuerda, el autoaprendizaje es de las herramientas más valiosas en cualquier actividad, la escuela sirve para dar formalidad y buenas prácticas . Amen hermano, has dicho una gran verdad. Vndecid, esto no significa que debes desdeñar a tu maestros, ya que es imposible que sepan todo, (yo mismo sigo aprendiendo) aunque tampoco significa que debes quedarte solo con lo que te digan los maestros, un buen alumno investiga por su cuenta tambien, practica, y no deja de aprender.Recuerda esa frase que dice "El alumno debe superar al maestro". Saludos
280
« en: Domingo 23 de Enero de 2011, 22:36 »
Como dije antes, no trabajo con Borland, sino con Visual Studio, asi que la verdad no se como se haga en Borland. En Visual Studio, simplemente creas un proyecto, añades todos los archivos de codigo fuente de tu programa al proyecto, y compilas (build). Quizas alguien con experiencia en borland te pueda decir que hacer. Saludos
281
« en: Sábado 22 de Enero de 2011, 20:49 »
Yo no utilizo el Borland C++, sino el Visual C++, pero el error "Undefined Symbol" indica que no encuentra el codigo objeto de las funciones, lo que indica que muy probablemente no estas incluyendo el archivo fuente dentro del proyecto, dices que compilaste los archivos pero ¿Lo estas haciendo por separado? (retorica). De ser asi, ese es el error, al compilar debes poner los tres archivos dentro del mismo proyecto, y compilarlos juntos todos al mismo tiemp (rebuild) o quizas estes deshabilitando algun archivo dentro del proyecto, verifica eso tambien. Saludos
282
« en: Sábado 22 de Enero de 2011, 20:29 »
1.En la llamada b.init(a) ¿se llama al destructor de la clase A cuando _a sale de su ambito y por consiguiente los punteros c y d están apuntando a basura?.
R. El destructor es llamado solo cuando se destruye el objeto mediante delete, por lo tanto aunque salgas del ambito de la variable, el objeto no es destruido. Para que destruyeras "a" dentro del ambito de la clase B, tendrias que hacer un "delete a" dentro de "b". 2. O como es un puntero lo que se le pasa al método lo que se destruye es el puntero y no a lo que apunta.
R. No estoy muy seguro de haberte entendido bien aca, pero me parece que preguntas casi lo mismo que antes, y no, de nuevo, el puntero no es destruido, lo unico que sucede es que fuera de la clase B, la variable "_a" y "a" que defines dentro de la clase no existen, se consideran como si fueran variables locales a la clase solamente, aunque afuera de b tengas una variable llamada "a" y adentro tambien, al entrar a "b" toma preferencia tu variable local "a", y la variable externa "a" es como si no existiera, ya que queda oculta por la variable "a" que defines dentro de la clase "B". La forma de destruir los punteros es que hicieras delete en alguna parte, de esa forma si tendrias punteros no validos, y al menos en el ejemplo que pones no veo ningun delete en la clase B. Desconozco que compilador utilizas, pero recomiendo que utilices el depurador (debugger) que venga con tu compilador (casi todos los compiladores modernos cuentan con debugger), ejecuta paso por paso cada linea, metodo por metodo, utiliza puntos de interrupcion, revisa contenido de variables mientras vas depurando, revisa bien tu inicializacion de variables y tambien las sentencias donde haces new and delete, de esa forma es mas probable que encuentres en donde esta el fallo. Saludos
283
« en: Jueves 20 de Enero de 2011, 23:54 »
1. si se le da el mismo nombre a una funcion miembro que a su clase, cuando se creea un objeto la funcion mismbro se ejecuta automaticamente.
R. Si, aunque esta funcion pertenece a un tipo especial llamado constructor. 2. quisiera saber si esto ocurre cuando declaro un array de objetos
R. Si de nuevo por ejemplo:
class cosa { public: int peso; void iniciar(); };
void cosa::iniciar() { peso=1; }
//y luego el array:
cosa miscosas[10][10]; en ese ejemplo todos los objetos de miscosas tendrian la variable peso con un valor de 1, ¿no? El ejemplo que pones es incorrecto, ya que el metodo iniciar no tiene el mismo nombre de tu clase, por lo tanto el metodo iniciar nunca se ejecutara al crear la clase, la forma correcta seria eliminar el void y cambiar el nombre del metodo a cosa (que llamare constructor de ahora en adelante y no metodo, ya que en realidad eso es y aunque un constructor se parezca a los metodos de una clase, no son iguales). class cosa { public: int peso; cosa(); // Costructor }; cosa::cosa() // Constructor { peso=1; }
Recomiendo que leas sobre constructores (llamados al crear el objeto) y su contraparte, los destructores, (llamados cuando eliminas el objeto). Saludos
284
« en: Domingo 16 de Enero de 2011, 01:18 »
Como te dijeron antes, no puedes asignar cadenas asi: Solo es permitido hacerlo en la declaracion inicial de variables: char micadena[30] = "Mi texto";
La forma correcta es strcpy(micadena, "Mi texto");
O si estas utilizando C++ puedes utilizar la clase string Informacion sobre strcpy: http://www.cplusplus.com/reference/clibrary/cstring/strcpy/Informacion sobre la clase string: http://www.cplusplus.com/reference/string/string/Por tu preguntas me doy cuenta ademas que no tienes ni idea de programacion en C/C++, recomiendo entonces que leas un poco mas sobre C/C++ o bajes algun curso en internet, en especial sobre arreglos (array) y cadenas (string) en C /C++ Saludos
286
« en: Jueves 30 de Diciembre de 2010, 20:24 »
A ver como te lo explico, segun lei, no se permite separar las templates en dos archivos, si defines una template, procura que la definicion de la template quede en un solo archivo, asi te evitas de problemas. Algunos compiladores permiten el uso de la palabra reservada export para poder separar el template en dos archivos, pero no todos los compiladores lo soportan, y ademas sera retirada del estandar, asi que su uso no se recomienda, mas explicacion el el siguiente FAQ (ingles): http://www.parashift.com/c++-faq-lite/templates.html#faq-35.14Entonces dicho eso, coloca cada template en un archivo, y no dos archivos para cada template, te dejo el codigo de como quedaria separando solo una template, te queda de tarea separar la otra, la idea seria 3 archivos solamente, main.cpp, lista.h y nodo.h: Lista.h #ifndef __LISTA_H__ #define __LISTA_H__ #include "nodo.h" template <class Q> class Lista{ private: Nodo<Q> *inicio; Nodo<Q> *final; int tam; public: Lista(void): inicio(NULL), final(NULL), tam(0) {} ~Lista(void){ Nodo<Q> *aux = inicio; if(!empty()){ while(inicio){ inicio = inicio->get_next(); delete aux; aux = inicio; } } final = NULL; tam = 0; } void add(Q nuevo){ Nodo<Q> *aux = new Nodo<Q>(nuevo); if(empty()){ inicio = aux; }else{ final->set_next(aux); } final = aux; tam++; } int get_tam(void) const { return tam; } bool empty(void) const{ return (inicio == NULL); } void Mostrar(void) const { inicio->ShowAll(); } }; #endif
main.cpp #include <iostream> #include "nodo.h" #include "lista.h" using namespace std; int main(void){ Lista<int> Buena; Lista<char> Mala; for(int i = 10; i < 21; i++){ Buena.add(i); } Mala.add('M'); Mala.add('A'); Mala.add('L'); Mala.add('A'); cout << "Buena mide: " << Buena.get_tam() << endl; Buena.Mostrar(); cout << "nMala mide: " << Mala.get_tam() << endl; Mala.Mostrar(); return 0; }
Saludos
287
« en: Miércoles 29 de Diciembre de 2010, 20:18 »
¿para qué quiero 2 tipos primitivos exactamente iguales? Bueno, como dije antes, no son iguales en realidad, hay que tomarlos como si fueran diferentes, esto depende del compilador y de la plataforma. Investigando un poco, el estandar solo especifica que el tipo long no sea menor a int, no hay nada que especifique que forzozamente sea mayor a int, pueden ser iguales. Haciendo un poco de historia, y suponiendo el porque (piensa un poco en la logica de esto), en sistemas de 16 bits (me viene a la memoria Turbo C) el valor int era de 16 bis, y el long era de 32 bits. Cuando se actualizo a procesadores y sistemas de 32 bits, supongo que se tuvo que ampliar el tipo int a 32 bits, debido a que internamente el procesador usa registros de 32 bits, y es mas eficiente en terminos de velocidad utilizar 32 que 16 bits en un procesador de 32 bits, y el tipo int es el mas utilzado al definir variables que guarden valores enteros, asi que esa seria la razon, la eficiencia, ya que si como programador estas acostumbrado a declarar varlables int, es poco probable que pensaras, "bueno, estoy programando en 32 bits, ahora utilizare long, que es de 32 bits, en lugar de int que es de 16 bits, para que mi programa sea mas eficiente". La fuerza de la costumbre de utilizar int te haria ocupar el tipo int en lugar de long, aun cuando no fuera eficiente (suponiendo claro que lo hubieran dejado en 16 bits) Quizas entonces debieron ampliar el tipo long para que fuera de 64 bits, pero igual me parece que no lo hicieron por compatibilidad con programas mas antiguos. En todo caso si necesitas un numero mas grande podrias utilizra long long, que en mi caso es de 64 bits (8 bytes). Es probable tambien que mas adelante, cuando se vuelvan cosa comun los sistemas de 64 bits, haya un cambio parecido, y ahora el tipo int sera de 64 bits, aunque no se, creo que cualquier cosa puede suceder, eso dependera de los que definan los estandars, y tambien de los que diseñen compiladores para los nuevos sistemas  saludos
288
« en: Martes 28 de Diciembre de 2010, 21:56 »
Dragon, se qe eres nuevo, pero por favor, te suplico que no repitas lo que preguntas, este es el segundo hilo que escribes para preguntar sobre lo mismo, se considera de mala educacion repetir varas veces en hilos diferentes la misma pregunta, aqui la mayoria trabajamos y contestamos en nuestro tiempo libre, con la intencion de ayudar pero sin cobrar nada a cambio, y sin obligacion de ninguna especie. Si nadie te responde es porque o nadie sabe la respuesta, o nadie la ha podido leer todavia, o formulaste mal la pregunta, en todo caso, debes ser paciente, por lo regular las respuestas pueden tardar 24 horas o mas, dependiendo del tiempo libre de los que ayudamos en el foro, asi que se paciente al esperar respuesta, y no por mucho que repitas la pregunta te contestaran antes, por el contrario, nadie te hara caso y te tomaran por persona molesta. Te recomiendo que leas esto: Cómo Hacer Preguntas De Forma InteligenteBueno, despues de las observaciones veamos el problema. La verdad, por el codigo que pones, me doy cuenta que no tienes ni idea de porgramacon en lenguaje C/C++, antes que nada recomendaria que consigas algun curso o libro de lenguaje C/C++, porque si no seguiras en las mismas. En el programa que publicas, estas leyendo variables de tipo char como si fueran numeros, ademas defines char solamente, pero para guardar nombres completos en realidad necesitas arreglos de char (cadenas), no char solamente. para leer definir cadenas y leerlas con scanf, se utiliza %s como en el siguiente ejemplo: char nombre[30]; scanf("%s", nombre);
pero scanf tiene un porblema, no te permite leer cadenas que contengan espacios, para leer cadenas con espacios te recomiendo el uso de fgets(), que ademas evita que leas mas caracteres de los que caben en tu variable, que puede llevar a otros errores: sintaxis: fgets ( char * str, int num, FILE * stream ); Ejemplo: char nombre[30]; fgets ( nombre, 30, stdin);
El numero que se pone es el tamaño de tu arreglo de char (cadena, en este caso 30, si fuera 20 o 40, deberas colocar 20 o 40 en fgets respectivamente. El ejemplo anterior es utilizando funciones de lenguaje C, pero tambien podrias utilizar en su lugar C++, entonces podrias usar el tipo string en lugar de un arreglo de char, y cout y cin en lugar de printf y fgets respectivamente pero explicarte eso iria mas lejos de darte solo una guia, como dije antes lo mejor es que consigas un curso de lenguaje C++, aprendas las bases, practiques, y entonces sabras mejor que hacer, en ese caso si te surge alguna duda despues de haber leido, puedes regresar y preguntar tus pequeñas dudas (espero que no quieras que te expliquen todo  ) y entonces yo o cualquier otra persona te podra ayudar mas Saludos y suerte
289
« en: Martes 28 de Diciembre de 2010, 21:05 »
Esto ocurre debido a que la plataforma que estas utilizando (supongo que es una PC) int y long utilizan la misma cantidad de bytes, en mi caso son 4 bytes, entonces podria decirse que en esta plataforma (PC) int y long son equivalentes, aunque suponer que int y long son equivalentes para cualquier plataforma, seria un error y podria acarrear problemas de portabilidad. para comprobar cuanto espacio en bytes utilizan los dos tipos, puedes usar lo siguiente: printf("%dn", sizeof(int)); printf("%dn", sizeof(long));
En mi caso esas sentencias me reportaron un valor de 4 bytes para cada tipo, o sea que como dije antes, en mi pc son equivalentes, si usas otra plataforma, quizas los valores sean diferentes  Saludos
290
« en: Jueves 2 de Diciembre de 2010, 19:48 »
Tu logica esta bien, solo tienes un pequeño error. En la ordenacion cuando intercambias los valores, solo estas intercambiando la edad, cuando en realidad debes intercambair toda la estructura, para que quede bien. La modificacion quedaria asi: void ordenar(struct maestro m[5]) { int x; int y; // Toda la estructura, no solo la edad struct maestro teme; for(x=0;x<5;x++) { for(y=0;y<4;y++) { // Esto si esta bien, ya que estas ordenando por edad if(m[y].ed<=m[y+1].ed) { // Toda la estuctura, no solo la edad teme=m[y]; m[y]=m[y+1]; m[y+1]=teme; } } } cout<<"Las edades con RFC ordenadas sonn"; for(x=0;x<5;x++) { cout<<m[x].ed<<"t"<<m[x].rfc; } }
Saludos
291
« en: Jueves 2 de Diciembre de 2010, 19:30 »
Esto no es un reto  es falta de informacion acerca de SQL La sentencia DELETE es para borrar filas, asi que el funcionamiento que describes es correcto. Lo que tu necesitas es modificar un campo de la la fila, para eso se utiliza la sentencia UPDATE, su sintaxis es la siguiente: UPDATE nombre_tabla SET nombre_columna = valor WHERE condicion;
En tu caso me parece que necesitarias algo como: UPDATE NOTAS SET CORTE1 = 0 WHERE CODIGO_ALUMNO=@CODIGO_ALUMNO
Saludos
292
« en: Lunes 15 de Noviembre de 2010, 19:29 »
Como dije antes aqui no se hacen tareas, y esto es claramente una tarea. En el problema esta explicado claramente lo que te pide, y tambien los incisos, yo no le veo problema alguno. Si no sabes ni por donde empezar, estas en un grave apuro, ya que la manera de saber como resolver el ejercicio, no pertenece a programacon de lenguaje C/C++ sino a diseño de algoritmos, yo supongo que llevaste algoritmos, de ser asi, comienza haciendo el algoritmo o diagrama de flujo del problema, entonces veras que se te faclita mucho expresarlo en un lenguaje de programacion. Si no llevaste diseño de algoritmos, te sugiero que comiences ahora mismo, ya que eso es la base para cualquier lenguaje de programacion. Si tu problema es que no sabes que sentencias y funciones de lenguaje C/C++ debes usar, entonces debes comenzar por un curso de lenguaje C/C++ desde el principio (el famoso hola mundo y demas). Desafortunadamente el aprendizaje de algoritmos y lenguaje C/C++ son cursos completos cada uno, y este no es el lugar mas adecuado para eso, aqui solo atendemos dudas puntuales en programas que hagas, siempre y cuando tengas un conocimiento minimo y basico. Si buscas cursos para aprender, utiliza google con la palabras clave como "curso" o "tutorial" de "C" o "C++", y veras que hallaras infinidad de paginas con informacion paso a paso para programar en lenguaje C/C++. Si prefrieres un libro, bien puedes ir a la bliblioteca o Tienda de libros y preguntar por libros de lenguaje C, te aseguro que encontraras muchos. Bueno, es todo y te deseo suerte Saludos
293
« en: Domingo 14 de Noviembre de 2010, 22:57 »
No se hacen tareas amigo(a). El procedimiento correcto es que tu mismo hagas el ejercicio, y entonces, si tienes problemas con la compilacion o algun error en la ejecucion, publiques el codigo que hayas hecho, explicando en que parte tienes problemas, o cual es el error que te marca el programa. Asi demuestras que estas trabajando y no solo que quieres que te hagan el trabajo de gratis  . Si haces lo que te digo, mas de un compañero del foro te ayudara, en caso contrario, puedes dar por asegurado que este mensaje se ira al olvido. Saludos
294
« en: Jueves 28 de Octubre de 2010, 19:14 »
No se hacen tareas amigo(a). El procedimiento correcto es que tu mismo hagas el ejercicio, y entonces, si tienes problemas con la compilacion o algun error en la ejecucion, publiques el codigo que hayas hecho, explicando en que parte tienes problemas, o cual es el error que te marca el programa. Asi demuestras que estas trabajando y no solo que quieres que te hagan el trabajo de gratis  . Si haces lo que te digo, mas de un compañero del foro te ayudara, en caso contrario, puedes dar por asegurado que este mensaje se ira al olvido. Saludos
295
« en: Lunes 18 de Octubre de 2010, 19:05 »
Hola a todos, quisiera saber si alguien posria atudarme a saber porq me aparece el siguiente error en este codigo.
- Too much global data defined in file[/color]
El problema es que estas sobrepasando el tamaño maximo que puedes utilizar para variables globales, que si no mal recuerdo es de 2 elevado a la 16, o sea, 65536 bytes. Solamente haz cuentas: El tamaño (en bytes) de tu estructura alumnos es 7+45+55+45+2+2+20=176 Luego defines 4 arreglos de 300 alumnos, por lo tanto, la cantidad de memoria utilizada es 4 * 300 * 176 = 211200, y como dje antes, el maximo es 65536. Una solucion podria ser que utilices memoria dinamica (new o malloc), en lugar de memoria estatica, para definir tus arreglos, ya que la memoria dinamica no tiene ese limite, solo esta limitada por la cantidad de memoria que tengas instalada en tu maquina, pero aun asi me parece que es exagerado que quieras los 300 * 4 registros de alumnos en la memoria. La solucion, mas correcta a mi a parecer, es que solo leas una parte del archivo, de 1 a 20 registros a la vez, quizas un poco mas, pero no los 300, y que implementes un algoritmo que te permita tener acceso a tus 300 registros sin tener que subirlos todos a la memoria a la vez, (pista, busca informacion sobre hash y busqueda en archivos) que es demasiado ineficiente. Saludos
296
« en: Lunes 18 de Octubre de 2010, 03:17 »
por otro lado vi que utilizad fgets, creo que eso es para archivos ya guardados en el disco duro No necesariamente, fgets es para leer cadenas de archivos, pero el archivo del que leemos es un archivo especial, que se llama stdin, que en español significa entrada estandar, la entrada estandar es el teclado, o sea que cuando utilizas stdin como nombre de archivo, leeras del teclado y no del disco duro, de hecho, la funcion getchar() tambien lee del archivo stdin, pero funciona de manera diferente. De manera similar, existe un archivo especial llamado stdout, que significa salida estandar, y representa la salida por pantalla, cuando utilizas printf, lo que hace es utilizar este archivo especial para mandar la salida por pantalla. si tu utilizaras fprintf (stdout, "Hola"), seria equivalente a la funcion printf("Hola");. Saludos
297
« en: Sábado 16 de Octubre de 2010, 19:48 »
No se hacen tareas amigo(a). El procedimiento correcto es que tu mismo hagas el ejercicio, y entonces, si tienes problemas con la compilacion o algun error en la ejecucion, publiques el codigo que hayas hecho, explicando en que parte tienes problemas, o cual es el error que te marca el programa. Asi demuestras que estas trabajando y no solo que quieres que te hagan el trabajo de gratis  . Si haces lo que te digo, mas de un compañero del foro te ayudara, en caso contrario, puedes dar por asegurado que este mensaje se ira al olvido. Saludos
298
« en: Martes 12 de Octubre de 2010, 20:32 »
Bueno, unas observaciones antes de ir al punto, recomiendo que utilices otro compilador ya que Turbo C++ ya esta obsoleto, consiguete el Visual Studio C++ Express o el Code::blocks con mingw, los dos son gratuitos. Ademas utiliza las etiquetas [ code] [ /code] sin espacios en los corchetes para encerrar tu codigo, de esa menera queda mas legible Dicho eso continuamos. No entiendo porque estas leyendo las opciones de los nombres de los platillos entradas por medo de getchar(), cuando deberias usar fgets() para leer la linea completa, en lugar de letra por letra, ademas debes de validar la cantidad de entradas/platillos que vas a leer, ya que no lo haces, y no debes leer mas de 3 entradas/ 8 platillos, ya que corromperias la memoria, el compilador no te marcara error si tratas de leer 20 platillos, pero solo tienes espacio para 8 platillos, si tratas de leer mas platillos, lo que sucede es que guarda la informacion en la memoria que esta despues de tus variables, encimandolas, corrompiendo tu codigo, y muy probablemente hara que tu programa se congele y deje de funcionar. A continuacion te dejo un pequeño bloque de codigo como ejemplo de las correcciones que deberias hacer hacer en tu codigo, tu trabajo seria implementar esas correcciones en el resto de tu programa: // Valida tus entradas para no leer mas de tres ni menos de una do { printf("CANTIDAD DE ENTRADAS DIFERENTES? (1-3): "); scanf("%d",&n); } while ((n < 1) || n > 3); // Los arreglos comienzan en cero, por lo tanto un arreglo de 3 debe // de ir de cero a 2 (i < n) y no de cero a tres como lo tenias (i <=n) for (i=0; i < n; i++) { printf("NOMBRE DE LA ENTRADA %d: ", i+1); // Usa fgets para leer las cadenas, el segundo parametro debe ser // igual al tamaño que hayas asignado a tu cadena, en este caso 16 fgets(ent[i].nombre_de_la_entrada, 16, stdin); //for (j=0; (c=getchar())!='n'; j++) // ent[i].nombre_de_la_entrada[j]=c; printf("nPRECIO DE LA ENTRADA %d: ", i+1); scanf("%f",&ent[i].precio_de_la_entrada); }
Saludos
299
« en: Jueves 7 de Octubre de 2010, 18:37 »
No se hacen tareas amigo. El procedimiento correcto es que tu mismo hagas el ejercicio, y entonces, si tienes problemas con la compilacion o algun error en la ejecucion, publiques el codigo que hayas hecho, explicando en que parte tienes problemas, o cual es el error que te marca el programa. Asi demuestras que estas trabajando y no solo que quieres que te hagan el trabajo de gratis  . Si haces lo que te digo, mas de un compañero del foro te ayudara, en caso contrario, puedes dar por asegurado que este mensaje se ira al olvido. Saludos
300
« en: Jueves 7 de Octubre de 2010, 00:20 »
Informacion sacada de http://www.codeguru.com/forum/showthread.php?t=343480 y sin traducir: Q: What is the 'this' pointer? A: It is a misbelief that the 'this' pointer is a hidden member of a class or struct. It is a hidden parameter of non-static member functions. When you declare a function the compiler adds an extra parameter to function's prototype. The type of the parameter depends on how the function is declared. According to C++ standard, 9.3.2.1: In the body of a nonstatic member function, the keyword this is a non-lvalue expression whose value is the address of the object for which the function is called. The type of this in a member function of a class X is X*. If the member function is declared const, the type of this is const X*, if the member function is declared volatile, the type of this is volatile X*, and if the member function is declared const volatile, the type of this is const volatile X*.
For instance class T { public: void foo(int a); int goo() const; };
is actually: class T { public: void foo(T* this , int a); int goo(const T* this) const; };
Static member functions, which don’t have class scope, do not have this extra parameter. One consequence is that you cannot use a non-static member function as a thread function even if it has the correct prototype UINT ThreadFunction(LPVOID param);
because that in fact the prototype (when non-static) is UINT ThreadFunction(T* this, LPVOID param);
Páginas: 1 ... 10 11 [12] 13 14 ... 32
|
|
|