Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
Autor Mensaje
mafalda
Nivel 4


Edad: 33
Registrado: 15 Dic 2011
Mensajes: 114

Carrera: Informática
argentina.gif
MensajePublicado: Jue Sep 06, 2012 4:51 pm  Asunto:  Armado de cabeceras. Responder citandoFin de la PáginaVolver arriba

Buenas, quería dejarles una consulta. Estoy haciendo el primer tp de algo II y hay que armarlos con cabeceras, pero no se bien como armarlas.
Se que por cada función tengo que tener un archivo .h pero en ese archivo va solo la declaración?? individual?
las declaración de contantes también iría en una cabecera o en un .cpp?
y por ultimo.. cuando hago el archivo .h solo pongo la declaración sin nada adicional??

Gracias!


Aries Género:Femenino Cabra OfflineGalería Personal de mafaldaVer perfil de usuarioEnviar mensaje privado
Hache
Nivel 8



Registrado: 13 May 2010
Mensajes: 574

Carrera: Informática
argentina.gif
MensajePublicado: Jue Sep 06, 2012 6:10 pm  Asunto:  Re: Armado de cabeceras. Responder citandoFin de la PáginaVolver arriba

mafalda escribió:
Se que por cada función tengo que tener un archivo .h


No.

Bah, si queres si.

Generalmente agrupas todo un conjunto de funciones que proveen cierta funcionalidad en un solo '.h'. Por ejemplo, si necesitas proveer funciones para trabajar con imagenes (por decir algo), agrupas todas las funciones en un '.h' (cargar, guardar, conversion de colores, escalado, filtrado, etc). Podrías separarlo mas y dejar solo cargar/guardar y crear otro '.h' para las transformaciones (escalado, filtrado,etc). Eso lo vas viendo vos.

mafalda escribió:
pero en ese archivo va solo la declaración??


soloDeclaracion: Si.

A menos que uses templates (que no usas) Mr. Green

mafalda escribió:
individual?

Si.

mafalda escribió:
las declaración de contantes también iría en una cabecera

Si.

Fijate que en tus programas vos haces #include de archivos '.h' (nunca incluyas c/cc/cxx/cpp por favor Surprised).

¿Te das cuenta qué pasaría si las constantes estuviesen en el '.cpp' en vez del '.h'?

mafalda escribió:
o en un .cpp?

No. Lee arriba.

mafalda escribió:
y por ultimo.. cuando hago el archivo .h solo pongo la declaración sin nada adicional??


goto soloDeclaracion;

mafalda escribió:
Gracias!

De nada.

Si no se entiende, volve a preguntar.

_________________
Nosotros... Chat FIUBA!

   OfflineGalería Personal de HacheVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
mafalda
Nivel 4


Edad: 33
Registrado: 15 Dic 2011
Mensajes: 114

Carrera: Informática
argentina.gif
MensajePublicado: Jue Sep 06, 2012 6:28 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

si, va queriendo.. ahora cuando hago el .h de las constantes me salen errores como estos:
Cita:

-declaration of 'char matriz[10][30]
-declaration of 'int inicial' shadow a parameter
-cout was not declared in this cope. ( aca agregue el unusing namespace std pero sigue igual)
-unused variable 'codo'
-unuses variable 'columna'


y esta todo el codigo arriba con eso:
Cita:

* Declaracion de constantes */
const int alto=10;
const int ancho=30;
const int cero=0;
const char codo = 'c';
const char pared= '+';

/*declaracion de tipos */
int fila;
int columna;

char matriz[alto][ancho];
char posicion_inicial;
char posicion_final;
int inicial;
int final;



no entiendo en esta parte porque saldrian esos errores.


Aries Género:Femenino Cabra OfflineGalería Personal de mafaldaVer perfil de usuarioEnviar mensaje privado
fer90
Nivel 9


Edad: 33
Registrado: 14 Sep 2009
Mensajes: 1117
Ubicación: San Martín
Carrera: Informática y Sistemas
CARRERA.informatica.png
MensajePublicado: Jue Sep 06, 2012 6:58 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Generalmente para crear constantes en C/C++ se usa la directiva "define" al comienzo de tu programa (donde por ejemplo, usas #include para incluir las librerías que quieras). Ejemplo:

#define PI 3.14

Es decir:

#define NOMBRE_CONSTANTE VALOR

En tu code, al utilizar NOMBRE_CONSTANTE, al momento de compilar ya se reemplazó por el valor que le otorgaste Smile
(tanto define, como include se les llama directivas al pre-compilador, podés indagar un poco más en esto).

Por lo demás, no estás declarando tipos, sino que, como indica el error al compilar, estás declarando variables de tipo int, char, y char[][] !!!
Para declarar tipos, se utiliza la palabra reservada "typedef".

_________________
¿Y quién te va a tirar las postas y truquitos para cada materia?
Nosotros...Chat-Fiuba. Somos más grandes que Jesús.

Cumple sus sueños quien resiste!!!

Tauro Género:Masculino Caballo OfflineGalería Personal de fer90Ver perfil de usuarioEnviar mensaje privado
mafalda
Nivel 4


Edad: 33
Registrado: 15 Dic 2011
Mensajes: 114

Carrera: Informática
argentina.gif
MensajePublicado: Jue Sep 06, 2012 8:12 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

si pero cuando hago todo eso me pone que por ejemplo aca:
Cita:

void creando_caminos(char matriz[alto][ancho], int inicial, int final);

antes del ; final me falta una coma o 3 puntos suspensivos (?)

aca,
Cita:
typedef char matriz[alto][ancho];

que me falta un ] antes del ; (??) y mas cosas asi


Aries Género:Femenino Cabra OfflineGalería Personal de mafaldaVer perfil de usuarioEnviar mensaje privado
fer90
Nivel 9


Edad: 33
Registrado: 14 Sep 2009
Mensajes: 1117
Ubicación: San Martín
Carrera: Informática y Sistemas
CARRERA.informatica.png
MensajePublicado: Jue Sep 06, 2012 8:34 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

mafalda escribió:
si pero cuando hago todo eso me pone que por ejemplo aca:
Cita:

void creando_caminos(char matriz[alto][ancho], int inicial, int final);

antes del ; final me falta una coma o 3 puntos suspensivos (?)


Sobre esto, borrale el "alto" y "ancho". Es una declaración. En una declaración sólo tenés que pasarle el TIPO de parámetro que va a recibir y el nombre de la variable a usar en la función. Si "alto" y "ancho" son variables, no podés declararlas ahí. A lo sumo podés reemplazar alto y ancho por números o constantes predefinidas.

mafalda escribió:
aca,
Cita:
typedef char matriz[alto][ancho];

que me falta un ] antes del ; (??) y mas cosas asi


Lo mismo, si alto y ancho son variables eso nunca va a funcionar. Podés hacer:

typedef char tipo_matriz[10][10];

Para declarar un nuevo tipo llamado "tipo_matriz" que es una matriz de 10 por 10 de caracteres. Se utilizaría de la siguiente manera al declarar una variable:

tipo_matriz matriz;

Ahí tendrías una variable llamada "matriz" que es de tipo char[10][10].
Y si hacés esto último, tu declaración de la función de más arriba puede ser:

void creando_caminos(tipo_matriz matriz, int inicial, int final);

OJO: Si vos no sabés cuantas filas o columnas va a tener la matriz a priori, no te sirve declarar todo con números o constantes definidas, en todo caso, usá [][].

_________________
¿Y quién te va a tirar las postas y truquitos para cada materia?
Nosotros...Chat-Fiuba. Somos más grandes que Jesús.

Cumple sus sueños quien resiste!!!

Tauro Género:Masculino Caballo OfflineGalería Personal de fer90Ver perfil de usuarioEnviar mensaje privado
mafalda
Nivel 4


Edad: 33
Registrado: 15 Dic 2011
Mensajes: 114

Carrera: Informática
argentina.gif
MensajePublicado: Mie Sep 26, 2012 10:25 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Ahi salio!

Muchas Gracias Chicos! Very Happy


Aries Género:Femenino Cabra OfflineGalería Personal de mafaldaVer perfil de usuarioEnviar mensaje privado
koreano
Nivel 9



Registrado: 15 Jul 2010
Mensajes: 1796

Carrera: No especificada
blank.gif
MensajePublicado: Mie Sep 26, 2012 10:38 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

En general es mala práctica usar #define para constantes:

- Perdés la oportunidad de usar distintos tipos de datos explícitamente (por ejemplo para polimorfismo o para tener mas control)
- Los defines son simples reemplazos por parte del preprocesador. Puede tener resultados inesperados, por ejemplo reemplazando donde no querías o pisando lo que reemplazó con otra cosa
- Los defines no tienen scope, solo se definen cuando se los encuentra en un #define y viven de ahi en adelante (o hasta encontrarse con un #undef). También puede tener resultados inesperados

Todos estos problemas se resuelven usando constantes. En tu caso, como estás haciendo un proyecto chico es muy raro que tengas alguno de estos problemas pero es un buen dato a tener en cuenta. Ah, y a los que les preocupa la velocidad del código, cualquier compilador puede optimizar las constantes Smile


   OcultoGalería Personal de koreanoVer perfil de usuarioEnviar mensaje privado
Sebastian Santisi
Administrador Técnico


Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451


argentina.gif
MensajePublicado: Mie Sep 26, 2012 10:43 am  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Adhiero al koreano.

Los #define se usan asiduamente en C, y es herencia en C++, no una herramienta nativa.

Stroustrup es clarísimo al respecto de que no deben usarse en C++.

_________________
Image[tex] ${. \ \ \ \ \ \ \ \ \ .}$ [/tex][tex] ${\Large Usá \LaTeX, no seas foro...}$ [/tex]

Aries Género:Masculino Perro OfflineGalería Personal de Sebastian SantisiVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
fernandodanko
Nivel 8


Edad: 33
Registrado: 16 May 2009
Mensajes: 859
Ubicación: Berazategui - BS.AS
Carrera: Electrónica
CARRERA.electronica.5.gif
MensajePublicado: Mie Sep 26, 2012 5:14 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Un clásico problema de los #define:

Código:
#define SUMA(X, Y) X + Y
printf("(3+5)/2 = %d\n", SUMA(3,5) / 2);


Tauro Género:Masculino Caballo OfflineGalería Personal de fernandodankoVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
Sebastian Santisi
Administrador Técnico


Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451


argentina.gif
MensajePublicado: Mie Sep 26, 2012 5:26 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Nah, no es por eso.

Tu ejemplo es rápidamente fixeable con paréntesis y además no había que irse a macros de función; en C++ se desrecomiendan incluso cosas del estilo de "#define PI 3.14".

El tema es que en C por lo general te chupa bastante un huevo de qué tipo son las cosas (y si sí, usás los sufijos que correspondan cuando declarás el literal), y por otro lado, los errores de compilación de C son bastante livianitos y fáciles de seguir.

La diferencia entre macros y constantes es que unas pasan por el preprocesador y las otras por el compilador. Los reemplazos del prepro son invisibles para el compilador, por lo que la identificación de los errores se hace complicada. Por el otro lado, las constantes, tienen tipo asociado, lo que habilita un montón de cosas a nivel compilador para entender qué están haciendo. A nivel eficiencia es lo mismo, el compilador probablemente vuele al carajo una variable constante al optimizar; lo importante es que sepa unívocamente de qué tipo es, cuál es el scope, cuál el namespace, etc. (No da con complicar con ejemplos, pero por ejemplo, en C, "#define A 'a'", ¿de qué tipo es A?, ¿de qué tipo sería si hubiera hecho "const char a = 'a'"?)


Al respecto de C, es natural el uso del prepro como asistente para la compilación. Por lejos de estar desrecomendadas, las macros de función son fundamentales y ahora tomaron bastante fuerza en el último estándar como estructura para hacer sobrecarga de funciones.

_________________
Image[tex] ${. \ \ \ \ \ \ \ \ \ .}$ [/tex][tex] ${\Large Usá \LaTeX, no seas foro...}$ [/tex]

Aries Género:Masculino Perro OfflineGalería Personal de Sebastian SantisiVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro
No podés responder a temas en este foro
No podés editar tus mensajes en este foro
No podés borrar tus mensajes en este foro
No podés votar en encuestas en este foro
No Podéspostear archivos en este foro
No Podés bajar archivos de este foro


Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.3039s ][ Pedidos: 20 (0.2095s) ]