Текстовый файл по теме Алгоритмизация и программирование
Основы алгоритмизации
Слово «алгоритм» происходит от algorithmi - латинской формы написания имени великого узбекского математика IX века Мухаммеда Бен Мусса аль-Хорезми, который сформулировал правила выполнения арифметических действий в десятичной системе счисления.
Алгоритм – четкое описание последовательности действий или система формальных правил, приводящих к решению задачи. Каждое действие (указание) называют командой.
Построение алгоритма для решения задачи из какой-либо области требует от человека глубоких знаний в этой области, бывает, как правило, связано с тщательным анализом поставленной задачи, сложными, иногда очень громоздкими рассуждениями.
Формальное исполнение алгоритма – означает отвлечение от поставленной задачи и сводится к строгому выполнению команд алгоритма. Исполнителем может выступать человек, станок, машина, программа, ПК и т.п.
Алгоритм можно записать несколькими способами:
на естественном языке (задачи на построение в планиметрии);
в виде блок-схем (линии соединения не должны пересекаться);
на специальном языке (алгоритмическом или программирования).
Пример. Запишем формулу объема куба.
На естественном языке V=13 EMBED Equation.3 1415. На языке программирования V=4*PI*R*R*R/3.
На языке блок-схем 13 SHAPE \* MERGEFORMAT 1415
Блок-схема – графическое изображение структуры алгоритма, в которой каждый этап процесса обработки данных представляется в виде графических символов (блоков) – геометрических фигур, в контуры которых внесено содержание операции.
Форма, размеры блоков, их перечень, наименование, правила выполнения схем определены ГОСТом 19.701-90.
Свойства алгоритма:
дискретность – преобразование исходных данных в результат осуществляется по времени дискретно;
детерминированность (определенность) – каждое правило алгоритма должно быть четким, однозначным и не оставлять место для произвола.
Конечность (результативность) – алгоритм должен приводить к решению задачи за конечное и разумное число шагов;
Массовость – алгоритм разрабатывается в общем виде, то есть он должен быть применим для некоторого класса задач, различающихся лишь исходными данными.
С помощью компьютера решаются только те задачи, автоматизируются только те виды деятельности человека, для выполнения которых разработаны (или могут быть разработаны) алгоритмы.
Программа – это алгоритм, записанный на алгоритмическом языке.
Задачи для самостоятельного решения по теме: «Основы алгоритмизации»
Имеются два кувшина емкостью 3 л и 8 л. Напишите алгоритм, выполняя который можно набрать из реки 7 л воды (разрешается пользоваться только этими кувшинами). Решение оформить в виде трассировочной таблицы. -2 б.
Некий человек должен перевезти через реку волка, козу и капусту. Каждый раз он может перевезти только либо волка, либо козу, либо капусту. На одном берегу нельзя оставить вместе козу и волка, а также козу и капусту. Составьте алгоритм переправы на другой берег. – 1 б.
Дозор в составе двух человек подошел к реке. Мост разрушен, а река слишком глубока и широка, чтобы переправиться через нее вброд или вплавь. Около берега в маленькой лодке проплывали два мальчика. Как переправиться на этой лодке через реку, если она может выдержать только либо одного взрослого, либо двух мальчиков? – 3 б.
На полустанке одноколейной железной дороги остановился поезд в составе тепловоза и пяти вагонов. На этом полустанке имеется небольшой тупик, в котором может поместиться тепловоз с двумя вагонами или три вагона. Следом за поездом к этому же полустанку подошел пассажирский поезд. Составьте алгоритм, позволяющий пропустить пассажирский поезд.
-4 б.
После занятий 4 студента решали и отлаживали задачи на ПК. Первый полностью отладил задачу за N минут (число вводится), все последующие тратили времени на 10 минут больше предыдущего. Сколько компьютерного времени им понадобилось? – 1 б.
Заколдованный принц нашел 4 волшебных палочки, длины их a, b, c и d. Чтобы расколдоваться, ему нужно из них построить «волшебный треугольник» с наибольшим периметром, затем встать внутрь этого треугольника. Определить, из каких волшебных палочек построен данный треугольник, а также найти его периметр. Если расколдоваться не удастся, то нужно напечатать сообщение об этом. – 2 б.
Хакер взламывал пароль банковской сети. Ему нужно найти число, равное
13 EMBED Equation.3 1415
И ввести первые восемь цифр, стоящие в этом числе после запятой. Найти эти цифры. 3 б.
Одинокий путник. На пути у одинокого путника, идущего в глубоком тумане по экрану монитора, встречается препятствие, стенки которого параллельны краям монитора. Вам требуется найти способ определения формы препятствия. Путешественник не ориентируется в пространстве, у него нет карты, и он не может запоминать точки, в которых он был, но он знает, где у него правая рука, а где левая.
Особенности задачи.
А. Путник не может использовать свои координаты. Таким образом, для принятия решения о том, обошёл ли он всё препятствие, путник может использовать только типы пройденных стенок. Всего типов стенок 4.
Б. Под формой препятствия подразумевается последовательность типов стенок препятствия. - 5б.
*Восемь монет выложены в ряд:
Необходимо собрать их в две группы по 4 штуки в каждой группе (в которой монеты, например, лежат одна на другой), перекладывая за каждый ход одну монету. При этом перекладываемую монету можно соединять лишь с монетой, отделенной от неё ровно двумя монетами (разрозненными или объединенными в группу). -8б.
Опишите правила перехода улицы на нерегулируемом перекрестке (на пешеходном переходе нет светофора). - 3б.
Даны два натуральных числа А=anan-1a1a0, B=bmbm-1b1b0. Составьте алгоритм сложения в столбик двух натуральных чисел. Предполагается, что операция сравнения двух натуральных чисел для человека является выполнимой. - 3б.
Два встречных поезда, в каждом из которых паровоз и 21 вагон, встретились на дороге с одним тупиком
Тупик вмещает 11 вагонов или 10 вагонов и паровоз. Как поездам разъехаться (т.е. как должны маневрировать машинисты, чтобы каждый поезд продолжал движение в своем направлении)? Постройте систему команд исполнителя «Диспетчер». Запишите последовательность команд, которая позволит поездам разъехаться. - 3б.
13. Есть двое песочных часов: на 3 минуты и на 8 минут. Для приготовления эликсира бессмертия его необходимо варить ровно 7 минут. Как это сделать? Придумайте систему команд исполнителя «Колдун». Запишите последовательность команд этого исполнителя для приготовления эликсира. - 3б.
Темы для рефератов
Методы разработки алгоритмов [3].
Метод частных целей.
Метод подъема.
Программирование с отходом назад.
Алгоритмы ветвей и границ.
Жизненный цикл программного обеспечения [3].
Создание программного продукта [1].
Методология проектирования программных продуктов.
Структурное проектирование и программирование.
Объектно–ориентированное программирование.
Реляционные языки манипулирования данными [1, 4].
Абстрактная машина Поста [2, 3].
Машина Тьюринга [2, 3].
Нормальные алгоритмы Маркова [2, 3].
Рекурсивные функции [2, 3].
Контрольные вопросы
Какую последовательность предписаний можно назвать алгоритмом? Приведите примеры алгоритмов.
Что понимается под командой алгоритма?
Могут ли автоматические устройства быть исполнителями алгоритмов?
Какие свойства алгоритмов позволяют человеку автоматизировать их выполнение?
Что такое блок-схема?
В чем заключается формальность выполнения алгоритма?
Что такое программа?
Сформулируйте определение метода частных целей?
В чем суть программирования с отходом назад?
Дайте сравнительную характеристику метода подъема и метода частных целей разработки алгоритмов.
Что такое ветви и границы в алгоритмах ветвей и границ?
Перечислите способы повышения эффективности программ.
Что означает фраза: «Машины Поста и Тьюринга являются абстрактными машинами»?
Для чего предназначены машины Поста и Тьюринга?
Как «устроена» машина Поста?
Перечислите и запишите команды машины Поста.
С помощью бумаги, карандаша и стиральной резинки «исполните» вместо машины Поста программы сложения чисел из текста.
Составьте (и проверьте) программу для машины Поста, создающую на ленте копию заданной последовательности меток справа от нее.
Пользуясь предыдущей программой, составьте программу умножения чисел для машины Поста.
Как «устроена» машина Тьюринга?
Каков принцип исполнения программы машиной Тьюринга?
Сравните машины Поста и Тьюринга. Укажите различия.
Выполните вместо машины Тьюринга примеры программ из текста.
Каким образом могут быть обобщена машина Тьюринга?
Что такое ассоциативное исчисление?
Постройте дедуктивную цепочку от слова «мука» к слову «торт», заменяя каждый раз по одной букве так, чтобы каждый раз получалось слово.
Дайте определение нормального алгоритма Маркова.
В чем состоит принцип нормализации алгоритмов?
Охарактеризуйте способы композиции нормальных алгоритмов.
Как алгоритм может быть связан с рекурсивной функцией?
Дайте определения частичной, полувычислимой и вычислимой функции.
В чем состоит тезис Черча в слабейшей и в обычной формах?
Перечислите простейшие функции.
Перечислите элементарные операции.
Чем отличается рекурсивная функция от примитивно-рекурсивной?
Дайте определение частично-рекурсивной функции.
Что называется массовой проблемой? Что означает алгоритмическая разрешимость массовой проблемы?
Основы программирования
Классификация языков программирования
Замечание. Процедурные языки ориентированы на машинное мышление. А программа на языке логического программирования Пролог не является алгоритмом, а представляет собой запись условия задачи на языке формальной логики.
Язык программирования Pascal
Введение в язык программирования Турбо Паскаль 7.0
Первая версия языка программирования Паскаль была разработана на кафедре информатики Стэнфордского университета швейцарским ученым Никлаусом Виртом в 1968 году. Признание программистов и простых пользователей пришло вследствие появления языка программирования Турбо Паскаль (ТП) – диалекта языка, созданного американской фирмой Борланд. Эта фирма объединила очень быстрый компилятор с редактором текста и добавила к стандартному Паскалю мощное расширение.
Характеристика Турбо Паскаль 7.0:
многооконный режим работы;
возможность использования мыши;
возможность использования при написании программ языка программирования низкого уровня Ассемблер;
возможность создавать объектно-ориентированные программы;
возможность выделять определенным цветом различные элементы исходного текста (зарезервированные слова, идентификаторы, числа и др., что упрощает правку программы);
Лингвистическая концепция языка Паскаль (основные принципы):
Структурное программирование, то есть оформление последовательностей команд как замкнутых функций или процедур, объединение данных, связанных по смыслу, в сложные структуры (поэтому повышается наглядность текста и упрощается его отладка).
Проектирование сверху вниз, то есть программист разбивает свою задачу на несколько более простых, после чего каждая из задач решается по отдельности, а затем компонуются результаты проектирования простых задач и решается задача проектирования сверху вниз в целом.
Объектно-ориентированное программирование, то есть данные объединяются со свойственными им операциями обработки в некоторые объекты (инкапсулируются), при этом свойства одних объектов могут передаваться другим (переносится на другие классы объектов), имеет место явление полиморфизма.
Структурное программирование – процесс обработки алгоритмов с помощью структурных блок-схем.
Программирование сверху вниз1 – это процесс пошагового разбиения алгоритма на все более мелкие части с целью получения таких элементов, для которых можно написать конкретные команды.
Структурное программирование сверху вниз1 – это процесс программирования сверху вниз, ограниченный использованием структурных блок-схем.
Этапы разработки программы на языке Паскаль.
Программирование как процесс создания программы формально состоит из выбора языка программирования и замены элементов блок-схемы алгоритма соответствующими операторами. Текст программы записывается и редактируется как обычный документ. Переводом программы на машинный язык (в последовательность кодовых слов процессора) занимается программа-компилятор. На вход компилятору поступает исходный текст программы, а результатом работы является программа в машинных кодах (объектный модуль). Так как многие программы выполняют одни и те же действия (ввод/вывод, вычисление математических функций и т.п.), поэтому были созданы библиотеки подпрограмм, где алгоритмы этих действий хранятся переведенными на машинный язык. При написании программы требуется указать библиотеку, из которой будет вызываться подпрограмма. Связыванием программы и библиотек занимается программа-компоновщик (редактор связей). Компоновщик производит загрузочный модуль (программу в машинных кодах), полностью готовый к запуску и выполнению.
Процесс программирования на языке высокого уровня Паскаль состоит из следующих действий:
ввод и редактирование текста программы;
трансляция;
отладка.
Для выполнения каждого этапа применяются специальные средства интегрированной среды программирования Паскаль: редактор текста (editor), компилятор (compiler), компоновщик (linker), отладчик (debugger).
Схема этапов разработки программы
Интерфейс программы Turbo Pascal 7.0
Для запуска Паскаля щелкните два раза по файлу R:\BP7\BIN\TURBO.EXE
Alt+Enter –распахнуть окно программы на весь экран.
По команде File/New – открывается новый лист (синий, по умолчанию имеет имя NONAME00.PAS), в котором производится набор текста программы.
Чтобы скопировать текст программы или полученные результаты в Ms Word, необходимо воспользоваться системным меню (Изменить/Пометить, выделить мышкой, Изменить/Копировать)
Перед первым запуском программы её сохраняют (имя может состоять не более, чем из 8 латинских символов) File/Save as. Если программа уже была сохранена, но производилось редактирование, то для сохранения подают команду File/Save.
Запуск набранной программы на выполнение осуществляется по команде строки меню RUN или Ctrl+F9. Нажатие клавиш ALT+F5 приводит к появлению на экране результатов программы. Пункт меню Output позволяет при отладке программы одновременно видеть и часть программы и результаты вычислений.
Правила написания программ на языке Паскаль.
4.1 Главными элементами любой программы являются переменные, константы и операторы. Переменная – это ячейка (или несколько ячеек) оперативной памяти компьютера. Такой ячейке присвоено определенное имя, её содержимое может изменяться в ходе выполнения программы.
Вид информации, содержащейся в ячейке, набор преобразований, которые можно выполнять над этой информацией, и множество допустимых значений определяются типом переменной. Константа отличается от переменной тем, что её значение фиксировано и не может быть изменено в ходе выполнения программы.
Операторы задают те или иные действия, которые должна выполнять программа. Паскаль состоит приблизительно из 80 зарезервированных слов и специальных символов, которые могут использоваться только в качестве имен операторов, названий операций. Алфавит языка составляют буквы лат. Алфавита, цифры и специальные символы (одиночные или пары).
Таблица специальных символов.
:= присваивание переменной (слева от символа) значения выражения (справа от символа)
; разделитель операторов в программе
() скобки для арифметических и логических выражений
: разделитель в описаниях переменных и формате операторов вывода
.. многоточие для списков
+ - / * бинарные операции (не только арифметические)
= логическое равенство, элемент описания констант и типов
<> логическое неравенство
< > отношение “меньше чем” и “больше чем”
<= меньше или равно
>= больше или равно
. конец программы, модуля, десятичная точка в константах вещественного типа
ограничители константы строкового типа
{} пары скобок для комментариев
(* *)
, разделитель элементов списка
[ ] скобки для ссылки на элемент массива или уазания диапазона значений индекса
В общем случае программа на языке Паскаль может иметь 7 разделов:
заголовок программы program
описание меток label
описание констант const
описание типов переменных type
описание переменных var
описание функций и процедур function/ procedure
раздел операторов begin
Операторы отделяются друг от друга точкой с запятой (;), а завершается раздел операторов служебным словом END, после которого в обязательном порядке ставится точка (.).
Таблица «Арифметические операции»
операция
Знак операции
Тип аргумента
Тип результата
Сложение
+
Integer, real
Integer, real
Умножение
*
Integer, real
Integer, real
Вычитание
-
Integer, real
Integer, real
Деление
/
Integer, real
real
Целочисленное деление
DIV
integer
integer
Остаток от деления
MOD
integer
integer
Таблица «Элементарные функции»
функция
назначение
функция
назначение
ABS(X)
Модуль числа Х
LN(X)
Натуральный логарифм
SQR(X)
Квадрат числа X
SQRT(X)
Корень квадратный
SIN(X)
Синус числа Х
INT(X)
Значение целой части Х
COS(X)
Косинус числа Х
TRUNC(X)
Отбрасывание дробной части Х
ARCTAN(X)
арктангенс
ROUND(x)
Округление Х в сторону ближайшего целого
EXP(X)
Экспонента
FRAC(x)
Значение дробной части Х
Примечание. Выражение 5х+3 запишется так: exp((x+3)*ln(5)).
4.3 Типы переменных.
SHORTINT – короткое целое число со знаком от -128 до 127 занимает 1 байт памяти.
INTEGER – целое число со знаком от -32768 до 32767 занимает 2 байта памяти.
LONGINT – длинное целое число со знаком от -2147483648 до 2147483647 занимает 4 байта памяти.
BYTE – короткое целое число без знака от 0 до 255 занимает 1 байт памяти.
WORD – целое число без знака от 0 до 65535 занимает 2 байта памяти.
SINDLE – вещественное число одинарной точности от 1,5*10-45 до 3,4*1038 занимает 4 байта памяти.
REAL - вещественное число от 2,9*10-39 до 1,7*1038 занимает 6 байт памяти. Может быть с фиксированной точкой и с плавающей запятой. Число не может начинаться или заканчиваться точкой, не может содержать только степень, а показатель степени не может быть дробным и в записи числа не должны использоваться пробелы.
DOUBLE - вещественное число двойной точности от 5,0*10-324 до 1,1*10308 занимает 8 байт памяти.
EXTENDED - вещественное число повышенной точности от 3,4*10-4932 до 3,4 *104932 занимает 10 байт памяти.
COMP – целое число в формате вещественного от -9,2*1018 до 9,2*1018 занимает 8 байт памяти. Этот тип является своеобразным гибридом целого и вещественного типов: с одной стороны, переменные и константы этого типа могут иметь только целые значения (свойство целых типов), с другой стороны этот тип не является, в отличие от целых типов, порядковым (свойство вещественных типов).
BOOLEAN - занимает 1 байт памяти, BYTEBOOL - занимает 1 байт памяти, WORDBOOL - занимает 2 байта памяти, LONGBOOL - занимает 2 байта памяти. Значению FALSE соответствует число 0, а значению TRUE – любое число, отличное от 0.
BOOLEAN - логический тип данных, результат которых равен TRUE (истина) или FALSE (ложь). Свои значения переменные логического типа получают в результате выполнения операций сравнения (<, <=, >, >=, =, <>) или логических операций (NOT, AND, OR, XOR).
BYTEBOOL, WORDBOOL и LONGBOOL введены для обеспечения совместимости с оболочкой Windows.
CHAR – переменные и константы этого типа могут принимать значения из множества символов ASCII кода. Это могут быть любые символы: буквы, цифры, знаки препинания и специальные символы.
STRING и PCHAR – в отличие от других стандартных типов, являются структурированными.
STRING - строка символов с максимальной длинной 255 знаков.
PCHAR – поддерживает формат представления строк, признаком конца которых служит 0 и которые называются ASCIIZ-строками. Такие строки используются в Windows.
POINTER – стандартный указательный тип. Значениями переменных и констант указательного типа являются адреса оперативной памяти, состоящие из адреса сегмента (1 слово = 2 байта) и смещения (1 слово = 2 байта). Адрес сегмента хранится в старшем слове, а смещение – в младшем слове полного адреса. Элементы указательного типа, в отличие от определяемых пользователем указательных типов, могут содержать адрес переменной любого типа.
TEXT – стандартный текстовый тип используется для описания текстовых файлов.
Составление линейных программ
В линейных алгоритмических структурах операторы выполняются последовательно друг за другом, при этом используются операторы ввода (readln), вывода (writeln) и присваивания (:=).
Обозначение в блок-схеме
Оператор в программе
13 EMBED PBrush 1415
WRITELN
13 EMBED PBrush 1415
READLN
13 EMBED PBrush 1415
ПРИСВОЕНИЕ (:=)
13 EMBED PBrush 1415
IF THENELSE
REPEAT UNTIL
WHILE DO
13 EMBED PBrush 1415
FOR := TO DO
Задача 1 Составьте программу вычисления объема шара.
Листинг программы
Program obiom;
USES CRT;
Const pi=3.14159;
Var r, v: real;
Begin
CLRSCR;
Write(введите радиус круга ’);
Readln(r);
V:=4/3*pi*r*sqr(r );
Writeln(объем шара ’, v);
End.
Графический способ записи алгоритмов - блок-схема. Составим блок- схему к задаче 1.
Задача 2. Составить программу «знакомство» (ввести фамилию и имя, вывести сообщение на экран «Вас зовут »).
Листинг программы
program z2;
Uses CRT;
Var fam, name:string;
BEGIN
CLRSCR;
writeln('vvedy fam');
readln(fam);
writeln('vvedy name');
readln(name);
writeln('Вас зовут ’, fam, ' ',name);
END.
Результаты выполнения программы
vvedy fam
Petrov
vvedy name
Ivan
Вас зовут Petrov Ivan
Задача 3. Составить программу, которая меняет местами первую и последнюю цифры введенного трехзначного числа.
Пусть x – введенное трехзначное число; x1 – полученное трехзначное число; a – число сотен числа х, b – число десятков числа х; c – число единиц числа х.
Число х=а*100 + b*10 + c, тогда число x1=c*100 + b*10 + a.
Листинг программы
program z3;
Uses CRT;
Var x,x1,a,b,c:integer;
BEGIN
CLRSCR;
writeln('vvedy x');
readln(x);
a:=x div 100;
c:=x mod 10;
b:= (x div 10) mod 10;
x1:= c*100 + b*10 + a;
writeln('x1= ’, x1);
END.
Результаты выполнения программы
vvedy x
123
x1=321
Составление программ с условием
В альтернативе (алгоритм с условием, ветвление) проверяется условие и в зависимости от результатов проверки выполняется то или иное действие.
Краткая форма оператора условия
Полная форма оператора условия
if условие then оператор1;
if условие then оператор1 else оператор2;
Блок-схема с условием
Любая встретившаяся часть ELSE соответствует ближайшей к ней «сверху» части THEN условного оператора. Перед ELSE не ставится точка с запятой, так как это один оператор. Если за словами ELSE и THEN необходимо выполнить группу операторов, то тогда используются операторные скобки begin end, а такая структура называется вложенной:
Begin
If условие then begin
Оператор1;
Оператор2;
оператор n
end
else begin
Оператор1;
Оператор2;
оператор n
end;
End.
Задача4
Составьте программу для вычисления Y по заданному X. Y= 13 EMBED Equation.3 1415 13 EMBED Equation.3 1415
Program zadanie;
Var x, y: real;
Begin
Writeln(введите x= ’);
Readln(x);
If x<=10 then y:=210 else y:=x*x*x;
Writeln(при х= ’, х, y= ’, y);
End.
Задача 5
Найти корни квадратного уравнения ax13 EMBED Equation.3 1415+ bx + c = 0.
Program uravnenie;
Var a, b,c,d,x1,x2,x : real;
Begin
Writeln(введите коэффициенты a, b, c ’);
Readln(a, b, c);
d:=b*b – 4*a*c;
If d>0 then begin
x1:=(-b + sqrt(d))/(2*a);
x2:=(-b - sqrt(d))/(2*a);
Writeln(х1= ’, х1, x2= ’, x2);
End;
else
if d=0 then begin
x:=-b/(2*a);
Writeln(х= ’, х);
End;
Else writeln (уравнение не имеет корней’)
End.
Задача 6
Составьте программу вычислений значений функции:
13 EMBED Equation.3 1415 13 EMBED Equation.3 141513 EMBED Equation.3 1415
Program zadanie1;
Var x, y: real;
Begin
Writeln(введите x= ’); Readln(x);
If x>5 then y:=5*x-7
else begin
if (x>=-3) and (x<=5) then y:=sin(x)+cos(x)
else y:=exp((-1)*x)+LN(x+11);
end;
Writeln(при х= ’, х, y= ’, y); End.
Выделенным шрифтом отмечено описание кусочной функции y(x) при помощи оператора условия if then else (используется два оператора условия, а не три, так как непринадлежность х к двум промежуткам автоматически (по логике) означает принадлежность к третьему промежутку и вычисление по третьей формуле).
Аналогично решается задача вычисления значений функции с учетом области определения.
Задача 7 Составить программу, определяющую, принадлежит ли точка с координатами (x, y) пересечению кругов: (x-1)2+y2=4, (x+1)2+y2=4.
Program zadanie1;
Var x, y: real;
Begin
Writeln(введите координаты (x,y) точки через пробел ’); Readln(x,y);
If (sqr(x-1)+sqr(y)<=4) and (sqr(x+1)+sqr(y)<=4)
then write (принадлежит’) else write (не принадлежит’);
End.
Организация циклов
В языке Паскаль существует три различных оператора цикла: оператор цикла с параметром, оператор цикла с постусловием, оператор цикла с предусловием.
Оператор цикла с параметром
For i := n to m do оператор;
i – параметр цикла( шаг равен 1)
n – начальное значение параметра цикла (n
m – конечное значение параметра цикла
to - до
do - делать
оператор – тело цикла
For i := n to m do begin
Оператор1;
Оператор2;
ОператорN;
End;
Если тело цикла состоит из нескольких операторов
For i := n downto m do оператор;
For - для
i – параметр цикла( шаг равен -1)
n – начальное значение параметра цикла (n>m)
m – конечное значение параметра цикла
downto - до
do - делать
оператор – тело цикла
Задача 8 Вычислить S=1+2+3+4++N.
Program summa;
Var n, s, i: integer;
Begin
Writeln(введите натуральное число N= ’);
Readln(N);
S:=0;
For i:=1 to n do s:=s+i;
Writeln(сумма ’, s);
End.
Задача 9 Вычислить 13 EMBED Equation.3 1415
Program summa;
Var n, i: integer;
S: real;
Begin
Writeln(введите натуральное N= ’);
Readln(N);
S:=0;
For i:=1 to n do s:=sqrt(2+s);
Writeln(сумма ’, s); End.
Задача 10 Вычислить N!
Program faktorial;
Var p,n, i: integer;
Begin
Writeln(введите число N= ’);
Readln(N);
p:=1;
For i:=1 to n do p:=p*i;
Writeln(факториал числа ’, n, =’, p);
End.
13 SHAPE \* MERGEFORMAT 1415
Блок-схема для обозначения оператора цикла с параметром (задача 9).
Оператор цикла с постусловием
(используется, если число повторений заранее неизвестно).
Repeat
Оператор1;
Оператор2;
оператор N
until условие
repeat - повторять
Оператор1 операторN - последовательность операторов внутри цикла (тело цикла)
Until - до
Условие - логическое выражение
Задача 11 Вычислить значение переменной Y, при заданном значении N. Y=13 EMBED Equation.3 1415.
Program summa;
Var n, i: integer;
y: real;
Begin
Y:=0; I:=1;
Repeat
Y:=y+1/i;
I:=i+1
Until i>n;
Writeln(y= ’, y);
End.
Оператор цикла с предусловием
While условие do оператор ;
While - пока
Do - делать
Условие – логическое выражение
Оператор – тело цикла
Задача 12 Подсчитать сумму всех нечетных чисел от 101 до 301
Program summa;
Var s, i: integer;
Begin
s:=0; I:=101;
While i<=301 do
Begin
S:=s+I;
I:=i+2;
End;
Writeln(сумма трехзначных нечетных= ’, s);
End.
Блок-схемы для описания операторов цикла с предусловием и постусловием.
13 SHAPE \* MERGEFORMAT 1415 13 SHAPE \* MERGEFORMAT 1415
Логические выражения в алгоритмах и программах
Часто при решении задач переменные связаны отношениями: =,
·,
·,
·. Если условие выполняется, то говорят, что соответствующее выражение истинно (логическая единица), если не выполняется – выражение ложно (логический ноль). Речь идет о логическом выражении. Для построения сложных условий в Паскале имеются логические операции and (и), or (или), not (не).
Построим таблицы истинности для этих операций.
X
Y
X and Y
X or Y
X
notX
0
0
0
0
0
1
0
1
0
1
1
0
1
0
0
1
1
1
1
1
Пример. Пусть требуется определить принадлежит ли точка х отрезку [a,b]. Это условие в математике записывается в виде двойного неравенства a
·x
·b. В Паскале двойное неравенство записывается с помощью логических операций: (x>=a) and (x<=b). Если точка не принадлежит отрезку, то запись будет следующий вид иметь: not((x>=a) and (x<=b)) или (x
b).
Примечание. Отношения, между которыми стоит логическая операция, заключаются в скобки.
Задачи табулирования функций.
Задача 13 Составить программу табулирования функции y(x)=x2 -1 на отрезке [a; b] с шагом h, использую три варианта организации цикла.
Цикл с параметром
Листинг программы
Полученные результаты
program z11;
Uses CRT;
Var x,y,a,b,h:real;
k:integer;
BEGIN
CLRSCR;
writeln('vvedy a, b, h');
readln(a,b,h);
x:=a;
k:=trunc((b-a)/h+1);
for k:=1 to k
do begin
y:=x*x-1; x:=x+h;
writeln('k=', k, ' ','y(',x:5:3,')=',y:5:3); end;
END.
vvedy a, b, h
-2 2 0.5
k=1 y(-1.500)=3.000
k=2 y(-1.000)=1.250
k=3 y(-0.500)=0.000
k=4 y(0.000)=-0.750
k=5 y(0.500)=-1.000
k=6 y(1.000)=-0.750
k=7 y(1.500)=0.000
k=8 y(2.000)=1.250
k=9 y(2.500)=3.000
Цикл с постусловием
program z11;
Uses CRT;
Var x,y,a,b,h:real;
k:integer;
BEGIN
CLRSCR;
writeln('vvedy a, b, h');
readln(a,b,h);
x:=a; k:=0;
repeat
y:=x*x-1; x:=x+h; k:=k+1;
writeln('k=', k, ' ','y(',x:5:3,')=',y:5:3);
until x>b;
END.
vvedy a, b, h
-2 2 0.5
k=1 y(-1.500)=3.000
k=2 y(-1.000)=1.250
k=3 y(-0.500)=0.000
k=4 y(0.000)=-0.750
k=5 y(0.500)=-1.000
k=6 y(1.000)=-0.750
k=7 y(1.500)=0.000
k=8 y(2.000)=1.250
k=9 y(2.500)=3.000
Цикл с предусловием
program z11;
Uses CRT;
Var x,y,a,b,h:real;
k:integer;
BEGIN
CLRSCR;
writeln('vvedy a, b, h');
readln(a,b,h);
x:=a; k:=1;
while x<=b do begin
y:=x*x-1;
writeln('k=', k, ' ','y(',x:5:3,')=',y:5:3);
x:=x+h; k:=k+1; end;
END.
vvedy a, b, h
-2 2 0.5
k=1 y(-2.000)=3.000
k=2 y(-1.500)=1.250
k=3 y(-1.000)=0.000
k=4 y(-0.500)=-0.750
k=5 y(0.000)=-1.000
k=6 y(0.500)=-0.750
k=7 y(1.000)=0.000
k=8 y(1.500)=1.250
k=9 y(2.000)=3.000
Задача 14
Составьте программу вычисления значений функции y на отрезке [a, b] c шагом h.
13 EMBED Equation.3 1415 13 EMBED Equation.3 1415
Учитывая область определения данной функции a=-10, переменная b будет пробегать все значения правее 5, а значение h задается произвольно (от значения переменной h зависит количество вычислений функции в цикле).
program z_1;
uses CRT;
var a,b,x,y,h,: real;
i: integer;
BEGIN
clrscr;
a:=-10;
writeln('vvedite b, h');
readln(b,h);
k:=trunc((b-a)/h+1);
x:=a;
writeln(' Таблица значений функции');
writeln(' x',' y');
for i:=1 to k do begin
If x>5 then y:=5*x-7
else begin
if (x>=-3) and (x<=5) then y:=sin(x)+cos(x)
else y:=exp((-1)*x)+LN(x+11);
end;
writeln(x:8:2,y:8:2);
x:=x+h;
end;
readln;
END.
Обобщением оператора условия является оператор выбора (Case ключ выбора OF список варианта Else оператор end;), который по ключу выбора выбирает вариант.
Для Паскаля созданы библиотеки стандартных модулей, которые расширяют возможности пользовательской учебной программы и каждый модуль – это законченная программа со своими функциями. Для подключения модуля используется оператор USES, который размещается сразу после заголовка программы. Модуль CRT управляет режимами экрана, цвета, окна и звуковых сигналов. Программы без модуля CRT выводят информацию с помощью средств ОС MS-DOS, что связано с дополнительными операциями и замедляют вывод. При использовании этого модуля выводимая информация посылается в BIOS или, для ещё большего ускорения операций, непосредственно в видеопамять. Подключение модуля CRT дает возможность использовать в программе функцию очистки экрана CLRSCR (после каждой загрузки программы экран будет очищаться, курсор будет расположен в верхнем левом углу).
Контрольные вопросы и задания
Какие операторы используются при составлении линейных программ?
Как записывается оператор условия? Какие две формы этого оператора существуют?
Как обозначается вложение в операторе условия?
Цикл? Разновидности циклической структуры?
Тело цикла?
Операторы цикла с постусловием.
Операторы цикла с предусловием.
Операторы цикла- пересчет.
Особенности цикла ПОКА.
Сколько раз выполнится оператор цикла repeat, если условие после слова until истинно при входе в цикл.
Какие логические выражения используются при написании программ?
Одномерные массивы
Массив – это упорядоченный набор фиксированного количества некоторых однотипных значений. Эта структура представляет собой набор пронумерованных компонентов, причем индивидуальное имя получает только весь набор, а для компонентов этого набора определяется лишь порядок следования и общее их количество.
А=
A[1]=-10, A[2]=0, A[3]=15, A[4]=0, A[]=-79.6, A[N]=0
Формат описания массива
Var имя массива : array [количество] of тип компонентов;
имя массива – идентификатор массива
array - массив
количество- количество элементов в массиве
of - для
тип компонентов – описание типа переменных в массиве
Пример
Массив b из 100 элементов.
Var b: array [1..100] of real;
Символьный массив name из 5 элементов, каждый элемент имеет длину строки 10 символов.
Var Name: array [1..5] of string (10);
Задача9 Заполнить массив с клавиатуры А(10) и вывести значение элементов в столбик.
Program z9;
Var a: array [1..10] of real;
i: integer ;
begin
for i:= 1 to 10 do begin
writeln (ввести’, i, - элемент массива’);
readln (a[i]);
writeln (A(’,i,’)=’, a[i]);
end;
End.
Задача10 Заполнение элементов массива по формуле a[i]:=(sqr(i)+1)/sin(i). Вывод в строку.
Program z10;
Var a: array [1..10] of real;
i: integer ;
begin
for i:= 1 to 10 do begin
a[i]:=(sqr(i)+1)/sin(i);
write (A(’,i,’)=’, a[i]);
end;
End.
Задача11 Массив А(10) заполнен с клавиатуры. Найти количество (k) элементов, меньших числа t.
Program z11;
Var a: array [1..10] of real;
i, k : integer ;
t: real;
begin
k:=0;
writeln (ввести значение переменной t ’);
readln (t);
for i:= 1 to 10 do begin
writeln (ввести’, i, - элемент массива’);
readln (a[i]);
if a[i] end;
writeln (A(’,i,’)=’, a[i]);
End.
Задача12 Дан массив А(10). Найти сумму положительных элементов.
Program z12;
Var a: array [1..10] of real;
i: integer ;
s: real;
begin
s:=0;
for i:= 1 to 10 do begin
writeln (ввести’, i, - элемент массива’);
readln (a[i]);
if a[i]>0 then s:=s+a[i];
end;
writeln (сумма положительных элементов=’, s);
End.
Задача13 Дан массив А(30), заполненный датчиком случайных чисел (датчик случайных чисел randomize). Найти минимальный и максимальный элемент массива.
Program z13;
Var a: array [1..30] of integer;
i, min, max: integer ;
begin
randomize;
for i:= 1 to 30 do begin
a[i]:= random(50);
writeln (значение’, i, элемента массива’, a[i]);
end;
min:=a[1];
max:=a[1];
for i:= 1 to 30 do begin
if a[i]if a[i]>max then max:=a[i];
end;
writeln (max=’, max, min=’, min);
End.
Задача14 Дан массив А(20), заполненный датчиком случайных чисел. Отсортировать данный массив по возрастанию элементов.
Program z14;
Const n=20;
Var a: array [1..n] of real;
i, j, n: integer ;
x: real;
begin
randomize;
for i:= 1 to n do begin
a[i]:= random(50);
writeln (значение’, i, элемента массива’, a[i]);
end;
for j:= n-1 downto 1 do
for i:= 1 to j do
if a[i]>a[i+1] then begin
x:=a[i];
a[i]:=a[i+1];
a[i+1]:=x;
end;
for i:= 1 to n do
writeln (a(,i,)=’, a[i]);
End.
Примечание. Часто массив формируется при помощи датчика случайных чисел:
Randomiz;
For i:=1 to k do begin
Y[i]:=Random; {для задания массива Y, для которого значения элементов берутся случайным образом из отрезка от 0 до 1, то есть 0
·y[i]
·1}
G[i]:=Random(100); {для задания массива G, для которого значения элементов берутся случайным образом из отрезка от 0 до 1, то есть 0
·g[i]
·100}
End;
Примечание. Блок ввода, вывода, обработки элементов одномерного массива осуществляется при помощи цикла с параметром (параметр позволяет перебирать все элементы массива).
Примечание. Описание массива может быть выполнено и через введение типа данных пользователя:
Type наименование типа = array[диапазон индекса] of тип компонента;
Var имя массива: наименование типа;
Пример. Описание числового вещественного массива F (10) через введение пользовательского типа данных.
Type mass=array[1..10 of real];
Var F:mass;
Алгоритм нахождения наибольшего (наименьшего) элемента массива
Трудность при разработке алгоритма решения заключается в том, что надо записать в виде команд компьютеру привычные для человека действия: выделение большего (меньшего) из последовательности чисел. Чтобы лучше представить себе, как последовательно просматривать и сравнивать между собой числа, записанные в памяти, вообразим, что каждое значение элемента массива- это вес арбуза. Берем первый арбуз, полагаем, что он имеет наибольший вес и кладем его на чашу весов с надписью max. Затем берем второй арбуз и кладем его на вторую чашу весов. Если его масса оказалась больше массы «max арбуза», то первый арбуз откладываем в сторону, а второй арбуз перекладываем на чашу весов с надписью max. Так перебираем все арбузы (все элементы массива). В результате на чаше весов с надписью max оказывается самый большой по весу арбуз. Промежуточное значение и ответ содержит переменная max.
Упорядочение массива по возрастанию (убыванию)
«Метод пузырька»
Пусть имеется числовой массив А(n), элементы которого необходимо упорядочить по возрастанию. Зафиксируем первый элемент и будем последовательно сравнивать его со стоящим справа. Если какой-то из элементов справа окажется меньше первого, то мы поменяем местами этот элемент с первым и продолжим сравнение уже нового элемента, стоящего на первом месте, с оставшимися справа числами. Если снова выявится элемент, меньший зафиксированного, то повторим перестановку. В результате первого просмотра последовательности на первом месте окажется наименьший из всех элементов, то есть он, как более «легкий», как бы всплывает наверх. Теперь зафиксируем второй элемент и повторим просмотр, выполняя при необходимости перестановки элементов, и т.д.
Чтобы при переборе элементов, стоящих справа от проверяемого, не менялся индекс последнего, индексы фиксируемого и стоящих правее него элементов должны быть различными: i (от 1 до n-1) и j (от i+1 до n). Для каждого значения i индекс j должен последовательно принять все допустимые значения, следовательно, конструкция программы, отражающая полный перебор всех элементов и их упорядочение по возрастанию, представляет собой двойной цикл.
При перестановке двух элементов используется третья переменная (происходит обмен значениями в памяти посредством третьей переменной).
Задача13.1
Составим программу поиска наибольшего элемента одномерного массива FG(6).
Program max_1;
Uses crt;
Const n=6;
Var fg: array[1..n] of real;
Max: real;
I: integer;
BEGIN
clrscr;
For i:=1 to n do begin
Write(fg[,I,’]=’); Readln(fg[i]);
end;
max:=fg[1];
for i:=2 to n do
if maxwrite (max=’, max:6:2);
END.
{Название программы}
{Подключение модуля crt}
{Раздел описания констант (6 элементов в массиве FG)}
{Раздел описания переменных}
{Операторные скобки (начинается тело программы)}
{Очистка экрана}
{Начало цикла с параметром i
Блок ввода значений элементов массива fg с клавиатуры
Конец цикла}
{Изначально max:= значение первого элемента}
{Блок обработки: поиск максимального элемента массива fg в цикле с параметром}
{Вывод на экран max значения массива fg}
{конец программы}
Задача 14.1
Составим программу сортировки по возрастанию массива FG(6).
Program sort;
Const n=6;
Var fg: array[1..n] of real;
c: real;
I,j: integer;
BEGIN
For i:=1 to n do begin
Write(fg[,I,’]=’);
Readln(fg[i]);
end;
For i:=1 to n-1 do
For j:=i+1 to n do
if fg[i] >fg[j]
then begin
c:=fg[i];
fg[i]:= fg[j];
fg[j]:=c;
end;
writeln (упорядоченный по возрастанию массив’);
For i:=1 to n do
Write(fg[i]);
END.
Двумерные массивы (матрицы)
Каждый элемент двумерного массива однозначно задается двумя индексами: номером строки (i) и номером столбца (j). Для элементов с произвольными значениями матрицы А(N, M) имеем:
A= 13 EMBED Equation.3 141513 EMBED Equation.3 1415 13 EMBED Equation.3 1415, где i=1, 2, 3, , N, j=1, 2, 3, , M
Если i=j, то элементы матрицы находятся на главной диагонали. Если i>j, то элементы матрицы находятся под главной диагональю. Если iЕсли N=M, то матрица называется квадратной, иначе матрица называется прямоугольной.
A(i, j) – значение элемента матрицы А
i – номер строки (всего строк N)
j – номер столбца (всего столбцов M)
A – имя матрицы
Количество элементов в матрице = N*M.
Формат описания массива
Var имя массива : array [количество строк, количество столбцов] of тип компонентов;
Var имя массива : array [количество строк] of array [количество столбцов] of тип компонентов;
имя массива – идентификатор массива
array - массив
of - для
тип компонентов – описание типа переменных в массиве
Пример Массив b из 4 столбцов и 3 строк.
Var b: array [1..3, 1..4] of real;
или
Var b: array [1..3] of array [1..4] of real;
Целочисленные массивы c и d состоят из 3 столбцов и 3 строк.
Var d,c: array [1..3, 1..3] of integer;
Задача15 Заполнение элементов матрицы с клавиатуры A(10, 10) (организуется два цикла, параметр первого перебирает номера строк, а параметр второго перебирает номера столбцов).
Program z15;
Var a: array [1..10, 1..10] of real;
i, j : integer ;
begin
for i:= 1 to 10 do
for j:= 1 to 10 do begin
readln (a[i, j]);
writeln ( a[i, j]);
end;
End.
Задача16 Заполнение элементов матрицы A(10, 10) по формуле a[i, j]:= (i+0.5)/(j + sin(j)).
Program z16;
Var a: array [1..10, 1..10] of real;
i, j : integer ;
begin
for i:= 1 to 10 do begin
for j:= 1 to 10 do begin
a[i, j]:= (i+0.5)/(j + sin(j));
write ( a[i, j], );
end;
writeln;
end;
End.
Задача17 Заполнение элементов матрицы A(10, 10) случайными числами.
Program z17;
Var a: array [1..10, 1..10] of integer;
i, j : integer ;
begin
randomize;
for i:= 1 to 10 do
for j:= 1 to 10 do begin
a[i, j]:=random (30);
write ( a[i, j]);
end;
End.
Задача18 найти сумму значений всех элементов матрицы A(2, 15), заполненную датчиком случайных чисел.
Program z18;
Var a: array [1..10, 1..10] of integer;
i, j, s : integer ;
begin
s:=0;
randomize;
for i:= 1 to 10 do
for j:= 1 to 10 do begin
a[i, j]:=random (30);
s:=s+ a[i, j]
end;
writeln ( Сумма значений =’, s);
End.
Задача19 Дана матрица А(10, 20), заполненная датчиком случайных чисел в диапазоне –10 до 19 включительно (a[i, j]:= random(30) –10). Выдать на печать максимальное значение элементов данной матрицы.
Program z19;
Var a: array [1..10, 1..20] of integer;
i, j, max : integer ;
begin
randomize;
for i:= 1 to 10 do
for j:= 1 to 20 do a[i, j]:=random (30)-10;
max:=a[1, 1];
for i:= 1 to 10 do
for j:= 1 to 20 do
if a[i, j]> max then max:=a[i, j];
writeln ( максимальное значение=’, max);
end;
End.
Задача20 Матрица А(10, 15), заполнена датчиком случайных чисел в диапазоне от 0 до 29 включительно. Найти число положительных значений элементов каждой строки матрицы.
Program z20;
Var a: array [1..10, 1..15] of integer;
i, j, k : integer ;
begin
randomize;
for i:= 1 to 10 do begin
k:=0;
for j:= 1 to 15 do begin
a[i, j]:=random (30);
if a[i, j]>0 then k;=k+1;
end;
writeln (число положительных значений в строке=’, k);
end;
End.
Контрольные вопросы и задания
Массив. Примеры массива.
Для чего необходимо описание массива?
Может ли массив содержать разнородные данные?
Алгоритм поиска максимального элемента массива.
Алгоритм поиска минимального элемента массива.
Алгоритм упорядочения по возрастанию элементов массива.
Алгоритм упорядочения элементов массива по убыванию.
Какие изменения необходимо внести в программу поиска максимального элемента, чтобы определялся ещё и номер максимального элемента.
Как осуществляется ввод, вывод, обработка элементов одномерного массива?
Матрица. Примеры матриц.
Описание матрицы.
Поиск минимального элемента.
Сортировка элементов матрицы.
Как осуществляется ввод, вывод, обработка элементов двумерного массива?
Объясните работу двойного цикла (внешний и внутренний цикл)?
Обработка символьных переменных
Для работы с текстовой информацией используются символьные величины. Они записываются в виде строки, заключенные в кавычки. Большие и маленькие буквы считаются различными символами. Тип данных string (строка). Переменная типа string состоит из цепочки символов, то есть элементов типа Char. Количество символов - это длина символьной величины. Длина символьной величины совпадает с номером последнего символа. Операции со строками: слияние (конкатенация) – объединение двух и более строк с помощью знака +; выделение (вырезание) символов; замена символов в строке. От перемены мест слагаемых сумма меняется для символьных величин.
Для доступа к отдельному символу в строке указывается имя строки и в квадратных скобках номер символа.
Stroka [5] – пятый символ в переменной stroka
Операции над символьными величинами
функция
Назначение функции
Chr (x)
Возвращает символ, соответствующий числу Х по таблице ASCII кодов.
Ord (x)
Возвращает число, соответствующее символу Х в таблице ASCII кодов.
Upcase (x)
Преобразует символы (латинские) из строчных букв в прописные.
Pred (x)
Возвращает символ, который предшествует числу Х в таблице ASCII кодов.
Succ (x)
Возвращает символ, который следует за символом Х в таблице ASCII кодов.
Описание строковых переменных
Var имя переменной: string [количество символов]
По умолчанию количество символов равно 256 в строке
Стандартные процедуры и функции для строк
функции
Length (имя переменной)
Определяет длину текстовой строки, включая пробелы
Copy(откуда фрагмент, позиция, с которой копируется фрагмент, число копируемых символов)
Позволяет копировать фрагмент некоторой строки из одной переменной в другую
Pos
Поиск определенного фрагмента в строке (возвращает № позиции, с которого этот фрагмент начинается)
процедуры
Insert (stroka1, stroka, 4)
В строку stroka перед 4 позицией вставить строку Stroka1
Delete (stroka1, 2, 3)
Удаляет из строки Stroka1 фрагмент, состоящий из 3-х символов и начинающийся со 2 позиции
Задача21 Совпадает ли первая и последняя буквы в слове Y.
Program z21;
Var y: string [10];
Begin
Writeln(введите слово’); readln(y);
If copy(y, 1, 1)=copy(y, length(y),1) then writeln (совпадают’) else writeln (не совпадают’);
End.
Задача22 Составьте программу утраивающую каждую букву слова Y.
Program z22;
Var x, y: string [30];
i: integer ;
Begin
Writeln(введите слово’); readln(y);
x:=’ ;
For i:= 1 to length(y) do
x:=x+ copy(y, i, 1)+copy(y, i,1) + copy(y, i,1);
writeln (преобразованное слово’, x);
End.
Задача23 Составьте программу, вычеркивающую из слова Х русские буквы «а», стоящие на нечетных местах.
Program z22;
Var x, y: string [45];
i: integer ;
Begin
Writeln(введите слово’); readln(x);
Y:=’ ;
For i:= 1 to length(x) do
If (copy(x, i, 1)<>’а’) or ( i mod 2=0) then y:= y +copy(x, i, 1);
writeln (преобразованное слово’, x);
End.
Задания для самостоятельного решения
Составьте программу вычисления площади шара.
Составьте программу вычисления значений функции с учетом области определения Y= 13 EMBED Equation.3 1415.
Составьте программу вычисления значений функции с Y= 13 EMBED Equation.3 1415.
Составьте программу нахождения корней уравнения a*x4 + b*x2-2=0.
Составьте программу вычисления значений функции y=13 EMBED Equation.3 1415+sin(x) на отрезке [-10, -1] с шагом 1.
Составьте программу вычисления суммы 13 EMBED Equation.3 1415.
Составьте программу подсчета натуральных чисел, не превосходящих 1000, которые при делении на три дают в остатке 2.
Составьте программу вычисления остатка от деления нацело натурального числа N на M.
Составьте программу, выясняющую, является ли натуральное число Q делителем числа N.
Составьте программу, выясняющую, совпадают ли вторая и предпоследняя буквы слова X.
Составьте программу удваивающую каждую букву слова X.
Составьте программу, вычеркивающую из слова X все буквы «а».
Составьте программу, вычеркивающую из слова Х буквы «а», стоящие на четных местах.
Составьте программу подсчета числа букв «а» в слове Х.
Составьте программу, выясняющую является ли введенное слово русским.
Составьте программу вычисления произведения элементов одномерного массива В(К) вещественных чисел.
Составьте программу, подсчитывающую число отрицательных элементов массива В(К).
Составьте программу поиска минимального элемента массива В(К).
Составьте программу, выводящую номера четных элементов массива.
Составьте программу генерирования массива В[1..М], состоящего исключительно из положительных элементов одномерного массива А(N) вещественных чисел.
Найти произведение элементов, расположенных на главной диагонали матрицы F(N,M).
Найти наибольший элемент матрицы F(N,M).
Вывести номера отрицательных элементов матрицы F(N,M).
Составьте программу вывода элементов одномерного массива А[3..10], если значение каждого вычисляется по формуле: ai := 3*ai-1 - ai-2, где a1=1, a2=2.
Составьте программу подсчета числа элементов матрицы A(N, M) меньших 3.
Составить программу, переводящую десятичные числа в двоичную систему счисления.
Составить программу, переводящую десятичные числа в восьмеричную систему счисления.
Составить программу, переводящую десятичные числа в шестнадцатеричную систему счисления. – 3б.
*Дан целочисленный массив А[N]. Проверьте, есть ли в нем элементы, равные нулю. Если есть, найдите номер первого из них, то есть наименьшее I, при котором A[I]=0. – 3 б.
*Подсчитайте количество различных чисел, встречающихся в целочисленном массиве A[N]. Повторяющиеся числа учитывайте один раз. – 4 б.
*Проверьте, образуют ли элементы двухмерного массива А[N, N] «магический» квадрат (это значит, что суммы чисел во всех его вертикалях, всех горизонталях и двух диагоналях одинаковы). – 4 б.
*Составить программу, определяющую количество «счастливых» автобусных билетов (номер билета шестиразрядный). Билет считается счастливым», если сумма трех первых цифр его номера совпадает с суммой трех последних цифр. – 5 б.
*В стране имеется N городов, соединенных авиационным сообщением. Стоимость билета из I-го города в J-й записана в массиве A[N, N]. Составьте алгоритм, находящий стоимость перелета из I-го города в J-й по самому дешевому маршруту (возможно с пересадками). – 5 б.
*Написать все предложения, которые можно составить из слов «Ваши прекрасные глаза», «прекрасная маркиза», «от любви», «сулят», «мне», «смерть» путем их всевозможных перестановок (данная ситуация обыгрывается в пьесе Мольера «Мещанин во дворянстве»).
– 5 б.
Примечание Ко всем заданиям следует составить блок – схему, написать (и отладить) программу на языке программирования.
Основная литература
Информатика. Учебник.-3-е перераб.изд./Под ред. Н.В. Макаровой.-М.:Финансы и статистика, 2004
Могилев А.В. и др. Практикум по информатике: Учеб пособие для студ. высш. учеб. заведений. - М.: «Академия», 2002
Могилев А.В.
Советов Б.Я. Базы данных: теория и практика: учебник для вузов/ Б.Я. Советов, В.В. Цехановский, В.Д. Чертовской. – М.: Высш. шк., 2005
Острейковский В.А. Информатика: Учеб. Для вузов.-М.:Высш.шк., 2000
Турбо Паскаль 7.0 – К.: Торгово-издательское бюро BHV, 1996
Фигурнов В.Э. IBM PC для пользователя. Краткий курс. – М.:ИНФРА-М, 1997
Дополнительная литература
Кузнецов А.А., Апатова Н.В. Основы информатики. 8-9 кл.: Учеб. для общеобразоват. учеб. заведений. – М.: Дрофа, 2001
Семакин И.Г. Информатика. Базовый курс. 7-9 классы. – М.: Лаборатория знаний, 2002
Сетевые ресурсы
http:/www.fizmat.vspu.ru/pascal/common.html - учебное пособие по языку Паскаль.
http://www.alleng.ru/edu/comp1.html - учебник Могилева А.В. И др. Информатика.
http://www.softportal.com/software-2409-borland-turbo-pascal.html-Pascal7.0{скачать ... с других серверов}
Острейковский В.А. Информатика: Учеб. Для вузов.-М.: Высш. Шк., 2000
Информатика, 10-11 класс Василенко И.А.
13PAGE 15
13PAGE 14115
Program – служебное слово, с которого начинается любая программа. End. – конец программы. END;-конец блока.
Obiom – имя программы (произвольное).
Const – раздел описания постоянных величин.
Var – всегда присутствует в программе раздел описания переменных.
Real – вещественный тип.
Begin – служебное слово раздела операторов.
Write - вывод текста на экран
readln – ввод данных с клавиатуры
writeln – вывод результата на экран и после переход на новую строку
USES CRT- оператор подключает модуль CRT.
CLRSCR – оператор очистки экрана.
1
2
3
4
N
0
-79.6
0
15
0
-10
A( i ) – значение i-ого элемента массива A
А – имя массива (латинская буква)
i – номер элемента (от 1 до N)
начало
pi=3.14159
r
введите радиус круга
V:=4/3*pi*r*sqr(r )
объем шара,v
конец
1 блок – начало
2 блок – выполнение действий, присвоение
3 блок – вывод на экран сообщения
4 блок – ввод с клавиатуры
5 блок – выполнение действий, присвоение
6 блок – вывод на экран сообщения значения переменной v
7 блок - конец
условие
нет
Да (условие выполняется)
Оператор 1
Оператор 2
начало
введите натуральное N=
N
S:=0
s:=sqrt(2+s)
сумма , s
Конец
I:=1,N,1
V=4/3
·R3
да
конец
S
I:=I+2
S:=S+I
I<=301
S:=0, I:=101
начало
начало
N
Y:=0, I:=1
I=I+1
I>N
Y=y+1/I
Y
конец
нет
Исходный модуль
Компилятор
Объектный модуль
Исходные данные
Выполняемый модуль
Редактор
связей
Результат работы связей