PDA

View Full Version : گفتگو: کمک در نوشتن ماشین حساب گرافیکی



REZAsys
جمعه 30 بهمن 1388, 14:38 عصر
اول می خواستم بدونم که چه طوری میشه دکمه های ماشین حساب رو طراحی کرد .دوم خود ماشین حساب باید با چه توابعی برنامه نویسی بشه؟

Salar Ashgi
جمعه 30 بهمن 1388, 15:17 عصر
دوست عزیز هدف خود را مشخص کنید ، تا به سوالتان به درستی پاسخ داده شود .

در کنسول یا VC ؟

REZAsys
جمعه 30 بهمن 1388, 17:38 عصر
منظور من در توربو یا بورلند بود

amin1softco
جمعه 30 بهمن 1388, 20:24 عصر
شما یک نگاهی به برنامه های نوشته شده به زبان سی بنداز تو اعلان ها بالا چندین نمونه نوشته شده هست

REZAsys
شنبه 01 اسفند 1388, 12:51 عصر
کسی نمی تونه به من کمک کنه؟ضمنا برنامه ای که شما میگید پیدا نکردم لینک کنید لطفا:ناراحت:

amin1softco
شنبه 01 اسفند 1388, 14:25 عصر
#include <math.h>
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define ENTER 13
#define BKSP 8
const int MAX=20;
const int ESC=27;
struct key{
int x;
int y;
char p;
};
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~*/
struct key keys[]={
{31,11,'('},{36,11,')'},{41,11,'^'},{46,11,16},
{31,13,'7'},{36,13,'8'},{41,13,'9'},{46,13,'/'},
{31,15,'4'},{36,15,'5'},{41,15,'6'},{46,15,'*'},
{31,17,'1'},{36,17,'2'},{41,17,'3'},{46,17,'-'},
{31,19,'0'},{36,19,'.'},{41,19,'='},{46,19,'+'},
};
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~*/
int pr[]={17,0,16,12,13,14,8,9,10,4,5,6};
int getkey(void )
{
int key,low,high;
key=getch();
return (key) ? key : getch()+256;
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~*/
void press(int i)
{
window(keys[i].x,keys[i].y,keys[i].x+3,keys[i].y);
textbackground(WHITE);
textcolor(1);
clrscr();
cprintf(" %c",keys[i].p);
delay(50);
window(keys[i].x,keys[i].y,keys[i].x+3,keys[i].y);
textbackground(BLACK);
textcolor(WHITE);
clrscr();
cprintf(" %c",keys[i].p);
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~*/
void display(char *s)
{
int len=strlen(s);
window(31,8,49,9);
textbackground(WHITE);
textcolor(BLACK);
clrscr();
if (!len) len++;
gotoxy(19-len-1,2);
if (strlen(s)==0) cprintf("0.");
else if (!strchr(s,'.')) cprintf("%s.",s);
else cprintf("%s ",s);
}
/************************************************** ****************/
void ftoa(char *s,double x)
{
sprintf(s,"%f",x);
int i=strlen(s)-1;
while(s[i]=='0') s[i--]=0;
if (s[i]=='.') s[i--]=0;
if (!x) strcpy(s,"");
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~*/
void calculater()
{
int ch,op=0;
double x=0,y=0,k=0;
char str[50]={0};
char str2[50]={0};
display(str);
/************************************************** ****************/
do {
ch=getkey();
switch (ch){
case '.':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':{
char st[]={ch,0};
press(pr[ch-'.']);
if(strlen(str) < 14 ){
if (ch!='.')
strcat(str,st);
else
if (!strchr(str,'.'))
strcat(str,st);
display(str);
}
}
break;
case '+':
case '-':
(ch=='+') ? press(19) : press(15);
if (!k){
x=atof(str);
strcpy(str2,str);
}else
switch(op){
case 1:x+=atof(str);
break;
case 2:x-=atof(str);
break;
case 3:x*=atof(str);
break;
case 4:x/=atof(str);
break;
}
ftoa(str,x);
display(str);
op = (ch=='+') ? 1 : 2;
k=1;
strcpy(str,"");
break;
case '*':
case '/':
(ch=='*') ? press(11) : press(7);
if (!k){
x=atof(str);
strcpy(str2,str);
}else
switch(op){
case 1:x+=atof(str);
break;
case 2:x-=atof(str);
break;
case 3:x*=atof(str);
break;
case 4:{double y;
y=atof(str);
if (y) x/=atof(str);
}
break;
}
ftoa(str,x);
display(str);
op = (ch=='*') ? 3 : 4;
k=1;
strcpy(str,"");
break;
/************************************************** **********/
case '(':{
double x;
press(0);
/* x=atof(str);
if(x>0) {
x=sqrt(x);
ftoa(str,x);
display(str);
}*/
}
break;
/************************************************** **********/
case ')': {
double x;
press(1);
// x=atof(str);
// x*=-1;
// ftoa(str,x);
// display(str);
}
break;
/************************************************** **********/
case '=':
case ENTER:
press(18);
if (!op) x=atof(str);
else if ( k ) y=atof(str);
else y=atof(str2);
switch(op){
case 1: x+=y;
break;
case 2: x-=y;
break;
case 3: x*=y;
break;
case 4: x/=y;
break;
}
ftoa(str,x);
display(str);
k=0;
break;
/************************************************** ****************/
case BKSP:{
press(3);
int i=strlen(str);
if (i){
str[i-1]=0;
display(str);
}
}
break;
/************************************************** ****************/
case '^':
press(2);
op=0;
x=0,y=0,k=0;
strcpy(str,"");
strcpy(str2,"");
display(str);
continue;
}
}while(ch!=ESC);
}
/************************************************** ****************/
void menu4(void);
void meno1(void)
{ _setcursortype(_NOCURSOR);
textbackground(1);
clrscr();
textbackground(0);
window(7,6,19,10);
clrscr();
textbackground(19);
textcolor(15);
window(6,5,18,9);
clrscr();
gotoxy(1,2);cprintf(" Esc :Exit ");
gotoxy(1,3);cprintf(" Enter :Result ");
gotoxy(1,4);cprintf(" Bksp :Undo ");
window(31,8,52,21);
textbackground(0) ;
clrscr();
window(30,7,50,20);
textbackground(19);
clrscr();
window(31,8,49,9);
textbackground(7);
textcolor(YELLOW);
clrscr();
_setcursortype(_NOCURSOR);
for (int i=0 ; i<MAX ;i++){
window(keys[i].x,keys[i].y,keys[i].x+3,keys[i].y);
textbackground(0);
textcolor(15);
clrscr();
cprintf(" %c",keys[i].p);
}
}
void main()
{
int i;
meno1();
calculater();
_setcursortype(_NORMALCURSOR);
clrscr();
}


این یکیش بود
http://www.barnamenevis.org/forum/showthread.php?t=150444
پست آخر را ببین