Форум » Clipper » Помогите пожалуйста! » Ответить

Помогите пожалуйста!

apposs: Здраствуйте! Очень нужна помощь, нужно написать программку Калькулятор на языке программирования Clipper, буду очень благодарен: Написать процедуру "Калькулятор", которая вызывается клавишей <F3>. Калькулятор должен выполнять 4 арифмитических действия. В нем должно быть окошко, куда вводятся числа и где отображается результат вычислений ----------- | 50.10 | -----------

Ответов - 64, стр: 1 2 3 4 All

apposs: т.е. каталог где находится программа

apposs: Тут что то точно я не учел, размер вашего .exe файла состовляет: 243кб, а размаер моего 201кб.

TimTim: Извините за оффтоп PSP пишет: У Вас что на экране после запуска Kal.exe? Вспоминаю себя начинающего. На экране чаще всего вот это самое


apposs: После запуска открывается окно с курсором и сразу закрывается.

PSP: Вот: http://files.mail.ru/QTLBAC Это Clipper 5.2е + Blinker 5.1 Переименуйте в *.zip Распаковать нужно в папку C:\CL52 В папке PRG лежит исходник. Там же есть батник c.bat Просто запустите этот батник. Все должно собраться.

apposs: я уже и все повторил, результат тоже самый.

PSP: apposs пишет: я уже и все повторил, результат тоже самый. См.выше. И еще совет: пользуйтесь каким-нибудь файл-менеджером. К примеру, Far-ом. Вам проще будет (и нам тоже ).

apposs: Все сработало, спасибо огромное PSP. Теперь буду укорачивать код и разберусь в причина, почему у меня не запускалась прграммка.

Dima: apposs Компилируй c ключом -n

apposs: PSP пишет: См.выше. И еще совет: пользуйтесь каким-нибудь файл-менеджером. К примеру, Far-ом. Вам проще будет (и нам тоже ). Хорошо спасибо

apposs: И так, укоротил я код калькуратора, как мне нужно было. Подскажите пожалуйста как сделать, чтобы калькулятор вызывался клавишей <F3>. И еще у меня такая проблемка: после выполнения какого либо арифмитического действия, калькулятор выдает ошибку. Т.е если я пишу 2+2, по нажатию Enter он выдает правильный результат "=4", после я жму Enter, выдает ошибку. Приходиться заного запускать программку "Калькулятор" для последующего арифмитического действия. Код: #include "inkey.ch" PROCEDURE Main() PRIVATE calc_str := SPACE(255) PRIVATE back_shad := "W/N" set scor off setcolor ("w/bg+") clear Calcit() RETURN ****************** PROCEDURE Calcit() LOCAL l_eft:=SETKEY(K_LEFT,),r_ight:=SETKEY(K_RIGHT,) SETKEY(K_ALT_F1,) PARA cBack_shad,is_load_font PRIVATE x_pos:=1,y_pos:= 1 PRIVATE sav_screen,ss,st,a,str_tmp,flag,flag_err,buf,scol PRIVATE fl_mem,help_old,col_mn PRIVATE ss11, cc ************************* ** Начальные установки ** ************************* cc:= SETCURSOR() && Сохранить курсор sav_screen:=SAVESCREEN() && Сохранить экран SETCANCEL(.F.) col_mn:=SETCOLOR() ss :=0.0 st := " " flag_err:= 0 flag := 0 fl_mem := 0 INI_CALC(is_load_font) WHILE LASTKEY() <> 27 IF LEN_TRIM(calc_str) = 0 calc_str := "0"+SPACE(253) ENDIF SET COLOR TO +GR/BG SET CURSOR ON calc_str := MEMOEDIT(CALC_STR,2+y_pos, 2+x_pos, 2+y_pos, 20+x_pos, .T. ,"press_d", LEN(calc_str) ) SET CURSOR OFF IF flag = 1 && ВЫЧИСЛЕНИЕ ВЫРАЖЕНИЯ st := STRTRAN(calc_str,"Н"," ") st := STRTRAN(st,chr(10)," ") st := STRTRAN(st,chr(13)," ") st := STRTRAN(st,"="," ") st:=STRTRAN(st,"%","/100*") st_1 := SUBSTR(st,1,1) && ОЦЕНКА ПЕРВОГО СИМВОЛА СТРОКИ IF (st_1 >= "0" .and. st_1 <= "9") .or. st_1 = "+" .or. st_1 = "-" .or. st_1 = "(" ss := &st && ВЫЧИСЛЕНИЕ ELSE flag_err := 1 && ОШИБКА ENDIF IF flag_err = 0 && ЕСЛИ ОШИБКИ ВЫЧИСЛЕНИЯ НЕТ str_tmp:=ALLTRIM(STR(ss)) calc_str := ALLTRIM(STR(ss))+SPACE(255-LEN(str_tmp)) flag := 0 *********************** &&-- ОБРАБОТКА ОШИБКИ ВЫРАЖЕНИЯ -------------- ELSE buf:=SAVESCREEN(2+y_pos, 2+x_pos, 2+y_pos, 18+x_pos) scol := SETCOLOR() SET COLOR TO *+R/G @ 2+y_pos, 2+x_pos SAY " ERROR! PRESS SPACE" INKEY(0) flag_err := 0 ENDI ENDI END ********************************** ** ОБРАБОТКА ЦИФРОВЫХ КЛАВИШ ** ********************************** FUNCTION PRESS_D key := LASTKEY() DO CASE **************************** ** арифметические действия ** **************************** CASE key = 42 y1 := 5+y_pos x1 := 1+x_pos ch := '*' CASE key = 47 y1 := 5+y_pos x1 := 5+x_pos ch := '/' CASE key = 43 y1 := 5+y_pos x1 := 9+x_pos ch := '+' CASE key = 45 y1 := 5+y_pos x1 := 13+x_pos ch := '-' CASE key = 46 y1 := 5+y_pos x1 := 17+x_pos ch := '.' ENDCASE *************************** ** обработка знака = , enter ** *************************** IF key = 61 .or. key = 13 KEYBOARD CHR(23) flag := 1 ENDI ******************************* ** ПРОРИСОВКА КАЛЬКУЛЯТОРА ** ******************************* PROC INI_CALC(is_load_font) is_load_font:=IF(is_load_font=NIL,.F.,is_load_font) SET COLOR TO +G/B @ 1+y_pos, 1+x_pos, 3+y_pos, 22+x_pos BOX IF(!is_load_font," "," ") FUNCTION LEN_TRIM PARAMETERS str RETU LEN(ALLTRIM(str)) RETURN

PSP: Могу скинуть документацию в формате NortonGuide по Clipper 5.2 Надо?

apposs: Да надо PSP, скиньте пожалуйста.

PSP: http://webfile.ru/4391532 Полное описание комманд, функций, операторов. Описание ошибок. Есть справка по ClipperTools3. Вьювер для просмотра этого формата: http://www.davep.org/norton-guides/WEGSetup.exe

apposs: Спасибо вам большое PSP.

apposs: http://webfile.ru/4391532 Файлобменник перегружен . Незнаете как долго будет перегружен?

apposs: Все скачал!

apposs: Блин ни чего не получается, что же это такое. Как сделать что бы при делении на "0", программа выдовала ошибку. Не могу использовать правильно IF .. ELSE .. . Вот отрывок из кода IF flag = 1 && ВЫЧИСЛЕНИЕ ВЫРАЖЕНИЯ st := STRTRAN(calc_str,"Н"," ") st := STRTRAN(st,chr(10)," ") st := STRTRAN(st,chr(13)," ") st := STRTRAN(st,"="," ") st:=STRTRAN(st,"%","/100*") st_1 := SUBSTR(st,1,1) && ОЦЕНКА ПЕРВОГО СИМВОЛА СТРОКИ IF (st_1 >= "0" .and. st_1 <= "9") .or. st_1 = "+" .or. st_1 = "-" .or. st_1 = "(" ss := &st && ВЫЧИСЛЕНИЕ ELSE flag_err := 1 && ОШИБКА ENDIF IF flag_err = 0 && ЕСЛИ ОШИБКИ ВЫЧИСЛЕНИЯ НЕТ str_tmp:=ALLTRIM(STR(ss)) calc_str := ALLTRIM(STR(ss))+SPACE(255-LEN(str_tmp)) flag := 0 *********************** &&-- ОБРАБОТКА ОШИБКИ ВЫРАЖЕНИЯ -------------- ELSE buf:=SAVESCREEN(2+y_pos, 2+x_pos, 2+y_pos, 18+x_pos) scol := SETCOLOR() SET COLOR TO *+R/G @ 2+y_pos, 2+x_pos SAY " ERROR!" INKEY(0) flag_err := 0 ENDI ENDI Ппомогите!

PSP: Переменная flag_err будет равна 1, если не выполнится условие (st_1 >= "0" .and. st_1 <= "9") .or. st_1 = "+" .or. st_1 = "-" .or. st_1 = "(". Переменная st_1 равна первому символe строки st. Если st - это выражение, которое должен вычислить калькулятор, то первый символ ничего не даст при определении деления на 0.

apposs: PSP покажите пожалуйста на примере, как осуществить "деление на ноль запрещено"



полная версия страницы