Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Mi programa no llega al main

Estas en el tema de Mi programa no llega al main en el foro de C/C++ en Foros del Web. Hola a todos! Soy nuevo por este foro, he estado buscando un tema relacionado con mi problema, pero no he visto nada, si me despistado ...
  #1 (permalink)  
Antiguo 29/03/2010, 04:58
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Mi programa no llega al main

Hola a todos!

Soy nuevo por este foro, he estado buscando un tema relacionado con mi problema, pero no he visto nada, si me despistado agradecería que me indiquen el link a dicho tema, si existe.

Aquí lanzo mi duda la cual me esta volviendo loco, mi programa funcionaba correctamente, he insertado 2 arrays y 2 procedimientos y me da un error de ejecución, no consigue ni llegar al main, he mirado las declaraciones de los procedimientos la estructura de datos y no veo ningún error en su implementación. He colocado una traza justo entrar en main y no llega a esa traza, no se que hacer para solucionar el problema, ya que es darle a ejecutar y me sale la ventana de windows indicando que se a producido un error..

El compilador que estoy utilizando es Dev C++ 4.9.1.

Espero ayuda, muchas gracias de ante mano.
  #2 (permalink)  
Antiguo 29/03/2010, 08:57
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Mi programa no llega al main

Hola

Si no pones el código es muy difícil que te podamos ayudar.

Saludos
  #3 (permalink)  
Antiguo 29/03/2010, 09:13
Avatar de pmike  
Fecha de Ingreso: marzo-2004
Ubicación: Barcelona
Mensajes: 313
Antigüedad: 20 años
Puntos: 7
Respuesta: Mi programa no llega al main

Pon el código y enseguida veremos el fallo, apostaria que esta en los procedimientos que hiciste
__________________
www.visitaspirata.com
  #4 (permalink)  
Antiguo 29/03/2010, 12:02
Avatar de sadalsuud  
Fecha de Ingreso: marzo-2010
Ubicación: en la casa del duende
Mensajes: 96
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Mi programa no llega al main

jajajjjjaa aquí se le ayuda pero ayudenos a ayudarle hombre xD

un saludo
  #5 (permalink)  
Antiguo 29/03/2010, 13:10
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Respuesta: Mi programa no llega al main

Perdonad ha sido un despiste jajja bueno aquí pego el código, se trata de un programa en el que leo un fichero wave, lo filtro en 3 bandas y escribo cada banda y la señal reconstruida en un fichero nuevo. Como veis al principio del main he colocado una traza a la cual no llega..

Un saludo a todos!Muchas gracias por el interés prestado!!

#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

//Declaración de Constantes
const long MAXMUE = 500000;
const unsigned short MAXCAD= 20;
const unsigned short MAXMEMIIR=2; //Coloco el numero de elementos
const unsigned short MAXCOEFIIR=3;

//Declaración de Estructura de Datos
typedef char TCadena[MAXCAD];

struct TCabWAV{
char RIFF[4];
int tamano;
char WAVE [4];
char fmt [4];
int tamfmt;
short fmtPCM;
short nCanales;
int mueseg;
int bytSeg;
short bytBlq;
short bytMue;
char DATA [4];
int bytData;
};

typedef short TInfo;
typedef float TCoef;

typedef TCoef TMemoriaFiltIIR[MAXMEMIIR];
typedef TCoef TCoefFiltIIR[MAXCOEFIIR];
typedef TInfo TVectorMuestras[MAXMUE];

struct TFileWAV{
TCabWAV cab;
TVectorMuestras datos;
};

//Declaración de Cabeceras de Procedimientos
void LeerFichWave(fstream &mfi, TFileWAV &wave);
void EscribirFichWave(fstream &mfo, TFileWAV &waveout);
void VisualizarCab(const TCabWAV cab);
void InicializacionMemFiltIIR(TMemoriaFiltIIR &mem_in,TMemoriaFiltIIR &mem_out);
void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_out, TMemoriaFiltIIR &mem_in, TMemoriaFiltIIR &mem_out, TCoefFiltIIR &coef_A, TCoefFiltIIR &coef_B);

int main()
{

cout<<"empieza el main.."<<endl;
system("pause");

TCadena nombreout,nombreoutB1, nombreoutB2, nombreoutB3;
TFileWAV wave,waveout,wave_outB1,wave_outB2,wave_outB3;
fstream mfi, mfo,mfoB1, mfoB2, mfoB3;
long i, tamano;
float muestra;
TMemoriaFiltIIR mem_inB1,mem_outB1,mem_inB2,mem_outB2,mem_inB3,mem _outB3;
TCoefFiltIIR coefB1_A, coefB1_B, coefB2_A, coefB2_B, coefB3_A, coefB3_B;

//Abro y Creo el fichero de salida
cout<<"-------- SOFTWARE CRD POR BANDAS ----------"<<endl;
mfi.open("sultans.wav", ios::in |ios::binary);
if(!mfi.is_open()) {
cout<<"Error al abrir el fichero"<<endl;
system("pause");
}else{
cout<<"Por favor, inserte nombre de fichero que desea crear: ";
cin>>nombreout;
mfo.open(nombreout, ios::out|ios::binary);
cout<<"Por favor, inserte nombre de fichero que desea crear Banda1: ";
cin>>nombreoutB1;
mfoB1.open(nombreoutB1, ios::out|ios::binary);
cout<<"Por favor, inserte nombre de fichero que desea crear Banda2: ";
cin>>nombreoutB2;
mfoB2.open(nombreoutB2, ios::out|ios::binary);
cout<<"Por favor, inserte nombre de fichero que desea crear Banda3: ";
cin>>nombreoutB3;
mfoB3.open(nombreoutB3, ios::out|ios::binary);
}

//Leo Fichero de Entrada

LeerFichWave(mfi, wave);

//Visualizo Cabecera
VisualizarCab(wave.cab);

//Inicialización Constantes
InicializacionMemFiltIIR(mem_inB1,mem_outB1);
InicializacionMemFiltIIR(mem_inB2,mem_outB2);
InicializacionMemFiltIIR(mem_inB3,mem_outB3);

coefB1_A[0]=1 ;coefB1_A[1]=-1.9288 ;coefB1_A[2]=0.9313 ; coefB1_B[0]=0.0006 ;coefB1_B[1]=0.0012 ;coefB1_B[2]=0.0006;
coefB2_A[0]=1 ;coefB2_A[1]=-1.6833 ;coefB2_A[2]=0.7006 ; coefB2_B[0]=0.1497 ;coefB2_B[1]=0 ;coefB2_B[2]=-0.1497 ;
coefB3_A[0]=1 ;coefB3_A[1]=-1.4458 ;coefB3_A[2]=0.5690 ; coefB3_B[0]=0.7537 ;coefB3_B[1]=-1.5074 ;coefB3_B[2]=0.7537 ;

//Filtrado IIR 3 Bandas
wave_outB1.cab=wave.cab;
wave_outB2.cab=wave.cab;
wave_outB3.cab=wave.cab;

void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_outB1, TMemoriaFiltIIR &mem_inB1, TMemoriaFiltIIR &mem_outB1, TCoefFiltIIR &coefB1_A, TCoefFiltIIR &coefB1_B);
void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_outB2, TMemoriaFiltIIR &mem_inB2, TMemoriaFiltIIR &mem_outB2, TCoefFiltIIR &coefB2_A, TCoefFiltIIR &coefB2_B);
void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_outB3, TMemoriaFiltIIR &mem_inB3, TMemoriaFiltIIR &mem_outB3, TCoefFiltIIR &coefB3_A, TCoefFiltIIR &coefB3_B);

//Proceso
waveout.cab=wave.cab;
tamano=wave.cab.bytData/2;

for(i=0;i<tamano;i++){
muestra=float(wave_outB1.datos[i]+wave_outB2.datos[i]+wave_outB3.datos[i]);
waveout.datos[i]=short(muestra);
}

//Escribo Fichero de Salida
EscribirFichWave(mfo, waveout);
EscribirFichWave(mfoB1, wave_outB1);
EscribirFichWave(mfoB2, wave_outB2);
EscribirFichWave(mfoB3, wave_outB3);

mfi.close();
mfo.close();
mfoB1.close();
mfoB2.close();
mfoB3.close();

system("pause");
return 0;
}

//Procedimientos Utilizados
void LeerFichWave(fstream &mfi, TFileWAV &wave){
long i,tamano;
TInfo datos;

mfi.read((char *)&wave.cab, sizeof(TCabWAV));

tamano=wave.cab.bytData/2;
for (i=0;i<tamano;i++){
mfi.read((char *)&datos, sizeof(TInfo));
wave.datos[i]=datos;
}

}

void EscribirFichWave( fstream &mfo, TFileWAV &waveout){
long i,tamano;
TInfo dato;

mfo.write((char *)&waveout.cab, sizeof(TCabWAV));

tamano=waveout.cab.bytData/2;
for(i=0;i<tamano;i++){
dato=waveout.datos[i];
mfo.write((char *)&dato, sizeof(TInfo));
}

}

void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_out, TMemoriaFiltIIR &mem_in, TMemoriaFiltIIR &mem_out, TCoefFiltIIR &coef_A, TCoefFiltIIR &coef_B){

long i, tamano;
float muestra_in,muestra_out;

//wave_out.cab=wave.cab;

tamano=wave.cab.bytData/2;
for (i=0;i<tamano;i++){
muestra_in=float(wave.datos[i]);
muestra_out=muestra_in*coef_B[0]+mem_in[0]*coef_B[1]+mem_in[1]*coef_B[2]-mem_out[0]*coef_A[1]-mem_out[1]*coef_A[2];
wave_out.datos[i]=short(muestra_out);
if (i==0){
mem_in[1]=0.0;
mem_out[1]=0.0;
}else{
mem_in[1]=mem_in[0];
mem_out[1]=mem_out[0];
}
mem_in[0]=muestra_in;
mem_out[0]=muestra_out;
}
}

void InicializacionMemFiltIIR(TMemoriaFiltIIR &mem_in,TMemoriaFiltIIR &mem_out){

mem_in[0]=0.0;
mem_in[1]=0.0;
mem_out[0]=0.0;
mem_out[1]=0.0;

}

void VisualizarCab(const TCabWAV cab){

cout<<"CABECERA DEL FICHERO WAV"<<endl;
cout<<endl;
cout<<"Identificador RIFF: "<<cab.RIFF<<endl;
cout<<"Tamano fichero: "<<cab.tamano<<endl;
cout<<"Identificador WAVE: "<<cab.WAVE<<endl;
cout<<"Identificador del formato fmt: "<<cab.fmt<<endl;
cout<<"Tamano del bloque de formato: "<<cab.tamfmt<<endl;
cout<<"Formato PCM: "<<cab.fmtPCM<<endl;
cout<<"Numero de Canales: "<<cab.nCanales<<endl;
cout<<"Muestra por segundo: "<<cab.mueseg<<endl;
cout<<"Bytes por segundo: "<<cab.bytSeg<<endl;
cout<<"Bytes por bloque: "<<cab.bytBlq<<endl;
cout<<"Bytes por muestra: "<<cab.bytMue<<endl;
cout<<"Data: "<<cab.DATA<<endl;
cout<<"Numero de bytes de datos: "<<cab.bytData<<endl;

}
  #6 (permalink)  
Antiguo 29/03/2010, 13:22
Avatar de sadalsuud  
Fecha de Ingreso: marzo-2010
Ubicación: en la casa del duende
Mensajes: 96
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Mi programa no llega al main

uyyy hombre usé la equiqueta Highlight c++ para ver mejor el codigo porque así es canson de entener.

Para que sea vea así

Código C++:
Ver original
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. int main(){
  5.  
  6.  cout << "hola esto es un codigo con la etiqueta Highlight y por eso se ve con colores ";
  7. }
  #7 (permalink)  
Antiguo 29/03/2010, 14:36
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Respuesta: Mi programa no llega al main

sadalsuud estoy un poco perdido con la etiqueta esa, como se utiliza?la tengo que incluir en el codigo que he copiado en el foro?
Perdonad pero estoy pagando la novatada..
  #8 (permalink)  
Antiguo 29/03/2010, 14:44
Avatar de sadalsuud  
Fecha de Ingreso: marzo-2010
Ubicación: en la casa del duende
Mensajes: 96
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: Mi programa no llega al main

Cita:
Iniciado por yomismo138 Ver Mensaje
sadalsuud estoy un poco perdido con la etiqueta esa, como se utiliza?la tengo que incluir en el codigo que he copiado en el foro?
Perdonad pero estoy pagando la novatada..
así es, cuando estas colocando tu mensaje en el foro usa una etiqueta que se llama highlight que está cerca a las emoticones que uno puede colocar en los mensajes.

mira http://www.forosdelweb.com/f96/etiqueta-highlight-para-mejorar-legibilidad-del-codigo-683386/

aquí comentan lo dicho.

ciao
  #9 (permalink)  
Antiguo 29/03/2010, 15:24
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Respuesta: Mi programa no llega al main

Espero que así se vea bien y me podais ayudar con el maldito error..

Código c++:
Ver original
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. //Declaración de Constantes
  8. const long MAXMUE = 500000;
  9. const unsigned short MAXCAD= 20;
  10. const unsigned short MAXMEMIIR=2; //Coloco el numero de elementos
  11. const unsigned short MAXCOEFIIR=3;
  12.  
  13. //Declaración de Estructura de Datos
  14. typedef char TCadena[MAXCAD];
  15.  
  16. struct TCabWAV{
  17. char RIFF[4];
  18. int tamano;
  19. char WAVE [4];
  20. char fmt [4];
  21. int tamfmt;
  22. short fmtPCM;
  23. short nCanales;
  24. int mueseg;
  25. int bytSeg;
  26. short bytBlq;
  27. short bytMue;
  28. char DATA [4];
  29. int bytData;
  30. };
  31.  
  32. typedef short TInfo;
  33. typedef float TCoef;
  34.  
  35. typedef TCoef TMemoriaFiltIIR[MAXMEMIIR];
  36. typedef TCoef TCoefFiltIIR[MAXCOEFIIR];
  37. typedef TInfo TVectorMuestras[MAXMUE];
  38.  
  39. struct TFileWAV{
  40. TCabWAV cab;
  41. TVectorMuestras datos;
  42. };
  43.  
  44. //Declaración de Cabeceras de Procedimientos
  45. void LeerFichWave(fstream &mfi, TFileWAV &wave);
  46. void EscribirFichWave(fstream &mfo, TFileWAV &waveout);
  47. void VisualizarCab(const TCabWAV cab);
  48. void InicializacionMemFiltIIR(TMemoriaFiltIIR &mem_in,TMemoriaFiltIIR &mem_out);
  49. void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_out, TMemoriaFiltIIR &mem_in, TMemoriaFiltIIR &mem_out, TCoefFiltIIR &coef_A, TCoefFiltIIR &coef_B);
  50.  
  51. int main()
  52. {
  53.  
  54. cout<<"empieza el main.."<<endl;
  55. system("pause");
  56.  
  57. TCadena nombreout,nombreoutB1, nombreoutB2, nombreoutB3;
  58. TFileWAV wave,waveout,wave_outB1,wave_outB2,wave_outB3;
  59. fstream mfi, mfo,mfoB1, mfoB2, mfoB3;
  60. long i, tamano;
  61. float muestra;
  62. TMemoriaFiltIIR mem_inB1,mem_outB1,mem_inB2,mem_outB2,mem_inB3,mem _outB3;
  63. TCoefFiltIIR coefB1_A, coefB1_B, coefB2_A, coefB2_B, coefB3_A, coefB3_B;
  64.  
  65. //Abro y Creo el fichero de salida
  66. cout<<"-------- SOFTWARE CRD POR BANDAS ----------"<<endl;
  67. mfi.open("sultans.wav", ios::in |ios::binary);
  68. if(!mfi.is_open()) {
  69. cout<<"Error al abrir el fichero"<<endl;
  70. system("pause");
  71. }else{
  72. cout<<"Por favor, inserte nombre de fichero que desea crear: ";
  73. cin>>nombreout;
  74. mfo.open(nombreout, ios::out|ios::binary);
  75. cout<<"Por favor, inserte nombre de fichero que desea crear Banda1: ";
  76. cin>>nombreoutB1;
  77. mfoB1.open(nombreoutB1, ios::out|ios::binary);
  78. cout<<"Por favor, inserte nombre de fichero que desea crear Banda2: ";
  79. cin>>nombreoutB2;
  80. mfoB2.open(nombreoutB2, ios::out|ios::binary);
  81. cout<<"Por favor, inserte nombre de fichero que desea crear Banda3: ";
  82. cin>>nombreoutB3;
  83. mfoB3.open(nombreoutB3, ios::out|ios::binary);
  84. }
  85.  
  86. //Leo Fichero de Entrada
  87.  
  88. LeerFichWave(mfi, wave);
  89.  
  90. //Visualizo Cabecera
  91. VisualizarCab(wave.cab);
  92.  
  93. //Inicialización Constantes
  94. InicializacionMemFiltIIR(mem_inB1,mem_outB1);
  95. InicializacionMemFiltIIR(mem_inB2,mem_outB2);
  96. InicializacionMemFiltIIR(mem_inB3,mem_outB3);
  97.  
  98. coefB1_A[0]=1 ;coefB1_A[1]=-1.9288 ;coefB1_A[2]=0.9313 ; coefB1_B[0]=0.0006 ;coefB1_B[1]=0.0012 ;coefB1_B[2]=0.0006;
  99. coefB2_A[0]=1 ;coefB2_A[1]=-1.6833 ;coefB2_A[2]=0.7006 ; coefB2_B[0]=0.1497 ;coefB2_B[1]=0 ;coefB2_B[2]=-0.1497 ;
  100. coefB3_A[0]=1 ;coefB3_A[1]=-1.4458 ;coefB3_A[2]=0.5690 ; coefB3_B[0]=0.7537 ;coefB3_B[1]=-1.5074 ;coefB3_B[2]=0.7537 ;
  101.  
  102. //Filtrado IIR 3 Bandas
  103. wave_outB1.cab=wave.cab;
  104. wave_outB2.cab=wave.cab;
  105. wave_outB3.cab=wave.cab;
  106.  
  107. void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_outB1, TMemoriaFiltIIR &mem_inB1, TMemoriaFiltIIR &mem_outB1, TCoefFiltIIR &coefB1_A, TCoefFiltIIR &coefB1_B);
  108. void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_outB2, TMemoriaFiltIIR &mem_inB2, TMemoriaFiltIIR &mem_outB2, TCoefFiltIIR &coefB2_A, TCoefFiltIIR &coefB2_B);
  109. void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_outB3, TMemoriaFiltIIR &mem_inB3, TMemoriaFiltIIR &mem_outB3, TCoefFiltIIR &coefB3_A, TCoefFiltIIR &coefB3_B);
  110.  
  111. //Proceso
  112. waveout.cab=wave.cab;
  113. tamano=wave.cab.bytData/2;
  114.  
  115. for(i=0;i<tamano;i++){
  116. muestra=float(wave_outB1.datos[i]+wave_outB2.datos[i]+wave_outB3.datos[i]);
  117. waveout.datos[i]=short(muestra);
  118. }
  119.  
  120. //Escribo Fichero de Salida
  121. EscribirFichWave(mfo, waveout);
  122. EscribirFichWave(mfoB1, wave_outB1);
  123. EscribirFichWave(mfoB2, wave_outB2);
  124. EscribirFichWave(mfoB3, wave_outB3);
  125.  
  126. mfi.close();
  127. mfo.close();
  128. mfoB1.close();
  129. mfoB2.close();
  130. mfoB3.close();
  131.  
  132. system("pause");
  133. return 0;
  134. }
  135.  
  136. //Procedimientos Utilizados
  137. void LeerFichWave(fstream &mfi, TFileWAV &wave){
  138. long i,tamano;
  139. TInfo datos;
  140.  
  141. mfi.read((char *)&wave.cab, sizeof(TCabWAV));
  142.  
  143. tamano=wave.cab.bytData/2;
  144. for (i=0;i<tamano;i++){
  145. mfi.read((char *)&datos, sizeof(TInfo));
  146. wave.datos[i]=datos;
  147. }
  148.  
  149. }
  150.  
  151. void EscribirFichWave( fstream &mfo, TFileWAV &waveout){
  152. long i,tamano;
  153. TInfo dato;
  154.  
  155. mfo.write((char *)&waveout.cab, sizeof(TCabWAV));
  156.  
  157. tamano=waveout.cab.bytData/2;
  158. for(i=0;i<tamano;i++){
  159. dato=waveout.datos[i];
  160. mfo.write((char *)&dato, sizeof(TInfo));
  161. }
  162.  
  163. }
  164.  
  165. void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_out, TMemoriaFiltIIR &mem_in, TMemoriaFiltIIR &mem_out, TCoefFiltIIR &coef_A, TCoefFiltIIR &coef_B){
  166.  
  167. long i, tamano;
  168. float muestra_in,muestra_out;
  169.  
  170. //wave_out.cab=wave.cab;
  171.  
  172. tamano=wave.cab.bytData/2;
  173. for (i=0;i<tamano;i++){
  174. muestra_in=float(wave.datos[i]);
  175. muestra_out=muestra_in*coef_B[0]+mem_in[0]*coef_B[1]+mem_in[1]*coef_B[2]-mem_out[0]*coef_A[1]-mem_out[1]*coef_A[2];
  176. wave_out.datos[i]=short(muestra_out);
  177. if (i==0){
  178. mem_in[1]=0.0;
  179. mem_out[1]=0.0;
  180. }else{
  181. mem_in[1]=mem_in[0];
  182. mem_out[1]=mem_out[0];
  183. }
  184. mem_in[0]=muestra_in;
  185. mem_out[0]=muestra_out;
  186. }
  187. }
  188.  
  189. void InicializacionMemFiltIIR(TMemoriaFiltIIR &mem_in,TMemoriaFiltIIR &mem_out){
  190.  
  191. mem_in[0]=0.0;
  192. mem_in[1]=0.0;
  193. mem_out[0]=0.0;
  194. mem_out[1]=0.0;
  195.  
  196. }
  197.  
  198. void VisualizarCab(const TCabWAV cab){
  199.  
  200. cout<<"CABECERA DEL FICHERO WAV"<<endl;
  201. cout<<endl;
  202. cout<<"Identificador RIFF: "<<cab.RIFF<<endl;
  203. cout<<"Tamano fichero: "<<cab.tamano<<endl;
  204. cout<<"Identificador WAVE: "<<cab.WAVE<<endl;
  205. cout<<"Identificador del formato fmt: "<<cab.fmt<<endl;
  206. cout<<"Tamano del bloque de formato: "<<cab.tamfmt<<endl;
  207. cout<<"Formato PCM: "<<cab.fmtPCM<<endl;
  208. cout<<"Numero de Canales: "<<cab.nCanales<<endl;
  209. cout<<"Muestra por segundo: "<<cab.mueseg<<endl;
  210. cout<<"Bytes por segundo: "<<cab.bytSeg<<endl;
  211. cout<<"Bytes por bloque: "<<cab.bytBlq<<endl;
  212. cout<<"Bytes por muestra: "<<cab.bytMue<<endl;
  213. cout<<"Data: "<<cab.DATA<<endl;
  214. cout<<"Numero de bytes de datos: "<<cab.bytData<<endl;
  215.  
  216. }
  #10 (permalink)  
Antiguo 29/03/2010, 15:42
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Mi programa no llega al main

Hay una linea q tiene un espacio en blanco de mas

TMemoriaFiltIIR mem_inB1,mem_outB1,mem_inB2,mem_outB2,mem_inB3,mem _outB3;

esta bien que sea asi?
  #11 (permalink)  
Antiguo 29/03/2010, 15:54
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Respuesta: Mi programa no llega al main

Debe de estar junto, no se porque aquí aparece de esta manera, en Dev c++ si me aparece junto. Es un error en tiempo de ejecución, ejecuto el programa y no consigue ni llegar a la traza que he colocado al principio del main..aparece la ventana de error de windows..
  #12 (permalink)  
Antiguo 30/03/2010, 04:12
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Respuesta: Mi programa no llega al main

He olvidado decir que los procedimientos introducidos son FiltradoIIR e InicilizacionMemFiltIIR y la estructura de datos TCoefFiltIIR, TMemoriaFiltIIR. Antes de introducirlos, funcionaba correctamente, es decir, leo y escribo el fichero .wav, al introducir estos procedimientos y estructuras me aparece el fatídico error que por mucho que depure el código no consigo detectarlo..El objetivo de estos es crear 3 ficheros .wav conteniendo cada uno la señal filtrada en 3 bandas..
  #13 (permalink)  
Antiguo 30/03/2010, 04:49
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Mi programa no llega al main

Al invocar una funcion, hazlo asi:

f(parametros);

pero no

void f(parametros);

Al hacerlo de esta ultima forma, no estas invocando la funcion, la estas declarando solamente.
  #14 (permalink)  
Antiguo 30/03/2010, 05:24
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Respuesta: Mi programa no llega al main

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
Al invocar una funcion, hazlo asi:

f(parametros);

pero no

void f(parametros);

Al hacerlo de esta ultima forma, no estas invocando la funcion, la estas declarando solamente.
Ya lo he modificando y sigue apareciendo el mismo error, que despiste más grande, consecuencia del copy paste de la declaración.
Muchas gracias CalgaryCorpus!! Puede ser un error de exceso de tamaño de los vectores? Aunque con el array de lectura y escritura si funciona, el problema es cuando filtro..Estoy probando a realizar el programa en vez de con array con lista enlazadas..
  #15 (permalink)  
Antiguo 30/03/2010, 05:51
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Mi programa no llega al main

Cita:
el problema es cuando filtro
No estabas invocando la funcion de filtrado y sin embargo tu programa tenia mal comportamiento. El problema no puede estar (solamente) al interior de la funcion de filtrado. Tiene que haber mas de 1 problema.

Dicho de otra forma, como has descartado el resto y asocias el problema que tienes a esa funcion solamente, si no la estabas invocando y tenias un mal comportamiento del programa?

Tienes un comportamiento distinto ahora? Tus "cout" que aparecen en el main(), se ejecutan?
  #16 (permalink)  
Antiguo 30/03/2010, 06:03
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Respuesta: Mi programa no llega al main

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
No estabas invocando la funcion de filtrado y sin embargo tu programa tenia mal comportamiento. El problema no puede estar (solamente) al interior de la funcion de filtrado. Tiene que haber mas de 1 problema.

Dicho de otra forma, como has descartado el resto y asocias el problema que tienes a esa funcion solamente, si no la estabas invocando y tenias un mal comportamiento del programa?

Tienes un comportamiento distinto ahora? Tus "cout" que aparecen en el main(), se ejecutan?
Sigue apareciendo el mismo error en tiempo de ejecución (error de windows al ejecutar el programa), sigue sin llegar a la traza que he colocado al principio del main.
Tiene lógica lo que me dices, comento las llamadas a la función Filtrado e Inicialización y sus estructura el programa funciona correctamente, por eso lo he descartado, cuando introduzco esa funciones y estructura aparece el error. Sospecho que puede ser un error con el tamaño de los arrays..
  #17 (permalink)  
Antiguo 30/03/2010, 06:12
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Mi programa no llega al main

Podrias, copiar el programa que tu dices sí te funciona, aquel que comentas o dejas fuera cosas y si funciona? Es conveniente chequear la diferencia entre aquel que funciona, y no tiene la funcion esta (pues esta comentada) y aquel que tiene la funcion, pero nunca la llamas (como el que publicaste aqui)
  #18 (permalink)  
Antiguo 30/03/2010, 06:24
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Respuesta: Mi programa no llega al main

Aquí expongo el programa comentando las funciones y estructura que me producen el error. Así funciona correctamente, leo el fichero .wav creo otro fichero .wav igual al de entrada..

Código c++:
Ver original
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. //Declaración de Constantes
  8. const long MAXMUE=500000;
  9. const unsigned short MAXCAD= 20;
  10. //const unsigned short MAXMEMIIR=2; //Coloco el numero de elementos
  11. //const unsigned short MAXCOEFIIR=3;
  12.  
  13. //Declaración de Estructura de Datos
  14. typedef char TCadena[MAXCAD];
  15.  
  16. struct TCabWAV{
  17.        char RIFF[4];
  18.        int tamano;
  19.        char WAVE [4];
  20.        char fmt [4];
  21.        int tamfmt;
  22.        short fmtPCM;
  23.        short nCanales;
  24.        int mueseg;
  25.        int bytSeg;
  26.        short bytBlq;
  27.        short bytMue;
  28.        char DATA [4];
  29.        int bytData;
  30. };
  31.  
  32. typedef short TInfo;
  33. //typedef float TCoef;
  34.  
  35. //typedef TCoef TMemoriaFiltIIR[MAXMEMIIR];
  36. //typedef TCoef TCoefFiltIIR[MAXCOEFIIR];
  37. typedef TInfo TVectorMuestras[MAXMUE];
  38.  
  39. struct TFileWAV{
  40.        TCabWAV cab;
  41.        TVectorMuestras datos;
  42. };
  43.  
  44. //Declaración de Cabeceras de Procedimientos
  45. void LeerFichWave(fstream &mfi, TFileWAV &wave);
  46. void EscribirFichWave(fstream &mfo, TFileWAV &waveout);
  47. void VisualizarCab(const TCabWAV cab);
  48. //void InicializacionMemFiltIIR(TMemoriaFiltIIR &mem_in,TMemoriaFiltIIR &mem_out);
  49. //void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_out, TMemoriaFiltIIR &mem_in, TMemoriaFiltIIR &mem_out, TCoefFiltIIR &coef_A, TCoefFiltIIR &coef_B);
  50.  
  51. int main()
  52. {
  53.  
  54. cout<<"empieza el main.."<<endl;
  55. system("pause");
  56.  
  57. TCadena nombreout;//nombreoutB1, nombreoutB2, nombreoutB3;
  58. TFileWAV wave,waveout;//wave_outB1,wave_outB2,wave_outB3;
  59. fstream mfi, mfo;//mfoB1, mfoB2, mfoB3;
  60. long i, tamano;
  61. //float muestra;
  62. //TMemoriaFiltIIR mem_inB1,mem_outB1,mem_inB2,mem_outB2,mem_inB3,mem_outB3;
  63. //TCoefFiltIIR coefB1_A, coefB1_B, coefB2_A, coefB2_B, coefB3_A, coefB3_B;
  64.  
  65. //Abro y Creo el fichero de salida
  66.     cout<<"-------- SOFTWARE CRD POR BANDAS ----------"<<endl;
  67.     mfi.open("sultans.wav", ios::in |ios::binary);
  68.     if(!mfi.is_open()) {
  69.       cout<<"Error al abrir el fichero"<<endl;
  70.       system("pause");
  71.     }else{
  72.           cout<<"Por favor, inserte nombre de fichero que desea crear: ";
  73.           cin>>nombreout;
  74.           mfo.open(nombreout, ios::out|ios::binary);/*
  75.           cout<<"Por favor, inserte nombre de fichero que desea crear Banda1: ";
  76.           cin>>nombreoutB1;
  77.           mfoB1.open(nombreoutB1, ios::out|ios::binary);
  78.           cout<<"Por favor, inserte nombre de fichero que desea crear Banda2: ";
  79.           cin>>nombreoutB2;
  80.           mfoB2.open(nombreoutB2, ios::out|ios::binary);
  81.           cout<<"Por favor, inserte nombre de fichero que desea crear Banda3: ";
  82.           cin>>nombreoutB3;
  83.           mfoB3.open(nombreoutB3, ios::out|ios::binary);*/
  84.     }
  85.  
  86. //Leo Fichero de Entrada
  87.  
  88.     LeerFichWave(mfi, wave);
  89.  
  90. //Visualizo Cabecera
  91.     VisualizarCab(wave.cab);
  92. /*
  93. //Inicialización Constantes
  94.     InicializacionMemFiltIIR(mem_inB1,mem_outB1);
  95.     InicializacionMemFiltIIR(mem_inB2,mem_outB2);
  96.     InicializacionMemFiltIIR(mem_inB3,mem_outB3);
  97.    
  98.     coefB1_A[0]=1 ;coefB1_A[1]=-1.9288 ;coefB1_A[2]=0.9313 ; coefB1_B[0]=0.0006 ;coefB1_B[1]=0.0012 ;coefB1_B[2]=0.0006;
  99.     coefB2_A[0]=1 ;coefB2_A[1]=-1.6833 ;coefB2_A[2]=0.7006 ; coefB2_B[0]=0.1497 ;coefB2_B[1]=0 ;coefB2_B[2]=-0.1497 ;
  100.     coefB3_A[0]=1 ;coefB3_A[1]=-1.4458 ;coefB3_A[2]=0.5690 ; coefB3_B[0]=0.7537 ;coefB3_B[1]=-1.5074 ;coefB3_B[2]=0.7537 ;
  101.  
  102. //Filtrado IIR 3 Bandas
  103.     wave_outB1.cab=wave.cab;
  104.     wave_outB2.cab=wave.cab;
  105.     wave_outB3.cab=wave.cab;
  106.  
  107.     FiltradoIIR(wave, wave_outB1, mem_inB1, mem_outB1, coefB1_A, coefB1_B);
  108.     FiltradoIIR(wave, wave_outB2, mem_inB2, mem_outB2, coefB2_A, coefB2_B);
  109.     FiltradoIIR(wave, wave_outB3, mem_inB3, mem_outB3, coefB3_A, coefB3_B);
  110.  */  
  111. //Proceso    
  112.     waveout.cab=wave.cab;
  113.     tamano=wave.cab.bytData/2;
  114.    
  115.     for(i=0;i<tamano;i++){
  116.        //muestra=float(wave_outB1.datos[i]+wave_outB2.datos[i]+wave_outB3.datos[i]);
  117.        //waveout.datos[i]=short(muestra);
  118.        waveout.datos[i]=wave.datos[i];
  119.     }
  120.    
  121. //Escribo Fichero de Salida
  122.     EscribirFichWave(mfo, waveout);
  123.     /*EscribirFichWave(mfoB1, wave_outB1);
  124.     EscribirFichWave(mfoB2, wave_outB2);
  125.     EscribirFichWave(mfoB3, wave_outB3);*/
  126.  
  127. mfi.close();
  128. mfo.close();/*
  129. mfoB1.close();
  130. mfoB2.close();
  131. mfoB3.close();*/
  132.  
  133. system("pause");
  134. return 0;
  135. }
  136.  
  137. //Procedimientos Utilizados
  138. void LeerFichWave(fstream &mfi, TFileWAV &wave){
  139.     long i,tamano;
  140.     TInfo datos;
  141.    
  142.     mfi.read((char *)&wave.cab, sizeof(TCabWAV));
  143.    
  144.     tamano=wave.cab.bytData/2;
  145.     for (i=0;i<tamano;i++){
  146.         mfi.read((char *)&datos, sizeof(TInfo));
  147.         wave.datos[i]=datos;
  148.     }
  149.  
  150. }
  151.  
  152. void EscribirFichWave( fstream &mfo, TFileWAV &waveout){
  153.     long i,tamano;
  154.     TInfo dato;
  155.    
  156.     mfo.write((char *)&waveout.cab, sizeof(TCabWAV));
  157.    
  158.     tamano=waveout.cab.bytData/2;
  159.     for(i=0;i<tamano;i++){
  160.         dato=waveout.datos[i];
  161.         mfo.write((char *)&dato, sizeof(TInfo));
  162.     }
  163.  
  164. }
  165. /*
  166. void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_out, TMemoriaFiltIIR &mem_in, TMemoriaFiltIIR &mem_out, TCoefFiltIIR &coef_A, TCoefFiltIIR &coef_B){
  167.  
  168.      long i, tamano;
  169.      float muestra_in,muestra_out;
  170.      
  171.      //wave_out.cab=wave.cab;
  172.      
  173.      tamano=wave.cab.bytData/2;
  174.      for (i=0;i<tamano;i++){
  175.          muestra_in=float(wave.datos[i]);
  176.          muestra_out=muestra_in*coef_B[0]+mem_in[0]*coef_B[1]+mem_in[1]*coef_B[2]-mem_out[0]*coef_A[1]-mem_out[1]*coef_A[2];
  177.          wave_out.datos[i]=short(muestra_out);
  178.          if (i==0){
  179.             mem_in[1]=0.0;
  180.             mem_out[1]=0.0;
  181.          }else{
  182.              mem_in[1]=mem_in[0];
  183.              mem_out[1]=mem_out[0];
  184.          }
  185.          mem_in[0]=muestra_in;
  186.          mem_out[0]=muestra_out;    
  187.      }
  188. }
  189.  
  190. void InicializacionMemFiltIIR(TMemoriaFiltIIR &mem_in,TMemoriaFiltIIR &mem_out){
  191.      
  192.      mem_in[0]=0.0;
  193.      mem_in[1]=0.0;
  194.      mem_out[0]=0.0;
  195.      mem_out[1]=0.0;
  196.  
  197. }
  198. */
  199. void VisualizarCab(const TCabWAV cab){
  200.    
  201.      cout<<"CABECERA DEL FICHERO WAV"<<endl;
  202.      cout<<endl;
  203.      cout<<"Identificador RIFF:   "<<cab.RIFF<<endl;
  204.      cout<<"Tamano fichero:       "<<cab.tamano<<endl;
  205.      cout<<"Identificador WAVE:   "<<cab.WAVE<<endl;
  206.      cout<<"Identificador del formato fmt:   "<<cab.fmt<<endl;
  207.      cout<<"Tamano del bloque de formato:    "<<cab.tamfmt<<endl;
  208.      cout<<"Formato PCM:   "<<cab.fmtPCM<<endl;
  209.      cout<<"Numero de Canales:    "<<cab.nCanales<<endl;
  210.      cout<<"Muestra por segundo:    "<<cab.mueseg<<endl;
  211.      cout<<"Bytes por segundo:    "<<cab.bytSeg<<endl;
  212.      cout<<"Bytes por bloque:     "<<cab.bytBlq<<endl;
  213.      cout<<"Bytes por muestra:     "<<cab.bytMue<<endl;
  214.      cout<<"Data:    "<<cab.DATA<<endl;
  215.      cout<<"Numero de bytes de datos:    "<<cab.bytData<<endl;
  216.  
  217. }
  #19 (permalink)  
Antiguo 30/03/2010, 06:44
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Mi programa no llega al main

De que tamaño es el archivo que lees?
En la funcion LeerFichWave(), que valor tiene la variable tamano?
  #20 (permalink)  
Antiguo 30/03/2010, 08:35
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Respuesta: Mi programa no llega al main

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
De que tamaño es el archivo que lees?
En la funcion LeerFichWave(), que valor tiene la variable tamano?
El tamaño del fichero es de 447Kb, tamano=223744 este valor hace referencia al tamaño del bloque de datos dividido entre 2.
Es un tamaño pequeño que no debería de dar problemas..
Los arrays los he declarado con MAXMUE=500000
  #21 (permalink)  
Antiguo 31/03/2010, 11:06
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Respuesta: Mi programa no llega al main

Por fin he conseguido detectar el fallo..Cuando declaro 3 estructura tipo TFileWave aparece el error en tiempo de ejecución, con la declaración de 2 estructura no hay problema. He probado el procedimiento filtradoIIR con 2 estructuras y funciona correctamente..Necesito 5 estructuras TFileWave en mi programa ¿de que manera puedo hacerlo? porque si declaro más de 2 obtengo el error en tiempo de ejecución, el cual supongo que es debido al tamaño del array, ya que 3 vectores 500000 muestras petardea el programa..
He probado a realizar el programa en vez de con array con memoria dinámica utilizando lista y es demasiado lento, descarto esa opción..
Espero ayuda...
  #22 (permalink)  
Antiguo 31/03/2010, 11:19
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Mi programa no llega al main

Intenta:

1. Reemplazar la definicion

typedef TInfo TVectorMuestras[MAXMUE];

por

typedef TInfo *TVectorMuestras;

2. Agrega un constructor a la struct
struct TFileWAV{
TCabWAV cab;
TVectorMuestras datos;
};

quedando asi:

struct TFileWAV{
TCabWAV cab;
TVectorMuestras datos;
TFileWAV() { datos = new TInfo[MAXMUE]; }
};

No cambies nada mas. La notacion de [] y el uso de datos como si fuera un arreglo se mantiene.

Si esto no funciona, podrias intentar postergar la peticion de memoria, agregar un metodo e invocarlo al momento de leer el fichero para pedir memoria en ese momento.
  #23 (permalink)  
Antiguo 31/03/2010, 12:48
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Respuesta: Mi programa no llega al main

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
Intenta:

1. Reemplazar la definicion

typedef TInfo TVectorMuestras[MAXMUE];

por

typedef TInfo *TVectorMuestras;

2. Agrega un constructor a la struct
struct TFileWAV{
TCabWAV cab;
TVectorMuestras datos;
};

quedando asi:

struct TFileWAV{
TCabWAV cab;
TVectorMuestras datos;
TFileWAV() { datos = new TInfo[MAXMUE]; }
};

No cambies nada mas. La notacion de [] y el uso de datos como si fuera un arreglo se mantiene.

Si esto no funciona, podrias intentar postergar la peticion de memoria, agregar un metodo e invocarlo al momento de leer el fichero para pedir memoria en ese momento.
CalgaryCorpus eres un fuera de serie, ya ha funcionado todo el programa al completo. Si no es mucho pedir, podrías explicarme el porque de ese cambio?y que es lo que ha hecho que funcione?ya que después tengo que probar con ficheros de un tamaño mayor, con un MAXMUE superior..
Parece que era un problema de memoria..
Muchas Gracias!!
  #24 (permalink)  
Antiguo 31/03/2010, 13:02
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Mi programa no llega al main

Se ha cambiado memoria estatica por dinamica, desde el punto de vista del momento en que se solicita la memoria y del lugar de donde se obtiene.

Seria mejor pedir la memoria no al construir el objeto, sino cuando se conoce cuanta memoria se necesitará. Con ello, el "arreglo" datos solo usaria aquello que necesita usar, no mas, no menos.
  #25 (permalink)  
Antiguo 31/03/2010, 13:29
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Respuesta: Mi programa no llega al main

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
Se ha cambiado memoria estatica por dinamica, desde el punto de vista del momento en que se solicita la memoria y del lugar de donde se obtiene.

Seria mejor pedir la memoria no al construir el objeto, sino cuando se conoce cuanta memoria se necesitará. Con ello, el "arreglo" datos solo usaria aquello que necesita usar, no mas, no menos.
Que es lo que tengo que hacer para pedir memoria en el momento que se conoce la memoria que necesito?Ya que necesito que el programa funcione para cualquier fichero .wav con mayor o menor tamaño. Acabo de probar con un fichero .wav con un tamaño mayor y me aparece error de ejecución. Se debe porque necesito más de 500000 muestras..
Necesito un array que no tenga un tamaño fijo sino que se adapte al numero de muestras que contenga cada fichero. Como he dicho antes, he probado con una lista enlazada pero es muy muy lento..

Etiquetas: llega, main, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:34.