Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 29
1

Рассчитать кол-во каждой цифры длинного целого числа (до 256 цифр) и вывести результат

28.11.2017, 15:36. Показов 1606. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не получается найти ошибку. Задание звучит так: рассчитать кол-во каждой цифры длинного целого числа (до 256 цифр) и вывести результат.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
procedure TForm1.Button1Click(Sender: TObject);
var b: array of integer;
  x: integer;
  i, j, n, bol: integer;
begin
  n := 256;
  setlength(b, n);
  x := strtoint(edit1.text);
  for i := 0 to 9 do
  begin
    b[i] := 0;
  end;
  while x <> 0 do
  begin
    for i := 0 to 9 do
    begin
      if i = (x mod 10) then
        b[i] := b[i] + 1;
    end;
    x := (x div 10);
  end;
 
    edt1.text := edt1.text + ' ' + inttostr(b[0]);
    edt2.text := edt2.text + ' ' + inttostr(b[1]);
    edt3.text := edt3.text + ' ' + inttostr(b[2]);
    edt4.text := edt4.text + ' ' + inttostr(b[3]);
    edt5.text := edt5.text + ' ' + inttostr(b[4]);
    edt6.text := edt6.text + ' ' + inttostr(b[5]);
    edt7.text := edt7.text + ' ' + inttostr(b[6]);
    edt8.text := edt8.text + ' ' + inttostr(b[7]);
    edt9.text := edt9.text + ' ' + inttostr(b[8]);
    edt10.text := edt10.text + ' ' + inttostr(b[9]);
end;
Проблема заключается в следующем: при вводе 0-9 значных чисел программа работает верно. Когда вводятся 10-значное число, начинающееся с единицы-программа тоже работает, но если вводить больше единицы и не 10-ти, а, например, 40-50 значные числа, выдает ошибку об несоответствии типа. Я так понял, 30-40 и т.д. значные числа выходят за пределы integer. Тогда вопрос: если я возьму 200 значное числоо, то что будет тогда? Существует такой тип что-ли?) Хелп
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2017, 15:36
Ответы с готовыми решениями:

Вывести в убывающем порядке цифры, которые входят в запись данного длинного целого числа только один раз
б. Вывести в убывающем порядке цифры, которые входят в запись данного длинного целого числа только...

Из произвольного целого числа или длинного целого числа, вводимого с клавиатуры, путем изменения цифр 0 или 1
Произвольное длинное целое число разделить на четыре однобайтовых целых числа, каждому из которых...

Из заданного длинного целого числа сформировать новое число с обратным порядком цифр
Разработать функцию, которая с заданного долгого целого числа формирует новое число с обратным...

Рассчитать сумму цифр данного целого числа X.
Я знаю что это очень легкая задача, но тем не менее я никак не могу решить. Помогите мне...

8
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
28.11.2017, 15:42 2
Если числа выходят за пределы типа Int64(9223372036854775807) следует использовать методы длинной арифметики.
0
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 29
28.11.2017, 15:43  [ТС] 3
Разъяснить сможешь?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
28.11.2017, 15:46 4
Нет уж читайте сами, это большой вопрос.
0
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 29
28.11.2017, 16:04  [ТС] 5
Все равно, благодарю.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
28.11.2017, 16:16 6
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Цитата Сообщение от Bormentalka Посмотреть сообщение
рассчитать кол-во каждой цифры длинного целого числа
А зачем Вам здесь длинная арифметика? Вводите число как строку.
Delphi
1
var s:string;
Добавлено через 9 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not(key in ['0'..'9',#8]) then key:=#0;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
    a:array['0'..'9'] of integer;
    c:char;
    i:integer;
begin
s:=Edit1.Text;
for c:='0' to '9' do
a[c]:=0;
for i:=1 to length(s)do
inc(a[s[i]]);
for c:='0' to '9' do
if a[c]>0 then Memo1.Lines.Add(c+'='+inttostr(a[c]))
end;
0
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 29
28.11.2017, 19:58  [ТС] 7
Я таким еще пользоваться не умею и не пробовал, но спасибо) Возьму на вооружение.

Добавлено через 7 минут
Можете к каждой строке комментарий сделать, чтобы я более подробно разобраться мог в работе данного алгоритма? Если не затруднит
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
28.11.2017, 20:06 8
Лучший ответ Сообщение было отмечено Bormentalka как решение

Решение

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//процедура разрешает ввод в Эдит только цифр и BackSpase
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not(key in ['0'..'9',#8]) then key:=#0;//емли другое, то ничего
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var s:string; //строка
    a:array['0'..'9'] of integer;//массив встречаемости цифр
    c:char; //счетчик цикла по символам
    i:integer; //счетчик цикла по числам
begin
s:=Edit1.Text;//читаем строку
for c:='0' to '9' do //присваиваем всем ячейкам массива 0
a[c]:=0;
for i:=1 to length(s)do //идем по строке
inc(a[s[i]]);//какую цифру встретили, в ту ячейку +1
for c:='0' to '9' do //выводим символы цифр от 0 до 9
if a[c]>0 then Memo1.Lines.Add(c+'='+inttostr(a[c]))//и их количество, если не 0
end;
1
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 29
29.11.2017, 05:11  [ТС] 9
Благодарю
0
29.11.2017, 05:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2017, 05:11
Помогаю со студенческими работами здесь

Определение кол-ва одинаковых цифр в записи целого числа
написать программу которая определяет количество одинаковых цифр в записи целого числа(которое...

Вывести кол-во отрицательных элементов матриц и рассчитать среднее арифметическое значение каждой из них
Для каждой из двух матриц А (2 строки, 4 столбца) и В (3 строки, 3 столбца) вычислить и вывести...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru