Т. Н. Соловьева...УДК603 УДК 004.42 ББК 22.12 С603 С603 Соловьева Т....

118
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего образования «ПЕРМСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ» Т. Н. Соловьева ИНФОРМАТИКА ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ Допущено методическим советом Пермского государственного национального исследовательского университета в качестве учебного пособия для студентов, изучающих дисциплину «Информатика» (кроме механико-математического и физического факультетов) Пермь 2018

Transcript of Т. Н. Соловьева...УДК603 УДК 004.42 ББК 22.12 С603 С603 Соловьева Т....

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего образования

«ПЕРМСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»

Т. Н. Соловьева

ИНФОРМАТИКА

ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ

Допущено методическим советом Пермского государственного национального

исследовательского университета в качестве учебного пособия для студентов, изучающих дисциплину «Информатика»

(кроме механико-математического и физического факультетов)

Пермь 2018

УДК603 УДК 004.42 ББК 22.12 С603

С603 Соловьева Т. Н.

Информатика. Основы алгоритмизации и программирования [Электронный ресурс]: учеб. пособие / Т. Н. Соловьева; Перм. гос. нац. исслед. ун-т. – Электрон. дан. – Пермь, 2018. – 1,5 Мб; 118 с. – Режим доступа: http://www.psu.ru/files/docs/science/ books/uchebnie-posobiya/soloveva-informatika-osnovy-algoritmizacii.pdf. – Загл. с экрана.

ISBN 978-5-7944-3190-2 Учебное пособие содержит краткий теоретический материал в рамках па-

радигмы структурной разработки алгоритмов, примеры выполнения и оформ-ления типовых заданий, и наборы заданий с указаниями для самостоятельного выполнения студентами.

Предназначено для аудиторной и самостоятельной работы студентов всех направлений подготовки бакалавров и специальностей (кроме механико-математического и физического факультетов), изучающих дисциплину «Ин-форматика»

УДК 004.42 ББК 22.12

Издается по решению ученого совета механико-математического факультета Пермского государственного национального исследовательского университета.

Рецензенты: кафедра «Интегрированные бортовые комплексы навигации, управления и наведения летательных аппаратов» филиала «Стрела» Московского авиационного института (Национального исследовательского универси-тета) (рецензент доктор технических наук, доцент А. В. Чернодаров); док-тор экономических наук, зав. кафедрой «Информационные технологии и автоматизированные системы» Пермского национального исследователь-ского политехнического университета, профессор Р. А. Файзрахманов

ISBN 978-5-7944-3190-2 © Соловьева Т.Н., 2018 © ПГНИУ, 2018

3

Оглавление

ВВЕДЕНИЕ ............................................................................................................. 5

АЛГОРИТМ ............................................................................................................ 6

ПОНЯТИЕ АЛГОРИТМА ......................................................................................... 6 ФОРМАЛИЗАЦИЯ ПОНЯТИЯ «АЛГОРИТМ» ........................................................... 6 ИСПОЛНИТЕЛЬ АЛГОРИТМОВ ............................................................................ 16 ВЕЛИЧИНЫ ......................................................................................................... 17

Имя величины .............................................................................................. 17 Виды величин ............................................................................................... 17 Типы величин ............................................................................................... 17 Значение величины ...................................................................................... 19

ОСНОВНЫЕ УПРАВЛЯЮЩИЕ СТРУКТУРЫ .......................................................... 24 Управляющая структура «Следование» .................................................... 24 Управляющая структура «Ветвление» ...................................................... 26 Управляющая структура «Цикл ПОКА» ................................................... 31 Управляющая структура «Цикл ВЫПОЛНЯТЬ ДО» .............................. 34 Управляющая структура «Цикл ДЛЯ» ...................................................... 37

КОНТРОЛЬНЫЕ ВОПРОСЫ .................................................................................. 39

РАЗРАБОТКА АЛГОРИТМОВ .......................................................................... 40

РАЗРАБОТКА ТРЕБОВАНИЙ ................................................................................ 40 ПРОЕКТИРОВАНИЕ ............................................................................................. 40 РЕАЛИЗАЦИЯ ...................................................................................................... 40 ТЕСТИРОВАНИЕ И ОТЛАДКА .............................................................................. 41 КОНТРОЛЬНЫЕ ВОПРОСЫ .................................................................................. 42

КЛАССЫ СЛОЖНОСТИ ЗАДАЧ ...................................................................... 44

СЛОЖНОСТЬ АЛГОРИТМА ............................................................................. 45

КОНТРОЛЬНЫЕ ВОПРОСЫ .................................................................................. 49

ПРИМЕРЫ ВЫПОЛНЕНИЯ ЗАДАНИЙ ........................................................... 50

ЗАДАЧИ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ ............................. 54

УПРАВЛЯЮЩАЯ СТРУКТУРА «СЛЕДОВАНИЕ» .................................................. 54 Уровень А ..................................................................................................... 54 Уровень В ..................................................................................................... 57 Уровень С ..................................................................................................... 59

УПРАВЛЯЮЩАЯ СТРУКТУРА «ВЕТВЛЕНИЕ» ..................................................... 60 Уровень А ..................................................................................................... 60 Уровень В ..................................................................................................... 63 Уровень С ..................................................................................................... 66

УПРАВЛЯЮЩАЯ СТРУКТУРА «ЦИКЛ» ............................................................... 68 Уровень А ..................................................................................................... 68 Уровень В ..................................................................................................... 69 Уровень С ..................................................................................................... 71

ВАРИАНТЫ ИНДИВИДУАЛЬНЫХ ЗАДАНИЙ ........................................................ 72 Набор 1 .......................................................................................................... 72 Набор 2 .......................................................................................................... 72

4

Набор 3 .......................................................................................................... 73 Набор 4 .......................................................................................................... 74 Набор 5 .......................................................................................................... 74 Набор 6 .......................................................................................................... 75

СТРУКТУРЫ ДАННЫХ ..................................................................................... 76

ОДНОМЕРНЫЕ МАССИВЫ .................................................................................. 83 ДВУМЕРНЫЕ МАССИВЫ ..................................................................................... 84 КОНТРОЛЬНЫЕ ВОПРОСЫ .................................................................................. 85

ПРИМЕРЫ ВЫПОЛНЕНИЯ ЗАДАНИЙ ........................................................... 86

ОДНОМЕРНЫЕ МАССИВЫ .................................................................................. 86 ДВУМЕРНЫЕ МАССИВЫ ..................................................................................... 87

ЗАДАЧИ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ ............................. 88

ОДНОМЕРНЫЕ МАССИВЫ .................................................................................. 88 Уровень А ..................................................................................................... 88 Уровень В ..................................................................................................... 90 Уровень С ..................................................................................................... 96

ДВУМЕРНЫЕ МАССИВЫ ................................................................................... 100 Уровень А ................................................................................................... 100 Уровень В ................................................................................................... 103 Уровень С ................................................................................................... 108

ВАРИАНТЫ ИНДИВИДУАЛЬНЫХ ЗАДАНИЙ ...................................................... 112 Набор 1 ........................................................................................................ 112 Набор 2 ........................................................................................................ 112 Набор 3 ........................................................................................................ 113 Набор 4 ........................................................................................................ 114 Набор 5 ........................................................................................................ 114 Набор 6 ........................................................................................................ 115

ТЕМАТИЧЕСКОЕ ПЛАНИРОВАНИЕ ........................................................... 116

БИБЛИОГРАФИЧЕСКИЙ СПИСОК ............................................................... 117

5

Введение

Цель дисциплины «Информатика» – ознакомить студентов с основами совре-

менных информационных технологий, тенденциями их развития, обучить студентов

принципам построения информационных моделей, проведению анализа полученных

результатов, применению современных информационных технологий в профессио-

нальной деятельности и, кроме того, она является базовой для всех дисциплин, ис-

пользующих автоматизированные методы обработки данных, и так или иначе исполь-

зующих компьютерную технику.

Настоящее пособие разработано на основе обобщенных требований государст-

венных образовательных стандартов предъявляемых к уровню подготовки специали-

стов и бакалавров гуманитарного и естественнонаучного направлений (кроме направ-

лений математика, физика).

В разделе «Основы алгоритмизации и программирования» рассматриваются:

1) теоретические вопросы:

− процессы жизненного цикла программ;

− проектирование алгоритмов и программ;

− значение моделирования, алгоритмизации и программирования при решении

задач в профессиональной области;

− элементы программирования на алгоритмическом языке высокого уровня.

2) практикум:

− проектирование алгоритмов, программ, тестов и документации;

− реализация простейших алгоритмов (упорядочение, отбор, сортировка и т.д.)

на языке высокого уровня (например, Pascal);

− знакомство с системой программирования на языке высокого уровня (напри-

мер, Pascal). Исходный текст программы, компиляция, исполнение программы. Цикл,

использование подпрограмм, управление вводом/выводом данных.

Данное пособие является частью комплекта материалов для проведения лабо-

раторных и практических работ, а также самостоятельной работы студентов по дис-

циплине «Информатика». В пособии приведены материалы необходимые для органи-

зации практических, лабораторных и внеаудиторных занятий по основам алгоритми-

зации.

6

АЛГОРИТМ

Понятие «алгоритм» является концептуальной основой процессов обработки

информации. Поскольку компьютер – универсальная машина для работы с информа-

цией и может работать только по заданному ему алгоритму, то изучению свойств ал-

горитмов, методов их проектирования, анализа и оценки сложности в информатике

уделяется большое внимание.

Понятие алгоритма

Термин «алгоритм» происходит от имени великого ученого средневекового

Востока – Мухаммед ибн Муса ал-Хорезми (Магомет, сын Моисея из Хорезма). Он

жил приблизительно с 783-го по 850 г. в городе Ургенче (Средняя Азия). В переводах

арифметического трактата ал-Хорезми с арабского на латинский его имя транскриби-

ровалось как algorismi. Отсюда и пошло слово «алгоритм» – сначала при изучении

арифметических действий с натуральными числами в десятичной арифметике, а затем

для обозначений процессов, в которых значения искомых величин последовательно

определяются из исходных данных по определенным правилам и инструкциям.

К началу XX в. алгебра и теория чисел позволили дать много примеров алго-

ритмов. Среди них – алгоритм Евклида нахождения наибольшего общего делителя

двух натуральных чисел или двух целочисленных многочленов, алгоритм Гаусса ре-

шения системы линейных уравнений, алгоритм нахождения рациональных корней

многочленов одного переменного с рациональными коэффициентами, алгоритм

Штурма определения числа действительных корней многочлена с действительными

коэффициентами на некотором отрезке действительных чисел и т. д. Для решения

задач такого типа достаточно интуитивного понимания термина «алгоритм».

В интуитивном (неформальном) понимании «алгоритм» – это описание вычис-

лительного процесса. Такому пониманию термина способствуют многочисленные оп-

ределения, встречающиеся в литературе и учебниках. Например, в Математическом

энциклопедическом словаре читаем:

АЛГОРИТМ, алгорифм, – точное предписание, которое задает вычислитель-

ный процесс (называемый в этом случае алгоритмическим), начинающийся с произ-

вольного исходного данного (из некоторой совокупности возможных для данного ал-

горитма исходных данных) и направленный на получение полностью определяемого

этим исходным данным результата.

Формализация понятия «алгоритм»

Используя интуитивное понятие термина «алгоритм», можно доказать сущест-

вование алгоритма решения задачи. Но в начале XX в. в математике были сформули-

рованы алгоритмические проблемы, решение которых потребовало знать точно, что

такое «алгоритм», чтобы доказать не существование алгоритма решения задачи (про-

блема алгоритмической неразрешимости). Другими словами, возникла задача фор-

мального определения термина «алгоритм».

Алгоритмы. Теоретический материал

7

В общем виде формализация понимается как приведение некоторого содержа-

ния (воспринимаемых сигналов, смысла научной теории, содержания текста и т. д.)

к выбранной форме.

Необходимость формализации − то, что создано по формальным правилам,

очень просто поддается проверке. Без формализации в принципе невозможно создать

и использовать вычислительные машины. Заменив математические утверждения и

рассуждения формальными выражениями, получаем возможность сделать сами эти

рассуждения предметом компьютерной обработки.

Возможность формализации опирается на фундаментальное положение, кото-

рое называют основным тезисом формализации. Суть его состоит в принципиаль-

ной возможности разделения объекта и его обозначения (имени объекта).

Суть объекта не меняется от того, как мы его назовём. Это значит, что мы мо-

жем назвать его как угодно, придать его имени любую форму, которая, по нашему

мнению, лучше соответствует данному объекту.

Решение задачи формализации понятия «алгоритм» было предложено в сере-

дине ХХ в. в работах Дж. Гильберта, А. Черча, А. Тьюринга, С. Клини, Э. Поста, А.А.

Маркова, А.Н. Колмогорова и др.

Понятие теории алгоритмов

Различные подходы к формализации понятия «алгоритм» являются основой

качественной (дескриптивной) теории алгоритмов, содержанием которой является

классификация задач по признаку алгоритмической разрешимости, т.е. получение вы-

сказываний типа «Задача Х алгоритмически разрешима» или «Задача Х алгоритмиче-

ски не разрешима». В рамках этой теории был получен ряд фундаментальных резуль-

татов. Например, в 1952 г. советский математик П.С. Новиков доказал алгоритмиче-

скую неразрешимость классической проблемы тождества для конечно определенных

групп, а отечественный математик Ю.В. Матиясевич в 1970 г. доказал алгоритмиче-

скую неразрешимость 10-й проблемы Гильберта.

Теория алгоритмов оказала существенное влияние на развитие ЭВМ и практи-

ку программирования. В теории алгоритмов были предопределены концепции, поло-

женные впоследствии в основу аппаратуры ЭВМ и языков программирования. Поня-

тие алгоритма помогло, например, точно определить, что значит эффективно задать

последовательность управляющих сигналов.

В свою очередь, применение ЭВМ для обработки информации послужило сти-

мулом развития теории алгоритмов и изучения алгоритмических моделей, изучения

алгоритмов с целью их сравнения по характеристикам (числу действий, расходу па-

мяти), а также их оптимизации. В настоящее время теория алгоритмов служит теоре-

тическим фундаментом вычислительных наук. С ее помощью уточняются такие поня-

тия, как доказуемость, эффективность, разрешимость, перечислимость и др. Возникло

новое направление в теории алгоритмов – сложность алгоритмов и вычислений.

8

Алан Тьюринг

(Alan Mathison Turing,

1912 – 1954)

Начала складываться количественная (метрическая) теория алгоритмов, основ-

ным содержанием которой является получение верхних и нижних оценок сложности

алгоритмов.

Для получения верхних оценок, достаточно интуитивного понятия алгоритма,

«строится» неформальный алгоритм решения конкретной задачи, и затем он форма-

лизуется для реализации на подходящей алгоритмической модели. Если удается пока-

зать, что сложность (время или память) вычислений для этого алгоритма не превос-

ходит значения подходящей функции при всех значениях аргумента, то эта функция

считается верхней оценкой сложности решения рассматриваемой задачи. В получе-

нии верхних оценок достигнуто много интересных результатов для конкретных задач.

Например, разработаны быстрые алгоритмы умножения целых чисел, многочленов,

матриц, решения линейных систем уравнений, которые требуют значительно меньше

ресурсов, чем традиционные алгоритмы.

Для получения нижней оценки требуется доказать, что никакой алгоритм не

имеет сложности меньшей, чем заданная граница. Для этого необходимо уточнить

понятие алгоритма.

Уточнение понятия алгоритма связано с уточнением алфавита данных и формы

их представления, памяти и размещения в ней данных, элементарных шагов алгорит-

ма и механизма реализации алгоритма. Все эти понятия сами нуждаются в уточнении.

Их словесные определения потребуют введения новых понятий, для которых, в свою

очередь, снова необходимы уточнения, и т. д. Поэтому в теории алгоритмов принят

другой подход, основанный на конкретной алгоритмической модели, в которой все

сформулированные требования выполняются очевидным образом. Используемая ал-

горитмическая модель универсальна, т.е. моделирует любые другие разумные алго-

ритмические модели, что позволяет снять возможное возражение против такого под-

хода: не приводит ли жесткая фиксация алгоритмической модели к потере общности

формализации алгоритма? Поэтому алгоритмиче-

ские модели отождествляются с формальным поня-

тием алгоритма. Известны три основных типа алго-

ритмических моделей, различающихся исходными

трактовками того, что такое алгоритм.

Первый тип алгоритмических моделей свя-

зывает понятие алгоритма с традиционным пред-

ставлением – процедурами вычисления значений

числовых функций. Основной теоретической моде-

лью этого типа являются рекурсивные функции –

исторически первая формализация понятия алго-

ритма.

Второй тип алгоритмических моделей трак-

тует алгоритм как некоторое детерминированное

устройство, способное выполнять в каждый момент

лишь строго фиксированное множество операций.

Алгоритмы. Теоретический материал

9

Основной теоретической моделью такого типа является машина А. Тьюринга, ока-

завшая существенное влияние на понимание логической природы разрабатываемых

ЭВМ. Аналогичной теоретической моделью такого типа является машина Э. Поста

(1936 г.). Машина А. Поста менее сложна, чем машина А. Тьюринга: ее элементарные

действия проще и менее разнообразны способы записи. Но по этим причинам запись

и обработка информации на ней требует большего объема «памяти» и большего числа

шагов, чем для машины А. Тьюринга.

В конце 1936 г. Алан Тьюринг опубликовал работу «О вычислимых числах с

приложением к проблеме разрешимости».

Математический результат этой работы – доказательство существования

формальной, чисто механической процедуры, позволявшей сделать заключение,

выводимо ли данное высказывание из некоторого набора аксиом.

Эта процедура, получившая название «универсальная машина», а позднее –

«машина Тьюринга», стала первым формальным описанием компьютера как некоей

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

другую вычислительную машину, работа которой состоит в переходе из одного дис-

кретного состояния в другое.

Тезис Тьюринга: Любой алгоритм может быть реализован соответствую-

щей машиной Тьюринга.

Факт построения воображаемой универсальной машины привел к предположе-

нию о целесообразности построения универсальной вычислительной машины, кото-

рая могла бы решать любые задачи при условии соответствующей кодировки исход-

ных данных и разработки соответствующей программы действий.

Алгоритм (по Тьюрингу) – программа для машины Тьюринга, приводящая к

решению поставленной задачи.

Универсальность машины Тьюринга в том, что любой алгоритм над любыми

данными можно представить в символьной форме,

т.е. объекты описать в виде некоторого текста; дей-

ствия представить как правила его преобразования,

кроме того, можно реализовать любые преобразова-

ния любых текстов.

Другой теоретической моделью этого типа яв-

ляется машина произвольного доступа, введенная в

70-х гг. ХХ в. с целью моделирования реальных вы-

числительных машин и оценки сложности вычисле-

ний.

Третий тип алгоритмических моделей – это

преобразования слов в произвольных алфавитах, в

которых операциями являются замены частей слов

другим словом. Основной теоретической моделью

этого типа являются нормальные алгоритмы (алго-Андрей Андреевич Марков

(1903–1979)

10

рифмы) А.А. Маркова (1947 г.). А.А. Марков установил эквивалентность понятий

нормального алгоритма, рекурсивной функции и машины А. Тьюринга с точки зрения

их вычислительной силы.

Все три основных типа алгоритмических моделей математически эквивалентны

и различаются сложностями, возникающими при практической реализации алгорит-

мов. Например, микропрограммирование основывается на идее машины Тьюринга,

структурное программирование опирается на теорию рекурсивных функций, а языки

символьной обработки данных (ЛИСП, РЕФАЛ, ПРОЛОГ) берут свое начало от нор-

мальных алгоритмов А. А. Маркова.

Универсальная функция

В теории алгоритмов установлен важный факт: во всех алгоритмических моде-

лях всегда существует универсальный алгоритм, т.е. алгоритм, который способен мо-

делировать работу любого другого алгоритма, описанного в этой же модели. Пока-

жем существование универсальной функции для вычислимых функции одного аргу-

мента.

Теорема. Существует вычислимая функция двух аргументов U, являющаяся

универсальной функцией для класса вычислимых функций одного аргумента.

Доказательство. Расположим все программы, вычисляющие функции одного

аргумента, в вычислимую последовательность p0, p1, ... (например, в порядке возрас-

тания их длины).

Пусть U есть вычислимая функция, такая, что U(i, х) равна результату работы

i-й программы рi на входном слове x.

Если программа рi заканчивает работу на входном слове х, и не определена в

противном случае (т.е. программа рi не применима к входному слову х), то функция U

и есть искомая двухместная универсальная вычислимая функция для класса всех од-

номестных вычислимых функций, что и требовалось доказать.

Алгоритм, вычисляющий саму функцию U, есть, по существу, интерпретатор

для используемого языка программирования (если отождествлять программу и ее но-

мер, то он применяет первый аргумент ко второму). Аналогично можно ввести уни-

версальные функции для произвольного числа аргументов.

Важность концепции универсальной функции состоит в том, что еще в 30-е гг.

XX в. (т.е. до появления ЭВМ) она показала возможность создания универсального

устройства (компьютера), способного выполнять любые алгоритмы.

Нормальные алгорифмы А.А. Маркова

Рассмотрим подробнее нормальные алгоритмы (алгорифмы) А.А. Маркова.

Для формализации и уточнения понятия алгоритм российский математик А.А.

Марков предложил использовать ассоциативные исчисления [12].

Алгоритмы. Теоретический материал

11

Ассоциативным исчислением называют совокупность всех слов в данном алфа-

вите вместе с системой допустимых подстановок.

Алфавит – конечный набор различных символов, которые будем называть бук-

вами.

Пример. Пусть задан конечный набор различных символов (букв) а, b, с.

Следовательно, определен алфавит А = {а, b, с}.

Слово – любая конечная последовательность букв (линейный их ряд) в этом

алфавите.

Пример. В алфавите А = {а, b, с} заданы слова:

N = ab,

М = bсb,

К = аbсbсbаb.

Рассмотрим два слова N и К в некотором алфавите А. Если слово N является ча-

стью К, то говорят, что N входит в К.

Зададим в алфавите А конечную систему подстановок

N – М,

S – Т, ..., где N, М, S, Т, ... – слова в этом алфавите.

Любую подстановку N – М можно применить к некоторому слову К следую-

щим способом: если в К имеется одно или несколько вхождений слова N, то любое из

них может быть заменено словом М и, наоборот, если имеется вхождение М, то его

можно заменить словом N.

Примеры. В алфавите А = {а, b, с} имеются слова:

1) N = ab, М = bсb, К = аbсbсbаb.

Заменив в слове К= аbсbсbаb слово N на М, получим bcbcbcbab или

аbсbсbbсb и, наоборот, заменив М на N, получим ааbсbаb или abcabab;

2) S = bасb, подстановка аb – bсb недопустима к слову S, так как ни ab, ни

bсb не входит в это слово.

К полученным с помощью допустимых подстановок словам можно снова при-

менить допустимые подстановки и т.д.

Слова P1 и P2 в некотором ассоциативном исчислении называются смежными,

если одно из них может быть преобразовано в другое однократным применением до-

пустимой подстановки.

Последовательность слов Р, P1, Р2, ..., М называется дедуктивной цепочкой,

ведущей от слова Р к слову М, если каждое из двух рядом стоящих слов этой цепочки

смежное.

Слова Р и М называют эквивалентными, если существует цепочка от Р к М и

обратно.

12

Пример. Пусть заданы:

алфавит:

{а, b, с, d, е};

система подстановок:

ас – са;

abac – abace;

ad – da;

eca – ae;

bc – cb;

eda – be;

bd – db;

edb – be.

Слова Р = abcde и М = acbde – смежные (подстановка bc – cb).

Слова Р = abcde и М = cadbe – эквивалентны.

Любой процесс вывода формул, математические выкладки и преобразования

также являются дедуктивными цепочками в некотором ассоциативном исчислении.

Построение ассоциативных исчислений является универсальным методом де-

терминированной переработки информации и позволяет формализовать понятие ал-

горитма.

На основе ассоциативного исчисления А.А. Марков ввел понятие алгоритма:

«Алгорифмом в алфавите А называется точное общепонятное предписа-

ние, определяющее потенциально осуществимый процесс последовательного пре-

образования абстрактных слов в А, процесс, допускающий любое слово в А в каче-

стве исходного» [13 , с. 51].

Алгоритм в алфавите А задается в виде системы допустимых подстановок, до-

полненной точным предписанием о том, в каком порядке нужно применять допусти-

мые подстановки и когда наступает останов.

Пример. Заданы:

алфавит:

А = {а, b, с};

система подстановок В:

cb → сс, (1)

cca → ab, (2)

аb → bса. (3)

Предписания о применении подстановок:

в произвольном слове Р надо сделать возможные подстановки, заменив ле-

вую часть подстановок на правую;

повторить процесс с вновь полученным словом.

Алгоритмы. Теоретический материал

13

Применим систему подстановок В к слову babaac:

bаbaас→ bbcaaac

так как система подстановок исчерпана, о алгоритм завершен (останов).

Применим систему подстановок В к слову bcacabc:

bcacabc → bcacbcac, применена подстановка (3)

bcacbcac→ bcacccac, применена подстановка (1)

bcacccac→ bcacabc, применена подстановка (2)

В результате получили исходное слово, следовательно, процесс бесконеч-

ный, т.е. останова нет.

Опираясь на ассоциативное исчисление, А.А. Марков ввел понятие нормаль-

ного алгорифма. Определение всякого нормального алгорифма состоит из определе-

ния:

1) алфавита алгорифма, к словам в котором алгорифм будет применяться;

2) схемы алгорифма.

Схемой нормального алгорифма называется конечный упорядоченный набор

формул подстановки, каждая из которых может быть простой или заключительной.

Пусть заданы:

алфавит А = { a1, …, ai };

Р и Q – слова в алфавите А;

выражение P → Q - простая формула подстановки слов в алфавите А;

выражение P → · Q - заключительная формула подстановки слов в алфавите А.

конечный список формул подстановки в алфавите А (группа символов (·) – точ-

ка в скобках означает, что формула подстановки может быть простой или заключи-

тельной):

P1 → (·)Q1,

P2 → (·)Q2,

P3 → (·)Q3,

Рm → (·)Qm,

Pr → (·)Qr.

Условимся предварительно, что слово Т входит в слово Q, если существуют

такие (возможно пустые) слова U и V, что

Q = UТV.

Алгорифм, определенный таким образом, называется нормальным алгорифмом

(или алгорифмом А.А. Маркова) в алфавите А.

Работа алгорифма может быть описана следующим образом.

Пусть дано слово Р в алфавите А.

14

Находим первую в схеме алгорифма формулу подстановки

Рm → (·)Qm такую, что Рm входит в Р.

Подставляем слово Qm вместо самого левого вхождения слова Рm в слово Р.

Пусть R1 – результат подстановки.

Если формула подстановки Рm → (·)Qm – простая, то применим к R1 тот же по-

иск, который был только что применен к Р, и т. д.

Если формула подстановки Рm → (·)Qm – заключительная, то работа алгорифма

заканчивается (останов) и R1 будет результатом его работы.

Если получим такое слово Ri, что ни одно из слов P1, ... , Pr не входит в Ri, то

работа алгорифма заканчивается и Ri будет результатом его работы.

Возможно, что описанный процесс никогда не закончится. В таком случае го-

ворят, что алгорифм неприменим к слову P.

Пример нормального алгорифма, описывающего сложение натуральных

чисел, представленных наборами единиц.

Задан алфавит:

А={+,1}

Схема алгорифма (Задана конечная система подстановок В):

1+ → +1 (1)

+1 → · 1 (2)

т.е. точка перед единицей означает, что эта формула подстановки заключитель-

ная.

Применим этот алгоритм к слову: Р = 11+11.

Последовательно применяя подстановки к слову Р, получаем:

Р = 11+11 Р = 11+11 применим формулу (1) Р1 = 1+111

Р1 = 1+111 применим формулу (1) Р2 = +1111

Р2 = +1111 применим формулу (2) Р3 = 1111

Нормальный алгоритм Маркова можно рассматривать как универсальную фор-

му задания любого алгоритма. Универсальность нормальных алгоритмов деклариру-

ется принципом нормализации: для любого алгоритма в произвольном конечном ал-

фавите А можно построить эквивалентный ему нормальный алгоритм (над алфа-

витом А).

Принцип нормализации теперь может быть высказан в видоизмененной форме:

все алгоритмы нормализуемы.

Данный принцип не может быть строго доказан, поскольку понятие произ-

вольного алгоритма не является строго определенным и основывается на том, что все

известные в настоящее время алгоритмы являются нормализуемыми, а способы ком-

Алгоритмы. Теоретический материал

15

позиции алгоритмов, позволяющие строить новые алгоритмы из уже известных, не

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

Способы композиции нормальных алгоритмов

Суперпозиция алгоритмов. При суперпозиции двух алгоритмов А и В выходное

слово первого алгоритма А рассматривается как входное слово второго алгоритма

В, результат суперпозиции С может быть представлен в виде С(р) = В(А(р)).

Объединение алгоритмов. Объединением алгоритмов А и В в одном и том же алфа-

вите называется алгоритм С в том же алфавите, преобразующий любое слово р, со-

держащееся в пересечении областей определения алгоритмов А и В, в записанные

рядом слова А(р) и В(р).

Разветвление алгоритмов. Разветвление алгоритмов представляет собой компози-

цию D трех алгоритмов А, В и С, причем область определения алгоритма D являет-

ся пересечением областей определения всех трех алгоритмов А, В и С, а для любого

слова р из этого пересечения D(p) = А(р), если С(р) = е, D(p) = B(p), если С(р) = е,

где е – пустая строка.

Итерация алгоритмов. Итерация (повторение) представляет собой такую компози-

цию С двух алгоритмов А и В, что для любого входного слова р соответствующее

слово С(р) получается в результате последовательного многократного применения

алгоритма А до получения слова, преобразуемого алгоритмом В.

Нормальные алгоритмы Маркова являются не только средством теоретических

построений, но и основой специализированного языка программирования РЕФАЛ,

применяемого как язык символьных преобразований при разработке систем искусст-

венного интеллекта. Это один из немногих языков, разработанных в России и полу-

чивших известность во всем мире.

Существует строгое доказательство того, что по возможностям преобразования

нормальные алгоритмы Маркова эквивалентны машинам Тьюринга.

Точное определение понятия «алгоритм» позволяет сказать о задаче, для реше-

ния которой нам не известен алгоритм, существует ли он вообще. В практике под ал-

горитмом обычно понимают программу для компьютера, т.е. разрабатывают алгоритм

как программу на каком-либо языке программирования. Ограниченность такого под-

хода состоит в следующем:

1) все, что можно запрограммировать с помощью какого-либо языка програм-

мирования, представляется любой из алгоритмических моделей (А. Черч, А. Пост,

А. Тьюринг, А.А. Марков),

2) формализация понятия алгоритм позволила установить, какие задачи вообще

нельзя запрограммировать.

В теории алгоритмов доказано существование двух алгоритмически не разре-

шимых задач:

1) по описанию алгоритма и его входным данным необходимо выяснить, за-

вершит ли он работу. Эта не разрешимая задача известна как «проблема останова».

16

Отсюда следует, что невозможно создать универсальный (пригодный для любой про-

граммы) алгоритм отладки программ;

2) проблема эквивалентности – существует ли «машина Т» (алгоритм), для ко-

торой исходными данными являются результаты работы «машины Т1» и «машины

Т2» (алгоритмов), которая определяет эквивалентность результатов работы «машин Т1

и Т2» (алгоритмов). Отсюда следует, что на практике каждый программист должен

доказать, действительно ли разработанная им программа решает поставленную зада-

чу.

В качестве рабочего определения понятия «алгоритм» используем определение

Международной организации по стандартизации (документ СТ ИСО 2382/1 – 84):

АЛГОРИТМ (ALGORITHM) – конечный набор предписаний, определяющий ре-

шение задачи посредством конечного количества операций.

Пример. Полная формулировка последовательности арифметических опера-

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

Характерные свойства алгоритма:

1) дискретность – алгоритм состоит из отдельных команд,

2) определенность – каждая команда алгоритма определена и указан способ ее

выполнения,

3) результативность – алгоритм всегда приводит к получению результата,

4) правильность – сам алгоритм правильный и применение правильное,

5) массовость – алгоритм разработан для решения класса однотипных задач,

6) конечность – результат достигается за конечное число шагов.

Совокупность задач, к которым применим алгоритм, называется областью

применимости алгоритма.

Исполнитель алгоритмов

Алгоритм всегда разрабатывают для конкретного исполнителя.

Исполнитель алгоритмов – это объект (кто или что), формально исполняющий

алгоритмы. Исполнитель характеризуется системой команд (СКИ) и средой, в кото-

рой исполняет алгоритмы. Если исполнитель получает команду, не входящую в его

систему команд, то он сообщает «не понял». Если исполнитель получает команду, ко-

торую не может исполнить по какой-либо причине, то он сообщает «не могу».

В теории алгоритмов исполнители: машины Поста и Тьюринга. В практике –

исполнители: ЭВМ, роботы. В обучении исполнителями служат различные учебные

программы: Кукарача, Перевозчик, Кенгуренок, ГРИС, Стрелочка и т.д.

Алгоритмы. Теоретический материал

17

Величины

Информация предоставляется исполнителю в форме величин. Величина в ин-

форматике – это объект любой природы: число, текст, таблица, график и т. д.

Основные характеристики величин:

1) имя величины,

2) вид величины,

3) тип величины,

4) значение величины.

Имя величины

С точки зрения человека имя величины – это ее обозначение в алгоритме. Для

исполнителя имя величины – это место в памяти, где хранится значение величины.

Имя величины – статическая характеристика, т. е. имя не изменяется в процессе ис-

полнения алгоритма.

Именем может быть любая последовательность символов (букв, цифр и знаков

подчеркивания), начинающаяся с буквы. Не принято использовать в имени символы:

, ? ! * % ; : №

Правильные имена: VEL15, VEL_15, КНИГА

Неправильные имена: ?VEL15, *VEL_15, \КНИГА

Виды величин

Вид величины характеризует ее использование в алгоритме. Вид величины –

статическая характеристика, т. е. он не изменяется в процессе исполнения алгоритма.

Различают: аргументы, результаты, вспомогательные величины.

Типы величин

Тип величины задает множество допустимых значений величины и множество

выполняемых над ней операций. Тип величины – статическая характеристика, т. е.

тип величины не изменяется в процессе исполнения алгоритма (см. табл. 1).

18

Таблица 1. Типы величин

Типы

величин Обозначение Описание Например

Числовые

нат Натуральный ряд

чисел

нат S

Описана величина S натурального типа

цел Целые числа цел М

Описана величина М целого типа

вещ

Вещественные

(действительные)

числа

вещ P

Описана величина P действительного

типа

Логиче-

ские лог

Множество зна-

чений величины

логического типа

состоит из двух

элементов: да и

нет

лог F

Описана величина F логического типа

Таблич-

ные таб

Таблица с число-

выми, литерными

или символьными

элементами

таб цел Т [1..10]

Описана величина Т табличного типа,

содержащая 10 элементов целого типа

Символь-

ные сим

Символы алфави-

тов

сим А

Описана величина А символьного типа

Литерные лит Строка символов лит L

Описана величина L литерного типа

Таблица 2. Операции, выполняемые над числовыми величинами

Операция Тип результата

Арифметические операции

+ сложение Определяется типом величин слагаемых

– вычитание Определяется типом величин

* умножение Определяется типом величин сомножителей

/ деление вещ

^ возведение в степень Определяется типом величин сомножителей

Операции сравнения

= равно

лог

< меньше

> больше

< > не равно

<= меньше или равно

>= больше или равно

Алгоритмы. Теоретический материал

19

Кроме того, для числовых величин определен ряд стандартных функций. Ука-

жем две из них:

div(х,у) – целая часть частного от деления х на у (х, у – тип цел);

mod(х,у) – остаток от деления х на у (х, у – тип цел).

Над величинами логического типа можно выполнять известные логические

операции (НЕ, И, ИЛИ, импликация и т.д.) и две операции сравнения = (равно), <> (не

равно); результат всех операций имеет тип лог (см. табл. 2)

Значение величины

Значение величины – это ее содержание. Значение величины – динамическая

характеристика, т. е. оно может изменяется в процессе исполнения алгоритма сколько

угодно раз.

Изменить значение величины можно командой ввода значения величины в па-

мять исполнителя или командой присваивания в процессе исполнения алгоритма.

Обозначение команды присваивания (двоеточие равно)

:=

Формат команды присваивания:

имя величины := выражение

Например:

А:= 6, читается: величине А присвоить значение 6;

В:=А–1, читается: величине В присвоить значение разности значения величины

А и единицы.

Запомните! Тип величины в левой части команды присваивания и тип

выражения (или константы, или величины) в правой части команды присваи-

вания должны быть одинаковыми!

Способы представления алгоритмов

Наиболее известны следующие способы представления алгоритмов:

– на естественном языке (словесное описание);

– на псевдокоде, например на школьном алгоритмическом языке (АЯ);

– в виде графической схемы алгоритма (блок-схемы);

– в виде N-S диаграммы (структурограмма, диаграмма Насси-Шнейдермана,

структурная блок-схема) [19];

– на языке программирования (в виде программы).

Алгоритмический язык

Способ записи алгоритмов, в котором используются предложения естественно-

го и математического языков, называется псевдокодом. Для наших (учебных) целей

20

наиболее пригоден псевдокод, известный под названием школьный алгоритмический

язык – АЯ.

Алгоритмический язык – это набор символов, соглашений и правил для записи

алгоритмов.

В качестве набора символов можно использовать любые известные исполнителю

символы.

Соглашения и правила записи алгоритмов. Для записи алгоритмов используются

служебные слова. Их назначение, смысл и способ применения строго определены.

Служебные слова в тексте алгоритма выделяют каким-либо способом, обычно под-

черкиванием.

1. Минимально необходимый набор служебных слов:

алг (алгоритм) – указывает заголовок алгоритма;

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

надо указывает на выходные данные (цель исполнения алгоритма);

нач (начало) – указывает начало тела алгоритма;

кон (конец) – указывает конец алгоритма.

2. Комбинации служебных слов:

если то иначе все;

пока нц кц;

выполнять до;

для от до шаг нц кц

используются для записи управляющих структур. Подробно они будут описаны

в разделе «Основные управляющие структуры».

3. Общий вид алгоритма:

алг ИМЯ_(аргументы, результаты)

дано условия применимости алгоритма

надо цель исполнения алгоритма

нач

команда или управляющая структура №1

команда или управляющая структура №2

команда или управляющая структура №N

кон

Графические схемы алгоритмов

Графическая схема алгоритма представляется в соответствии с ГОСТ 19.701-90

«Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила

выполнения» (разработанный методом прямого применения международного стан-

дарта ИСО 5807-85 «Обработка информации. Символы и условные обозначения блок-

схем данных, программ и систем, схем программных сетей и системных ресурсов»).

Алгоритмы. Теоретический материал

21

Для построения графической схемы алгоритма используют блоки (имеющие

свое наименование и обозначение) и управляющие структуры, состоящие из этих

блоков. Минимальный набор графических символов, необходимый для проектирова-

ния и анализа алгоритмов, приведен в табл. 3. Любая управляющая структура имеет

один вход и один выход. Алгоритм, построенный из таких структур, называется

структурированным.

Структурное кодирование – это метод разработки алгоритмов, основанный на

использовании управляющих структур: следование, ветвление, цикл. Правильность

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

структуры могут быть вложены в другие.

Таблица 3. Применение графических символов для изображения графических схем

алгоритмов в соответствии с ГОСТ 19.701-90 (ИСО 5807-85)

Наименование

символа

Обозначение

символа Функции

Данные

Символ отображает данные, носитель данных не

определен. Используется для обозначения опера-

ций ввода и вывода данных

Процесс

Символ отображает функцию обработки данных

любого вида (выполнение определенной операции

или группы операций, приводящее к изменению

значения, формы или размещения информации).

Используется для обозначения операций присваи-

вания

Предопреде-

ленный про-

цесс

Символ отображает предопределенный процесс,

состоящий из одной или нескольких операций или

шагов, которые определены в другом месте (в

подпрограмме, модуле). Используется для обозна-

чения неэлементарных блоков

Подготовка

Символ отображает модификацию команды или

группы команд с целью воздействия на некоторую

последующую функцию (установка переключате-

ля, модификация индексного регистра или ини-

циализация программы). Может быть использован

для обозначения заголовка цикла

22

Наименование

символа

Обозначение

символа Функции

Решение

Символ отображает решение или функцию пере-

ключательного типа, имеющую один вход и ряд

альтернативных выходов, один и только один из

которых может быть активизирован после вычис-

ления условий, определенных внутри этого сим-

вола. Соответствующие результаты вычисления

могут быть записаны по соседству с линиями,

отображающими эти пути. Используется для обо-

значения оператора условного перехода или опе-

ратора варианта

Граница цикла

Символ, состоящий из двух частей, отображает

начало и конец цикла. Обе части символа имеют

один и тот же идентификатор. Условия для ини-

циализации, приращения, завершения и т.д. по-

мещаются внутри символа в начале или в конце в

зависимости от типа цикла

Соединитель

Символ отображает выход в часть схемы и вход из

другой части этой схемы и используется для об-

рыва линии и продолжения ее в другом месте. Со-

ответствующие символы-соединители должны со-

держать одно и то же уникальное обозначение

Терминатор

Символ отображает выход во внешнюю среду и

вход из внешней среды. Используется для обозна-

чения начала или окончания алгоритма

Линия

Символ отображает поток данных или управле-

ния. Направления справа налево и снизу вверх

обозначаются стрелками. Используется для со-

единения символов в алгоритме

Параллельные

действия Символ отображает синхронизацию двух или бо-

лее параллельных операций

Пунктирная

линия

Символ отображает альтернативную связь между

двумя или более символами. Кроме того, символ

используется для обведения аннотированного

участка при записи комментариев

Алгоритмы. Теоретический материал

23

Наименование

символа

Обозначение

символа Функции

Комментарий

Символ используется для добавления описатель-

ных комментариев или пояснительных записей с

целью объяснений или примечаний. Пунктирные

линии в символе комментария связаны с соответ-

ствующим символом или могут обводить группу

символов. Текст комментариев или примечаний

должен быть помещен около ограничивающей

фигуры

Пропуск

Символ (три точки) используется в схемах для

отображения пропуска символа или группы сим-

волов, в которых не определены ни тип, ни число

символов. Символ используется только в симво-

лах линий или между ними. Он применяется глав-

ным образом в схемах, изображающих общие ре-

шения с неизвестным числом повторений

24

Основные управляющие структуры

Управляющая структура «Следование»

Данная управляющая структура используется в тех случаях, когда исполнитель

должен выполнить последовательно одну или несколько операций.

Общий вид управляющей структуры «Следование»

в виде блок-схемы: на псевдокоде:

нач

<серия команд>

кон

В соответствии с парадигмой структурного программирования первоначально

любая, даже очень сложная задача, представляется с использованием структуры

«Следование» и затем каждая <серия команд> последовательно уточняется.

Пример использования управляющей структуры «Следование»

Задача. Разработайте алгоритм, который увеличивает на 2 (целое число) вве-

денное пользователем значение величины целого типа А и выводит на экран получен-

ное значение А.

Решение

Проектирование

1. Постановка задачи:

входные данные: величина А целого типа, цел А;

выходные данные: величина А целого типа, цел А;

связь между входными и выходными данными: А:=А+2.

2. Проект решения задачи сведен в табл. 4.

Таблица 4. Проект решения задачи

Выполняемые действия

Наименование

графического

символа

1 Начало алгоритма Терминатор

2 Описание используемых переменных Процесс

3 Ввод данных (ввод значения переменной А, тип целый) Данные

4 Присваивание значения (переменной А значения А+2) Процесс

5 Вывод данных (вывод значения переменной А, тип целый) Данные

6 Конец алгоритма Терминатор

Алгоритмы. Теоретический материал

25

Реализация

Представим алгоритм в виде графической схемы.

Используемые в алгоритме графические символы

описаны в табл. 4 (правый столбец).

Для представления потока данных и управления

используется стандартный символ «Линия».

Таким образом, получим следующую графиче-

скую схему алгоритма решения задачи:

26

Управляющая структура «Ветвление»

Управляющая структура «Ветвление» используется в тех случаях, когда испол-

нитель должен выбрать одно из двух возможных продолжений исполнения алгорит-

ма.

Общий вид управляющей структуры «Ветвление»

Полная форма:

в виде блок-схемы: на псевдокоде:

если <условие >

то <серия команд 1>

иначе <серия команд 2>

все

Сокращенная форма:

в виде блок-схемы: на псевдокоде:

если <условие >

то <серия команд>

все

Условие – это логическое выражение, принимающее значение истина (True)

или ложь (False).

В зависимости от значения истинности условия исполнитель исполняет одну и

только одну серию команд.

Алгоритмы. Теоретический материал

27

Пример использования управляющей структуры «Ветвление»

(сокращенная форма)

Задача. Разработайте алгоритм, который проверяет введенное пользователем

значение величины целого типа А, и если оно отрицательное, то увеличивает введен-

ное значение на 2, а затем выводит на экран полученное значение А.

Решение

Проектирование

1. Постановка задачи:

входные данные: величина А целого типа, цел А;

выходные данные: величина А целого типа, цел А;

связь между входными и выходными данными:

если А<0

то А:=А+2.

2. Проект решения задачи сведен в табл. 5.

Таблица 5. Проект решения задачи

Выполняемые действия

Наименование

графического

символа

1 Начало алгоритма Терминатор

2 Описание используемых переменных Процесс

3 Ввод данных (ввод значения переменной А, тип целый) Данные

4 Анализ введенных данных (значение переменной А отри-

цательное) Решение

5 Присваивание значения (переменной А присваивается

значение А+2) Процесс

6 Вывод данных (полученное значение переменной А, тип

целый) Данные

7 Конец алгоритма Терминатор

28

Реализация

Представим алгоритм в виде графической схемы.

Используемые в алгоритме графические символы

представлены в табл. 5 (правый столбец).

Для отображения потока данных и управления ис-

пользуется стандартный символ «Линия».

Таким образом, на основе табл. 5 получим следую-

щую графическую схему алгоритма решения задачи.

Алгоритмы. Теоретический материал

29

Пример использования управляющей структуры «Ветвление»

(полная форма)

Задача. Разработайте алгоритм, который проверяет введенное пользователем

значение величины целого типа А, и если оно отрицательное, то увеличивает введен-

ное значение на 2, иначе уменьшает его на 4, а затем выводит на экран полученное

значение А.

Решение.

Проектирование

1. Постановка задачи.

Входные данные: величина А целого типа, цел А;

Выходные данные: величина А целого типа, цел А;

Связь между входными и выходными данными:

если А<0

то А:=А+2

иначе А:=А-4

2. Проект решения задачи сведен в табл. 6.

Таблица 6. Проект решения задачи

Выполняемые действия

Наименование

графического

символа

1 Начало алгоритма Терминатор

2 Описание используемых переменных Процесс

3 Ввод данных (ввод значения переменной А, тип целый) Данные

4 Анализ введенных данных (значение переменной А отри-

цательное) Решение

5 Присваивание значения (переменной А присваивается

значение А+2) Процесс

6 Присваивание значения (переменной А присваивается

значение А-4) Процесс

7 Вывод данных (вывод полученного значения переменной

А, тип целый) Данные

8 Конец алгоритма Терминатор

Реализация

Представим алгоритм в виде графической схемы.

Используемые в алгоритме графические символы описаны в табл. 6 (правый

столбец).

30

Для отображения потока данных и

управления используется стандартный символ

«Линия».

Таким образом, на основании табл. 6

получим следующую графическую схему ал-

горитма решения задачи:

Алгоритмы. Теоретический материал

31

Управляющая структура «Цикл ПОКА»

Управляющая структура «Цикл ПОКА» используется в тех случаях, когда ис-

полнитель должен многократно исполнять последовательность (тело цикла) в зависи-

мости от значения истинности некоторого условия.

Особенность управляющей структуры «Цикл ПОКА» состоит в том, что разра-

ботчику алгоритма не известно, сколько раз необходимо исполнять последователь-

ность (тело цикла).

Общий вид управляющей структуры «Цикл ПОКА»

в виде блок-схемы: на псевдокоде:

пока <условие >

нц

<тело цикла>

кц

Условие – это логическое выражение, принимающее значение истина (True)

или ложь (False).

Исполнитель проверяет условие (вычисляет значение истинности) только перед

исполнением тела цикла, поэтому «Цикл ПОКА» называется циклом с предусловием,

а само условие называется условием продолжения исполнения тела цикла. Изменение

значения истинности условия разработчик алгоритма предусматривает командой

внутри тела цикла.

Возможны три случая исполнения управляющей структуры «Цикл ПОКА»:

1. Если при первой проверке значение истинности условия ложь, то исполни-

тель не исполняет тело цикла ни одного раза.

2. Если условие принимает значение истина конечное количество раз, то и тело

цикла исполняется столько же раз.

3. Если условие всегда принимает значение истина, то тело цикла исполняется

бесконечное количество раз (зацикливание).

Пример использования управляющей структуры

«Цикл ПОКА»

Задача. Разработайте алгоритм, который вычисляет сумму S первых n нату-

ральных чисел и выводит на экран полученное значение S.

32

Решение

Проектирование:

1. Постановка задачи:

входные данные: величина n целого типа, цел n;

выходные данные: величина S целого типа, цел S;

связь между входными и выходными данными:

пока i <= n.

нц S := S + i; i:=i+1 кц

2. Проект решения задачи сведен в табл. 7.

Таблица 7. Проект решения задачи

Выполняемые действия

Наименование

графического

символа

1 Начало алгоритма Терминатор

2 Описание используемых переменных (целые n, S, i) Процесс

3 Ввод данных (ввод значения переменной n, тип целый) Данные

4 Присваивание значения (переменной S присваивается зна-

чение 0) Процесс

5 Присваивание значения (переменной i присваивается зна-

чение 1) Процесс

6 Анализ данных (значение переменной i не превосходит n) Граница цикла

Присваивание значения (переменной S присваивается

значение S + i) Процесс

Присваивание значения (переменной i присваивается

значение i+1) Процесс

Граница цикла

7 Вывод данных (вывод вычисленного значения переменной

S, тип целый) Данные

8 Конец алгоритма Терминатор

Алгоритмы. Теоретический материал

33

Реализация

Представим алго-

ритм в виде графической

схемы.

Используемые в ал-

горитме графические сим-

волы представлены в табл.

7 (правый столбец).

Для отображения

потока данных и управле-

ния используется стан-

дартный символ «Линия».

Таким образом, на

основании табл. 7 получим

следующую графическую

схему алгоритма решения

задачи:

34

Управляющая структура «Цикл ВЫПОЛНЯТЬ ДО»

Данная управляющая структура используется в тех случаях, когда исполнитель

должен многократно исполнять последовательность команд тела цикла в зависимости

от некоторого условия.

Особенность управляющей структуры «Цикл ВЫПОЛНЯТЬ ДО»:

1) исполнитель обязательно один раз исполнит последовательность команд те-

ла цикла,

2) разработчику алгоритма не известно, сколько раз необходимо исполнять по-

следовательность команд тела цикла.

Общий вид управляющей структуры «Цикл ВЫПОЛНЯТЬ ДО»

в виде блок-схемы: на псевдокоде:

выполнять

<тело цикла (серия команд)>

до <условие >

Условие – это логическое выражение, принимающее значение истина (True)

или ложь (False).

Исполнитель проверяет условие (вычисляет значение истинности) только после

исполнением тела цикла, поэтому «Цикл ВЫПОЛНЯТЬ ДО» называется циклом с по-

стусловием, а само условие называется условием завершения исполнения тела цикла.

Изменение значения условия разработчик алгоритма предусматривает операцией

внутри цикла.

Возможны три случая исполнения управляющей структуры «Цикл ВЫПОЛ-

НЯТЬ ДО».

1. Если при первой проверке значения истинности условия истина (True), то

исполнитель уже исполнил тело цикла один раз и завершает исполнение.

2. Если условие принимает значение истинности ложь (False) конечное количе-

ство раз, то и тело цикла исполняется столько же раз и +1 раз.

3. Если условие принимает значение истинности ложь (False), то и тело цикла

исполняется бесконечное количество раз (зацикливание).

Алгоритмы. Теоретический материал

35

Пример использования управляющей структуры

«Цикл ВЫПОЛНЯТЬ ДО»

Задача. Разработайте алгоритм, который вычисляет сумму S первых n нату-

ральных чисел и выводит на экран полученное значение S.

Решение.

Проектирование

1. Постановка задачи.

Входные данные: величина n целого типа, цел n;

Выходные данные: величина S целого типа, цел S;

Связь между входными и выходными данными:

выполнять

S:= S+i

i:=i+1

до i>n

2. Проект решения задачи сведен в таблицу 8.

Таблица 8. Проект решения задачи

Выполняемые действия

Наименование

графического

символа

1 Начало алгоритма Терминатор

2 Описание используемых переменных (целые n, S, i) Процесс

3 Ввод данных (ввод значения переменной n, тип целый) Данные

4 Присваивание значения (переменной S присваивается зна-

чение 0) Процесс

5 Присваивание значения (переменной i присваивается зна-

чение 1) Процесс

Граница цикла

Присваивание значения (переменной S присваивает-

ся значение S+i) Процесс

Присваивание значения (переменной i присваивает-

ся значение i+1) Процесс

6 Анализ данных (значение переменной i превосходит n) Граница цикла

7 Вывод данных (вывод полученного значения переменной

S, тип целый) Данные

8 Конец алгоритма Терминатор

Реализация

Представим алгоритм в виде графической схемы.

Используемые в алгоритме графические символы описанные в табл. 8 (правый

столбец).

36

Для отображения потока

данных и управления использует-

ся стандартный символ «Линия».

Таким образом, на основа-

нии табл. 8 получим следующую

графическую схему алгоритма

решения задачи:

Алгоритмы. Теоретический материал

37

Управляющая структура «Цикл ДЛЯ»

Управляющая структура «Цикл ДЛЯ»используется в тех случаях, когда испол-

нитель должен многократно исполнять последовательность команд тела цикла в зави-

симости от значения истинности некоторого условия.

Особенность управляющей структуры «Цикл ДЛЯ» – разработчику алгоритма

заранее известно, сколько раз необходимо выполнить последовательность команд те-

ла цикла.

Общий вид управляющей структуры «Цикл ДЛЯ»

в виде блок-схемы: на псевдокоде:

для i от A до B шаг Т

нц

<тело цикла (серия команд)>

кц

В управляющей структуре «Цикл ДЛЯ»:

i – управляющая переменная цикла (другое название – параметр цикла), вели-

чина целого типа.

Т – шаг; исполнитель изменяет текущее значение управляющей переменной

цикла на значение величины Т перед очередным исполнением серии команд (увели-

чивает или уменьшает). Если Т задано выражением, то исполнитель вычисляет его

значение только один раз перед первым исполнением серии команд. Значение Т не

может быть равно нулю.

А – начальное значение управляющей переменной цикла; исполнитель при-

сваивает управляющей переменной цикла i значение А в момент начала исполнения

управляющей структуры. Если А задано выражением, то исполнитель вычисляет его

значение только один раз перед первым исполнением серии команд.

В – конечное значение управляющей переменной цикла; исполнитель сравни-

вает с ним текущее значение управляющей переменной цикла i перед очередным ис-

полнением серии команд. Если В задано выражением, то исполнитель вычисляет его

значение только один раз перед первым исполнением серии команд.

УСЛОВИЕ продолжения исполнения тела цикла:

(Т>0) AND (i<=B) OR (T<0) AND (i>=B).

Исполнитель вычисляет значение истинности УСЛОВИЯ только перед испол-

нением тела цикла, поэтому цикл «ДЛЯ» исполняется также, как цикл «ПОКА».

38

Пример использования управляющей структуры

«Цикл ДЛЯ»

Задача. Разработайте алгоритм, который вычисляет сумму S первых n нату-

ральных чисел и выводит на экран полученное значение S.

Решение.

Проектирование

1. Постановка задачи.

Входные данные: величина n целого типа, цел n;

Выходные данные: величина S целого типа, цел S;

Связь между входными и выходными данными:

для i от 1 до n шаг 1

нц

S:=S+i

кц

2. Проект решения задачи сведен в табл. 9.

Таблица 9. Проект решения задачи

Выполняемые действия

Наименование

графического

символа

1 Начало алгоритма Терминатор

2 Описание используемых переменных (целые n, S, i) Процесс

3 Ввод данных (ввод значения переменной n, тип це-

лый) Данные

4 Присваивание значения (переменной S присваивается

значение 0) Процесс

5 Анализ данных (значение переменной i от 1 до n) Граница цикла

Присваивание значения (переменной S при-

сваивается значение S + i) Процесс

Граница цикла

6 Вывод данных (вывод вычисленного значения пере-

менной величины S, тип целый) Данные

7 Конец алгоритма Терминатор

Реализация

Представим алгоритм в виде графической схемы.

Используемые в алгоритме графические символы описаны в табл. 9 (правый

столбец).

Для отображения потока данных и управления используется стандартный сим-

вол «Линия».

Алгоритмы. Теоретический материал

39

Таким образом, на основании табл. 9 получим следующую графическую схему

алгоритма решения задачи:

Контрольные вопросы

1. Что такое алгоритм?

2. Перечислите характерные свойства алгоритма и поясните их смысл.

3. Что такое алгоритмические модели? Перечислите их типы.

4. Что достаточно для получения оценок сложности алгоритмов?

5. Чем характеризуется исполнитель алгоритмов?

6. Перечислите способы представления алгоритмов.

7. Перечислите основные управляющие структуры.

8. В чем различие полной и сокращенной формы управляющей структуры

«Ветвление»?

9. Назовите особенность управляющей структуры «Цикл ПОКА».

10. Назовите особенность управляющей структуры «Цикл ВЫПОЛНЯТЬ ДО».

11. Назовите особенность управляющей структуры «Цикл ДЛЯ».

40

Разработка алгоритмов

Общепринято, что разработка алгоритма состоит из следующей последователь-

ности работ:

1. Разработка требований – определена условием задачи.

2. Проектирование – определение основных операций с последующим уточне-

нием каждой из них.

3. Реализация – выбор способа записи (представления) алгоритма и запись по

правилам этого способа.

4. Тестирование и отладка – выявление ошибок и их устранение.

Разработка требований

Требования к алгоритму, процессу ввода и вывода данных, как правило, опре-

делены решаемой задачей.

Проектирование

Проектирование начинают с постановки задачи. Необходимо выяснить: Что

дано? Что требуется? Что будет считаться результатом (решением задачи)? Каким

условиям должны удовлетворять исходные данные? Каким условиям должен удовле-

творять результат?

Затем следует теоретический анализ задачи:

- построение модели предметной области (выделение объектов, установление

их свойств и отношений между ними);

- определение структуры входных и выходных данных;

- определение и описание процессов и действий, допустимых в предметной об-

ласти;

- выявление известных методов решения задачи;

− определяется точная последовательность выполнения предписаний, опреде-

ляемых методом решения.

Реализация

Среди современных инструментальных средств разработки программ сущест-

вуют системы, допускающие реализацию алгоритма до получения программного ко-

да. На лабораторных работах для реализации разрабатываемых алгоритмов (а также

их тестировании и отладки) будем использовать интегрированную систему «Конст-

руктор схем алгоритмов» («Schemes»), которая разработана в ВЦ-ЦНТО Пермского

государственного национального исследовательского университета.

Алгоритмы. Теоретический материал

41

Тестирование и отладка

«Тестирование может показать наличие ошибок в про-

грамме, но никогда не докажет их отсутствие»

Эдсгер Дейкстра

После разработки алгоритма переходят к этапу «Тестирование».

Главная цель тестирования – обнаружить факт наличия в алгоритме синтакси-

ческих и семантических (смысловых) ошибок и определить их место, т. е. необходимо

проверить, делает ли алгоритм то, для чего он предназначен, а также, не делает ли он

того, чего не должен делать.

Тестирование делится на этапы: выбор подхода к тестированию, проектирова-

ние и разработка тестовых наборов, проверка тестов, исполнение алгоритма на тесто-

вых наборах, анализ результатов.

Планировать тестирование нужно еще при разработке алгоритма. Разрабатывая

какой-либо фрагмент алгоритма, необходимо представлять себе, как он будет тести-

роваться, исходя из предположения, что в алгоритме есть ошибки. Это позволяет:

− обеспечить непрерывность этапов создания алгоритма: сначала определяют-

ся входные данные, затем они используются при разработке, затем выполня-

ется готовый алгоритм, давая ожидаемые результаты;

− лучше понимаются ограничения на входные данные;

− устраняется возможность подгонки тестов к уже разработанному алгоритму;

− уменьшается вероятность внесения одних и тех же ошибок и в алгоритм, и в

тестовые данные.

На этапе «Тестирование» несколько раз исполняют алгоритм с такими тесто-

выми наборами входными данными, для которых результаты работы легко проверить.

Тестовый набор – совокупность исходных данных и ожидаемых результатов.

Создавая набор тестов, необходимо для каждого теста описать ожидаемые значения

выходных данных или результатов их обработки. Нельзя упрощать алгоритм, чтобы

облегчить тестирование. Очень важно учитывать общеизвестный факт: ошибки име-

ют свойство накапливаться. Отсюда парадоксальный вывод – чем больше ошибок

найдено в некотором фрагменте алгоритма, тем больше шансов, что там есть еще. По-

этому этот фрагмент алгоритма нужно протестировать еще раз.

Тестирование выполняется с помощью:

1. использование спецификации алгоритма (другие названия – метод черно-

го ящика, метод управление по данным);

2. использование логики алгоритма (другие названия метод белого ящика,

метод управление по логике).

При тестировании с использованием спецификации алгоритм рассматривается,

как черный ящик, о внутреннем устройстве которого ничего не известно. Этот подход

предназначен для выяснения обстоятельств, в которых поведение алгоритма не соот-

42

ветствует его спецификации. Крайним случаем такого подхода является исчерпы-

вающее входное тестирование – в качестве тестов используются все возможные на-

боры данных. Однако это практически невозможно, поэтому нужно искать наборы

входных данных, которые ограничены разумными пределами, но достаточно предста-

вительны.

При тестировании с использованием логики алгоритма анализируется его логи-

ка. Этот подход предназначен для выявления путей исполнения алгоритм, на которых

он «дает отказ». Крайний случай такого подхода – исчерпывающее тестирование пу-

тей. Однако даже в простых алгоритмах число путей может быть так велико, что все

их трудно перебрать, а тем более, построить для них наборы тестовых данных.

При создании тестового набора для любого метода тестирования необходимо:

1) учесть область применения программы, т.е. входные данные необходимо

подбирать с учетом предметной области;

2) определить ограничения на входные данные;

3) указать «особые» ситуации (например, значения которые могут привести к

ошибкам при вычислениях значений по формулам);

4) формировать тестовые наборы с учетом типа входных данных;

5) совокупность тестовых наборов должна исчерпывать все возможные «вари-

анты прохождения» алгоритма (для алгоритмов с ветвлениями и циклическими

структурами).

Получив результаты тестирования, внимательно их изучите. Каждое несоответ-

ствие полученных и ожидаемых выходных данных дает информацию об ошибках в

алгоритме, необходимую для его отладки.

Отладка состоит во внесении изменений и исправлений в алгоритм для устра-

нения найденных ошибок. При этом следует помнить, что:

− исправления могут привести к появлению новых ошибок;

− где есть одна ошибка, там может быть и еще одна;

− вносите изменения по одному и поочередно.

Тестирование и отладку выполняют неоднократно друг за другом до тех пор,

пока не будут устранены все обнаруженные ошибки.

Контрольные вопросы

1. Перечислите этапы проектирования алгоритмов.

2. На каком этапе решения задачи разрабатывают информационную модель?

3. В чем заключается построение алгоритма?

4. Назовите два основных подхода, используемых на этапе тестирования.

5. Что называют отладкой? Перечислите принципы отладки.

6. Что называют тестированием? Перечислите этапы тестирования.

7. Что является главной целью тестирования?

8. Что происходит в процессе тестирования?

Алгоритмы. Теоретический материал

43

9. Что такое тестовый набор? Перечислите требования, предъявляемые к тесто-

вому набору.

10. Какие подходы используются при разработке тестов?

11. Что такое метод белого и черного ящика?

12. Что такое исчерпывающее входное тестирование? В каком случае его приме-

няют?

44

Классы сложности задач

В основе классификации задач по сложности лежит вопрос о том, как быстро

растет время, необходимое для решения любой задачи, с ростом ее объема. Эта зави-

симость измеряется числом элементарных шагов, входящих в алгоритм решения за-

дачи.

Например, перемножение двух п-разрядных чисел можно выполнить за время,

пропорциональное квадрату числа разрядов. Принято считать, что это время «поли-

номиально по п». Но разложение числа на множители даже самыми современными

методами требует времени растущего с числом разрядов как 3

2 n . Принято считать,

что это время «экспоненциально по п».

Современные компьютеры эффективно решают задачи, число шагов в алго-

ритме которых растет в постоянной степени, например

п2 или п

(2,5),

где п – размер входных данных.

Такие алгоритмы называют эффективными, а задачи, решаемые с их помощью,

относят к классу сложности Р, где Р обозначает «полиномиальное время».

Примеры задач класса Р:

1) простая задача: по заданной сетке дорог определить, можно ли из одного го-

рода добраться до любого другого;

2) задачи, решение которых не столь очевидно:

− раскладывается ли данное число на множители или является простым;

− возможно ли, имея определенный список мужчин и женщин, желающих

вступить в брак друг с другом, подобрать каждому человеку желанного

партнера?

3) более сложные задачи:

− о размещении коробок различных размеров в багажнике автомобиля;

− как раскрасить страны на карте тремя различными цветами, при условии,

что государства, окрашенные одним и тем же цветом, нигде не должны гра-

ничить друг с другом;

− «задача коммивояжера», в которой требуется объехать группу городов, со-

единенных между собой дорогами – не посетить ни один из городов больше

одного раза.

Все три разновидности задачи являются «одинаковыми» в том смысле, что эф-

фективный алгоритм решения любой одной из них будет эффективным и для всех

остальных

В класс NP (NP означает «недетерминированное полиномиальное время») вхо-

дят задачи, для которых решение, если оно будет предложено, может быть проверено

за полиномиальное время, даже если найти само решение, – очень сложная задача.

Класс NP охватывает огромное число задач, представляющих практический интерес.

Классы сложности задач

45

Например, известна карта с множеством островов и мостов, для нахождения

способа объехать их все таким образом, чтобы ни один из них не посетил больше од-

ного раза, могут потребоваться годы. Но если такой маршрут уже предложен, прове-

рить, правилен ли он, будет несложно.

Самыми сложными в классе NP являются переборные, или NP-полные задачи,

обладающие свойством: если найден эффективный алгоритм решения одной из них,

то он может быть использован для решения всех остальных NP – задач.

Создание такого алгоритма означало бы, что современные представления о

классах Р, NP и NP-полных задачах совершенно неверны, и все задачи класса NP,

включая переборные, в действительности относятся к классу Р, что, в свою очередь,

означает тождественность классов Р и NP.

Очевидно, что все задачи класса Р входят также в класс NP, так как на провер-

ку правильности решения каждой уходит не больше времени, чем на ее решение.

Сложность алгоритма

Вычислительным процессом, порожденным алгоритмом, называется последо-

вательность шагов алгоритма, пройденных при исполнении этого алгоритма.

Сложность алгоритма – это количественная характеристика, свидетельст-

вующая о том, сколько времени он работает, либо – какой объем памяти ему необхо-

дим.

Виды сложности алгоритмов:

1) вычислительная (временная);

2) объемная (емкостная) сложность – определяется количеством скалярных

переменных, элементов массивов, элементов записей или просто количест-

вом байт);

3) сложность текста алгоритма – характеризует исполнителя (например ЭВМ),

его язык, а не метод решения задачи;

4) логическая сложность – определяется количеством человеко-месяцев, кото-

рое нужно потратить на создание алгоритма (программы для ЭВМ), по-

скольку не представляется возможным дать объективные количественные

характеристики.

Вычислительная сложность алгоритма – количество элементарных шагов в

вычислительном процессе этого алгоритма. Обратите внимание: именно в вычисли-

тельном процессе, а не в самом алгоритме. Очевидно, для сравнения сложности раз-

ных алгоритмов необходимо, чтобы сложность подсчитывалась в одних и тех же эле-

ментарных действиях.

Временная сложность алгоритма – это время Т, необходимое для его выпол-

нения. Оно равно произведению числа элементарных действий на среднее время вы-

полнения одного действия:

Т = k t.

46

Поскольку t зависит от исполнителя, реализующего алгоритм, то естественно

считать, что сложность алгоритма в первую очередь зависит от k. Очевидно, что в

наибольшей степени количество операций при выполнении алгоритма зависит от ко-

личества обрабатываемых данных. Действительно, для упорядочивания по алфавиту

списка из 100 фамилий требуется существенно меньше операций, чем для упорядочи-

вания списка из 100 000 фамилий. Поэтому сложность алгоритма выражают в виде

функции от объема входных данных.

Пусть задан алгоритм А. Для него существует параметр п, характеризующий

объем обрабатываемых алгоритмом данных и называемый размерностью задачи.

Обозначим:

Т(n) – время выполнения алгоритма,

f – некую функцию от п.

Будем говорить, что

Т(п) – время выполнения алгоритма А имеет порядок роста f(n) при п → ∞

или, по-другому,

алгоритм имеет теоретическую сложность О(( f (п)) (читается «о большое

от f(n)»),

если найдется такая константа с > 0 и число n0, что

Т(п) <= c f(n) при всех п >= п0 .

Здесь предполагается, что f(n) неотрицательно, по крайней мере при п >= п0.

Например:

– алгоритм, выполняющий только операции чтения данных из файла в опера-

тивную память, имеет линейную сложность О(п);

– алгоритм сортировки методом «пузырька» (см. «Операции с массивами»)

имеет квадратичную сложность О (п2), так как при сортировке любого массива надо

выполнить

(п2 – п)/2

операций сравнения (при этом операций перестановок вообще может не быть, на-

пример, на упорядоченном массиве).

Для решения задачи могут быть разработаны алгоритмы различной сложности.

Логично воспользоваться лучшим среди них, т.е. имеющим наименьшую сложность.

Объемная (емкостная) сложность алгоритма – определяется количеством

ячеек памяти, используемых в процессе его работы. Число шагов алгоритма может

сколь угодно сильно превосходить объем памяти за счет циклов по одним и тем же

объектам. Поэтому временная сложность считается основной характеристикой алго-

ритма.

Сложность текста алгоритма может быть оценена на основе анализа его тек-

ста. При этом для определенности полагают, что алгоритм представлен на конкрет-

ном языке программирования (типа Паскаля) и содержит явно записанные операции

пересылки и сравнения значений величин, арифметические операции, управляющие

структуры ветвления и циклов, а также их композиции.

Классы сложности задач

47

Пример. Алгоритм содержит цикл:

для i от 1 до x шаг 1

нц

<тело цикла>

кц

где x – входная переменная, .

Тело цикла выполняется x раз, худший случай при x = 100. Если предположить

равновероятность различных значений x, то среднее количество выполнений тела

цикла равно

(1/100)(1+2+3+ ...+100) = 50,5.

Пример. Алгоритм содержит вложенный цикл:

для i от 1 до x шаг 1

нц

для j от i до x шаг 1

нц

<тело цикла>

кц

кц

где x – входная переменная, .

Тело цикла выполняется

x + (x-1)+(x-2)+ ...+ 1 = x (x+1)/2 раз.

Верхняя граница сложности

max = (x (х+1)/2) = 13.

Среднее значение сложности подсчитать несколько труднее. Предположим, что

все 5 возможных значений x равновероятны. Тогда среднее значение сложности рав-

но:

Управляющая структура «Цикл ПОКА»

Циклы while и repeat анализировать значительно сложнее, чем цикл «ДЛЯ»,

поскольку количество исполнений тела цикла зависит от значения истинности или

ложности условия и не исключены изменения в теле цикла значений переменных,

входящих в состав условия.

Сложность алгоритма можно оценить и на основе анализа его графической

схемы.

Пример анализа сложности по схеме алгоритма. На рис. 1–3 представлен алго-

ритм поиска наибольшего из трех чисел а, b, с.

48

Рис. 1.Схема алгоритма поиска наибольшего из трех чисел. Метод 1.

Рис. 2. Схема алгоритма поиска наибольшего из трех чисел. Метод 2.

Классы сложности задач

49

Рис. 3. Схема алгоритма поиска наибольшего из трех чисел. Метод 3.

Определим, какой алгоритм эффективнее. Поскольку размерность данных во

всех алгоритмах одинаковая, то объемная сложность алгоритма одинаковая.

Оценим эффективность по вычислительной сложности (см. табл. 10).

Таблица 10. Оценка эффективности по вычислительной сложности

Вычислительная сложность Операция Метод 1 Метод 2 Метод 3

В лучшем случае сравнение 2 2 2

присваивание 1 1 1

В худшем случае сравнение 2 3 2

присваивание 2 1 1

Сравнение алгоритмов показывает, что алгоритмы примерно равноценны, но

при многократном использовании с разными исходными данными метод 3 даст наи-

меньшее (в среднем) количество операций.

Контрольные вопросы

1. Что значит высказывание «Задача алгоритмически разрешима»?

2. Что значит высказывание «Задача алгоритмически не разрешима»?

3. Что понимают под сложностью алгоритма в общем случае?

4. Перечислите характеристики сложности алгоритмов.

5. Приведите пример алгоритма и объясните, как найти объемную и временную

сложность.

50

Примеры выполнения заданий

Под заданием понимается вариант – набор задач по теме (темам), для которых

студент должен разработать алгоритмы, отладить и протестировать их в интегриро-

ванной системе «Конструктор схем алгоритмов» («Schemes»). По результатам работы

составить отчет.

Отчет о выполнении варианта для каждой задачи должен содержать:

1) условие задачи;

2) алгоритм решения задачи в виде графической схемы алгоритма;

3) тестовый набор, содержащий варианты значений входных данных и ожидае-

мых результатов (необходимо учесть все варианты выполнения алгоритма);

4) оценку объемной сложности разработанного алгоритма. Учитывать только

объем памяти необходимый для хранения входных данных и результатов;

5) оценку временной сложности разработанного алгоритма.

Рассмотрим пример оформления отчета о выполнении варианта, содержащего

три задачи:

− задачу №1 на управляющую структуру «следование»,

− задачу №2 на управляющую структуру «ветвление»,

− задачу №3 на управляющую структуру «цикл пока».

Задача №1 на управляющую структуру «следование».

1. Разработайте алгоритм для присваивания переменной величине t целого типа

значения 36.

2. Алгоритм решения задачи в виде графической схемы алгоритма

3. Тестовые наборы

№ набора Исходные данные

Результаты

ожидаемые полученные

цел t цел t цел t

1 36 36

Примеры выполнения заданий

51

4. Оценка объемной сложности разработанного алгоритма

№ набора Данные Тип Объем, байт

1 t цел 2

Итого 2

5. Оценку временной сложности разработанного алгоритма.

Операции Тест 1

Присваиваний 1

Сравнений 0

Таким образом, алгоритм имеет сложность О(n), т.е. линейную.

Задача №2 на управляющую структуру «ветвление»

1. Разработайте алгоритм, который проверяет сумму S введенных пользовате-

лем значений двух величин вещественного типа А, В и, если ее значение меньше

100,25, то значению флага F присвоить 0, иначе – 1. Затем алгоритм выводит на экран

полученное значение флага F. Величина F целого типа.

2. Алгоритм решения задачи в виде графической схемы алгоритма

52

3. Тестовые наборы

набора

Исходные

данные

Результаты

промежуточные ожидаемые полученные

ожидаемые полученные

вещ А вещ В вещ S вещ S цел F цел F

1 - 4,2 - 1,6 - 5,8 0

2 - 1 0,5 - 0,5 0

3 28,6 - 130 - 101,4 0

4 13,5 56,7 70,2 0

5 56 61,2 117,2 1

Тестовый набор составлен так, чтобы смоделировать работу алгоритма по обе-

им ветвям управляющей структуры «Ветвление».

4. Оценка объемной сложности разработанного алгоритма

набора

Данные Тип Объем,

байт

1 А вещ 4

2 В вещ 4

3 S вещ 4

4 F цел 2

Итого 14

5. Оценку временной сложности разработанного алгоритма

Операция Тест

1 2 3 4

Присваивание 2 2 2 2

Сравнение 1 1 1 1

Таким образом, алгоритм имеет сложность О(n), т.е. линейную.

Задача №3 на управляющую структуру «цикл пока»

1. Найти сумму пяти первых натуральных чисел. Результат вывести на экран.

2. Алгоритм решения задачи в виде графической схемы алгоритма.

Примеры выполнения заданий

53

3. Тестовые наборы

Исходные

данные

Результат

цел i цел S цел S

1 0 15

4. Оценка объемной сложности разработанного алгоритма

№ набора Данные Тип Объем,

байт

1 S цел 2

2 i цел 2

Итого 4

5. Оценку временной сложности разработанного ал-

горитма

Операции Тест 1

Присваиваний 12

Сравнений 6

Таким образом, алгоритм имеет сложность О(n), т.е.

линейную.

54

Задачи для самостоятельного выполнения

Некоторые из приведенных задач заимствованы из интегрированной системы

«Конструктор схем алгоритмов» («Schemes»), разработанной в ВЦ–ЦНТО ПГНИУ.

Управляющая структура «Следование»

Уровень А

1. Разработайте алгоритм для присваивания переменной m действительного типа

значения 36,6.

2. Разработайте алгоритм для присваивания переменной summa целого типа зна-

чения 0.

3. Разработайте алгоритм для присваивания переменной А целого типа значения

15.

4. Разработайте алгоритм для присваивания переменной Х действительного типа

значение -1,5.

5. Разработайте алгоритм для присваивания величине i целого типа значения 1.

6. Разработайте алгоритм для присваивания величине S целого типа значения 0.

7. Разработайте алгоритм для присваивания величине P целого типа значения 1.

8. Разработайте алгоритм для присваивания величине S действительного типа

значения 10,5.

9. Разработайте алгоритм для присваивания величине M действительного типа

значения -0,5.

10. Разработайте алгоритм для присваивания величине h действительного типа

значения 126,5.

11. Разработайте алгоритм для ввода в память ЭВМ значений величины R целого

типа и вывода этих значений из памяти.

12. Разработайте алгоритм для ввода в память ЭВМ значений величины B целого

типа и вывода этих значений из памяти.

13. Разработайте алгоритм для ввода в память ЭВМ значений величины C целого

типа и вывода этих значений из памяти.

14. Разработайте алгоритм для ввода в память ЭВМ значений величины D целого

типа и вывода этих значений из памяти.

15. Разработайте алгоритм для ввода в память ЭВМ значений величины E целого

типа и вывода этих значений из памяти.

16. Разработайте алгоритм для ввода в память ЭВМ значений величины F целого

типа и вывода этих значений из памяти.

17. Разработайте алгоритм для ввода в память ЭВМ значений величины Z целого

типа и вывода этих значений из памяти.

18. Разработайте алгоритм для ввода в память ЭВМ значений величины А целого

типа и вывода этих значений из памяти.

19. Разработайте алгоритм для ввода в память ЭВМ значений величины F действи-

тельного типа и вывода этих значений из памяти.

Задачи для самостоятельного выполнения

55

20. Разработайте алгоритм для ввода в память ЭВМ значений величины G действи-

тельного типа и вывода этих значений из памяти.

21. Разработайте алгоритм для ввода в память ЭВМ значений величины P действи-

тельного типа и вывода этих значений из памяти.

22. Разработайте алгоритм для ввода в память ЭВМ значений величины R действи-

тельного типа и вывода этих значений из памяти.

23. Разработайте алгоритм для ввода в память ЭВМ значений величины S действи-

тельного типа и вывода этих значений из памяти.

24. Разработайте алгоритм для ввода в память ЭВМ значений величины Y действи-

тельного типа и вывода этих значений из памяти.

25. Разработайте алгоритм для ввода в память ЭВМ значений величины W дейст-

вительного типа и вывода этих значений из памяти.

26. Разработайте алгоритм для присваивания величине S целого типа значения 0 и

вывода ее значения из памяти ЭВМ.

27. Разработайте алгоритм для присваивания величине B целого типа значения -5 и

вывода ее значения из памяти ЭВМ.

28. Разработайте алгоритм для присваивания величине C целого типа значения 12

и вывода ее значения из памяти ЭВМ.

29. Разработайте алгоритм для присваивания величине D действительного типа

значения -9 и вывода ее значения из памяти ЭВМ.

30. Разработайте алгоритм для присваивания величине P целого типа значения 1 и

вывода ее значения из памяти ЭВМ.

31. Разработайте алгоритм для присваивания величине S действительного типа

значения 1,1 и вывода ее значения из памяти ЭВМ.

32. Разработайте алгоритм для увеличения в половину введенного значения пере-

менной действительного типа t.

33. Разработайте алгоритм для увеличения на единицу введенного значения пере-

менной целого типа n.

34. Разработайте алгоритм для уменьшения в два с половиной раза введенного зна-

чения переменной действительного типа u.

35. Разработайте алгоритм для уменьшения на два введенного значения перемен-

ной действительного типа counter.

36. Разработайте алгоритм для присваивания величине F действительного типа

значения 5.2, уменьшения его на два и вывода ее значения из памяти ЭВМ.

37. Разработайте алгоритм для ввода значений величин X, Y действительного типа,

вычисления значений величины Z=X/Y, полученное значение величины Z со-

общить пользователю.

38. Разработайте алгоритм для ввода значений величин X, Y целого типа, вычис-

ления значений величины Z=X/Y, полученное значение величины Z сообщить

пользователю.

56

39. Разработайте алгоритм для ввода значений величины X действительного типа и

величины Y целого типа и вычисления значений величины Z=X/Y, полученное

значение величины Z сообщить пользователю.

40. Разработайте алгоритм для ввода значений величины X целого типа и величи-

ны Y действительного типа и вычисления значений величины Z=X/Y, получен-

ное значение величины Z сообщить пользователю.

41. Разработайте алгоритм для ввода значений величины X целого типа, величины

Y действительного и вычисления значения величины Z = X - Y, полученное

значение величины Z сообщить пользователю.

42. Разработайте алгоритм для присваивания величине действительного типа F

значения 5.2, увеличения его в два раза и вывода ее значения из памяти ЭВМ.

43. Разработайте алгоритм для присваивания величине действительного типа K

значения -20.2, уменьшения его в два раза и вывода ее значения из памяти

ЭВМ.

44. Разработайте алгоритм для присваивания величине действительного типа A

значения -2.2, увеличения ее значения на два, а затем - вывода из памяти ЭВМ.

45. Разработайте алгоритм для ввода значений величины X действительного типа и

величины Y действительного типа и вычисления значений величины Z=X/Y,

полученное значение величины Z сообщить пользователю.

46. Разработайте алгоритм для ввода значений величины X целого типа, присваи-

вания величине Y действительного типа значения 5.5, вычисления значения ве-

личины Z = X - Y и вывода значения величины Z.

47. Разработайте алгоритм для ввода значений величины X целого типа, присваи-

вания величине Y действительного типа значения 2.5, вычисления значений ве-

личины Z=X/Y и вывода значения величины Z.

48. Разработайте алгоритм для ввода значений величины X целого типа, присваи-

вания величине Y действительного типа значения 5.5, вычисления значения ве-

личины Z = X + Y и вывода значения величины Z.

49. Разработайте алгоритм для ввода значений величины X целого типа, присваи-

вания величине Y действительного типа значения 5.5, вычисления значений ве-

личины Z = X*Y и вывода значения величины Z.

50. Разработайте алгоритм для ввода значений величины X действительного типа,

присваивания величине Y действительного типа значения 2.5, вычисления зна-

чений величины Z=X/Y и вывода значения величины Z.

51. Разработайте алгоритм пересчета введенного веса из фунтов в килограммы

(один фунт равен 409,5 г).

52. Разработайте алгоритм пересчета введенного расстояния из километров в вер-

сты (одна верста равна 1066,8 м).

53. Разработайте алгоритм для вычисления среднего арифметического переменных

целого типа x1 и x2.

54. Разработайте алгоритм для вычисления значения функции у = (x+5)/х2 в задан-

ной точке x (значение переменной х вводит пользователь).

Задачи для самостоятельного выполнения

57

55. Разработайте алгоритм для вычисления значения функции у = 1/х2 в заданной

точке x (значение переменной х вводит пользователь).

56. Разработайте алгоритм вычисления значения функции у = x+5/х2 в заданной

точке x (значение переменной х вводит пользователь).

57. Разработайте алгоритм вычисления значения функции у = -2,7х3 + 0,23 х

2 - 1,4 в

заданной точке x (значение переменной х вводит пользователь).

58. Разработайте алгоритм вычисления значения функции у = -4х4 + 2,7 х

3 в задан-

ной точке x (значение переменной х вводит пользователь).

59. Разработайте алгоритм вычисления суммы S двух введенных величин целого

типа S и i.

60. Разработайте алгоритм вычисления произведения P двух введенных величин

действительного P и целого i.

Уровень В

61. Разработайте алгоритм для вычисления площади прямоугольника.

62. Разработайте алгоритм для вычисления площади куба.

63. Разработайте алгоритм для пересчета сопротивления электрической цепи из

Омов в килоОмы.

64. Разработайте алгоритм для пересчета расстояния из метров в километры.

65. Разработайте алгоритм для пересчета веса из килограммов в центнеры.

66. Разработайте алгоритм для пересчета веса из центнеров в тонны.

67. Разработайте алгоритм для нахождения дискриминанта D квадратного уравне-

ния с коэффициентами a, b, c.

68. Разработайте алгоритм для вычисления среднего арифметического S четырех

целых чисел A, B, C, D.

69. Разработайте алгоритм для вычисления сопротивления электрической цепи,

состоящей из двух параллельно соединенных резисторов: r = (r1 r2)/(r1 +r2).

70. Разработайте алгоритм для вычисления площади треугольника: s = 1/2ah, где а

– длина основания треугольника, h – его высота.

71. Разработайте алгоритм для вычисления площади трапеции:

s = h * (a+b)/2, где а и b – длины оснований, a – высота трапеции.

72. Разработайте алгоритм для вычисления площади поверхности цилиндра:

s = 2 * π * r(h + r); где r – радиус основания, h – его высота.

73. Разработайте алгоритм для вычисления объема цилиндра:

v = π * r2 * h, где r – радиус основания, h – его высота.

74. Разработайте алгоритм для вычисления площади крута: s = π * r2.

75. Разработайте алгоритм для вычисления объема цилиндра.

76. Разработайте алгоритм для вычисления объема полого цилиндра по формуле v

= π h (r12-r2

2), где r1 – радиус цилиндра, r2 – радиус отверстия, h — высота ци-

линдра.

77. Разработайте алгоритм для вычисления объема параллелепипеда.

78. Разработайте алгоритм для вычисления объема куба.

58

79. Разработайте алгоритм для вычисления объема конуса s = 1/3 π r2 h, где r – ра-

диус основания, h – высота.

80. Разработайте алгоритм для вычисления объема шара по формуле v=3/4 π r3.

81. Разработайте алгоритм для вычисления площади поверхности шара по формуле

S= 4 * π *r2.

82. Разработайте алгоритм для пересчета расстояния из километров K в версты W

(одна верста равна 1066,8 м).

83. Разработайте алгоритм для пересчета расстояния из верст W в километры K

(одна верста равна 1066,8 м).

84. Разработайте алгоритм для пересчета веса из фунтов F в килограммы K (один

фунт равен 405,9 г).

85. Разработайте алгоритм для пересчета веса из килограммов K в фунты F (один

фунт равен 405,9 г).

86. Разработайте алгоритм для вычисления среднего арифметического S четырех

действительных чисел A, B, C, D.

87. Разработайте алгоритм для вычисления площади треугольника, если известны

длины двух его сторон и величина угла между этими сторонами.

88. Разработайте алгоритм для вычисления дискриминанта (D/4) квадратного

уравнения ax2 + bx + c = 0, в котором b – четное число.

89. Из железной полосы длиной L метров нужно изготовить обруч. На соединение

концов уходит D метров полосы. Разработайте алгоритм для вычисления ра-

диуса R обруча.

90. Заданы величины X, Y, Z целого типа. Разработайте алгоритм для обмена зна-

чений величин по схеме X→Y, Y → Z, Z →Х. Необходимо использовать вспо-

могательную величину Т.

91. Заданы величины X, Y, Z действительного типа. Разработайте алгоритм для

обмена значений величин и затем уменьшения значений величин X,Y в два

раза. Необходимо использовать вспомогательную величину Т.

92. Заданы величины X, Y, Z целого типа. Разработайте алгоритм для обмена зна-

чений величин и затем увеличения на два значений величин Y, Z. Необходимо

использовать вспомогательную величину Т.

93. Заданы величины X, Y целого типа. Разработайте алгоритм для обмена значе-

ний величин.

94. Заданы величины X, Y действительного типа. Разработайте алгоритм для обме-

на значений величин и уменьшения величины X в полтора раза.

95. Заданы величины X, Y, Z целого типа. Разработайте алгоритм для обмена зна-

чений величин и затем уменьшения значений величины Y в три раза. Необхо-

димо использовать вспомогательную величину Т.

96. Заданы величины X, Y, Z действительного типа. Разработайте алгоритм для

обмена значений величин по схеме X → Z, Z → Y, Y→ X. Необходимо исполь-

зовать вспомогательную величину Т.

97. Разработайте алгоритм для вычисления среднего арифметического S четырех

Задачи для самостоятельного выполнения

59

величин A, B – действительного типа, C, D – целого типа.

98. Разработайте алгоритм для вычисления среднего арифметического S четырех

величин A, B – целого типа, C, D – действительного типа.

99. Разработайте алгоритм для вычисления реального расстояния R (от пункта А

до пункта В) по карте с масштабом М.

100. Разработайте алгоритм для пересчета реального расстояния R (от пункта А до

пункта В) для нанесения на карту с масштабом М.

Уровень С

101. Дано натуральное число Х. Вычислить Y = 1 - 2*X + 3*X2 - 4*X

3. Разрешается

использовать не более 8 арифметических операций. Допустимы операции: сло-

жение, вычитание, умножение.

102. Дано натуральное число Х. Вычислить Y = X5. Разрешается использовать

только три операции умножения.

103. Заданы величины X, Y действительного типа. Разработайте алгоритм для об-

мена значений величин. Использовать вспомогательные величины нельзя.

104. Разработайте алгоритм вычисления величины дохода по вкладу. Процентная

ставка (в процентах годовых) и время хранения (в днях) задаются пользовате-

лем.

105. Разработайте алгоритм вычисления силы тока по известным значениям на-

пряжения и сопротивления электрической цепи.

106. Разработайте алгоритм вычисления сопротивления электрической цепи по из-

вестным значениям напряжения и силы тока.

107. Разработайте алгоритм вычисления сопротивления электрической цепи, со-

стоящей из трех последовательно соединенных резисторов.

108. Разработайте алгоритм вычисления стоимости покупки некоторого количест-

ва (по весу) помидоров, огурцов и яблок.

109. Разработайте алгоритм вычисления стоимости покупки нескольких тетрадей,

карандашей и линейки.

110. Разработайте алгоритм для вычисления объема V параллелепипеда длиной L

м, шириной G м и высотой H м.

111. Разработайте алгоритм для вычисления объема V цилиндра высотой H м и

радиусом основания R м.

112. Разработайте алгоритм для вычисления падения напряжения U(В) на участке

электрической цепи сопротивлением R (Ом) по известному значению силы то-

ка I (А).

113. Разработайте алгоритм для вычисления площади поверхности S параллелепи-

педа длиной L м, шириной G м и высотой H м.

114. Разработайте алгоритм для вычисления силы тока I (А) по известным значе-

ниям напряжения U(В) и сопротивления R (Ом) электрической цепи.

115. Разработайте алгоритм для вычисления сопротивления R (Ом) участка элек-

трической цепи по известным значениям напряжения U(В) и силы тока I (А) на

60

этом участке.

116. Разработайте алгоритм для вычисления сопротивления R (Ом) электрической

цепи, состоящей из двух последовательно соединенных резисторов сопротив-

лениями R1 (Ом) и R2 (кОм).

117. Разработайте алгоритм пересчета величины временного интервала, заданного

в минутах, в величину, выраженную в часах и минутах.

118. Разработайте алгоритм расчета величины ежемесячной кредитной выплаты,

если погашение происходит ежемесячно равными долями. Процентная ставка,

срок и сумма кредита определяются пользователем.

119. Разработайте алгоритм, который преобразует введенное с клавиатуры дроб-

ное число в денежный формат.

120. Смешали V1 литров воды температуры T1 градусов Цельсия с V2 литрами

температуры T2 градусов Цельсия. Вычислить объем V и температуру T обра-

зовавшейся смеси.

Управляющая структура «Ветвление»

Уровень А

1. Дано целое число А. Если значение А > 0, то необходимо увеличить его на

единицу. Разработайте схему алгоритма для решения этой задачи.

2. Дано целое число А. Если значение А < 0, то необходимо удвоить его. Разрабо-

тайте схему алгоритма для решения этой задачи.

3. Дано целое число А. Если значение А = 0, то необходимо увеличить его на 3.

Разработайте схему алгоритма для решения этой задачи.

4. Дано целое число А. Если значение А <> 0, то необходимо увеличить его в 4

раза. Разработайте схему алгоритма для решения этой задачи.

5. Дано целое число А. Если значение А > 0, то необходимо увеличить его в 5

раз. Разработайте схему алгоритма для решения этой задачи.

6. Дано целое число А. Если значение А < 0, то необходимо уменьшить его на 10.

Разработайте схему алгоритма для решения этой задачи.

7. Дано целое число А. Если значение А >= 10, то необходимо уменьшить его на

3. Разработайте схему алгоритма для решения этой задачи.

8. Дано целое число А. Если значение А <> -20, то необходимо увеличить его в 15

раз. Разработайте схему алгоритма для решения этой задачи.

9. Даны целые числа А, В. Если значение В >= 10, то необходимо присвоить ве-

личине А значение суммы введенных чисел. Разработайте схему алгоритма

для решения этой задачи.

10. Даны действительные числа А, В. Если значение А <= -10.5, то необходимо

присвоить величине B значение суммы введенных чисел. Разработайте схему

алгоритма для решения этой задачи.

11. Даны целые числа S, P. Если значение S < 0, то необходимо присвоить ей зна-

чение суммы введенных чисел. Разработайте схему алгоритма для решения

этой задачи.

Задачи для самостоятельного выполнения

61

12. Даны действительные числа S, P. Если значение P <= 0, то необходимо присво-

ить ей значение произведения введенных чисел. Разработайте схему алгорит-

ма для решения этой задачи.

13. Дано целое число А. Если значение А > 0, то необходимо увеличить его на

единицу, иначе присвоить А значение равное 1. Разработайте схему алгоритма

для решения этой задачи.

14. Дано целое число А. Если значение А < 0, то необходимо удвоить его, иначе

присвоить А значение равное -1. Разработайте схему алгоритма для решения

этой задачи.

15. Даны целые числа А, В. Если значение В >= 10, то необходимо присвоить ве-

личине А значение суммы введенных чисел, иначе – разности. Разработайте

схему алгоритма для решения этой задачи.

16. Даны действительные числа А, В. Если значение А <= -10.5, то необходимо

присвоить величине B значение суммы введенных чисел, иначе – разности.

Разработайте схему алгоритма для решения этой задачи.

17. Даны целые числа S, P. Если значение величины S < 0, то необходимо присво-

ить ей значение суммы введенных чисел, иначе – величине P присвоить значе-

ние произведение введенных величин. Разработайте схему алгоритма для ре-

шения этой задачи.

18. Даны действительные числа S, P. Если значение величины S = 0, то необходи-

мо присвоить ей значение суммы введенных чисел, иначе – величине P присво-

ить произведение. Разработайте схему алгоритма для решения этой задачи.

19. Дано целое число А. Если значение А = 0, то необходимо увеличить его на 3,

иначе присвоить А значение равное -3. Разработайте схему алгоритма для ре-

шения этой задачи.

20. Дано целое число А. Если значение А <> 0, то необходимо увеличить его в 4

раза, иначе присвоить А значение равное 4. Разработайте схему алгоритма для

решения этой задачи.

21. Дано целое число А. Если значение А > 100, то необходимо увеличить его на

единицу, иначе уменьшить на 10. Разработайте алгоритм для решения этой за-

дачи.

22. Дано целое число А. Если значение А <= 0, то необходимо удвоить его, иначе

присвоить А значение равное 1. Разработайте схему алгоритма для решения

этой задачи.

23. Дано целое число А. Если значение А = 0, то необходимо увеличить его на 3,

иначе присвоить А значение равное 0. Разработайте схему алгоритма для ре-

шения этой задачи.

24. Дано целое число А. Если значение А <> 0, то необходимо увеличить его в 4

раза, иначе присвоить А значение равное -8. Разработайте схему алгоритма для

решения этой задачи.

62

25. Дано целое число А. Если значение А < 0, то необходимо утроить его, иначе

присвоить А значение равное -10. Разработайте алгоритм для решения этой за-

дачи.

26. Дано действительное число А. Если значение А<100, то необходимо умень-

шить его в два раза, иначе увеличить в два раза. Разработайте схему алгоритма

для решения этой задачи.

27. Разработайте алгоритм вычисления частного от деления двух чисел. Необхо-

димо проверять корректность введенных данных и, если они некорректные (де-

литель равен нулю), вывести сообщение об ошибке.

28. Разработайте алгоритм вычисления площади кольца, проверьте корректность

исходных данных.

29. Разработайте алгоритм вычисления площади прямоугольника, проверьте кор-

ректность исходных данных.

30. Разработайте алгоритм вычисления длины окружности, проверьте коррект-

ность исходных данных.

31. Разработайте алгоритм вычисления стоимости покупки с учетом скидки. Скид-

ка 10% предоставляется, если сумма покупки больше 1000 руб.

32. Разработайте алгоритм для вычисления повышающего коэффициента к стипен-

дии. Если процент успеваемости более 75%, повышающий коэффициент – 1,3,

иначе – 1.

33. Разработайте алгоритм для анализа успеваемости. Если процент успеваемости

более 60%, студент признан успевающим, иначе – неуспевающий.

На координатной плоскости определена заштрихованная область. Точка А задана

координатами X, Y (вводит пользователь). Разработайте схему алгоритма, который

устанавливает значение флага F=1, если точка принадлежит заштрихованной об-

ласти и устанавливает значение флага F=0 в противном случае, а затем выводит

значение F.

34.

35.

36.

37.

38.

39.

Задачи для самостоятельного выполнения

63

40.

41.

42.

43.

44.

45.

46.

47.

48.

49.

50.

Уровень В

51. Разработайте алгоритм нахождения корней квадратного уравнения с коэффи-

циентами a, b, c (a, b, c – не нулевые коэффициенты).

52. Разработайте схему алгоритма для подсчета количества n положительных чи-

сел среди введенных целых чисел a, b, c.

53. Разработайте схему алгоритма для подсчета количества n отрицательных чисел

среди введенных целых чисел a, b, c.

54. Разработайте схему алгоритма для подсчета количества n нулей среди введен-

ных целых чисел a, b, c.

55. Разработайте алгоритм, который проверяет, не приводит ли суммирование двух

целых чисел А и В к переполнению разрядной сетки, т. е. значение суммы S не

должно быть более 32767. Если переполнение отсутствует, установите значе-

ние флага F=0, иначе установите значение флага F=1. Вывести значение F.

56. Разработайте алгоритм, который проверяет, попадают ли введенные целые

числа А и В в интервал (-∞; -32) U (164; ∞). Если значение суммы принадлежит

отрезку, установите значение флага F=1, иначе установите значение флага F=0.

Вывести значение F.

64

57. Даны два целых числа А и В. Если значение разности введенных чисел отрица-

тельное, то установите значение флага F=0, иначе установите значение флага

F=1. Вывести значение F.

58. Даны два действительных числа А и В. Если частное введенных чисел превос-

ходит 100, то установите значение флага F=1, иначе установите значение флага

F=0. Вывести значение F.

59. Даны два целых числа А и В. Если оба введенных значения больше нуля, то ус-

тановите значение флага F=1, иначе установите значение флага F=0. Вывести

значение F.

60. Даны два действительных числа А и В. Если оба введенных значения отрица-

тельные, то установите значение флага F=0, иначе установите значение флага

F=1. Вывести значение F.

61. Пользователь ввел три целых числа a, b, c. Если все введенные значения отри-

цательные, то установите значение флага F=0, иначе установите значение флага

F=1. Вывести значение F.

62. Пользователь ввел три действительных числа a, b, c. Если все введенные значе-

ния больше 100, то установите значение флага F=1, иначе установите значение

флага F=0. Вывести значение F.

63. Пользователь ввел три целых числа. Разработайте алгоритм, который проверя-

ет, сколько из введенных значений не превышает 10.

64. Пользователь ввел четыре целых числа. Разработайте алгоритм, который про-

веряет, сколько из введенных значений не меньше -21.

65. Разработайте алгоритм для вычисления стоимости покупки с учетом скидки.

Скидка в 3% предоставляется в том случае, если сумма покупки больше

500 руб., в 5% — если сумма больше 1000 руб.

66. Разработайте алгоритм для сравнения двух действительных чисел, введенных с

клавиатуры, вывести большее число или, если числа равны, вывести любое из

них.

67. Разработайте алгоритм для сравнения двух целых чисел, введенных с клавиа-

туры, вывести меньшее число или, если числа равны, вывести любое из них.

68. Разработайте алгоритм для вычисления оптимального веса пользователя, срав-

нения его с реальным и вывода рекомендации о необходимости поправиться

или похудеть на недостающее (лишнее) количество килограммов. Оптималь-

ный вес вычисляется по формуле: рост (в сантиметрах)-100.

69. Разработайте схему алгоритма для нахождения min(a, b, c) целых чисел a, b, c.

70. Разработайте схему алгоритма для нахождения max(a, b, c) целых чисел a, b, c.

71. Разработайте схему алгоритма, который проверяет, не превосходит ли сумма

двух действительных чисел А и В числа 100. Если не превосходит, установите

значение флага F=0, иначе установите значение флага F=1. Вывести значение

F.

72. Разработайте алгоритм для подсчета количества n нулей среди целых чисел a,

b, c.

Задачи для самостоятельного выполнения

65

На координатной плоскости определена заштрихованная область. Точка А за-

дана координатами X,Y. Разработайте схему алгоритма, который устанавливает зна-

чение флага F=1, если точка принадлежит заштрихованной области и устанавливает

значение флага F=0 в противном случае, а затем выводит значение F.

73.

74.

75.

76.

77.

78.

79.

80.

81.

82.

83.

84.

85.

86.

87.

66

88.

89.

90.

Уровень С

91. Треугольник задан длинами сторон А, В, С. Величина F (флаг) хранит признак

существования треугольника. Значение F=1, если треугольник существует, в

противном случае значение F=0. Разработайте схему алгоритма для решения

этой задачи, используя сложные логические условия.

92. Треугольник задан длинами сторон А, В, С. Величина F (флаг) хранит признак.

Значение F=1, если треугольник равносторонний, в противном случае значение

F=0. Разработайте схему алгоритма для решения этой задачи, используя

сложные логические условия.

93. Треугольник задан длинами сторон А, В, С. Величина F (флаг) хранит признак.

Значение F=1, если треугольник египетский (равнобедренный), в противном

случае значение F=0. Разработайте схему алгоритма для решения этой задачи,

используя сложные логические условия.

94. Треугольник задан длинами сторон А, В, С. Если треугольник египетский (рав-

нобедренный), то вычислите его площадь; в противном случае вычислите его

полупериметр. Разработайте алгоритм для решения этой задачи, используя

сложные логические условия.

95. Разработайте алгоритм для отыскания max(min(a,b), min(c,d)), не используя

сложные логические условия и вложенные ветвления. Числа a, b, c, d – целые.

96. Разработайте алгоритм для отыскания min(max(a,b), max(c,d)), не используя

сложные логические условия и вложенные ветвления. Числа a, b, c, d – целые.

97. Даны три целых числа А, В, С. P – количество одинаковых пар среди них. Раз-

работайте схему алгоритма для подсчета P.

На координатной плоскости определена заштрихованная область. Точка А за-

дана координатами X,Y. Разработайте схему алгоритма, который устанавливает зна-

чение флага F=1, если точка принадлежит заштрихованной области и устанавливает

значение флага F=0 в противном случае, а затем выводит значение F.

Задачи для самостоятельного выполнения

67

98.

99.

100.

101.

102.

103.

104.

105.

106.

107.

108.

109.

110.

111.

112.

113.

114.

115.

68

116.

117.

118.

119.

120.

Управляющая структура «Цикл»

Уровень А

1. Разработайте алгоритм вычисления значения функции у = -2,7х3 + 0,23 х

2 - 1,4 на

отрезке [a; b] (значение a, b вводит пользователь).

2. Разработайте схему алгоритма для вычисления произведения P первых n целых

чисел. Предусмотрите ввод значения n с клавиатуры. Текущее значение целого

числа имеет имя i (i = 1, 2, .., n).

3. Разработайте схему алгоритма для вычисления произведения P всех однознач-

ных целых чисел. Текущее значение целого числа имеет имя i (i = 1, 2, .., n).

4. Разработайте схему алгоритма для вычисления произведения P всех однозначных

четных целых чисел. Текущее значение целого числа имеет имя i (i = 1, 2, .., n).

5. Разработайте схему алгоритма для вычисления произведения P всех однозначных

нечетных целых чисел. Текущее значение целого числа имеет имя i (i = 1, 2, .., n).

6. Разработайте схему алгоритма для вычисления суммы S всех целых четных дву-

значных чисел. Текущее значение целого числа имеет имя i.

7. Разработайте схему алгоритма для вычисления суммы S всех целых двузначных

чисел, кратных десяти. Текущее значение целого числа имеет имя i.

8. Разработайте схему алгоритма для вычисления суммы S всех целых четных дву-

значных чисел. Текущее значение целого числа имеет имя i.

9. Разработайте схему алгоритма для вычисления суммы S всех целых двузначных

чисел, кратных десяти. Текущее значение целого числа имеет имя i.

10. Разработайте схему алгоритма для вычисления суммы S первых n целых чисел.

Предусмотрите ввод значения n с клавиатуры. Текущее значение целого числа

имеет имя i (i = 1, 2, .., n).

11. Разработайте схему алгоритма для вычисления суммы S целых нечетных чисел на

отрезке [a; b]. Текущее значение целого числа имеет имя i.

Задачи для самостоятельного выполнения

69

12. Разработайте схему алгоритма для вычисления суммы S целых четных чисел на

отрезке [a; b]. Текущее значение целого числа имеет имя i.

13. Разработайте схему алгоритма для вычисления суммы S всех целых нечетных дву-

значных чисел. Текущее значение целого числа имеет имя i.

14. Разработайте схему алгоритма для вычисления суммы S квадратов однозначных

целых чисел.

15. Разработайте схему алгоритма для вычисления суммы S первых n действительных

чисел с шагом 0,5. Предусмотрите ввод значения n с клавиатуры.

16. Разработайте алгоритм вычисления значения функции у = 1/х2 на отрезке [a; b]

(значение a, b вводит пользователь).

17. Разработайте алгоритм для вычисления произведения P всех однозначных нечет-

ных целых чисел. Текущее значение целого числа имеет имя i (i = 1, 2, .., n).

18. Разработайте алгоритм для вычисления произведения P всех однозначных целых

чисел. Текущее значение целого числа имеет имя i (i = 1, 2, .., n).

19. Разработайте алгоритм для вычисления произведения P всех однозначных четных

целых чисел. Текущее значение целого числа имеет имя i (i = 1, 2, .., n).

20. Разработайте алгоритм для вычисления произведения P первых n целых чисел.

Предусмотрите ввод значения n с клавиатуры. Текущее значение целого числа

имеет имя i (i = 1, 2, .., n).

21. Разработайте алгоритм для вычисления суммы S всех целых двузначных чисел на

отрезке [a; b]. Текущее значение целого числа имеет имя i.

22. Разработайте алгоритм для вычисления суммы S всех целых трехзначных чисел

на отрезке [a; b].

23. Разработайте алгоритм для вычисления суммы S всех целых четных трехзначных

чисел на отрезке [a; b].

24. Разработайте алгоритм для вычисления суммы S степеней числа 2, до n-ой степе-

ни.

25. Разработайте схему алгоритма для вычисления суммы S всех целых нечетных дву-

значных чисел. Текущее значение целого числа имеет имя i.

26. Разработайте схему алгоритма для вычисления суммы S всех целых четных дву-

значных чисел на отрезке [a; b]. Текущее значение целого числа имеет имя i.

27. Разработайте схему алгоритма для вычисления суммы S целых чисел на отрезке

[a; b]. Текущее значение целого числа имеет имя i.

28. Разработайте схему алгоритма для вычисления суммы S первых n целых чисел.

Предусмотрите ввод значения n с клавиатуры. Текущее значение целого числа

имеет имя i (i = 1, 2, .., n).

Уровень В

29. Разработайте алгоритм для вычисления произведения P цифр четырехразрядного

целого числа M. Текущее значение цифры целого числа M имеет имя i (i = 1, 2, ..,

n).

30. Разработайте схему алгоритма для вычисления произведения

P = (-1)·2·(-3)·4·(-5)· ... ·n. Используйте два цикла: один для вычисления произведе-

70

ния нечетных чисел P1, второй – для вычисления произведения четных чисел P2.

31. Разработайте схему алгоритма для вычисления суммы S = 1 - 2 + 3 - 4 + ... + n.

Используйте два цикла: один для вычисления суммы нечетных чисел S1, второй -

для вычисления суммы четных чисел S2.

32. Разработайте схему алгоритма для вычисления и вывода значений функции

у = |х + 2|. Диапазон изменения аргумента – от -4 до 4, шаг приращения аргумента

– 0,5

33. Разработайте схему алгоритма для вычисления и вывода значений функции у =

|х- 2|+ |х + 1|. Диапазон изменения аргумента – от -4 до 4, шаг приращения аргу-

мента – 0,5.

34. Разработайте схему алгоритма для вычисления и вывода табл. умножения на 7.

35. Разработайте схему алгоритма для вычисления суммы S по правилу: 1+2·х+3·х2+

… +n·x(n-1)

. Значения переменных х, n вводит пользователь.

36. Разработайте схему алгоритма для вычисления суммы S по правилу:

1-2·(-х)-3·(-х)2- … -n·(-x)

(n-1).

37. Разработайте схему алгоритма для вычисления суммы первых n положительных

целых чисел.

38. Разработайте схему алгоритма для вычисления суммы степеней двойки от нуле-

вой до n, введенного пользователем.

39. Разработайте схему алгоритма для вычисления факториала числа n, введенного с

клавиатуры.

40. Разработайте схему алгоритма для заполнения таблицы значений функции

у = - 2,4х2 + 5х - 3 в диапазоне от -2 до 2 с шагом 0,5.

41. Разработайте схему алгоритма для нахождения суммы квадратов первых пяти

целых положительных нечетных чисел.

42. Разработайте схему алгоритма для нахождения суммы цифр введенного целого

трехзначного числа.

43. Разработайте схему алгоритма для преобразования введенного целого двузнач-

ного числа по правилу: обменять местами цифры десятков и единиц.

44. Разработайте схему алгоритма для преобразования введенного целого двузнач-

ного числа по правилу: вычислить разность десятков и единиц, полученный ре-

зультат записать на место единиц, цифру десятков сохранить.

45. Разработайте схему алгоритма для преобразования введенного целого двузначного

числа по правилу: удвоить цифры введенного числа, например, введено 24, полу-

чено 2244.

46. Разработайте схему алгоритма для вычисления произведения P цифр четырех-

разрядного целого числа M. Текущее значение цифры целого числа M имеет имя

i (i = 1, 2, .., n).

47. Разработайте схему алгоритма для вычисления суммы S цифр четырехразрядного

целого числа M. Текущее значение цифры целого числа M имеет имя i (i = 1, 2, ..,

n).

48. Разработайте схему алгоритма для отыскания наибольшей цифры Q в записи пя-

тиразрядного целого числа M. Текущее значение цифры целого числа M имеет

Задачи для самостоятельного выполнения

71

имя i (i = 1, 2, .., n).

49. Разработайте схему алгоритма для отыскания наименьшей цифры W в записи

пятиразрядного целого числа M. Текущее значение цифры целого числа M имеет

имя i (i = 1, 2, .., n).

Уровень С

50. Разработайте алгоритм для вычисления суммы S n целых чисел. При вычислении

суммы учесть требование: если число четное, то вычитать его из суммы, иначе –

прибавлять. Текущее значение целого числа имеет имя i.

51. Разработайте алгоритм для вычисления суммы S n целых двузначных чисел. При

вычислении суммы учесть требование: если число четное, то вычитать его из сум-

мы, иначе – прибавлять. Текущее значение целого числа имеет имя i.

52. Разработайте алгоритм для вычисления суммы S n целых чисел. При вычислении

суммы учесть требование: если число четное, то вычитать его из суммы, иначе –

прибавлять. Текущее значение целого числа имеет имя i.

53. Разработайте алгоритм для вычисления суммы S целых чисел на отрезке [a; b].

При вычислении суммы учесть требование: если число четное, то вычитать его из

суммы, иначе - прибавлять. Текущее значение целого числа имеет имя i.

54. Разработайте алгоритм для вычисления произведения Р действительных чисел на

отрезке [a; b]. При вычислении произведения учесть требование: если число крат-

но 10, то разделить на него, иначе – умножить. Текущее значение действительного

числа имеет имя i.

55. Разработайте алгоритм для преобразования введенного целого четырехзначного

числа по правилу: поменять цифры числа местами в порядке возрастания.

56. Разработайте алгоритм для преобразования введенного целого четырехзначного

числа по правилу: поменять цифры числа местами в порядке убывания.

57. Разработайте алгоритм для преобразования введенного целого четырехзначного

числа по правилу: получить из четырехзначного введенного числа трехзначное пу-

тем исключения из записи цифры 5.

58. Разработайте алгоритм для преобразования введенного целого четырехзначного

числа по правилу: заменить число сотен разностью тысяч и единиц взятых по аб-

солютной величине.

59. Разработайте алгоритм для преобразования введенного целого четырехзначного

числа по правилу: заменить число десятков разностью единиц и сотен взятых по

абсолютной величине.

60. Разработайте алгоритм для преобразования введенного целого четырехзначного

числа по правилу: заменить нечетные цифры на ближайшие четные, найти сумму

цифр полученного числа. Вывести полученное число и сумму его цифр.

61. Разработайте алгоритм для преобразования введенного целого четырехзначного

числа по правилу: заменить четные цифры на ближайшие нечетные, найти сумму

цифр полученного числа. Вывести полученное число и сумму его цифр.

72

Варианты индивидуальных заданий

Приведенные ниже наборы заданий рекомендуется использовать совместно с

интегрированной системой «Конструктор схем алгоритмов» («Schemes»), разработан-

ной в ВЦ ЦНТО ПГНИУ.

Набор 1

Уровни

Структура

следование

Структура

ветвление

Циклические

структуры

А В С А В С А В С

Вариант 1 33 86 104 22 87 95 17 41 50

Вариант 2 6 77 116 14 68 101 18 35 51

Вариант 3 43 85 105 50 56 100 12 45 52

Вариант 4 10 81 112 28 86 98 7 46 51

Вариант 5 1 66 115 42 78 93 22 32 53

Вариант 6 2 94 111 24 73 97 16 33 54

Вариант 7 52 61 101 33 51 102 25 37 55

Вариант 8 26 64 102 18 52 105 13 38 56

Вариант 9 46 65 119 10 75 107 15 40 57

Вариант 10 8 76 108 45 81 110 21 47 58

Вариант 11 58 80 106 39 72 106 11 31 59

Вариант 12 18 97 109 32 77 99 8 44 60

Вариант 13 36 70 114 48 76 104 20 49 61

Вариант 14 55 78 118 31 89 103 6 30 50

Вариант 15 42 73 107 26 90 109 14 34 51

Вариант 16 51 99 110 29 61 96 9 39 52

Вариант 17 4 75 117 40 66 91 10 29 53

Вариант 18 16 79 103 6 83 108 4 36 55

Вариант 19 20 98 113 30 54 92 28 43 59

Вариант 20 30 62 120 20 58 94 5 42 61

Набор 2

Уровни

Структура

следование

Структура

ветвление

Циклические

структуры

А В С А В С А В С

Вариант 1 20 87 108 21 62 91 3 42 51

Вариант 2 10 62 111 34 72 103 17 39 50

Вариант 3 3 69 116 38 55 120 12 38 58

Вариант 4 4 66 119 3 73 104 13 46 56

Вариант 5 46 72 104 2 88 97 15 29 60

Вариант 6 39 70 105 39 78 93 1 30 53

Вариант 7 51 61 109 33 61 96 6 49 59

Варианты индивидуальных заданий

73

Уровни

Структура

следование

Структура

ветвление

Циклические

структуры

А В С А В С А В С

Вариант 8 44 98 115 11 58 102 16 41 52

Вариант 9 18 73 101 50 68 109 24 43 54

Вариант 10 21 63 117 49 51 107 9 32 51

Вариант 11 58 65 112 6 56 110 25 31 50

Вариант 12 56 99 120 14 74 119 5 45 55

Вариант 13 52 67 110 30 60 98 11 40 60

Вариант 14 50 78 107 44 54 106 2 37 59

Вариант 15 45 84 106 1 65 108 23 47 54

Вариант 16 47 85 118 16 59 92 10 35 57

Вариант 17 34 71 114 43 53 101 14 36 55

Вариант 18 54 64 103 5 87 95 20 33 56

Вариант 19 35 91 102 42 84 105 8 44 52

Вариант 20 38 68 113 27 89 94 7 34 58

Набор 3

Уровни

Структура

следование

Структура

ветвление

Циклические

структуры

А В С А В С А В С

Вариант 1 15 91 119 50 88 93 21 45 61

Вариант 2 11 85 113 23 51 116 10 41 55

Вариант 3 60 70 108 25 65 92 20 44 58

Вариант 4 14 65 112 40 63 99 2 48 55

Вариант 5 56 88 118 37 78 107 4 33 60

Вариант 6 23 80 103 43 86 110 27 29 50

Вариант 7 27 72 102 45 60 97 9 47 59

Вариант 8 20 84 109 41 89 106 7 30 57

Вариант 9 29 86 120 48 56 104 23 39 54

Вариант 10 31 81 117 39 73 108 25 46 59

Вариант 11 37 87 105 24 67 115 24 36 53

Вариант 12 6 79 101 32 74 101 8 43 50

Вариант 13 13 92 107 16 52 96 16 40 54

Вариант 14 34 96 106 34 87 102 12 37 57

Вариант 15 40 89 114 9 54 103 19 42 58

Вариант 16 21 75 111 8 77 105 22 35 60

Вариант 17 18 74 116 42 69 94 3 34 53

Вариант 18 38 99 104 47 64 100 28 49 61

Вариант 19 42 71 110 14 66 109 1 38 52

Вариант 20 7 100 115 46 90 98 26 31 51

74

Набор 4

Уровни

Структура

следование

Структура

ветвление

Циклические

структуры

А В С А В С А В С

Вариант 1 18 100 117 19 85 104 28 42 57

Вариант 2 11 62 112 14 69 102 2 31 60

Вариант 3 13 73 110 4 75 108 22 30 50

Вариант 4 43 92 113 11 54 91 13 33 55

Вариант 5 15 61 118 30 51 100 6 37 52

Вариант 6 34 86 106 40 63 99 10 48 59

Вариант 7 35 97 107 9 53 106 21 29 51

Вариант 8 29 64 111 25 55 98 24 49 59

Вариант 9 38 91 119 8 88 107 16 38 60

Вариант 10 17 90 103 2 82 92 20 40 52

Вариант 11 44 74 101 24 87 101 7 39 58

Вариант 12 40 96 116 1 67 96 17 44 61

Вариант 13 41 93 115 13 71 113 9 41 61

Вариант 14 14 84 105 10 72 94 18 34 53

Вариант 15 1 63 104 29 79 105 4 43 55

Вариант 16 33 89 102 6 68 93 26 36 56

Вариант 17 31 66 114 28 60 97 11 35 56

Вариант 18 48 65 108 12 65 95 23 32 53

Вариант 19 3 99 120 34 70 110 19 45 58

Вариант 20 56 88 109 20 80 109 5 47 50

Набор 5

Уровни

Структура

следование

Структура

ветвление

Циклические

структуры

А В С А В С А В С

Вариант 1 41 89 115 20 51 93 23 39 58

Вариант 2 51 73 104 37 89 102 21 44 54

Вариант 3 38 71 101 49 80 100 28 32 59

Вариант 4 14 92 102 1 56 109 22 41 51

Вариант 5 13 91 112 9 88 104 19 38 50

Вариант 6 10 90 114 25 70 106 18 31 53

Вариант 7 5 67 111 42 79 110 6 42 59

Вариант 8 6 85 113 47 72 103 11 48 58

Вариант 9 47 65 119 2 54 95 25 49 52

Вариант 10 8 78 116 34 90 94 20 40 55

Вариант 11 46 79 117 44 86 91 24 46 52

Вариант 12 16 69 108 4 73 101 2 34 56

Варианты индивидуальных заданий

75

Уровни

Структура

следование

Структура

ветвление

Циклические

структуры

А В С А В С А В С

Вариант 13 49 87 110 36 71 108 27 45 53

Вариант 14 12 99 107 24 69 92 1 33 51

Вариант 15 28 66 109 30 67 105 26 43 60

Вариант 16 25 98 120 8 53 99 14 47 57

Вариант 17 3 88 118 18 81 97 3 29 60

Вариант 18 50 75 105 3 74 98 17 35 56

Вариант 19 20 68 103 29 65 96 4 30 50

Вариант 20 7 86 106 14 52 107 15 37 54

Набор 6

Уровни

Структура

следование

Структура

ветвление

Циклические

структуры

А В С А В С А В С

Вариант 1 25 71 103 3 68 107 10 46 56

Вариант 2 57 68 104 27 87 108 27 45 60

Вариант 3 12 85 108 21 63 109 16 39 52

Вариант 4 37 81 107 4 65 105 20 29 52

Вариант 5 20 93 117 2 51 98 28 48 50

Вариант 6 23 91 112 26 77 91 25 47 59

Вариант 7 22 87 120 11 67 92 6 35 56

Вариант 8 1 61 106 15 62 104 12 42 58

Вариант 9 4 63 115 16 53 97 18 31 50

Вариант 10 15 89 109 37 89 93 22 49 59

Вариант 11 41 73 101 31 64 99 24 36 58

Вариант 12 28 78 102 17 78 100 23 41 60

Вариант 13 14 98 118 39 72 94 9 37 51

Вариант 14 19 100 114 23 73 101 7 30 51

Вариант 15 17 99 110 5 83 102 3 40 53

Вариант 16 8 84 111 19 85 106 4 44 55

Вариант 17 19 80 116 7 80 96 17 33 54

Вариант 18 16 82 119 41 56 103 13 34 53

Вариант 19 7 70 105 44 76 95 21 43 54

Вариант 20 18 95 113 1 75 110 15 32 55

76

СТРУКТУРЫ ДАННЫХ

ТЕОРЕТИЧЕСКИЙ МАТЕРИАЛ

Принято различать целые, вещественные и логические данные, множества, по-

следовательности, векторы, матрицы (таблицы) и т.д. В обработке данных с исполь-

зованием технических средств тип и структура данных играют большую роль.

Любая константа, переменная, выражение или функция относятся к некоторо-

му типу.

Тип данных определяет диапазон допустимых значений и операций, которые

могут быть применены к этим значениям. Тип величины может быть установлен при

ее описании.

Структура данных задает формат представления объектов в памяти компью-

тера, так как любые данные будут представлены в виде последовательности двоичных

цифр (нулей и единиц).

Классификация типов данных

Любые данные могут быть отнесены к одному из двух типов: простому (основ-

ному), форма представления которого определяется архитектурой ЭВМ, или сложно-

му, конструируемому пользователем для решения конкретных задач. Данные просто-

го типа – это символы, числа и т.п. элементы, дальнейшее дробление которых не име-

ет смысла. Из таких элементарных данных формируются структуры (сложные типы)

данных.

Принято различать следующие типы данных:

1. Простые:

1.1. Числовые типы:

1.1.1. Целочисленные.

1.1.2. Вещественные.

1.2. Символьный тип:

1.2.1. Логический тип.

1.2.2. Перечислимый тип.

1.2.3. Множество.

1.2.4. Указатель.

2. Комбинированные:

2.1. Массив.

2.2. Строковый тип.

2.3. Запись.

2.4. Последовательность.

Простые типы

Числовые типы. Значениями переменных таких типов являются числа. К ним

могут применяться обычные арифметические операции, операции сравнения (в ре-

зультате получается логическое значение). Принципиально различны в компьютер-

ном представлении целые и вещественные типы.

Структуры данных. Теоретический материал

77

Целочисленные типы данных делятся, в свою очередь, на знаковые и беззна-

ковые. Целочисленные со знаком могут принимать как положительные, так и отрица-

тельные значения, а беззнаковые – только неотрицательные значения. Диапазон зна-

чений при этом определяется количеством разрядов, отводимых на представление

конкретного типа в памяти компьютера.

Вещественные типы бывают: с фиксированной точкой, т. е. хранятся знак и

цифры целой и дробной частей (в настоящее время в языках программирования реа-

лизуются редко), и с плавающей точкой, т. е. число приводится к виду т х 2e, где т –

мантисса, а е – порядок числа, причем 1/2 <= <= т <= 1, е – целое число. В данном

случае хранятся знак, число е и двоичные цифры дробной части числа т, которые

умещаются в отведенную для этого память. Говорят, что вещественные числа пред-

ставимы с некоторой точностью.

Символьный тип. Элемент этого типа хранит один символ. При этом могут

использоваться различные кодировки, которые определяют, какому коду (двоичному

числу) какой символ (знак) соответствует. К значениям этого типа могут применяться

операции сравнения (в результате получается логическое значение). Символы счита-

ются упорядоченными согласно своим кодам (номерам в кодовой таблице).

Логический тип. Данные этого типа имеют два значения: истина (true) и ложь

(false). К ним могут применяться логические операции. Используется в условных вы-

ражениях, операторах ветвления и циклах. В некоторых языках, например С, является

подтипом числового типа, при этом ложь = 0, истина = 1 (или истинным считается

любое значение, отличное от нуля).

Перечислимый тип. Отражает самый прямолинейный способ описания про-

стого типа — перечисление всех значений, относящихся к этому типу. Каждая кон-

станта такого типа получает свой порядковый номер, что позволяет реализовать ряд

простых операций над этим типом, таких как получить следующее по порядку значе-

ние данного типа.

Множество как тип данных в основном совпадает с обычным математическим

понятием множества. Допустимы стандартные операции с множествами и проверка

на принадлежность элемента множеству. В некоторых языках рассматривается как

составной тип (массив логических значений, i-й элемент которого указывает, нахо-

дится ли i в множестве), однако эффективней реализовывать множество как машин-

ное слово (или несколько слов), каждый бит которого характеризует наличие соот-

ветствующего элемента в множестве.

Указатель (тип данных). Если описанные выше типы данных представляли ка-

кие-либо объекты реального мира, то указатели представляют объекты компьютерно-

го мира, т. е. являются исключительно компьютерными терминами. Переменная-

указатель хранит адрес в памяти компьютера, указывающий на какую-либо информа-

цию, как правило, – на другую переменную.

Комбинированные типы

Комбинированные типы формируются на основе комбинаций простых типов.

78

Массив является индексированным набором элементов одного типа, простого

или составного. Одномерный массив предназначен для компьютерной реализации та-

кой структуры, как вектор, двухмерный массив – таблицы.

Строковый тип. Хранит строку символов. Вообще говоря, может рассматри-

ваться как массив символов, но иногда рассматривается в качестве простого типа.

Часто используется для хранения фамилий людей, названий предметов и т.п. К эле-

ментам этого типа может применяться операция конкатенации (сложения) строк.

Обычно реализованы также операции сравнения над строками, в том числе операции

"<" и ">", которые интерпретируются как сравнение строк согласно алфавитному по-

рядку (алфавитом здесь является набор символов соответствующей кодовой табли-

цы). Во многих языках реализованы и специальные операции над строками: поиск за-

данного символа (подстроки), вставка символа, удаление символа, замена символа.

Запись. Наиболее общий метод получения составных типов из простых заклю-

чается в объединении элементов произвольных типов. Причем сами эти элементы мо-

гут быть, в свою очередь, составными. Так, человек описывается с помощью несколь-

ких различных характеристик, таких как имя, фамилия, дата рождения, пол и т.д. За-

писью называется набор различных элементов (полей записи), хранимый как единое

целое. При этом возможен доступ к отдельным полям записи. К полю записи приме-

нимы те же операции, что и к базовому типу, к которому это поле относится (тип ка-

ждого поля указывается при описании записи).

Последовательность. Данный тип можно рассматривать как массив бесконеч-

ного размера (память для него может выделяться в процессе выполнения программы

по мере роста последовательности). Зачастую такой тип данных обладает лишь пос-

ледовательным доступом к элементам. Под этим подразумевается, что последова-

тельность просматривается от одного элемента строго к следующему, формируется

же она путем добавления элементов в ее конец. В языке Pascal подобному типу соот-

ветствуют файловые типы данных.

Преимущества использования типов данных

Типы данных защищают программы, по крайней мере, от следующих ошибок:

1. Некорректное присваивание. Пусть переменная объявлена как имеющая чи-

словой тип. Тогда попытка присвоить ей символьное или какое-либо другое значение

приведет к ошибке еще на этапе компиляции. Такого рода ошибки трудно отследить

обычными средствами.

2. Некорректная операция. Типизация позволяет избежать попыток применения

выражений вида "Hello world" + 1. Поскольку все переменные в памяти хранятся как

наборы битов, то при отсутствии типов подобная операция была выполнима (и могла

дать результат вроде "Hello worlde"!). С использованием типов такие ошибки отсека-

ются опять же на этапе компиляции.

3. Некорректная передача параметров в процедуры и функции. Если функция

"синус" ожидает, что ей будет передан числовой аргумент, то передача ей в качестве

параметра строки "Hello world" может иметь непредсказуемые последствия. При по-

мощи контроля типов такие ошибки также отсекаются на этапе компиляции или при-

Структуры данных. Теоретический материал

79

водят к ошибкам выполнения программы, если значения параметра вводятся с кла-

виатуры или файла.

Структуры данных

Необходимым условием построения алгоритма является формализация данных,

т.е. приведение информации к некоторой уже исследованной информационной моде-

ли. Когда такая модель найдена, говорят, что определена абстрактная структура

данных.

Абстрактная структура данных описывает признаки и свойства объекта,

взаимосвязь между элементами объекта, а также возможные операции над данным

объектом или классом объектов.

Одной из задач информатики является нахождение форм представления ин-

формации, удобных для компьютерной обработки. Информатика как точная наука ра-

ботает с формальными (описанными математически строго) объектами. Такими объ-

ектами – базовыми абстрактными структурами данных, используемыми в инфор-

матике, являются:

• целые числа;

• вещественные числа;

• символы;

• логические значения.

Для компьютерной обработки этих объектов в языках программирования су-

ществуют соответствующие тины данных. Базовые объекты можно объединять в бо-

лее сложные структуры, добавляя операции уже над структурой в целом и правила

доступа к отдельным элементам этой абстрактной структуры данных.

К таким абстрактным структурам данных относятся:

• векторы (конечные массивы);

• таблицы (матрицы), а в общем случае – многомерные массивы;

• графы;

• динамические структуры:

- последовательности символов, чисел;

- строки;

- списки;

- очереди;

- стеки;

- деревья;

- графы.

Удачный выбор структуры данных часто является залогом создания эффектив-

ного алгоритма и программы, его реализующей: используя аналогию структур дан-

ных и реальных объектов, можно находить эффективные решения задач.

Заметим, что перечисленные структуры существуют независимо от их реализа-

ции при программировании. С этими структурами данных работали и в XVIII, и в

XIX веках, когда еще не придумали вычислительную машину. Мы можем разрабаты-

80

вать алгоритм в терминах абстрактной структуры данных, но для реализации алго-

ритма в конкретном языке программирования необходимо найти способ ее пред-

ставления в терминах типов данных и операторов, поддерживаемых данным языком

программирования. Для компьютерного представления абстрактных структур исполь-

зуются структуры данных, которые представляют собой набор переменных, воз-

можно различных типов данных, объединенных определенным образом. Для конст-

руирования таких структур, как вектор, таблица, строка, последовательность, в боль-

шинстве языков программирования присутствуют стандартные типы данных: одно-

мерный массив, двухмерный массив, строка, файл (реже список) соответственно. Ор-

ганизацию остальных структур данных, в первую очередь динамических структур,

размер которых меняется во время выполнения программы, программисту приходит-

ся осуществлять самостоятельно, используя базовые типы данных. Рассмотрим такие

структуры подробнее.

Списки

Линейный список – последовательность линейно связанных элементов, для

которых разрешены операции добавления элементов в произвольное место списка и

удаление любого элемента. Линейный список однозначно задается указателем на на-

чало списка. Типовыми операциями над списками являются: обход списка, поиск за-

данного элемента, вставка элемента сразу после или перед определенным элементом,

удаление заданного элемента, объединение двух списков в один, разбиение одного

списка на два и более списков и т.п.

В линейном списке для каждого элемента, кроме первого, есть предыдущий

элемент; для каждого элемента, кроме последнего, есть следующий элемент. Таким

образом, все элементы списка упорядочены. Однако обработка линейного односвяз-

ного списка не всегда удобна, т.к. отсутствует возможность движения в противопо-

ложную сторону — от конца списка к началу. В линейном списке можно обойти все

элементы, только двигаясь последовательно от текущего элемента к следующему, на-

чиная с первого, прямой доступ к i-му по счету элементу невозможен.

Линейные списки, в которых операции вставки, удаления и доступа к значени-

ям элементов выполняются только с крайними элементами (первым или последним),

получили специальные названия.

Стек – частный случай линейного односвязного списка, для которого опреде-

лены две операции: добавление элемента в вершину стека (перед первым элементом)

и удаление элемента из вершины стека (удаление первого элемента).

Пример. Рассмотрим задачу определения сбалансированности скобок различ-

ных видов в арифметическом выражении. Например, требуется проанализировать,

сбалансированы ли скобки в выражении, содержащем круглые и квадратные скобки:

Структуры данных. Теоретический материал

81

[(а + b) - (а - с )] + ( [ а - b )] )? Для решения этой задачи будем использовать динами-

ческую структуру данных стек. Приведем алгоритм решения этой задачи по шагам.

Будем использовать следующие обозначения:

i – номер анализируемого символа;

п – количество символов в выражении.

1. i= 0.

2. i=i+ l.

3. Если i <= п, то переход на п. (4), иначе если стек пуст, то выдаем сообщение

"скобки сбалансированы", в противном случае выдаем сообщение "скобки не сбалан-

сированы". Конец алгоритма.

4. Если i-й символ отличен от символов скобок, то переход на п. (2).

5. Если i-й символ равен "(" или " [", то помещаем его в стек, переход на п. (2).

6. Если i-й символ равен ")", то проверяем вершину стека: если в вершине стека

находится "(", то извлекаем ее из стека; переход на п. (2), иначе выдаем сообщение

"скобки не сбалансированы". Конец алгоритма.

7. Если i-й символ равен "] ", то проверяем вершину стека: если в вершине сте-

ка находится " [", то извлекаем ее из стека; переход на п. (2), иначе выдаем сообщение

"скобки не сбалансированы". Конец алгоритма.

Очередь – частный случай линейного односвязного списка, для которого раз-

решены только две операции: добавление элемента в конец (хвост) очереди и удале-

ние элемента из начала (головы) очереди.

Понятие очереди действительно очень близко к бытовому термину "очередь".

Очередь покупателей в магазине хорошо описывается в терминах этой структуры

данных.

Дерево – это совокупность элементов, называемых узлами, в которой выделен

один элемент (корень), а остальные элементы разбиты на непересекающиеся множе-

ства (поддеревья), каждое из которых является деревом, при этом корень каждого

поддерева является потомком корня дерева, т.е. все элементы связаны между собой

отношением (предок–потомок). В результате образуется иерархическая структура уз-

лов. Узлы, которые не имеют ни одного потомка, называются листьями. Над деревом

определены следующие операции: добавление элемента в дерево, удаление элемента

из дерева, обход дерева, поиск элемента в дереве.

Пример. Дерево является наиболее удобной структурой данных для представ-

ления генеалогического дерева, с помощью которого можно решать задачи определе-

ния степени родства между двумя людьми.

Используются деревья и для определения выигрышной стратегии в играх, и для

построения различных информационных моделей.

Особенно важную роль в информатике играют так называемые бинарные дере-

вья.

82

Двоичное (бинарное) дерево – частный случай дерева, в котором каждый узел

может иметь не более двух потомков, являющихся корнями левого и правого подде-

рева.

Рис. 4. Пример двоичного дерева

Если дополнительно для узлов дерева выполняется условие, что все значения

элементов левого поддерева меньше значения корня дерева, а все значения элементов

правого поддерева больше значения корня, то такое дерево называется деревом би-

нарного поиска и предназначено для быстрого поиска элементов. Алгоритм поиска в

таком дереве работает так: искомое значение сравнивается со значением корня дере-

ва, и в зависимости от результата сравнения поиск либо заканчивается, либо продол-

жается только в левом или только в правом поддереве соответственно. Общее коли-

чество операций сравнения не будет превосходить так называемую высоту дерева –

максимальное количество элементов на пути от корня дерева к одному из листьев.

Так, высота изображенного на рисунке дерева равна 4.

Графы

Граф – это множество элементов, называемых вершинами графа вместе с набо-

ром отношений между этими вершинами, называемыми ребрами графа. Графической

интерпретацией этой структуры данных является множество точек, соответствующих

вершинам, некоторые пары из которых соединены линиями или стрелками, которые

соответствуют ребрам. В последнем случае граф называется ориентированным.

В силу того, что с помощью графов можно описывать объекты произвольной

структуры, графы являются основным средством для описания структур сложных

объектов и функционирования систем, например, для описания вычислительной сети,

транспортной системы, иерархической структуры (дерево является одной из разно-

видностей графа). Блок-схемы алгоритмов также представляют собой графы.

Если каждому ребру к тому же приписано некоторое число (вес), то такой граф

называют взвешенным. Например, при описании с помощью графа системы дорог

России важным является длина дороги (вес ребра графа), соединяющей те или иные

населенные пункты (вершины графа). При этом на рисунке длины соответствующих

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

Пример. В терминах взвешенного графа удобно решить задачу: Правительство

России составляет план строительства современных автомагистралей, соединяющих

города, население которых превышает миллион человек. Какие именно дороги следу-

Структуры данных. Теоретический материал

83

ет построить, чтобы из любого такого города можно было добраться в любой другой

по новым автомагистралям, а общая длина дорог была бы минимальной?

Эта задача в теории графов имеет простое и точное решение. Планирование се-

ти дорог можно начать с любого города, например Санкт-Петербурга. Соединим его с

ближайшим городом-миллионником. Далее на каждом шаге к имеющейся сети до-

бавляется кратчайшая дорога, которая может соединить город, еще не присоединен-

ный к сети, с одним из городов, уже включенных в сеть. Количество дорог будет на

единицу меньше, чем число городов.

Абстрактную структуру данных граф в программе можно представить не-

сколькими способами, т.е. используя разные типы данных. Например, граф можно

описывать с помощью списка ребер, задавая каждое ребро парой вершин и, при необ-

ходимости, весом. Чаще используют табличное хранение графа, называемое также

матрицей смежности, т.е. двухмерный массив, скажем, А, где для невзвешенного

графа А[i] [j] = true (или 1), если ребро между вершинами i и j существует, и А[i] [j]

= false (или 0) в противном случае. Для взвешенного графа A [i] [j] равно весу соот-

ветствующего ребра, а отсутствие ребра в ряде задач удобно обозначать бесконечно-

стью. Для неориентированных графов матрица смежности всегда симметрична отно-

сительно главной диагонали (i = j). С помощью матрицы смежности легко проверить,

существует ли в графе ребро, соединяющее вершину i с вершиной j. Основной же ее

недостаток заключается в том, что матрица смежности требует, чтобы объем памяти

был достаточен для хранения N2 значений для графа, содержащего N вершин, даже

если ребер в графе существенно меньше, чем N2.

Массив – это конструкция данных. Данные (величины), входящие в состав

массива, называются элементами массива. Массив имеет общее для всех элементов

имя и общий для всех элементов тип. Значение массива – это совокупность (набор)

значений его элементов. Другое название массива – таблица.

Индекс элемента – это порядковый номер элемента в массиве.

Типовые задачи: заполнение массива значениями, упорядочивание значений

элементов, поиск элемента с заданными свойствами, поиск элемента по индексу, зна-

чению элемента с заданными свойствами и т.д.

Одномерные массивы

Описать одномерный массив – значит задать имя массива, тип массива и на-

чальное и конечное значение индекса.

Обратиться к элементу одномерного массива – значит указать имя массива и

значение индекса элемента.

Пример

Опишем массив А целых чисел на 10 элементов.

цел А[1..10]

1 2 3 4 5 6 7 8 9 10

84

Работа с массивом сводится к работе с его элементами. Для этого, как правило,

используются циклы.

Двумерные массивы

Если индексов два, то массив называется двумерным.

Описать двумерный массив – значит задать имя массива, тип массива и на-

чальные и конечные значения индексов.

Пример

Опишем массив В целых чисел на 25 элементов.

цел В[1..5, 1..5]

1 2 3 4 5

1

2

3

4

5

Обратиться к элементу двумерного массива – означает указать имя массива

и значения индексов элемента.

Пример

Элемент массива В[2,4].

Работа с массивом сводится к работе с его элементами. Для этого, как правило,

используются циклы.

О пользе быстрых алгоритмов

Часто разница между плохим и хорошим алгоритмом более существенна, чем

между быстрым и медленным компьютером. Пусть необходимо отсортировать массив

из миллиона чисел. Что быстрее: сортировать его вставками на суперкомпьютере (100

миллионов операций в секунду) или слиянием на домашнем компьютере (1 млн опе-

раций в секунду)? Пусть к тому же сортировка вставками написана на ассемблере

чрезвычайно экономно, и для сортировки п чисел нужно, скажем, лишь 2п2 операций.

В то же время алгоритм слиянием написан без особой заботы об эффективности и

требует 50n log(n) операций. Для сортировки миллиона чисел получаем

(2*(106)

2 опер.) / (10 опер. в секунду) = 20 000 с,

т.е. примерно 5,56 ч для суперкомпьютера

и (50*(106)log(10

6) опер.) / (10 опер. в секунду) = 1000 с,

т.е. примерно 17 мин для типового «домашнего» компьютера.

Очевидно, что разработка эффективных алгоритмов не менее важна, чем разра-

ботка быстрой электроники.

Структуры данных. Теоретический материал

85

Контрольные вопросы

1. Что такое одномерный массив?

2. Для чего в программах используются двухмерные массивы?

3. Для чего используются одномерные массивы?

4. Как в программе использовать значение конкретного элемента двухмерного

массива?

5. Как в программе использовать значение конкретного элемента одномерного

массива?

6. Как можно заполнить двухмерный массив?

7. Как можно заполнить одномерный массив?

8. Как называется номер элемента одномерного массива?

9. Как описываются элементы одномерного массива?

10. Как описываются элементы двухмерного массива?

11. Как описываются элементы двухмерного массива?

12. Сколько индексов характеризуют элемент двухмерного массива?

86

Примеры выполнения заданий

Одномерные массивы

Задача №1. Описать одномерный массив С[1..5] целых чисел и ввести значе-

ния.

Решение.

1. Алгоритм решения задачи в виде графической схемы алгоритма.

2. Тестовые наборы:

3. Оценка объемной сложности разработанного алгоритма

Данные Тип Объем, байт

1 t цел 2

Итого 2

4. Оценка временной сложности разработанного алгоритма

Операции Тест 1

Присваиваний 1

Сравнений 0

Таким образом, алгоритм имеет сложность О(n), т.е. линейную.

Задача №2. В массиве А[1..10] найти индекс максимального элемента и вывес-

ти его.

Решение.

1. Алгоритм решения задачи в виде графической схемы алгоритма

алг

цел n, i цел таб А[1..10]

нач

z:=1

для i от 2 до n

если a[i]>a[z]

то z:=i

вывод z

кон

2. Тестовые наборы:

3. Оценка объемной сложности разработанного алгоритма

Данные Тип Объем, байт

1 t цел 2

Итого 2

Структуры данных. Примеры выполнения заданий

87

4. Оценка временной сложности разработанного алгоритма.

Операции Тест 1

Присваиваний 1

Сравнений 0

Таким образом, алгоритм имеет сложность О(n), т.е. линейную.

Двумерные массивы

Задача №3. Разработайте алгоритм для формирования двумерного массива по об-

разцу:

00001

00001

00001

00001

11111

Решение

1. Алгоритм решения задачи в виде графической схемы алгоритма.

2. Тестовые наборы:

3. Оценка объемной сложности разработанного алгоритма.

Данные Тип Объем, байт

1 t цел 2

Итого 2

4. Оценку временной сложности разработанного алгоритма.

Операции Тест 1

Присваиваний 1

Сравнений 0

Таким образом, алгоритм имеет сложность О(n), т.е. линейную.

88

Задачи для самостоятельного выполнения

Одномерные массивы

Уровень А

1. В одномерном массиве подсчитать количество элементов, кратных 5.

2. В одномерном массиве подсчитать количество элементов, кратных 15.

3. Возвести в куб все элементы массива А [1..10].

4. Вывести массив на экран в обратном порядке его элементов.

5. Вычислить произведение элементов массива А [1..10].

6. Вычислить среднее арифметическое элементов массива А [1..10].

7. Вычислить сумму элементов массива А [1..10].

8. Дан массив вещественных чисел. Все элементы массива с четными номерами за-

менить на их абсолютную величину.

9. Дан массив вещественных чисел. Все элементы с нечетными номерами заменить

на их квадратный корень.

10. Дан массив вещественных чисел. Каждый отрицательный элемент заменить на

его абсолютную величину.

11. Дан массив вещественных чисел. Каждый элемент, больший 10, заменить на его

квадратный корень.

12. Дан массив действительных чисел с количеством элементов N. Подсчитать,

сколько в нем отрицательных чисел.

13. Дан массив действительных чисел с количеством элементов N. Подсчитать,

сколько в нем положительных чисел.

14. Дан массив действительных чисел с количеством элементов N. Подсчитать,

сколько в нем нулей.

15. Дан массив натуральных чисел. Вывести все элементы массива, являющиеся

двузначными числами.

16. Дан массив натуральных чисел. Вывести все элементы массива, являющиеся

трехзначными числами.

17. Дан массив целых чисел. Вывести все четные элементы.

18. Дан массив целых чисел. Вывести все элементы, оканчивающиеся нулем.

19. Дан массив целых чисел. Найти сумму нечетных элементов.

20. Дан массив целых чисел. Найти сумму элементов, кратных заданному числу.

21. Дан массив целых чисел. Определить количество элементов, кратных А.

22. Дан массив. Все его элементы разделить на первый элемент.

23. Дан массив. Все его элементы увеличить в 2 раза.

24. Дан массив. Все его элементы увеличить на число В.

25. Дан массив. Все его элементы уменьшить на 20.

26. Дан массив. Все его элементы уменьшить на число А.

27. Дан массив. Все его элементы умножить на последний элемент.

28. Дан массив. Вывести все неотрицательные элементы.

Задачи для самостоятельного выполнения. Одномерные массивы

89

29. Дан массив. Вывести все элементы, не превышающие числа 100.

30. Дан массив. Вывести второй, четвертый и т.д. элементы, стоящие на четных мес-

тах.

31. Дан массив. Вывести третий, шестой и т.д. элементы.

32. Дан массив. Найти сумму элементов массива, значение которых не превышает

20.

33. Дан массив. Найти сумму элементов массива, больших числа А.

34. Дан массив. Определить индекс максимального элемента.

35. Дан массив. Определить количество максимальных элементов в массиве.

36. Дан массив. Определить количество минимальных элементов в массиве.

37. Дан массив. Определить количество натуральных элементов в массиве.

38. Дан массив. Определить количество неотрицательных элементов.

39. Дан массив. Определить максимальный элемент.

40. Дан массив. Определить минимальный элемент.

41. Дан массив. Скопировать все его элементы в другой массив такого же размера в

том же порядке расположения элементов.

42. Дан массив. Скопировать все его элементы в другой массив такого же размера в

обратном порядке расположения элементов.

43. Даны два массива одного размера. Получить третий массив, каждый элемент ко-

торого равен сумме элементов с одинаковыми номерами в заданных массивах.

44. Даны два массива одного размера. Получить третий массив, каждый элемент ко-

торого равен произведению элементов с одинаковыми номерами в заданных

массивах.

45. Даны два массива одного размера. Получить третий массив, каждый элемент ко-

торого равен максимальному из элементов с одинаковыми номерами в заданных

массивах.

46. Заменить все элементы массива А [1..10] их квадратами.

47. Заменить все элементы массива А [1..10] их модулями.

48. Заменить все элементы массива А [1..10] нулем.

49. Заполнить массив из восьми элементов следующими значениями: первый эле-

мент массива равен 37, второй – 0, третий – 50, четвертый – 46, пятый – 34, шес-

той – 46, седьмой – 0, восьмой –13.

50. Заполнить массив из двадцати элементов следующим образом: 20 19 ... 1.

51. Заполнить массив из двенадцати элементов следующим образом: 1 2 ... 12.

52. Заполнить массив из десяти элементов значениями, вводимыми с клавиатуры в

ходе выполнения программы.

53. Заполнить массив из пятнадцати элементов случайным образом вещественными

значениями, лежащими в диапазоне от 0 до 1.

54. Заполнить массив из пятнадцати элементов случайным образом вещественными

значениями х (22 <= х < 23).

55. Заполнить массив из пятнадцати элементов случайным образом вещественными

значениями х (0 <= х < 10).

56. Заполнить массив из пятнадцати элементов случайным образом вещественными

90

значениями х (-50 <= х < 50).

57. Заполнить массив из пятнадцати элементов случайным образом целыми значе-

ниями, лежащими в диапазоне от 0 до 10 включительно.

58. Заполнить массив размерностью 10 действительными числами и вывести их.

59. Заполнить массив размерностью 15 натуральными числами и вывести их.

60. Известно, что в массиве имеются элементы, равные 5. Определить номер первого

из них.

61. Известно, что в массиве имеются элементы, равные 5. Определить номер по-

следнего из них.

62. Извлечь корень квадратный из всех элементов массива А [1..10].

63. Найти среднее арифметическое элементов массива, больших числа 10.

64. Описать массив А натуральных чисел для 10 элементов.

65. Описать массив В действительных чисел для 20 элементов.

66. Определить произведение всех элементов массива.

67. Определить среднее арифметическое всех элементов массива.

68. Определить сумму всех элементов массива.

69. Определить сумму второго, четвертого, шестого и т.д. элементов массива.

70. Определить сумму квадратов всех элементов массива.

71. Определить сумму шести первых элементов массива.

72. Переставить первый и последний элементы в массиве А [1..10].

73. Разделить все элементы массива А [1..10] на -1.

74. Разработать алгоритм для заполнения массива значениями, введенными с кла-

виатуры.

75. Разработать алгоритм для заполнения массива случайными значениями.

76. Скопировать массив А [1..10] в массив В [1..10].

77. Составить программу вывода на экран любого элемента массива.

78. Увеличить каждый элемент массива А [1..10] на единицу.

79. Увеличить каждый элемент массива А [1..10] в два раза.

80. Уменьшить каждый элемент массива А [1..10] на два.

81. Уменьшить каждый элемент массива А [1..10] в два раза.

Уровень В

82. Разработайте алгоритм для отыскания элемента одномерного массива А[1..4],

имеющего наибольшее значение (он единственный в массиве).

83. В массиве А [1..10] возвести в квадрат все отрицательные элементы.

84. В массиве А [1..10] вычислить сумму отрицательных элементов.

85. В массиве А [1..10] вычислить сумму положительных элементов.

86. В массиве А [1..10] вычислить сумму положительных элементов.

87. В массиве А [1..10] заменить отрицательные элементы их модулями.

88. В массиве А [1..10] заменить отрицательные элементы нулем.

89. В массиве А [1..10] заменить положительные элементы их корнями квадратны-

ми.

Задачи для самостоятельного выполнения. Одномерные массивы

91

90. В массиве А [1..10] заменить элементы равные нулю на 100.

91. В массиве А [1..10] извлечь корень квадратный из положительных элементов.

92. В массиве А [1..10] найти наибольший элемент и указать его номер.

93. В массиве А [1..10] найти наименьший элемент и указать его номер.

94. В массиве А [1..10] подсчитать количество отрицательных элементов.

95. В массиве А [1..10] подсчитать количество элементов равных единице.

96. В массиве А [1..10] подсчитать количество элементов равных минус единице. В

массиве А [1..10] подсчитать количество положительных элементов.

97. В массиве А [1..10] указать номера элементов равных нулю.

98. В массиве записаны оценки ученика по 10 предметам. Определить общее коли-

чество четверок и пятерок.

99. В массиве записаны результаты 20 игр футбольной команды (если игра закончи-

лась выигрышем данной команды, то записано число 3, проигрышем – 0, если

игра окончилась вничью – 1). Определить общее количество выигрышей и ничь-

их данной команды,

100. В массиве из 20 элементов числа образуют неубывающую последовательность.

Несколько элементов, идущих подряд, равны между собой. Найти количество

таких элементов. Сколько различных чисел имеется в массиве?

101. В массиве из 30 элементов числа образуют неубывающую последовательность.

Найти количество различных чисел в массиве.

102. В массиве хранится информация о баллах, полученных спортсменом-

десятиборцем в каждом из десяти видов спорта. Для выхода в следующий этап

соревнований общая сумма баллов должна превысить некоторое известное зна-

чение. Определить, вышел ли данный спортсмен в следующий этап соревнова-

ний.

103. В массиве хранится информация о количестве осадков, выпавших за каждый

день января. Определить, в какие числа месяца осадков не было.

104. В массиве хранится информация о количестве побед, одержанных 20 футболь-

ными командами. Определить номера команд, имеющих меньше трех побед.

105. В массиве хранится информация о массе каждого из 30 предметов, загружае-

мых в грузовой автомобиль, грузоподъемность которого известна. Определить,

не превышает ли общая масса всех предметов грузоподъемность автомобиля.

106. В массиве хранятся значения веса двадцати человек. С помощью датчика слу-

чайных чисел заполнить массив целыми значениями, лежащими в диапазоне от

50 до 100 включительно.

107. В массиве хранятся значения роста двенадцати человек. С помощью датчика

случайных чисел заполнить массив целыми значениями, лежащими в диапазоне

от 163 до 190 включительно.

108. В массиве хранятся сведения о количестве осадков, выпавших за каждый день

января. Определить общее количество осадков за январь.

109. В массиве хранятся сведения о количестве осадков, выпавших за каждый день

июня. Определить общее количество осадков, выпавших за каждую декаду этого

месяца.

92

110. В массиве хранятся сведения о количестве осадков, выпавших за каждый день

февраля. Определить среднедневное количество осадков в этом месяце.

111. В массиве хранятся сведения о количестве осадков, выпавших за каждый день

сентября. Определить, сколько осадков выпадало в среднем за один день в пер-

вую, вторую и третью декады этого месяца.

112. В массиве хранятся сведения о количестве осадков, выпавших за каждый день

июня. Определить, в какой период выпало больше осадков: в первую половину

июня или во вторую;

113. В массиве хранятся сведения о количестве осадков, выпавших за каждый день

июня. Определить, в какую декаду месяца выпало больше всего осадков.

114. В массиве хранятся сведения о количестве осадков, выпавших за каждый день

февраля. Определить количество дней, когда осадков не было.

115. В массиве хранятся сведения о количестве осадков, выпавших за каждый день

августа. Определить среднее количество осадков, выпавших в дни, когда шел

дождь.

116. В массиве хранятся сведения о стоимости 12 различных предметов. Определить

общую стоимость всех предметов.

117. В массиве хранятся сведения об общей стоимости товаров, проданных фирмой

за каждый день марта. Определить количество дней, в которые стоимость про-

данных товаров превысила значение S.

118. В массиве хранятся сведения об оценках 25 учеников по химии. Определить

количество неуспевающих по химии учеников.

119. В одномерном массиве подсчитать количество элементов, значения которых –

простые числа.

120. Выяснить, верно ли, что сумма элементов массива есть неотрицательное число.

121. Дан массив вещественных чисел. Все элементы с нечетными номерами увели-

чить на 1, с четными – уменьшить на 1.

122. Дан массив вещественных чисел. Все элементы с четными номерами удвоить, с

нечетными – уменьшить на 1.

123. Дан массив вещественных чисел. Выяснить, верно ли, что количество элемен-

тов, которое не больше 50,55, кратно четырем.

124. Дан массив вещественных чисел. Выяснить, верно ли, что количество положи-

тельных элементов не превышает 5.

125. Дан массив вещественных чисел. Из всех положительных элементов вычесть

элемент с номером k1, из остальных – элемент с номером k2.

126. Дан массив вещественных чисел. Из всех положительных элементов вычесть

элемент с номером k1, из всех отрицательных – число N. Нулевые элементы ос-

тавить без изменения.

127. Дан массив вещественных чисел. Из всех положительных элементов вычесть А,

из всех отрицательных вычесть В, ко всем нулевым элементам прибавить С.

128. Дан массив вещественных чисел. Ко всем нулевым элементам прибавить N, из

всех положительных элементов вычесть А, ко всем отрицательным прибавить В.

129. Дан массив вещественных чисел. Ко всем отрицательным элементам прибавить

Задачи для самостоятельного выполнения. Одномерные массивы

93

элемент с номером m1, к остальным – элемент с номером m2.

130. Дан массив вещественных чисел. Ко всем отрицательным элементам прибавить

элемент с номером a1, из всех нулевых вычесть число В. Положительные эле-

менты оставить без изменения.

131. Дан массив действительных чисел с количеством элементов N. Преобразовать

его, удалив все числа, равные минимальному.

132. Дан массив из 20 элементов. Сформировать два массива размером 10, включив

в первый из них элементы заданного массива с четными индексами, а во второй

– с нечетными.

133. Дан массив ненулевых целых чисел. Определить, сколько раз элементы масси-

ва при просмотре от его начала меняют знак. Например, в массиве 10, -4, 12, 56,

-4, -89 знак меняется 3 раза.

134. Дан массив целых чисел. Все нечетные элементы удвоить, а четные уменьшить

вдвое.

135. Дан массив целых чисел. Все четные элементы заменить на их квадраты, а не-

четные удвоить.

136. Дан массив целых чисел. Все элементы, кратные числу 10, заменить нулем.

137. Дан массив целых чисел. Все элементы, оканчивающиеся цифрой 4, уменьшить

вдвое.

138. Дан массив целых чисел. Вывести все элементы, предшествующие первому

элементу с заданным значением N. Если элементов, равных N, в массиве нет, то

вывести все элементы.

139. Дан массив целых чисел. Вывести все элементы, следующие за последним эле-

ментом, оканчивающимся цифрой "7". Если элементов, оканчивающихся цифрой

"7", в массиве нет, то ни один элемент не должен быть выведен.

140. Дан массив целых чисел. Вывести на экран сначала четные элементы массива,

потом нечетные.

141. Дан массив целых чисел. Выяснить, какой элемент массива больше: k-й или s-й.

142. Дан массив целых чисел. Выяснить, является ли k-й элемент массива четным

числом.

143. Дан массив целых чисел. Выяснить, является ли s-й элемент массива положи-

тельным числом.

144. Дан массив целых чисел. Найти номера элементов, оканчивающихся цифрой 0

(известно, что такие элементы в массиве есть).

145. Дан массив целых чисел. Найти сумму элементов массива, кратных А или В.

146. Дан массив целых чисел. Определить количество элементов, отличных от по-

следнего элемента.

147. Дан массив целых чисел. Определить те элементы, которые равны минималь-

ному (min) и максимальному (max) элементам. Индексы этих элементов вывести.

148. Дан массив целых чисел. Переписать его нечетные элементы в другой массив

такого же размера, расположив элементы на тех же местах, что и в исходном

массиве.

149. Дан массив целых чисел. Переписать его нечетные элементы в другой массив

94

такого же размера, расположив элементы подряд с начала массива.

150. Дан массив целых чисел. Рассмотреть отрезки массива (группы идущих подряд

чисел), состоящие из нечетных чисел. Получить наибольшую из длин рас-

сматриваемых отрезков.

151. Дан массив целых чисел. Указать номера тех элементов массива, для которых

aj + ai = m.

152. Дан массив целых чисел. Четные элементы увеличить на А, а из элементов с

четными номерами вычесть В.

153. Дан массив целых чисел. Выяснить, верно ли, что сумма элементов, которые

меньше 50, есть четное число.

154. Дан массив целых чисел. Выяснить, верно ли, что сумма элементов, которые

больше 20, превышает 100.

155. Дан массив. Вывести на экран сначала неотрицательные элементы массива, по-

том отрицательные.

156. Дан массив. Найти количество элементов, значение которых больше среднего

арифметического минимального и максимального элементов массива, и вывести

их номера.

157. Дан массив. Определить индекс минимального и индекс максимального эле-

ментов.

158. Дан массив. Определить количество элементов, больших суммы всех элементов

массива, и напечатать их номера.

159. Дан массив. Определить, на сколько максимальный элемент больше мини-

мального.

160. Дан массив. Переписать его второй, четвертый и т.д. элементы в другой массив

такого же размера, расположив элементы на тех же местах, что и в исходном

массиве.

161. Дан массив. Переписать его второй, четвертый и т.д. элементы в другой массив

такого же размера, расположив элементы подряд с начала массива.

162. Дан массив. Составить программу расчета квадратного корня из любого эле-

мента массива.

163. Дан массив. Составить программу расчета среднего арифметического двух лю-

бых элементов массива.

164. Даны два массива одного размера, в которых нет нулевых элементов. Получить

третий массив, каждый элемент которого равен 1, если элементы заданных мас-

сивов с тем же номером имеют одинаковый знак, и равен нулю в противном слу-

чае.

165. Даны массив, упорядоченный по возрастанию, и число А, о котором известно

следующее: оно не равно ни одному из элементов массива, больше первого и

меньше последнего элемента. Вывести все элементы массива, меньшие А.

166. Даны массив, упорядоченный по возрастанию, и число А, о котором известно

следующее: оно не равно ни одному из элементов массива, больше первого и

меньше последнего элемента. Найти два элемента массива (их порядковые но-

мера и значение), в интервале между которыми находится значение А.

Задачи для самостоятельного выполнения. Одномерные массивы

95

167. Даны массив, упорядоченный по возрастанию, и число А, о котором известно

следующее: оно не равно ни одному из элементов массива, больше первого и

меньше последнего элемента. Найти элемент массива (его порядковый номер и

значение), ближайший к А.

168. Задан массив целых чисел. Сжать массив, выбросив элементы, которые равны

минимальному из элементов массива.

169. Задан массив целых чисел. Сформировать новый из индексов элементов исход-

ного, кратных 2, 3 или 5.

170. Заполнить массив двадцатью первыми членами геометрической прогрессии с

известным первым членом прогрессии а и ее знаменателем Z.

171. Заполнить массив двенадцатью первыми членами последовательности Фибо-

наччи (последовательности, в которой первые два члена равны 1, а каждый сле-

дующий равен сумме двух предыдущих).

172. Заполнить массив десятью первыми членами арифметической прогрессии с из-

вестным первым членом прогрессии а и ее разностью Р.

173. Заполнить массив из восьми элементов таким образом, чтобы значения элемен-

тов при просмотре массива слева направо образовывали убывающую последова-

тельность.

174. Заполнить массив из восьми элементов таким образом, чтобы значения элемен-

тов при просмотре массива слева направо образовывали возрастающую последо-

вательность.

175. Из элементов массива А сформировать массив В того же размера по правилу:

если номер г элемента массива А четный, то Вi= Аi2, в противном случае Вi = 2Аi.

176. Из элементов массива А, заполненного целыми числами, сформировать массив

В того же размера по правилу: четные элементы массива А удвоить, нечетные

оставить без изменения.

177. Из элементов массива М сформировать массив N того же размера по правилу:

если номер i элемента массива М четный, то N. = i * Мi, в противном случае Ni=

М/i,

178. Из элементов массива т сформировать массив п того же размера по правилу:

неотрицательные элементы массива т уменьшить в 3 раза, остальные – возвести

в квадрат.

179. Известны данные о количестве осадков, выпавших за каждый день февраля.

Найти общее число осадков, выпавших по четным числам месяца.

180. Известны данные о количестве осадков, выпавших за каждый месяц года. Най-

ти общее число осадков, выпавших в марте, июне, сентябре и декабре.

181. Используя датчик случайных чисел, заполнить массив из двадцати элементов

неповторяющимися числами.

182. Скопировать элементы массива А [1..10] в массив В [1..10] в обратном порядке,

т. е. В[1]=A[N], B[2]=A[N-1]…

183. Масса каждого из 25 человек хранится в массиве. Людей, имеющих массу бо-

лее 100 кг, будем условно называть полными (известно, что есть, по меньшей

мере, один такой человек). Определить среднюю массу полных людей и сред-

96

нюю массу остальных людей.

184. Найти средние арифметические положительных и отрицательных элементов

массива.

185. Найти число пар "соседних" элементов массива, оканчивающихся нулем.

186. Найти число пар "соседних" элементов массива, являющихся четными числа-

ми.

187. Найти число элементов массива, которые больше своих "соседей", т.е. предше-

ствующего и последующего.

188. Найти элемент, наиболее близкий к среднему значению всех элементов масси-

ва.

189. Определить количество элементов массива, принадлежащих промежутку от А

до В (значения А и В вводятся с клавиатуры; В > А).

190. Определить среднее арифметическое элементов массива с s1-го по s2-й (значе-

ния s1 и s2 вводятся с клавиатуры; s2 > s1).

191. Определить сумму элементов массива с k1-го по k2-й (значения k1и k2 вводятся

с клавиатуры; k2 > k1).

192. Определить частное от деления суммы положительных элементов массива на

модуль суммы отрицательных элементов.

193. Подсчитать в массиве А [1..10] количество элементов равных нулю.

194. Разработать алгоритм, определяющий, есть ли в массиве введенное пользовате-

лем число.

195. Рост 22 учеников класса представлен в виде массива. Определить количество

учеников, рост которых не превышает значения R.

196. Рост 22 учеников класса представлен в виде массива. Рост мальчиков условно

задан отрицательными числами. Определить средний рост мальчиков и средний

рост девочек.

197. Скопировать отрицательные элементы массива А [1..10] в массив В [1..10].

198. Скопировать положительные элементы массива А [1..10] в массив В [1..10].

199. Сформировать новый массив, поменяв местами элементы с четными и нечет-

ными индексами исходного.

Уровень С

200. В массиве А [1..10] подсчитать количество отрицательных, нулевых и положи-

тельных элементов.

201. В массиве а записаны измеренные в сотых долях секунды результаты 23 спорт-

сменов в беге на 100 м. Составить команду из четырех лучших бегунов для уча-

стия в эстафете 4 х 100 м, т.е. указать одну из четверок натуральных чисел г, j, k,

т, для которой 1 <= i < j < k < т <= 23 и сумма a[i] + a[j] + а[k] + а[т] имеет

наименьшее значение.

202. В массиве записаны оценки по иностранному языку 22 учеников класса. Опре-

делить количество пятерок, четверок, троек и двоек.

203. В массиве записаны результаты 20 игр футбольной команды (если игра окон-

чилась выигрышем данной команды, то записано число 3, проигрышем – 2, если

Задачи для самостоятельного выполнения. Одномерные массивы

97

игра закончилась вничью – 1). Определить количество выигрышей, количество

ничьих и количество проигрышей данной команды.

204. В массиве имеются только два одинаковых элемента. Найти их.

205. Дан массив а. Определить знакопеременную сумму а[1] - а[2] + а[3] - а[4] + ...

условный оператор и операцию возведения в степень не использовать.

206. В массиве хранится информация о годе рождения каждого из 30 человек. Опре-

делить, на сколько лет возраст самого "старого" человека превышает возраст са-

мого "молодого". При определении возраста учитывать только год рождениях

(месяц и день не учитывать).

207. В массиве хранится информация о количестве осадков, выпавших за каждый

день июля. Определить дату самого дождливого дня. Если таких дней было не-

сколько, то должна быть найдена дата первого из них и последнего из них.

208. В массиве хранится информация о максимальной скорости каждой из 40 марок

легковых автомобилей. Определить порядковый номер самого быстрого автомо-

биля. Если таких автомобилей несколько, то должен быть найден номер первого

и последнего из них.

209. В массиве хранится информация о результатах 25 спортсменов, участвовавших

в лыжной гонке. Определить результат спортсмена – победителя гонки.

210. В массиве хранится информация о росте 25 человек. Определить, на сколько

рост самого высокого человека превышает рост самого низкого.

211. В массиве хранится информация о сопротивлении каждого из 20 элементов

электрической цепи. Все элементы соединены последовательно. Определить об-

щее сопротивление цепи.

212. В массиве хранится информация о сопротивлении каждого из 20 элементов

электрической цепи, Все элементы соединены параллельно. Определить общее

сопротивление цепи.

213. В массиве хранится информация о стоимости 1 килограмма 20 видов конфет.

Определить, сколько стоят самые дешевые конфеты.

214. В массиве хранится информация о стоимости каждой из 50 марок легковых ав-

томобилей. Определить, сколько стоит самый дорогой автомобиль.

215. В массиве хранится информация о численности книг в каждом из 35 разделов

библиотеки. Выяснить, верно ли, что общее число книг в библиотеке есть шести-

значное число.

216. В массиве хранится информация о численности учеников в каждом из 42 клас-

сов школы. Выяснить, верно ли, что общее число учеников в школе есть четы-

рехзначное число.

217. В начале массива записано несколько равных между собой элементов. Опреде-

лить количество таких элементов и вывести все элементы, следующие за пос-

ледним из них, условный оператор не использовать.

218. В одномерном массиве с четным количеством элементов (2N) находятся коор-

динаты N точек плоскости. Они располагаются в следующем порядке: x1, x2, x3,

x4 и т.д. Определить номера точек, которые могут являться вершинами квадрата.

98

219. В одномерном массиве с четным количеством элементов (2N) находятся коор-

динаты N точек плоскости. Они располагаются в следующем порядке: x1, x2, x3,

x4 и т.д.. Определить номера самых удаленных точек и номера наименее удален-

ных точек.

220. Возвести в квадрат отрицательные элементы массива C[1..N].

221. Вычислить разность средних арифметических положительных и отрицательных

элементов массива C[1..N].

222. Вычислить сумму последних отрицательных элементов в массиве А [1..10].

223. Вычислить сумму последних положительных элементов в массиве А [1..10].

224. Дан массив из 20 элементов. Найти пять "соседних" элементов, сумма значений

которых максимальна.

225. Дан массив целых чисел. Выяснить, верно ли, что сумма квадратов элементов

массива есть пятизначное число.

226. Дан массив целых чисел. Выяснить, верно ли, что сумма элементов массива

есть четное число.

227. Дан массив целых чисел. Нечетные элементы уменьшить на т, а элементы с

нечетными номерами увеличить на n.

228. Дан массив целых чисел. Определить количество четных элементов и количе-

ство элементов, оканчивающихся на цифру 5.

229. Дан массив. Переписать его положительные элементы во второй массив, а ос-

тальные – в третий. Во втором и третьем массивах значения элементов первого

массива должны быть записаны: а) на тех же местах, что в исходном массиве; б)

подряд с начала массива.

230. Дан массив. Переписать его элементы в другой массив такого же размера сле-

дующим образом: сначала должны идти все отрицательные элементы, а затем все

остальные. Использовать только один проход по исходному массиву.

231. Дан массив. Сравнить первый и второй элементы массива. Если второй элемент

меньше первого, то поменять их местами. Затем то же самое сделать со вторым и

третьим, ... предпоследним и последним элементами. Какое число окажется в ре-

зультате в последнем элементе массива?

232. Дано натуральное число n (n <= 999999). Заполнить массив его цифрами, рас-

положенными в обратном порядке (первый элемент равен последней цифре, вто-

рой – предпоследней и т.д.). Незаполненные элементы массива должны быть

равны нулю. Элементы массива, являющиеся цифрами числа п, вывести на эк-

ран.

233. Дано натуральное число n. Определить количество различных цифр в нем. На-

пример, в числе 1234 количество различных цифр равно 4, в числе 22 424 – 2, в

числе 333 – 1.

234. Заменить нулями отрицательные элементы массива C[1..N].

235. Заполнить массив двадцатью первыми натуральными числами, делящимися на-

цело на 13 или на 17 и находящимися в интервале, левая граница которого равна

300.

236. Заполнить массив тридцатью первыми простыми числами (простым называется

Задачи для самостоятельного выполнения. Одномерные массивы

99

натуральное число, большее 1, не имеющее других делителей кроме единицы и

самого себя).

237. Известны оценки, выставленные восемью судьями одному из участников со-

ревнований. Составить программу для расчета оценки, которая пойдет в зачет

этому спортсмену.

238. Изменить знак у максимального по модулю элемента массива. Минимальный

элемент массива при этом не определять.

239. На плоскости даны 20 точек (x1/y1), (х2, y2), ..., (х20, y20). Рассмотрим прямо-

угольники, содержащие эти точки, причем стороны прямоугольников параллель-

ны координатным осям. Возьмем наименьший из них. Определить координаты

противоположных углов такого прямоугольника – левого нижнего и правого

верхнего.

240. Найти количество различных элементов в массиве.

241. Найти скалярное произведение всех элементов массивов A(N), B(N) с нечетны-

ми индексами и скалярное произведение элементов двух массивов A(N), B(N) c

четными индексами. Сформировать новый массив, поменяв местами четные и

нечетные индексы.

242. Определить количество положительных и количество отрицательных элемен-

тов массива.

243. Оценки, полученные спортсменом в соревнованиях по фигурному катанию (в

баллах), хранятся в массиве из 18 элементов. В первых шести элементах записа-

ны оценки по обязательной программе, седьмом-двенадцатом – по короткой про-

грамме, в остальных – по произвольной программе. Выяснить, по какому виду

программы спортсмен показал лучший результат.

244. При выборе места строительства жилого комплекса при металлургическом

комбинате необходимо учитывать "розу ветров" (следует расположить жилой

комплекс так, чтобы частота ветра со стороны металлургического комбината бы-

ла бы минимальной). Для этого в течение года проводилась регистрация направ-

ления ветра в районе строительства. Данные представлены в виде массива, в ко-

тором направление ветра за каждый день кодируется следующим образом: 1 –

северный, 2 – южный, 3 – восточный, 4 – западный, 5 – северо-западный, 6 – се-

веро-восточный, 7 – юго-западный, 8 – юго-восточный. Определить, как должен

быть расположен жилой комплекс по отношению к комбинату.

245. Проверить, упорядочен ли массив А [1..10] по возрастанию.

246. Проверить, упорядочен ли массив А [1..10] по убыванию.

247. Разработайте алгоритм для вычисления разности средних арифметических по-

ложительных и отрицательных значений элементов массива.

248. Упорядочить массив А [1..10] по возрастанию.

249. Упорядочить массив А [1..10] по убыванию.

100

Двумерные массивы

Уровень А

1. Разработайте алгоритм для ввода действительных значений элементов двумер-

ного массива, содержащего 10 строк и 10 столбцов.

2. Разработайте алгоритм для ввода целых значений элементов двумерного масси-

ва, содержащего 5 строк и 10 столбцов.

3. Разработайте алгоритм для отыскания элемента двумерного массива А[1..3, 1..4],

имеющего наибольшее значение.

4. Разработайте алгоритм для отыскания элемента двумерного массива А[1..3, 1..4],

имеющего наименьшее значение.

5. Разработайте алгоритм для отыскания индексов элемента двумерного массива

А[1..5, 1..10], имеющего наибольшее значение.

6. Разработайте алгоритм для отыскания индексов элемента двумерного массива

А[1..5, 1..5], имеющего наименьшее значение.

7. Дан двумерного массив действительных чисел с количеством элементов В[1..N,

1.. N]. Подсчитать, сколько в нем отрицательных чисел.

8. Дан двумерного массив действительных чисел с количеством элементов В[1..N,

1.. N]. Подсчитать, сколько в нем положительных чисел.

9. Дан двумерного массив действительных чисел с количеством элементов В[1..N,

1.. N]. Подсчитать, сколько в нем нулей.

10. Разработать алгоритм, который проверяет, принадлежит ли введенный элемент

двумерному массиву.

11. Дан двумерный массив целых чисел. Найти сумму элементов всего массива.

12. Дан двумерный массив целых чисел. Найти сумму элементов в каждой строке.

13. Дан двумерный массив целых чисел. Найти сумму элементов в каждом столбце.

14. Дан двумерный массив целых чисел. Найти сумму элементов в двух главных диаго-

налях.

15. В больнице п палат по т коек в каждой. Подсчитать для данной палаты, сколько

человек имеет температуру выше 37°.

16. Дан двумерный массив. Вывести на экран элемент, расположенный в правом

верхнем углу массива.

17. Дан двумерный массив. Вывести на экран элемент, расположенный в левом

нижнем углу массива.

18. Дан двухмерный массив. Разработать алгоритм вывода на экран любого элемента

второй строки массива;

19. Дан двухмерный массив. Разработать алгоритм вывода на экран любого элемента

третьего столбца массива;

20. Дан двухмерный массив. Разработать алгоритм вывода на экран любого элемента

массива.

21. Дан двухмерный массив. Найти сумму элементов, расположенных в верхнем ле-

вом и нижнем правом углах.

Задачи для самостоятельного выполнения. Двумерные массивы

101

22. Дан двухмерный массив. Найти сумму элементов, расположенных в верхнем

правом и нижнем левом углах.

23. Дан двухмерный массив. Найти среднее арифметическое элементов, располо-

женных в четырех углах.

24. Дан двухмерный массив. Поменять местами элементы, расположенные в верх-

нем правом и нижнем левом углах.

25. Дан двухмерный массив. Поменять местами элементы, расположенные в нижнем

правом и верхнем левом углах.

26. Разработать алгоритм расчета суммы двух любых элементов двухмерного масси-

ва.

27. Разработать алгоритм расчета среднего арифметического трех любых элементов

двухмерного массива.

28. Разработать алгоритм, который меняет местами два любых элемента двухмерно-

го массива.

29. Определить, какой элемент двухмерного массива меньше: расположенный в

верхнем правом или в нижнем левом углах.

30. Определить, какой элемент двухмерного массива больше: расположенный в

верхнем левом или в нижнем правом углах.

31. Разработать алгоритм сравнения по абсолютной величине элемента, рас-

положенного в верхнем правом углу двухмерного массива, с элементом массива

заданным пользователем (определить, какая из абсолютных величин больше).

32. Разработать алгоритм сравнения двух любых элементов массива (определить,

какой из них меньше).

33. Дан двухмерный массив целых чисел. Выяснить, имеются ли четные числа в

верхнем левом или в нижнем левом углах.

34. Дан двухмерный массив целых чисел. Выяснить, имеются ли числа, оканчиваю-

щиеся нулем, в верхнем правом или в нижнем правом углах.

35. Заменить значения всех элементов главной диагонали массива на нулевые.

36. Заменить значения всех элементов побочной диагонали массива на значения,

равные 100.

37. Определить сумму элементов главной диагонали массива.

38. Определить сумму элементов побочной диагонали массива.

39. Определить среднее арифметическое элементов главной диагонали массива.

40. Определить среднее арифметическое элементов побочной диагонали массива.

41. Разработать программу расчета суммы двух любых элементов главной диагонали

массива.

42. Разработать программу расчета произведения двух любых элементов побочной

диагонали массива.

43. Разработать программу, которая меняет местами два любых элемента главной

диагонали массива.

44. Разработать программу, которая меняет местами два любых элемента побочной

диагонали массива.

45. Верно ли, что сумма элементов главной диагонали массива не превышает 100?

102

46. В массиве записаны целые числа. Определить число четных элементов главной

диагонали массива.

47. Определить минимальный элемент главной диагонали массива.

48. Определить максимальный элемент главной диагонали массива.

49. Определить минимальный элемент побочной диагонали массива.

50. Определить максимальный элемент побочной диагонали массива.

51. Определить координаты первого максимального элемента главной диагонали

массива.

52. Определить координаты первого минимального элемента главной диагонали

массива.

53. Определить координаты первого максимального элемента побочной диагонали

массива.

54. Определить координаты первого минимального элемента побочной диагонали

массива.

55. Дан двухмерный массив. Вывести на экран все элементы пятой строки массива.

56. Дан двухмерный массив. Вывести на экран все элементы третьей строки масси-

ва, начиная с последнего элемента этой строки.

57. Дан двухмерный массив. Вывести на экран все элементы s-го столбца массива.

58. Дан двухмерный массив. Вывести на экран все элементы k-гo столбца массива

начиная с нижнего элемента этого столбца.

59. Дан двухмерный массив. Вывести на экран все элементы второго столбца масси-

ва.

60. Дан двухмерный массив. Вывести на экран все элементы пятой строки массива

начиная с последнего элемента этой строки.

61. Дан двухмерный массив. Вывести на экран все элементы m-й строки массива.

62. Дан двухмерный массив. Вывести на экран все элементы n-го столбца массива

начиная с нижнего элемента этого столбца.

63. Дан двухмерный массив. Заменить значения всех элементов второй строки мас-

сива на число 5.

64. Дан двухмерный массив. Заменить значения всех элементов пятого столбца мас-

сива на число 10.

65. Дан двухмерный массив. Заменить значения всех элементов третьего столбца

массива на число -12.

66. Дан двухмерный массив. Заменить значения всех элементов четвертой строки

массива на число 4.

67. Разработать программу, которая проводит замену всех элементов некоторой

строки двухмерного массива на заданное число.

68. Разработать программу, которая проводит замену всех элементов некоторого

столбца двухмерного массива на заданное число.

69. Дан двухмерный массив. Определить произведение элементов третьей строки.

70. Дан двухмерный массив. Определить сумму квадратов элементов k-й строки

массива.

71. Дана действительная матрица размером N N. Вывести i-строку.

Задачи для самостоятельного выполнения. Двумерные массивы

103

72. Дана действительная матрица размером N N. Вывести j-столбец.

73. В квадратной целочисленной матрице найти максимальный и минимальный эле-

менты на ее главной диагонали.

74. В квадратной целочисленной матрице найти максимальный и минимальный эле-

менты на ее побочной диагонали.

75. Дан двухмерный массив целых чисел. Сформировать новый массив, элементами

которого являются индексы первого, соответствующие элементам, равным квад-

рату некоторого целого числа m.

76. Задан двухмерный массив целых чисел. Преобразовать массив, заменив 0 эле-

менты, которые равны минимальному из элементов массива.

77. Дан двухмерный массив целых чисел. Определить те элементы, которые равны

минимальному, индексы этих элементов вывести.

78. Дан двухмерный массив целых чисел. Определить те элементы, которые равны

максимальному, индексы этих элементов вывести.

79. Разработать алгоритм, который проверяет, принадлежит ли введенный элемент

двумерному массиву.

80. Разработать алгоритм, который подсчитывает количество элементов больших

введенного значения.

Уровень В

81. Написать функцию, которая проверяет, принадлежит ли заданный элемент неко-

торому одномерному массиву. С помощью этой функции определить, принадле-

жит ли каждый элемент матрицы заданному одномерному массиву.

82. Написать функцию, которая проверяет, принадлежит ли заданный элемент неко-

торому одномерному массиву. С помощью этой функции определить, принадле-

жит ли каждый элемент матрицы заданному одномерному массиву.

83. Задан массив целых чисел. Сжать массив, выбросив элементы, которые равны

минимальному из элементов массива.

84. В квадратной целочисленной матрице найти максимальный и минимальный эле-

менты.

85. В массиве записаны целые числа. Верно ли, что сумма элементов побочной диа-

гонали массива оканчивается цифрой "0"?

86. Дана действительная квадратная матрица порядка N. Найти наибольший по мо-

дулю элемент в каждой четной строке, среди этих элементов определить max.

87. Дана действительная квадратная матрица порядка N. Найти наименьший по мо-

дулю элемент в каждом четном столбце, среди них определить min.

88. Дана действительная матрица размером N N. Требуется преобразовать матрицу,

разделив элементы k строки на диагональный элемент, расположенный в этой

строке.

89. Даны 3 вещественные квадратные матрицы размером 4 4. Вывести на печать ту

из них, норма которая является наименьшей. За норму принимают максимум аб-

солютных значений ее элементов.

104

90. Дана вещественная матрица размером 7 7, все элементы которой различны.

Найти скалярное произведение строки, в которой находится наибольший эле-

мент матрицы, на столбец с наименьшим элементом.

91. Разработать программу, которая изменяет значения всех элементов некоторой

строки двухмерного массива на числа заданной последовательности (последова-

тельность вводится с клавиатуры и в дополнительный одномерный массив не за-

писывается).

92. Разработать программу, которая изменяет значения всех элементов некоторого

столбца двухмерного массива на числа заданной последовательности (последо-

вательность вводится с клавиатуры и в дополнительный одномерный массив не

записывается).

93. Дан массив целых чисел. Определить те элементы, которые равны минимально-

му (min) и максимальному (max) элементам. Индексы этих элементов вывести.

94. Для целочисленной квадратной матрицы найти число элементов, кратных вве-

денному числу и определить максимальный результат.

95. Дана действительная матрица размером N N. Требуется преобразовать матрицу,

разделив элементы k столбца на диагональный элемент, расположенный в этом

столбце.

96. Дана действительная квадратная матрица порядка N. Найти наибольший по мо-

дулю элемент и получить матрицу размерностью N-1, отбросив строку и столбец

с этим элементом.

97. Проверить, принадлежит ли каждый элемент введенного одномерного массива

матрице, сформированной из случайных чисел.

98. В квадратной целочисленной матрице найти максимальный и минимальный эле-

менты, вывести их значения и индексы.

99. Дан двумерный массив, вывести на экран любую указанную строку.

100. Дан двумерный массив, вывести на экран любой указанный столбец.

101. В массиве записаны целые числа. Определить сумму элементов главной диаго-

нали массива, больших 20.

102. В массиве записаны целые числа. Определить сумму элементов побочной диа-

гонали массива, кратных четырем.

103. В массиве записаны целые числа. Определить количество элементов побочной

диагонали массива, равных пяти.

104. В массиве записаны целые числа. Определить произведение элементов побоч-

ной диагонали массива, меньших 10.

105. В массиве записаны целые числа. Определить сумму элементов главной диаго-

нали массива, оканчивающихся цифрой "7".

106. В массиве записаны целые числа. Определить количество нулевых элементов

главной диагонали массива.

107. В массиве записаны целые числа. Определить число нечетных элементов по-

бочной диагонали массива.

Задачи для самостоятельного выполнения. Двумерные массивы

105

108. Дана действительная квадратная матрица порядка N. Найти наибольший по мо-

дулю элемент и получить матрицу размерностью N-1, отбросив строку и столбец

с этим элементом.

В задачах 109 - 118 определить сумму элементов двумерного массива в заштрихован-

ной области.

109.

110.

111.

112.

113.

114.

115.

116.

117.

118.

В задачах 119 - 128 сформировать двумерный массив размером п х п, по заданному об-

разцу (в выделенной области элементы – нули):

119.

120.

121.

122.

106

123.

124.

125.

126.

127.

128.

129. Вычислить сумму и число положительных элементов матрицы а[п, n], находя-

щихся над главной диагональю.

130. Для группы учащихся известны их годовые оценки по следующим предметам:

математика, физика, химия, информатика. Отобрать кандидатов на олимпиады (с

отличными оценками) по каждому предмету.

131. Дан двумерный массив размером п*п. В каждой строке найти минимальный эле-

мент. Затем из них выбрать минимальный элемент и указать, в какой строке он

находится.

132. Дан двумерный массив размером т*п. Найти сумму произведений элементов

каждого столбца.

133. В произвольном двумерном массиве определить и вывести на экран номер

столбца, содержащего наибольшее количество отрицательных элементов.

134. В произвольном двумерном массиве определить и вывести среднее арифметиче-

ское среди элементов той строки, которая содержит наибольшую разность мак-

симального и минимального элементов. Минимальное и максимальное находят-

ся для каждой строки. Для группы фирм известен курс акций за каждый из п ме-

сяцев. Составить список тех фирм, курс акций которых все время повышается.

Список вывести в алфавитном порядке.

135. Дан двумерный массив размером m*n, отсортировать каждую четную строку по

возрастанию, нечетную по убыванию.

136. Дан двумерный массив размером т*п. Отсортировать элементы столбцов по

убыванию.

137. Дан двумерный массив размером т*п. Отсортировать все элементы массива по

возрастанию (в левом верхнем углу – минимальный элемент, в правом нижнем –

максимальный).

138. Выступления п спортсменов оцениваются т судьями по одной и той же число-

Задачи для самостоятельного выполнения. Двумерные массивы

107

вой шкале. Нужно узнать конечный результат каждого спортсмена, если он вы-

числяется так: из всех оценок удаляется максимальная и минимальная оценки

(если таких несколько, то удаляется одна), затем из оставшихся (m-2) находится

среднее арифметическое.

139. В произвольном двумерном массиве отсортировать по возрастанию ту строку, в

которой расположен наибольший элемент (первый, если их несколько), а затем

отсортировать по убыванию тот столбец, в котором расположен наименьший

элемент (последний, если их несколько).

140. Даны два двумерных массива размером n * n. Сформировать третий массив, за-

писав в него все нечетные строки – нечётные строки из первого, четные строки –

четные строки из второго.

141. В произвольном двумерном массиве отсортировать по возрастанию элементы

того столбца, который содержит наибольшее количество элементов, значения

которых меньше среднего арифметического. Среднее арифметическое вычисля-

ется для каждого столбца.

142. Дана квадратная матрица. Переставить строку с максимальным элементом на

главной диагонали со строкой с заданным номером t.

143. Дан двумерный массив размером m*n, удалить столбец А.

144. Дан двумерный массив размером m*n, удалить k-ю строку.

145. В произвольный двумерный массив вставить строку и столбец нулей на k-е ме-

сто.

146. Вставить 1-ю строку после строки в которой находится 1-й max элемент/

147. Вставить перед столбцом, в котором все элементы положительные второй стол-

бец.

148. Вставить нулевую строку перед строкой и столбцом, где находится 1-й min эле-

мент.

149. Удалить столбцы, в которых находятся 1-й min элемент.

150. Удалить строку с номером k и столбец с номером L.

151. Удалить все строки и столбцы, на пересечении которых стоят отрицательные

элементы.

152. В массиве n*n переставить строки по правилу: 1-ю с последней, 2-ю с предпо-

следней и т.д.

153. В массиве n*n переставить столбцы по правилу: n, n-1, n-2 ….(4, 3, 2, 1).

154. Даны два двумерных массива размером m*n. Сформировать массив, заполнив

его нечетные строки нечетными строками из первого, а четные строки – четны-

ми строками из второго.

155. Вывести на экран (в одну строку) все элементы главной диагонали массива на-

чиная с элемента, расположенного в правом нижнем углу.

156. Вывести на экран (в одну строку) все элементы главной диагонали массива на-

чиная с элемента, расположенного в левом верхнем углу.

157. Дан двухмерный массив. Выяснить, является ли сумма элементов четвертой

строки массива двузначным числом.

108

158. Дан двухмерный массив. Разработать программу, определяющую, верно ли, что

произведение элементов столбца массива с известным номером не превышает

заданного числа.

159. Дан двухмерный массив. Разработать программу, определяющую, верно ли, что

сумма элементов строки массива с известным номером превышает заданное чис-

ло.

160. Дан двухмерный массив. Выяснить, является ли произведение элементов вто-

рого столбца массива трехзначным числом.

161. Дан двухмерный массив. Определить сумму квадратов элементов s-го столбца

массива.

162. Для целочисленной квадратной матрицы найти число элементов, кратных неко-

торому введенному числу, и определить максимальный результат.

163. Дана действительная матрица размером N N. Требуется преобразовать матрицу,

разделив элементы k столбца на диагональный элемент, расположенный в этом

столбце.

164. Даны 2 квадратных матрицы размерностью 5. Поменять местами соответствую-

щие элементы матриц, находящиеся над главной диагональю. Полученные мат-

рицы перемножить.

165. Дана действительная квадратная матрица порядка N. Найти наибольший по мо-

дулю элемент в каждой четной строке, среди этих элементов определить max,

потом – наименьший в каждом четном столбце, среди них min.

166. Дана действительная матрица размером N N. Требуется преобразовать матрицу,

разделив элементы k строки на диагональный элемент, расположенный в этой

строке.

167. Написать программу, которая реализует повороты квадратных матриц на задан-

ный угол (90, 180, 270,… ).

168. Написать программу, которая выполняет поворот матрицы вокруг главной диа-

гонали и вокруг побочной диагонали.

169. Заменить все элементы k-й строки и s-го столбца двухмерного массива на про-

тивоположные по знаку (элемент, стоящий на пересечении, не изменять).

170. Дан двумерный массив размером т*п. Найти максимальную сумму к элементов.

Уровень С

171. Разработайте алгоритм для вычисления разности средних арифметических поло-

жительных и отрицательных значений элементов массива.

172. В квадратной целочисленной матрице найти максимальный и минимальный эле-

менты на ее главной и побочной диагонали и найти скалярное произведение

строк, в которых эти элементы находятся.

173. Даны 2 квадратных матрицы размерностью 5. Поменять местами соответствую-

щие элементы матриц, находящиеся над главной диагональю. Полученные мат-

рицы перемножить.

Задачи для самостоятельного выполнения. Двумерные массивы

109

174. Дано 3 одномерных массива A, B, C размерностью 9. Выбрать из них элементы с

индексами a1, a4, a7 и образовать первую строку квадратной матрицы A1 раз-

мерностью (3 3), затем вторую строку из элементов b1, b2, b7 и т.д. Матрицу

В1 образовать из элементов a2, a5, а8 и т.д. Аналогично сформировать матрицу

С1. Найти произведение полученных матриц.

175. В квадратной целочисленной матрице найти максимальный и минимальный эле-

менты, найти их максимум и поменять местами с элементом, стоящим на пересе-

чении диагоналей.

176. Определить, является ли данный двумерный массив целых чисел размером п*п ма-

гическим квадратом, т.е. таким, в котором суммы элементов во всех строках, столб-

цах и каждой из двух больших диагоналей равны между собой.

177. Построить магический квадрат порядка п, составленный из чисел 1, 2, ..., n2, раз-

мером п*п.

178. Разработать алгоритм, который заполняет двумерный массив числами 1, 2, 3, ...,

п2, записывая их в него "по спирали". n вводят с клавиатуры.

179. Определить к - количество "особых" элементов в двумерном массиве А, считая эле-

мент "особым", если он больше суммы остальных элементов столбца.

180. Определить к - количество "особых" элементов в двумерном массиве А, считая эле-

мент "особым", если в его строке слева от него находятся элементы, меньшие его,

а справа – большие.

181. Дан массив В[n, m]. Найти в каждой строке максимальный и минимальный элементы

и поменять их с первым и последним элементом строки соответственно.

182. В произвольном двумерном массиве найти и вывести максимальное значение в той

строке, которая содержит наибольшее минимальное значение (первое, если их

несколько). Минимальные значения определяются для каждой строки массива.

183. Элемент матрицы назовем седловой точкой, если он является наименьшим в сво-

ей строке и одновременно наибольшим в своем столбце или, наоборот, является

наибольшим в своей строке и наименьшим в своем столбце. Для заданной целой

матрицы размером т*п напечатать индексы всех ее седловых точек.

184. Дан вещественный массив размером т*п. Переставляя его строки и столбцы, до-

биться того, чтобы наибольший элемент (один из них) оказался в верхнем левом уг-

лу.

185. Определить, является ли заданный целый квадратный массив п-го порядка сим-

метричным (относительно главной диагонали).

186. Задан массив размером т*п. Найти максимальный по модулю элемент массива.

Переставить строки и столбцы массива так, чтобы максимальный по модулю эле-

мент был расположен на пересечении k-й строки и k-го столбца.

187. Дан двумерный массив размером m*n, удалить строку и столбец, на пересечении ко-

торых стоит ноль.

188. Дан двумерный массив размером т*п и одномерный массив размером z элемен-

тов. Вставить в двумерный массив k-ую строку, записав в нее элементы одномер-

ного массива.

110

189. Дан двумерный массив размером т*п. Определить номера тех строк, которые

совпадают с одномерным массивом размером п элементов.

190. В двухмерном массиве хранится информация о баллах, полученных спортсмена-

ми-пятиборцами в каждом из пяти видов спорта (в первой строке – информация

о баллах первого спортсмена, во второй – второго и т.д.). Общее число спорт-

сменов равно 20. Определить общую сумму баллов, набранных третьим спорт-

сменом.

191. В зрительном зале 25 рядов, в каждом из которых 36 мест (кресел). Информация

о проданных билетах хранится в двухмерном массиве, номера строк которого

соответствуют номерам рядов, а номера столбцов – номерам мест. Если билет на

то или иное место продан, то соответствующий элемент массива имеет значение

1, в противном случае – 0. Разработать программу, определяющую число про-

данных билетов на места в 12-м ряду.

192. Дана действительная квадратная матрица порядка N. Найти наибольший по мо-

дулю элемент и получить матрицу размерностью N-1, отбросив строку и столбец

с этим элементом.

193. Фирма имеет 10 магазинов. Информация о доходе каждого магазина за каждый

месяц года хранится в двухмерном массиве (в первом столбце за январь, во вто-

ром – за февраль и т.д). Верно ли, что общий доход фирмы в сентябре превысил

некоторое заданное число?

194. В поезде 18 вагонов, в каждом из которых 36 мест. Информация о проданных на

поезд билетах хранится в двухмерном массиве, номера строк которых соответ-

ствуют номерам вагонов, а номера столбцов – номерам мест. Если билет на то

или иное место продан, то соответствующий элемент массива имеет значение 1,

в противном случае – 0. Разработать программу, определяющую, имеются ли

свободные места в том или ином вагоне поезда.

195. В зрительном зале 23 ряда, в каждом из которых 40 мест (кресел). Информация о

проданных билетах хранится в двухмерном массиве, номера строк которых соот-

ветствуют номерам рядов, а номера столбцов – номерам мест. Если билет на то

или иное место продан, то соответствующий элемент массива имеет значение 1,

в противном случае – 0. Определить, имеются ли свободные места в первом ря-

ду.

196. Фирма имеет 10 магазинов. Информация о доходе каждого магазина за каждый

месяц года хранится в двухмерном массиве (в первом столбце за январь, во вто-

ром – за февраль и т.д). Верно ли, что общий доход фирмы в сентябре превысил

некоторое заданное число?

197. В двухмерном массиве хранится информация о зарплате 18 человек за каждый

месяц года (в первом столбце – зарплата за январь, во втором – за февраль и т.д.).

Разработать программу для расчета средней зарплаты за любой месяц.

198. Информация о количестве жильцов в каждой из четырех квартир каждого этажа

12-этажного дома хранится в двухмерном массиве (в первой строке – ин-

Задачи для самостоятельного выполнения. Двумерные массивы

111

формация о квартирах первого этажа, во второй – второго и т.д.). На каком этаже

проживает больше людей: на третьем или на пятом?

199. Лабиринт Минотавра. Введите массив 21 х 21, состоящий из 0 и 1 (0 – не путь, 1

– путь). Напишите программу, которая читает массив и находит выход из лаби-

ринта. Минотавр начинает двигаться «из центра» массива; он может переме-

щаться в любую смежную «клетку», если в ней 1, ноль блокирует путь. После

того, как выход найден, выведите массив, отмечая путь крестиком. Покажите

только правильный путь.

200. «Остров» (массив) размером 20 20 заселен дикими кроликами, волками и вол-

чицами. Каждого вида по несколько представителей. Кролики довольно глупы: в

каждый момент времени с одинаковой вероятностью 1/9 они передвигаются в

один из 8 соседних квадратов (за исключением участков, ограниченных берего-

вой линией) или просто сидят неподвижно. Каждый кролик с вероятностью 0,2

превращается в 2 кроликов. Каждая волчица передвигается случайным образом,

пока в одном из 8 соседних квадратов не окажется кролик, за которым она охо-

тится. Если волчица и кролик оказываются в одном квадрате, волчица съедает

кролика и получает одно очко. В противном случае она теряет 0.1 очка. Волки и

волчицы с нулевым количеством очков умирают. Волк ведет себя подобно вол-

чице до тех пор, пока поблизости не исчезнут все кролики; тогда, если волчица

находится в одном из восьми ближайших квадратов, волк гонится за ней. Если

волк и волчица окажутся в одном квадрате и там нет кролика, которого нужно

съесть, они производят потомство случайного пола. Запрограммируйте эту эко-

логическую модель, понаблюдайте за моделью в течение некоторого времени.

112

Варианты индивидуальных заданий

Приведенные ниже наборы заданий рекомендуется использовать совместно с

интегрированной системой «Конструктор схем алгоритмов» («Schemes»), разработан-

ной в ВЦ ЦНТО ПГНИУ.

Набор 1

Массивы Одномерные Двумерные

Уровень А В С А В С

Вариант 1 33 86 104 22 87 95

Вариант 2 6 77 116 14 68 101

Вариант 3 43 85 105 50 56 100

Вариант 4 10 81 112 28 86 98

Вариант 5 1 66 115 42 78 93

Вариант 6 2 94 111 24 73 97

Вариант 7 52 61 101 33 51 102

Вариант 8 26 64 102 18 52 105

Вариант 9 46 65 119 10 75 107

Вариант 10 8 76 108 45 81 110

Вариант 11 58 80 106 39 72 106

Вариант 12 18 97 109 32 77 99

Вариант 13 36 70 114 48 76 104

Вариант 14 55 78 118 31 89 103

Вариант 15 42 73 107 26 90 109

Вариант 16 51 99 110 29 61 96

Вариант 17 4 75 117 40 66 91

Вариант 18 16 79 103 6 83 108

Вариант 19 20 98 113 30 54 92

Вариант 20 30 62 120 20 58 94

Набор 2

Массивы Одномерные Двумерные

Уровень А В С А В С

Вариант 1 20 87 108 21 62 91

Вариант 2 10 62 111 34 72 103

Вариант 3 3 69 116 38 55 120

Вариант 4 4 66 119 3 73 104

Вариант 5 46 72 104 2 88 97

Вариант 6 39 70 105 39 78 93

Вариант 7 51 61 109 33 61 96

113

Массивы Одномерные Двумерные

Уровень А В С А В С

Вариант 8 44 98 115 11 58 102

Вариант 9 18 73 101 50 68 109

Вариант 10 21 63 117 49 51 107

Вариант 11 58 65 112 6 56 110

Вариант 12 56 99 120 14 74 119

Вариант 13 52 67 110 30 60 98

Вариант 14 50 78 107 44 54 106

Вариант 15 45 84 106 1 65 108

Вариант 16 47 85 118 16 59 92

Вариант 17 34 71 114 43 53 101

Вариант 18 54 64 103 5 87 95

Вариант 19 35 91 102 42 84 105

Вариант 20 38 68 113 27 89 94

Набор 3

Массивы Одномерные Двумерные

Уровень А В С А В С

Вариант 1 15 91 119 50 88 93

Вариант 2 11 85 113 23 51 116

Вариант 3 60 70 108 25 65 92

Вариант 4 14 65 112 40 63 99

Вариант 5 56 88 118 37 78 107

Вариант 6 23 80 103 43 86 110

Вариант 7 27 72 102 45 60 97

Вариант 8 20 84 109 41 89 106

Вариант 9 29 86 120 48 56 104

Вариант 10 31 81 117 39 73 108

Вариант 11 37 87 105 24 67 115

Вариант 12 6 79 101 32 74 101

Вариант 13 13 92 107 16 52 96

Вариант 14 34 96 106 34 87 102

Вариант 15 40 89 114 9 54 103

Вариант 16 21 75 111 8 77 105

Вариант 17 18 74 116 42 69 94

Вариант 18 38 99 104 47 64 100

Вариант 19 42 71 110 14 66 109

Вариант 20 7 100 115 46 90 98

114

Набор 4

Массивы Одномерные Двумерные

Уровень А В С А В С

Вариант 1 18 100 117 19 85 104

Вариант 2 11 62 112 14 69 102

Вариант 3 13 73 110 4 75 108

Вариант 4 43 92 113 11 54 91

Вариант 5 15 61 118 30 51 100

Вариант 6 34 86 106 40 63 99

Вариант 7 35 97 107 9 53 106

Вариант 8 29 64 111 25 55 98

Вариант 9 38 91 119 8 88 107

Вариант 10 17 90 103 2 82 92

Вариант 11 44 74 101 24 87 101

Вариант 12 40 96 116 1 67 96

Вариант 13 41 93 115 13 71 113

Вариант 14 14 84 105 10 72 94

Вариант 15 1 63 104 29 79 105

Вариант 16 33 89 102 6 68 93

Вариант 17 31 66 114 28 60 97

Вариант 18 48 65 108 12 65 95

Вариант 19 3 99 120 34 70 110

Вариант 20 56 88 109 20 80 109

Набор 5

Массивы Одномерные Двумерные

Уровень А В С А В С

Вариант 1 41 89 115 20 51 93

Вариант 2 51 73 104 37 89 102

Вариант 3 38 71 101 49 80 100

Вариант 4 14 92 102 1 56 109

Вариант 5 13 91 112 9 88 104

Вариант 6 10 90 114 25 70 106

Вариант 7 5 67 111 42 79 110

Вариант 8 6 85 113 47 72 103

Вариант 9 47 65 119 2 54 95

Вариант 10 8 78 116 34 90 94

Вариант 11 46 79 117 44 86 91

Вариант 12 16 69 108 4 73 101

Вариант 13 49 87 110 36 71 108

115

Массивы Одномерные Двумерные

Уровень А В С А В С

Вариант 14 12 99 107 24 69 92

Вариант 15 28 66 109 30 67 105

Вариант 16 25 98 120 8 53 99

Вариант 17 3 88 118 18 81 97

Вариант 18 50 75 105 3 74 98

Вариант 19 20 68 103 29 65 96

Вариант 20 7 86 106 14 52 107

Набор 6

Массивы Одномерные Двумерные

Уровень А В С А В С

Вариант 1 25 71 103 3 68 107

Вариант 2 57 68 104 27 87 108

Вариант 3 12 85 108 21 63 109

Вариант 4 37 81 107 4 65 105

Вариант 5 20 93 117 2 51 98

Вариант 6 23 91 112 26 77 91

Вариант 7 22 87 120 11 67 92

Вариант 8 1 61 106 15 62 104

Вариант 9 4 63 115 16 53 97

Вариант 10 15 89 109 37 89 93

Вариант 11 41 73 101 31 64 99

Вариант 12 28 78 102 17 78 100

Вариант 13 14 98 118 39 72 94

Вариант 14 19 100 114 23 73 101

Вариант 15 17 99 110 5 83 102

Вариант 16 8 84 111 19 85 106

Вариант 17 19 80 116 7 80 96

Вариант 18 16 82 119 41 56 103

Вариант 19 7 70 105 44 76 95

Вариант 20 18 95 113 1 75 110

116

Тематическое планирование

Учитывая сложность изучаемого материала и время на выполнения заданий

студентами, рекомендуется придерживаться указанной доли аудиторной работы на

тему. Объем самостоятельной работы студента пропорционален.

Тема Доля времени (%)

Структуры данных 5

Управляющая структура следование 10

Управляющая структура ветвление 15

Управляющая структура цикл 25

Одномерные массивы 20

Двумерные массивы 25

117

Библиографический список

Основной:

1. Ван Тассел Д. Стиль, разработка, эффективность, отладка и испытание про-

грамм. М.: Мир, 1985.

2. Зайдельман Я.Н. Эффективность алгоритмов: простые задачи и наглядные

примеры. М.: Чистые пруды, 2006.

3. Йенсен К., Вирт Н. Паскаль. Руководство пользователя и описание языка.

М.: Финансы и статистика, 1982.

4. Кнут Д. Искусство программирования. Т. 1: Основные алгоритмы. М.: Из-

дательский дом «Вильямс», 2000.

5. Кнут Д. Искусство программирования. Т. 2: Получисленные алгоритмы. М.:

Издательский дом «Вильямс», 2000.

6. Кнут Д. Искусство программирования. Т. 3: Поиск и сортировка. М.: Изда-

тельский дом «Вильямс», 2000.

7. Майерс Г. Искусство тестирования программ. М.: Финансы и статистика,

1982.

8. Ставровский А.Б. Первые шаги в программировании. Самоучитель.: М.: Из-

дательский дом «Вильямс», 2004.

Дополнительный:

9. Архангельский А.Я. Язык Pascal и основы программирования в Delphi: Учеб.

пособие. М.: ООО «Бином-Пресс», 2004.

10. Златопольский Д.М. Сборник задач по программированию для школьников

// Информатика. 2000. №4-18.

11. Калбертсон Р., Браун К., Кобб Г. Быстрое тестирование. М.: Издательский

дом «Вильямс», 2002.

12. Математический энциклопедический словарь / гл.ред. Ю.В. Прохоров. М.:

Сов.энциклопедия, 1998.

13. Марков А. А. Теория алгорифмов // Тр. Матем. института АН СССР. М.; Л.,

1954. Т. 42. 375 с.

14. Окулов С.М. Основы программирования. М.: ЮНИМЕДИАСТАЙЛ, 2002.

15. Орлов С.А. Технологии разработки программного обеспечения. СПб.: Пи-

тер, 2002.

16. Соммервил И. Инженерия программного обеспечения. М.: Издательский

дом «Вильямс», 2002.

17. Тамре Л. Введение в тестирование программного обеспечения. М.: Изда-

тельский дом «Вильямс», 2003.

18. Трахтенброт Б. А. Сложность алгоритмов и вычислений. Новосибирск,

1967.

19. Shneiderman Ben. A short history of structured flowcharts (Nassi-Shneiderman

Diagrams). / Draft, May 27, 2003.

Учебное издание

Соловьева Татьяна Николаевна

ИНФОРМАТИКА

Основы алгоритмизации и программирования

Учебное пособие

Редактор Н. И. Стрекаловская

Корректор А. В. Цветкова Компьютерная верстка: Т. Н. Соловьева

Объем данных 1,5 Мб Подписано к использованию 20.10.2018

Размещено в открытом доступе на сайте www.psu.ru

в разделе НАУКА / Электронные публикации и в электронной мультимедийной библиотеке ELiS

Издательский центр Пермского государственного

национального исследовательского университета 614990, г. Пермь, ул. Букирева, 15