Инфоурок Информатика Другие методич. материалыУглубленное изучение теоретического материала по теме «Нелинейные алгоритмы обработки числовых массивов»

Углубленное изучение теоретического материала по теме «Нелинейные алгоритмы обработки числовых массивов»

Скачать материал

Муниципальное общеобразовательное

казенное учреждение

«Фадеевская основная общеобразовательная школа

имени Кузьмы Сафроновича Скажутина

Октябрьского района»

 

 

 

 

НЕЛИНЕЙНЫЕ АЛГОРИТМЫ ОБРАБОТКИ ЧИСЛОВЫХ МАССИВОВ

 

 

 

 

Учитель информатики и ИКТ:

Щербатова К. С.

 

 

 

 

 

 

 

 

с. Фадеевка

2011
СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ……………………………………………………………………….3-4

ГЛАВА 1. ДАННЫЕ И СПОСОБЫ ИХ ОРГАНИЗАЦИИ............................5-8

1.1   Понятие данных…………………………………………………………..5

1.2   Типы данных……………………………………………………………6-8

ГЛАВА 2. АЛГОРИТМЫ ……………………………………………………..9-26

         2.1 Понятие «алгоритм»…………………………………………………..9-10

         2.2 Свойства алгоритмов………………………………………………...10-12

         2.3 Способы записи алгоритмов ………………………………………..13-17

         2.4 Виды алгоритмов…………………………………………………….17-20

         2.5 Структурные алгоритмы ……………………………………………20-26

ГЛАВА 3. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ТУРБО-ПАСКАЛЬ ………..27-42

         3.1 Описание языка Турбо-Паскаль…………………………………….27-28

         3.2 Данные в языке Турбо-Паскаль……………………………………..28-37

         3.3 Структура программы на языке Турбо-Паскаль…………………...37-39

         3.4 Простые операторы языка Турбо-Паскаль…………………………….39

         3.5 Структурные операторы языка Турбо-Паскаль……………………40-42

ГЛАВА 4. НЕЛИНЕЙНЫЕ АЛГОРИТМЫ ОБРАБОТКИ

                   МАССИВОВ………………………………………………………43-87

ЗАКЛЮЧЕНИЕ ......................................................................................................88

ЛИТЕРАТУРА……………………………………………………………….........89

 

 

 

 

 

ВВЕДЕНИЕ

Наш век – век компьютерных технологий, и одних только пользовательских навыков порою бывает недостаточно при решении задач на компьютере. Ведь человек использует компьютер для решения самых разнообразных информационных задач: работа с текстами, создание графических изображений, получение справки из базы данных, табличные расчеты, решение математических задач, расчет технических конструкций и многое другое. Для их решения в распоряжении пользователя имеется обширное программное обеспечение: системное ПО (ядром которого является операционная система), прикладное ПО (программы, предназначенные для пользователя) и системы программирования (средства для создания программ на языках программирования).

Исходя из условия задачи, пользователь решает для себя вопрос о том, каким программным средством он воспользуется. Если в составе доступного прикладного программного обеспечения имеется программа, подходящая для решения данной задачи, то пользователь выбирает ее в качестве инструмента (СУБД, табличный процессор, математический пакет и др.).

В том случае, когда готовым прикладным ПО воспользоваться нельзя, приходится прибегать к программированию на универсальных языках, т. е. выступать в роли программиста, для чего необходимо, в первую очередь, владеть алгоритмической культурой, а именно:

·        понимать значение алгоритма и алгоритмического типа деятельности;

·        знать основные типы алгоритмов и способы их описания;

·        уметь нечто сложное представить через более простое.

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

Одному из видов таких задач и посвящена моя дипломная работа: «Нелинейные алгоритмы обработки числовых массивов». В ней, прежде всего, рассмотрены этапы решения задач на компьютере. Ведущая роль при решении задач отводится этапу алгоритмизации (или составлению алгоритма). Следовательно, необходимо раскрыть понятия «алгоритм»  и «исполнитель», изучить свойства и виды алгоритмов, способы их записи, уметь из ограниченного количества основных конструкций создавать структурные алгоритмы. Именно создание из базовых структур их суперпозиции – одно из важнейших умений в программировании.

Любые алгоритмы  (программы) при решении задач обрабатывают информацию (данные). В связи с этим необходимо рассмотреть понятие «данные», их виды и типы.

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

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

Для этого необходимо было решить следующие задачи:

·        подобрать и изучить литературу по данной теме;

·        написать реферативную часть работы;

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

·        составить программы решения этих  задач  в программной среде Турбо Паскаль.

        

 

 

 

 

 

ГЛАВА 1. ДАННЫЕ И СПОСОБЫ ИХ ОРГАНИЗАЦИИ

 

1.1 ПОНЯТИЕ ДАННЫХ

 

При  решении любой задачи выполняется обработка каких-либо данных.

Данные это информация, представленная в виде, пригодном для обработки исполнителем алгоритма – человеком или автоматическим устройством.

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

Данные, необходимые для решения задачи, называют исходными. Они определяются и подготавливаются до выполнения алгоритма и используются в ходе его выполнения.

Выходные данные  (результат) – это данные, являющиеся результатом выполнения алгоритма.

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

Данные, в зависимости от принимаемых значений, могут быть:

·        константой (-5; 3е7; 12,5; «альфа») –  величиной, которая не изменяет своего значения в процессе выполнения программы;

·        переменной  (x, y, a, b, c, ai)  величиной, которая может изменять значение в процессе выполнения программы;

·        выражением (sinx - cosy; 2x – 5y + 3);

·        функцией (lg(c); exp(x); tan(γ)).

 

 


1.2 ТИПЫ ДАННЫХ

Каждое данное имеет  важную характеристику -  тип. Тип  данных в информатике определяет:

·        возможные значения переменных, функций, выражений, принадлежащих к данному типу;

·        внутреннюю форму представления данных в компьютере;

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

 Все   типы   данных   в   информатике  делятся  на  два   вида  –  простые

(скалярные) и сложные (структурированные).

Простые типы данных

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

Характеристики простых типов данных представлены в следующей таблице:

 

Тип данных

Диапазон значений

Операции над данными

Целочисленный

-32767 …32768

сложение (+),  вычитание (-),

умножение  (*)

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

10-308 … 10308

сложение  (+),  вычитание  (-),

умножение  (*),   деление(/)

Логический 

true,  false

отрицание (┐), конъюнкция (^), дизъюнкция (v)

Символьный

все символы кода ASCII

сложение  (+),  сравнение 

(>=,  <=,  =,  <>,  <,  >)

Строковый

строка символов длиной не более 256

конкатенация (+) - 

соединение двух строк в одну, сравнение (>=,  <=,  =,  <>,  <,  >)

Структурированные типы данных

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

Структуры классифицируют по следующим основным признакам:

·        однородная  -  неоднородная;

·        упорядоченная  -  неупорядоченная;

·        прямой доступ - последовательный доступ;

·        статическая  -  динамическая.

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

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

Если же в структуре имеются элементы разной природы (например, числа чередуются с символами), то – неоднородной

.

Структуру называют упорядоченной, если между ее элементами определен порядок следования. Примером упорядоченной математической структуры служит числовая последовательность, в которой у каждого элемента (кроме первого) есть предыдущий и последующий. Наличие индекса в записи элементов структуры уже указывает на ее упорядоченность (хотя индекс для этого не является обязательным признаком).

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

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

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

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

Программные средства информатики иногда позволяют не фиксировать размер структуры, а устанавливать его по ходу решения задачи и менять при необходимости, что бывает очень удобно. Такую структуру называют динамической. Например, при описании закономерностей движения очереди в магазине мы не знаем заранее, сколько человек в ней будет в тот или иной момент, и соответствующую структуру данных (например, список фамилий участников очереди) лучше представлять динамической структурой.

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


ГЛАВА 2. АЛГОРИТМЫ

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

Само слово «алгоритм» происходит от algorithmi – латинской формы написания имени великого математика IX века аль-Хорезми, который сформулировал правила выполнения арифметических действий. Первоначально под алгоритмами и понимали только правила выполнения четырех арифметических действий над многозначными числами.

Понятие алгоритма – одно из фундаментальных понятий информатики. Алгоритмизация наряду с моделированием выступает в качестве общего метода информатики. К реализации определенных алгоритмов сводятся процессы управления в различных системах, что делает понятие алгоритма близким и кибернетике.

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

Понятие исполнителя  невозможно определить с помощью какой-либо формализации. Исполнителем может быть человек, группа людей, робот, станок, компьютер, язык программирования и т.д. Важнейшим свойством, характеризующим любого из этих исполнителей, является то, что исполнитель умеет выполнять некоторые команды. Так, исполнитель-человек умеет выполнять такие команды как «встать», «сесть», «включить компьютер» и т.д., а исполнитель-система программирования Бейсик – команды PRINT, END, LIST и другие аналогичные.

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

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

 

Рис. 1   Исполнитель-робот и его СКИ

Введение в рассмотрение понятия «исполнитель» позволяет определить алгоритм как понятное и точное предписание исполнителю совершить последовательность действий, направленных на достижение поставленной цели. В случае исполнителя-робота мы имеем пример алгоритма «в обстановке», характеризующегося отсутствием каких-либо величин. Наиболее же распространенными и привычными являются алгоритмы работы с величинами – числовыми, символьными, логическими и т.д.

 

2.2 Свойства алгоритмов

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

1) Дискретность (прерывность)  алгоритмов.

 Описываемый процесс должен быть разбит на последовательность отдельных шагов. Возникающая в результате такого разбиения запись представляет собой упорядоченную совокупность четко разделенных друг от друга предписаний (директив, команд, операторов), образующих прерывную (или, как говорят, дискретную) структуру алгоритма. Только выполнив требования одного предписания, можно приступить к выполнению следующего. Дискретная структура алгоритмической записи может, например, подчеркиваться сквозной нумерацией отдельных команд алгоритма, хотя это требование не является обязательным.

2) Понятность.

 Используемые на практике алгоритмы составляются с ориентацией на определенного исполнителя. Чтобы составить для него алгоритм, нужно знать, какие команды этот исполнитель может понять и исполнить, а какие – не может. Мы знаем, что у каждого исполнителя имеется своя система команд. Таким образом, составляя запись алгоритма для определенного исполнителя, можно использовать лишь те команды, которые имеются в его СКИ.

 3)  Определенность или детерминированность.

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

Запись алгоритма должна быть настолько четкой, полной и продуманной в деталях, чтобы у исполнителя не могло возникнуть потребности в принятии решений, не предусмотренных составителем алгоритма. Говоря иначе, алгоритм не должен оставлять места для произвола исполнителя. Кроме того, в алгоритмах недопустимы также ситуации, когда после выполнения очередной команды алгоритма исполнителю неясно, какая из команд алгоритма должна выполняться на следующем шаге.

4) Результативность.

Это обязательное требование к алгоритмам. Смысл этого требования состоит в том, что при точном исполнении всех предписаний алгоритма процесс должен прекратиться за конечное число шагов и при этом должен получиться определенный результат. Вывод о том, что решения не существует – тоже результат.

5) Массовость.

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

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

6) Формальность – важная особенность алгоритмов. Наличие алгоритма формализует процесс решения задачи, исключает рассуждение исполнителя. Использование алгоритма дает возможность решать задачу формально, механически исполняя команды алгоритма в указанной последовательности. Целесообразность предусматриваемых алгоритмом действий обеспечивается точным анализом со стороны того, кто составляет этот алгоритм.

Данные свойства алгоритмов следует называть эмпирическими. Они выявлены на основе обобщения свойств алгоритмов различной природы и имеют прикладной характер. Этих свойств достаточно для практического программирования, для создания обширного круга программ для компьютеров, станков с ЧПУ, промышленных роботов и т.д. Однако, как фундаментальное научное понятие алгоритм требует более обстоятельного изучения. Оно невозможно без уточнения понятия «алгоритм», более строгого его описания или, как еще говорят, без его формализации, которая рассматривается в теории алгоритмов.

 


2.3 Способы записи алгоритмов

Алгоритмы описываются разными способами, в современной практике используется довольно много алгоритмических языков различного уровня. В каждом отдельном случае выбор языка зависит от ряда обстоятельств, и прежде всего от того, какого  рода алгоритмы необходимо описать с его помощью, а также для кого предназначается описание – для машины или для человека. Алгоритм, составленный для некоторого исполнителя, можно представить различными способами: с помощью графического или словесного описания, в виде таблицы, последовательностью формул, записанным на алгоритмическом языке (языке программирования).

Формулы

Математические формулы вместе с правилами их написания представляют собой своеобразный алгоритмический язык, используемый для описания вычислительных алгоритмов некоторого специального вида. В качестве примера можно задать формулу вычисления площади поверхности цилиндрического тела, с диаметром D  и высотой H:

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

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

Табличный способ

Такой способ записи  используется при организации вычислений по формуле с пооперационной регистрацией промежуточных результатов. В этом случае расписка формулы на последовательность элементарных действий и есть определение последовательности шагов (указаний) вычислительного алгоритма. Табличная форма записи удобна, когда требуется вычислить не одно, а несколько значений одного и того же выражения входных величин.

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

Достоинство словесных алгоритмов том, что таким способом при желании могут быть описаны любые алгоритмы, как «бытовые» (как приготовить кофе, позвонить по междугороднему телефону и т.п.), так и вычислительные. Отдельные шаги (указания) удобно нумеровать. Для примера запишем алгоритм вычисления по формуле                      

При составлении записи предположим, что правила выполнения арифметических операций сложения, умножения и деления, извлечение квадратного корня понятны исполнителю, т.е. являются для него элементарными. Словесная форма алгоритма может иметь вид:

1. Прочитать заданное число   x;

2. Умножить x на 8;

3. Из результата второго действия извлечь квадратный корень;

4. Умножить x на 3;

5. Результат четвертого действия разделить на результат третьего действия;

6. Записать значение результата y;

7. Конец.

Запись алгоритма  на алгоритмическом языке:

Достаточно распространенным способом представления алгоритма является его запись на алгоритмическом языке, представляющем в общем случае систему обозначений и правил для единообразной и точной записи алгоритмов и исполнения их. Отметим, что между понятиями «алгоритмический язык» и «языки программирования» есть различие; прежде всего, под исполнителем в алгоритмическом языке может подразумеваться не только компьютер, но и устройство для работы «в обстановке». Программа, записанная на алгоритмическом языке, не обязательно предназначена компьютеру. Практическая же реализация алгоритмического языка – отдельный вопрос в каждом конкретном случае.

Как и каждый язык, алгоритмический язык имеет свой словарь. Основу этого словаря составляют слова, употребляемые для записи команд, входящих в систему команд исполнителя того или иного алгоритма. Такие команды называют простыми командами. В алгоритмическом языке используют слова, смысл и способ употребления которых задан раз и навсегда. Эти слова называют служебными. Использование служебных слов делает запись алгоритма более наглядной, а форму представления различных алгоритмов – единообразной.

Алгоритм, записанный на алгоритмическом языке, должен иметь название. Название желательно выбирать так, чтобы было ясно, решение какой задачи описывает данный алгоритм. Для выделения названия алгоритма перед ним записывают служебное слово АЛГ (АЛГоритм). За названием алгоритма (обычно с новой строки) записывают его команды. Для указания начала и конца алгоритма его команды заключают в пару служебных слов НАЧ (НАЧало) и КОН (КОНец). Команды записывают последовательно.

Последовательность записи алгоритма:

АЛГ название алгоритма

НАЧ

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

КОН

Например, алгоритм, определяющий движение исполнителя-робота, может иметь вид:

АЛГ в_склад

НАЧ

вперед

поворот на 90° направо

вперед

КОН

Графический способ записи алгоритма

Этот способ имеет большое применение в практике составления программ для ЭВМ. Остановимся на графическом описании алгоритма, называемом блок-схемой. Этот способ имеет ряд преимуществ благодаря наглядности, обеспечивающей, в частности, высокую «читаемость» алгоритма и явное отображение управления в нем.

Блок-схема – это ориентированный граф, указывающий порядок исполнения команд алгоритма.

Вершины такого графа могут быть одного из трех типов (рис. 2).

 

 

 

 

 

 

 


Рис. 2   Три типа вершин графа

 

На рис. 2 изображены «функциональная» (а) вершина (имеющая один вход и один выход); «предикатная» (б) вершина, имеющая один вход и два выхода (в этом случае функция Р передает управление по одной из ветвей в зависимости от значения Р (Т, т.е. true, означает «истина», F, т.е. false – «ложь»); «объединяющая» (в) вершина (вершина «слияния»), обеспечивающая передачу управления от одного из двух входов к выходу. Часто вместо Т пишут «да» (либо знак +), вместо F «нет» (либо знак -).

На практике при составлении блок-схем оказывается удобным использовать геометрические фигуры (рис.3):

- в этой фигуре ставятся метки начала и конца  алгоритма

 

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

 
 

 

 

 

 

 

 

 

 

 

 

 


Рис.3   Конструкции для изображения блок-схем алгоритмов

Программы

         Программа, записанная на любом алгоритмическом языке программирования (Бейсике, Паскале, Си++, Clipper`e) является одним из способов записи алгоритма.

Команды здесь называются операторами.

2.4   Виды алгоритмов

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

 

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

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

На рис. 4 представлена блок-схема линейного алгоритма, у которого переход от одной команды осуществляется всегда к следующей команде (указанию).

 

 

 

 

 


 

Блок-схема: знак завершения: Конец

Рис.4 Алгоритм нахождения  периметра треугольника

 
 

 

 


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

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Рис. 5  Алгоритм нахождения максимального из двух чисел

 

 

Блок-схема на рис. 5 является разветвляющимся алгоритмом. В нем имеются два пути достижении результата, причем выбор пути зависит от значения исходных данных  а и b.

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

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

Многократно выполняемые указания (кроме команды, содержащей условие) называют телом цикла.

Примером циклического алгоритма может служить алгоритм ввода элементов массива, изображенного на рис. 6.

 

 

 

 

 

 

 

 

Рис. 6  Алгоритм ввода элементов одномерного массива

 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


         В этом алгоритме команды ввода элементов и присваивания выполняются n раз, т. е. составляют цикл.

2.5   СТРУКТУРНЫЕ АЛГОРИТМЫ

Подходы к созданию алгоритмов и требования к ним существенно изменялись в ходе эволюции компьютеров. Первоначально, в эпоху ЭВМ 1-го и 2-го поколений, когда они были еще мало распространены, машинное время было дорого, а возможности ЭВМ очень скромны (с точки зрения сегодняшних достижений), основным требованием к алгоритму была его узко понимаемая эффективность:

1)   минимальные   требования   в   отношении   оперативной  памяти

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

2)    минимальное время исполнения (минимальное число операций).

При этом программы составлялись из команд, непосредственно или почти непосредственно исполнявшихся компьютером (точнее говоря, процессором), эти команды выполняли:

·        операции присваивания;

·        простейшие арифметические операции;

·        операции сравнения чисел;

·        операции безусловного и условных переходов (изменяющих порядок вычисления команд в программе);

·        операции вызова подпрограмм  (вспомогательных алгоритмов).

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

С появлением массовых компьютеров 3-го поколения устаревшая технология программирования оказалась основным фактором, сдерживающим развитие и распространение компьютерных (информационных) технологий, что подтолкнуло ведущие в этой сфере деятельности фирмы, в первую очередь IBM, к разработке новых методологий программирования. Появившийся в начале 1970-х годов новый подход к разработке алгоритмов получил название структурного.

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

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

·        быть легко проверяемым;

·        допускать возможность изменения без существенной перестройки всей структуры.

В основе технологических принципов структурного программирования лежит утверждение о том, что логическая структура программы может быть выражена комбинацией трех базовых структур: СледованияВетвления  и  Цикла.

Следование – структура, в которой команды выполняются одна за другой в порядке их следования (рис. 7):

 

 

Рис. 7   Структура «Следование»

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

Развилка или Ветвление – это структура, обеспечивающая выбор между двумя альтернативами в зависимости от исходных данных (рис. 8).

Развилка бывает двух видов – Полная и Неполная.

 

 

 

 

 

 

 

 


Рис.8   Структура «Полная развилка»

 

 

 

 

 

 

 

 


Рис. 9   Структура «Неполная развилка»

 

Цикл (или повторение) предусматривает повторное выполнение некоторого набора команд программы, которые называются телом цикла. Если бы циклы не существовали, вряд ли занятие программированием было бы оправданным: циклы позволяют записать длинные последовательности операций обработки данных, с помощью небольшого числа повторяющихся команд. Данная структура так же бывает двух видов:

“Цикл-«Пока»” или «Цикл с предусловием» начинается с проверки логического выражения. Если оно истинно, то выполняется операция по стрелке «истина», затем все повторяется снова, пока логическое выражение сохраняет значение «истина». Как только оно становится ложным, выполнение цикла  прекращается и управление передается по программе дальше. Пример такой структуры изображен на рис. 10(а). Так как выражение, управляющее циклом, проверяется в самом начале, то в случае, если условие сразу окажется ложным, операторы тела цикла могут вообще не выполняться. Операторы тела цикла должны изменять переменную (или переменные), влияющие на значение логического выражения, иначе программа «зациклится» - будет выполняться бесконечно.

Существует и иная конструкция цикла – “Цикла-«До»”, или «Цикла с постусловием», которая предусматривает проверку условия, по которому, наоборот, выполнение команд тела цикла прекращается после команд циклической части. То есть  выполнение операций цикла происходит до тех пор, пока не выполнится условие (см. рис. 10(б)). Тело “Цикла-«До»” обязательно будет реализовано хотя бы один раз в отличие от “Цикла-«Пока»”, при котором действия цикла могут не выполнится ни разу. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


                     

                   а)                                                            б)

Рис. 10   Алгоритмы нахождения суммы 100 чисел

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

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

 конструкцию Следование;

2)    одна структура может вкладываться в другую, образуя вложенные

структуры;

  3) вложенные структуры, в свою очередь, могут соединяться последовательно.

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

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

-

 

+

 
Ромб: i ≤ 100

+

 

-

 
Блок-схема: знак завершения: КонецПараллелограмм: Вывод S

i: = i + 1

 

S: = S + a1

 
Параллелограмм: Ввод a1Ромб: ai > 0

i: = 1;    S: = 0

 
Блок-схема: знак завершения: Начало Допустим, надо ввести в память компьютера 100 чисел и по дороге просуммировать те из них, которые положительны. Ясно, что этот алгоритм циклический, внутри этого Цикла находится Развилка, в которой проверяется знак числа и производится суммирование. Схематически соответствующая суперпозиция изображена на рис. 11:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 11    Алгоритм содержит  Развилку, вложенную в “Цикл – «Пока»”,  

            для нахождения суммы положительных чисел из 100 возможных.

 

Схематические изображения нескольких суперпозиций базовых алгоритмических структур представлены ниже на рис. 12 - 15.

 

Рис.12  Алгоритм типа                                       Рис.13  Алгоритм типа

 «Цикл в Неполной Развилке».                            «Цикл, вложенный в Цикл».

 

 

                                           

Рис. 14   Иллюстрация трехкратного          Рис. 15 Алгоритм типа «Развилка в

вложения одной базовой структуры                        Развилке».

в другую.                                                         


ГЛАВА 3. АЛГОРИТМИЧЕСКИЙ ЯЗЫК

 ТУРБО-ПАСКАЛЬ

 

3.1 Описание языка Турбо-Паскаль

         Каждый язык имеет алфавит, синтаксис и семантику.

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

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

языка, для которых были даны синтаксические определения.

 Алфавит - это совокупность допустимых в языке символов.

Алфавит Турбо Паскаль включает следующий набор основных символов:

·        строчные и прописные латинские буквы:

          A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

          a b c d e f g h i j k l m n o p q r s t u v w x y z

·        символ пробела

·        символ подчеркивания: _

·        арабские цифры:   0 1 2 3 4 5 6 7 8 9

·        знаки операций:    + - * / = <> < > <= >= := @

·        ограничители:    . , ' ( ) [ ] (. .) { } (*  *) .. : ;

·        спецификаторы:    ^  #  $

·        служебные (зарезервированные) слова (таб.1)

Таблица 1.

absolute

exports

library

set    

assembler

external

mod

shl    

and

far

name

shr    

array

file

nil

string 

asm

for

near

then   

assembler

forward

not

to     

begin

function

object

type

case

goto

of

unit

const

if

or

until

constructor

implementatin

packed

uses

destructor

in

private

var

div

index

procedure

virtual

do

inherited

program

while

downto

inline

public

with

else

interface

record

xor

end

interrupt

repeat   

 

export

label

resident 

 

 

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

3.2  Данные в языке Турбо-Паскаль

Для решения задачи в любой программе выполняется обработка каких-либо данных. Данные могут быть самых различных типов: целые и вещественные числа, символы, строки, массивы. Все данные в языке Паскаль должны быть описаны в начале программы.

Данные языка Паскаль можно разделить на константы и переменные.

Константы  языка

Константы – это величины, которые не изменяют своего значения в процессе выполнения программы.

Они описываются в разделе констант с помощью  служебного слова const, за которыми следуют список имен констант, каждому из которых с помощью символа = присваивается значение. Одна константа от другой отдел  яется точкой с запятой, например:

const

a=3;

c=’a, b, c, d, e’;

b= -7.5;

В Турбо Паскаль применяется несколько стандартных видов констант:

  • Целочисленные константы. Могут быть определены посредством чисел, записанных в десятичном или шестнадцатиричном формате данных. Это число не должно содержать десятичной точки.
  • Вещественные константы. Могут быть определены числами, записанными в десятичном формате данных с использованием десятичной точки.
  • Символьные константы. Могут быть определены посредством некоторого символа, заключенного в апострофы.
  • Строковые константы. Могут быть определены последовательностью произвольных символов, заключенных в апострофы.
  • Типизированные константы. Представляют собой инициализированные переменные, которые могут использоваться в программах наравне с обычными переменными. Каждой типизированной константе ставится в соответствие имя, тип и начальное значение. Например:

year: integer = 2001;

symb: char = '?';

money: real = 57.23;

 

Переменные языка Турбо Паскаль

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

Описание переменных в разделе описаний переменных начинается со служебного слова var, за которым следуют имена  переменных и через двоеточие указывается их тип, например:

var

a, b: real;

c, d: integer;

Типы данных в языке Турбо Паскаль

Типы данных в Паскале делятся на простые (скалярные) и сложные (структурированные).

1.     Простые или Скалярные типы данных представлены в табл. 2.

Таблица 2.

Тип

Идентификатор

 

Длина (байт)

 

Диапазон значений

 

Операции

 

Целочисленные типы
 
integer
 

2

 

[-32768…32767]

 

+, -, /, *, Div, Mod,
>=, <=, =, <>, <, >

 
byte

1

 

[0..255]

 

+, -, /, *, Div, Mod, >=, <=, =, <>, <, >

word

 

2

 

[0..65535]

 

+, -, /, *, Div, Mod,
>=, <=, =, <>, <, >

shortint

 

1

 

[-128..127]

 

+, -, /, *, Div, Mod,
>=, <=, =, <>, <, >

longint

 

4

 

[-2147483648…

2147483647]

+, -, /, *, Div, Mod,
>=, <=, =, <>, <, >

 

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

 

real

 

6

 

[2,910-39 - 1,7103 ]

 

+, -, /, *,
>=, <=, =, <>, <, >

single

 

4

 

[1,5∙10-45 - 3,4∙1038]

 

+, -, /, *,
>=, <=, =, <>, <, >

double

 

8

 

[5∙10-324 - 1,7∙10308]

 

+, -, /, *,
>=, <=, =, <>, <, >

 

extended

 

10

 

[3,4∙10-4932 - 1,1∙104932]

 

+, -, /, *,
>=, <=, =, <>, <, >

 

Логический

(булевский)

тип

boolean

1

 

[true, false]

 

Not, And, Or, Xor,
>=, <=, =, <>, <, >

Символьный тип

char

1

кодs ASCII

[32…127]

+,
>=, <=, =, <>, <, >

 

К простым типам в Турбо Паскале относятся перечисляемый и интервальный типы.

·        Перечисляемый   тип   задается    непосредственно    перечислением

 значений,  которые  может  принимать  переменная  данного типа, например:

var

a, b: (red, blue, green);

c: (dog, cat);

Можно сначала определить перечисляемый тип данных, а затем описать его переменные. Новый тип определяется в разделе type:

type <имя_типа>=<перечисление_значений>;

Например:

type

color=(red, blue, green);

var

a, b: color;

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

определяют границы изменения переменных данного типа. Значение первой константы должно быть меньше значения второй. Сами же они являются целочисленными или символьными, например:

var

a, b, c: [-7..4];

x:  [’a’..’c’];

Как и в случае перечисляемого типа можно предварительно определить этот тип в разделе type, а затем описывать переменные.

    Например:

type

x=0..9;

var

a, b: x;

Каждая переменная интервального типа занимает 1 байт.

2.       К       Структурированным    или    Сложным      типам      данных  

относятся: массивы, строки, записи, файлы, множества.

·        Массив – это упорядоченный набор данных одного типа,   имеющий

имя.

В языках программирования все элементы массива объединяются общим именем – идентификатором  массива.

Каждый элемент массива имеет свой номер, который определяет положение элемента в массиве и который называется его индексом.

Отдельный элемент массива синтаксически представлен переменной с индексами – идентификатором массива, за которым следует список индексов – ai, xk, bij.

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

Рассмотрим примеры массивов:

·        A= (a1, a2, a3,…, an) – массив  с  именем  A,  его   длина равна n, a1, a2,

a3,…, an его элементы.

·        X= (a + b, ab, a* b, a / b)  – массив  с  именем  X, его длина равна 3,

его элементами являются арифметические выражения.

·        Y = («Наша», «Таня», «громко», «плачет») –  массив с именем Y, его

длина равна 4, его элементами являются строки.

Число элементов массива фиксируется при описании типа и в процессе выполнения программы не изменяется. Для  доступа к элементу необходимо указать имя массива и его номер  в квадратных скобках. Для описания массивов используется служебное слово array  описание переменной данного типа имеет следующий вид:

 

<Имя_переменной>: array [i..i1,j..j1,…] of <тип_элементов>;

где i, i1  - границы первого индекса массива,  j, j1- границы второго индекса массива.

Например:

var

a: array [1..10] of  integer;

         Массивы бывают одномерными и двумерными.

         Одномерный массив можно представить в виде ленты, разделенной на ячейки, каждая ячейка имеет свой номер, внутри ячейки находится значение элемента с этим номером. Такие массивы изображены на рис. 16 и 17.

 

a1

a2

a3

an-2

an-1

an

5

-3

0

-1.2

7

0.25

A

 

Рис. 16

B1

b2

b3

b4

«Наша»

«Таня»

«громко»

«плачет»

B

Рис. 17   

         В массиве A элементами являются действительные числа, в массиве B – строки.

         Двумерный массив можно изобразить в виде таблицы. Элементы этого массива имеют два индекса, первый указывает номер строки таблицы, в которой находится этот элемент, второй – номер столбца. Например, массив имеет m строк и n столбцов, его можно изобразить в виде ниже следующей таблицы.

 

X11

X12

X13

X1n-1

X1n

X21

X22

X23

X2n-1

X2n

X31

X32

X33

X3n-1

X3n

Xm1

Xm2

Xm3

Xmn-1

Xmn

X

Рис. 18   

         Компонентами массива могут быть не только простейшие данные, но и структурные, в том числе массивы. В этом случае мы получаем массив массивов – многомерный массив. Для индексации элементарных компонент в этом случае может потребоваться два, три, и более индексов.

·        Строковый     тип     Строка     –     это    совокупность    символов,

 заключенных в апострофы.

         Длина строки, то есть, количество символов в строке, может меняться от 0 до 255.

         Если длина строки равна 0, то строка называется пустой.

         В разделе type формат описание структуры строка следующий:

<имя типа>=string [максимальная длина строки]

        

Для раздела var:

<имя переменной> : string [максимальная длина строки]

        

         type

                   Fam = string [25];

                   Nam = string [15];

                   Adres = string;

var

F  : Fam;

N : Nam;

Fam = string [25];

·        Комбинированный    тип     Запись   –  это   фиксированный     набор

компонент одного или нескольких типов. Компоненты называются полями записи.

         Так же, как и массив, тип – запись можно указать как программистский в  разделе type, а можно как тип переменной в разделе var. Форматы таких описаний будут иметь ниже следующий вид.

         Для раздела type:

<имя записи> = record<список полей> end

Каждое поле в списке указывается в формате:

<имя поля> : <тип его компонент>;

         Для раздела var:

<имя переменной> : record <список полей> end

Каждое поле в списке указывается в формате:

<имя поля> : <тип его компонент>;

         Например,

         type

                   Car = record

                            Number : integer;

                            Marka : string [20];

                            FamIO : string [40];

                            Adress : string [60];

                   end;

         var

                   G,S : Car;

Или  без авторского типа Car

         var

                   G,S : record

                   Number : integer;

                   Marka : string [20];

                   FamIO : string [40];

                   Adress : string [60];

end;

         Значение полей могут использоваться в выражениях, для этого надо указать составное имя поля, состоящего из имени переменной и имени поля, разделенных точкой. Оператором присваивания полям можно присвоить значения, например:

         G. Number : 272;

         G. Marka : ʻColdinaʼ;

         G.FamIO : ʻИванов И. Р.ʼ;

         G.Adress : ʻПушкина 23-13ʼ;

·        Множественный    тип    Множество    –    это    набор   однотипных

объектов, каким либо образом связанных между собой.

         Характер связей подразумевается программистом и Паскалем не контролируется. Во множество может входить от 0 до 256 элементов.

         Множество, не содержащее элементов, называется пустым.

         Все элементы множества должны принадлежать одному из перечисляемых типов. Этот тип называется базовым типом множества.

         В разделе type формат описание структуры множество следующий:

<имя множества> = set of <базовый тип>

         Для раздела var:

<имя переменной> : set of <базовый тип>

         Базовый тип задается диапазоном или перечислением, например:

         type

                   Num = set of 1..30;

                   Mar = set of  (ʻaʼ, ʻbʼ, ʻcʼ, ʻxʼ, ʻyʼ);

         var

                   N1, N2: Num;

                   X, Y : Mar;

Или без авторских типов Num  и Mar

         var

                   N1, N2: set of 1..30;

                   X, Y : (ʻaʼ, ʻbʼ, ʻcʼ, ʻxʼ, ʻyʼ);

         Для задания множества используется конструктор множества: список элементов множества, разделенных запятыми, заключенными в квадратные скобки. Например, B =[2,4,6,8].

         Над множествами определены операции, результатом которых является множество. К ним относятся:

         * - пересечение множеств, результат содержит элементы, принадлежащие и первому и второму множествам;

         + - объединение множеств, результат содержит элементы,  принадлежащие или первому или второму множествам;

         -   - разность множеств, результат содержит элементы,  принадлежащие первому, но не принадлежащие второму множествам;

         Над множествами определены операции отношения (=, <>, <=, >=),  результат которых имеет логический тип и операция вхождения in. Она применяется для проверки принадлежности элемента множеству, ее результат тоже имеет логический тип.

3.3 Структура программы на языке Турбо-Паскаль

program my_prog1;

   Раздел описаний

begin

    Раздел операторов

 

end.

         Программа, написанная на языке Турбо Паскаль, имеет следующую структуру:

·        заголовок программы;

·        раздел описаний;

 

·        тело программы.

 

 

 

Рис. 19  Структура программы на языке Паскаль

 

Первым в программе идет зарезервированное слово program. За ним после одного или нескольких пробелов, следует идентификатор имя программы. Идентифи­каторы могут содержать любое количество символов, но Турбо Паскаль распознает только первые 8 из них. Идентификатор должен начинаться с буквы или с символа подчеркивания. Затем могут идти латинские буквы, цифры и символы подчеркивания. В Турбо Паскале оператор заголовка программы может быть опущен. Имя про­граммы фактически никогда не используется в самой программе, и оно совершен­но не связано с именем внешнего файла, содержащего текст программы.

Раздел описаний

Он включает:

·        раздел описания констант (служебное слово const);

·        раздел описания типов (служебное слово type);

·        раздел описания переменных (служебное слово var);

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

         В языке Турбо Паскаль должны быть описаны типы всех переменных, кон­стант и функций, которые будут использоваться программой. В стандартном Паскале порядок следования разделов в программе жестко установлен, в Турбо Паска­ле такого строгого требования нет. В программе может быть несколько разде­лов описания констант, переменных и т.д.

Тело программы или раздел операторов

Он  начинается со слова begin, затем следуют операторы языка Паскаль, реализующие алгоритм решаемой задачи.

         Операторы в языке Паскаль отделяются друг от друга  точкой с запятой и могут располагаться в одну строчку или начинаться с новой строки (в этом случае их также необходимо разделять точкой с запятой). Назначение символа ; - отделение операторов друг от друга. Тело программы заканчивается служебным словом end. Минимально допустимой выполняемой частью программы является составной оператор:

Begin S1; S2:   ...   : Sn: end

где S1,..., Sn — операторы, которые могут быть простыми или составными, а зарезервированные слова begin и end играют роль операторных ско­бок. Структуру программы можно представить на следующем примере:

program  имя_программы;                                               

const  описания_констант;

type  описания_типов;        

var  описания_переменных;                                                               

begin

оператор_1; оператор_2;

оператор_n;

end

В текст программы на Паскале могут быть включены комментарии в фигур­ных скобках {…} или в круглых скобках в сопровождении символа *     (*…*). Комментарии игнорируются в про­цессе выполнения программы и служат для пояснения отдельных ее частей.

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

3.4  Простые операторы языка Турбо-Паскаль

Оператор присваивания

Он имеет формат:

<имя переменной>:=<значение переменной>

 

Типы переменной и тип значения должны совпадать или быть совместимыми для при­сваивания.

Пустой оператор

Еще один оператор действия, хотя его можно лишь условно назвать таковым: он не выполняет никакого действия, это - пустой оператор (в Паскале он обознается знаком ";").

3.5 Структурные операторы Паскаля

Составной оператор

Составной оператор - это группа операторов, отделенных друг от друга точкой с за­пятой, начинающихся со служебного слова begin и заканчивающихся служеб­ным словом end.

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

Условный оператор

Формат полного  условного оператора таков:

if<логическое выражение>then<оператор 1>lse<оператор 2>

         

Выполняется оператор так: если логическое выражение имеет значение true, выполняется оператор 1, если логическое выражение имеет значение false, то выполняется оператор 2.

Условный оператор может быть неполным, т.е. не содержать часть «else <оператор 2>». В этом случае, если значение логического выражения равно false, условный оператор не вызывает никаких действий.

Оператор выбора

Оператор выбора имеет следующий формат:

case <выражение> of

<список констант 1> : <оператор 1>;

<список констант 2> : <оператор 2>;

....................................................

<список констант N> : <оператор N> end.

          Выражение, стоящее между служебными словами case и of, должно иметь значение ординального типа. Под данными ординального типа понимают те, для каждого из которых можно найти их порядковый номер в данном типе. Ординальные типы, таким образом, представляют собой упорядоченные множества. Любой список констант может состоять из одной константы.

          Оператор варианта вычисляет значение выражения, записанного после case. Если его значение совпадает с одной из констант в некотором списке, то выполняется оператор, стоящий после этого списка. Если значение выражения не совпало ни с одной константой во всех вариантах, то оператор варианта ничего не делает.

Операторы цикла

Для реализации циклов в Паскале имеются три оператора. Если число повторений известно заранее, то удобно воспользоваться оператором цикла с параметром. В других случаях следует использовать операторы цикла с предусловием “Цикл -«Пока»” или с постусловием “Цикл -«До»”.

Цикл с предусловием является наиболее мощным в Паскале, его формат.

while <логическое выражение> do <оператор (тело цикла)>

           

Выполняется оператор так: вычисляется значение логического выражения. Если оно равно true, то выполняется тело цикла, после чего снова вычисляется значение логического выражения, так только оно примет значение false, оператор заканчивает работу.

Оператор цикла с постусловием имеет формат:

repeat <последовательность операторов (тело цикла)>

 until <логическое выражение>

 

Выполняется оператор так: выполняется тело цикла. Далее вычисляется значение логического выражения. Если оно равно false, то снова выполняется тело цикла, в противном случае оператор заканчивает работу.

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

 

Формат 1:

for <параметр>:= <выражение 1> to <выражение 2> do <оператор>

    Параметр, выражение 1, выражение 2 должны быть одного ординального типа: параметр при каждом выполнении цикла увеличивается на 1. Действие оператора эквивалентно действию следующего составного оператора:

begin

  <параметр>:=<выражение 1>;

  while <параметр> >= <выражение 2> do

        begin

        <оператор>;

         <параметр>:= <параметр> + 1;

         end

end.

Формат 2:

for <параметр>:= <выражение1> down to <выражение 2> do <оператор>

 

При каждом выполнении цикла параметр уменьшается на 1. Его выполнение эквивалентно выполнению следующего составного оператора:

 begin

  <параметр>:=<выражение 1>;

  while <параметр> >= <выражение 2> do

        begin

        <оператор>;

         <параметр>:= <параметр> - 1;

         end

end.


ГЛАВА 4. НЕЛИНЕЙНЫЕ АЛГОРИТМЫ ОБРАБОТКИ МАССИВОВ

Задача 1

На плоскости ХОУ расположены k пронумерованных точек М111), М222), М333), …, Мkkk) с заданными координатами. Определить, точка с каким номером находится к началу координат ближе остальных.


В алгоритме использованы обозначения:

i – номер точки;

(xi; yi) – координаты i – ой точки;

ri – расстояние от начало координат до точки (xi; yi);

min – минимальное значение из расстояний ri;

t – переменная, которая запоминает номер точки, которая ближе к началу координат.    

Построенная блок – схема является структурой Следование, состоящей из 6 блоков:

1 – блок ввода;

2 – блок присваивания;

3 – блок присваивания переменной i номера точки;

4 – структура Цикл – Пока с условием ik, его тело структура Следование состоящая из 4 блоков:

1 - блок ввода координат точек;

2 - блок присваивания;

          3 - структура Неполная Развилка с условием ri  < m in

       на ее положительной ветви находится блок присваивания;

4 - блок присваивания, в котором значение переменной i

        увеличивается на 1;

5 – блок присваивания;

6 – блок вывода.

Запишем  алгоритм решения на языке программирования Турбо-Паскаль:

Program n1;

         uses crt;

         var

      i, k, t: integer;

      min, x, y, r: real;

      s: string;

Begin

         clrscr;

         write(‘Введите кол-во точек: ‘);

         readln(k);

         write(‘Введите координаты точки M1 через пробел: ‘);

         readln(x,y);

         min:=Sqrt(Sqr(x)+Sqr(y));

         i:=2;

         while i<=k do

                    begin

                             write(‘Введите координаты ‘,i,’-той точки :‘);

                              readln(x,y);

                              r:=Sqrt(Sqr(x)+Sqr(y));

                              if r<min then

                                       begin

                                                 min:=r;

                                                 t:=i;

                                       end;

                              i:=i+1;

                    end;

                              writeln(‘Ближе к началу координат точка с номером’,t);

                             readln;

End.

Результат работы программы:

Введите количество точек: 5

Введите координаты точки M1 через пробел: 6 9

Введите координаты 2-ой точки: 3 7

Введите координаты 3-ой точки: 7 3

Введите координаты 4-ой точки: 5 8

Введите координаты 5-ой точки: 1 12

Ближе к началу координат точка с номером 2

 

Задача 2

Дано натуральное число n. Вычислить значение суммы

S=, где

             k, если  k - четное                                 k2, если k - четное

-

 

+

 
Блок-схема: знак завершения: Начало

+

 

-

 
Параллелограмм: S

k : = k + 1

 

S : =  S + ( a2k  –  b2k)

 

ak : = k

bk : = k2

 

 

ak : = k/2

bk : = k3

 

 
Ромб: k/2 = 0Ромб: k   n

k: = 1;  s: = 0

 
Параллелограмм: Ввод nБлок-схема: знак завершения: Конец

b k=

 

a k=

 
            , если  k - нечетное                            k3, если k - нечетное

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                         В алгоритме использованы обозначения:

n – число членов суммы;

k – счетчик числа шагов цикла;

S – искомая сумма.

 

Построенная блок – схема является структурой Следование, состоящей из 4 блоков:

1 – блок ввода числа n;

2 – блок присваивания;

3 –  структура Цикл – Пока с условием  k  n, его тело структура Следование состоящая из 3 блоков:

          1 – структура Полная Развилка с условием k/2 = 0, на ее ветвях

                находятся блоки присваивания;

2 - блок присваивания;

3 - блок присваивания, в котором переменная k увеличивается на 1;

4 – блок вывода результата – значение суммы S.

Запишем  алгоритм решения на языке программирования Турбо-Паскаль:

Program n2;

         uses crt;

         var

      n, k: integer;

      a, b, s: real;

Begin

         clrscr;

         write(‘Число членов суммы n= ‘);

         readln(n);

          s:=0;

          for k:=1 to n do

              begin

                  If k mod 2=0 then

                        begin

                           a:=k;

                            b:=Sqr(k);

                         end

                 else

                     begin

                         a:=k/2;

                         b:=k*k*k;

                     end;

                  s:=s+(Sqr(a)-Sqr(b));

                  end;

                 writeln(‘Сумма s=’ ,s:5:3);

                 readln;

End.

Результат работы программы:

Число членов суммы n=5

Cумма  s=-16598,250

 

Задача 3

 

Дано натуральное число n, действительное число  a и последовательность чисел x0, x1, x2, x3, …, xk, …, образованная по закону

 

Xk=a · xk-1+ , k =  1,2,…n,...

 
 


X0=

 
                min если a  0

                max  если a > 0

Вычислите произведение первых n членов этой последовательности.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


В алгоритме использованы обозначения:

n – число членов, которое нужно взять в произведение;

a – за данное действительное число;

x0  -  первый член последовательности;

k  - счетчик цикла;

p  -  переменная для нахождения произведения.

Построенная блок-схема является структурой Следование, которая

состоит из 5  блоков:

1 – блок ввода данных;

2 – структура Полная Развилка с условием a  0, на положительной ветви  -

      структура Следования, состоящая из 2 блоков:

         1 – структура Полная Развилка с условием 2a > a/2;

         3 – блок присваивания;

      на отрицательной ветви расположена структура Следования из 2 блоков:

         1 – структура Полная Развилка с условием 2a > a/2;

           3 – блок присваивания;

3 блок присваивания, в котором  k: = 1; p: = x0;

4 - структура Цикл - Пока с условием k   n. Его тело – структура Следование, состоящая из трех блоков присваивания;

5 – блок вывода искомого произведения первых n членов;

Запишем этот алгоритм в виде программы на языке Турбо-Паскаль:

Program n3;

         uses crt;

         var

      n, k: integer;

      min, x, p, a, max: real;

Begin

         clrscr;

         write(‘Число членов числовой последовательности n= ‘);

         readln(n);

         write(‘Действительное число a= ‘);

         readln(a);

          if  a<=0 then

               begin

                   if  2*a>a/2  then

                        min:=a/2;

                   else

                         min:=2*a;

                   x:=min;

                end

             else

                 begin

                      if 2*a>a/2 then  max:=2*a

                   else  max:=a/2;

                            x:=max;

                  end;

             p:=x;

             for k:=1 to n do

                 begin

                      x:=a*x+x/(Abs(a)+1);

                      p:=p*x;

                end;

                    writeln(‘Произведение p=’ ,p:5:3);

                    readln;

End.

Результат работы программы:

Число членов числовой последовательности n=8

Действительное число a=5

Произведение p=4.738

 

Задача 4

Задано n троек чисел (a1, b1, c1), (a2, b2, c2), (a3, b3, c3), …, (an, bn, cn). Интерпретируйте каждую тройку чисел как длины сторон треугольников, определить, сколько троек может быть использовано для построения треугольников (в треугольнике сумма длин двух сторон всегда больше длины третьей).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


В алгоритме использованы обозначения:

n – количество троек чисел;

i – счетчик цикла троек чисел;

k – количество возможных треугольников.

Построенная блок-схема является структурой Следование, которая

состоит из   4  блоков:

1 – блок ввода данных;

2 – блок присваивания;

3 – структура Цикл – Пока с условием i  n, тело цикла – структура Следования, состоящая из 3 блоков:

1 – блок  ввода данных;

2 – блок  Неполная Развилка с условием  a< b+ c по положительной ветви расположен блок Неполная Развилка, с условием b<a+c по положительной ветви которого расположен блок Неполная Развилка с условием c< a + b, по положительной ветви которого  расположен блок присваивания, то есть имеем тройное вложение Развилок.

4 блок -  блок вывода результата.

Запишем этот алгоритм в виде программы на языке Турбо-Паскаль:

Program n4;

         uses crt;

         var

      i, k, n: integer;

      a, b, c: real;

Begin

         clrscr;

         write(‘Число троек n= ’);

         readln(n);

         k:=0;

          for i:=1 to do

                begin

                     write(i, ‘-я тройка чисел (a b c): ‘);

                     readln(a,b,c);

                      if a<(b+c) then

                          if b<(a+c) then

                             if c<(a+b) then

                                 k:=k+1;

                 end;

                    writeln(‘Число треугольников k=’ ,k);

                    readln;

End.

Результат работы программы:

Число троек n=5

1-я тройка чисел (a b c): 4 5 6

2-я тройка чисел (a b c): 6 7 3

3-я тройка чисел (a b c): 8 7 2

4-я тройка чисел (a b c): 3 5 9

5-я тройка чисел (a b c): 2 9 4

Число треугольников k=3

 

Задача 5

Групповая ведомость содержит фамилии n студентов и их четыре оценки за экзамены F1(x1, y1, z1, t1), F2(x2, y2, z2, t2), F3(x3, y3, z3, t3), …, Fn (xn, yn, zn, tn). Считая оценки заданными, вычислить успеваемость студентов этой группы. Успеваемость рассчитывается так: количество студентов, сдавших сессию без двоек, делится на число всех студентов и частное умножается на 100%.



В алгоритме использованы обозначения:

n -  количество студентов;

k -  количество студентов сдавших без двоек;

s -  успеваемость.

Построенная блок-схема является структурой Следование, которая

состоит из   5  блоков:

1 – ввода данных;

2 – блок присваивания;

3 – структура Цикл – Пока с условием i  n. Тело цикла – структура

      Следования, состоящая из 3 блоков:

1 – блок ввода данных;

2 – структура Неполная Развилка с условием x2, по положительной ветви которой расположена структура Неполная Развилка с условием y2, по положительной ветви которой расположена структура Неполная Развилка с условием z2, на положительной ветви которой расположена структура Неполная Развилка с условием t2, по плюсовой ветви которой расположен блок присваивания;

3 – блок присваивания;

4 – блок присваивания;

5 – блок вывода результат.

Запишем этот алгоритм в виде программы на языке Турбо-Паскаль:

Program n5;

         uses crt;

         var

      i, k, n, x, y, z, t: integer;

      s: real;

Begin

         clrscr;

         write(‘Количество студентов n= ‘);

         readln(n);

         k:=0;

          for i:=1 to do

              begin

                  write(‘Оценки студента M’ , i);

                     readln(x,y,z,t);

                     if x>2 then

                       if y>2 then

                         if z>2 then

                           if t>2 then

                               k:=k+1;

                end;

                      s:=k/n*100;

                 writeln(‘Успеваемость: ‘ ,s:2:1,’%’);

                 readln;

End.

Результат работы программы:

Количество студентов n=3

Оценки студента M1(x y z t): 2 3 3 4

Оценки студента M2(x y z t): 4 4 5 5

Оценки студента M3(x y z t): 3 2 2 5

Успеваемость: 3.3%

Задача 6

Заданы два одномерных массива X и Y длиной k, элементами которых являются натуральные числа.. Получить из них массив Z такой же длины. Каждый элемент массива Z должен быть средним геометрическим соответствующих элементов X и  Y. Найти сумму и произведение элементов полученного массива и определить, какое из чисел является меньшим.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


В алгоритме использованы обозначения:

iсчетчик элементов массива;

kдлина массива;

sсумма элементов массива Z;

pпроизведение элементов массива Z;

zi, xi, , yi  - i – тый  элемент массива Z, X, Y;

tзначение наименьшего числа между суммой и произведением элементами массива Z;

Построенная блок-схема является структурой Следование, состоящей из 7 блоков:

1 – блок ввода длины массива;

     2 – блок присваивания, в котором сумме s := 0, а произведению p := 1;

     3 - блок присваивания, в котором счетчику элементов i := 1;

4 - структура Цикл - Пока с условием i<=k. Его тело – структура Следование, состоящая из 4 блоков:

1 – блок ввода элементов одномерного массива;

2 – блок присваивания, в котором находим среднее геометрическое

       значение элементов массива Z, находится произведение

       элементов массива Z, а также его произведение;

3 –  блок вывода элементов массива Z;

               4 – блок присваивания, в котором счетчику i := i + 1;

5блок вывода произведения p и суммы s элементов массива Z;

6 – структура Полная Развилка с условием ps,  на ее отрицательной ветви находится структура Полная Развилка с условием p=s, а на положительной ветви находится блок присваивания;

7 – блок вывода полученного минимального значения.

Запишем этот алгоритм в виде программы на языке Турбо-Паскаль:

Program n6;

 uses crt;

 var x,y:array[1..500] of integer;

     z:array[1..500] of real;

     i,k:integer; p,s:real;

Begin

 clrscr;

         writeln('Введите количество элементов в массивах');

          readln(k);

 s:=0;p:=1;

for i:=1 to k do

                              begin

                                      write('Введите x[',i,']=');

                                      readln(x[i]);

                             end;

                   for i:=1 to k do

                             begin

                                      write('Введите y[',i,']=');

                                      readln(y[i]);

                                       z[i]:=sqrt(x[i]*y[i]);

                                       s:=s+z[i];p:=p*z[i];

                             end;

         clrscr;

 writeln('Массив X:');

                   for i:=1 to k do write(x[i],' ');

         writeln;

         writeln('Массив Y:');

         for i:=1 to k do write(y[i],' ');

         writeln;

         writeln('Массив Z:');

                   for i:=1 to k do write(z[i]:5:1,' ');

         writeln;

         writeln('Произведение элементов массива Z: ',p:10:0);

         writeln('Сумма элементов массива Z: ',s:10:0);

if p<s then writeln('Произведение элементов массива Z меньше их суммы')

                              else if s<p then writeln('Сумма элементов массива Z меньше их  произведения')

                                     else writeln('Произведение и сумма элементов массива Z  равны')

         readln;

End.

Результат работы программы:

Введите количество элементов в массивах 5

Введите x[1]=3     Введите x[2]=4    Введите x[3]=7

Введите y[1]=6     Введите y[2]=4    Введите y[3]=2

Введите x[4]=8     Введите x[5]=3

Введите y[4]=4     Введите y[5]=7

Массив X:

  3 4 7 8 3

Массив Y:

  6 4 2 4 7

Массив Z:

4.2     4.0  3.7  5.7  4.6 

Произведение элементов массива Z:  1646

Сумма элементов массива Z: 22

Сумма элементов массива Z меньше их  произведения.

 

 

Задача 7

         Заданы два одномерных числовых массива А и В длиной n и m соответственно. Объединить их в массив С, вставив элементы массива В  между k-тым  и (k+1) элементом массива А, где k -  заданное число, причем  k < n.

 

 


            

Овал: A

--

 

В алгоритме использованы обозначения:

i – переменная, которая «считает» число элементов массива;

ai , bi , сi  -  i–тые элементы массивов А, В и С;

j – дополнительный «счетчик» элементов при формировании массива С;

Построенная блок-схема является структурой Следование, состоящей из 11 блоков.

1 – блок ввода количества элементов в массивах m, n  и числа k;

2 – блок присваивания счетчику цикла i  первоначального значения;

3 – структура Цикл - Пока с условием i<=n. Его тело – структура Следование, состоящая из двух блоков:

1 – блок ввода элементов массива A и  B;

2 – блок присваивания, в котором значение счетчика увеличивается

       на 1;

 Тело выполняется n  раз.

4 – блок присваивания, в котором i получает значение 1;

5 - структура  Цикл – Пока с условием i<= k,  его тело  -  структура Следование, состоящая из 2 блоков присваивания, тело выполняется k раз;

–  блок присваивания, в котором счетчики получают

        первоначальное значение;

7 - структура Цикл – Пока с условием i<= k+m, его тело блок присваивания, которое выполняется m раз;

8  – блок  присваивания, в котором счетчики получают

        первоначальное значение;

9 – структура Цикл – Пока  с условием i <= m+n.  Его тело блок

      присваивания, которое выполняется m+k  раз;

10  - блок присваивания, в котором i получает значение 1;

11 – структура Цикл – Пока  с условием i <= m+n.  Его тело структура Следование, состоит из 2 блоков:

1 -  блок вывода элементов полученного массива C;

          2 блок присваивания, в котором увеличивается значение

              счетчика цикла;

         Тело цикла выполняется m+n раз.

Запишем этот алгоритм в виде программы на языке Турбо-Паскаль:

Program n7;

 uses crt;

 var a,b,c:array[1..500] of integer;

     i,n,m,k,j:integer;

Begin

         clrscr;

writeln('Введите количество элементов в массиве A');

         readln(n);

                   for i:=1 to n do

                              begin

                                      write('Введите a[',i,']=');

                                      readln(a[i]);

                              end;

         writeln('Введите количество элементов в массиве B');

         readln(m);

                   for i:=1 to m do

                             begin

                                      write('Введите b[',i,']=');

                                      readln(b[i]);

                             end;

         writeln('Введите k<',n);readln (k);

clrscr;

         writeln('Массив A:');

                   for i:=1 to n do write(a[i],' ');

         writeln;

         writeln('Массив B:');

                   for i:=1 to m do write(b[i],' ');

         writeln; j:=1;

                   for i:=1 to k do c[i]:=a[i];

                   for i:=k+1 to k+m do begin c[i]:=b[j];j:=j+1;end;

 j:=k+1;

                  for i:=k+m+1 to m+n do begin c[i]:=a[j];j:=j+1;end;

         writeln('Массив C:');

                   for i:=1 to n+m do write(c[i],' ');

         writeln;

         readln;

End.

Результат работы программы:

Введите количество элементов в массиве А: 4 

Введите a[1]=4     

Введите а[2]=7     

Введите а[3]=9     

Введите а[4]=6     

Введите количество элементов в массиве В: 3  

Введите b[1]=6     

Введите b[2]=3     

Введите b[3]=8     

Введите k<4

3

Массив A:

4 7 9 6

Массив B:

 6 3 8

Массив C:

4 7 9 6 3 8 6

Задача 8

В двумерном числовом массиве Xmxn  найти произведение ненулевых элементов каждого столбца и определить, произведение какого столбца является наибольшим.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


         В алгоритме использованы обозначения:

i, j  – «считают» число строк и столбцов массива;

pj   – произведения элементов j-того  столбца;

max – наибольший из pj ;

k –  номер столбца, в котором находится max pj.

Построенная блок-схема является структурой Следование, состоящей из восьми блоков:

1 – блок ввода размерности массива;

2 – блок присваивания первоначального значения счетчику цикла i;

3 - структура Цикл - Пока с условием i <= m. Его тело – структура Следование, состоящая из трех блоков:

1 – блок присваивания первоначального счетчика цикла j;

2 –  структура Цикл - Пока с условием k <= n. Его тело – структура Следование, состоящая из двух блоков:

1 – блок ввода элементов массива;

2 –  блок присваивания, в котором значения счетчика j увеличивается на 1;

               3 – блок присваивания, в котором значение счетчика i

      увеличивается на 1;

4 – блок присваивания, в котором счетчик числа столбцов получает значение1;

5  -  структура  Цикл – Пока с условием i<= n,  его тело  -  структура Следование, состоящая из 3 блоков:

1 – блок присваивания, в котором счетчик i получает значение 1, а переменная  pj  значение 1; ;

2 –  структура Цикл - Пока с условием  k <= m. Его тело – структура Следование, состоящая из двух блоков:

1 –  структура Неполная Развилка с условием xki <> 0,  на ее положительной ветви находится блок присваивания;

2– блок присваивания, в котором значение счетчика i

     увеличивается на 1;

3  – блок присваивания, в котором значение переменной j

       увеличивается на 1;

– блок присваивания, в котором j получает значение 1, а переменная

       max значение p1;

7  -  структура Цикл – Пока с условием i <= n. Его тело структура Следование, состоит из 2 блоков:

1 -  структура Неполная Развилка с условием  pi >= max , на ее положительной ветви находится блок присваивания;

2 блок присваивания, в котором j увеличивается на 1;

8блок вывода результата работы.


Запишем этот алгоритм в виде программы на языке Турбо-Паскаль:

Program n8;

 uses crt;

 var x: array[1..100,1..100] of integer;

     i,j,k,m,n: integer;p: array[1..100] of real;

     max:real;

Begin

 clrscr;

 writeln('Введите количество строк в массиве');

 readln(n);

 writeln('Введите количество столбцов в массиве');

 readln(m);

     for i:=1 to n do

 for j:=1 to m do

                        begin

                                 write('Введите x[',i,',',j,']=');

                                 readln(x[i,j]);

end;

 clrscr;

 writeln('Массив Х:');

     for i:=1 to n do 

              begin

                        for j:=1 to m do write(x[i,j]:5);

                        writeln;

end;

     for j:=1 to m do

              begin p[j]:=1;

 for i:=1 to n do if x[i,j]<>0 then p[j]:=p[j]*x[i,j];

                        writeln('Произведение столбца ',j,' : ',p[j]:10:2);

              end;

  max:=p[1];

     for j:=1 to m do

              if p[j]>=max then begin max:=p[j];k:=j;end;

  writeln('Наибольшее произведение находится в столбце ',k,'и  равно ', max:10:2);

                          readln;

End.

Результат работы программы:

Введите количество строк в массиве: 4

Введите количество столбцов в массиве: 5

Введите x[1,1]=3    Введите x[2,1]=4     Введите x[3,1]=2     Введите x[4,1]=8     

Введите x[1,2]=6    Введите x[2,2]=7     Введите x[3,2]=7     Введите x[4,2]=4     

Введите x[1,3]=3    Введите x[2,3]=8     Введите x[3,3]=8     Введите x[4,3]=6     

Введите x[1,4]=9    Введите x[2,4]=3     Введите x[3,4]=4     Введите x[4,4]=9     

Введите x[1,5]=5    Введите x[2,5]=0     Введите x[3,5]=7     Введите x[4,5]=3     

Массив  X:

3  6  3  9  5 

4  7  8  3  0

2  7  8  4  7

8  4  6  9  3

Произведение столбца 1:       192.00

Произведение столбца 2:     1176.00

Произведение столбца 3:     1152.00

Произведение столбца 4:       972.00

Произведение столбца 5:       105.00

Наибольшее произведение находится в столбце 2 и равно  1176.00

 


Задача 9.

В двумерном числовом массиве Аmxn  найти максимальный  и минимальный элемент и поменять их местами.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


В алгоритме использованы обозначения:

i, k  –  «считают» число строк и столбцов массива;

max, min  – принимают значения наибольшего и наименьшего элементов массива;

x, y – «запоминают» соответственно номер строки и номер столбца, в которых находится минимальный элемент массива;

z, g – «запоминают» соответственно номер строки и номер столбца, в которых находится максимальный элемент массива;

c – промежуточная переменная, используемая для  перестановки элементов.

Построенная блок-схема является структурой Следование, состоящей из    9  блоков:

1 – блок ввода данных;

2 – блок присваивания;

3 - структура Цикл - Пока с условием i<=m. Его тело – структура Следование, состоящая из трех блоков:

1 – блок присваивания;

2 –  структура Цикл - Пока с условием k<=n. Его тело – структура Следование, состоящая из двух блоков:

                               1 – блок ввода элементов массива;

2 –  блок присваивания;

3 – блок присваивания;

4 – блок присваивания;

5  -  структура Цикл – Пока с условием i <= m. Его тело структура Следование, состоит из 2 блоков:

1 блок присваивания;

2 - структура Цикл – Пока с условием k <= n. Его тело структура Следование, состоит из 2 блоков:

1 - структура Полная Развилка с условием aik<=min, на ее положительной ветви находится блок присваивания, а на отрицательной ветви – Неполная Развилка с условием aik > max;

2   блок присваивания;

              3 -  блок присваивания;

     6 - блок присваивания;

     7 - блок присваивания;

8 -   структура  Цикл – Пока с условием i<= m,  его тело  -  структура Следование, состоящая из 3 блоков:

1 – блок присваивания;

2 –  структура Цикл - Пока с условием  k <= n. Его тело – структура Следование, состоящая из двух блоков:

1 – блок вывода данных;

 2– блок присваивания;

 3 – блок присваивания.

Запишем этот алгоритм в виде программы на языке Турбо-Паскаль:

Program n9;

 uses crt;

 var a:array[1..100,1..100] of integer;

     i,k,m,n,x,y,z,g:integer;

     max,min,c:integer;

Begin

 clrscr;

 writeln('Введите количество строк в массиве');

 readln(m);

 writeln('Введите количество столбцов в массиве');

 readln(n);

for i:=1 to m do

                   for k:=1 to n do

                             begin

                                      write('Введите a[',i,',',k,']=');

                                      readln(a[i,k]);

                             end;

 clrscr;

writeln('Массив А:');

         for i:=1 to m do  begin

                   for k:=1 to n do write(a[i,k]:5);

                   writeln; end;

min:=a[1,1];max:=min;

         for i:=1 to m do

                    for k:=1 to n do

          begin

                   if a[i,k]<=min then begin x:=i; y:=k; min:=a[i,k];end;

                    if a[i,k]>=max then begin z:=i; g:=k; max:=a[i,k];end;

          end;

writeln('max = ',max ,' min = ',min);

c:=a[x,y];a[x,y]:=a[z,g];a[z,g]:=c;

writeln;

writeln('Новый массив А:');

         for i:=1 to m do begin

                    for k:=1 to n do  write(a[i,k]:5);

                             writeln; end;

  readln;

End.

Результат работы программы:

Введите количество строк в массиве: 3

Введите количество столбцов в массиве: 4

Введите a[1,1]=3    Введите a[2,1]=4     Введите a[3,1]=2     

Введите a[1,2]=7    Введите a[2,2]=6     Введите a[3,2]=9     

Введите a[1,3]=5    Введите a[2,3]=3     Введите a[3,3]=1     

Введите a[1,4]=9    Введите a[2,4]=8     Введите a[3,4]=6     

Массив  A:                                                  Новый массив А:

          3    7    5    9                                     3    7    5    9

4    6    3    8                                     4    6    3    8             

2    9    1    6                                     2    1    9    6

               max = 9       min = 1

  

Задача 10.

Задан двухмерный числовой массив А размером n x n. Сформировать из него два массива В и С, поместив в массив В все элементы массива А, находящиеся выше главной диагонали, а в массив    С – все элементы, находящиеся ниже главной диагонали. Вычислить сумму элементов массивов В и С.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


В алгоритме использованы обозначения:

i, j  –  «считают» число строк и столбцов массива A;

x -  «считает» количество элементов в массиве В;

 y – «считает» количество элементов в массиве С;

sb – принимает значение суммы элементов массива В;

sс – принимает значение суммы элементов массива С.

 

Построенная блок-схема является структурой Следование, состоящей из 10  блоков:

1 – блок ввода данных;

2 – блок присваивания;

3 -   структура  Цикл – Пока с условием  i<=n,  его тело  -  структура Следование, состоящая из 3 блоков:

1 – блок присваивания;

2 –  структура Цикл - Пока с условием  j<=n. Его тело – структура Следование, состоящая из двух блоков:

1 –  блок ввода элементов массива А;

2– блок присваивания;

 3 – блок присваивания;

– блок присваивания;

5 - структура Цикл - Пока с условием i<=n. Его тело – структура Следование, состоящая из трех блоков:

1 – блок присваивания;

2 –  структура Цикл - Пока с условием  j<=n.  Его тело – структура Следование, состоящая из трех блоков:

1 – структура Полная Развилка с условием i<j, на ее положительной ветви формируется массив В и вычисляется сумма его элементов, на отрицательной ветви  - Неполная Развилка с условием i>j , на положительной ветви которой формируется массив С и сумма его элементов;

2 -  блок присваивания;

3 – блок присваивания;

6 – блок присваивания;

7  -  структура Цикл – Пока с условием i<=x. Его тело структура

 Следование, состоит из 2 блоков:

1 - блок вывода элементов массива B;

2 блок присваивания;

8блок присваивания;

9 – структура Цикл – Пока  с условием i<=y. Его тело структура Следование, состоит из 2 блоков:

1 - блок вывода элементов массива С;

2 блок присваивания;

10 – блок вывода сумм элементов массивов С и В  (sb, sc).

Запишем этот алгоритм в виде программы на языке Турбо-Паскаль:

Program n10;

 uses crt;

 var a:array[1..100,1..100] of integer;

     b,c:array[1..10000] of integer;

     i,j,n,x,y,sb,sc:integer;

Begin

 clrscr;

 writeln('Введите размерность матрицы');

 readln(n);

         for i:=1 to n do

                   for j:=1 to n do

                             begin

                                      write('Введите a[',i,',',j,']=');

                                      readln(a[i,j]);

                                      if i<j then begin x:=x+1; b[x]:=a[i,j]; sb:=sb+b[x];end;

                                       if i>j then begin y:=y+1; c[y]:=a[i,j]; sc:=sc+c[y];end;

                              end;

  clrscr;

  writeln('массив A:');

         for i:=1 to n do

                    begin  for j:=1 to n do

                             write(a[i,j]:5);

                             writeln;

                   end;

 writeln('массив B:');

 for i:=1 to x do   write(b[i]:5);

                   writeln;

                   writeln('массив C:');

                            for i:=1 to y do  write(c[i]:5);

                                      writeln;

                                      writeln('Сумма элементов массива B: ',sb,'');

                                      writeln('Сумма элементов массива C: ',sc,'');

End.

Результат работы программы:

Введите размерность матрицы 5

Введите a[1,1]=6    Введите a[2,1]=8     Введите a[3,1]=3     Введите a[4,1]=7     

Введите a[1,2]=3    Введите a[2,2]=2     Введите a[3,2]=1     Введите a[4,2]=1     

Введите a[1,3]=4    Введите a[2,3]=1     Введите a[3,3]=5     Введите a[4,3]=5     

Введите a[1,4]=0    Введите a[2,4]=10   Введите a[3,4]=8     Введите a[4,4]=6     

Введите a[1,5]=9    Введите a[2,5]=7     Введите a[3,5]=2     Введите a[4,5]=9     

Введите a[5,1]=3

Введите a[5,2]=8

Введите a[5,3]=4

Введите a[5,4]=3

Введите a[5,5]=7

Массив  A:                            Массив B:                                       Массив  C:

     6    3    4    0    9            3  4  0   9  1  10  7  8  2   9          8  3  1  7  1  5  3  8  4  3   

     8    2    1    10  7

     3    1    5    8    2

     7    1    5    6    9

     3    8    4    3    7

Сумма элементов массива B: 53                   Сумма элементов массива C: 43


Задача  11.

 В двухмерном числовом массиве Xmxn найти минимальный элемент, а затем два произведения ненулевых элементов массива, которые расположены до и после минимального. Определить, какое из произведений является большим.

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


         В алгоритме использованы обозначения:

i, j  –  «считают» число строк и столбцов массива X;

min  –  принимает значение минимального  элемента массива;

k  – «запоминает» номер строки, в которой находится минимальный  элемент;

r  –  «запоминает» номер столбца, в котором находится минимальный элемент;

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

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

Построенная блок-схема является структурой Следование, которая состоит из 17  блоков.

1 – блок ввода данных;

2 – блок присваивания;

3 - структура Цикл - Пока с условием i<=m. Его тело – структура Следование, состоящая из трех блоков:

1 – блок присваивания;

2 –  структура Цикл - Пока с условием  j <= n.  Его тело – структура Следование, состоящая из 2 блоков:

1 – блок ввода элементов массива X;

2 -  блок присваивания;

3 – блок присваивания;

4, 5 – блоки  присваивания;

6 - структура  Цикл – Пока с условием  i<=m,  его тело  -  структура Следование, состоящая из 3 блоков:

1 – блок присваивания;

2 –  структура Цикл - Пока с условием  j<=n. Его тело – структура Следование, состоящая из двух блоков:

1 –  структура Неполная Развилка с условием xij <=minна ее положительной ветви находится блок присваивания, в котором определяется минимальный элемент и запоминаются его индексы;

2 –  блок присваивания;

 3 – блок присваивания;

– блок присваивания;

8 - структура Цикл – Пока с условием i<=k-1. Его тело структура Следование, состоит из 3 блоков:

1 - блок присваивания;

2 структура Цикл - Пока с условием  j<=n. Его тело – структура Следование, состоящая из двух блоков:

1 –  структура Неполная Развилка с условием xij ≠0,  на ее положительной ветви находится блок присваивания;

2 –  блок присваивания;

3 – блок присваивания;

9блок присваивания;

10 – структура Цикл – Пока  с условием j<=r-1. Его тело структура Следование, состоит из 2 блоков:

1 –  структура Неполная Развилка с условием xkj ≠0,  на ее положительной ветви находится блок присваивания;

2 –  блок присваивания;

11     блок присваивания;

12 -  структура Цикл – Пока с условием i<=m. Его тело структура Следование, состоит из 3 блоков:

1 - блок присваивания;

2 структура Цикл - Пока с условием  j<=n. Его тело – структура Следование, состоящая из двух блоков:

1 –  структура Неполная Развилка с условием xij ≠0,  на ее положительной ветви находится блок присваивания;

2 –  блок присваивания;

3 – блок присваивания;

13 - блок присваивания;

14 - структура Цикл – Пока  с условием j<=n. Его тело структура Следование, состоит из 2 блоков:

1 –  структура Неполная Развилка с условием xkj ≠0,  на ее положительной ветви находится блок присваивания;

2 –  блок присваивания;

15 – блок вывода искомых произведений;

16 – структура Полная Развилка с условием p1 > p2, на положительной ветви находится блок вывода данных, а  на отрицательной ветви  - Полная Развилка с условием p2 > p1, на ее обеих ветвях находятся блоки вывода полученных данных.

17 - блок вывода полученного результата.

Запишем этот алгоритм в виде программы на языке Турбо-Паскаль:

Program n11;

 uses crt;

 var x:array[1..100,1..100] of integer;

     i,j,n,m,min,k,r:integer; p1,p2:real;

Begin

  clrscr;

  writeln('Введите количество строк в массиве');

  readln(m);

  writeln('Введите количество столбцов в массиве');

  readln(n);

     for i:=1 to m do

              for j:=1 to n do

    begin

      write('ВВедите x[',i,',',j,']=');

      readln(x[i,j]);

    end;

  clrscr;min:=x[1,1];

  writeln('Массив X:');

     for i:=1 to m do

   begin

              for j:=1 to n do

   begin

              if x[i,j]<=min then

       begin k:=i;r:=j;min:=x[i,j];end;

       write(x[i,j]:5);

     end; writeln;

   end;

  writeln('Минимальный элемент ',min);

  p1:=1;p2:=1;

     for i:=1 to k-1 do

              for j:=1 to n do

                        if x[i,j]<>0 then p1:=p1*x[i,j];

  for j:=1 to r-1 do

    if x[i,j]<>0 then p1:=p1*x[k,j];

  writeln('Первое произведение равно ',p1:15:0);

      for i:=k+1 to m do

              for j:=1 to n do

                        if x[i,j]<>0 then p2:=p2*x[i,j];

     for j:=r+1 to n do

                        if x[i,j]<>0 then p2:=p2*x[k,j];

  writeln('Второе произведение равно ',p2:15:0);

      if p1>p2 then writeln('Первое произведение больше');

              if p2>p1 then writeln('Второе произведение больше')

     else writeln('Произведения равны');

  readln;

End.

Результат работы программы:

Введите количество строк в массиве: 3

Введите количество столбцов в массиве: 4

Введите x[1,1]=9    Введите x[2,1]=5     Введите x[3,1]=4     

Введите x[1,2]=7    Введите x[2,2]=0     Введите x[3,2]=6     

Введите x[1,3]=2    Введите x[2,3]=1     Введите x[3,3]=9     

Введите x[1,4]=3    Введите x[2,4]=8     Введите x[3,4]=1     

Массив X:

      9    7    2    3

      5    0    1    8

      4    6    9    1

  Минимальный элемент = 0

  Первое произведение равно   1890

  Второе произведение равно    1944

  Второе произведение больше.

 


ЗАКЛЮЧЕНИЕ

Углубленное изучение теоретического материала по теме «Нелинейные алгоритмы обработки числовых массивов», позволило мне:

·     написать реферативную часть дипломной работы;

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

·        вывести результат работы этих программ;

Кроме этого, как учитель информатики я  приобрела следующие  умения:

·        понимать  значение данной темы в школьном курсе информатики;

·        видеть  взаимосвязь  уроков в рамках темы;

·        прогнозировать ожидаемые результаты;

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

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

·        составить программу факультативных занятий в 8-9 классах по теме «Нелинейные алгоритмы обработки числовых массивов».

Практический материал дипломной работы может быть  использован учителями информатики для углубленного изучения учащимися темы «Алгоритмизация и программирование».

 


ЛИТЕРАТУРА

1.           Алексеев Е.Р., Чеснокова О.В. Турбо Паскаль 7.0 – М., НТ Пресс, 2006 – 320 с.: ил. - (Полная версия).

2.           Горностаева Т.Н. Алгоритмы: Учебное пособие. – Уссурийск, Изд. УГПИ, 2008.  - 108 с.

3.           Горностаева Т.Н. Избранные вопросы информатики: Учебное пособие. – Уссурийск, Типография ООО «Экспресс-сервис», 2007.  - 102 с.

4.           Заварыкин В.М., Житомирский В.Г., Лапчик М.П. Техника вычислений и алгоритмизация. Учебное пособие для студентов педагогических институтов. - М., Просвещение, 1987г. – 157 с.

5.           Лапчик М.П.  Вычисления. Алгоритмизация. Программирование. - М., Просвещение, 1988г.

6.           Лапчик М.П., Семакин И.Г. Методика преподавания информатики: Учебное пособие для студ. пед. вузов. / Под общей редакцией Лапчика М.П.  – М.: , АКАДЕМА, 2001г.

7.           Могилев А.В., Пак Н.И., Хеннер Е.К. Информатика: Учебное пособие для студентов педагогических вузов. / Под редакцией Е.К. Хеннера.  -  2-е издание,  -  М., АКАДЕМА, 2001г. - 816 с.

8.           Могилев А.В., Пак Н.И., Хеннер Е.К.  Практикум по информатике: Учебное пособие для студентов педагогических вузов. / Под редакцией Е.К. Хеннера.  -  2-е издание,  -  М., АКАДЕМА, 2001г. – 606 с.

9.           Пархоменко Е.А., Сюбаева Ю.В. Алгоритм. Способы описания алгоритма: Учебно-методическое пособие для учителей информатики. – Коломна, Лицей № 4, 2005г.  – 105 с.

10.     Интернет-курс «Основы информатики» [электронный ресурс] - Режим доступа: http://www.tisbi.ru/resource/Lib/Elbook/Elena/frame2.htm   - свободный.

 

                          

 

 

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Углубленное изучение теоретического материала по теме «Нелинейные алгоритмы обработки числовых массивов»"

Методические разработки к Вашему уроку:

Получите новую специальность за 2 месяца

Инженер по автоматизации производства

Получите профессию

Няня

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Краткое описание документа:

Углубленное изучение теоретического материала по теме «Нелинейные алгоритмы обработки числовых массивов», позволило мне: • написать реферативную часть дипломной работы; • составить программы решения задач в программной среде Турбо Паскаль, используя построенные блок-схемы; • вывести результат работы этих программ; Кроме этого, как учитель информатики я приобрела следующие умения: • понимать значение данной темы в школьном курсе информатики; • видеть взаимосвязь уроков в рамках темы; • прогнозировать ожидаемые результаты; • предвидеть трудности, с которыми могут столкнуться учащиеся при изучении данной темы, и планировать работу по устранению возможных ошибок учащихся; • подбирать дидактический материал с учетом индивидуальных особенностей учащихся, их личностных мотивов; • составить программу факультативных занятий в 8-9 классах по теме «Нелинейные алгоритмы обработки числовых массивов». Практический материал дипломной работы может быть использован учителями информатики для углубленного изучения учащимися темы «Алгоритмизация и программирование».

Скачать материал

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

6 663 647 материалов в базе

Скачать материал

Другие материалы

Вам будут интересны эти курсы:

Оставьте свой комментарий

Авторизуйтесь, чтобы задавать вопросы.

  • Скачать материал
    • 10.01.2013 2300
    • DOCX 707.5 кбайт
    • Оцените материал:
  • Настоящий материал опубликован пользователем Щербатова Ксения Сергеевна. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт

    Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.

    Удалить материал
  • Автор материала

    Щербатова Ксения Сергеевна
    Щербатова Ксения Сергеевна
    • На сайте: 9 лет и 3 месяца
    • Подписчики: 0
    • Всего просмотров: 28897
    • Всего материалов: 10

Ваша скидка на курсы

40%
Скидка для нового слушателя. Войдите на сайт, чтобы применить скидку к любому курсу
Курсы со скидкой

Курс профессиональной переподготовки

Технолог-калькулятор общественного питания

Технолог-калькулятор общественного питания

500/1000 ч.

Подать заявку О курсе

Курс профессиональной переподготовки

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

Учитель информатики

300 ч. — 1200 ч.

от 7900 руб. от 3650 руб.
Подать заявку О курсе
  • Этот курс уже прошли 20 человек

Курс профессиональной переподготовки

Информатика: теория и методика преподавания с применением дистанционных технологий

Учитель информатики

300 ч. — 1200 ч.

от 7900 руб. от 3650 руб.
Подать заявку О курсе
  • Этот курс уже прошли 18 человек

Курс профессиональной переподготовки

Управление сервисами информационных технологий

Менеджер по управлению сервисами ИТ

600 ч.

9840 руб. 5600 руб.
Подать заявку О курсе
  • Сейчас обучается 26 человек из 19 регионов
  • Этот курс уже прошли 34 человека

Мини-курс

Психологические вызовы современного подростка: риски и профилактика

6 ч.

780 руб. 390 руб.
Подать заявку О курсе
  • Сейчас обучается 124 человека из 49 регионов
  • Этот курс уже прошли 34 человека

Мини-курс

Профессиональное развитие педагога: успехи и карьера в образовании

4 ч.

780 руб. 390 руб.
Подать заявку О курсе
  • Этот курс уже прошли 10 человек

Мини-курс

Психологические особенности педагогического общения

6 ч.

780 руб. 390 руб.
Подать заявку О курсе
  • Сейчас обучается 32 человека из 18 регионов
  • Этот курс уже прошли 20 человек
Сейчас в эфире

Информационная интоксикация: методы исцеления

Перейти к трансляции