#include<fstream>
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
// Using global streams as in your original code
ofstream outputcharge( "rcdc_charge.txt" ) ;
ofstream outputdis( "rcdc_discharge.txt" ) ;
class rcdc {
float r, c, ti, tf, qc, ic, id, qce, qde, qo, qd, t, h;
int i, n;
public :
void getdatac( ) ;
void calculatec( ) ;
} ;
void rcdc:: getdatac ( ) {
cout << "Enter the value of resistance (r) and capacitance (c): " ;
cin >> r >> c;
cout << "\n Enter initial time, final time, and step size (h): " ;
cin >> ti >> tf >> h;
n = ( tf - ti) / h;
t = ti;
qce = 0 ; // Analytical starting charge
qo = 3 ; // Maximum charge (Q0)
qde = qo; // Starting charge for discharge
// Writing headers to files
outputcharge << "Time\t Charge(qc)\t Charge_Euler(qce)" << endl;
outputdis << "Time\t Charge(qd)\t Charge_Euler(qde)" << endl;
}
void rcdc:: calculatec ( ) {
for ( i = 1 ; i <= n; i++ ) {
t = t + h;
// --- Charging Circuit Calculations ---
// Formula: q = Q0 * (1 - exp(-t/RC))
qc = qo * ( 1.0 - exp ( - t / ( r * c) ) ) ;
// Current: I = (Q0/RC) * exp(-t/RC)
ic = ( qo / ( r * c) ) * exp ( - t / ( r * c) ) ;
// Numerical approximation (Euler Method)
qce = qce + ( h * ic) ;
// --- Discharging Circuit Calculations ---
// Formula: q = Q0 * exp(-t/RC)
qd = qo * exp ( - t / ( r * c) ) ;
// Current: Id = -dq/dt = (Q0/RC) * exp(-t/RC)
id = ( qo / ( r * c) ) * exp ( - t / ( r * c) ) ;
// Numerical approximation (Euler Method)
qde = qde - ( h * id) ;
// Writing data to files
outputcharge << t << "\t " << qc << "\t " << qce << endl;
outputdis << t << "\t " << qd << "\t " << qde << endl;
}
cout << "\n Simulation complete. Data saved to .txt files." << endl;
}
int main( ) {
rcdc x;
x.getdatac ( ) ;
x.calculatec ( ) ;
outputcharge.close ( ) ;
outputdis.close ( ) ;
return 0 ;
}
I2luY2x1ZGU8ZnN0cmVhbT4KI2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTxpb21hbmlwPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIFVzaW5nIGdsb2JhbCBzdHJlYW1zIGFzIGluIHlvdXIgb3JpZ2luYWwgY29kZQpvZnN0cmVhbSBvdXRwdXRjaGFyZ2UoInJjZGNfY2hhcmdlLnR4dCIpOwpvZnN0cmVhbSBvdXRwdXRkaXMoInJjZGNfZGlzY2hhcmdlLnR4dCIpOwoKY2xhc3MgcmNkYyB7CiAgICBmbG9hdCByLCBjLCB0aSwgdGYsIHFjLCBpYywgaWQsIHFjZSwgcWRlLCBxbywgcWQsIHQsIGg7CiAgICBpbnQgaSwgbjsKCnB1YmxpYzoKICAgIHZvaWQgZ2V0ZGF0YWMoKTsKICAgIHZvaWQgY2FsY3VsYXRlYygpOwp9OwoKdm9pZCByY2RjOjpnZXRkYXRhYygpIHsKICAgIGNvdXQgPDwgIkVudGVyIHRoZSB2YWx1ZSBvZiByZXNpc3RhbmNlIChyKSBhbmQgY2FwYWNpdGFuY2UgKGMpOiAiOwogICAgY2luID4+IHIgPj4gYzsKICAgIGNvdXQgPDwgIlxuRW50ZXIgaW5pdGlhbCB0aW1lLCBmaW5hbCB0aW1lLCBhbmQgc3RlcCBzaXplIChoKTogIjsKICAgIGNpbiA+PiB0aSA+PiB0ZiA+PiBoOwoKICAgIG4gPSAodGYgLSB0aSkgLyBoOwogICAgdCA9IHRpOwogICAgcWNlID0gMDsgLy8gQW5hbHl0aWNhbCBzdGFydGluZyBjaGFyZ2UKICAgIHFvID0gMzsgIC8vIE1heGltdW0gY2hhcmdlIChRMCkKICAgIHFkZSA9IHFvOyAvLyBTdGFydGluZyBjaGFyZ2UgZm9yIGRpc2NoYXJnZQogICAgCiAgICAvLyBXcml0aW5nIGhlYWRlcnMgdG8gZmlsZXMKICAgIG91dHB1dGNoYXJnZSA8PCAiVGltZVx0Q2hhcmdlKHFjKVx0Q2hhcmdlX0V1bGVyKHFjZSkiIDw8IGVuZGw7CiAgICBvdXRwdXRkaXMgPDwgIlRpbWVcdENoYXJnZShxZClcdENoYXJnZV9FdWxlcihxZGUpIiA8PCBlbmRsOwp9Cgp2b2lkIHJjZGM6OmNhbGN1bGF0ZWMoKSB7CiAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIHQgPSB0ICsgaDsKCiAgICAgICAgLy8gLS0tIENoYXJnaW5nIENpcmN1aXQgQ2FsY3VsYXRpb25zIC0tLQogICAgICAgIC8vIEZvcm11bGE6IHEgPSBRMCAqICgxIC0gZXhwKC10L1JDKSkKICAgICAgICBxYyA9IHFvICogKDEuMCAtIGV4cCgtdCAvIChyICogYykpKTsKICAgICAgICAKICAgICAgICAvLyBDdXJyZW50OiBJID0gKFEwL1JDKSAqIGV4cCgtdC9SQykKICAgICAgICBpYyA9IChxbyAvIChyICogYykpICogZXhwKC10IC8gKHIgKiBjKSk7CiAgICAgICAgCiAgICAgICAgLy8gTnVtZXJpY2FsIGFwcHJveGltYXRpb24gKEV1bGVyIE1ldGhvZCkKICAgICAgICBxY2UgPSBxY2UgKyAoaCAqIGljKTsKCiAgICAgICAgLy8gLS0tIERpc2NoYXJnaW5nIENpcmN1aXQgQ2FsY3VsYXRpb25zIC0tLQogICAgICAgIC8vIEZvcm11bGE6IHEgPSBRMCAqIGV4cCgtdC9SQykKICAgICAgICBxZCA9IHFvICogZXhwKC10IC8gKHIgKiBjKSk7CiAgICAgICAgCiAgICAgICAgLy8gQ3VycmVudDogSWQgPSAtZHEvZHQgPSAoUTAvUkMpICogZXhwKC10L1JDKQogICAgICAgIGlkID0gKHFvIC8gKHIgKiBjKSkgKiBleHAoLXQgLyAociAqIGMpKTsKICAgICAgICAKICAgICAgICAvLyBOdW1lcmljYWwgYXBwcm94aW1hdGlvbiAoRXVsZXIgTWV0aG9kKQogICAgICAgIHFkZSA9IHFkZSAtIChoICogaWQpOwoKICAgICAgICAvLyBXcml0aW5nIGRhdGEgdG8gZmlsZXMKICAgICAgICBvdXRwdXRjaGFyZ2UgPDwgdCA8PCAiXHQiIDw8IHFjIDw8ICJcdCIgPDwgcWNlIDw8IGVuZGw7CiAgICAgICAgb3V0cHV0ZGlzIDw8IHQgPDwgIlx0IiA8PCBxZCA8PCAiXHQiIDw8IHFkZSA8PCBlbmRsOwogICAgfQogICAgCiAgICBjb3V0IDw8ICJcblNpbXVsYXRpb24gY29tcGxldGUuIERhdGEgc2F2ZWQgdG8gLnR4dCBmaWxlcy4iIDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewogICAgcmNkYyB4OwogICAgeC5nZXRkYXRhYygpOwogICAgeC5jYWxjdWxhdGVjKCk7CgogICAgb3V0cHV0Y2hhcmdlLmNsb3NlKCk7CiAgICBvdXRwdXRkaXMuY2xvc2UoKTsKCiAgICByZXR1cm4gMDsKfQo=