IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Калькулятор, длинная арифметика
RathaR
сообщение 25.07.2009 16:29
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: Иван

Репутация: -  7  +


Вот решил написать прогу "калькулятор".
Вчера ночью еще написал функции на "+" и "-", проверил, всё работало железобетонно, но то что писал не сохранилось mega_chok.gif злой рок и електричество...
Начал сегодня писать, вроде написал снова на + и -, плюс работает, но с минусом возникла какаято проблема которую я просто немогу осознать rolleyes.gif
Вот код:

program Kalkyl;

uses Crt;

var
A,B,rez:string;

S1,S2:string;

C:char;

E_e:char;

Dalee:boolean;


function Suma(A,B:string):string; <============ работает правильно

var
I,sub:integer;

L1,L2:integer;

S1,S2,S3:string;

begin

S1:=A;

S2:=B;

L1:=Length(S1);

L2:=Length(S2);

For I:=L2 to L1 do

insert('0',S2,1);

insert('0',S1,1);


S3:='';

Sub:=0;

For I:=L1+1 downto 1 do

If (ORD(S1[I])-48+ORD(S2[I])-48+sub)>9 then begin

S3:=CHR(ORD(S1[I])+ORD(S2[I])-48+sub-10)+S3;

sub:=1;

end

else

begin

S3:=CHR(ORD(S1[I])+ORD(S2[I])-48+sub)+S3;

sub:=0;

end;

if S3[1]='0' then delete(S3,1,1);

Suma:=S3;

end;

function Raznica(A,B:string):string; <==========работает неправильно

var
I,sub:integer;

L1,L2:integer;

S1,S2,S3:string;

begin

S1:=A;

S2:=B;

L1:=Length(S1);

L2:=Length(S2);

for I:=L2 to L1 do

insert('0',S2,1);

insert('0',S1,1);


S3:='';

Sub:=0;

For I:=L1+1 downto 1 do

If (ORD(S1[I])-48-ORD(S2[I])-48-sub)<0 then begin

S3:=CHR(ORD(S1[I])-ORD(S2[I])-sub+10+48)+S3;

sub:=1;

end

else
begin

S3:=CHR(ORD(S1[I])-ORD(S2[I])+48-sub)+S3;

sub:=0;

end;

if S3[1]='0' then delete(S3,1,1);

Raznica:=S3;

end;

procedure Logo;

begin

clrscr;

gotoxy(15,1);

textcolor(lightblue);

Writeln('Калькулятор');

gotoxy(15,2);

textcolor(white);

end;

function Opr_d(C:char):string;

begin

case C of

'+':Opr_d:='сложение';
'-':Opr_d:='вычитание';
'*':Opr_d:='произведение';
'/':Opr_d:='деление'

else Opr_d:='Некоректные данные';
end;

end;

procedure Vvod;

begin

gotoxy(2,6);

writeln('Введите первое число и нажмите "Enter".');

gotoxy(2,8);

textcolor(red);

write('Первое число: ');

textcolor(white);

readln(A);

gotoxy(2,10);

write('Введите необходимое действие и нажмите "Enter: ');

readln©;

gotoxy(2,12);

textcolor(red);

write('Необходимо выполнить : ');

textcolor(white);

write(Opr_d©);

gotoxy(2,14);

writeln('Введите второе число и нажмите "Enter"');

gotoxy(2,16);

textcolor(red);

write('Второе число: ');

textcolor(white);

readln(B);

end;

procedure Rezultat;

begin

case C of

'+':rez:=Suma(A,B);

'-':rez:=Raznica(A,B);
end;

gotoxy(10,20);

writeln('Решение: ');

write(A,' ',C,' ',B,' = ',rez);

end;

BEGIN

logo;

gotoxy(2,4);

write('Нажмите "Enter" чтобы продолжить, или "Escape" чтобы выйти');

Dalee:=false;

while Dalee=false do

begin

E_e:=readkey;

if E_e=chr(27) then exit;

if E_e=char(13)then Dalee:=true;

delline;

end;

Vvod;

Rezultat;

readln;

END.


помогите найти ошибку в функции Raznica rolleyes.gif

и еще... я когда запускаю программу прямо с Fpc 2.2.2. то сначала всё что на екране пишет иероглифами, а после первого нажатия - нормально, а после последнего нажатия, когда должно вывести результат, выводит результат и снова всё слова становятся иероглифами, причом происходит это только в полноекранном режиме, если в окне всё норм, и когда запускаю програму с ексешника, в окне, тоже всё норм

И вообще был бы рад выслушать замечания какие есть, как было бы лучше организовать программу...

Сообщение отредактировано: RathaR - 25.07.2009 16:31


--------------------
Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик!
Я - системный аналитик!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
RathaR   Калькулятор   25.07.2009 16:29
volvo   Как минимум - нужно заменить на более правильный в...   25.07.2009 21:04
RathaR   Как минимум - нужно заменить на более правильный ...   25.07.2009 22:00
volvo   Во-первых: function O_gen(K:integer):string; var ...   25.07.2009 22:14
RathaR   Доделал программу, всё работает :) volvo большое ...   25.07.2009 22:55
RathaR   И снова я со всё темеже проблемами, на этот раз та...   26.07.2009 20:05
volvo   Показывай реализацию функции Proizvedenie.   26.07.2009 20:36
RathaR   Показывай реализацию функции Proizvedenie. Funct...   26.07.2009 20:46
volvo   Неправда: writeln(Proizvedenie('12', ...   26.07.2009 20:55
RathaR   Неправда: writeln(Proizvedenie('12', ...   26.07.2009 21:16
volvo   Значит, твоя функция имеет побочный эффект, и, что...   26.07.2009 21:30
RathaR   Значит, твоя функция имеет побочный эффект, и, чт...   26.07.2009 21:53
volvo   Внутри функции Proizvedenie очищай массив M: for i...   26.07.2009 22:06
RathaR   Внутри функции Proizvedenie очищай массив M: [cod...   26.07.2009 22:27
volvo   Нормальный результат: 362880 (видно при пошаговом ...   26.07.2009 23:30


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.06.2025 21:04
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"