Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по Delphi 
:(
    Опции темы
starmaster
  Дата 13.5.2004, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 29.3.2004

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



Подскажите, пожалуйста, как отделить последнюю цифру числа, для решения следующей задачи: Вводятся числа a и b. Найти количество таких чисел в диапазоне [a;b], которые при возведении в куб дают число с последней цифрой 4? Благодарю!
PM MAIL WWW ICQ   Вверх
_hunter
Дата 13.5.2004, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



подели на 10, округли до целых, умнож на 10 и отними от исходного числа результат


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Marriage
Дата 13.5.2004, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

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



Hanter издеваешься над человеком ???
В цикле от А до B возводи число в куб, переводи его в строку и сравнивай последний символ на '4'
IntToStr()



--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
_hunter
Дата 13.5.2004, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



а скорость где? smile.gif

кстати, вместо деления и округления можно использовать деление нацело


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
December
Дата 14.5.2004, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

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



if (x mod 10)=4...


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
starmaster
Дата 14.5.2004, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 29.3.2004

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



Написал решение задачи, но при работе программы она зависает, хотя вроде всё правильно.
Код

procedure TForm1.Button1Click(Sender: TObject);
var C,D,Count,i,A,B:integer;
begin
A:=StrToInt(AEdit.Text);
B:=StrToInt(BEdit.Text);
Count:=0;
for i:=A to B do
begin
  C:=i;
while C<>0 do
begin
  D:=C*C*C;
if (D mod 10)=4 then Count:=Count+1
end;

end;
Lab.Caption:=IntToStr(Count);

end;

PM MAIL WWW ICQ   Вверх
p0s0l
Дата 14.5.2004, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



А зачем там while ?
Код
for i:=A to B do
 if (i*i*i mod 10)=4 then Inc(Count);




--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 14.5.2004, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



А если приглядеться, то можно заметить, что возводить в степень не нужно:
Код
for i := A to B do
 if (Abs(i) mod 4) = 4 then Inc(Count);


А можно вообще без переборов:
Код
 function MyCnt(a, b : integer) : integer;
 begin
   Result := 0;
   a := ((a+5) div 10)*10 + 4;
   b := ((b+6) div 10)*10 - 6;
   if (b > a) then Result := 1 + (b-a) div 10;
 end;

 function Count4(a, b : integer) : integer;
 begin
   if (a <= 0) and (b >= 0) then Result := MyCnt(0, -a) + MyCnt(0, b)
     else if (a <= 0) and (b <= 0) then Result := MyCnt(-b, -a)
       else Result := MyCnt(a, b);
 end;

Пример вызова:
Код
Count := Count4(-55, 76);

Без возведения в степень надежнее, т.к. если A и B задать больше где-то 1000, то i*i*i перевалит за пределы возможностей integer...


--------------------
С уважением, г-н Посол.
PM   Вверх
starmaster
Дата 14.5.2004, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 29.3.2004

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



2 p0s0l

Большое спасибо! wink.gif Это задание было у меня для лабораторной в институте...
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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