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

#521
Programación C/C++ / Re: URGENTE AYUDA!!
19 Febrero 2018, 01:26 AM
Pon un ejemplos malo y qué es lo que esperas.
#522
Te cambio la función Sort por esta, bastante más sencilla:
void sort(item *a, int n) {
   int i, j;
   for(i=0; i<n-1; ++i) {
       for(j=i+1; j<n; ++j) {
           if(a[i].key > a[j].key) {
               item t = a[i];
               a[i] = a[j];
               a[j] = t;
           }
       }
   }
}
#523
A simple vista he visto que:
Línea 20 has puesto & cuando el AND lógico es &&.
#524
No pongas '\0' cuando encuentres un espacio.
Lee línea a línea. Busca el primer carácter no espacio al principio desde el principio. Cuando lo encuentres toma ese puntero y lo usas como si fuera una cadena a escribir en el archivo.

Algo así:
#include <stdio.h>

char* eliminarEspaciosIniciales(char* cadena) {
    while(*cadena == ' ') ++cadena;
    return cadena;
}

int main () {
    char *cadena = "   Soy una cadena";

    puts("Original:");
    printf("%s", cadena);

    puts("\n");

    puts("Sin espacios al incio:");
    printf("%s", eliminarEspaciosIniciales(cadena));

    puts("\n");
}


Solo debes cambiar la cadena estática por una conseguida a través del archivo y el printf por un fprintf al archivo nuevo.
#525
Programación C/C++ / Re: Duda con el codigo
11 Febrero 2018, 20:50 PM
En verdad no está bien. La idea de que un método tenga tipo de regreso es que regrese un dato, por ejemplo: int suma() debería devolver el resultado de la suma. Por otra parte, y es cuestión de gustos, el que un método que realice un trabajo escriba por pantalla tampoco me gusta (a no ser por cuestión de depuración). Tratamiento de datos y representación deberían estar separados.
#526
Programación C/C++ / Re: Base de datos en C++
11 Febrero 2018, 00:34 AM
Danos un poco más de detalle, a lo mejor con puro C++ es suficiente.
#527
Es básicamente lo mismo: moverte por el array en busca del mayor valor y el menor, lo que en vez de guardar estos valores vas guardando la posición en el array de ese momento.
#528
Programación C/C++ / Re: Cartón de Bingo en C.
8 Febrero 2018, 18:31 PM
Generas una línea con tu función de generar números aleatorios no repetidos.
5 3 7 1 10 8 2 6 4 9

Y ahora, con la misma función generas cuatro aleatorios más y los usas como índice:
línea[fila][aleatorio(i)] = 0;
Siendo i un iterador de 0 a 3, ambos inclusive, en un bucle.
#529
Programación C/C++ / Re: Cartón de Bingo en C.
8 Febrero 2018, 12:22 PM
elige 4 posiciones aleatorias y conviertes en 0
#530
Programación C/C++ / Re: Cartón de Bingo en C.
7 Febrero 2018, 22:30 PM
Para sacar números aleatorios no repetidos del 0 al 9 se me ha ocurrido la siguiente solución, basada en las variables estáticas de una función (conservan el mismo valor de llamada a llamada pero solo pueden accederse desde el interior de la función misma):

int aleatorio(int reinicio) {
    // Esta función necesita stdlib.h para funcionar
    static int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int retval;
    int i, z;

    if(reinicio == 0) { // Se ha optado por reiniciar a 0, así dando la posición 0 del array del llamador, la primera
                        // se reiniciará para poder iterar normalmente. En las demás trabajar de forma normal
        for(i=0; i<10; ++i)
            array[i] = i;
    }

    i = z = rand()%10; // Obtiene una posición del array interno
    while((retval = array[i]) == -1) { // Si dicha posición ya ha sido usada (cambiada a 0)
        ++i;                          // seguir buscando las siguientes hasta encontrar un valor distinto a 0.
        if(i>9)                       // Por supuesto si superamos el nueve
            i=0;                      // Hay que reiniciar a 0
        if(i == z) // Si se ha dado una vuelta completa
            break; // salir del bucle. retval valdrá -1, dando a entender que no hay más números a elegir.
    }
    array[i] = -1; // Una vez encontrado un número válido se marca como usado con el -1;

    return retval; // Retornamos el valor encontrado.
}


El resto del programa se puede basar sobre esto:
Puedes crear una matriz de 10 x 10 donde las decenas y a cada fila usar dicho iterador para las decenas del número, de la misma forma a cada columna podrás usar la función (que devolverá 0 a 9) sumando 1 para que vayan de 1 a 10.
También puedes usar la función para, una vez rellena una fila con números aleatorios conseguir 4 posiciones que se llevarán a 0, para marcar un hueco.
Finalmente puedes usar la función para tomar 3 filas aleatorias de la matriz y crear el cartón.
Por ejemplo, la aplicación en la que he basado dicha función ofrece esta salida:
100  ---  099  092  ---  095  ---  093  094  ---
044  ---  ---  045  042  ---  046  049  ---  050
063  067  ---  ---  071  062  068  ---  065  066





Actualizado el código para eliminar un bucle eterno que se podría producir al pedir un número aleatorio cuando ya se hubieran usado todos.