Программирование на Free Pascal и Lazarus [Евгений Ростиславович Алексеев] (pdf) читать постранично, страница - 32

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

+1;
{Фиксируем тот факт, что на предыдущем элементе серия закончилась,]
kon:= i-1;
{длина серии равна к.}
dlina :=к;
{Если это первая серия,}
if kol= 1 then
{объявляем ее максимальной.}
begin
{Длина максимальной серии единиц.}
max:= dlina;
{Конец максимальной серии, состоящей из единиц, хранится в переме!
315

Е.Р. Алексеев, О.В. Чеснокова, Т.В. Кучер

Программирование на Free Pascal и Lazarus

{kon_max.}
kon_max:=kon;
end
{Если это не первая серия, состоящая из единиц,}
else
{то её длину сравниваем с длиной серии с максимальным количеством
{единиц.}
if k>max then
{Если длина текущей серии больше,}
begin
{то объявляем ее максимальной.}
max:= dlina;
kon_max:=kon;
end;
end;
{Если текущий элемент массива не равен 0, то количество подряд}
{встречающихся единиц начинаем считать сначала (к:=0).}
к : = 0;
end;
{Проверка, не было ли серии в конце массива.}
if k> 1 then
{Если да, увеличить счётчик ещё на единицу.}
begin
kol := kol +1;
{Серия закончилась на последнем элементе.}
kon:=n;
dlina :=k;
{Обработка последней серии так, как это происходило в цикле.}
if kol= 1 then
begin
max:= d l i n a ;
kon_max:=kon;
end
else
if k>max then
begin
max:= dlina;
kon_max:=kon;
end;
316

Е.Р. Алексеев, О.В. Чеснокова, Т.В. Кучер

Программирование на Free Pascal и Lazarus

end;
{Если серии были, то}
if kol >0 then
{вывод информации о серии с максимальным количеством единиц.}
begin
writeln ( ’Количество серий, состоящих из единиц= ’, kol);
writeln ( ’Наибольшая серия начинается с номера ’,
kon_max- max+1, ’, заканчивается номером ’, kon_max,
’, её длина равна ’, шах)
end
{Вывод информации об отсутствии серий.}
else
writeln ( ’Нет серий, состоящих из единиц ’ )
end.

317

Е.Р. Алексеев, О.В. Чеснокова, Т.В. Кучер

Программирование на Free Pascal и Lazarus

Рис. 5.41. Блок-схема решения задачи 5.9
ЗАДАЧА 5.10. Задан массив вещественных чисел. Перевести все
318

Е.Р. Алексеев, О.В. Чеснокова, Т.В. Кучер

Программирование на Free Pascal и Lazarus

элементы массива в Р-ричную систему счисления.
Перед решением всей задачи давайте разберёмся с алгоритмом перевода
ве-щественного числа из десятичной в другую систему счисления. Этот
алгоритм можно разделить на следующие этапы:
1.
2.
3.
4.

Выделение целой и дробной частей числа.
Перевод целой части числа в другую систему счисления.
Перевод дробной части числа в другую систему счисления.
Объединение целой и дробной частей числа в новой системе
счисления.

Алгоритм перевода целого числа в другую систему счисления
Разделить нацело число на основание новой системы счисления.
Получим остаток и частное. Остаток от деления будет младшим
разрядом числа. Его необходимо будет умножить на 10 в нулевой
степени. Если частное не равно нулю, то продолжим деление; новый
остаток даст нам следующий разряд числа, который надо будет
умножить на десять в первой степени и т. д. Деление будем продолжать
до тех пор, пока частное не станет равным 0. Особенностью алгоритма
является то, что число формируется в обратном порядке от младшего
разряда к старшему, что позволит в один проход собрать число в новой
системе счисления.
Алгоритм перевода дробной части числа в другую систему счисления
Умножить дробную часть числа на основание системы счисления. В
полученном произведении выделить целую часть числа, это будет
старший разряд числа, который необходимо будет умножить на П о ­
дробную часть опять умножить на основание системы счисления. В
произведении целая часть будет очередным разрядом (его надо будет
умножить на И)
а дробную часть необходимо опять умножить на
основание системы счисления до получения необходимого количества
разрядов исходного числа.
Блок-схема функции перевода вещественного числа Д г из десятичной
системы счисления в другую систему представлена на рис. 5.42.
319

Е.Р. Алексеев, О.В. Чеснокова, Т.В. Кучер

Программирование на Free Pascal и Lazarus

Обратите внимание, как в блок-схеме и в функции реализовано
возведение в степень. В связи с тем, что при переводе целой части
числа последовательно используются степени 1 0 , начиная с Q, для
формирования степеней десяти вводится переменная