sobota, 21 listopada 2015

Klasa służąca do badania występowania, prawa do czytania i zapisywania pliku z konstruktora.

class Dostep_do_pliku
{
private:
char *nazwa_pliku;
bool czy_wystepuje(int x)
{
if(x==0)
  return true;
else
  return false;
}
 
public:
Dostep_do_pliku(char *plik)
{
nazwa_pliku=plik;
     } 
void Czy_istnieje()
{
if(czy_wystepuje(access(nazwa_pliku,F_OK)))
 cout<<"plik - "<<nazwa_pliku<<" istnieje"<<endl;
else
{
if(errno==ENOENT)
 cout<<"Plik "<<nazwa_pliku<<" nie istnieje"<<endl;
 else
   if(errno==EACCES)
     cout<<"Plik "<<nazwa_pliku<<" nie jest dostepny"<<endl;
}
 
}
void Czy_do_odczytu()
{
if(czy_wystepuje(access(nazwa_pliku,R_OK)))
 cout<<"plik - "<<nazwa_pliku<<" mozna czytac"<<endl; 
 else
 cout<<"plik - "<<nazwa_pliku<<" nie mozna czytac"<<endl;
}
void Czy_do_zapisu()
{
if(czy_wystepuje(access(nazwa_pliku,W_OK)))
 cout<<"plik - "<<nazwa_pliku<<" mozna zapisywac"<<endl;
else
 if(errno==EACCES)
  cout<<"plik - "<<nazwa_pliku<< "nie mozna zapisac (brak dostepu)"<<endl;
 else 
   if(errno==EROFS)
  cout<<" plik - "<<nazwa_pliku<<" nie mozna zapisac (tylko do odczytu)"<<endl;
}
 
};
Prosta klasa kopiująca plik do pliku z wykorzystaniem - sendfile.

class COPY
{
private:
int zrodlowy,docelowy;
struct stat bufor;
off_t oft;
public:
COPY(char *zrodlo, char *docel)
{
oft=0;
zrodlowy=open(zrodlo,O_RDONLY);
fstat(zrodlowy,&bufor);
docelowy=open(docel,O_WRONLY | O_CREAT,bufor.st_mode);

}
void Send()
{
sendfile(docelowy,zrodlowy,&oft,bufor.st_size);
}
~COPY()
{
close(zrodlowy);
close(docelowy);
}
};

wtorek, 3 listopada 2015

Serwetka z cykloid, to miła dla oka forma graficzna powstała przez przetwarzanie wzoru matematycznego w pętli - for. Program znalazłem w książce - "C++ Builder. 20 efekektownych programów" - Andrzej Stasiewicza. Jako, że kiedyś częściej chłonąłem produkt Borlanda/Embarcadero, a teraz przesiadłem się na Visual C++, to napisałem kod w środowisku Visual C++ EE 2008. Wystarczyło zrobić kosmetyczne zmiany, wprowadzić zmienne niezbędne do przetwarzania grafiki i niby ruszyło, jednakże nie przeskoczyłem Bulderowej funkcji - RGB, w odpowiedniku MS - FromArgb, gdzie użyłem losowych zmiennych - r,g,b z zakresu -0-255 w postaci jednej funkcji:

int Losowa()
{
int x;
x=rand()%256;
return x;
}
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
srand(time(NULL));
}
private: System::Void Form1_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) {

Graphics^ g1=this->CreateGraphics();
System::Drawing::Color kolor;
int x1=Form1::Width/2,y1=Form1::Height/2;
double OMEGA1=1.,il_obieg=1.;
double R1=Form1::Width/2.,R2=Form1::Width/4.;
double t,max_t,x2,y2,x3,y3,x4,y4;
double M_PI=3.14159265359;
max_t=2*M_PI*il_obieg/OMEGA1;
for(t=0;t<max_t;t+=0.03)
{
x2=x1+(R1-R2)*cos(OMEGA1*t);
y2=y1+(R1-R2)*sin(OMEGA1*t);
x3=x2+R2*cos(-OMEGA1*(R1-R2)/R2*t);
y3=y2+R2*sin(-OMEGA1*(R1-R2)/R2*t);
x4=x2-R2*cos(-OMEGA1*(R1-R2)/R2*t);
y4=y2-R2*sin(-OMEGA1*(R1-R2)/R2*t);
kolor=System::Drawing::Color::FromArgb(Losowa(),Losowa(),Losowa());
Pen^ pioro=gcnew Pen(kolor);
g1->DrawLine(pioro,int(x3),int(y3),int(x4),int(y4));
}
}
};
}