Designer Flight Students works Графика Enigma All tutors Gallery Blog Downloads Home


Оконная программа X11 в Unix

Для начала установить поддержку X11 в C++.

sudo apt-get install libx11-dev

После ее остановки написать и откомпилировать программу.
//X11-prog.c :

#include
#include
#include
#include
#include

extern int errno;


int main( void ) {
Display *d;
Window w;
XEvent e;
char *msg = "Hello, World!";
int s;


if( ( d = XOpenDisplay( getenv("DISPLAY" ) ) ) == NULL ) { // Соединиться с X сервером,
printf( "Can't connect X server: %s\n", strerror( errno ) );
exit( 1 );
}
s = DefaultScreen( d );
w = XCreateSimpleWindow( d, RootWindow( d, s ), // Создать окно
10, 10, 200, 200, 1,
BlackPixel( d, s ), WhitePixel( d, s ) );
XSelectInput( d, w, ExposureMask | KeyPressMask ); // На какие события будем реагировать?
XMapWindow( d, w ); // Вывести окно на экран
while( 1 ) { // Бесконечный цикл обработки событий
XNextEvent( d, &e );
if( e.type == Expose ) { // Перерисовать окно
XFillRectangle( d, w, DefaultGC( d, s ), 20, 20, 50, 10 );
XDrawString( d, w, DefaultGC( d, s ), 50, 50, msg, strlen( msg ) );
}
if( e.type == KeyPress ) // При нажатии кнопки - выход
break;
}
XCloseDisplay( d ); // Закрыть соединение с X сервером
return 0;
}


Сборка приложения:

$ gcc X11-prog.c -o X11-prog -lX11
...
Запуск приложения:

$ ./X11-prog

Устранение проблемы доступа к порту 80 (порт HTTP) установке web-сервера Apache на Windows 10

Доступ к порту 80 занимала

служба активации Windows 10

После ее остановки web-сервер Apache установился нормально.

Как остановить службу:

Пуск-Параметры-Система-О системе-Дополнительные средства администрирования-Службы. Там найти службу активации Windows 10, остановить ее через правую кнопку мыши и установить «Тип запуска» в «Отключена»

Программа на C, произносящая фразы на английском языке с использованием MS Speech API

Скачать программу можно здесь >>>
Код консольной программы на C, произносящая фразы на английском языке с использованием MS Speech API
#include <stdio.h>
#include <stdlib.h>
#include <sapi.h>

int _tmain(int argc, _TCHAR* argv[])
{
ISpVoice * pVoice = NULL;
if (FAILED(::CoInitialize(NULL)))
return FALSE;
HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
if( SUCCEEDED( hr ) )
{
hr = pVoice->Speak(L"Hello world", 0, NULL);
wchar_t phrase[1024]=L"yes";
do{
puts("Enter Phrase:");
_getws(phrase);
hr = pVoice->Speak(phrase, 0, NULL);
}while(phrase[0]!=0);
pVoice->Release();
pVoice = NULL;
}
::CoUninitialize();
}
Программа на C, демонстрирующая преобразование символов в числа и обратно
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

void main(void)
{
int a,b;
char ac[10];
int ai,bi;

puts("Enter a pair of numbers");

a=getch();
ai=atoi(&a);
puts(itoa(ai,ac,10));
b=getch();
bi=atoi(&b);
puts(itoa(bi,ac,10));
ai=ai+bi;
puts("Resultat: ");
puts(itoa(ai,ac,10));

getch();
}
Текст программы на Cpp, строящей график функции sin в консольном окне
#include <math.h>
#include <iostream>
using namespace std;

#define PI 3.14159265

int _tmain(int argc, _TCHAR* argv[])
{
int x[80],y[80];
char ar[80][21];
for(int i=0;i<80;i++)
{
x[i]=i;
y[i]=10-10*sin(x[i]/PI);
}
for(i=0;i<80;i++)
for(int j=0;j<20;j++)
if(y[i]==j)
ar[i][j]='*';
else
{ ar[i][j]=' ';
if(j==10) // Оси координат
ar[i][j]='-';
if(i==0)
ar[i][j]='|';
}
for(int j=0;j<20;j++)
{
for(i=0;i<79;i++)
cout<<ar[i][j];
cout<<endl;
}
cin>>i;
return 0;
}
Текст программы на Cpp, строящей график функции sin неограниченной длины в консольном окне
#include <math.h>
#include <iostream>
#include <time.h>
#include <windows.h>
using namespace std;

#define PI 3.14159265
int _tmain(int argc, _TCHAR* argv[])
{
int x,y;
char ar[80];
clock_t cl;

memset(ar,0,80);
for(int i=0;i<1000;i++) //Хоть до бесконечности
{
cl=clock();
while((clock()-cl)<100);
y=40+30*sin(i/PI);
if(sin(i/PI)>.95)
MessageBeep(MB_OK); //Пикает на максимумах
for(int j=0;j<70;j++)
if(y==j)
ar[j]='*';
else
{
ar[j]=' ';
if(j==40)
ar[j]='|'; //Ось координат
}
cout<<ar<<endl;
}
cin>>i;
return 0;
}
Текст программы на Cpp, рекурсивно вызывающей функцию для расчета факториала
#include <iostream>
using namespace std;

int fact(int a) //int - 16!, __int64 - 25!, float - 34!, double - 170!
{
if(a>0)
{
return a*fact(a-1);
}
return 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
int n;
cout<<"Raschet factoriala n!"<<endl;
cout<<"Vvedite chislo n:"<<endl;
cin>>n;
cout<<fact(n)<<endl;
cin>>n;
return 0;
}
Текст программы, сортирующей входной файл и выдающей результат в выходной файл
#include <iostream>
#include <iostream>
#include <fstream>
using namespace std;

int sorty(const void *a,const void *b)
{
if(strcmp((const char*)a,(const char*)b)<0)
return -1;
if(strcmp((const char*)a,(const char*)b)>0)
return 1;
if(strcmp((const char*)a,(const char*)b)==0)
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
ifstream fs1("auto.txt"); //Входной файл со списком автомобилей
ofstream fs2("autos.txt"); //Выходной отсортированный файл

char str[100][20];
int i=0;
while(fs1>>str[i])
{
i++;
}

qsort(&str,i,20,sorty); ///// сортировка с критерием в функции sorty
for(int j=0;j<i;j++)
fs2<<str[j]<<endl;

return 0;
}
Windows-программа, выводящая график sin, демонстрирующая работу с текстом и элементами управления
#define MAX_LOADSTRING 100
#include <math.h>
#define PI 3.14159265
#define ID_BUTTON 1011
#define ID_COMBO 1012

HINSTANCE hInst;

TCHAR szTitle[MAX_LOADSTRING]="Program";
TCHAR szWindowClass[MAX_LOADSTRING]="Sin";
HWND hbutton,hedit,hcombo;
LOGFONT lf;
HFONT hfont,holdfont;
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
MSG msg;
HACCEL hAccelTable;

MyRegisterClass(hInstance);

if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}

while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return (int) msg.wParam;
}

ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_SIN_WIN);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = NULL;

return RegisterClassEx(&wcex);
}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;

hInst = hInstance;

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)
{
return FALSE;
}

lf.lfCharSet=ANSI_CHARSET;
strcpy(lf.lfFaceName,"Arial Black");
lf.lfOrientation=0;
lf.lfEscapement=0;
lf.lfPitchAndFamily=DEFAULT_PITCH;
lf.lfHeight=100;
lf.lfWidth=0;
lf.lfWeight=FW_BLACK;
hfont=CreateFontIndirect(&lf);

hedit=CreateWindow("EDIT","4",ES_AUTOVSCROLL|ES_MULTILINE|WS_BORDER|WS_CHILD|WS_VISIBLE,100,70,40,20,hWnd,NULL,hInst,NULL);

hbutton=CreateWindow("BUTTON","Enter",WS_BORDER|WS_CHILD|WS_VISIBLE,150,70,60,20,hWnd,(HMENU)ID_BUTTON,hInst,NULL);

hcombo=CreateWindow("COMBOBOX",NULL,CBS_DROPDOWN|CBS_SIMPLE|CBS_AUTOHSCROLL|WS_CHILD|WS_VISIBLE|WS_VSCROLL,220,70,60,200,hWnd,(HMENU)ID_COMBO,hInst,NULL);
SendMessage(hcombo,CB_ADDSTRING,0,(LPARAM)"all");
SendMessage(hcombo,CB_ADDSTRING,0,(LPARAM)"sin");
SendMessage(hcombo,CB_ADDSTRING,0,(LPARAM)"cos");
SendMessage(hcombo,CB_ADDSTRING,0,(LPARAM)"log");
SendMessage(hcombo,CB_ADDSTRING,0,(LPARAM)"puls");
SendMessage(hcombo,CB_SETCURSEL,0/*0-й эл-т*/,0);

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc,hcdc;
static RECT rct;
int x,y,dx,dy;
static char factor[3];
static int func;

switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId)
{
case ID_BUTTON:
InvalidateRect(hWnd,&rct,true);
break;
case ID_COMBO:
InvalidateRect(hWnd,&rct,true);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_CREATE:
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
SetBkMode(hdc,OPAQUE);
SetBkColor(hdc,RGB(50,150,100));
lf.lfOrientation=0;
lf.lfEscapement=0;
hfont=CreateFontIndirect(&lf);
holdfont=(HFONT)SelectObject(hdc,hfont);
TextOut(hdc,100,380,"Trigonometry",12); ///Горизонтальный текст
lf.lfEscapement=900;
lf.lfOrientation=900;
hfont=CreateFontIndirect(&lf);
holdfont=(HFONT)SelectObject(hdc,hfont);
TextOut(hdc,10,400,"Functions",9); ///Вертикальный текст
hfont=(HFONT)SelectObject(hdc,holdfont);
SendMessage(hedit,WM_GETTEXT,MAX_LOADSTRING,(LPARAM)factor);
func=SendMessage(hcombo,CB_GETCURSEL,0,0);
SetRect(&rct,100,100,700,400);
Rectangle(hdc,rct.left,rct.top,rct.right,rct.bottom);
MoveToEx(hdc,rct.left,(rct.bottom-rct.top)/2,NULL);
if(func==0||func==1)
for(x=rct.left;x<rct.right;x++)
{
y=(.75*(rct.bottom-rct.top)/2)*sin((x-rct.left)/(atoi(factor)*PI));
LineTo(hdc,x,-y+(rct.bottom-rct.top)/2+rct.top);
}
MoveToEx(hdc,rct.left,(rct.bottom-rct.top)/2,NULL);
if(func==0||func==2)
for(x=rct.left;x<rct.right;x++)
{
y=(.75*(rct.bottom-rct.top)/2)*cos((x-rct.left)/(atoi(factor)*PI));
LineTo(hdc,x,-y+(rct.bottom-rct.top)/2+rct.top);
}
MoveToEx(hdc,rct.left,(rct.bottom-rct.top)/2,NULL);
if(func==0||func==3)
for(x=rct.left;x<rct.right;x++)
{
y=(.15*(rct.bottom-rct.top)/2)*log((x-rct.left));
LineTo(hdc,x,-y+(rct.bottom-rct.top)/2+rct.top);
}
MoveToEx(hdc,rct.left,(rct.bottom-rct.top)/2,NULL);
if(func==0||func==4)
for(x=rct.left;x<rct.right;x++)
{
y=(.5*.75*(rct.bottom-rct.top)/2)*sin((x-rct.left)/(atoi(factor)*PI))+ (.5*.75*(rct.bottom-rct.top)/2)*cos(2*(x-rct.left)/(atoi(factor)*PI))+ (.25*.75*(rct.bottom-rct.top)/2)*sin(4*(x-rct.left)/(atoi(factor)*PI))+ (.0625*.75*(rct.bottom-rct.top)/2)*cos(8*(x-rct.left)/(atoi(factor)*PI))+ (.004*.75*(rct.bottom-rct.top)/2)*sin(16*(x-rct.left)/(atoi(factor)*PI))+ (.0002*.75*(rct.bottom-rct.top)/2)*cos(32*(x-rct.left)/(atoi(factor)*PI)); LineTo(hdc,x,-y+(rct.bottom-rct.top)/2+rct.top);
}
MoveToEx(hdc,rct.left,(rct.bottom-rct.top)/2,NULL);

EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

Обучение в Петербурге.
Программирование на С/С++, Pascal (Delphi).
Программирование баз данных в Delphi, на PHP.
Windows API, OpenGL, DirectX.

yuranoid@gmail.com



Для начинающих программистов в разделе "Download" можно скачать Турбопаскаль 5-й версии и ТурбоСи 3-й версии: TP5 (350 kB), TC3 (3.7 MB)

Home

*Имя:
E-mail:
*Текст:
*Сложите 69577 и 23,
результат введите в это поле: