/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

problema con devc++

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
pablitox777



Registrado: 29 Jun 2012
Mensajes: 8

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 29/06/2012 6:20 pm
Título:

xDD te iva a decir eso....
Volver arriba
pablitox777



Registrado: 29 Jun 2012
Mensajes: 8

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com