#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#define max 1000
void init_Random()
{
srand(time(NULL));
}
int is_First(int value)
{
int i,sum;
sum=0;
for(i=1;i<value+1;i++)
if(value%i==0)
++sum;
if(sum==2)
return 1;
else
return -1;
}
int *tab,fd;
void *take;
char *test_file="first_numbers2";
void init_Tab()
{
int i,j;
tab=malloc(max*sizeof(int));
i=0;
j=2;
do
{
if(is_First(j)==1)
{
tab[i]=j;
++i;
}
++j;
}while(i<max);
}
void make_File(int file)
{
lseek(file,0x100+1,SEEK_SET);
write(file,"",1);
lseek(file,0,SEEK_SET);
}
int main(int argc, char **argv)
{
int i;
init_Random();
init_Tab();
fd=open(test_file,O_RDWR | O_CREAT, S_IWUSR | S_IRUSR);
make_File(fd);
take=mmap(0,0x100,PROT_WRITE,MAP_SHARED,fd,0);
close(fd);
for(i=0;i<max;i++)
{
sprintf((char*)take,"%d\n",tab[i]);
}
munmap(take,0x100);
return 0;
}
niedziela, 28 października 2018
niedziela, 2 września 2018
pthread_create, pthread_join (gcc)
vim three_creads.c
#include <math.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define max 100
struct int_params
{
int int_value;
int count;
};
struct double_params
{
double double_value;
int count;
};
struct char_params
{
char char_value;
int count;
};
int *int_tab;
char *char_tab;
double *double_tab;
void init_Tables()
{
int i;
int_tab=(int*) calloc (max,sizeof(int));
char_tab=(char*) calloc(max,sizeof(char));
double_tab=(double*) calloc(max,sizeof(double));
for(i=0;i<max;i++)
{
int_tab[i]=i+1;
char_tab[i]='=';
double_tab[i]=sqrt(1.*int_tab[i]);
}
}
void delete_Tables()
{
free(double_tab);
free(char_tab);
free(int_tab);
}
void *int_Print(void *value)
{
int i;
struct int_params *temp=(struct int_params*) value;
for(i=0;i<temp->count;i++)
{
printf("%d ",temp->int_value);
printf("\n");
}
return NULL;
}
void *char_Print(void *value)
{
int i;
struct char_params *temp=(struct char_params*) value;
for(i=0;i<temp->count;i++)
{
printf("%c ",temp->char_value);
printf("\n");
}
return NULL;
}
void *double_Print(void *value)
{
int i;
struct double_params *temp=(struct double_params*) value;
for(i=0;i<temp->count;i++)
{
printf("%.2f ",temp->double_value);
printf("\n");
}
return NULL;
}
pthread_t int_id,char_id,double_id;
int main()
{
int i;
init_Tables();
struct int_params i_P[max];
struct char_params c_P[max];
struct double_params d_P[max];
for(i=0;i<max;i++)
{
i_P[i].int_value=int_tab[i];
i_P[i].count=max;
c_P[i].char_value=char_tab[i];
c_P[i].count=max;
d_P[i].double_value=double_tab[i];
d_P[i].count=max;
}
pthread_create(&int_id,NULL,&int_Print,&*i_P);
pthread_create(&char_id,NULL,&char_Print,&*c_P);
pthread_create(&double_id,NULL,&double_Print,&*d_P);
pthread_join(int_id,NULL);
pthread_join(char_id,NULL);
pthread_join(double_id,NULL);
delete_Tables();
return 0;
}
gcc -o three_creads three_creads.c -lpthread -lm
#include <math.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define max 100
struct int_params
{
int int_value;
int count;
};
struct double_params
{
double double_value;
int count;
};
struct char_params
{
char char_value;
int count;
};
int *int_tab;
char *char_tab;
double *double_tab;
void init_Tables()
{
int i;
int_tab=(int*) calloc (max,sizeof(int));
char_tab=(char*) calloc(max,sizeof(char));
double_tab=(double*) calloc(max,sizeof(double));
for(i=0;i<max;i++)
{
int_tab[i]=i+1;
char_tab[i]='=';
double_tab[i]=sqrt(1.*int_tab[i]);
}
}
void delete_Tables()
{
free(double_tab);
free(char_tab);
free(int_tab);
}
void *int_Print(void *value)
{
int i;
struct int_params *temp=(struct int_params*) value;
for(i=0;i<temp->count;i++)
{
printf("%d ",temp->int_value);
printf("\n");
}
return NULL;
}
void *char_Print(void *value)
{
int i;
struct char_params *temp=(struct char_params*) value;
for(i=0;i<temp->count;i++)
{
printf("%c ",temp->char_value);
printf("\n");
}
return NULL;
}
void *double_Print(void *value)
{
int i;
struct double_params *temp=(struct double_params*) value;
for(i=0;i<temp->count;i++)
{
printf("%.2f ",temp->double_value);
printf("\n");
}
return NULL;
}
pthread_t int_id,char_id,double_id;
int main()
{
int i;
init_Tables();
struct int_params i_P[max];
struct char_params c_P[max];
struct double_params d_P[max];
for(i=0;i<max;i++)
{
i_P[i].int_value=int_tab[i];
i_P[i].count=max;
c_P[i].char_value=char_tab[i];
c_P[i].count=max;
d_P[i].double_value=double_tab[i];
d_P[i].count=max;
}
pthread_create(&int_id,NULL,&int_Print,&*i_P);
pthread_create(&char_id,NULL,&char_Print,&*c_P);
pthread_create(&double_id,NULL,&double_Print,&*d_P);
pthread_join(int_id,NULL);
pthread_join(char_id,NULL);
pthread_join(double_id,NULL);
delete_Tables();
return 0;
}
gcc -o three_creads three_creads.c -lpthread -lm
sobota, 1 września 2018
Dynamic libraries in C (gcc)
vim my_cpp_function.so
bool test_First(int value)
{
int i,sum;
sum=0;
for(i=1;i<value+1;i++)
if(value%i==0)
++sum;
if(sum==2)
return true;
else
return false;
}
int is_First(int value)
{
if(test_First(value))
return 1;
else
return -1;
}
double value_Average(int *tab, int size);
{
int i,sum;
double value;
value=1.0;
sum=0;
for(i=0;i<size;i++)
{
sum+=tab[i];
}
value=(1.*sum)/(1.*size);
return value;
}
vim test_dynamic.c
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
#define max 1000
int main()
{
int *tab_First;
char *text_Error;
int is_F(int value);
double v_A(int *tab, int size);
double average;
int i,j;
#ifdef __cplusplus
extern "C"
{
#endif
int is_First (int value);
double value_Average(int *tab, int size);
#ifdef __cplusplus
}
#endif
void *handle=dlopen("my_cpp_function.so",RTLD_LAZY);
if(!handle)
{
fprintf(stderr,"%s\n",dlerror());
exit(EXIT_FAILURE);
}
dlerror();
*(void**)(&is_F)=dlsym(handle,"is_First");
if((text_Error=dlerror())!=NULL)
{
fprintf(stderr,"%s\n",text_Error);
exit(EXIT_FAILURE);
}
*(void**)(&v_A)=dlsym(handle,"value_Average");
if((text_Error=dlerror())!=NULL)
{
fprintf(stderr,"%s\n",text_Error);
exit(EXIT_FAILURE);
}
tab_First=(int*) calloc(max,sizeof(int));
if(tab_First==NULL)
exit(1);
i=0;
j=2;
do
{
if(is_F(j))
{
tab_First[i]=j;
++i;
}
++j;
}while(i<max);
average=v_A(tab_First,max);
for(i=0;i<max;i++)
{
printf("%d \n",tab_First[i]);
}
printf("Average: %.2f ",average);
printf("\n");
dlclose(handle);
free(tab_First);
return 0;
}
gcc -shared -rdynamic -o test_dynamic test_dynamic.c -ldl
bool test_First(int value)
{
int i,sum;
sum=0;
for(i=1;i<value+1;i++)
if(value%i==0)
++sum;
if(sum==2)
return true;
else
return false;
}
int is_First(int value)
{
if(test_First(value))
return 1;
else
return -1;
}
double value_Average(int *tab, int size);
{
int i,sum;
double value;
value=1.0;
sum=0;
for(i=0;i<size;i++)
{
sum+=tab[i];
}
value=(1.*sum)/(1.*size);
return value;
}
vim test_dynamic.c
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
#define max 1000
int main()
{
int *tab_First;
char *text_Error;
int is_F(int value);
double v_A(int *tab, int size);
double average;
int i,j;
#ifdef __cplusplus
extern "C"
{
#endif
int is_First (int value);
double value_Average(int *tab, int size);
#ifdef __cplusplus
}
#endif
void *handle=dlopen("my_cpp_function.so",RTLD_LAZY);
if(!handle)
{
fprintf(stderr,"%s\n",dlerror());
exit(EXIT_FAILURE);
}
dlerror();
*(void**)(&is_F)=dlsym(handle,"is_First");
if((text_Error=dlerror())!=NULL)
{
fprintf(stderr,"%s\n",text_Error);
exit(EXIT_FAILURE);
}
*(void**)(&v_A)=dlsym(handle,"value_Average");
if((text_Error=dlerror())!=NULL)
{
fprintf(stderr,"%s\n",text_Error);
exit(EXIT_FAILURE);
}
tab_First=(int*) calloc(max,sizeof(int));
if(tab_First==NULL)
exit(1);
i=0;
j=2;
do
{
if(is_F(j))
{
tab_First[i]=j;
++i;
}
++j;
}while(i<max);
average=v_A(tab_First,max);
for(i=0;i<max;i++)
{
printf("%d \n",tab_First[i]);
}
printf("Average: %.2f ",average);
printf("\n");
dlclose(handle);
free(tab_First);
return 0;
}
gcc -shared -rdynamic -o test_dynamic test_dynamic.c -ldl
sobota, 18 sierpnia 2018
Symmetrical drawing - C++ Builder
private: // User declarations
int centr_x,centr_y,width,height;
void __fastcall line_C(TImage *t);
void __fastcall ellipse_C(TImage *t);
void __fastcall rectangle_C(TImage *t,int x,int y, int width, int height);
void __fastcall using_R(TImage *t);
void __fastcall line_D(TImage *t);
TColor __fastcall draw_Color(int value);
void __fastcall chaos_R();
void __fastcall chaos_E();
void __fastcall left_R();
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
width=Image1->Width;
height=width;
centr_x=width/2;
centr_y=centr_x;
srand(time(NULL));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::line_C(TImage *t)
{
t->Canvas->MoveTo(0,0);
t->Canvas->LineTo(width,height);
t->Canvas->MoveTo(0,height);
t->Canvas->LineTo(width,0);
}
void __fastcall TForm1::ellipse_C(TImage *t)
{
int r=10;
int i;
for(i=r;i<width;i+=r)
{
t->Canvas->Ellipse(centr_x,centr_y,i,i);
}
}
void __fastcall TForm1::rectangle_C(TImage *t,int x,int y, int width, int height)
{
t->Canvas->MoveTo(x,y);
t->Canvas->LineTo(x+width,y);
t->Canvas->LineTo(x+width,y+height);
t->Canvas->LineTo(x,y+height);
t->Canvas->LineTo(x,y);
}
void __fastcall TForm1::using_R(TImage *t)
{
int i;
int r=10;
int x,y;
x=width-200;
y=200;
for(i=0;i<width;i+=r)
rectangle_C(t,i,height-i,r*3,r*3);
}
void __fastcall TForm1::line_D(TImage *t)
{
int i,j;
int r=5;
t->Canvas->Pen->Color=clGreen;
for(i=centr_x;i<width;i+=r)
{
t->Canvas->MoveTo(centr_x,centr_y);
t->Canvas->LineTo(i,height);
}
t->Canvas->Pen->Color=clRed;
for(j=centr_y;j<height;j+=r)
{
t->Canvas->MoveTo(centr_x,centr_y);
t->Canvas->LineTo(width,j);
}
}
TColor __fastcall TForm1::draw_Color(int value)
{
TColor color;
switch(value)
{
case 0: color=clBlack;break;
case 1: color=clRed; break;
case 2: color=clBlue;break;
case 4: color=clGreen;break;
case 5: color=clYellow;break;
case 6: color=clFuchsia;break;
case 7: color=clLime;break;
case 8: color=clPurple;break;
case 9: color=clGray;break;
default: color=clWhite;
}
return color;
}
void __fastcall TForm1::chaos_R()
{
int min,max,i,value,random;
int left,top;
min=3,max=25;
TColor temp_Color;
for(i=0;i<30;i++)
{
random=rand()%10;
value=min+rand()%(max-min);
temp_Color=draw_Color(random);
Image1->Canvas->Pen->Color=temp_Color;
Image2->Canvas->Pen->Color=temp_Color;
Image3->Canvas->Pen->Color=temp_Color;
Image4->Canvas->Pen->Color=temp_Color;
left=rand()%centr_x;
top=centr_y+rand()%centr_y;
rectangle_C(Image1,left,top,value,value);
rectangle_C(Image2,left,top,value,value);
rectangle_C(Image3,left,top,value,value);
rectangle_C(Image4,left,top,value,value);
}
}
void __fastcall TForm1::chaos_E()
{
int min,max,i,value_x,value_y,random;
int left,top;
min=3,max=25;
TColor temp_Color;
for(i=0;i<15;i++)
{
random=rand()%10;
value_x=min+rand()%(max-min);
value_y=min+rand()%(max-min);
temp_Color=draw_Color(random);
Image1->Canvas->Pen->Color=temp_Color;
Image2->Canvas->Pen->Color=temp_Color;
Image3->Canvas->Pen->Color=temp_Color;
Image4->Canvas->Pen->Color=temp_Color;
left=centr_x+rand()%centr_x;
top=rand()%centr_y;
Image1->Canvas->Ellipse(left,top,left-value_x,top-value_y);
Image2->Canvas->Ellipse(left,top,left-value_x,top-value_y);
Image3->Canvas->Ellipse(left,top,left-value_x,top-value_y);
Image4->Canvas->Ellipse(left,top,left-value_x,top-value_y);
}
}
void __fastcall TForm1::left_R()
{
int width=35;
TColor temp_Color;
int random;
random=rand()%10;
temp_Color=draw_Color(random);
Image1->Canvas->Pen->Color=temp_Color;
Image2->Canvas->Pen->Color=temp_Color;
Image3->Canvas->Pen->Color=temp_Color;
Image4->Canvas->Pen->Color=temp_Color;
rectangle_C(Image1,5,5,width,width);
rectangle_C(Image2,5,5,width,width);
rectangle_C(Image3,5,5,width,width);
rectangle_C(Image4,5,5,width,width);
random=rand()%10;
temp_Color=draw_Color(random);
Image1->Canvas->Pen->Color=temp_Color;
Image2->Canvas->Pen->Color=temp_Color;
Image3->Canvas->Pen->Color=temp_Color;
Image4->Canvas->Pen->Color=temp_Color;
Image1->Canvas->MoveTo(5,5);
Image1->Canvas->LineTo(width,width);
Image1->Canvas->MoveTo(5,width);
Image1->Canvas->LineTo(width,5);
Image2->Canvas->MoveTo(5,5);
Image2->Canvas->LineTo(width,width);
Image2->Canvas->MoveTo(5,width);
Image2->Canvas->LineTo(width,5);
Image3->Canvas->MoveTo(5,5);
Image3->Canvas->LineTo(width,width);
Image3->Canvas->MoveTo(5,width);
Image3->Canvas->LineTo(width,5);
Image4->Canvas->MoveTo(5,5);
Image4->Canvas->LineTo(width,width);
Image4->Canvas->MoveTo(5,width);
Image4->Canvas->LineTo(width,5);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
line_C(Image1);
line_C(Image2);
line_C(Image3);
line_C(Image4);
ellipse_C(Image1);
ellipse_C(Image2);
ellipse_C(Image3);
ellipse_C(Image4);
using_R(Image1);
using_R(Image2);
using_R(Image3);
using_R(Image4);
line_D(Image1);
line_D(Image2);
line_D(Image3);
line_D(Image4);
chaos_R();
chaos_E();
left_R();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
niedziela, 15 lipca 2018
Point density. StringGrid. C++ Builder
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
srand(time(NULL));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::init_first_Table()
{
int i,j,x;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
x=rand()%100+1;
if(x%2==0)
{
tab1[i][j]=1;
StringGrid1->Cells[i][j]="1";
}
else
{
tab1[i][j]=0;
StringGrid1->Cells[i][j]="O";
}
}
}
}
void __fastcall TForm1::init_second_Table()
{
int i,j;
for(i=0;i<30;i++)
for(j=0;j<30;j++)
tab2[i][j]=0;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
if((i-1>-1) && tab1[i-1][j]==1)
tab2[i][j]++;
if((i-1>-1) && (j-1>=0))
if(tab1[i-1][j-1]==1)
tab2[i][j]++;
if((j-1>-1) && (tab1[i][j-1]==1))
tab2[i][j]++;
if((i+1<=30) && (j-1>-1))
if(tab1[i+1][j-1]==1)
tab2[i][j]++;
if((i+1<=30) && (tab1[i+1][j]==1))
tab2[i][j]++;
if((i+1<30) && (j+1<30))
if(tab1[i+1][j+1]==1)
tab2[i][j]++;
if((j+1<30) && (tab1[i][j+1]==1))
tab2[i][j]++;
if((i-1>-1) && (j+1<30))
if(tab1[i-1][j+1]==1)
tab2[i][j]++;
if(tab1[i][j]==1)
tab2[i][j]++;
}
}
for(i=0;i<30;i++)
for(j=0;j<30;j++)
StringGrid2->Cells[i][j]=IntToStr(tab2[i][j]);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
init_first_Table();
init_second_Table();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
niedziela, 17 czerwca 2018
Sorting different types and connecting to records (C++ Builder)
void Change(char*text1,char*text2)
{
char temp[40];
strcpy(temp, text1);
strcpy(text1,text2);
strcpy(text2,temp);
}
void sort_Char(char **text, int size)
{
int i,j;
for(int i=0;i<size;i++)
{
for (int j=i;j<size;j++)
{
if(strcmp(text[i],text[j])>0)
Change(text[i],text[j]);
}
}
}
void double_Sort(double *table, int size)
{
int i,j;
double temp;
for(i=1;i<size;i++)
for(j=size-1;j>=i;j--)
if(table[j]<table[j-1])
{
temp=table[j-1];
table[j-1]=table[j];
table[j]=temp;
}
}
void int_Sort(int *table, int size)
{
int i,j;
int temp;
for(i=1;i<size;i++)
for(j=size-1;j>=i;j--)
if(table[j]<table[j-1])
{
temp=table[j-1];
table[j-1]=table[j];
table[j]=temp;
}
}
struct Planet
{
char name[20];
int radius;
double mass_Earth;
};
struct Planet *m_Planet;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
int i,j;
m_Planet=new struct Planet[8];
strcpy(m_Planet[0].name,"Mercury");
m_Planet[0].radius=2440;
m_Planet[0].mass_Earth=0.055;
strcpy(m_Planet[1].name,"Venus");
m_Planet[1].radius=6052;
m_Planet[1].mass_Earth=0.815;
strcpy(m_Planet[2].name,"Earth");
m_Planet[2].radius=6371;
m_Planet[2].mass_Earth=1.00;
strcpy(m_Planet[3].name,"Mars");
m_Planet[3].radius=3390;
m_Planet[3].mass_Earth=0.107;
strcpy(m_Planet[4].name,"Jupiter");
m_Planet[4].radius=69911;
m_Planet[4].mass_Earth=317.8;
strcpy(m_Planet[5].name,"Saturn");
m_Planet[5].radius=58232;
m_Planet[5].mass_Earth=95.16;
strcpy(m_Planet[6].name,"Uranium");
m_Planet[6].radius=25362;
m_Planet[6].mass_Earth=14.54;
strcpy(m_Planet[7].name,"Neptune");
m_Planet[7].radius=24622;
m_Planet[7].mass_Earth=17.15;
for(i=0;i<8;i++)
{
ListBox1->Items->Add(m_Planet[i].name);
ListBox2->Items->Add(IntToStr(m_Planet[i].radius));
ListBox3->Items->Add(FloatToStr(m_Planet[i].mass_Earth));
}
int temp_Radius[8];
double temp_Mass[8];
char **temp_Name;
temp_Name=new char*[40];
for(i=0;i<40;i++)
temp_Name[i]=new char[8];
for(i=0;i<8;i++)
{
temp_Radius[i]=m_Planet[i].radius;
temp_Mass[i]=m_Planet[i].mass_Earth;
strcpy(temp_Name[i],m_Planet[i].name);
}
double_Sort(temp_Mass,8);
int_Sort(temp_Radius,8);
sort_Char(temp_Name,8);
for(i=0;i<8;i++)
{
ListBox4->Items->Add(temp_Name[i]);
for(j=0;j<8;j++)
{
if(temp_Radius[i]==m_Planet[j].radius)
{
ListBox5->Items->Add(IntToStr(temp_Radius[i])+" - "+m_Planet[j].name);
break;
}
}
for(j=0;j<8;j++)
{
if(temp_Mass[i]==m_Planet[j].mass_Earth)
{
ListBox6->Items->Add(FloatToStr(temp_Mass[i])+" - "+m_Planet[j].name);
break;
}
}
}
}
czwartek, 7 czerwca 2018
Computer name, user and IP. C++ Builder
#include <vcl.h>
#include <winsock.h>
#define SIZE_NAME 48
#define SIZE_USER 36
class INFO
{
public:
UnicodeString computer_Name();
UnicodeString user_Name();
UnicodeString my_IP();
};
UnicodeString INFO::computer_Name()
{
DWORD value_Size=SIZE_NAME;
UnicodeString value_Name;
wchar_t *tab_Name;
tab_Name=new wchar_t[SIZE_NAME];
tab_Name[0]='\0';
GetComputerName(tab_Name,&value_Size);
value_Name=UnicodeString(tab_Name);
delete tab_Name;
return value_Name;
}
UnicodeString INFO::user_Name()
{
DWORD value_Size=SIZE_USER;
UnicodeString value_Name;
wchar_t *tab_Name;
tab_Name=new wchar_t[SIZE_USER];
tab_Name[0]='\0';
GetUserName(tab_Name,&value_Size);
value_Name=UnicodeString(tab_Name);
return value_Name;
}
UnicodeString INFO::my_IP()
{
hostent* temp_Info;
bool begin=true;
in_addr *temp_Address;
UnicodeString comp_Name;
AnsiString comp_String;
AnsiString value_Ansi;
UnicodeString value_Unicode;
comp_Name=computer_Name();
comp_String=comp_Name;
if(begin)
{
WORD temp_Version=MAKEWORD(1,0);
WSADATA temp_Data;
WSAStartup(temp_Version,&temp_Data);
}
temp_Info=gethostbyname(comp_String.c_str());
comp_String=(AnsiString)(temp_Info->h_name);
temp_Address=(in_addr*)(*(temp_Info->h_addr_list));
value_Ansi=(AnsiString)inet_ntoa(*temp_Address);
value_Unicode=value_Ansi;
WSACleanup();
return value_Unicode;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
INFO iF;
Edit1->Text=iF.user_Name();
Edit2->Text=iF.computer_Name();
Edit3->Text=iF.my_IP();
}
Subskrybuj:
Posty (Atom)



