Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2013, 14:28   #1
Asdman
Новичок
Джуниор
 
Регистрация: 29.06.2013
Сообщений: 1
По умолчанию Delphi, подсчет цифр

Попросили помочь с задачкой, синтаксиса Delphi я не знаю и могу потратить какое-то времени на освоение. Прошу помощи.

Сколько и каких именно цифр необходимо, чтобы записать все числа от k1 до k2?

Программа мне представляется двумя текстовыми полями и кнопкой.
Вижу простое решение "в лоб":
Собрать строку вида k1k(1+1)k(1+2)..k(2)
Потом перебрать посимвольно через цикл, сохраняя каждую цифру, как ключ массива и увеличивая значение на единицу. Потом выводим ключи массива со значениями и количеством цифр в склеенной строке.

Последний раз редактировалось Asdman; 29.06.2013 в 15:03.
Asdman вне форума Ответить с цитированием
Старый 29.06.2013, 15:49   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Код:
type
	TArr = array ['0'..'9'] of Integer;

procedure InitArr (var lot : TArr);

var
	i : Char;

begin

	for i := '0' to '9' do
		lot[i] := 0

end;
procedure AddDigits (const s : string; var lot : TArr);

var
	i : Integer;

begin

	for i := 1 to Length(s) do
		Inc (lot[s[i]])

end;

procedure NextNum (var s : string);

var
	i : Integer;

begin

	i := Length(s);

	while i > 1 do begin
		if s[i] = '9' then
			s[i] := '0'
		else begin
			Inc (s[i]);
			Exit
		end;

		Dec (i)
	end;

	if s[1] = '9' then  begin
                s[1] := '0';
		s := '1' + s
    end
    else
		Inc (s[1])
        

end;

var
	k1, k2 : Integer;
	s1, s2 : string;
	lot : TArr;
	i : Char;

begin

	ReadLn (k1, k2);

	Str (k1, s1);
	Str (k2, s2);
	
	InitArr (lot);
	
	while s1 <> s2 do begin
		AddDigits (s1, lot);
		NextNum (s1)
	end;
	
	AddDigits (s1, lot);
	
	for i := '0' to '9' do
		WriteLn (i + ' : ', lot[i])
	
end.
Правда это паскаль..
Poma][a вне форума Ответить с цитированием
Старый 29.06.2013, 16:45   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Вижу простое решение "в лоб":
Собрать строку вида k1k(1+1)k(1+2)..k(2)
Потом перебрать посимвольно через цикл, сохраняя каждую цифру, как ключ массива и увеличивая значение на единицу. Потом выводим ключи массива со значениями и количеством цифр в склеенной строке.
ну, можно и так. вполне себе нормальное решение.
только собираться всю строчку вида k1...k2 смысла нет.
берём очередное число i (цикл от k1 до k2) - разбираем его на цифры (хоть через перевод числа в строку, хоть через mod 10/div 10), заполняем массив Cnt : array[0..9] of integer;
(или массив Cnt : array['0'..'9'] of integer; )
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчет цифр Михаил1 Общие вопросы Delphi 1 07.10.2009 19:20
подсчет цифр Михаил1 Microsoft Office Excel 1 07.10.2009 13:21
Подсчет значащих цифр массива RomT24 Паскаль, Turbo Pascal, PascalABC.NET 5 27.04.2009 17:32