Перевести строку в целое число в восьмеричной системе счисления - Turbo Pascal
Формулировка задачи:
Вводится строка символов. Если она является изображением целого числа в двоичной системе счисления, то перевести ее в целое число в восьмеричной системе счисления, иначе выдать сообщение о некорректном вводе. Промежуточный перевод в десятичную систему запрещен.
Заготовка есть, но у меня не получается даже проверить делимость числа на триады, что бы если что, добавить в конце 0.
Помогите пожалуйста.
Пока все, что есть.
Решение задачи: «Перевести строку в целое число в восьмеричной системе счисления»
textual
Листинг программы
uses crt; const trd:array[0..7] of string[3]=('000','001','010','011', '100','101','110','111'); var s2,s8:string; i,k:integer; c:char; begin clrscr; {ввод строки} writeln('Введите число в СС 2'); readln(s2); k:=0; i:=1; while(i<=length(s2))and(k=0) do if not(s2[i] in ['0','1'])then k:=1 else inc(i); if k=1 then begin write('Строка не является записью числ в СС '); readln; exit end; {перевод в СС 8} while length(s2) mod 3 <> 0 do s2:='0'+s2; //дополняем строку влево до длины, кратной 3 s8:=''; while s2<>'' do begin for i:=0 to 7 do if copy(s2,1,3)=trd[i] then s8:=s8+chr(i+48); {сравниваем с массивом значений для перевода и записываем найденное значение в строку S8} delete(s2,1,3);{удаляем триаду} end; writeln('Число в 8 системе счисления:'); write(s8); readln end.
Объяснение кода листинга программы
- Создается переменная
s2
, которая предназначена для хранения введенной пользователем строки. - Создается переменная
s8
, которая будет использоваться для хранения числа в восьмеричной системе счисления. - Создаются две переменные
i
иk
, которые будут использоваться для обработки строкиs2
. Переменнаяi
будет итерироваться от 1 до длины строкиs2
, а переменнаяk
будет использоваться для отслеживания количества цифр в строкеs2
. - Запускается цикл
while
, который будет выполняться до тех пор, пока длина строкиs2
не станет кратной 3. - Внутри цикла
while
строкаs2
дополняется до длины, кратной 3, путем добавления нулей в начало. - Создается пустая строка
s8
, которая будет использоваться для хранения числа в восьмеричной системе счисления. - Запускается еще один цикл
while
, который будет выполняться до тех пор, пока строкаs2
не станет пустой. - Внутри цикла
while
происходит сравнение каждого символа в строкеs2
с соответствующим символом в массивеtrd
. Если символы совпадают, то соответствующий символ из массиваtrd
добавляется в конец строкиs8
. - После завершения цикла
while
удаляется триада (три первых символа) из строкиs2
. - Выводится сообщение с числом, записанным в восьмеричной системе счисления, которое хранится в переменной
s8
. - Программа завершается после того, как пользователь нажмет клавишу Enter.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д