Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создаем примтивный калькулятор... Плюс отображение времени... 
:(
    Опции темы
InfMag
Дата 16.1.2005, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



Я вот тока осваиваю Си, и решил рассмотреть исходные коды приведенные вами. Просто лучше всего я начинаю расбираться в любом языке, рассматривая уже готовые коды... (Ну и конечно же желательно с комментаи)

Я вот попрошу знающих написать обычный калькулятор с тремя текстовыми полями. Первое поле - это 1-ое число, второе поле - это соответственно 2-ое число, а уж третье поле - это полученный ответ. Плюс 5 кнопок: Плюс, Минус, Умножение, Деление, Равно...

Зы. Желательно еще и показ времени в caption окна засунуть и показать использование чисел с плавающей точкой.
PM   Вверх
Бегемот
Дата 30.1.2005, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 26.1.2005
Где: На границе Европы и Азии

Репутация: 1
Всего: 3



smile Вот только зачем кнопка равно для такого калькулятора?
Я её убрал.
Программа работает так:
Вводишь числа в поля ввода (первое и второе) и нажимаешь кнопку операции. После чего в третьем поле появляется ответ.
Теперь код.
Обрабатываем нажатие на кнопку операции. Во всех случаях , с разными параметрами, вызывается моя функция описанная ниже…
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
MyFunction(1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
MyFunction(2);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
MyFunction(3);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
MyFunction(4);
}

А вот и та самая функция. В функции определяется какой знак операции был выбран, производится подсчёт и выводится результат, а также обрабатываются два исключения…
Код

void __fastcall TForm1::MyFunction(int sign)
{
try
{
 a = StrToFloat(Edit1->Text);
 b = StrToFloat(Edit2->Text);
}
catch (EConvertError &e)
{
 MessageBox(0,"При вводе дробных чисел используйте запятую.",0,0);
 return;
}
switch(sign)
{
 case  1:        c = a + b;   break;
 case  2:        c = a - b;   break;
 case  3:        c = a * b;   break;
 case  4:  try { c = a / b;}
           catch (EZeroDivide &e)
           {
            MessageBox(0,"Делитель не должен быть равен нулю.",0,0);
            Edit2->SetFocus();
            return;
           }                  break;
}
Edit3->Text = FloatToStrF(c,ffGeneral,7,2);
}

И наконец время в заголовке окна…
Код

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Form1->Caption = TimeToStr(Time());
}

Ну кажись усё. smile
PM MAIL   Вверх
Nicky
Дата 3.2.2005, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 18.12.2004
Где: Кишинёв

Репутация: 1
Всего: 1



Мне кажется что тут не хватает вот этого (если разберёшься ты молодец):
Код

#include<string.h>
#include<mem.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<dos.h>
#define o 10000L
#define o2 o*o
int c,c1;
FILE *out=fopen("c:\\test.txt","w");
int more(int *x,int *y,int sd)
{
int i,j;
if( (x[0]==0) && (y[0]==0) ) return 2;
if(x[0]>y[0]+sd)  return 0;
if(x[0]<y[0]+sd) return 1;
i=y[0];j=i+sd;
while ( (x[j]==y[i]) && i) {j--;i--; }
if(i==0) return 2;
else return x[j]<y[i];

}
void razn(int *x,int *y, int sd)
{
int i,per=0,tmp;
for(i=1;i<=y[0];i++){
 tmp=x[i+sd]-y[i]-per;
 if(tmp<0){
  per=1;
  x[i+sd]=tmp+o;
 }else  {
  per=0;
  x[i+sd]=tmp;
 }
}
if(per) x[i+sd]-=1;
i=x[0];
while(x[i]==0) i--;
x[0]=i;

}
void mul_c(int *x,int m,int *p)
{
int i,per=0;
long tmp;
for(i=1;i<=x[0];i++){
 tmp=(long)x[i]*m+per;
 p[i]=tmp%o;
 per=tmp/o;
}
if(per){
 p[0]=x[0]+1;
 p[p[0]]=per;
}else   p[0]=m ? x[0]:0;
}
int find(int *x,int *y,int sd)
{
int dn=0,up=o,p[1000],i;
while(up-1>dn){
 memset(p,0,2000);
 mul_c(y,(up+dn)/2,p);
 switch (more(x,p,sd)){
  case 0: dn=(up+dn)/2; break;
  case 1: up=(up+dn)/2; break;
  case 2: up=dn=(up+dn)/2; break;
 }
}
memset(p,0,2000);
mul_c(y,(up+dn)/2,p);
if ( !(more(x,p,0)==1) )
 razn(x,p,sd);
return  (up+dn)/2;
}
int find1(int *x,int *y,int sd,long double qdel)
{
int q,p[1000],x_1,x_2,y_1;
long double tmp;
if( !(more(x,y,x[0]-y[0])==1) ) //0 a>b;1 a<b;2 a=b
 x[0]++; //esli pervue cifru x bolishe(=) to dobavliam lidiruychii 0
x_1=(x[0]>=2) ? x[x[0]-1] : 0;
x_2=(x[0]>=3) ? x[x[0]-2] : 0;
tmp=(long double)x[x[0]]*o2+(long double)x_1*o+x_2;
q=floor( tmp/qdel);
memset(p,0,2000);
mul_c(y,q,p); //esli yvelichiti o to nuzno peredeluvati
c++;
if(more(x,p,sd)==1 ) {
 c1++;
 q--;
 razn(p,y,0);
}
razn(x,p,sd);  /*mozno srazu vuchitati bez more i esli x<0 to + y, q--
        hotia na vremia eto sychestvenno ne povliaet  c  c1  */
return q;
}
void print_l(int *x,char *y)
{
int i,j,n=0,tmp=o/10;
char tch[100];
while(tmp) {tmp/=10;n++;}
y[0]=0;
itoa(x[x[0]],y,10);
for(i=x[0]-1;i>0;i--){
 tmp=x[i];
 for(j=0;j<n;j++){
  itoa(tmp*10L/o,tch,10);
  strcat(y,tch);
  tmp=tmp*10L%o;
 }
}
}
void s_l(int *x,int *y,int *z)
{  int ml,per=0,i,tmp;
ml=(x[0]>y[0])? x[0]:y[0];
 for(i=1;i<=ml;i++){
  tmp=x[i]+y[i]+per;
  z[i]=tmp%o;
  per=tmp/o;
 }
z[0]=ml;
if(per){
 z[0]++;
 z[z[0]]=1;
}
}
void a_al(char *x,int *y)
{
int i=0,i1;
while(x[i++]){
 for(i1=y[0];i1;i1--){
  y[i1+1]+=y[i1]*10L/o;
  y[i1]=y[i1]*10L%o;
 }
 y[1]+=x[i-1]-'0';
 if(y[y[0]+1]) y[0]++;
}
}
void p_l(int *al1,int *al2,int *p)
{
int i,j,per;
long tmp;
for(i=1;i<=al2[0];i++){
 per=0;
 for(j=1;j<=al1[0];j++){
  tmp=1L*al2[i]*al1[j]+per+p[i+j-1];
  per=tmp/o;
  p[i+j-1]=tmp%o;
 }
 if(per)
  p[i+j-1]=per;
}

i=al1[0]+al2[0]+2;
while(p[i]==0) i--;
p[0]=i;

}
void d_l(int *a,int *b,int *rez,int *ost)
{
int i,j,*tmp, sp,d=o/(b[b[0]]+1),y_1;
long double qdel;
if(d>1){
 mul_c(a,d,a);
 mul_c(b,d,b);
}
// y_1=(y[0]>=2) ? y[y[0]-1] : 0; toliko esli delim na odnu cifru
y_1=b[b[0]-1];
qdel=(long double)b[b[0]]*o+y_1;
sp=a[0]-b[0];
if(more(a,b,sp)==1) sp--; //0 a>b;1 a<b;2 a=b
rez[0]=sp+1;
tmp=a;
while(sp>=0){
 rez[sp+1]=find(tmp,b,sp);
//  rez[sp+1]=find1(tmp,b,sp,qdel);
 if(sp==0) break;
 while(more(tmp,b,sp)==1 && sp>0)
  {sp--;rez[sp+1]=0;}
}
for(i=0;i<=tmp[0];i++)
 ost[i]=tmp[i];
}
void main()
{
int al[1000],al1[1000],sl[1000],p[1000],i,del[1000],ost[1000];
struct  time t;
FILE *in=fopen("c:\\un.txt","r");
char a[10000],a1[10000],a3[10000],a4[10000];
clrscr();
for(i=0;i<1000;i++) al[i]= al1[i]=sl[i]=p[i]=del[i]=ost[i]=0;
fscanf(in,"%s",a);
a_al(a,al);
fscanf(in,"%s",a1);
fprintf(out,"a=  %s\n",a);
fprintf(out,"a1=  %s\n",a1);
a_al(a1,al1);
p_l(al,al1,p);
print_l(p,a4);
fprintf(out,"p=a*a1=  %s\n",a4);


gettime(&t);
printf("The current time is: %2d:%02d:%02d.%02d\n",
   t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);
d_l(p,al1,del,ost);
gettime(&t);
printf("The current time is: %2d:%02d:%02d.%02d\n",
   t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);
printf("c = %d  c1 = %d",c,c1);
print_l(del,a1);
print_l(ost,a3);
fprintf(out,"p/a1=%s\n",a1);
fprintf(out,"a=   %s\n",a);
fprintf(out,"p ost a1=  %s\n",a3);
i=0;
}


Возьми отсюда то что тебе нужно smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0625 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.