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 - MAFUS

#1031
Programación C/C++ / Re: Ayuda, que esta mal ?
6 Noviembre 2016, 23:29 PM
Tiene que ver con la memoria de la pila (stack) y el montón (heap).
Cuando entras en una función C adquiere espacio en la pila para las variables y los arrays. Cuándo se sale de la función toda esta memoria desaparece.
Por otra parte la memoria del montón es más permanente, por el hecho de que la controlas tú. Adquieres memoria con una de las funciones de la familia malloc. Si creas un array en el montón, éste no depende de la función por eso aunque salgas de ella lo que hay en memoria permanece. Si devuelves de la función el puntero que apunta a esa zona de memoria, en tu main recibirás dicha dirección y podrás trabajar con ella.

Te recomiendo que busques sobre memoria stack y heap. Te aclarará muchas dudas.
#1032
Programación C/C++ / Re: Ayuda, que esta mal ?
6 Noviembre 2016, 22:57 PM
Tienes mal 2 cosas.
scanf("%s",&cad);
Una variable tipo cadena no debe pasarle su dirección con & a scanf.
Debería ser así:
scanf("%s", cad);

Por otra parte estás devolviendo, en la función copiar, un array local. Éste se destruye al salir de la función. Deberías usar malloc sobre un puntero y devolverlo; esto es memoria del montón y permanece entre llamadas, a diferencia de la pila.
#1033
Eso muestra una solución recursiva y su contraparte iterativa.

Top-down y bottom-up son como te explica, por ejemplo, wikipedia: https://es.wikipedia.org/wiki/Top-down_y_bottom-up
#1034
No hay mucho código que mostrar porque eso es técnicas de diseño.
#1035
Como sabes se usa un índice para recorrer los arrays. El arrays de flotas del ejemplo es el suigiente:

indice             contenido
   0                      1.32
   1                      4.21
   2                      2.33
   3                      0.23
   4                      8.35
   5                      2.32

El enunciado te dice que debes crear otro array de enteros que contendrá los índices del array de floats

indice             contenido
   0                        0
   1                        1
   2                        2
   3                        3
   4                        4
   5                        5

Y dispongas el arrays de índices para que al recorrerlo, y usar su contenido como índice del array de floats, este muestre sus valores de forma ascendente:

array de índices
indice             contenido
   0                        3
   1                        0
   2                        5
   3                        2
   4                        1
   5                        4

array de floats
indice             contenido
   0                      1.32
   1                      4.21
   2                      2.33
   3                      0.23
   4                      8.35
   5                      2.32

Así, en un bucle i desde 0 hasta 5
     si se muestra el contenido de arrayfloat[arrayindice[i]]

imprimirà
0.23
1.32
2.32
2.33
4.21
8.35
#1036
Con un punto no es un problema pero con los dos puntos, que es la forma con la que lo quiere hacer sí.
Capturar, de igual forma, una hora con un float, tampoco lo veo práctico si llegara el caso de tener que realizar operaciones matemáticas sobre los minutos y acomodar las horas después.
#1037
En vez de capturar un float haz que se capturen dos enteros y un carácter en medio de ellos.
#1038
Programación C/C++ / Re: Problema leer char *
1 Noviembre 2016, 18:34 PM
En la línea 41 y en la 96 pecas por lo mismo: intentas asignar una cadena a un puntero sin inicializar y eso no se puede. Primero debes adquirir la memoria suficiente para que la cadena que vaya a recibir quepa allí dentro, es después que podrás pasarle una cadena con scanf. Otra cosa es que uses el modificador m de scanf (es un estándar POSIX, no de la biblioteca básica de C) para que la función adquiera ella misma el espacio, que luego tendrás que liberar con free. En tu caso el argumento de la cadena de control de scanf sería %m[^\n].
#1039
Acabo de revisar tu código y tienes una cantidad bastante grande de fallos con el trabajo de las cadenas.

Por ejemplo:
Línea 76:
Código (c++) [Seleccionar]
if (entrada == titulo)
Así no se compara el contenido de dos cadenas tipo C (array de caracteres), lo que haces es comprobar si los dos direcciones de inicio de sendas cadenas son iguales. Para comparar deberías haber usado strcmp o strncmp.

No muy lejos de allí, línea 83:
Código (c++) [Seleccionar]
nuevoTitulo == titulo;
Después de capturar una cadena con cin y dejarla en nuevoTitulo querías pasársela a la variable titulo. En es línea has cometido tres errores.
1. El operador de asignación es '=', un sólo símbolo de igualdad.
2. El operando que recibe el valor se sitúa a la izquierda, a la derecha va el que entrega el dato.
3. Los dos operandos son cadenas C por tanto no se puede usar la igualdad sino el strcpy o strncpy.

Después está lo de gets y lo de main, como te había dicho. Ahora tienes trabajo para corregir.
#1040
Solo tengo linux así que no puedo probar. Copiaras aquí toda la salida de la consola o subieras una imagen de ella hasta que empieza el bucle eterno podría tener una idea de por donde va el flujo.