Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.11.2011, 07:20
kilds kilds вне форума
Прохожий
 
Регистрация: 10.10.2011
Адрес: Красноярск
Сообщения: 7
Версия Delphi: 7
Репутация: 101
По умолчанию помогите решить задачу (нужен код)

дано натуральное число n(n>99)опредилить число сотен в нам.
Ответить с цитированием
  #2  
Старый 15.11.2011, 07:34
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

В предыдущей своей теме ты дал хотя-бы какие-то собственные наработки. Почему же теперь мы должны делать за тебя всё с нуля? Показывай, что у тебя есть и где запутался.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 15.11.2011, 14:51
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Код:
 c := (n div 100) mod 10
Вот число сотен в n.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #4  
Старый 15.11.2011, 23:34
U.B.M. U.B.M. вне форума
Новичок
 
Регистрация: 06.10.2011
Сообщения: 94
Версия Delphi: Delphi 7
Репутация: 13
По умолчанию

Цитата:
Сообщение от Bargest
Код:
 c := (n div 100) mod 10
Вот число сотен в n.

Вроде
Код:
 c := n div 100

откуда мод 10?
Ответить с цитированием
  #5  
Старый 15.11.2011, 23:48
Аватар для @Rafa3L
@Rafa3L @Rafa3L вне форума
Начинающий
 
Регистрация: 09.11.2011
Адрес: Москва
Сообщения: 144
Версия Delphi: XE2
Репутация: 11216
По умолчанию

1 form, 2 edit, 1 button
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
im,nh,kl,gh:integer;
sd,vb:string;
begin
sd:=edit1.Text;
kl:=0;gh:=1;im:=length(sd);
for nh:=1 to im do if copy(sd,nh,gh)<>'' then kl:=kl+1;
edit2.Text:=copy(sd,1,kl-2);
end;

Рабочий код.
__________________
Помогаю платно.
Помогаю иногда бесплатно.
Ответить с цитированием
  #6  
Старый 16.11.2011, 10:28
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

надо заметить, что решение от @Rafa3L более точно вписывается в требования задачи тк работает только для натуральных чисел n > 99, в отличии от других решений, которые не учитывают этого.
Ответить с цитированием
  #7  
Старый 16.11.2011, 16:33
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

В задании сказано, что N>99. То есть это факт. Следовательно, и предыдущее решение работает. Вдобавок, для N<=99 ответ тоже будет верный - 0.
А в решении от @Rafa3L я не понял, зачем нужно делать copy(sd,nh,gh) при gh всегда равно 1, когда можно сделать sd[nh]. Также не ясно, как оно согласуется с решением задачи. Если рассмотреть число 12345, то 5 - это единицы, 4 - десятки, 3 - сотни, 2 - уже тысячи. Следовательно, на вопрос "Сколько сотен в 12345" будет ответ 3. Хотя конечно, задачу можно трактовать двояко. Ну и в-третьих, не понимаю смысла во всем этом цикле(после него все равно kl=im)
Если уж делать через строки, то можно во много раз проще.
Код:
 delete(sd,length(sd)-1,2);
 edit2.text:=sd;
или
Код:
 edit2.text:=sd[length(sd)-2];
соответственно для разных трактовок задач. Но все же ИМХО правильнее через div (и мб mod), т.к. в задании не написано, что "с клавиатуры вводится число n". Оно может прийти из другого места, например из файла или как результат предыдущих операций.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 16.11.2011 в 16:49.
Ответить с цитированием
  #8  
Старый 16.11.2011, 17:15
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

Идея в том что автор задачи, когда писал N>99, подразумевал что решение будет через copy/delete. А цикл выполняет декоративную функцию
Ответить с цитированием
  #9  
Старый 16.11.2011, 17:25
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Bargest похоже не "въехал" в суть вопроса.
Нужно смотреть шире
Ответить с цитированием
  #10  
Старый 18.11.2011, 00:24
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

И до сих пор не въезжаю.
Задача же такая:
Дано натуральное число n. Не строка ведь.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #11  
Старый 18.11.2011, 05:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

собственно, вопрос в том, что считать "числом сотен". Если, условно говоря, есть текоторая сумма (пусть 12345), и надо посчитать кол-во сотенных бумажек, то ответ будет 123. Если надо получить значение для разряда сотен (например при генерации суммы прописью), то ответ будет 3.

Соответсвенно:
Код:
// Кол-во "бумажек"
function NumOfHundred(n : Integer) : Integer;
begin
  Result := n div 100;
end;

// Разряд
function PosHundred(n : Integer) : Integer;
begin
  Result := (n div 100) mod 10;
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:31.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025