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));
}
}
};
}


środa, 28 października 2015

"Problem Josephusa" rozwiązany za pomocą użycia struktury i klasy.

struct lista
{
int x;
lista *nastepna;
lista(int a,lista *nastepna2)
{
x=a;
nastepna=nastepna2;

}
   
};
typedef lista *testowa;

class Cykliczna
{
private:
int a,b;
public:
Cykliczna(int x,int y)
{
a=x;
b=y;
int i;
testowa nastepna2=new lista(1,0);
nastepna2->nastepna=nastepna2;
testowa nastepna3=nastepna2;
for(i=2;i<=x;i++)
nastepna3=(nastepna3->nastepna=new lista(i,nastepna2));
while(nastepna3!=nastepna3->nastepna)
{
for(i=1;i<y;i++)
nastepna3=nastepna3->nastepna;
nastepna3->nastepna=nastepna3->nastepna->nastepna;
}

cout<<nastepna3->x<<endl;
}

};

czwartek, 22 października 2015

Gry liczbowe Lotto, które są zarówno szansą na polepszenie materialnego bytu,jak i hazardowym złudzeniem (zakładając iluzoryczne szansę wygrania głównej wygranej), to również doskonałe ćwiczenie na operowaniu na tablicach i poznaniu funkcji random.

#include <iostream>
#include <stdlib.h>
#include <unistd.h>
using namespace std;
void Sortuj(int *tabela, int ile)
{
int i,j,temp;
for(i=1;i<ile;i++)
{
j=i;
temp=tabela[j];
while((j>0) && (tabela[j-1]>temp))
{
tabela[j]=tabela[j-1];
j--;

}
tabela[j]=temp;
}

}
class Gry_liczbowe
{
private:
int *tab,ile;
public:
Gry_liczbowe(int x, int y)
{
int i,j,liczba;
tab=new int[x];
ile=y;
int *zast=new int[x];
for(i=0;i<x;i++)
zast[i]=0;
j=0;
do
{
do
{
 liczba=rand()%x;
 
    }while(zast[liczba]!=0);
    zast[liczba]=1;
    tab[j]=liczba+1;
    ++j;
   }while(j<y);
  Sortuj(tab,ile);
  for(i=0;i<y;i++)
  {
  cout<<tab[i]<<"   ";
  }
  cout<<endl;
  
   
delete zast;

}
~Gry_liczbowe()
{
delete tab;
}
};

int main(int argc, char** argv)
{
srand(time(NULL));
Gry_liczbowe Multi_Multi(80,20);
Gry_liczbowe Lotto(49,6);
Gry_liczbowe Mini_Lotto(42,5);
Gry_liczbowe Kaskada(24,12);

return 0;
}

środa, 21 października 2015

Sortowanie bąbelkowe, wałkowane dawniej w edukacji przy okazji nauki programowania wTurbo Pascalu. Tutaj wersja C/C++.

void sortowanie_babelkowe(int *tablica, int ilosc)
{
int i,j,tymczasowa;
for(i=0;i<ilosc;i++)
{
for(j=ilosc-1;j<=i;j--)
if(tablica[j]<tablica[j-1])
{
tymczasowa=tablica[j-1];
tablica[j-1]=tablica[j];
tablica[j]=tymczasowa;
}
}

}

niedziela, 18 października 2015

Funkcja odwracająca tekst, operująca na tablicach char.

void odwrotnosc(char *wyraz)
{
int dl,i;
dl=strlen(wyraz);
char *odwrotny=new char[dl+1];
for(i=0;i<dl+1;i++)
{
odwrotny[i]=wyraz[dl-1-i];
}
cout<<"Odwrotny tekst od -"<<wyraz<<" jest "<<odwrotny<<endl;
delete odwrotny;
}