Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 21.01.2021
Сообщений: 4

Проблема в посимвольном переводе строки из цифр

03.07.2022, 18:44. Показов 944. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Требуется написать код, который переводит строку содержащую только цифры, посимвольно , учитывая длину строки и вес каждого разряда в строке.
Например дана строка string: 7214, программа должна брать каждый символ и домножать на его вес разряда: 7*1000+2*100+1*10+4*1 и получать в итоге integer:7214
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.07.2022, 18:44
Ответы с готовыми решениями:

Непонятки при посимвольном переборе строки
Начал PHP изучать, первую программу пишу. Подскажите что за хрень у меня происходит Функции на вход приходит строка. На одном из её...

Проблема при переводе из XMLGregorianCalendar в Date
Делаю SOAP запрос. Получаю объект. В нём есть поле типа XMLGregorianCalendar. Нужно его перевести в Date. Делаю так: Date date = null; ...

Проблема при переводе в кодировку utf-8
Добрый день. У меня возникла проблема при переводе текста в кодировку UTF-8. Ранее функция работала без сбоев, но недавно что-то в ней...

13
259 / 205 / 60
Регистрация: 25.05.2022
Сообщений: 879
03.07.2022, 19:12
Лучший ответ Сообщение было отмечено Haliky как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Const N=999999;
 
var
  S: string;
  X: longint; //результат
  i: integer; //цикл
 
begin
  write('S= '); readln(s);
  x := 0;
  
  for i := 1 to length(s) do {if X<N then} if s[i] in ['0'..'9'] then X := X * 10 + ord(s[i]) - ord('0');
  
  writeln(X)
end.
1
259 / 205 / 60
Регистрация: 25.05.2022
Сообщений: 879
04.07.2022, 02:16
Pascal
1
2
3
4
5
6
7
8
9
10
var S:string;
    X, i:integer; //результат, цикл
 
begin
 write('S= ');readln(s);
 try X:=strtoint(s) except s:='' end;
 
 for i:=1 to length(s) do writeln(s[i],' X ',power(10,length(s)-i),' = ',strtoint(s[i])*power(10,length(s)-i));
 
end.
При желании, можно i назначить как byte и добавить переменную типа real, чтобы не пересчитывать степени 10.
0
0 / 0 / 0
Регистрация: 21.01.2021
Сообщений: 4
04.07.2022, 17:43  [ТС]
X := X * 10 + ord(s[i]) - ord('0')
что обозначает этот кусок, или точнее как это работает простыми словами?
0
259 / 205 / 60
Регистрация: 25.05.2022
Сообщений: 879
04.07.2022, 18:10
Так чуть проще или пока не особо?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
  S: string;
  X, p, i: integer;  //результат, 10^степень, остаток от
 
begin
  write('S= '); readln(s);
  try X := strtoint(s) except X := 0 end;
  
  p := 0;
  while X > 0 do
  begin
    i := x mod 10; //последняя цифра (младший разряд)
    x := x div 10; //удаляем последнюю цифру
    writeln(i, ' X ', power(10, p), ' = ', i * power(10, p));
    p := p + 1;
  end
end.
0
0 / 0 / 0
Регистрация: 21.01.2021
Сообщений: 4
04.07.2022, 18:29  [ТС]
ваша программа пытается сразу преобразовать строку в integer, а нужно без команд strtoint чтобы брался каждый символ отдельно и с ним были манипуляции перевода с помощью степеней десятки ( ну или другие способы реализации).
0
259 / 205 / 60
Регистрация: 25.05.2022
Сообщений: 879
04.07.2022, 18:35
Цитата Сообщение от 7214
7*1000+2*100+1*10+4*1
7*10^3+2*10^2+1*10^1+4*10^0

То есть, если Len = длина строки с числом, то
7*10^Len-1+2*10^Len-2+1*10^Len-3+4*10^Len-4
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
04.07.2022, 22:15
Цитата Сообщение от Haliky Посмотреть сообщение
Например дана строка string: 7214, программа должна брать каждый символ и домножать на его вес разряда: 7*1000+2*100+1*10+4*1 и получать в итоге integer:7214
Как уже показали выше, можно использовать как явное умножение на позицию:
Pascal
1
2
  s:='7214'; t:=0;
  for i:=1 to Length(s) do Inc(t,(Ord(s[i])-Ord('0'))*Power(10,Length(s)-i);
так и поразрядное, что лучше:
Pascal
1
2
  s:='7214'; t:=0;
  for i:=1 to Length(s) do t:=t*10+Ord(s[i])-Ord('0');
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
10.07.2022, 15:28
Голосую за схему Горнера — легко бьётся на циклы и не требует дополнительных переменных:

7·10³+2·10²+1·10¹+4·10° = ((7·10+2)·10+1)·10+4

что в переводе на действия:
результат домножить на 10 и добавить очередную цифру

(для тех, кто в танке: второй алгоритм у bormant)
0
3 / 2 / 1
Регистрация: 09.10.2018
Сообщений: 15
29.07.2022, 18:19
Вариант программы
Pascal
1
2
3
4
5
6
7
8
9
10
11
var str:string; j,number,digit,c:integer;
begin
  readln(str);
  number:=0;
  for j:=1 to length(str) do //либо for j:=1 to str.length do 
  begin
    val(str[j],digit,c); //преобразуем символ в число, либо так: digit:=str[j].ToDigit;
    number:=number*10+digit; //увеличиваем порядок и добавляем очередную цифру
  end;
  println(number);
end.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
29.07.2022, 18:32
ciocca125, неуместно представлять код другого IDE в формализированном разделе.
Это раздел PascalABC. В нём нет оператора print
0
3 / 2 / 1
Регистрация: 09.10.2018
Сообщений: 15
29.07.2022, 18:59
с оператором writeln)
Pascal
1
2
3
4
5
6
7
8
9
10
11
var str:string; j,number,digit,c:integer;
begin
  readln(str);
  number:=0;
  for j:=1 to length(str) do 
  begin
    val(str[j],digit,c); 
    number:=number*10+digit; //увеличиваем порядок и добавляем очередную цифру
  end;
  writeln(number);
end.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
29.07.2022, 19:05
ciocca125, вот результат работы вашей программы:
Code
1
2
1j1j1j1j1j1j1j1jj1j1j1j1j1jj1j1j1j1j1j1jj1j1j1j1jj1j1j1j1j1j1j1
-954437177
0
3 / 2 / 1
Регистрация: 09.10.2018
Сообщений: 15
29.07.2022, 19:19
Условие:
Требуется написать код, который переводит строку содержащую только цифры
и в условии задачи звучит тип integer,
вы в любом случае переусердствовали с единицами, даже если закрыть глаза на символы j во входной строке
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.07.2022, 19:19
Помогаю со студенческими работами здесь

Проблема при переводе звонков CUCM 7.1
Коллеги, прошу помощи в решения образовавшейся проблемы. Голову сломал, а ума не приложу куда копать. Суть в следующем: Есть...

Возникла проблема при переводе из арабских чисел в римские
print(&quot;Арабские в римские&quot;) ch = int(input(&quot;Введите число: &quot;)) if ch == 1: print(&quot;Ваше число: I&quot;) elif ch == 2: ...

Количество цифр в конечном числе при переводе в другие системы счисления
Здравствуйте! Тут потребовалось узнать, сколько цифр будет иметь конечное число при переводе из десятичной системы счисления в n-ричную. ...

Ошибка в переводе строки в дату
Мне нужно загрузить текст из файла в richTextBox, а потом работать с ним с помощью List&lt;&gt;. Из файла загрузка в richTextBox проходит...

Перевод арабских цифр в римские. Ошибка в условии вывода и некорректное чтение переменной при обратном переводе
делаю визуализацию перевода арабских чисел в римские и наоборот. сам перевод ясен, однако, в функции по переводу римских в арабские не дает...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru