|
121
|
Programación / Programación C/C++ / problema con do-while
|
en: 31 Octubre 2013, 21:01 pm
|
Saludos tengo que crear un programa que pida al usuario pares de números enteros y escriba su suma (con el formato "20 + 3 = 23")en pantalla y en un fichero llamado "sumas.txt", que se encontrará en un subdirectorio llamado "resultados". Cada vez que se ejecute el programa deberá añadir los nuevos resultados a continuación de los resultados anteriores y el codigo es el siguiente y compila correctamente: #include <stdio.h> #include <stdlib.h> #define TAM 10 /* Crear un programa que pida al usuario pares de números enteros y escriba su suma (con el formato "20 + 3 = 23") en pantalla y en un fichero llamado "sumas.txt", que se encontrará en un subdirectorio llamado "resultados". Cada vez que se ejecute el programa deberá añadir los nuevos resultados a continuación de los resultados anteriores. */ int main() { FILE *fd; int numero1,numero2,suma,continuar = 1; char respuesta,cad[TAM]; if((fd = fopen("F:\\resultados\\sumas.txt","a+"))!= NULL ) {*/ do { printf("Dame primer numero: "); printf("Dame segundo numero: "); suma = numero1+numero2; printf("%d + %d = %d",numero1 ,numero2 ,suma ); printf("\n\nDesea hacer otra suma? (S/N)\n"); if(respuesta == 'N') continuar = 0; }while(continuar); } else printf("No se pudo crear archivo\n"); return 0; }
el problema es que si a la hora de hacerme la pregunta Desea hacer otra suma, yo quiero validar que la respuesta sea solamente o S o N, y si la respuesta es otro caracter que haga un while preguntandome si quiero otra suma hasta que el caracter sea valido, para esto le hice la siguiente modificacion al codigo pero el dowhile interior nunca se sale y no entiendo por que #include <stdio.h> #include <stdlib.h> #define TAM 10 /* Crear un programa que pida al usuario pares de números enteros y escriba su suma (con el formato "20 + 3 = 23") en pantalla y en un fichero llamado "sumas.txt", que se encontrará en un subdirectorio llamado "resultados". Cada vez que se ejecute el programa deberá añadir los nuevos resultados a continuación de los resultados anteriores. */ int main() { FILE *fd; int numero1,numero2,suma,continuar = 1; char respuesta,cad[TAM]; if((fd = fopen("F:\\resultados\\sumas.txt","a+"))!= NULL ) { do { printf("Dame primer numero: "); printf("Dame segundo numero: "); suma = numero1+numero2; printf("%d + %d = %d",numero1 ,numero2 ,suma ); do { printf("\n\nDesea hacer otra suma? (S/N)\n"); }while((respuesta != 'S')||(respuesta != 'N')); if(respuesta == 'N') continuar = 0; }while(continuar); } else printf("No se pudo crear archivo\n"); return 0; }
de antemano gracias
|
|
|
122
|
Programación / Programación C/C++ / agenda y archivos
|
en: 28 Octubre 2013, 23:10 pm
|
Saludos, tengo que crear un programa que me cree Una agenda que maneje los siguientes datos: nombre, dirección, tlf móvil, email, y día, mes y año de nacimiento, Se podra añadir un dato nuevo, visualizar los nombres de las fichas existentes, o mostrar los datos pero hay una parte que dice: leerá los datos de un fichero llamado “agenda.dat” (si existe). Al terminar, guardará todos los datos en ese fichero. y es lo que no entiendo bien que quiere decir, como voy a leer datos de un fichero si me esta diciendo que guarde todos los datos en el fichero al final y en la parte que dice añadir un dato nuevo, se refiere a agregar una Persona a la agenda con su nombre,direccion,tel... o a inventar un nuevo dato como edad o algo asi?? #include <stdlib.h> #include <string.h> #define AGREGAR 1 #define VISUALIZAR 2 #define MOSTRAR 3 #define SALIR 4 #define TAM 3 #define MAX 45 typedef struct datos { char nombre[MAX]; char direccion[MAX]; char tlf_movil[MAX]; char email[MAX];/* Fecha fechaNacimiento;*/ }Agenda; void agregar_Persona(Agenda persona[],int i); void visualizar_Nombres(Agenda persona[],int i); void mostrar_datos(char nombreBuscar[],Agenda persona[],int i); int main() { int i = 0,continuar = 1,opcion; char nombreBuscar[MAX],op[TAM]; FILE *fd; Agenda persona[TAM];/* if((fd = fopen("F:\\agenda.dat","w"))!= NULL) {*/ do { printf("1)Agregar Registro\n"); printf("2)Visualizar Nombres\n"); switch(opcion) { case AGREGAR: if(i < TAM) { agregar_Persona(persona,i); i++; } else printf("No se permiten agregar mas de 100 registros"); break; case VISUALIZAR: visualizar_Nombres(persona,i); break; case MOSTRAR: printf("Dame el nombre de la persona a mostrar: "); fgets(nombreBuscar ,MAX ,stdin ); mostrar_datos(nombreBuscar,persona,i); break; case SALIR: continuar = 0; break; default : printf("Opcion invalida!"); } if(continuar) { } }while(continuar); /* }*/ return 0; } void agregar_Persona(Agenda persona[],int i) { char cadena[MAX]; fgets(persona [i ]. nombre,MAX ,stdin ); fgets(persona [i ]. direccion,MAX ,stdin ); printf("Dame telefono movil:\n"); fgets(persona [i ]. tlf_movil,MAX ,stdin ); fgets(persona [i ]. email,MAX ,stdin ); } void visualizar_Nombres(Agenda persona[],int i) { int j; for(j = 0;j < i;j++) printf("%s\n",persona [j ]. nombre); } void mostrar_datos(char nombreBuscar[],Agenda persona[],int i) { int j; for(j = 0;j < i;j++) { if((strcmp(nombreBuscar ,persona [j ]. nombre))== NULL ) { printf("%s\n",persona [j ]. nombre); printf("%s\n",persona [j ]. direccion); printf("%s\n",persona [j ]. tlf_movil); printf("%s\n",persona [j ]. email); } } }
|
|
|
123
|
Programación / Programación C/C++ / Libreria de grafos
|
en: 24 Octubre 2013, 01:19 am
|
Saludos
Tengo que hacer un programa que me dice que cree un grafos simple( no permite mas de una arista entre dos vertices), que sean dirigido o no dirigido y que puede agregar o eliminar aristas y vertices, pero la verdad no tengo muy claro si debo de hacerlo con un arreglo de listas que es una opcion que me dijo el profesor que podia hacer, pero yo la veo muy dificil porque nunca he hecho un arreglo de listas, y tampoco se si tengo que pedirle el numero de vertices y de aristas al inicio del programa, si tengo que verificar que no este vacio el grafo antes de eliminar un vertice,si los vertices los represento como nodos las aristas tambien las tengo que crear como nodos??,puedo crear una arista aun si no tengo vertices?? esto lo tengo que validar tambien?? les agredeceria que me dieran algunas sugerencias de como empezarlo porque no tengo ni la mas minima idea
gracias
|
|
|
124
|
Programación / Programación C/C++ / recorrer archivo binario
|
en: 18 Octubre 2013, 23:22 pm
|
Saludos
Si tengo un arreglo de estructuras(o de registros), los cuales guardo en un archivo binario, para yo poder recorrer registro por registro(tomando en cuenta que tienen diferente longitud) en un archivo binario tengo que hacerlo secuencialmente o sea caracter por caracter, o puedo ir saltando de registro en registro hasta encontrar el que busco?? tengo que poner delimitadores entre cada registro para saber donde empieza uno y donde termina otro??
gracias
|
|
|
125
|
Programación / Programación C/C++ / sustituir scanf
|
en: 12 Octubre 2013, 04:29 am
|
Saludos Tengo el siguiente codigo en el que le ingresas datos a una estructura x, el programa compila correctamente pero tengo una duda, tengo entendido que cuando alternas una funcion como fgets() y scanf() te da problemas, y para esto le puse un ciclo while con un getchar(). Pero queria saber si podia sustituir el scanf por otra funcion que no me provoque basura en el buffer, para asi no tener que ponerle el while(getchar()!= '\n') #include <stdio.h> #include <stdlib.h> #define TAM 20 #define MAX 10 typedef struct datos { char nombre[TAM]; int edad; char ciudad_residencia[TAM]; }Persona; void entrada(Persona *p); int main() { Persona p; int i; for(i = 0;i < 10;i++) entrada(&p); return 0; } void entrada(Persona *p) { fgets(p ->nombre ,TAM ,stdin ); printf("Dame ciudad de residencia:\n"); fgets(p ->ciudad_residencia ,TAM ,stdin ); }
gracias
|
|
|
126
|
Programación / Programación C/C++ / problema con strcmp
|
en: 9 Octubre 2013, 21:54 pm
|
Saludos, tengo el siguiente codigo que me dice que tengo que ingresar nombres a un archivo de texto y en cuanto el usuario teclee la palabra fin termine, el problema es que el codigo no se detiene cuando le ingreso la palabra fin y no entiendo por que #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 10 /* Crea un programa que vaya leyendo las frases que el usuario teclea, y las guarde en un fichero de texto, llamado “registroDeUsuario.txt”. Terminará cuando la frase introducida sea "fin"(esa frase no deberá guardarse en el fichero). */ int main() { FILE *fd; int i = 0,continuar = 1; char nombre[TAM],cad[]= "fin",*p; if((fd = fopen("F:\\registroDeUsuario.txt","w"))!= NULL ) { do { printf("Dame el nombre %d:\n",i ++); if((p = strchr(nombre ,'\n'))!=NULL ) *p = '\0'; continuar = 1; }while(continuar); } else printf("No se pudo abrir archivo"); return 0; }
de antemano gracias
ya vi donde me equivoque, en la bandera continuar era 0 en vez de uno
|
|
|
127
|
Foros Generales / Dudas Generales / Exception en codeblocks
|
en: 6 Octubre 2013, 05:46 am
|
saludos
Tengo un grave problema, no puedo abrir el codeblocks, cada vez que lo intento me aparece un mensaje que dice:
An exception has been raised, the application encountered an error at C:CB1211.... on line 237
The error message is
TinyXML error: Error document empty. ....... ...... a que se debe esto? que debo hacer??
gracias
|
|
|
128
|
Programación / Programación C/C++ / compresor/descompresor de archivos
|
en: 3 Octubre 2013, 20:22 pm
|
Saludos Tengo el siguiente codigo que me tiene que comprimir un archivo cuando aparecen las siguientes palabras: de , para , con , desde , al ,y se tienen que sustituir con los siguientes signos: *, /, + ,- ,@ y escribir el texto comprimido(con las sustituciones) en otro archivo. El programa compila correctamente y me hace lo que le pido pero tiene algunos fallos, por ejemplo cuando utilizo sizeof() en unos for para sacar el numero de elementos me aparecen warnings, y tambien por ejemplo, yo se que el tamanio del texto que voy a comprimir es de 96 caracteres, por eso lo puse asi en los arreglos, pero si mi maestra quiere que me abra un archivo mas grande o mas chico no se si funcionara, como puedo corregir esto??como puedo hacer que funcione para cualquien tamanio de texto??ahh!! y otra duda, mi profesora nos dijo algo de que no queria que el archivo se sobreescribiera y que checaramos eso, no se bien a que se referia si alguien me pudiera ayudar tambien con eso se lo agradeceria #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 char ver_signos(char signo[],int i); char *comprimir_archivo(char signo[],char arreglo[]); int main() { int i,tam,ini; char nombre[MAX],archivo[MAX],arreglo[96],*palabra,*producto,car,opcion,*ptr,sig; char *p[]={" de "," para "," con "," desde "," al "}; char signo[]={'*','/','+','-','@'}; FILE *fd,*ap; printf("Dame el nombre del archivo: "); if((ptr = strchr(nombre ,'\n')) != NULL ) *ptr = '\0'; sprintf(archivo ,"F:\\%s.txt",nombre ); ap = fopen("F:\\Archivo_producto.txt","w"); if((fd = fopen(archivo ,"r"))!= NULL ) { printf("a) Comprimir archivo\n"); printf("b) Descomprimir archivo\n"); { case 'A':case'a': for(i=0;i < 5;i++) { while((car = fgetc(fd ))!= EOF ) { if(car == ' ') { palabra = (char*)malloc((tam +1)*sizeof(char)); if((strcmp(palabra ,p [i ]))== 0) { sig = ver_signos(signo,i); arreglo[ini-1] = sig; } } } } producto = comprimir_archivo(signo,arreglo); break; // me gustaria ponerle aqui el fwrite(arreglo,sizeof(char),strlen(arreglo),ap); case 'B': case 'b':/* for(i = 0;i < sizeof(signo);i++) { while((car = fgetc(ap))) } break;*/ default: printf("La opcion no existe\n"); } } else printf("No se pudo abrir el archivo"); return 0; } char ver_signos(char signo[],int i) { int j; for(j = 0;j < sizeof(signo);j++)// warning por usar sizeof { if(j == i) return(signo[j]); } } char *comprimir_archivo(char signo[],char arreglo[]) { int tam[]={4,6,5,7,4},i,j,k; char a[96]; for(i=0; i < sizeof(signo);i++)//warning por usar sizeof { for(j = 0,k = 0;j < 96;k++) { if(arreglo[j] == signo[i]) { a[k] = arreglo[j]; j = j+tam[i]; } else { a[k] = arreglo[j]; j++; } } } return arreglo; }
Estas son las unicas fallas que le encontre al codigo, alomejor hay mas que no he notado, las sugerencias para hacerlo mas eficientes son bienvenidas de antemano gracias
|
|
|
129
|
Programación / Programación C/C++ / problema con archivos
|
en: 1 Octubre 2013, 20:22 pm
|
Saludos tengo el siguiente programa que me lee un archivo que tiene nombres de personas separados por una coma y me pide que le ingrese un nombre y al final me tiene que imprimir el numero de veces que aparece ese nombre en el archivo solo que no me imprime la cantidad correcta #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 10 int main() { FILE *fd; int i = 0,j = 0,tam; char captura[TAM],*cadena,*nombre,car; if((fd = fopen("F:\\nombre_archivo.txt","r"))!= NULL ) { printf("Capture nombre a buscar: "); fgets(captura ,TAM ,stdin ); nombre = (char*)malloc((tam +1)*sizeof(char)); cadena = (char*)malloc((tam +1)*sizeof(char)); while((car = fgetc(fd ))!=EOF ) { while((car = fgetc(fd ))!= ',') { cadena[j] = car; j++; } j = 0; if((strcmp(cadena ,nombre )) == 0) i++; } printf("El nombre %s se encuentra %d veces en el archivo\n",nombre ,i ); } else printf("No se pudo abrir archivo"); return 0; }
gracias de antemano
|
|
|
130
|
Programación / ASM / traducir ensamblador a codigo maquina
|
en: 26 Septiembre 2013, 23:42 pm
|
Saludos tengo que sacar el codigo maquina de este programa en ensamblador
pero tengo una instruccion que no entiendo como va
0806 BCD0 DS.B 1 .... .... .... E017 ?????? lbeq FIN0 ; digito BCD0 .... .... ...
FIN0 stab BCD0
pero no se cual es el codigo correcto que va en los ????? por que por un lado lbeq tiene codigo maquina 18 27 qq rr y stab tiene codigo maquina 7b hh ll, yo supuse que como al lado de lbeq tiene FIN0 pues que tenia que brincarme hasta esa intruccion. ya intente leer manuales de esto pero no los comprendo, si alguien me pudiera ayudar se lo agradeceria mucho
|
|
|
|
|
|
|