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

#761
Programación C/C++ / Re: Matriz
12 Mayo 2017, 17:00 PM
Yo decía algo más así:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

char cartas[] = {'#', '%', '@', '*', '!', '<', 'x', '+'};
int total = sizeof(cartas);

int main() {
    int inicio = 0;
   
    srand(time(NULL));
   
    for (int mitad=0; mitad<2; ++mitad) {
        for (int i=0; i<2; ++i) {
            int longitud = total/2;
           
            for (int j=0; j<4; ++j) {
                int deja = longitud - 1 + inicio;;
                int pilla;
               
                do {
                    pilla = rand() % longitud + inicio;
                } while(j < 3 && pilla == deja);
               
                printf(" %c", cartas[pilla]);
               
                char x = cartas[deja];
                cartas[deja] = cartas[pilla];
                cartas[pilla] = x;
                --longitud;
            }
            puts("");
        }
        inicio = total/2;
    }
}


Como puedes ver me he basado en tu idea.

Éste es el resultado:
# * @ %
@ % * #
! < + x
x + ! <

La primera fila y la segunda usan un conjunto de símbolo.
La tercera y la cuarta usan otro.
#762
Usas la ñ en la variable años, sólo debes usar las letras del alfabeto inglés para nombrar variables y funciones.

Declaras dos veces la variable segundos, cada identificador solo puede existir una única vez.
#763
Si no entiendo mal lo que quiere es que todos elementos estén en relación al primero cuándo éste representa la unidad.

Es decir, todos los elementos del array a razón del primero. O, dicho de otra forma, todos los elementos del array divididos por el primero.
#764
Programación C/C++ / Re: Matriz
10 Mayo 2017, 07:15 AM
No es por eso. En el ejemplo se toman los 4 primeros símbolos y se sitúan aleatoriamente en la primera línea. En la segunda línea se sitúan de nuevo los mismos símbolos pero con otra disposición. Después,  ya en la tercera línea se usa un juego de símbolos diferentes y se actúa como en el casp anterior.

En tu código se disponen los ocho signos a la ves y no vuelven a repetirse hasta que no hayan salido todos.

En verdad la solución es muy parecida a la que propones solo que hay que hacerlo a medio array de símbolos cada vez.
#765
Supongamos n tu número y k una variable inicializada a 1.
En un bucle que mueva a nivel de bits n hacia la derecha hasta que n valga 0, k se sumará a sí misma.
Al terminar tendrás en k el número que buscas.


O mejor aún cada vez que n se desplace a la derecha desplazar k una vez a la iźquierda.
Aunque esto supondría una mejora solo para microcontroladores de gama baja donde la suma es más costosa que desplazar bits.
#766
Programación C/C++ / Re: Llenado de Matriz
9 Mayo 2017, 23:36 PM
Entiendo y es interesante. El array cambia en cada iteración, es muy aleatorio.
Aunque el segundo elemento del par solo puede volver a salir cuando han terminado de salir todos los símbolos, nunca podría generarse un patrón como el del ejemplo del enunciado.
Aunque, ahora que lo veo, los dos estamos equivocados XD
#767
Lo haces al final para capturar la nueva línea; entonces el bucle se repite y si no has llegado al final del archivo volverá a repetirse.
#768
Eso es por si llegas al final del archivo después de una lectura y no sigas con el bucle sin nada que computar.


Sólo te da un resultado porqué tienes el fprintf que te muestra los resultados fuera del bucle principal, con lo que solo leerá una vez un formato correcto. ¿Que hacer?

1. Antes de entrar en el bucle principal haz una lectura con fgets.
2. Cambia todo el formato de bucle do - while por
while(!feof(lectores))
3. Antes de terminar el bucle inserta dentro el fprintf para visualizar los datos correctos.
4. Justo antes de terminar el bucle y después del fprintf del punto #3 vuelve a realizar una lectura con fscanf.

Los cambios:
       lectores=fopen("lectores.txt","w");
       return 0;
   }
   else{
       fgets (linea, sizeof(linea), lectores);
       while(!feof(lectores)) {
           correcto = 1;
           // Si el último carácter leído no es un '\n', es que el usuario ha
           // tecleado una lí­nea demasiado larga => entrada no correcta


// Si la entrada no es correcta, avisamos al usuario
           if (!correcto)
               fprintf (stdout, "\nLinea mal formada en el fichero (lectores.txt).\n");
           
           else {
               // Si lo es Mostramos los datos extraí­dos
               fprintf(stdout,"\nEl numero es: %d. Y el nombre es: %s\n\n", numero, nombre);
               fflush(stdout);
           }
           
           fgets (linea, sizeof(linea), lectores);
       }
   }
 
   return 0;
#769
¿Qué tal así?

Después del fgets(...) que has llegado al final del fichero con if(feof(lectores)) return 0;

Por cierto. Podrías decirme la utilidad de crear un archivo "vacío" si el archivo no existe?
#770
Programación C/C++ / Re: Llenado de Matriz
9 Mayo 2017, 17:36 PM
¿Podrías hacer un ejemplo de eso?