Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Zeigon en 10 de Enero de 2003, 08:57:07 PM

Título: dudas: una de funciones y una de ficheros
Publicado por: Zeigon en 10 de Enero de 2003, 08:57:07 PM
                                Tengo un par de dudas más q espero q se resuelvan para el montón  :D :

1) si tengo una función q quiero q devuelva dos valores (ó 3, ó 4...) como lo hago, pq si lo pongo así tanto en la definición como en la declaración, como q sólo se puede devolver uno, no?:

int funcion (int,int)


2) la forma en q los datos se meten en un archivo es uno detrás de otro, no? sea en "modo texto" (al ver el archivo se ven bien los datos) o en "modo variable"(al ver el archivo se ven simbolos raros). quiero decir q lo de secuencial y aleatorio se refiere sólo al acceso, a la forma de leer, no de escribir, no? aunq en cierto modo la escritura es secuencial pq pone uno detrás de otro.

gracias                                
Título: dudas: una de funciones y una de ficheros
Publicado por: deadLock++ en 10 de Enero de 2003, 10:00:40 PM
                                Para retornar datos de una función puedes hacer también a través de sus parámetros, para esto tienes dos caminos:

1. Utilizar punteros (compiladores C o C++).
2. Utilizar el pasaje de parámetros por referencia (compiladores C++).

Utilizando punteros:

void foo(int * pA);



void main(void)

{

  int a;

 

  foo(&a);



  printf("valor: %dn", a);

}



void foo(int * pA)

{

  *pA = 10;

}

De esta manera lo que pasas como argumento es una dirección de memoria.

Utilizando referencias:

void foo(int &a);



void main(void)

{

  int a;

 

  foo(a);



  printf("valor: %dn", a);

}



void foo(int &a)

{

  a = 10;

}


En este último método el código queda un poco mas limpio, sin embargo el compilador hace lo mismo que en el método 1, ya que finalmente lo que se pasa como argumento es una dirección de memoria.                                
Título: Re: dudas: una de funciones y una de ficheros
Publicado por: Mars Attacks en 10 de Enero de 2003, 10:22:29 PM
                               
CitarTengo un par de dudas más q espero q se resuelvan para el montón  :D :

1) si tengo una función q quiero q devuelva dos valores (ó 3, ó 4...) como lo hago, pq si lo pongo así tanto en la definición como en la declaración, como q sólo se puede devolver uno, no?:

int funcion (int,int)

Muchas veces se suele usar el primer int como indicador de éxito o fallo en la función, y los parámetros que se pasan están entre los paréntesis de la función, bien por referencia o bien por valor, como muy bien te ha explicado deadLock.

Citar
2) la forma en q los datos se meten en un archivo es uno detrás de otro, no? sea en "modo texto" (al ver el archivo se ven bien los datos) o en "modo variable"(al ver el archivo se ven simbolos raros). quiero decir q lo de secuencial y aleatorio se refiere sólo al acceso, a la forma de leer, no de escribir, no? aunq en cierto modo la escritura es secuencial pq pone uno detrás de otro.

Tú mismo te lo has respondido, ¿no? Se escribe secuencialmente (al escribir en modo texto -asciis- o en modo binario -cualquier símbolo binario-) adelantando una posición después de escribir el dato. Pero puedes posicionarte en cualquier parte del fichero (con alguna función como fseek o similares) y seguir escribiendo a partir de ahí. En ficheros que sirven como fichero de datos de una base de datos, si cada registro tiene un número fijo de bytes (pongamos n bytes) y quieres escribir directamente en el quinto registro, harías un fseek a la posición 5*n del fichero y escribirías (o leerías).
No sé si me he explicado muy bien...                                
Título: dudas: una de funciones y una de ficheros
Publicado por: Zeigon en 11 de Enero de 2003, 09:19:37 PM
                                pues gracias a los 2. ya me ha quedado claro, pero esto me lleva a otra pregunta  :jaja: : q diferencia hay entre abrir un archivo en modo texto y en modo binario, creo haber leido q para abrir en binario habia q poner una 'b' donde se pone el modo de apertura:


txt = fopen("archivo.txt", "b+w"); //por ejemplo para abrir en binario y escritura, no?



pero para q sirve abrir archivos así??

regracias  :P                                
Título: dudas: una de funciones y una de ficheros
Publicado por: Mars Attacks en 11 de Enero de 2003, 09:42:49 PM
                                Pues que en uno puedes visualizar y/o modificar los datos con cualquier programa procesador de textos (el notepad, por ejemplo) y con el otro, al abrirlo sólo verás marcianos.
Digamos que, si quieres que tu archivo pueda ser manejado "desde el exterior" del programa con que lo usas, es recomendable trabajar en modo texto (se abriría con a+t, creo). Si no, pues modo binario y a la marcha.
En realidad lo que marca la diferencia es cómo leas o cómo escribas. Es decir, si tú lees chars y en el archivo hay un 00010101 físico (por poner algo), tendrás en la variable de entrada el caracter "A" (o lo que sea). Si lees enteros, leerás un 21, y así sucesivamente. Pero entonces igual no te reconoce bien caracteres especiales de modo texto (tabulaciones, retornos de carro o cosas así). En fin, no estoy muy lúcido, si alguien puede explicarlo mejor que lo haga :)                                
Título: dudas: una de funciones y una de ficheros
Publicado por: Xtrai2 en 13 de Enero de 2003, 08:53:39 PM
                                En modo binario se tratan los fines de linea de diferente manera creo...                                
Título: dudas: una de funciones y una de ficheros
Publicado por: Repoker en 14 de Enero de 2003, 12:21:11 AM
                                Sí, es por eso que a veces al bajar un archivo de texto plano (ole mi ingles) con un cliente ftp en modo BINARIO te llega sin saltos de línea y con unos caracteres como cuadrados al final de las mismas :)                                
Título: dudas: una de funciones y una de ficheros
Publicado por: synchrnzr en 14 de Enero de 2003, 11:49:42 AM
                                Es lo que dice Xtrai2, en binario al escribir se completan los retornos de carro y saltos de línea y al leer se omiten. Por cierto, creo que la cadena de acceso tendría que ser "bw" o "wb" sin el símbolo '+'... aunque afortunadamente para ti el compilador omite los modificadores no reconocidos sin dar error ;)

sync