|
Or you could just use URLDownloadToFile() .
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
Thank you Vinnzy And Ravi for you help..
Vinnzy, Thanks alot for the code. Ravi, i was aware of the urldownloadtofile(),
but wasnt sure if its the right thing to use.
Ill Try them out and post the results.
Thnaks again ..
|
|
|
|
|
Suppose I have the Instruction class Memory class, and I need to create a ListNode class which defined in Memory.h right now. Here is one of the requirments.
The overloaded operator[] of Memory clas returns a reference to the Instruction with the address corresponding to the index parameter of the operator[] method.
address is int variable in Instruction class.
How the operator overloading should be?
class ListNode
{
Instruction inst;
ListNode *head;
ListNode *next;
ListNOde();
~ListNode();
int &operator[] ( int );
};
|
|
|
|
|
You need to show your declaration for the Instruction class.
Bob Ciora
|
|
|
|
|
I have the following code, which runs w/out erroe, but fails to return the proper values...
<br />
#include <math><br />
#include "stdafx.h"<br />
#include <fstream><br />
#include <iomanip><br />
#include <iostream><br />
using namespace std;<br />
<br />
const double PI = 3.141592653589793238462643383279502884197;<br />
double q = 1000;
double pi = 5000;
double rw = 0.25;
double h = 100;
double por = 0.2;<br />
double k = 200;
double ct = 0.00003;
double Bo = 1.2;
double visc = 1.3;
double C = 0.5;
double S = 10;<br />
double tp = 200;
double delta_t = 200;
double a0,a1,a2,a3,a4,a5,b1,b2,b3,b4,c1,c2,c3,c4;<br />
double a[50],b[50],c[50],expint;<br />
<br />
double t[50],qsf[50],alpha,x[50],EI[50],beta[50],pd[50],pwf[50];<br />
<br />
double time_hr()<br />
{<br />
double N=49.0;<br />
for (int i=0;i<50;i++)<br />
{<br />
t[i] = 0.01*exp((i/N)*log(200/0.01));<br />
}<br />
return t[i];<br />
}<br />
<br />
int main(int argc, char* argv[])<br />
{<br />
ofstream outputdeck;<br />
outputdeck.open("output.txt", ios::out);<br />
<br />
outputdeck<<"Type A: With Wellbore Storage.\n";<br />
outputdeck<<"Time"<<setw(5)<<"Pwf"<<setw(5)<<endl;<br />
for(int i=0;i<50;i++)<br />
{<br />
outputdeck<<t[i]<<endl<br />
}<br />
<br />
<br />
return 0;<br />
}
This code returns a value of 0 for every value of i. t[i] is supposed to increase from 0.01 to 200 as i increases from 0 to 49.
Can anyone pls tell me what i'm doing wrong?
Thank you.
|
|
|
|
|
This code does not call time_hr(), to change the values stored in t.
INTP
"The more help VB provides VB programmers, the more miserable your life as a C++ programmer becomes."
Andrew W. Troelsen
|
|
|
|
|
thank you very much. now i'm in a new fix. the ffg code returns just the 1st values of the array, t[0] and pwf[0]..viz:
<br />
#include <math><br />
#include "stdafx.h"<br />
#include <fstream><br />
#include <iomanip><br />
#include <iostream><br />
using namespace std;<br />
<br />
const double PI = 3.141592653589793238462643383279502884197;<br />
double q = 1000;
double pi = 5000;
double rw = 0.25;
double h = 100;
double por = 0.2;<br />
double k = 200;
double ct = 0.00003;
double Bo = 1.2;
double visc = 1.3;
double C = 0.5;
double S = 10;<br />
double tp = 200;
double delta_t = 200;
double a0,a1,a2,a3,a4,a5,b1,b2,b3,b4,c1,c2,c3,c4;<br />
double a[50],b[50],c[50],expint;<br />
<br />
double t[50],qsf[50],alpha,x[50],EI[50],beta[50],pd[50],pwf[50];<br />
<br />
double time_hr()<br />
{<br />
double N=49.0;<br />
for (int i=0;i<50;i++)<br />
{<br />
t[i] = 0.01*exp((i/N)*log(200/0.01));<br />
}<br />
return t[i];<br />
}<br />
<br />
double wbs()<br />
{<br />
a0 = -0.57721566;<br />
a1 = 0.99999193;<br />
a2 = -0.24991055;<br />
a3 = 0.05519968;<br />
a4 = -0.00976004;<br />
a5 = 0.00107857;<br />
<br />
b1 = 8.5733287401;<br />
b2 = 18.059016973;<br />
b3 = 8.6347608925;<br />
b4 = 0.2677737343;<br />
<br />
c1 = 9.5733223454;<br />
c2 = 25.6329561486;<br />
c3 = 21.0996530827;<br />
c4 = 3.9584969228;<br />
<br />
int N = 49;<br />
alpha = (4/(3*PI*C))*(k*h/visc);<br />
<br />
for (int i=0;i<50;i++)<br />
{<br />
t[i] = 0.01*exp((i/N)*log(200/0.01));<br />
qsf[i] = q*(1-exp(-1*alpha*t[i]));<br />
x[i] = (948*por*visc*ct*pow(rw,2))/(k*t[i]);<br />
<br />
if (x[i]<=0.01)<br />
{<br />
EI[i] = log(x[i])+0.5772;<br />
}<br />
else<br />
{<br />
a[i] = pow(x[i],4)+(b1*pow(x[i],3))+(b2*pow(x[i],2))+(b3*x[i])+b4;<br />
b[i] = pow(x[i],4)+(c1*pow(x[i],3))+(c2*pow(x[i],2))+(c3*x[i])+c4;<br />
EI[i]= (1/(x[i]*exp(x[i])))*a[i]/b[i];<br />
}<br />
<br />
beta[i] = (-0.5*EI[i])+S;<br />
pd[i] = (1-(1/exp(alpha*t[i])))*beta[i];<br />
pwf[i] = pi-((141.2*q*visc*Bo*pd[i])/(k*h));<br />
}<br />
return pwf[i];<br />
}<br />
<br />
<br />
int main(int argc, char* argv[])<br />
{<br />
ofstream outputdeck;<br />
outputdeck.open("output.txt", ios::out);<br />
<br />
outputdeck<<"Type A: With Wellbore Storage.\n";<br />
outputdeck<<"Time"<<setw(5)<<"Pwf"<<setw(5)<<endl;<br />
wbs();<br />
time_hr();<br />
for(int i=0;i<50;i++)<br />
{<br />
outputdeck<<t[i]<<setw(10)<<pwf[i]<<endl;<br />
}<br />
<br />
<br />
<br />
return 0;<br />
}<br /> also, when i called the fxns in reverse order, viz:
<br />
time_hr();<br />
wbs(); t[i] displayed correctly, but pwf[i] still returns pwf[0]. Please help!
|
|
|
|
|
Same causes, same consequences
Please, modify the other line int N=49 !
Bye
|
|
|
|
|
chage:
wbs();
time_hr();
with:
time_hr();
wbs();
you did not fill t[i].
|
|
|
|
|
Yes, the suggestions worked, including $88's. What is your take on this code?
<br />
#include <br />
#include "stdafx.h"<br />
#include <br />
#include <br />
#include <br />
using namespace std;<br />
<br />
double a[10000],b[10000],x[10000],expint[10000],beta[10000],dimP2[10000];<br />
double t[50],alpha[50],dimP[50];<br />
int i,j;<br />
<br />
double ei(double x[10000])<br />
{<br />
double a0,a1,a2,a3,a4,a5,b1,b2,b3,b4,c1,c2,c3,c4;<br />
<br />
a0 = -0.57721566;<br />
a1 = 0.99999193;<br />
a2 = -0.24991055;<br />
a3 = 0.05519968;<br />
a4 = -0.00976004;<br />
a5 = 0.00107857;<br />
<br />
b1 = 8.5733287401;<br />
b2 = 18.059016973;<br />
b3 = 8.6347608925;<br />
b4 = 0.2677737343;<br />
<br />
c1 = 9.5733223454;<br />
c2 = 25.6329561486;<br />
c3 = 21.0996530827;<br />
c4 = 3.9584969228;<br />
<br />
if (x[i]<=0)<br />
{<br />
expint[i] = -999;<br />
}<br />
<br />
if (x[i]>=1)<br />
{<br />
a[i] = pow(x[i],4)+(b1*pow(x[i],3))+(b2*pow(x[i],2))+(b3*x[i])+b4;<br />
b[i] = pow(x[i],4)+(c1*pow(x[i],3))+(c2*pow(x[i],2))+(c3*x[i])+c4;<br />
expint[i] = (1/(x[i]*exp(x[i])))*a[i]/b[i];<br />
}<br />
<br />
if((0 {<br />
expint[i] = a0+(a1*x[i])+(a2*pow(x[i],2))+(a3*pow(x[i],3))+(a4*pow(x[i],4))+(a5*pow(x[i],5))-log(x[i]);<br />
}<br />
return expint[i];<br />
}<br />
<br />
double time_hr()<br />
{<br />
double N=49.0;<br />
for (int i=0;i<50;i++)<br />
{<br />
t[i] = 0.01*exp((i/N)*log(10/0.01));<br />
}<br />
return t[i];<br />
}<br />
<br />
double pD()<br />
{<br />
double rw = 0.25;<br />
double ac = 43560;<br />
double A = 80*ac;<br />
<br />
double len_b = sqrt(0.5*A);<br />
double len_a = 2*len_b;<br />
double len_ri =0.5*sqrt(pow(len_a,2)+pow(len_b,2));<br />
<br />
alpha[i] = (-(pow(rw,2)/(4*A*t[i])));<br />
<br />
for(int i=0;i<50;i++)<br />
{<br />
for(int j=0;j<10000;j++)<br />
{<br />
dimP2[j] +=-(0.5*ei(-(1/(4*A*t[i]))*(j+1)*pow(len_ri,2)));
}<br />
dimP[i]=(-0.5*ei(alpha[i]))+dimP2[j];
}<br />
return dimP[i];<br />
}<br />
At lines * and **, i got the error c2664:
'ei':cannot convert parameter 1 from double to double[]
|
|
|
|
|
*** for(int i=0;i<50;i++)
{
for(int j=0;j<10000;j++)
{
double d[10000];
d[i] = -(1/(4*A*t[i]))*(j+1)*pow(len_ri,2);
dimP2[j] +=-(0.5*ei(d));//*
}
dimP[i]=(-0.5*ei(alpha))+dimP2[j];//**
}
*** if((0 { -> if(x[i]==0) {
*** what for range from 0 to 1
|
|
|
|
|
Hello,
The pb is due to the fact that i and N are both integers.
So the value of i/N is always 0 except for i = 49.
Replace int N=49 by
double N=49;
By
|
|
|
|
|
Yes, the suggestions worked, including Branislav's. What is your take on this code?
<br />
#include <math><br />
#include "stdafx.h"<br />
#include <fstream><br />
#include <iomanip><br />
#include <iostream><br />
using namespace std;<br />
<br />
double a[10000],b[10000],x[10000],expint[10000],beta[10000],dimP2[10000];<br />
double t[50],alpha[50],dimP[50];<br />
int i,j;<br />
<br />
double ei(double x[10000])<br />
{<br />
double a0,a1,a2,a3,a4,a5,b1,b2,b3,b4,c1,c2,c3,c4;<br />
<br />
a0 = -0.57721566;<br />
a1 = 0.99999193;<br />
a2 = -0.24991055;<br />
a3 = 0.05519968;<br />
a4 = -0.00976004;<br />
a5 = 0.00107857;<br />
<br />
b1 = 8.5733287401;<br />
b2 = 18.059016973;<br />
b3 = 8.6347608925;<br />
b4 = 0.2677737343;<br />
<br />
c1 = 9.5733223454;<br />
c2 = 25.6329561486;<br />
c3 = 21.0996530827;<br />
c4 = 3.9584969228;<br />
<br />
if (x[i]<=0)<br />
{<br />
expint[i] = -999;<br />
}<br />
<br />
if (x[i]>=1)<br />
{<br />
a[i] = pow(x[i],4)+(b1*pow(x[i],3))+(b2*pow(x[i],2))+(b3*x[i])+b4;<br />
b[i] = pow(x[i],4)+(c1*pow(x[i],3))+(c2*pow(x[i],2))+(c3*x[i])+c4;<br />
expint[i] = (1/(x[i]*exp(x[i])))*a[i]/b[i];<br />
}<br />
<br />
if((0<x[i])&&(x[i]<1))<br />
{<br />
expint[i] = a0+(a1*x[i])+(a2*pow(x[i],2))+(a3*pow(x[i],3))+(a4*pow(x[i],4))+(a5*pow(x[i],5))-log(x[i]);<br />
}<br />
return expint[i];<br />
}<br />
<br />
double time_hr()<br />
{<br />
double N=49.0;<br />
for (int i=0;i<50;i++)<br />
{<br />
t[i] = 0.01*exp((i/N)*log(10/0.01));<br />
}<br />
return t[i];<br />
}<br />
<br />
double pD()<br />
{<br />
double rw = 0.25;<br />
double ac = 43560;<br />
double A = 80*ac;<br />
<br />
double len_b = sqrt(0.5*A);<br />
double len_a = 2*len_b;<br />
double len_ri =0.5*sqrt(pow(len_a,2)+pow(len_b,2));<br />
<br />
alpha[i] = (-(pow(rw,2)/(4*A*t[i])));<br />
<br />
for(int i=0;i<50;i++)<br />
{<br />
for(int j=0;j<10000;j++)<br />
{<br />
dimP2[j] +=-(0.5*ei(-(1/(4*A*t[i]))*(j+1)*pow(len_ri,2)));
}<br />
dimP[i]=(-0.5*ei(alpha[i]))+dimP2[j];
}<br />
return dimP[i];<br />
}
At lines * and **, i got the error c2664:
'ei':cannot convert parameter 1 from double to double[]
|
|
|
|
|
The error is clear: You declared ei taking one parameter which is a array of double and you call it with a double value.
I don't know the rest of the code but the arrays x, a, b, expint are not usefull since you always use the value for the current index i.
Try that if you want to change them into single value
#include
#include "stdafx.h"
#include
#include
#include
using namespace std;
double a,b,expint,beta[10000],dimP2[10000];
double t[50],alpha[50],dimP[50];
int i,j;
double ei(double x)
{
double a0,a1,a2,a3,a4,a5,b1,b2,b3,b4,c1,c2,c3,c4;
a0 = -0.57721566;
a1 = 0.99999193;
a2 = -0.24991055;
a3 = 0.05519968;
a4 = -0.00976004;
a5 = 0.00107857;
b1 = 8.5733287401;
b2 = 18.059016973;
b3 = 8.6347608925;
b4 = 0.2677737343;
c1 = 9.5733223454;
c2 = 25.6329561486;
c3 = 21.0996530827;
c4 = 3.9584969228;
if (x<=0)
{
expint = -999;
}
if (x>=1)
{
a = pow(x,4)+(b1*pow(x,3))+(b2*pow(x,2))+(b3*x)+b4;
b = pow(x,4)+(c1*pow(x,3))+(c2*pow(x,2))+(c3*x)+c4;
expint = (1/(x*exp(x)))*a/b;
}
if((0 { //THIS SHALL NOT COMPILE PROPERLY
expint = a0+(a1*x)+(a2*pow(x,2))+(a3*pow(x,3))+(a4*pow(x,4))+(a5*pow(x,5))-log(x);
}
return expint;
}
double time_hr()
{
double N=49.0;
for (int i=0;i<50;i++)
{
t[i] = 0.01*exp((i/N)*log(10/0.01));
}
return t[i];
}
double pD()
{
double rw = 0.25;
double ac = 43560;
double A = 80*ac;
double len_b = sqrt(0.5*A);
double len_a = 2*len_b;
double len_ri =0.5*sqrt(pow(len_a,2)+pow(len_b,2));
alpha[i] = (-(pow(rw,2)/(4*A*t[i])));
for(int i=0;i<50;i++)
{
for(int j=0;j<10000;j++)
{
dimP2[j] +=-(0.5*ei(-(1/(4*A*t[i]))*(j+1)*pow(len_ri,2)));//*
}
dimP[i]=(-0.5*ei(alpha[i]))+dimP2[j];//**
}
return dimP[i];
}
Or try that if you need to keep the intermediate arrays:
#include
#include "stdafx.h"
#include
#include
#include
using namespace std;
double a[10000],b[10000],x[10000],expint[10000],beta[10000],dimP2[10000];
double t[50],alpha[50],dimP[50];
int i,j;
double ei(double v)
{
double a0,a1,a2,a3,a4,a5,b1,b2,b3,b4,c1,c2,c3,c4;
x[i]=v;
a0 = -0.57721566;
a1 = 0.99999193;
a2 = -0.24991055;
a3 = 0.05519968;
a4 = -0.00976004;
a5 = 0.00107857;
b1 = 8.5733287401;
b2 = 18.059016973;
b3 = 8.6347608925;
b4 = 0.2677737343;
c1 = 9.5733223454;
c2 = 25.6329561486;
c3 = 21.0996530827;
c4 = 3.9584969228;
if (x[i]<=0)
{
expint[i] = -999;
}
if (x[i]>=1)
{
a[i] = pow(x[i],4)+(b1*pow(x[i],3))+(b2*pow(x[i],2))+(b3*x[i])+b4;
b[i] = pow(x[i],4)+(c1*pow(x[i],3))+(c2*pow(x[i],2))+(c3*x[i])+c4;
expint[i] = (1/(x[i]*exp(x[i])))*a[i]/b[i];
}
if((0 {
expint[i] = a0+(a1*x[i])+(a2*pow(x[i],2))+(a3*pow(x[i],3))+(a4*pow(x[i],4))+(a5*pow(x[i],5))-log(x[i]);
}
return expint[i];
}
double time_hr()
{
double N=49.0;
for (int i=0;i<50;i++)
{
t[i] = 0.01*exp((i/N)*log(10/0.01));
}
return t[i];
}
double pD()
{
double rw = 0.25;
double ac = 43560;
double A = 80*ac;
double len_b = sqrt(0.5*A);
double len_a = 2*len_b;
double len_ri =0.5*sqrt(pow(len_a,2)+pow(len_b,2));
alpha[i] = (-(pow(rw,2)/(4*A*t[i])));
for(i=0;i<50;i++) // USE THE GLOBAL i because it is used in ei function
{ // but it is certainly the j that you want ...
// sorry I can't imagine whatyou want to do !
for(int j=0;j<10000;j++)
{
dimP2[j] +=-(0.5*ei(-(1/(4*A*t[i]))*(j+1)*pow(len_ri,2)));//*
}
dimP[i]=(-0.5*ei(alpha[i]))+dimP2[j];//**
}
return dimP[i];
}
Last thing: In function pD, you should initialize the dimP2 otherwise you use it without any initialization.
for(int j=0;j<10000;j++) {
dimP2[j]=0;
}
]
|
|
|
|
|
Anyone know of a good article on CP on Precompiled Headers? I tried to do a search, but the term is a common one so the number of matches was unhelpful.
|
|
|
|
|
|
Very helpful links!
Thanks!
|
|
|
|
|
Is there a single function to get a window's client rectangle in screen coordinates. I know other ways to do this but I was hoping there was a function to do it.
Ive had a look around but could not find anything. If you know please tell me. Thanks!
|
|
|
|
|
|
|
Thanks. I thought Id used the function before but I must have been mistaken. Thanks anyway!
|
|
|
|
|
Hi everyone,
I have some compilation problems related in using waveInOpen and waveInProc callback function.
Following is snippets of my code:
// function that calls in the waveInOpen
bool WaveIn::Start()
{
// open the wave in device
if(waveInOpen(&hwi, WAVE_MAPPER, &wformat, (DWORD)waveInProc, 0, CALLBACK_FUNCTION) != MMSYSERR_NOERROR) return false;
....
}
// callback function waveInProc
void CALLBACK WaveIn::waveInProc(HWAVEOUT hWaveOut, UINT uMsg, DWORD dwInstance,
DWORD dwParam1, DWORD dwParam2)
{
switch(uMsg)
{
case WIM_DATA:
// ... uses member variables
}
}
The compilation error that I encounter is that waveInOpen parameter 4 (which is the callback function) cannot be casted. I have tried to cast the waveInProc parameter, but to no avail. It compiles alright if I make waveInProc static. However, if I make waveInProc static, it prevents me from modifying the member variables.
Thank you and your solutions are totally appreciated.
Thank you so much and all your comments are appreciated.
|
|
|
|
|
hi..how are you...
i am not sure about waveInOpen and waveInProc...but may i ask for what reason do you want to use this...
i ask this because if it is just to play a wave file there are other ways to do it...
vinnzy
|
|
|
|
|
Vinnzy,
I am actually trying to capture PCM audio using these methods.
Thanks for asking.
|
|
|
|
|
Try this:
//declare global function in the top of .cpp files
LRESULT CALLBACK waveInProc(HWAVEOUT hWaveOut, UINT uMsg, DWORD dwInstance,
DWORD dwParam1, DWORD dwParam2);
WaveIn *wi;
bool WaveIn::Intiate()
{
wi=this;
}
// function that calls in the waveInOpen
bool WaveIn::Start()
{
// open the wave in device
if(waveInOpen(&hwi, WAVE_MAPPER, &wformat, waveInProc, 0, CALLBACK_FUNCTION) != MMSYSERR_NOERROR)
return false;
....
}
//write the funtion of waveInProc
LRESULT CALLBACK waveInProc(HWAVEOUT hWaveOut, UINT uMsg, DWORD dwInstance,
DWORD dwParam1, DWORD dwParam2)
{
//if you need WaveIn class in this function
wi->.....
switch(uMsg)
{
case WIM_DATA:
// ... uses member variables
}
return true
}
All vareables in waveInProc function are global or local in this function.
|
|
|
|
|