| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
pablitox777
Registrado: 29 Jun 2012 Mensajes: 8
| Publicado: 29/06/2012 3:17 pm | | | Título: problema con devc++ |
| buenas, este es mi primer mensaje, asi que de paso me presento
tengo un pequeño problema con este programa que hice, el cual saca de un libro completo todos los caracteres ascii
#include <iostream.h> #include <stdio.h> #include <stdlib.h> struct totalchar {char caracter; int cant; float prob;}ASCII[256];//arreglo de estructura que contiene el nombre del caracter + cantidad de veces que aparece + la probabilidad de ocurrencia //ASCII representa una variable global void inicio(totalchar y[]){ //inicia arreglo de caracteres y 0 en cantidad, y 0.0 en probabilidad int i=0; for(i=0;i<255;i++){ y[i].caracter=i; y[i].cant=0; y[i].prob=0.0; } }//de inicio
void armatabla (FILE* f,totalchar y[]){//arma la tabla con los valores del texto ingresado int i,cont,totalchar=0; char c; while ((c=(getc(f)))!=EOF){ //hasta que no llegue al fin de archivo, va a sacar caracteres y los va a ir colocando en el arreglo ASCII en la pos. correspondiente usando la f buscar cont=buscar(c); ASCII[cont].cant++; totalchar++;//contiene la cantidad total de caracteres del texto } for (i=0;i<255;i++){ASCII[i].prob = ASCII[i].cant / totalchar ;}//asigna probabilidades de ocurrencia de cada caracter en la tabla
} //de armatabla
int main() {//programa principal int var=0,cont=0,totalchar=0,i; char d,op,cop,p,h,c,archivo[70]; FILE *fp; inicio(ASCII); cout << "ingrese la ruta del archivo (a modo de ejemplo puede ingresar C:\TLOR.txt):\n"; cin>>archivo; system ("cls"); if ((fp=fopen(archivo,"r"))==NULL){ cout << "no se pudo abrir el archivo\n"; } armatabla (fp, ASCII); fclose(fp); }
resulta que mi problema es que no me deja abrir el archivo, no se porque motivo, causa, razon, o circunstancia siempre sale que "no se pudo abrir el archivo\n" me da error de acceso a memoria invalido
de paso uso Windows 7 |
| | Volver arriba | |  | durasno
Registrado: 22 Ene 2012 Mensajes: 117
| Publicado: 29/06/2012 4:11 pm | | | Título: |
| Hola! q raro lo compile y pude abrir el archivo con la ruta C:\TLOR.txt. Para que evitar el warning en el cout pone doble barra invertida \\:
| Código: | cout << "ingrese la ruta del archivo (a modo de ejemplo puede ingresar C:\\TLOR.txt):\n"; |
Y con respecto a "error de acceso a memoria invalido" es porque despues de no poder abrir el archivo, vos llamas igual a la funcion armatabla() y le pasas fp y en esa funcion estas intentando acceder a algo q no fue abierto.. En el if debes poner algo asi:
| Código: | if ((fp=fopen(archivo,"r"))==NULL){ cout << "no se pudo abrir el archivo\n"; exit(1); // para evitar que continue con lo demas } |
Saludos |
| | Volver arriba | |  | pablitox777
Registrado: 29 Jun 2012 Mensajes: 8
| Publicado: 29/06/2012 4:19 pm | | | Título: |
| es bastante raro el problema
ya resolvi lo que me dijiste, pero igual no me deja accederlo
tengo windows 7, sera que por motivos de seguridad no me deja entrar al archivo?
edito: ya resolvi el problema, era una idiotez tremenda, me equivoque en poner el nombre nomas.
disculpen las molestias, pueden cerrar el tema.
gracias de antemano! |
| | Volver arriba | |  | | durasno
Registrado: 22 Ene 2012 Mensajes: 117
| Publicado: 29/06/2012 6:20 pm | | | Título: |
| | xDD te iva a decir eso.... |
| | Volver arriba | |  | pablitox777
Registrado: 29 Jun 2012 Mensajes: 8
| Publicado: 01/07/2012 4:01 pm | | | Título: problema otra vez!!! |
| bueeeno, para no perder la costumbre, otro problema!
al programa anterior le adicione una funcion nueva
void muestratabla(totalchar y[]){ int i=0,d=0; char c; while (i<255){ cout << "simbolo "<< i+1 << ":" << y[i].caracter <<"\n"; cout << "cantidad de ocurrencias en el texto del simbolo" << i+1 << ":" << y[i].cant <<"\n"; cout << "probabilidad segun cantidad total de caracteres del simbolo" << i+1 << ":" << y[i].prob <<"\n"; cout << "desea seguir viendo? S/N"; cin >> c; system ("cls"); if((c == 's')||(c == 'S')){i++;} else{break;} }//de while }//de muestratabla
lo que hace es mostrar una tabla compuesta de cada uno de los caracteres ASCII del 0 al 255, pero he ahi el problema
al ejecutar el codigo fuente, llega hasta el simbolo 7 y por alguna razon se traba
me da el siguiente error del cmd.exe: The application failed to initialize properly (0x0000142). Click OK to terminate the application.
pero al ejecutar el programa con el ejecutable (el mismo), no causa ningun drama! no me explico |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 7527 Ubicación: Mexico
| Publicado: 01/07/2012 7:35 pm | | | Título: |
| ¿Por favor puedes publicar el código fuente del programa completo?
Un saludo _________________ C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language |
| | Volver arriba | |  | | pablitox777
Registrado: 29 Jun 2012 Mensajes: 8
| Publicado: 01/07/2012 7:44 pm | | | Título: |
| #include <iostream.h> #include <stdio.h> #include <stdlib.h> struct totalchar {char caracter; int cant; double prob;}ASCII[256];//arreglo de estructura que contiene el nombre del caracter + cantidad de veces que aparece + la probabilidad de ocurrencia //ASCII representa una variable global void inicio(totalchar y[]){ //inicia arreglo de caracteres y 0 en cantidad, y 0.0 en probabilidad int i=0; for(i=0;i<255;i++){ y[i].caracter=i; y[i].cant=0; y[i].prob=0.0; } }//de inicio
void armatabla (FILE* f,totalchar y[]){//arma la tabla con los valores del texto ingresado int i,cont,total=0; char c; while ((c=(getc(f)))!=EOF){ //hasta que no llegue al fin de archivo, va a sacar caracteres y los va a ir colocando en el arreglo ASCII en la pos. correspondiente usando la f buscar i=0; while (c != y[i].caracter) {i++;} y[i].cant++; total++;//contiene la cantidad total de caracteres del texto } i=0; while (i<255){ y[i].prob = float((y[i].cant/total)); i++;}//asigna probabilidades de ocurrencia de cada caracter en la tabla
} //de armatabla
void muestratabla(totalchar y[]){ int i=0,d=0; char c; while (i<255){ cout << "simbolo:" << y[i].caracter <<"\n"; cout << "cantidad de ocurrencias en el texto del simbolo:" << y[i].cant <<"\n"; cout << "probabilidad segun cantidad total de caracteres del simbolo:" << y[i].prob <<"\n"; cout << "desea seguir viendo? S/N"; cin >> c; system ("cls"); if((c == 's')||(c == 'S')){i++;} else{break;} }//de while }//de muestratabla int main() {//programa principal int var=0,cont=0,totalchar=0,i; char d,op,cop,p,h,c,archivo[70],resp; FILE *fp; inicio(ASCII); cout << "ingrese la ruta del archivo (a modo de ejemplo puede ingresar C:\\TLOR.txt):\n"; cin>>archivo; system ("cls"); fp=fopen(archivo,"r"); if (fp==NULL){ cout << "no se pudo abrir el archivo\n"; exit(1); } armatabla (fp, ASCII); cout << "¿desea ver la tabla de frecuencias? S/N\n"; cin >> resp; if ((resp == 'S')||(resp == 's')){muestratabla(ASCII);}
fclose(fp); return 0; }
como dato extra en mi computadora (que tiene Windows 7 ultimate) no funciona, en la de mi hermana (que tiene XP) si |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |