19.05.2008, 20:11
общий
это ответ
Здравствуйте, Ласточка!
Помогу чем смогу.
Вот функция, которая вернёт значение целого десятеричного числа в двоичной системе исчисления.
function ToBin(var x: integer): string;
var rez: string;
y: integer;
begin
rez := ‘‘; y := x;
Repeat
if (y mod 2 = 0) then rez := ‘0‘ + rez
else rez := ‘1‘ + rez;
y := y div 2;
Until y < 1;
ToBin := rez;
end;
Вы знакомы с алгоритмом переведения числа в двоичную систему? Расскажу вкратце - думаю поймёте. Берётся число из десятеричной системы исчисления и делится на 2 до тех пор, пока делимое не станет меньше единицы. При этом, если при делении числа на 2 у нас имеется остаток, то в результат дописывается 1, если остаток равен нулю, то в результат дописывается нуль. По окончании, результирующая строка "переворачивается", т.е. записывается задом наперёд.
По окончании, строка лишние нули слева могут убраться.
Пример. Переведём в двоичную систему число 10
10 / 2 = 5 | 0
5 / 2 = 2.5 | 1
2 / 2 = 1 | 0
1 / 2 = 0.5 | 1
Получается "0101", переворачиваем и видим, что 10 (10) = 1010 (2)
Результат хранится в строковом типе данных.
Теперь с первой задачкой. Её можно бы оформить при помощи динамического списка, но т.к. с динамическими списками я всё ещё консенсус не нашёл, то сделал по другому: считываем числа до тех пор, пока не встретим нуль; пишем их в типизированный файл, а потом просто читаем файл, начиная с конца. Код в приложении.
Удачи!
Приложение:
var f: file of integer; {файл целых чисел} i: integer; {переменная счётчик}procedure CreateData; {процедура заполнения файла числами}var a: integer;begin readln(a); {считываем число} if a <> 0 then {если число не нуль, то} begin write(f, a); {записываем его в файл} CreateData; {и обращаемся к процедуре повторно (рекурсивно)} end;end;procedure ViewFile; {процедура просмотра файла - действует по тому же принципу}var a: integer;begin seek(f, i); {помещаем указатель в конец файла} read(f, a); {считываем значение} write(a:5); {выводим на экран} dec(i); {сдвигаем счётчик на позицию назад (уменьшаем на единичку)} if i>=0 then ViewFile; {если мы всё ещё не достигли начала файла, то процедура повторяется}end;begin Assign(f, ‘MyFile.dat‘); {зададим файл на диске} Rewrite(f); {создаём файл (перезаписываем)} CreateData; {запускаем процедуру заполнения файла числами} i:=FileSize(f)-1; {счётчику присваиваем значение размера файла} ViewFile; {просматриваем файл} Close(f); {закрываем файл} readln;end.