Задача. Автомат обрабатывает натуральное число N > 1 по следующему алгоритму:
1. Строится двоичная запись числа N.
2. В конец записи (справа) дописывается вторая справа цифра двоичной записи.
3. В конец записи (справа) дописывается вторая слева цифра двоичной записи.
4. Результат переводится в десятичную систему.
Пример. Дано число N = 11. Алгоритм работает следующим образом:
1. Двоичная запись числа N: 1011.
2. Вторая справа цифра 1, новая запись 10111.
3. Вторая слева цифра 0, новая запись 101110.
4. Результат работы алгоритма R = 46.
Для скольких значений N в результате работы алгоритма получится число, принадлежащее отрезку [150; 200]?
Как будем решать задачу?
Будем искать число N, для которого результат работы алгоритма будет принадлежать отрезку [150; 200].
Обнулим искомый счетчик чисел r:=0 .
Запустим цикл по подбираемым числам (по условию задачи это числа, больше 1, правую границу возьмем за 100, эту границу можно подбирать):
Только не говори никому.. Как легко можно восстановить жидкокристаллический экран..
for k:=2 to 100 do
За число N возьмем значение k.
Выполним перевод числа N в двоичную систему счисления: для этого пока число не равно 0, вычислим остаток от деления на 2 (это двоичная цифра), число уменьшим нацело в 2 раза. Чтобы получить двоичный код, превратим цифру n mod 2 в строку d процедурой str(n mod 2, d) , и накопим строку s — это и будет двоичный код числа N, причем будем к вновь полученной цифре добавлять строку, тогда цифры двоичного кода будут получены в правильном порядке:
Далее по алгоритму, описанному в условии задачи, добавим к полученному коду предпоследний символ и второй символ, это и есть результат работы алгоритма:
s:=s+s[length(s)- 1 ]+s[ 2 ];
Далее проверим, принадлежит ли полученный двоичный код результата диапазону чисел [150, 200].
При запуске программы вывод на экран abs 41
Все, что необходимо начинающему и опытному программисту
Стандартные функции типа Integer
Многие стандартные действия с числовыми данными выполняются путем вызова функций из библиотеки Паскаля. Такие функции называются стандартными функциями.
Пример 2.3.
Демонстрация стандартных функций
Program Infunct;
var
А,В.С: integer;
begin
А:=-2;
При запуске программы вывод на экран:
Abs(-2)=2
Sqr(2)=4
Sqr(2+2)=16
Задание 2.3. Вычислите значение следующего выражения: |39 • 54 — 84 2 |.
Задание 2.4. В переменные А и В записаны целые числа (оператором присваивания, например, А:=20; В:=13). Поменяйте числа в этих переменных местами.
Будьте внимательны! Если записать А:=В, вы потеряете число 20 и получите в двух переменных число 13! Воспользуйтесь третьей переменной — С (рис. 2.4).
Рис. 2.4. Схема обмена значений двух переменных через третью ячейку. В кружках указан порядок операторов присваивания
Задание 2.5. Выполните задание 4 без использования третьей переменной. Используйте действия сложения и вычитания.
Одесса. НАЧАЛОСЬ!
Как представляются переменные целого типа в памяти компьютера
Вся информация в компьютере хранится в виде последовательностей нулей и единиц. Информация, для записи которой используется всего два знака: 0 и 1, называется двоичной. Информация в компьютере хранится в виде двоичных кодов (комбинации из нулей и единиц). Память мы представляем, как последовательность ячеек, каждая из которых имеет свой адрес ( см. рис. 2.1).
Стандартная длина ячейки — 8 бит, что равно 1 байт. В такую ячейку можно записать двоичный код длиной 8 бит.
Для переменной типа integer выделяется ячейка длиной в 2 байт =16 бит. Такая ячейка получает символьное имя — имя переменной, и вы обращаетесь к ней не по адресу, а по имени.
Крайняя левая позиция выделяется для знака числа:
0 — число положительно;
1 — число отрицательно.
Остальные 15 позиций выделяются для записи самого числа в двоичном виде (рис. 2.5).
Рис. 2.5. Распределение двоичных разрядов (бит) при хранении числа типа integer
На 15 позициях можно получить 2 15 двоичных кодов. Самое маленькое число состоит из 15 нулей, самое большое — из 15 единиц. Поскольку счет начинается с нуля, получаем всего (2 15 — 1) положительных двоичных чисел. С учетом знака числа (+ или -) получаем, что числа типа integer имеют диапазон представления -2 15 . +2 15 — 1, или -32 768. +32 767,
Тип integer является основой для нескольких производных типов — со знаком и без знака (табл. 2.1).
Таблица 2.1. Целочисленные типы данных языка Паскаль
Задание 2.6. Считая, что операция умножения и операция возведения в квадрат имеют одинаковую сложность, запишите оптимальным образом выражения:
а) х 5 ;
б) х 6 ;
в) х 8 ;
г) х 9 ;
д) х 10 .
2011-10-13 ответил Tasman
Источник: www.programmer-lib.ru