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

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

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

 
 Ответить  Открыть новую тему 
> Класс целых чисел
сообщение
Сообщение #1


Новичок
*

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

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


привет всем! Не могу понять почему программа так работает. вычитание и умножение считает правильно. А сложение нет...
Нужно создать класс целых чисел. реализуя арифметические операции, х - класса tint. Помогите пожалуйста

program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

type tint=class
data:integer;
procedure impdata(x:integer);
function outdata:integer;
procedure add(x:tint);
procedure sub(x:tint);
procedure mul(x:tint);
end;
procedure tint.impdata;
begin
data:=x;
end;
function tint.outdata;
begin
result:=data;
end;
procedure tint.add;
begin
data:=data+x.data;
end;
procedure tint.sub;
begin
data:=data-x.data;
end;
procedure tint.mul;
begin
data:=data*x.data;
end;
Var a,b:tint;
begin
{ TODO -oUser -cConsole Main : Insert code here }
a:=tint.Create;
a.impdata(6);
b:=tint.create;
b.impdata(3);
a.sub(b);
writeln('result sub=',a.outdata);
a.add(b);
writeln('result add=',a.outdata);
a.mul(b);
writeln('result mul=',a.outdata);
a.Free;b.Free;
readln;
end.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






С чего ты решил, что неправильно?

Сначала отнимается 3, потом к результату прибавляется 3, а потом результат умножается на 3...

Вот и выходит 3, 6, 18 ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Спасибо большое! Это я видимо вычитать разучился..
А как можно сделать деление в классе целых чисел??
Подскажите пожалуйста как с помощью TRY..EXCEPT можно записать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


деление на множестве целых - операция неопределимая даже с математической точки зрения.
только если целочисленное делать. или с округлением до ближайшего целого.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


А как можно сделать целочисленное??

procedure del(x:tint);
. . .
procedure tint.del;
begin
data:=data/x.data;
. . .
try
a:=tint.Create;
a.impdata(6);
b:=tint.create;
b.impdata(3);
a.del(b);
except ???



Будет правильным?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Лучше
data:=data div x.data;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


А после except ничего писать не нужно??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


У меня программа выдаёт 2 ошибки:
-record,object or class type required
-'end' expected but end of file found.
Нашёл следующее:
try
{исполняемый код};
except
on Exception1do {код, исполняемый в случае возникновения ошибки 1};
else
{код, обработчик всех не перехваченных ранее ошибок};
end;
А что мне надо записать вместо Exception1 и нужен ли мне else??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


можно с помощью try/except отлавливать деление на 0.

-'end' expected but end of file found.

естественно.
у конструкции вид
try
{защищенный блок}
except
{обработка исключения}
end;


в твоем коде не разобралась.

procedure del(x:tint); //замечательно: для одного числа вызываем, второе передаем
. . .
procedure tint.del; //куда делось передаваемое как параметр?
begin
data:=data/x.data; //data:integer; не летают такие самолеты....
. . .



в общем, у тебя 2 пути: либо
data:=data div x.data

либо
data:=round(data/x.data)

смотря какой результат хочешь получать.
я бы сделала именно это действие внутри защищенного блока try/except
причем по except можно просто выдавать сообщение, что поделить не удалось (или можно проверять, дело в делении на ноль или в чем-то еще), а значение data оставлять старым.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


СПАСИБО БОЛЬШОЕ ЗА ПОМОЩЬ!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 30.09.2020 7:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name