Другие языки программирования и технологии

Добрый вечер. Преподаватель задал разобраться каким образом с помощью функций производится перевод в десятичную систему.

Помогите разобраться. Всё сделано в паскале.

var i,choice:integer;
firstTen,secondTen, rez, rezTwo, st_10:real;
first,second:string;

begin
i := 2;
1:
write('Введите двоичное число');
readln(first);
for i := 1 to length(first) do begin
if ((first[i] <> '1')and(first[i] <> '0')) then begin
clrscr;
writeln('введено некорректное число ');
goto 1
end
end;
firstTen := 0; {ОТСЮДА НАЧИНАЕТСЯ ПЕРЕВОД}
for i := 1 to length(first) do
if (first[i] = '1') then
firstTen := firstTen + power(2, length(first)-i);
Редкостно безграмотно переводится. Представленный кусок программы - абсолютный говнокод, достойный публикации на сайте govnokod.ru
МШ
Максим Шамаро
57 949
Лучший ответ
Вадим Крылов Но при этом он перевод абсолютно правильно.
Vitali Mantei Да ладно уж вам, разве что цикл запустить в обратном порядке - а так читабельный алгоритм - который показывает принцип перевода bin2dex. Что еще от школьников требовать ?
var i,choice:integer;
firstTen,secondTen, rez, rezTwo, st_10:real;
first,second:string;
begin
i := 2;
1:
write('Введите двоичное число');
readln(first);
for i := 1 to length(first) do begin /от 1 до длины строки введённой делаем проверку
if ((first[i] <> '1')and(first[i] <> '0')) then begin /если элемент от 1 до длины строки не равен 1 и не равен 0 то очищаем экран и выводим что введено некорректное число и заставляем перейти к записи строки снова, потому что ввели не правильно. если ввели правильно то переходим дальше
clrscr;
writeln('введено некорректное число ');
goto 1
end
end;
firstTen := 0; {ОТСЮДА НАЧИНАЕТСЯ ПЕРЕВОД} здесь начинается перевод потому что проверку введённая строка прошла
for i := 1 to length(first) do опять начинаем проверять с 1 до длины строки (сколько символов в ней)
if (first[i] = '1') then если символ равен 1 то
firstTen := firstTen + power(2, length(first)-i); то к строке прибавляем прошлое ее состояние и с помощью функции повер а то есть возведение в степень, возводим каждые элемент с конца в степень двойки то-есть если длина 5 символов то в строке first символ 5-1 возводим в степень 2
BW
Bow Wow
43 400
Вадим Крылов Эм. Но я просто просил разъяснить как это сделано уже в моей программе.
1011 = 2^3+ 2^1+ 2^0 - если есть 1 то 2 возводится в степень порядка числа (начиная справа на лево, отсчет порядка начинается с нуля) если 0 - то пропускается
Alexander Anisimov
Alexander Anisimov
6 169