Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с целыми числами

930
01 мая 2007 года
Sash1k
115 / / 27.04.2007
Есть код на Delphi 7:
 
Код:
procedure TmainForm.BtnClick(Sender: TObject);
 v1, v2, v3, vsr: integer;
begin
 v1 := StrToInt(Edit1.Text);
 v2 := StrToInt(Edit2.Text);
 v3 := StrToInt(Edit3.Text);
 //Считаем среднее v
 vsr := (v1 + v2 + v3)/3;
end;


Выдаёт ошибку:
Цитата:

Incompatible types: 'Integer' and 'Exteded'



Подскажите как правильео посчитать V среднее?

P.S. Если можно дайте рабочий код, сам разберусь когда будет свободное время, спасибо за помощь!

497
01 мая 2007 года
IL84
267 / / 24.04.2003
vsr объявлено как целое, а в результате деления получается extended. Посему надо так:
 
Код:
procedure TmainForm.BtnClick(Sender: TObject);
 v1, v2, v3 : integer;
 vsr : double;
begin
 v1 := StrToInt(Edit1.Text);
 v2 := StrToInt(Edit2.Text);
 v3 := StrToInt(Edit3.Text);
 //Считаем среднее v
 vsr := (v1 + v2 + v3)/3;
end;
930
01 мая 2007 года
Sash1k
115 / / 27.04.2007
проблема в том что мне потом надо v1, v2 и v3 присвоить vsr, если сделать так:
Код:
procedure TmainForm.BtnClick(Sender: TObject);
 v1, v2, v3 : integer;
 vsr : double;
begin
 v1 := StrToInt(Edit1.Text);
 v2 := StrToInt(Edit2.Text);
 v3 := StrToInt(Edit3.Text);
 //Считаем среднее v
 vsr := (v1 + v2 + v3)/3;
 //присваиваем vsr каждому v
 v1 := vsr;
 v2 := vsr;
 v3 := vsr;
end;


то появляется другая ошибка, соответственно:
Цитата:

Incompatible types: 'Integer' and 'Double'



Можно как нибуть Double преобразовать к Integer ?

268
01 мая 2007 года
Михаил
587 / / 25.06.2005
v1:=round(vsr)
497
01 мая 2007 года
IL84
267 / / 24.04.2003
Цитата: Sash1k
проблема в том что мне потом надо v1, v2 и v3 присвоить vsr



В таком случае не проще ли все переменные сделать double?

930
01 мая 2007 года
Sash1k
115 / / 27.04.2007
Цитата: IL84
В таком случае не проще ли все переменные сделать double?



просто переменную Double не вывести в строку, как можно поступись с Integer:

 
Код:
var
 vsr: integer;
begin
 vsr := StrToInt(Edit1.Text);
 Labe1.Caption := IntToStr(vsr);
end;
257
01 мая 2007 года
kosfiz
1.6K / / 18.09.2005
а что FloatToStr и StrToFloat отменили? смотри справку.
930
01 мая 2007 года
Sash1k
115 / / 27.04.2007
Цитата: kosfiz
а что FloatToStr и StrToFloat отменили? смотри справку.


просто IntToStr и StrToInt моё личное предпочтение (может не совпадать с предпочтением более опытных программистов), и ещё не хочется редактировать лишние 200 строк кода, заменяя функции.

309
02 мая 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
vsr := (v1 + v2 + v3)/3; // Incompatible types: 'Integer' and 'Exteded'


Всё правильно. Оператор "/" - это "дробная" операция, посему результат будет с плавающей точкой, который невозможно "автоматически" привести к целому.
Используйте оператор "\" - целочисленное деление. Соответственно, результат будет целочисленного типа.

10
02 мая 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: el scorpio
Используйте оператор "\" - целочисленное деление. Соответственно, результат будет целочисленного типа.


Не суйся с сишным рылом в паскалевский ряд. Целочисленное деление в Паскале обозначается ключевым словом div.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог