|
321
|
Programación / Programación C/C++ / Re: Me crashea el programa
|
en: 13 Marzo 2014, 21:24 pm
|
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:#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 / Programación C/C++ / Re: Problema extraño
|
en: 13 Marzo 2014, 19:33 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
|
Programación / Programación C/C++ / Re: Listar secuencia de años hasta encontrar año con cifra repetida
|
en: 13 Marzo 2014, 19:21 pm
|
UPPSS:::: creo que colqué el código equivocado, no sé incluso si era el original. El que yo había modificado es:/** 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 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:/** 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
|
Programación / Programación C/C++ / Re: Problema con un programa en C (string.h y funciones)
|
en: 13 Marzo 2014, 18:51 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 . Muy buena idea amigo yoel_alejandro, Ya hay algo en lo que trabajar. ¡¡¡¡ Saluditos! ..... !!!!
|
|
|
325
|
Programación / Programación C/C++ / Re: Leer datos de un cierto formato desde un fichero
|
en: 13 Marzo 2014, 15:14 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
|
Programación / Programación C/C++ / Re: Leer datos de un cierto formato desde un fichero
|
en: 13 Marzo 2014, 14:28 pm
|
.............................................................................. 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............................................................................... 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:........................................... char linea[81]; ............................................ fgets(linea, 80, fichero); ........................................
¡¡¡¡ Saluditos! ..... !!!!
|
|
|
328
|
Programación / Programación C/C++ / Re: Listar secuencia de años hasta encontrar año con cifra repetida
|
en: 13 Marzo 2014, 06:46 am
|
No tengo muy seguro que sea tuyo el código 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: 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
#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
|
Programación / Programación C/C++ / Re: problemas con long long int
|
en: 13 Marzo 2014, 06:12 am
|
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:#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
|
Programación / Programación C/C++ / Re: AYUDA Eliminar tabulaciones y \t de cadenas en ANSI C
|
en: 13 Marzo 2014, 05:30 am
|
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:#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: 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: Hola a todos que tal estais? Process returned 0 (0x0)
Una sutil diferencia.¡¡¡¡ Saluditos! ..... !!!!
|
|
|
|
|
|
|