-
ماشین حساب گرافیکی که جمع و ضرب و تفریق اعداد تا 128 رقم رو میتونه خیلی سریع حساب کنه ( ماشین حساب ویندوز تا 32 رقم اجازه میده ) .
کد این برنامه رو به صورت خیلی ساده و با استفاده از آرایه ها نوشتم. از تابع ضرب اون برای حساب کردن فاکتوریل اعداد بزرگ نیز میشه استفاده کرد. و برای قسمت گرافیکی آن به ناچار از Turbo C++ 3.0 استفاده کردم.
[php]
#include <graphics.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
#include <dos.h>
#define ESC 0x1b
#define EXIT 120
void draw(void);
void getArray( int[],char& );
void printArray( int[] );
void reverseArray( int[] );
void plus(int[], int[], int[]);
void minus(int[], int[], int[]);
void multiple(int[], int[], int[] );
void initgraph();
void animate( char );
void wellcome(void);
void error(void);
int main(void)
{
char func='n';
int value1[128] ,
value2[128] ,
result[128] = {0};
initgraph();
wellcome();
draw();
getArray( value1, func );
reverseArray( value1 );
getArray( value2, func );
reverseArray( value2 );
switch( func )
{
case '+':
plus(value1, value2, result);
break;
case '-':
minus(value1, value2, result);
break;
case '*':
multiple(value1, value2, result);
break;
default: cout << "Oh sorry! You made a mistake.";
}
printArray ( result );
if(getch() == ESC )
{
cleardevice();
main();
}
closegraph();
return 0;
}
/*=================Draw===========*/
void draw (void)
{
int x = getmaxx();
int y = getmaxy();
settextstyle(2,HORIZ_DIR,4);
setfillstyle(SOLID_FILL, LIGHTBLUE);
bar(x / 2 - 210, 50, x / 2 + 210, 270);
setfillstyle(SOLID_FILL, WHITE);
bar(x / 2 - 200, 60, x / 2 + 200, 155);
setcolor(BLACK);
line(125,120,x / 2 + 190, 120);
line(125,125,x / 2 + 190, 125);
setfillstyle(SOLID_FILL, BLUE);
setcolor(BLUE);
int Y = 165;
for ( int i = 0; i < 3; i++)
{
int X = 220;
for ( int j = 0; j < 4; j++)
{
bar3d(X,Y,X + 25,Y + 25,3,1);
X += 35;
if ( j == 2 )
X += 15;
}
Y += 35;
}
bar3d(375,165,410,260,3,1);
setcolor(WHITE);
outtextxy(230,172,"1");
outtextxy(265,172,"2");
outtextxy(300,172,"3");
outtextxy(350,172,"+");
outtextxy(230,207,"4");
outtextxy(265,207,"5");
outtextxy(300,207,"6");
outtextxy(350,207,"-");
outtextxy(390,207,"=");
outtextxy(230,242,"7");
outtextxy(265,242,"8");
outtextxy(300,242,"9");
outtextxy(350,242,"x");
}
/*======= initgraph ===============*/
void initgraph()
{
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "C:\\tc\\bgi\\");
}
/*=====================getArray===============*/
void getArray( int value1[], char& func )
{
int xpos = 115, ypos = 65;
if( func != 'n' ) ypos += 3 * textheight("1");
for ( int i = 0; i<128; i++ )
value1[i] = -1;
int digit = 0;
char c;
char* cc;
while(digit < 128)
{
setcolor(BLUE);
c = getch();
animate(c);
if ( c == '+' )
{
func = '+';
outtextxy(125,65 + 2 * textheight("1"),"+");
return;
}
else if ( c == '-' )
{
func = '-';
outtextxy(125,65 + 2 * textheight("1"),"-");
return;
}
else if ( c == '*' )
{
func = '*';
outtextxy(125,65 + 2 * textheight("1"),"x");
return;
}
else if ( (int)c == 13 )
{
return;
}
else if ( c == ESC )
{
cleardevice();
main();
}
else if ( c == EXIT )
{
exit(0);
}
else
value1[digit++] = c - 48;
cc[0] = c;
cc[1] = '\0';
if( digit == 65 )
{
xpos = 115;
ypos += textheight("1");
}
xpos += textwidth("1");
outtextxy(xpos,ypos,cc);
}
return;
}
/*===================printArray==================== ===*/
void printArray( int value[])
{
int digit = 0, xpos = 115, ypos = 130;
char* cc;
cc[1] = '\0';
char c;
for ( digit = 0; digit < 128 && value[digit] == 0; digit++)
{
}
if ( digit == 127 )
outtextxy(115 + textwidth("1"),130,"0");
for(int count = 0 ; digit < 128; digit++,count++)
{
c = value[digit] + 48;
cc[0] = c;
xpos += textwidth("1");
if ( count == 65 )
{
ypos += textheight("1");
xpos = 121;
}
outtextxy(xpos,ypos,cc);
}
return;
}
/*===================plus========================== ===*/
void plus(int value1[], int value2[], int result[])
{
for ( int i = 127; i >= 0 && value1[i] >= 0; i-- )
result[i] += value1[i];
for (i = 127; i >= 0 && value2[i] >= 0; i-- )
result[i] += value2[i];
for ( i = 127; i >= 0; i-- )
{
if ( (result[1] / 10) + result[0] > 9 )
error();
if ( result[i] > 9 )
{
result[i-1] += result[i] / 10;
result[i] %= 10;
}
}
}
/*====================reverseArray===============*/
void reverseArray( int a[] )
{
int size = 127, temp;
for ( int i = 0; i < 128; i++ )
{
if ( *(a + i) == -1 )
{
size = i - 1;
break;
}
else
continue;
}
for ( i = 0; i <= size; i++ )
{
temp = *(a + size - i);
*(a + size - i) = *(a + 127 - i);
*(a + 127 - i ) = temp;
}
return;
}
/*========================minus==================== ===*/
void minus(int value1[], int value2[], int result[])
{
int big;
for ( int i = 0; i < 128; i++ )
{
if ( value2[i] > value1[i] )
{
big = 2;
break;
}
if ( value1[i] > value2[i] )
{
big = 1;
break;
}
}
if ( big == 1 )
{
for ( i = 127; i >= 0 && value1[i] >= 0; i-- )
result[i] += value1[i];
for ( i = 127; i >= 0 && value2[i] >= 0; i-- )
result[i] -= value2[i];
}
if ( big == 2 )
{
for ( i = 127; i >= 0 && value2[i] >= 0; i-- )
result[i] += value2[i];
for ( i = 127; i >= 0 && value1[i] >= 0; i-- )
result[i] -= value1[i];
outtextxy(115,130,"-");
}
for ( i = 127; i >= 0; i-- )
{
if ( (result[1] / 10) + result[0] > 9 )
error();
if ( result[i] < 0 )
{
result[i] += 10;
result[i-1]--;
}
}
return;
}
/*===========================multiple============== ===========*/
void multiple( int value1[], int value2[], int result[] )
{
int size1 = 127, size2 = 127;
for ( int i = 127; i >= 0; i-- )
{
if ( *(value1 + i) == -1 )
{
size1 = 127 - i;
break;
}
else
continue;
}
for (i = 127; i >= 0; i-- )
{
if ( *(value2 + i) == -1 )
{
size2 = 127 - i;
break;
}
else
continue;
}
if( size1 + size2 > 129 )
error();
/* cal */
for (int j = 0; j < size2; j++)
{
for( i = 0; i < size1; i++)
*(result + 127 - i - j) += *(value1 + 127 - i ) * *(value2 + 127 - j);
}
for ( i = 127; i >= 0; i-- )
{
if ( (result[1] / 10) + result[0] > 9 )
error();
if ( result[i] > 9 )
{
result[i-1] += result[i] / 10;
result[i] %= 10;
}
}
}
/*=========== animate============*/
void animate( char ch )
{
const int x[12] = {220,255,290,220,255,290,220,255,290,340,340,340};
const int y[12] = {165,165,165,200,200,200,235,235,235,165,200,235};
char* cc;
int k;
cc[0] = ch;
cc[1] = '\0';
if ( ch == '*' ) cc[0] = 'x';
switch(ch)
{
case '1' :
case '2' :
case '3' :
case '4' :
case '5' :
case '6' :
case '7' :
case '8' :
case '9' :
k = int(ch) - 49;
break;
case '+' :
k = 9;
break;
case '-' :
k = 10;
break;
case '*' :
k = 11;
break;
default : return;
}
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(x[k], y[k] - 5, x[k] + 30, y[k] + 25);
setfillstyle(SOLID_FILL,BLUE);
bar(x[k] + 3, y[k] - 2, x[k] + 28, y[k] + 23);
delay(50);
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar(x[k], y[k] - 5, x[k] + 30, y[k] + 25);
setfillstyle(SOLID_FILL,BLUE);
setcolor(BLUE);
bar3d(x[k], y[k], x[k] + 25, y[k] + 25,3,1);
setcolor(WHITE);
outtextxy(x[k] + 10, y[k] + 7,cc);
setcolor(BLUE);
}
/*======= well come ==========*/
void wellcome ( void )
{
cout<<"\n\n\n";
cout<<"\t\tWELCOME TO THE 128 DIGITS CACLULATER "<<endl;
cout<<"\n\n\n\n";
cout<<"FEW POINTS TO USE THIS CALCULATER. "<<endl<<endl;
cout<<"\n1. FIRST YOU NEED TO ENTER AN INTEGERS, THE OPERATOR THEN SECOND INTEGER. "<<endl;
cout<<"\n2. DO NOT ENTER CHARECTER INSTEAD OF INTEGER AS IT MAY CAUSE THE PROGRAM TO STOP RESPONDING."<<endl;
cout<<"\n3. TO CLEAR THE CALCULATOR AND USE AGAIN PRESS ESC"<<endl;
cout<<"\n4. TO EXIT THE PROGRAM PRESS X "<<endl<<endl;
cout<<"\n\n\n\n\n\t\t\twrite by: hossein azarpevand ";
sleep(7);
cleardevice();
}
/*========Error===================*/
void error( void )
{
setcolor(RED);
outtextxy(125,130,"Error.Result is out of range");
getch();
exit(1);
} [/php]
-
نمایش توابع مثلثاتی به فرم aY=Sin bX ,...
[PHP]#include <conio.h>
#include <graphics.h>
#include <math.h>
#include <iostream.h>
#include <dos.h>
#include <stdio.h>
void mehvar();
void mos_1(int,int,int);
void mos_2(int,int,int);
int main()
{
char num[5];
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
for(int i=1;i<5;i++)
for(int j=1;j<5;j++)
for(int k=1;k<5;k++)
{
mos_1(i,j,-k);
delay(1000);
nosound();
}
getch();
return 0;
}
//*******************************
void mehvar()
{
setcolor(15);
int x0,y0;
char num;
x0=getmaxx()/2;
y0=getmaxy()/2;
line(x0-300,y0+10,x0+300,y0+10);//X
line(x0,y0-200,x0,y0+200);//Y
}
//********************
void mos_1(int s,int Y,int X)
{
char num[5];
float deg,x0=320,y0=240;
clearviewport();
mehvar();
deg=-6.28;
while(deg<=6.28)
{
setcolor(14);
switch(s)
{
case 1:
outtextxy(deg*Y*40+x0,sin(deg*X)*40+y0,".");
sprintf(num,"%d",Y);
outtextxy(10,10,num);
outtextxy(20,10,"Y=Sin ");
sprintf(num,"%d",X);
outtextxy(60,10,num);
outtextxy(80,10,"X");
break;
case 2:
outtextxy(deg*Y*40+x0,cos(deg*X)*40+y0,".");
sprintf(num,"%d",Y);
outtextxy(10,10,num);
outtextxy(20,10,"Y=Cos ");
sprintf(num,"%d",X);
outtextxy(60,10,num);
outtextxy(80,10,"X");
break;
case 3:
outtextxy(deg*Y*40+x0,tan(deg*X)*40+y0,".");
sprintf(num,"%d",Y);
outtextxy(10,10,num);
outtextxy(20,10,"Y=sin ");
sprintf(num,"%d",X);
outtextxy(60,10,num);
outtextxy(80,10,"X");
break;
case 4:
outtextxy(deg*Y*40+x0,1/tan(deg*X)*40+y0,".");
sprintf(num,"%d",Y);
outtextxy(10,10,num);
outtextxy(20,10,"Y=Cot ");
sprintf(num,"%d",X);
outtextxy(60,10,num);
outtextxy(80,10,"X");
break;
}
deg+=0.01744;
}
}[/PHP]
-
برنامه كوله پشتي 0-1 به روش برنامه سازي پويا:
[PHP]
#include <iostream.h>
#include <conio.h>
void main()
{
int i,j,n,l,p[10][20];
int weight,w[10];p[10];
cout<<"enter your namber of objects";
cin>>n;
for(i=0;i {
cout<<"enter w"<<"";
cin>>w[i];
cout<<"enter p";
cin>>p[i][0];
}
for(i=0;i p[i][0]=0;
for(j=0;j p[0][j]=0;
for(i=1;i for(j=1;j {
if(w[i]<=j)
{
if(p[i-1][j] < p[i][j]+p[i-1][j-w[i]])
p[i][j]=p[i-1][j-w[i]];
else
p[i][j]=p[i][j]+p[i-1][j-w[i]];
}
else
p[i][j]=p[i-1][j];
cout<< p[i][j];
}
getch();
}
[/PHP]
-
برنامه ی پازل صورت برنامه نویسی back tracking یا همون(برنامه نویسی عقب گرد )
برنامه ی پازل به صورت برنامه نویسی back tracking یا همون(برنامه نویسی عقب گرد )
[PHP]#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// N should be >= 3
#define N 4
int board[N][N];
int showBoard() {
int i,val;
int row,col;
for ( row=0; row<N ; row++)
{
for ( col=0; col<N; col++)
{
if (board[row][col] == N*N){
printf(" *");
}
else {
printf("% 4d", board[row][col]);
}
}
printf("\n");
}
return 0;
}
int findKey(int val, int *v_f, int *v_c) {
int row,col;
*v_f = 0;
*v_c = 0;
if (val >= (N*N))
{
return 1;
}
for ( row=0; row<N ; row++)
{
for ( col=0; col<N; col++)
{
if (board[row][col] == val){
*v_f = row + 1;
*v_c = col + 1;
return 0;
}
}
}
return 1;
}
int findEmpty(int *v_f, int *v_c) {
int row,col;
*v_f = 0;
*v_c = 0;
for ( row=0; row<N ; row++)
{
for ( col=0; col<N; col++)
{
if (board[row][col] == N*N){
*v_f = row + 1;
*v_c = col + 1;
return 0;
}
}
}
return 1;
}
int move(int val) {
int row,col,filv,colv;
int i;
i=findKey(val, &row, &col);
i=findEmpty(&filv, &colv);
if ((row + 1 == filv && col == colv) ||
(row - 1 == filv && col == colv) ||
(row == filv && col + 1 == colv) ||
(row == filv && col - 1 == colv) )
{
board[row - 1][col - 1] = N*N;
board[filv - 1][colv - 1] = val;
return 0;
}
return 1;
}
int loadOrderedBoard() {
int row,col;
srand( (unsigned)time( NULL ) );
for ( row=0; row<N ; row++)
{
for ( col=0; col<N; col++)
{
board[row][col] = row * N + col;
}
}
return 0;
}
int gameOver() {
int row,col;
for ( row=0; row<N ; row++)
{
for ( col=0; col<N; col++)
{
if (board[row][col] != row * N + col + 1)
{
return 1;
}
}
}
return 0;
}
int checkParity() {
int i,j,paridad,dato;
paridad = 0;
for (i=0; i<(N*N) -1; i++)
{
dato = board[i/N][i%N];
if (dato != 16)
{
for (j=i+1; j<(N*N); j++)
{
if (board[j/N][j%N] < dato )
{
paridad++;
}
}
}
else {
paridad += (i/N) + 1;
}
}
return paridad % 2;
}
int fixParity()
{
int buf;
if (board[0][0] != (N*N) && board[0][1] != (N*N))
{
buf = board[0][0];
board[0][0] = board[0][1];
board[0][1] = buf;
}
else {
buf = board[1][0];
board[1][0] = board[1][1];
board[1][1] = buf;
}
}
int cheat()
{
int buf;
buf = board[N-1][N-2];
board[N-1][N-2] = board[N-1][N-3];
board[N-1][N-3] = buf;
return 0;
}
int loadBoard()
{
int i,j;
int base[N][N];
for (i=0; i<N*N; i++)
{
base[i/N][i%N] = 0;
}
srand((unsigned)time(NULL));
i=0;
while (i < N*N)
{
j = (int) ((float) (N*N) * rand() / (RAND_MAX + 1.0));
if (base[j/N][j%N] == 0)
{
base[j/N][j%N] = j+1;
board[i/N][i%N] = j+1;
i++;
}
}
}
int main()
{
int i, moves, option, play;
printf("1- Load random Board\n");
printf("2- Load ordered Board\n");
scanf("%d", &option);
switch (option)
{
case 1: loadBoard();
break;
case 2: loadOrderedBoard();
break;
default:
printf("I don't get that option!\n");
return 0;
break;
}
showBoard();
if (checkParity() != 0)
{
printf("ODD parity - No solution Board!\n");
printf("1- Fix Parity\n");
printf("2- Leave it\n");
scanf("%d", &option);
switch (option)
{
case 1: fixParity();
break;
case 2:
break;
default:
printf("I don't get that option!\n");
return 0;
break;
}
showBoard();
}
moves = 0;
play = 0;
do
{
printf("1 - %d to move\n", N*N-1);
printf("0 to exit\n");
printf("%d to cheat\n", N*N);
printf("Option: ");
scanf("%d", &play);
if (play == N*N)
{
cheat();
}
else if (move(play) == 0)
{
moves ++;
};
showBoard();
if (gameOver() == 0)
{
printf("GAME COMPLETED IN %03d MOVES!\n", moves);
play = 0;
}
printf("\n");
}while (play != 0);
}
[/PHP]
توضیح: برنامه پازل یه ماتریس مثلا 4*4 هستش که حاوی اعداد 1 تا 15 هست و یک خونه ی باقیمانده اون خالیه .این اعداد 1 تا 15 به صورت بههم ریخته توی پازل قرار دارند و برنامه باید به کمک اون خونه ی خالی این اعداد رو به صورت پشت سر هم مرتب میکنه! و ضمنا برنامه این کار رو باید با استفاده از الگوریتم عقب گرد (back tracking ) انجام میده.
-
آخرین سرباز
این برنامه به این صورته که یه چاقو در دست سر باز اولی و اون نفر بعدی رو می کشه و چاقو را به نفر زنده ی بعدی منتقل می کنه و این کار تا جایی ادامه پیدا میکنه که فقط یک سرباز زنده میمونه.(صف سربازان را به صورت حلقوی تصور کنید.)
[PHP]#include<iostream>
#include<conio>
struct node
{
int data;
node*next;
};
void print(node*a,int n)
{
int i;
cout<<"\n";
for(i=1;i<=n;i++)
{
cout<<a->data<<" ";
a=a->next;
}
};
int main()
{
node*a,*first;
int i,j,n;
cout<<"Please enter number of soldiers :";
cin>>n;
for(i=1;i<=n;i++)
{
node*temp=new node;
temp->data=i;
if(i==1)
{
a=temp;
first=a;
}
else
{
a->next=temp;
a=temp;
}
temp->next=first;
}
a=first;
print(a,n);
while(n>1)
{
node*temp=new node;
temp=a->next;
a->next=temp->next;
delete temp;
a=a->next;
n--;
print(a,n);
}
cout<<"\n\nAll soldiers killed except : "<<a->data;
getch();
}[/PHP]
البته برای پیاده سازی اون از لیست پیوندی حلقوی استفاده کرده ام.
-
برنامه ای که بکمک آرایه دو عدد 30 رقمی را با هم جمع و ضرب و تفریق میکند:
[php]#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
void print(char *);
void main()
{
char n1[31]* n2[31]* n3[32];
int i* carry = 0* sum;
clrscr();
cout << "Enter Number 1 (30 Digits): "; cin >> n1;
cout << "Enter Number 2 (30 Digits): "; cin >> n2;
for (i = 29; i >= 0; i --)
{
sum = n1[i] + n2[i] - 96 + carry;
if (sum > 9)
{
sum -= 10;
carry = 1;
}
else carry = 0;
n3[i+1] = sum + 48;
}
n3[0] = carry;
cout << "Sum: ";
print(n3);
getch();
}
void print(char n[31])
{
int i;
for (i=0; i<31; i++)
{
if (i != 0)
cout << n[i];
else if (n[i]==49)
cout << n[i];
}
}[/php]
-
محاسبه ی 1 روی !n تا 60 رقم اعشار
محاسبه ی 1 روی !n تا 60 رقم اعشار
[PHP]#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
main()
{
int q[61],a[61],i,n,s;
printf("\n N ro vared kon ta 1/N! ro hesab konam: ");
scanf("%d",&s);
if(s==1)
{
printf("\n1/1!=1");
getch();
exit (0);
}
for(i=0;i<=60;i++)
{
a[i]=0;
q[i]=0;
}
for(n=2;n<=s;n++)
for(i=0;i<=60;i++)
{
if(n==2 && i==0)
a[0]=1;
q[i]=a[i]/n;
if(q[i]==0)
a[i+1]=a[i]*10+a[i+1];
else
a[i+1]=(a[i]%n)*10+a[i+1];
a[i]=q[i];
}
printf("\n 1/%d!= 0.",s);
for(i=1;i<=60;i++)
printf("%d",a[i]);
getch();
return 0;
}
[/PHP]
-
برنامه يک بر روی e تا ۵۰ اقم اعشار
برنامه يک بر روی e تا ۵۰ اقم اعشار
[PHP]#include<stdio.h>
#include<conio.h>
void main()
{
long int n;
int i,su[51],sm[51],sum[51],x,y,k,w,q[51],a[51];
clrscr();
for(i=0;i<=50;i++)
{
su[i]=0;
sm[i]=0;
a[i]=0;
q[i]=0;
sum[i]=0;
}
for(n=2;n<=1000000;n++)
{
if(n==2)
a[0]=1;
for(i=0;i<=50;i++)
{
q[i]=a[i]/n;
if(q[i]==0)
a[i+1]+=a[i]*10;
else
a[i+1]+=(a[i]%n)*10;
a[i]=q[i];
}
for(i=50;i>=0;i--)
{
if(n%2==0)
{
su[i]+=a[i];
x=su[i]%10;
y=su[i]/10;
if(y!=0)
{
su[i]=x;
su[i-1]+=y;
}
}
else if(n%2!=0)
{
sm[i]+=a[i];
w=sm[i]%10;
k=sm[i]/10;
if(k!=0)
{
sm[i]=w;
sm[i-1]+=k;
}
}
}
}
for(i=50;i>=0;i--)
{
if(su[i]>=sm[i])
sum[i]=su[i]-sm[i];
else if(su[i]<sm[i])
{
sum[i]=10+su[i]-sm[i];
su[i-1]=su[i-1]-1;
}
}
printf("0.");
for(i=1;i<=50;i++)
printf("%d",sum[i]);
getch();
}
[/PHP]
-
اين برنامه زيرمجموعه های يک مجموعه را به شما نشان می دهد. روش کارش هم اينجوريه که اول بايد تعداد اعضای مجموعه را مشخص کنيد .
بعدش هم اعضای مجموعه رو يکی يکی وارد کنيد .
بعد از زدن اينتر زير مجموعه ها مشخص می شوند .
[PHP]#include <stdio.h>
#include <conio.h>
#include<math.h>
int main()
{
int i,j,m,n;
clrscr();
printf("enter number : ");
scanf("%d",&n);
char a[100];
for(i=0;i<n;i++)
{
printf("x%d=",i+1);
scanf("%d",&a[i]);
}
for(j=0;j<pow(2,n);j++)
{
m=j;
printf("{");
for(i=0;i<=j;i++)
{
if(m%2==1)
{
printf("%d",a[i]);
printf(",");
m=(m-1)/2;
}
else m=m/2;
}
printf("}\n");
}
getch();
return 0;
}
[/PHP]
-
پروژه lineeditor
پروژه LINEEDITOR
با این LINEEDITOR می تونید کارهایی مانند ویرایش کلمات حذف insert و یا هر کاری که مربوط به ویرایش است انجام بدید.این برنامه فقط در محیط tc قابل اجراست
[PHP]#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 10
#define SCAPE 27
#define RIGHT 77
#define LEFT 75
#define BACKSPACE 8
#define DELETE 83
#define END 79
#define HOME 71
#define INSERT 82
#define ISCONTROL 0
#define CtrL 12
#define CtrR 18
#define CtrY 25
#define CtrO 15
#define CtrS 19
#define TAB 9
//***********************************************
class LineEditor{
private:
int X,Y,Index,IsInsert,Numchar;
char ch,A[1000],S[12];
void Updatescreen(void){
int i,savepos=wherex()-X;
Peykan();
gotoxy(X,Y);
for(i=Index-savepos;i<Index-savepos+LEN;i++)
if(Numchar>i)
cprintf("%c",A[i]);
else
cprintf(" ");
gotoxy(X+savepos,Y);
}
/************************************************/
void Home (void){
Index=0;
gotoxy(X,Y);
}
/************************************************/
void End (void){
Index=Numchar-1;
if(Numchar<LEN-1){
gotoxy(X+Numchar-1,Y);
}
else{
gotoxy(X+LEN-1,Y);
}
}
/************************************************/
int Left (void){
if(Index==0)
return 0;
Index--;
if(wherex()>X)
gotoxy(wherex()-1,Y);
return 1;
}
/***********************************************/
int Right(void){
if(Index>Numchar-2)
return 0;
Index++;
int k=wherex();
if(k<X+LEN-1)
gotoxy(k+1,Y);
return 1;
}
/************************************************/
void Delete (void){
if(Index<Numchar-1){
for(int i=Index;i<Numchar;i++)
A[i]=A[i+1];
Numchar--;
}
}
/************************************************/
void Insert(char ch){
for(int i=Numchar-1;i>=Index;i--)
A[i+1]=A[i];
A[Index]=ch;
Numchar++;
Right();
}
/************************************************/
void Backspace(void){
if (Left())
Delete();
}
/************************************************/
void Overwrite(char ch){
if(Index==Numchar-1)
Insert(ch);
else{
A[Index]=ch;
Right();
}
}
/************************************************/
void clearleft(void){
int i,savepos=wherex()-X;
for(i=savepos;i>=0;i++)
Backspace();
gotoxy(X,Y);
}
/***********************************************/
void clearright(void){
Index++;
int c=Numchar-Index,i;
for(i=0;i<=c;i++)
Delete();
Index--;
}
/************************************************/
void clear(void){
clearright();
clearleft();
if(Numchar!=1)
Delete();
}
/************************************************/
void save(char S[]){
FILE *fp;
if ((fp=fopen(S,"wb"))==NULL){
gotoxy(X-30,Y+3);
printf("\ncannot open fill...");
getch();
exit(1);
}
fwrite(&A,2*strlen(A),1,fp);
gotoxy(X,Y);
clear();
fclose(fp);
open(S);
}
/************************************************/
void open (char S[]){
FILE *fp;
if ((fp=fopen(S,"rb"))==NULL){
gotoxy(X-30,Y+3);
gotoxy(X,Y);
}
fread(A,sizeof(A),1,fp);
Numchar=strlen(A)+1;
End();
fclose(fp);
}
//**********************************************
void Peykan (void){
int b=wherex();
int a=X+LEN-wherex();
if(Index==0){
gotoxy(X-1,Y);
cprintf(" ");
gotoxy(X,Y);
}
if(Numchar-Index-1>a){
gotoxy(X+LEN,Y);
cprintf("%c",16);
gotoxy(b,Y);
}
else{
gotoxy(X+LEN,Y);
cprintf(" ");
gotoxy(b,Y);
}
if(Index>LEN-1){
gotoxy(X-1,Y);
cprintf("%c",17);
gotoxy(b,Y);
}
if(wherex()-X<Index){
gotoxy(X-1,Y);
cprintf("%c",17);
gotoxy(b,Y);
}
}
//***********************************************
public:
LineEditor(int x,int y,char *s){
X=x;
Y=y;
Numchar=1;
IsInsert=0;
Index=0;
A[Numchar-1]='\0';
strcpy(S,s);
}
//***********************************************
void DetectKeyGo(void){
End();
Updatescreen();
while((ch=getch())!=SCAPE){
if (ch=='\r')
continue;
if((ch==ISCONTROL) || (ch==BACKSPACE) || (ch==CtrL) || (ch==CtrR) || (ch==CtrY) || (ch==CtrS) || (ch==CtrO) || (ch==TAB)){
if(ch==ISCONTROL)
ch=getch();
switch(ch){
case TAB: End();
if(Y<29) gotoxy(X,Y+5);
else gotoxy(X,Y-10);
return;
case END:End(); break;
case LEFT:Left(); break;
case HOME:Home(); break;
case CtrY:clear(); break;
case CtrS:save(S); break;
case CtrO:open(S); break;
case RIGHT:Right(); break;
case DELETE:Delete(); break;
case CtrL:clearleft(); break;
case CtrR:clearright(); break;
case BACKSPACE:Backspace(); break;
case INSERT:IsInsert++;
}}
else if (IsInsert%2==0)
Insert(ch);
else
Overwrite(ch);
Updatescreen();
} exit(0);
}
//************************************************
void Drawline (void){
textbackground(1);
textcolor(4);
gotoxy(X-1,Y);
for(int i=1;i<=LEN+2;i++)
cprintf(" ");
gotoxy(X,Y);
}
};
//***********************************************
void MYNAME(void){
textcolor(7);
gotoxy(26,5);
printf(" << In The Name Of God >>");
gotoxy(25,10);
printf(" << mohammad hadi moghaddami >>");
}
//***********************************************
int main(){
LineEditor L1(33,20,"LineE1.txt"),L2(33,25,"LineE2.txt"),L3(3 3,30,"LineE3.txt");
textbackground(0);
clrscr();
MYNAME();
L3.Drawline();
L2.Drawline();
L1.Drawline();
while(1){
L1.DetectKeyGo();
L2.DetectKeyGo();
L3.DetectKeyGo();
}
return 0;
}
[/PHP]
برچسب برای این موضوع
مجوز های ارسال و ویرایش
- شما نمی توانید موضوع جدید ارسال کنید
- شما نمی توانید به پست ها پاسخ دهید
- شما strong>نمی توانید فایل پیوست ضمیمه کنید
- شما نمی توانید پست های خود را ویرایش کنید
-
قوانین انجمن