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

#321
Yo le aconsejaría revisarlo todo ya que hay variables de más, falta la librería time.h, no inicializa rand, haría falta bajo mi punto de vista un bucle por si no introduce 1.

En fin, te lo dejo funcionando. Ya es cosa tuya mejorarlo:


Código (cpp) [Seleccionar]

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

int main(){
   srand((unsigned) time(NULL));
   int a, j, k=0, f=0;
   int b[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   char c[] = {"abcdefghijklmnopqrstuvwxys"};
   char letra[5];
   int numero[5];
   do{
     printf("==========================\n== Generador de codigos ==\n==========================\n\n* Ingrese 1 si quiere generar un codigo\n");
     scanf("%d", &a);
     if (a != 1)
       printf("Necesitas ingresar el numero 1 para generar un codigo\n");
   }while(a != 1);
   for(j=0; j < 5; j++) {
     k = 1 + rand() % 25;
     letra[j] = c[k];
   }
     for(j=0; j < 5; j++){
     f = 1 + rand() % 9;
     numero[j] = b[f];
   }
   printf("%c %c %c %c %c %d %d %d %d %d", letra[0], letra[1], letra[2], letra[3], letra[4], numero[0], numero[1], numero[2], numero[3], numero[4]);
   return 0;
}


¡¡¡¡ Saluditos! ..... !!!!




#322
Programación C/C++ / Re: Problema extraño
13 Marzo 2014, 19:33 PM
Cita de: yoel_alejandro en 13 Marzo 2014, 19:19 PM
Sólo digo que me parece bien raro ese lenguaje. ¿Quién lo usa? ¿Es algo parecido a los sms?

¡No hombre!, es un ejercicio de una página de retos.

¡¡¡¡ Saluditos! ..... !!!!


#323
UPPSS:::: creo que colqué el código equivocado, no sé incluso si era el original. El que yo había modificado es:

Código (cpp) [Seleccionar]

/** Determinar a partir de un año que se introduce
si no tiene cifras repetidas y los años siguientes
hasta encontrar otro año donde se repita algún dígito **/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <conio.h>

#define FALSE 0
#define TRUE 1

/******* Declaracion de funcions ******/
int obtenerAnio();
int tipoAnio(int año);
int calcularSec (int año);

/******* Variables globales ******/
int obtenerAnioOK=FALSE;  // Para NO acceder a la opción 3 antes
int tipoAnioOK=FALSE;    // Para NO acceder a la opción 3 antes

/* MENU PRINCIPAL */
int main(void){
 int opcion=0,i;
 int año; // Variable año utilizada en las funciones
 do{
   system("cls");
   printf("\n1.- Obtener a\xA4o");
   printf("\n2.- Tipo de a\xA4o");
   printf("\n3.- Calcular secuencia");
   printf("\n0.- Salir\n\n");
   printf("\nIntroduce una opci\xA2n: ");
   fflush(stdin);
   scanf("%i", &opcion);
   switch (opcion) {
          case 1:
               obtenerAnioOK=FALSE;   // Hacer antes la opción 1 antes que la 3
               tipoAnioOK=FALSE;     // Hacer antes la opción 2 antes que la 3
               año = obtenerAnio();   // Guardaremos en "any" lo que guarde la función obtenirAny
               break;

          case 2:
               if (!tipoAnio(año)) printf("\nEl a\xA4o %i no tiene ninguna cifra repetida\n", año); // Mientras tipusAny no sea igual a "anyo"
               else printf("\nEl a\xA4o %i tiene cifras repetidas", año);
               break;

          case 3:
               if ((obtenerAnioOK)&&(tipoAnioOK)){ // Después de hacerse la opción 1 y 2 TRUE
                                printf("\nHay %i secuencias de a\xA4o con cifras no repetidas.", calcularSec(año));
               for (i=0;i<calcularSec(año);i++)
                  printf ("%d\n",año+i);
               } // Fin if
               else ("\nDe momento no se ha introducido el a\xA4o o el tipo de anyo\n");
               break;

          case 0:
               break;

          default:
                  printf("ERROR, opci\xA2n incorrecta!\n");
                  break;
   } // Fin switch
   getch();
 }while (opcion != 0);
 system("pause");
 return 0;
} // Fin main


/************* OBTENER año ***********/
int obtenerAnio(){
   int año; // Variable "año" para guardar la fecha introducida
   do{
       system("cls");
       printf("\tINTRODUCE EL a\xA4o\n");
       printf("\nIntroduce un n\xA3mero de cuatro d\xA1gitos entre 1000 y 9999: ");
       fflush(stdin);
       scanf("%i", &año); // Guardar
       }while ((año<1000)||(año>9999)); // Hacer mientras anyo sea + pequeño de 1000 y + grande de 9999

              obtenerAnioOK=TRUE; // FLAG TRUE
       return año;
} // Fin


/*** TIPO año ***/
int tipoAnio(int año){
   int cifras[10] = {0,0,0,0,0,0,0,0,0,0}; // Todas las cifras valen 0 por defecto
   int i=0, x=0, cont=0;

   while (año > 0) {
         x = año % 10;     // Se queda con la resta, la cifra a tratar
         año = año / 10;   // Quita el ultimo digito a la cifra
         cifras[x] = 1;     // Asigna 1 a la posició de la cifra tratada
   } // Fin while

   for (i=0; i<10; i++) cont = cont + cifras[i];

   tipoAnioOK=TRUE; // FLAG TRUE

   if (cont == 4) return 0; // No hay ninguna cifra repetida
   else return 1; // Alguna cifra esta repetida
} // Fin

/*** CALCULAR SECUENCIA ***/
int calcularSec (int año){
   int cont=0;

   while (!tipoAnio(año++)) cont++; // Mientras tipusAnio pasando any+1, hasta que la función retorne 0, contador ++
                                    // Osea, retornara el número de veces que se ha ejecutado la función tipuusAny hasta dar 0 pasando una variable +1 todo el rato
   return cont;
} // Fin


Sorry por la confusión.

¿Pero qué diablos pasa?, yo no tengo puesto año sino a n i o, observarlo  escribiendo lo anterior seguido en un mensaje y lo veréis, lo cambia el muy cabrito

Citar

año=A n i o



El programa cambia automáticamente "a n i o" por año, hacer si no la prueba y picar  en citar para ver el original y veréis que no está puesto año o escribirlo en un mensaje y pre visualizar. Menuda pifia

Probaré con anyo ...si, éste no lo cambia.

Entonces no me había confundido de código y el que había puesto era el mio sólo que cambiado por el procesador de texto que usamos al escribir los mensajes .....$#@?'¡~# diablos rayos y centellas, que pifia de procesador.

Pues vamos allá lo cambio todo y listo, pero conste, y me repito porque esto es muy fuerte, que es una pifia de este procesador de texto que usamos para escribir los mensajes:


Código (cpp) [Seleccionar]

/** Determinar a partir de un año que se introduce
si no tiene cifras repetidas y los años siguientes
hasta encontrar otro año donde se repita algún dígito **/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <conio.h>

#define FALSE 0
#define TRUE 1

/******* Declaracion de funcions ******/
int obtenerAnio();
int tipoAnio(int Anyo);
int calcularSec (int Anyo);

/******* Variables globales ******/
int obtenerAnioOK=FALSE;  // Para NO acceder a la opción 3 antes
int tipoAnioOK=FALSE;    // Para NO acceder a la opción 3 antes

/* MENU PRINCIPAL */
int main(void){
 int opcion=0,i;
 int anyo; // Variable año utilizada en las funciones
 do{
   system("cls");
   printf("\n1.- Obtener a\xA4o");
   printf("\n2.- Tipo de a\xA4o");
   printf("\n3.- Calcular secuencia");
   printf("\n0.- Salir\n\n");
   printf("\nIntroduce una opci\xA2n: ");
   fflush(stdin);
   scanf("%i", &opcion);
   switch (opcion) {
          case 1:
               obtenerAnioOK=FALSE;   // Hacer antes la opción 1 antes que la 3
               tipoAnioOK=FALSE;     // Hacer antes la opción 2 antes que la 3
               anyo = obtenerAnio();   // Guardaremos en "any" lo que guarde la función obtenirAny
               break;

          case 2:
               if (!tipoAnio(anyo)) printf("\nEl a\xA4o %i no tiene ninguna cifra repetida\n", anyo); // Mientras tipusAny no sea igual a "anyo"
               else printf("\nEl a\xA4o %i tiene cifras repetidas", anyo);
               break;

          case 3:
               if ((obtenerAnioOK)&&(tipoAnioOK)){ // Después de hacerse la opción 1 y 2 TRUE
                                printf("\nHay %i secuencias de a\xA4o con cifras no repetidas.", calcularSec(anyo));
               for (i=0;i<calcularSec(anyo);i++)
                  printf ("%d\n",anyo+i);
               } // Fin if
               else ("\nDe momento no se ha introducido el a\xA4o o el tipo de anyo\n");
               break;

          case 0:
               break;

          default:
                  printf("ERROR, opci\xA2n incorrecta!\n");
                  break;
   } // Fin switch
   getch();
 }while (opcion != 0);
 system("pause");
 return 0;
} // Fin main


/************* OBTENER año ***********/
int obtenerAnio(){
   int anyo; // Variable "año" para guardar la fecha introducida
   do{
       system("cls");
       printf("\tINTRODUCE EL a\xA4o\n");
       printf("\nIntroduce un n\xA3mero de cuatro d\xA1gitos entre 1000 y 9999: ");
       fflush(stdin);
       scanf("%i", &anyo); // Guardar
       }while ((anyo<1000)||(anyo>9999)); // Hacer mientras anyo sea + pequeño de 1000 y + grande de 9999

              obtenerAnioOK=TRUE; // FLAG TRUE
       return anyo;
} // Fin


/*** TIPO año ***/
int tipoAnio(int Anyo){
   int cifras[10] = {0,0,0,0,0,0,0,0,0,0}; // Todas las cifras valen 0 por defecto
   int i=0, x=0, cont=0;

   while (Anyo > 0) {
         x = Anyo % 10;     // Se queda con la resta, la cifra a tratar
         Anyo = Anyo / 10;   // Quita el ultimo digito a la cifra
         cifras[x] = 1;     // Asigna 1 a la posició de la cifra tratada
   } // Fin while

   for (i=0; i<10; i++) cont = cont + cifras[i];

   tipoAnioOK=TRUE; // FLAG TRUE

   if (cont == 4) return 0; // No hay ninguna cifra repetida
   else return 1; // Alguna cifra esta repetida
} // Fin

/*** CALCULAR SECUENCIA ***/
int calcularSec (int Anyo){
   int cont=0;

   while (!tipoAnio(Anyo++)) cont++; // Mientras tipusAnio pasando any+1, hasta que la función retorne 0, contador ++
                                    // Osea, retornara el número de veces que se ha ejecutado la función tipuusAny hasta dar 0 pasando una variable +1 todo el rato
   return cont;
} // Fin


Ahora no cambia nada. Pero es alucinante lo que puede uno currar para que un mi**da de procesador de texto te tire al suelo el curro que te has pegado.

Sorry,sorry..
....

¡¡¡¡ Saluditos! ..... !!!!


#324
Cita de: yoel_alejandro en 13 Marzo 2014, 18:12 PM
.........................................................................................

Un buen proyecto sería construir una función "múltiple", con un argumento option adicional que especifique el tipo de interpretación que será hecho (omitiendo o no los espacios, diferenciando mayúsculas, etc). Así sería más flexible, amplio y práctico  :D.

Muy buena idea amigo yoel_alejandro, Ya hay algo en lo que trabajar. :)

¡¡¡¡ Saluditos! ..... !!!!


#325
Cita de: javiepe en 13 Marzo 2014, 15:06 PM
Gracias, ya me ha quedado claro lo de las lecturas del scanf.

Respecto a fgets aún hay un matiz que no me queda claro. En el ejemplo que pones, ¿se guarda el fichero por completo en "char linea"? Es decir, ¿linea(1) sería la primera línea del fichero, linea(2) la segunda, y así sucesivamente? Planteado de otra forma; ¿cuando hacemos fgets lee el fichero?

Saludos!

El caso que te pongo, con fgets después del while, leería línea a línea el fichero.

¡¡¡¡ Saluditos! ..... !!!!




#326
Cita de: javiepe en 13 Marzo 2014, 10:43 AM
..............................................................................
no sé qué significan esos ==1, ==2.... que ponéis después de las funciones scanf,
........................................................................................

Representan el número de lecturas que "debe" realizar el sscanf para que este efectivamente haga la lectura. Está referido al número de %d y %f que hay en el sscanf.

Cita de: javiepe en 13 Marzo 2014, 10:43 AM
..............................................................................
Además, también tengo dudas en cómo almacenar el fichero en el vector "linea" utilizando fgets para poder después procesarlo con sscanf.
........................................................................................


Por ejemplo:

Código (cpp) [Seleccionar]

...........................................
char linea[81];
............................................
fgets(linea, 80, fichero);
........................................


¡¡¡¡ Saluditos! ..... !!!!


#327
Sorry!, creo que equivoqué la respuesta.

++Sorry!.


¡¡¡¡ Saluditos! ..... !!!!


#328

No tengo muy seguro que sea tuyo el código  :rolleyes: tiene errores como el uso de la ñ en las variables, faltan un par de librerías, conio para el getch y stdlib para el system.

Pero no seré yo quien prejuzgue si es así o no.

En cualquier caso te he corregido los errores para que primero compile, cosa que no hacia, y de paso te he añadido el uso de los acentos y de la ñ en los printf, no así en las variables ya que ahí no se pueden usar .... y como no, la secuencia de años que pedias:


Citar

1.- Obtener año
2.- Tipo de año
3.- Calcular secuencia
0.- Salir


Introduce una opción: 3

Hay 7 secuencias de año con cifras no repetidas.1234
1235
1236
1237
1238
1239
1240


Código (cpp) [Seleccionar]

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

#define FALSE 0
#define TRUE 1

/******* Declaracion de funcions ******/
int obtenerAnio();
int tipoAnio(int año);
int calcularSec (int año);

/******* Variables globales ******/
int obtenerAnioOK=FALSE;  // Para NO acceder a la opción 3 antes
int tipoAnioOK=FALSE;    // Para NO acceder a la opción 3 antes

/* MENU PRINCIPAL */
int main(void){
  int opcion=0,i;
  int año; // Variable año utilizada en las funciones
  do{
    system("cls");
    printf("\n1.- Obtener a\xA4o");
    printf("\n2.- Tipo de a\xA4o");
    printf("\n3.- Calcular secuencia");
    printf("\n0.- Salir\n\n");
    printf("\nIntroduce una opci\xA2n: ");
    fflush(stdin);
    scanf("%i", &opcion);
    switch (opcion) {
           case 1:
                obtenerAnioOK=FALSE;   // Hacer antes la opción 1 antes que la 3
                tipoAnioOK=FALSE;     // Hacer antes la opción 2 antes que la 3
                año = obtenerAnio();   // Guardaremos en "any" lo que guarde la función obtenirAny
                break;

           case 2:
                if (!tipoAnio(año)) printf("\nEl a\xA4o %i no tiene ninguna cifra repetida\n", año); // Mientras tipusAny no sea igual a "anyo"
                else printf("\nEl a\xA4o %i tiene cifras repetidas", año);
                break;

           case 3:
                if ((obtenerAnioOK)&&(tipoAnioOK)){ // Después de hacerse la opción 1 y 2 TRUE
                                 printf("\nHay %i secuencias de a\xA4o con cifras no repetidas.", calcularSec(año));
                for (i=0;i<calcularSec(año);i++)
                   printf ("%d\n",año+i);
                } // Fin if
                else ("\nDe momento no se ha introducido el a\xA4o o el tipo de anyo\n");
                break;

           case 0:
                break;

           default:
                   printf("ERROR, opci\xA2n incorrecta!\n");
                   break;
    } // Fin switch
    getch();
  }while (opcion != 0);
  system("pause");
  return 0;
} // Fin main


/************* OBTENER año ***********/
int obtenerAnio(){
    int año; // Variable "año" para guardar la fecha introducida
    do{
        system("cls");
        printf("\tINTRODUCE EL a\xA4o\n");
        printf("\nIntroduce un n\xA3mero de cuatro d\xA1gitos entre 1000 y 9999: ");
        fflush(stdin);
        scanf("%i", &año); // Guardar
        }while ((año<1000)||(año>9999)); // Hacer mientras anyo sea + pequeño de 1000 y + grande de 9999

               obtenerAnioOK=TRUE; // FLAG TRUE
        return año;
} // Fin


/*** TIPO año ***/
int tipoAnio(int año){
    int cifras[10] = {0,0,0,0,0,0,0,0,0,0}; // Todas las cifras valen 0 por defecto
    int i=0, x=0, cont=0;

    while (año > 0) {
          x = año % 10;     // Se queda con la resta, la cifra a tratar
          año = año / 10;   // Quita el ultimo digito a la cifra
          cifras[x] = 1;     // Asigna 1 a la posició de la cifra tratada
    } // Fin while

    for (i=0; i<10; i++) cont = cont + cifras[i];

    tipoAnioOK=TRUE; // FLAG TRUE

    if (cont == 4) return 0; // No hay ninguna cifra repetida
    else return 1; // Alguna cifra esta repetida
} // Fin

/*** CALCULAR SECUENCIA ***/
int calcularSec (int año){
    int cont=0;

    while (!tipoAnio(año++)) cont++; // Mientras tipusAnio pasando any+1, hasta que la función retorne 0, contador ++
                                     // Osea, retornara el número de veces que se ha ejecutado la función tipuusAny hasta dar 0 pasando una variable +1 todo el rato
    return cont;
} // Fin


¡¡¡¡ Saluditos! ..... !!!!



#329

Creo que me he perdido algo en este tema. ¿Por qué no guardas directamente el número con fprinf?.

En fin, supongo que es un ejercicio en el que te proponen que lo hagas dígito a dígito. En tal caso tan solo tienes que voltear el número que te sale de entrada en la función, para lo cual uso una nueva variable aue almacene el número al revés, para luego voltearlo:


Código (cpp) [Seleccionar]

#include <iostream>
#include <cstdio>
#include <cstdlib>
#define MAX 40

using namespace std;

void escribirNumero(long long int numero,FILE *fd);

int main()
{
    long long int numero;
    FILE *fd;
    int digito,x;
    if((fd = fopen("Practica1.txt","w"))!= NULL)
    {
        cout << "Dame el numero: " << endl;
        cin >> numero;
        cout << "Que digito desea buscar? " << endl;
        cin >> digito;
        escribirNumero(numero,fd);
    }
    else
       cout <<"No se pudo crear archivo<<endl";
    return 0;
}

void escribirNumero(long long int numero, FILE *fd)
{
long long int cociente,residuo=0,num=0;
for(cociente = numero; cociente != 0; cociente = cociente/10)
{
  residuo = cociente % 10;
  num=num*10+residuo*10;
}
num/=10;
residuo=0;
for(cociente = num; cociente != 0; cociente = cociente/10)
  {
  residuo = cociente % 10;
  residuo += 48; /* convertido a ASCII */
  fwrite( &residuo, sizeof(char), 1, fd);
  /** o en lugar de fwrite puedes usar fprinf sin el '48'**/
  ///fprintf(fd,"%lld",residuo);
}
}


Y aunque vengas del C, al menos pon las librerías con una c delante y sin el .h. Por lo menos que parezca que sabes C++, aunque también deberías usar als librerías y funciones propias del C++ para el tratamiento de ficheros. :)

El código que te planteo es sólo una opción entre otras y sin espacios entre los dígitos.


¡¡¡¡ Saluditos! ..... !!!!


#330
Para cuando postees el código elige las etiquetas GeSHi y toma la C++ y en medio de las etiquetas Code que aparecen "pegas" tu código. Al no hacerlo de esta manera parte del código no sale correcta, especialmente las matrices.

Supongo que lo que querías poner era simplemente:


Código (cpp) [Seleccionar]

#include <stdio.h>
#include <conio.h>

int main()
{
   char cadena[] = "Hola\ta todos        que\ttal estais?";
   int  i;
   printf("la cadena con tabs: %s",cadena);
   for(i=0; cadena [i]; i++)
   if(cadena [i] =='\t')
     cadena [i] =' ';
   printf("\nlo que tiene ahora la cadena: %s",cadena);
   getch();
   return 0;
}


Y la salida para tu código es:

Citar

la cadena con tabs: Hola        a todos        que      tal estais?
lo que tiene ahora la cadena: Hola a todos        que tal estais?



Mientras que la salid del código de naderST:

Citar

Hola a todos que tal estais?
Process returned 0 (0x0)  


Una sutil diferencia.

¡¡¡¡ Saluditos! ..... !!!!