Estructuras y asignaciones

Started by HaCkZJuaNN, December 02, 2009, 08:42:54 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

HaCkZJuaNN

Bueno, pues como ya habré dicho alguna vez en la universidad me han estado enseñando C, y viendo las similitudes que tiene bennu con c en determinadas cosas(y en otras no), me preguntaba por como funcionan las estructuras y las asignaciones. Según mi profesor de programación, en C no se pueden realizar asignaciones de estructuras a las bravas. Hay que hacer funciones que las copien campo a campo. Por ejemplo, si tengo definido un tipo carta que tiene como campos palo y numero, no podría hacer:

carta1 = carta2;

a lo bestia, sino que tendría que hacer:

carta1.palo = carta2.palo;
carta1.numero = carta2.numero;

Mi pregunta es, esto es igual en bennu, o se pueden hacer asignaciones de estructuras a las bravas??? El caso es que yo siempre he hecho asignaciones de estructuras a las bravas y en general no he experimentado problemas, pero no estoy seguro de si realmente está bien.

Un saludo y gracias.

Windgate

Sí, si los tipos son iguales se pueden hacer a las bravas, lo probé el Viernes pasado y dudé, pero funcionaba perfectamente.

Lo que ya tendría que decir algún experto como Splinter es si la asignación se hace por copia o por referencia, ya que yo "interpreto" que la estructura en Bennu es un puntero a donde reside, y así quedan 2 posibilidades.

a) Si se asignan por referencia tenemos una sóla estructura en memoria apuntada por 2 variables distintas.
b) Si se asignan por valor todo va bien, tenemos 2 estructuras en memoria apuntadas por 2 variables.

Con mi Visor 3D utilicé estructuras y punteros a millares, y nunca tuve problemas (Menos mal...) así que me atrevo a decir que es la b), con todas sus ventajas :P
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Drumpi

Se puede probar con código: haces la asignación, y muestras los valores en pantalla.
Luego cambias el mismo campo en ambas estructuras con valores distintos y mira a ver qué sale: es el método de comprobación estandar.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Windgate

Si es que somos unos perezosos la verdad, era a ver si algún iluminado nos decía SÍ, ASÍ ES y ahorrarnos las 10 lineas de código, si saco un rato (O cuando me haga falta) lo pruebo que ando de culo estos días.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Drumpi

Tranquilo, a mi tambien me pasa: el foro es muy tentador cuando no tenemos ganas de escribir las pocas lineas de código necesarias. Tengo una carpeta llena de pruebas de este tipo, y creciendo, y aun así la mitad de las veces termino preguntando en el foro.

Estoy poseido, estoy con una furia respondona de aupaaaaaaa!!!!!!
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

#5
Quote from: HaCkZJuaNN on December 02, 2009, 08:42:54 AM
Bueno, pues como ya habré dicho alguna vez en la universidad me han estado enseñando C, y viendo las similitudes que tiene bennu con c en determinadas cosas(y en otras no), me preguntaba por como funcionan las estructuras y las asignaciones. Según mi profesor de programación, en C no se pueden realizar asignaciones de estructuras a las bravas. Hay que hacer funciones que las copien campo a campo. Por ejemplo, si tengo definido un tipo carta que tiene como campos palo y numero, no podría hacer:

carta1 = carta2;

a lo bestia, sino que tendría que hacer:

carta1.palo = carta2.palo;
carta1.numero = carta2.numero;

Mi pregunta es, esto es igual en bennu, o se pueden hacer asignaciones de estructuras a las bravas??? El caso es que yo siempre he hecho asignaciones de estructuras a las bravas y en general no he experimentado problemas, pero no estoy seguro de si realmente está bien.

Un saludo y gracias.

tu profesor esta equivocado, se puede copiar una estructura directamente tanto en C como en Bennu... es una de las cosas que corregi de Bennu para que emule correctamente a C.

EDIT: Ojo, es obvio que hablamos de estructuras enteras no de punteros... aunque podemos hacer tranquilamente esto...

struct * a, * b, c;

y hacer

*a = *b;

o

*a = c;

o

c = *b;

todas son validas... tanto en C como en Bennu...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Eso lo dicen los profesores para no coger malas manías... o para hacernos trabajar un poco más a los que estamos aprendiendo. Aun recuerdo que me hicieron crear una función cuando trabajaba con listas enlazadas que devolviera UN ÚNICO VALOR de la estructura del nodo, cuando obviamente necesitábamos todos o casi todos los valores que contenía.
Por eso les tengo manía a los profesores de programación: el 70% de lo que te enseñan está mal, y aun así te explican el 30% de lo necesario para empezar a trabajar.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

Quote from: Drumpi on December 03, 2009, 12:19:25 AM
Eso lo dicen los profesores para no coger malas manías... o para hacernos trabajar un poco más a los que estamos aprendiendo. Aun recuerdo que me hicieron crear una función cuando trabajaba con listas enlazadas que devolviera UN ÚNICO VALOR de la estructura del nodo, cuando obviamente necesitábamos todos o casi todos los valores que contenía.
Por eso les tengo manía a los profesores de programación: el 70% de lo que te enseñan está mal, y aun así te explican el 30% de lo necesario para empezar a trabajar.

Nah, que va... no lo dicen para no coger malas manias (al contrario, una mala practica seria hacer las cosas complejas cuando las podes hacer simples)... lo dicen porque no lo saben... un profesor no es ningun master/senior/guru... es un simple profesor con conocimientos basicos necesarios para introducir a alguien en algo...
Las universidades y carreras son solo eso, introducciones al conocimiento de algo... el verdadero conocimiento se hace con la experiencia practica...
Yo en el secundario le enseñaba a mis profesores que eran profesores de universidades...
Es claro que esto no es una regla absoluta, pero es una regla bastante generica... (demasiado diria...)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Dicen que el que sabe sabe y el que no sabe enseña, mi experiencia universitaria ha dejado mucho que desear, he tenido a cada gilip...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DjSonyk

Quote from: Windgate on December 03, 2009, 09:04:54 AM
Dicen que el que sabe sabe y el que no sabe enseña, mi experiencia universitaria ha dejado mucho que desear, he tenido a cada gilip...
Wind tambien ahi que tener cuidado muchos saben mucho pero no les gustan enseñar ,o no quieren que aprendas mas que ellos, igual alguno de esos, es uno de tus GP...quien sabe....yo como siempre aprendido solo ,bueno menos con Bennu que estoy preguntando demasiado ,si tenemos en cuenta que siempre he sido muy cabezota y hasta que no e dado con la solucion no he parado....

kim-elet-o

Lo que dice SplinterGu es cierto, yo a mi profesor de programacion, ya le he cazado unos cuantos errores, algunos se los he dicho (cuando no peligraba mi pellejo), y otros no (no quiero que luego se mire mis examenes con lupa, jejejeje).


;D ;D ;D ;D ;D
|/
|\im-elet-o el yayo programador.

Drumpi

En mi caso no fue aplicable: este profesor sabía de programación, porque era de la facultad de informática (los de teleco compartimos edificio con ellos... y en muchas ocasiones profesores) y ha tenido que hacer cientos de programas.
Y también porque algunos hemos hecho el intento de "simplificar las cosas" y nos ha dicho que no, que no hagamos "cosas raras" y nos limitemos a hacerlo como nos decía él.

...Pero claro, luego para explicar...: "La práctica consiste en tal, tal y tal. Esto es dev-c++. Este boton compila, este otro compila y ejecuta. Leeros los .h para saber qué funciones podeis usar. Teneis una semana". (Los .h no daban más info que el moddesc y una frase).
Y lo peor: las clases teóricas las hacíamos en pseudolenguaje (en español), por lo que no sabíamos cómo se escribían los bucles, los "si"...
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

#12
Quote from: Drumpi on December 03, 2009, 02:45:59 PM
En mi caso no fue aplicable: este profesor sabía de programación, porque era de la facultad de informática (los de teleco compartimos edificio con ellos... y en muchas ocasiones profesores) y ha tenido que hacer cientos de programas.
Y también porque algunos hemos hecho el intento de "simplificar las cosas" y nos ha dicho que no, que no hagamos "cosas raras" y nos limitemos a hacerlo como nos decía él.

...Pero claro, luego para explicar...: "La práctica consiste en tal, tal y tal. Esto es dev-c++. Este boton compila, este otro compila y ejecuta. Leeros los .h para saber qué funciones podeis usar. Teneis una semana". (Los .h no daban más info que el moddesc y una frase).
Y lo peor: las clases teóricas las hacíamos en pseudolenguaje (en español), por lo que no sabíamos cómo se escribían los bucles, los "si"...

Evidentemente no sabia lo suficiente...

yo me estoy destacando por no saber explicar muchas veces ciertas cosas que creo son demasiado basicas... como decirlo... que alguien sea de la facultad de informatica, que sea ingeniero o premio "polla" del año... no significa que sea un genio en lo que pregona... y mas en el caso de los profesores... es mas, yo soy un poco reacio a creer que un genio se ponga a perder el tiempo enseñando en vez de ejercer lo que sabe... perdon, quizas estoy errado, pero eso es lo que pienso... no me gusta juzgar un libro por su tapa o por la libreria donde lo venden...

pueden existir profesores que son buenos explicando las cosas (un buen ejemplo, es windgate), pero eso no significa que lo sepan todo o que incluso a veces tengan un concepto errado de las cosas...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Hey hey, que yo buen profesor tampoco me considero, aunque la verdad es que después de la pésima docencia que he visto en mi carrera, sinceramente, por vergüenza ajena me lo intento currar todo lo bien que no lo han hecho por mí en su día :P

Y bueno, en sus tiempos era profesor de matemáticas para Universidad en academias privadas :D pero a profesor de Universidad no me metería, y menos de informática, cuestión de principios, las titulaciones de informática en España y en parte del mundo son un engaño y no tengo bien vistos a los que las terminan y se pasan a profesores para no trabajar más de 35 horas semanales... Radical que soy xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es