Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Queta

#251
Programación C/C++ / Re: ejercicios en c
16 Junio 2011, 19:14 PM
Cita de: Dark Invader en 16 Junio 2011, 18:45 PM
Lo que pasaba es que si por ejemplo:

int strlen(char *cadena)

Esa es la funcion pero por parametro seria:

int strlen(&cadena)

Se enviaria la direccion cadena y el parametro de la funcion almacenaria el valor de esa direccion,en este caso de la cadena.Pero claro estudie que las cadenas y arrays ya estan definidos en memoria,y no haria falta pasar la direccion...O eso creo.

No hace falta; vuélvete a leer este enlace:

http://www.cplusplus.com/doc/tutorial/functions2/

Si continúas sin entenderlo crea otro post y pregunta.

Cita de: Dark Invader en 16 Junio 2011, 18:45 PM
Pero imaginate que no sabes cuanto mide la cadena,imaginemos que has cazado la cadena con gets y a lo mejor son 9 letras(abcdefgh + el caracter de final de cadena)

Entonces¿seria la misma estructura,incrementando y luego decremento?

Fíjate que en mis códigos nunca "sé" el tamaño de las cadenas ::).
#252
Programación C/C++ / Re: ejercicios en c
16 Junio 2011, 17:42 PM
Bueno, el tema se complica si me dijiste que has empezado con C/C++ hace cosa de un mes. En el código estoy manejando cadenas y punteros:

http://www.cplusplus.com/doc/tutorial/arrays/
http://www.cplusplus.com/doc/tutorial/pointers/

Antes de que te lo explique, déjame mencionarte que en:

int strlen(char *cadena)

char *cadena es simplemente un parámetro. Si utilizásemos esta función deberíamos pasar una cadena, un array, al parámetro llamado cadena, ¿entiendes? Mira esto para más información:

http://www.cplusplus.com/doc/tutorial/functions/
http://www.cplusplus.com/doc/tutorial/functions2/

A lo que iba, cuando hayas estudiado cadenas y punteros entenderás que (supongamos el siguiente ejemplo):

#include <stdio.h>
#include <string.h>

int main()
{
char string[] = "Hola";

char *ptr = string;

printf("Elementos de la variable string:\n");

for(int a = 0; a <= strlen(string); a++)
{
printf("string[%d] = %c\n", a, string[a]);
}

printf("\nElementos de la variable ptr:\n");

for(int b = 0; b <= strlen(ptr); b++)
{
printf("ptr[%d] = %c\n", b, ptr[b]);
}

getchar();

return 0;
}


ptr es un puntero que apunta a la variable (cadena) string. Al apuntar se reservan 5 celdas de memoria (vamos a llamarlo así) y se pone en ptr el contenido de string. O sea, quedaría una cosa así:

string[0] = "H" (siempre empieza por la celda 0)
string[1] = "o"
string[2] = "l"
string[3] = "a"
string[4] = "\0" (carácter nulo para finalizar la cadena)

y lo mismo con ptr:

ptr[0] = "H"
ptr[1] = "o"
ptr[2] = "l"
ptr[3] = "a"
ptr[4] = "\0"


Entonces esto es aplicable a la función strlen. ptr apunta a cadena. Lo bueno viene ahora. Ponemos por caso que le pasamos, al parámetro de la función, la cadena: elhacker. Luego la cadena cadena quedaría:

cadena[0] = "e"
cadena[1] = "l"
cadena[2] = "h"
cadena[3] = "a"
cadena[4] = "c"
cadena[5] = "k"
cadena[6] = "e"
cadena[7] = "r"
cadena[8] = "\0"


y ptr igual. Con el bucle avanzamos ptr hasta la penúltima celda (ptr[7]) pero cadena sigue en la primera celda (cadena[0]). Entonces se resta, en este caso 8 – 0, y queda el tamaño final.

Sé que lo explico fatal y fantasma306 lo explicó más breve y simple pero mira, así tienes diferentes opciones :).
#253
Programación C/C++ / Re: ejercicios en c
16 Junio 2011, 14:58 PM
Cita de: fantasma306 en 16 Junio 2011, 13:54 PM
solo un pequeño fallo, al final del bucle tienes que desincrementar ptr, por que al ser un char* tambien cuenta el caracter '\0';

Verdad; añade solamente después del while:

*ptr--;

Dark Invader, respondo a tu duda después, que ahora no puedo.
#254
Programación C/C++ / Re: ejercicios en c
15 Junio 2011, 20:46 PM
int strlen(char *cadena)
{
char *ptr = cadena;

while(*ptr++);

return ptr - cadena;
}


Ya tienes la función strlen sin necesidad de usar la librería string ;D.
#255
Pues para suspender ética te lo tienes que currar...
#256
Depende del compilador y del enlazador que uses. Eso sí, aunque lo pudieras hacer no pertenecería al estándar de C/C++.
#257
En C/C++ no existe ninguna librería o funciones estándar para saber los atributos de un archivo. Dependiendo si usas:

#258
Como ya dijiste que sabías un poco de C++ y estabas familiarizado con la API de Windows, antes de que empieces seriamente te recomiendo que te pases por aquí:

http://msdn.microsoft.com/en-us/library/60k1461a.aspx

Te enseña a usar básicamente el IDE de Microsoft y de paso aprendes algo de programación orientada a Windows.

Por otro lado, estos tipos de datos que mencionaste debes saber que son únicamente para Windows. Para más información pásate por aquí:

http://msdn.microsoft.com/en-us/library/aa505945.aspx
http://msdn.microsoft.com/en-us/library/cc230273%28v=PROT.10%29.aspx
#259
Es lo mismo.
#260
El cambio entre estos dos lenguajes es simple, pero se deben tener factores a la hora de elegir entre uno de éstos.

El primer punto, y el más importante seguramente, es que C es un lenguaje estructurado o sea, es la técnica para escribir programas de manera clara. Por eso, se eliminan las instrucciones de transferencia incondicional y se usa la estructura: secuencia, selección e iteración. Por otro lado, C++ es un lenguaje básicamente orientado a objetos, o sea, basado en las técnicas de herencia, abstracción, polimorfismo y encapsulamiento.

http://en.wikipedia.org/wiki/Object-oriented_programming
http://en.wikipedia.org/wiki/Structured_programming

Yo simplemente te dije la diferencia que, desde mi punto de vista, es la más importante pero si quieres saber más en detalle, te aconsejo que entres en http://unthought.net/c++/c_vs_c++.html.

Mi recomendación personal es que empieces por C y luego vayas a C++ sin dudarlo.