SODERZhANIE_Uch_Pr_dlya_PI


МИНИСТЕРСТВО КУЛЬТУРЫ РФ
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«КРАСНОДАРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ КУЛЬТУРЫ И ИСКУССТВ»
«УТВЕРЖДАЮ»
Декан ИБФ
Васькова Н.И.
_________________________
Информационно-библиотечный факультет
кафедра информатики
Методические указания по проведению учебной практики
Направление подготовки – Прикладная информатика
Профиль подготовки - социально-культурная сфера
Квалификация выпускника - бакалавриат
Краснодар – 2012

Содержание
ВВЕДЕНИЕ…………………………………………………………………………..3
СПОСОБЫ ОПИСАНИЯ АЛГОРИТМОВ………………………………4
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПАСКАЛЬ…………....................6
ЛИНЕЙНЫЕ ПРОГРАММЫ……………………………………………...6
2.2. РАЗВЕТВЛЯЮЩИЯСЯ ПРОГРАММЫ………………………………….18
2.3. ОДНОМЕРНЫЕ МАССИВЫ………………………………………………25
2.4. ДВУМЕРНЫЕ МАССИВЫ………………………………………………...28
2.5. ЗАПИСИ……………………………………………………………………..33
2.6. СТРОКИ СИМВОЛОВ……………………………………………………..34
3. КОНТРОЛЬНАЯ РАБОТА…………………………………………………...35
4. ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ………………………..55
РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА…………………………………………..55
Введение
Так как ЭВМ является "слепым" исполнителем программ, то успешное решение задачи полностью определяется квалификацией программиста.
В общем случае решение задачи на ЭВМ можно разбить на следующие этапы:
- постановка задачи;
- разработка алгоритма;
- составление программы;
- трансляция программы;
- отладка и выполнение программы;
- анализ результатов.
В программировании используется такое определение алгоритма: "алгоритм это точное предписание, определяющее вычислительный процесс, ведущий от варьируемых начальных данных к искомому результату".
Алгоритм должен обладать следующими основными свойствами:
- детерминированность (определенность) при заданных исходных данных обеспечивается однозначность искомого результата;
- массовость пригодность для задач данного типа при исходных данных, принадлежащих заданному подмножеству;
- результативность реализуемый вычислительный процесс выполняется за конечное число этапов с выдачей осмысленного результата;
- дискретность разбиение на отдельные этапы, выполнение которых не вызывает сомнений.
Под программой понимают описание, воспринимаемое ЭВМ и достаточное для решения на ней определенной задачи. Для создания программы используются искусственные языки, называемые языками программирования. ЭВМ, как правило, непосредственно воспринимает и выполняет программы, написанные только на одном из языков программирования машинном языке для данной ЭВМ. С помощью специальных программ можно получить опосредованное "понимание" других языков. Одна из таких программ транслятор. Транслятор это программа, осуществляющая перевод текстов с одного языка на другой, т.е. с входного языка (Паскаль и др..) на машинный язык реальной ЭВМ. Программа, попадающая на вход транслятора, называется исходной, а результат трансляции объектной программой.
Раздел 1. СПОСОБЫ ОПИСАНИЯ АЛГОРИТМОВ
Одним из самых трудоемких этапов решения задачи на ЭВМ является разработка алгоритма.
При разработке алгоритмов чаще всего используют следующие способы их описания: словесный, графический, с помощью языков программирования.
Рассмотрим два способа: графический и с помощью языков программирования.
Графический способ записи алгоритмов наиболее наглядный и распространенный. Он основан на использовании геометрических фигур (блоков), каждая из которых отображает конкретный этап процесса обработки данных, соединяемых между собой прямыми линиями, называемыми линиями потока. Обозначение и назначение элементов графических схем алгоритмов приведено в табл.1. В поле каждого блочного символа указывают выполняемую функцию. При необходимости справа можно поместить комментарии, относящиеся к данному блоку или направлению потока. Каждый блочный символ (кроме начального и конечного) помечается порядковым номером. Для отличия ситуаций пересечения и слияния потоков последняя изображается точкой. Линии потока, имеющие направление вверх или направо, дополняются стрелками.
Таблица 1
Геометрическая фигура Назначение
1 2
Начало и завершение алгоритма, прерывание процесса обработки данных или выполнения программы.
a выбирается из ряда 5,10,15мм и т.д. ,а b=1,5a или 2a
Выполнение операции или группы операций, в результате которых изменяются значение, форма представления или расположение данных

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

Указания последовательности связей между элементами схемы алгоритма
По своей структуре различают следующие типы алгоритмов: линейные, разветвляющиеся и циклические. В линейных схемах алгоритмов все предписания выполняются одно за другим. Например, алгоритм вычисления длины окружности по известной площади круга (рис.2).
В разветвляющихся схемах алгоритмов для конкретных исходных данных выполняются не все заданные предписания. Однако какие именно предписания будут выполняться, конкретно определяется в процессе выполнения алгоритма в результате проверки некоторых условий. Разветвляющийся алгоритм всегда избыточен.
Примером разветвляющегося алгоритма является алгоритм, приведенный на рис.3 и определяющий, пройдет ли график функции y=3x+4 через точку с координатами x1,y1.

Рис. 4

Рис. 3
Циклическим алгоритмом называется такой алгоритм, в котором можно выделить многократно повторяющуюся последовательность предписаний, называемую циклом. Для таких алгоритмов характерно наличие параметра цикла, которое перед входом в цикл имеет начальное значение, а затем изменяется внутри цикла. Имеется также предписание о проверке условия окончания цикла. Применение циклов сокращает текст алгоритма и, в конечном итоге, длину программы. Примером циклического алгоритма может служить алгоритм, приведенный на рис.4 и определяющий факториал натурального числа n. В этом алгоритме введена дополнительная переменная i, которая является параметром цикла и изменяется от начального значения 1 до конечного значения n c шагом 1. На каждом шаге итерации искомая величина f умножается на переменную цикла. В реальных задачах, как правило, сочетаются все три типа алгоритмов. Способ описания алгоритма с помощью алгоритмического языка подробно рассматривается в следующем разделе.
Раздел 2. ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПАСКАЛЬ
2.1. ЛИНЕЙНЫЕ ПРОГРАММЫ
СТРУКТУРА ПРОГРАММЫЧтобы иметь представление о том, как программируют на языке Паскаль, приведем пример программы pr1, определяющей сумму двух чисел:
program pr1;
var a,b,result: integer;
begin
a:=2;
b:=3;
result:=a+b;
writeln(result);
end.
Это линейная программа. К линейным программам чаще всего приводят задачи, в которых необходимо выполнить обработку данных по формулам. В любой линейной программе имеются блоки ввода исходных данных, вычислительный блок, который выполняет присваивание переменной значения некоторого выражения, и блок вывода результатов решения задачи.
Структура программы на языке Паскаль в общем случае выглядит следующим образом:
заголовок программы;
описательная часть;
операторная часть.
Заголовок программы представляется так:
program <имя программы>;
Cлово program является зарезервированным (ключевым), т.е. не может использоваться для каких-нибудь иных целей.
<имя программы> это правильный идентификатор. Идентификаторы (или имена) используются в программе и для обозначения переменных, меток, типов, процедур и функций, констант. На имена (идентификаторы) накладываются некоторые ограничения. Важным ограничением при выборе идентификаторов является невозможность использования ключевых слов, например program или var. Идентификатор должен начинаться с буквы и может содержать буквы латинского алфавита, цифры и знаки подчеркивания. Длина идентификатора может быть любой, но значащими являются первые 63 символа. Имена могут нести смысловую нагрузку, как, например, result, но могут и не нести. Использование осмысленных имен предпочтительнее, так как это делает программу более простой для понимания. В идентификаторах, как и во всей программе на Паскале, игнорируется разница в высоте букв.
Описательная часть программы может содержать несколько разделов:
1) раздел меток;
2) раздел констант;
3) раздел типов;
4) раздел переменных;
5) раздел процедур и функций.
По мере необходимости далее в тексте будет излагаться материал по каждому разделу описательной части.
Операторная часть программы заключается в операторные скобки begin end и содержит операторы, необходимые для выполнения последовательности действий для решения поставленной задачи. Разделителем между разделами описательной части и операторами служит точка с запятой. В конце программы должна стоять точка. Язык Паскаль является языком свободного формата, что позволяет размещать в строке как один, так и несколько операторов.
Первая строка приведенной выше программы является заголовком программы, в котором указывается имя программы. В данном случае программа названа pr1. В Паскале можно опускать заголовок программы.
Вторая строка описательная часть, содержащая в данном случае только описание переменных. Описание переменных всегда начинается с ключевого слова var и указывает имена переменных и их тип.
Третья и все последующие строки программы это операторная часть программы (тело программы). В данном примере в теле программы содержатся операторы присваивания и оператор вызова встроенной процедуры writeln вывода данных. Встроенная процедура не нуждается в предварительном описании и доступна любой программе.
Рассмотрим подробнее описания переменных и операторы, необходимые для написания линейной программы.
ОПИСАНИЕ ПЕРЕМЕННЫХВ языке Паскаль возможна обработка данных различных типов. Тип любого объекта определяет множество допустимых значений и множество допустимых операций над этими значениями. Любой идентификатор, используемый в исполняемых операторах, должен быть предварительно описан в разделе описаний. В этом строгом требовании языка Паскаль проявляется тенденция развития языков программирования в сторону повышения надежности создаваемых программ. На рис.5 приведена структура типов данных Паскаля. В данном разделе рассматриваются только целые и вещественные типы данных.

Рис. 5
Диапазон возможных значений целых типов зависит от их внутреннего представления, которое может занимать один, два или четыре байта. В табл.2 приводятся названия целых типов, длина их внутреннего представления в байтах и диапазон возможных значений. Целые типы относятся к так называемым порядковым типам. Для порядковых типов характерно то, что такие типы имеют конечное число возможных значений и эти значения можно каким-либо образом упорядочить и каждому значению поставить в соответствие целое число. К любому порядковому типу применима функция ord(x), которая возвращает порядковый номер применима функция ord(x), которая возвращает порядковый номер значения выражения х. Для целых типов ord(x) возвращает само же значение х. К порядковым типам можно также применить функции pred(x) и succ(x). Функция pred(x) возвращает значение, которое соответствует порядковому номеру ord(x)-1, а функция succ(x) ord(x)+1.
Таблица 2
Целые типы
Длина, байт Название типа Диапазон значений
1 byte от 0 до 255
1 shortint от -128 до 127
2 word от 0 до 65535
2 integer от -32768 до 32767
4 longint от -2147483648 до 2147483647
Над целыми числами выполняются операции:
"+" сложение; "*" умножение;" / " деление;
"-" вычитание; div целочисленное деление;
mod получение остатка от целочисленного деления.
Например, 5div2 дает результат 2, 6div2 дает 3, 5mod2 дает 1, а 6mod3 0.
В табл.3 содержатся основные встроенные процедуры и функции, применяемые к целым типам. В квадратных скобках указывается необязательный параметр.
Таблица 3
Встроенные процедуры и функции для обработки данных целого типа
Обращение Реализуемое действие
abs(x) Возвращает модуль х
dec(x[,i]) Уменьшает значение х на i, при отсутствии i на 1
inc(x[,i]) Увеличивает значение х на i, при отсутствии i на 1
odd(i) Возвращает true, если i - нечетное число, false - четное
random(w) Возвращает псевдослучайное число, равномерно распределенное на интервале[0,w-1]
sqr(x) Возвращает квадрат аргумента

Под данными вещественного типа понимаются числа, записанные с десятичной точкой. Значение числа вещественного типа представляется в ЭВМ лишь с некоторой конечной точностью, которая зависит от внутреннего формата вещественного числа. В табл. 4 приведены названия вещественных типов, их длина в байтах, а также диапазон возможных значений. Существует две формы представления вещественных чисел: с фиксированной и с плавающей точкой. Варианты записи вещественных чисел с фиксированной точкой приведены первом в столбце, а с плавающей во втором:
1.36 1.36e0
0.0013 1.3e-3
123.123 1.23123e2
В разделе описания переменных данные вещественного типа можно описать так:
var a,b: real;
c,d: single;
k: double;
l,m,n: extended;

Таблица 4
Вещественные типы
Длина,
байт Название Диапазон десятичного порядка Количество значащих цифр
4 single от -45 до +38 от 7 до 8
6 real от -39 до +38 от 11 до 12
8 double от -324 до +308 от 15 до 16
10 extended от -4951 до +4932 от 19 до 20
8 comp от до от 19 до 20
В табл.5 приведены встроенные функции и процедуры для обработки данных вещественного типа.

Таблица 5
Встроенные функции для обработки данных вещественного типа
Обращение Реализуемое действие
abs(x) Модуль аргумента
arctan(x) Àрктангенс (радианы)
frac(x) Дробная часть числа
int(x) Целая часть числа
ln(x) Натуральный логарифм
pi =3.14159...
random Псевдослучайное число, принадлежащее интервалу[0,1]
randomize Инициализация датчика псевдослучайных чисел
sqrt(x) Корень квадратный
sqr(x) Квадрат аргумента
sin(x) Синус(радианы)
сos(x) Косинус(радианы)
exp(x) Экспонента
ОПЕРАТОР ПРИСВАИВАНИЯОператор присваивания является самым важным оператором в любом языке программирования. Этот оператор служит для изменения областей памяти. Оператор присваивания заменяет значение переменной в левой части оператора значением выражения, стоящего в правой части, и имеет следующую форму:
<переменная>:=выражение.
необходимо учесть, что переменная и выражение должны быть одного типа. Например, если переменные описаны следующим образом:
var
x,y : integer;
a,b : real;
то можно записать операторы присваивания
x:=x+5;
y:=x;
a:=b;
b:=5.33*x+y/2;
Как уже говорилось, тип переменной позволяет не только устанавливать длину ее внутреннего представления, но и контролировать те действия, которые осуществляются над ней в программе. Контроль за использованием переменных еще на этапе компиляции программы важное преимущество Паскаля, повышающее его надежность. В Паскале почти не возможны автоматические преобразования типов. Исключение сделано только в отношении констант и переменных типа integer, которые можно использовать и в выражениях типа real, т.е. для описанных выше переменных оператор x:=a будет неверным из-за невозможности преобразования вещественного типа к целому. В то же время, оператор a:=x будет верным.
Что происходит со старым значением переменной, когда ей присваивается новое значение? Оно просто стирается. Поскольку переменная может хранить только одно число, то выполнение оператора присваивания приводит к потере предыдущего значения переменной. Переменная всегда содержит результат последнего оператора присваивания.
ПРОЦЕДУРЫ ВВОДА И ВЫВОДАВвод/вывод связан с обменом информацией между оперативной памятью и внешними устройствами. Здесь рассмотрены процедуры ввода/вывода: read, readln, write, writeln, использующие стандартные файлы ввода/вывода. Стандартным файлом ввода является клавиатура, а вывода экран. Для ввода данных с клавиатуры применяются процедуры:
read (<список ввода>);
readln (<список ввода>);
Список ввода это последовательность из одной или более переменных типа char, string, а также любого целого или вещественного типа. При вводе числовых переменных процедура read вначале выделяет подстроку во входном потоке по следующему правилу: все ведущие пробелы, символы табуляции и маркеры конца строки пропускаются, выделяется первый значащий символ, признаком конца подстроки является любой из вышеперечисленных символов или символ конец файла. Выделенная таким образом подстрока рассматривается как символьное представление числовой константы, которое преобразуется в соответствии с типом переменной, и полученное значение присваивается переменной. Если значащих символов в строке нет, а список ввода еще не исчерпан, то автоматически осуществляется переход к новой строке. Процедура readln идентична процедуре read за исключением того, что после считывания последней переменной, оставшаяся часть строки пропускается, так что следующее обращение к read или readln начнется с первого символа новой строки. Кроме того, процедуру readln можно вызывать без параметров, что приведет к пропуску всех символов текущей строки. Рассмотрим следующий фрагмент программы:
var a,b,c,d:real;
begin ... read(a,b,c,d); ... end.
Пусть, требуется ввести числа 1,3;13,3;76,8;125,0. Информация набирается в виде: 1.3 13.3 76.8 125.0 на одной или нескольких строках.
В результате выполнения процедуры read переменной а присвоится значение 1.3, переменной b значение 13.3, с 76.8, d 125.0. Если же ввод производится с помощью двух процедур:
readln(a,b,c);read(d);
числа, соответствующие a,b,c, набираются на одной строке, а число, соответствующее d, на другой.
Для вывода данных на экран используются процедуры:
writeln(<список ввода>);
write(<список ввода>);
Список вывода может содержать одно или несколько выражений типа char, string, boolean, а также любого целого или вещественного типа. Отличие процедуры writeln от write состоит лишь в том, что в процедуре write курсор остается на той же строке экрана за последним выведенным символом, а в writeln курсор переходит на начало следующей строки. Предположим, что переменные a,b,c описаны как целые и имеют соответственно значения 132, 25, -37. После выполнения процедур
writeln(a,b);write(c);
a и b будут напечатаны на одной строке, а с на другой:
13225
-37
Кроме того, процедура вывода предоставляет возможность указать в выводимом числе количество позиций и сколько из них после запятой (последнее только для чисел с плавающей точкой):
writeln(a:3,b:5,c:4);
В этом случае при печати под значение переменной a отводится 3 позиции, b 5 позиций, под с 4 позиции, т.е. будет выведено 132 25 -37.
Если количество литер в представлении выводимого значения меньше, чем указано в процедуре, то оно слева дополняется пробелами. Если количество указанных позиций недостаточно, то происходит автоматическое увеличение поля до необходимых размеров:
writeln('a=',a:1,'b=',b:2,'c=',c:3);
В последнем примере используется возможность вывода строк символов, при этом будет напечатано:
a=132b=25c= -37
Пусть переменные d, e, f описаны как вещественные и имеют соответственно значения 13,13;123,45;-987,654. Результатом работы оператора
writeln('d=',d:5:2,'e=',e:8:3,'f=',f:8:2);
будет строка
d=13.13e= 123.450f= -987.65
Если для чисел с плавающей точкой указывается только количество позиций в числе, без указания числа позиций после запятой, то в этом случае числа выводятся в экспоненциальной форме, занимая указанное количество позиций. Если длина поля не указывается совсем, то под каждое число отводится стандартная длина поля и числа печатаются в экспоненциальной форме:
writeln('d=',d:10,' e=',e:9,' f=',f);
d= 1.313E+01 e= 1.23Е+02 f=-9.8765000000E+02
ПРИМЕР ЛИНЕЙНОЙ ПРОГРАММЫТеперь, когда мы познакомились с операторами, необходимыми для составления линейной программы, рассмотрим еще один пример такой программы. Пусть дано два числа a и b длины сторон прямоугольника. Найти площадь s и периметр p прямоугольника. На рис.6 представлена графическая схема алгоритма решения данной задачи, а программа приведена в примере pr2.

Рис. 6
program pr2 ;
var
a,b,s,p:real;
begin
writeln('Введите длины стоpон пpямоугольника:');
read(a,b);
s:=a*b;
p:=(a+b)*2;
writeln('Площадь = ',s:5:3);
writeln('Пеpиметp = ',p:5:3);
end.
В этой программе все операторы выполняются последовательно друг за другом. Выполнение программы начинается с вызова процедуры вывода writeln, которая выводит на экран подсказку "Введите длины сторон прямоугольника:", что обеспечивает удобный интерфейс с пользователем. Вызов процедуры read приводит к прерыванию программы до тех пор, пока пользователь не введет два числа. Далее вычисляются площадь и периметр прямоугольника и выводятся результаты на экран.
2.2. РАЗВЕТВЛЯЮЩИЯСЯ ПРОГРАММЫ
К разветвляющимся программам приводят задачи, в которых, в зависимости от некоторого условия, вычисления производятся тем или иным путем. Пусть нам необходимо вычислить значение y по формуле:

На рис.7 приведена графическая схема алгоритма, а программа в примере pr3.

Рис. 7
program pr3;
var
x,y:real;
begin
writeln('Введите x:');
readln(x);
if x>0
then
y:=x*x*x+3
else
y:=x*sin(x);
writeln(y);
end.
В этой программе впервые встречается условный оператор и служит для выбора формулы вычисления y в зависимости от введенного значения x.
УСЛОВНЫЙ ОПЕРАТОРУсловный оператор служит для ветвлений в программе и имеет следующий синтаксис:
if <условие> then <оператор1> else <оператор2>.
Здесь if, then, else ключевые слова (перев. с англ. если, то, иначе соответственно);
<условие> логическое выражение типа сравнения (например, a>b, c<=d, f=1), логическому типу посвящен следующий раздел пособия;
<оператор1> и <оператор2> любой оператор Турбо-Паскаля. Оператор работает следующим образом: если условие истинно, то выполняется <оператор1> и управление передается на следующий за условным оператор; если условие ложно, то выполняется <оператор2> и управление передается на следующий за условным оператор. Таким образом, всегда выполняется один из двух операторов: либо из ветви then, либо из ветви else.
Кроме вышеприведенной формы условного оператора, существует сокращенная форма условного оператора, в которой отсутствует ветвь else:
if <условие> then <оператор1>.
Оператор работает следующим образом: если условие истинно, то выполняется <оператор1> и управление передается на следующий за условным оператор; если условие ложно, то управление сразу передается на следующий за условным оператор. Таким образом, в зависимости от условия <оператор1> либо выполняется, либо не выполняется.
Рассмотрим фрагменты схем алгоритмов и соответствующие им фрагменты программ.


if a>b then
max:=a
else
max:=b;
if k>0 then
s:=s+k;
if a>b then
if a>c then
max:=a
else max:=c;


if a>b then
if a>c then
max:=a
else max:=c
else
if b>c then
max:=b
else max:=c;
В первом примере приведена полная форма условного оператора, во втором сокращенная, в третьем сокращенная с вложенным условным оператором и в четвертом - полная форма с вложенными в каждой ветви условными операторами. Вложенные условные операторы уменьшают число необходимых проверок, обеспечивают большую эффективность, но ухудшают читаемость программы, поэтому не рекомендуется слишком увлекаться вложением условных операторов.
При определении последовательности выполнения вложенных условных операторов следует учесть, что каждое else соответствует тому if, которое ему непосредственно предшествует, таким образом исключается всякая двусмысленность.
Условный оператор может оказаться негибким, так как выполняемые действия могут быть описаны только одним оператором. Если необходимо выполнить в ветви условного оператора несколько операторов, то в этом случае можно использовать составной оператор.
СОСТАВНОЙ ОПЕРАТОРКогда необходимо добиться того, чтобы последовательность операторов работала как единый оператор, можно помещать эту последовательность между ключевыми словами begin и end. Такая конструкция называется составным оператором, или операторными скобками: begin открывает скобку, end закрывает. Каждый оператор, входящий в состав составного оператора, заканчивается точкой с запятой. Рассмотрим примеры:

if c>0 then
begin
s:=s+c;
k:=k+1
end
else
c:=c-1;
if n<m then
begin
n:=n+1;
m:=m-1;
end
else
begin
n:=n-1;
m:=m+1;
end;
Здесь следует обратить внимание на правила употребления точки с запятой:
- каждое описание переменной и определение константы заканчивается точкой с запятой;
- каждый оператор в теле программы завершается точкой с запятой, если сразу за ним не следуют ключевые слова end, else или until;
- после определенных ключевых слов, таких, как then, else, begin, var, const, никогда не ставится точка с запятой.
Перед ключевым словом end можно поставить точку с запятой, это означает появление дополнительного пустого оператора, который не выполняет никаких действий.
ЛОГИЧЕСКИЙ ТИППаскаль позволяет обрабатывать данные не только числового типа, но и других типов, например логического. Для обозначения логического типа используется ключевое слово boolean. Булевы (логические) переменные могут иметь одно из двух значений: true (истина) или false (ложь). Булевский тип является порядковым типом и упорядочен так, что false < true. По сравнению с типом real, который допускает миллионы различимых значений, может показаться, что тип boolean имеет ограниченную область применения. Однако, как это ни странно, именно ограниченность диапазона значений булевых переменных придает булевым выражениям их значимость.
Булевы выражения могут принимать несколько различных форм. Во-первых, они могут быть просто константами true (истина) или false (ложь). Оператор присваивания, использующий эту форму, аналогичен арифметическому оператору. Например, пусть переменные a и b логического типа:
var a,b:boolean;
тогда можно написать операторы:
a:=true;
b:=false.
Булевы выражения можно использовать для проверки отношений между двумя переменными: a>b,c<=d,k=m и т.д. Таким образом, условие в условном операторе является выражением логического типа. Кроме того, булевы выражения могут конструироваться с помощью булевых операций. Эти операции образуют инструментальный фундамент булевой логики, алгебры логики, разработанной в ХIХв. математиком Джорджем Булем. Рассмотрим три основные булевы операции.
Операция and логическое пересечение (умножение, операция "и"). Выражение a and b дает значение true только в том случае, если a и b имеют значения true, в остальных случаях false:
true and true = true
true and false = false
false and false = false
Операция or логическое сложение (объединение, операция "или"). Выражение a or b дает значение false в том и только в том случае, если a и b имеют значения false, в остальных случаях результат true:
true or true = true
true or false = true
false or false = false
Операция not отрицание (операция "не"). Выражение not a имеет значение, противоположное значению a:
not true = false
not false = true
Эти операции полезны, если нужно проверить сложное условие:
if (a>b) and (a>c)
then max:=a;
if (x=y) or (x=z)
then z:=y;

одномерныЕ массивы
Приведем схему алгоритма формирования элементов массива с помощью датчика случайных чисел, вывод элементов массива на экран, вычисление суммы всех элементов.
Программа приведена в примере:
const n1=100; {максимальный размер массива}
type mas = array[1..n1] of integer;
var a:mas;
i,{индекс элемента массива}
n,s:integer;
begin
writeln ('Введите число элементов массива:');
read (n);
{ Формирование массива с помощью датчика случайных чисел}
randomize;{Инициализация датчика случайных чисел }
for i:=1 to n do
a [i]:=random(10);
writeln ('Полученный массив');
for i:=1 to n do
write (a[i]:5);
writeln;
s:=0; { Нахождение суммы }
for i:=1 to n do
s:=s+a[i];
writeln ('s=',s);
end.

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

const n1=100; {максимальный pазмеp массива}
type
mas = array[1..n1] of integer;
var
a:mas;
i, {индекс элемента массива}
n,s,
imax:integer;{индекс максимального элемента}
begin
writeln('Введите число элементов массива:');
read(n);
{Ввод массива}
for i:=1 to n do
begin
read(a[i])
end;
s:=0;
imax:=1;{пpедполагаем, что пеpвый элемент максимальный}
for i:=1 to n do
begin
{если элемент положительный, то прибавляем его к сумме}
if a[i]>0 then s:=s+a[i];
{если текущий элемент массива больше максимального, то запоминаем его индекс}
if a[imax]<a[i] then imax:=i;
end;
writeln('максимальный элемент массива =',a[imax]);
a[imax]:=s;{ замена максимального элемента суммой }
writeln('s=',s);
writeln('Обpаботанный массив:');
for i:=1 to n do
writeln (a[i]);
end.

2.4. двумерныЕ массивЫ
Приведена схема алгоритма формирования элементов массива с помощью датчика случайных чисел, вывод элементов массива на экран, вычисление суммы всех элементов двумерного массива. Программа дана в примере:
program pr21;
const n1=10; {максимальнoе количество стpок массива}
m1=10; { максимальное количество столбцов массива}
type mas = array[1..n1,1..m1] of integer;
var a: mas;
i, { текущий номеp строки }
j, { текущий номеp столбца }
n,s,m : integer;
begin
writeln('Введите число стpок и столбцов массива:');
read(n,m);
randomize;
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(10);
writeln('Полученный массив');
for i:=1 to n do
begin
for j:=1 to m do
write (a[i,j]:5);
writeln;
end;
s:=0;
for i:=1 to n do
for j:=1 to m do
s:=s+a[i,j];
writeln('s=',s);
end.

Дана прямоугольная матрица. Отсортировать столбцы матрицы в порядке неубывания максимальных элементов столбцов. Пример решения:
const n1=10; {максимальнoе количество стpок массива}
m1=10; {максимальнoе количество столбцов массива}
type
mas = array[1..n1,1..m1] of integer;{квадpатная матpица}
var
a:mas;
b:array[1..m1] of integer;{массив из максимальных элементов столбцов}
i, { текущий номеp стpоки }
j, { текущий номеp столбца }
n,m,d:integer;
fl:boolean;
begin
writeln ('Введите число стpок и столбцов массива:');
read(n,m);
for i:=1 to n do
for j:=1 to m do
begin
writeln('Введите элемент массива');
read(a[i,j]);
end;
writeln ('Исходный массив');
for i:=1 to n do
begin
for j:=1 to m do
write (a[i,j]:5);
writeln;
end;
{Фоpмиpование одномеpного массива из максимальных
элементов столбцов}
for j:=1 to m do {Пеpебиpаем все столбцы}
begin
b[j]:=a[1,j];{Пpинимаем пеpвый элемент в столбце за максимальный }
for i:=2 to n do{Пеpебиpаем все элементы в столбце}
if a[i,j]>b[j] then b[j]:=a[i,j];
end;
{Сортировка одномерного и двумерного массива}
repeat
fl:=true;{Поднять флаг}
for j:=1 to m-1 do {Перебрать элементы одномерного массива}
if b[j]>b[j+1] then { Проверить нужна ли перестановка }
begin
fl:=false;{опустить флаг}
{Переставить элементы одномерного массива и}
d:=b[j];
b[j]:=b[j+1];
b[j+1]:=d;
{столбцы двумерного массива}
for i:=1 to n do
begin
d:=a[i,j];
a[i,j]:=a[i,j+1];
a[i,j+1]:=d;
end;
end;
until fl;{Завершить сортировку, если флаг не опускался}
writeln('Отсортированный массив');
for i:=1 to n do
begin
for j:=1 to m do
write (a[i,j]:5);
writeln;
end;
end.

2.5. ЗАПИСИ
Рассмотрим пример программы с использованием массива структур. В ведомости, содержащей фамилии группы студентов, оценки по физике, математике и программированию определить средний балл каждого студента и средний балл в группе.
В программе использованы следующие обозначения:
n1– максимальное количество студентов в группе;
n – реальное количество студентов в группе;
student– идентификатор типа, представляющий запись с полями fam, fiz, mat, pr и ss;
fam – поле записи, содержащее фамилию студента;
fiz, mat, pr – поле записи, содержащее оценки по физике, математике и программированию соответственно;
ss – поле записи, содержащее средний балл студента;
ved – массив, содержащий элементы типа student;
sg – средний балл группы;
i – индекс элемента массива ved;
Программа выглядит следующим образом:
const n1=30;
type student=record
fam:string[10];
fiz,mat,pr:integer;
ss:real;
end;
var ved:array[1..n1] of student;
i,n:integer;
sg:real;
begin
writeln('сколько студентов в группе?');
read(n);
for i:=1 to n do
with ved[i] do
begin
writeln('введите фамилию студента');
read(fam);
writeln('введите оценки');
read(fiz,mat,pr)
end;
sg:=0;
for i:=1 to n do
with ved[i] do
begin
ss:=(fiz+mat+pr)/3; {вычисление среднего балла студента}
sg:=sg+ss;
end;
sg:=sg/n;{вычисление среднего балла группы}
writeln('ведомость группы');
write('! фамилия! физика! мат! прогр!');
writeln('! cp. балл !')
for i:=1 to n do
with ved[i] do
begin
write('!',fam:10,'!',fiz:10,'!',mat:10,'!',pr:10);
writeln('!',ss:10:2,'!');
end;
writeln('средний балл в группе =',sg);
end.
2.6. СТРОКИ СИМВОЛОВ
Приведем пример программы, определяющие количество символов и слов в произвольной строке символов.
program pr28;
const YES=1; {Константы, опpеделяющие является ли }
NO=0; { текущий символ элементом слова}
var
str : string;
nw, {Количество слов}
nc, {Количество символов}
inword: integer; {Переменная, принимающая значения констант YES или NO}
i : integer;
begin
writeln('Введите стpоку символов:');
read (str);
nw:=0;nc:=0;inword:=NO;
for i:=1 to length(str) do
begin
nc:=nc+1;
if str[i] in [':','.',',','"','!','?',';',' ']{Если pразделитель,}
then inword:=NO {то текущий символ вне слова}
else
if inword=NO then
begin inword:=YES;
nw:=nw+1;
end;
end;
writeln ('nc=',nc,'nw=',nw);
end.
Практические задания
Написать представленные задачи в виде текстовых файлов в программе Word и проверить их работоспособность.
Создать на основе решения блок-схему каждой задачи.
Составить программу, которая запрашивает возраст ребенка и затем выдает решение о приеме ребенка в школу (возраст 7лет).
Program sh;
Var v: integer;
Begin
Write(‘Введите возраст ребенка’);
Readln(v);
If v>=7 then writeln(‘Принимаем в школу’)
else writeln (‘Не принимаем в школу’);
end.

начало
-
+
v>=7
конец
Прин.
Не прин.
Ввод v

2. Модифицировать данную программу, чтобы ограничить верхнюю границу приема в школу 16 годами.
Program sh;
Var v: integer;
Begin
Write(‘Введите возраст ребенка’);
Readln(v);
If (v>=7) and (v<=16) then writeln(‘Принимаем в школу’)
else writeln (‘Не принимаем в школу’);
начало
end.

Ввод v


v>=7
and
v<=16

-
+


Не прин.

Прин.
Прин.


конец


3.Даны два числа. Меньшее из этих чисел заменить суммой данных чисел, большее - произведением.
Program sh;
Var x, y,s,p: integer;
Begin
Write(‘Введите 2 числа’);
Readln(x, y);
s:=x+y; p:=x*y;
If x>y
then begin y:=s; x:=p; end
else begin x:=s; y:=p; end;
writeln(‘x=’, x);
writeln(‘y=’, y);
end.


начало
Ввод x,y
s:=x+y
p:=x*y

-
+
x>y


x:=s
y:=p
y:=s
x:=p



x=
y=


конец

4.Составить программу, которая по введенному номеру дня недели выводит на экран его название.
начало
Program days;
Var day:byte;
Begin
Write(‘Введите номер дня недели’);
Ввод day
Readln(day);
Case day of
-
1: writeln(‘Понедельник’);
+
+
3
2
1
2: writeln(‘Вторник’);
Пн
Пн
Пн
3: writeln(‘Среда’);
Ср
4: writeln(‘Четверг’);
-
-
-
5: writeln(‘Пятница’);
+
6: writeln(‘Суббота’);
Вт
7: writeln(‘Воскресенье’)
else writeln(‘Такого дня нет’);
конец
end; end.




-
-
-
-
7
6
5
4

+
+
+
+

Вс
Сб
Чт


Пт

-

Такого дня нет



конец

5.Составить программу, которая по введенному номеру месяца выводит на экран название времени года.
Program m;
Var k:byte;
Begin
Write(‘Введите номер месяца’);
Readln(k);
Case k of
1, 2, 12: writeln(‘Зима’);
3, 4, 5: writeln(‘Весна’);
6, 7, 8: writeln(‘Лето’);
9, 10, 11: writeln(‘Осень’)
else writeln(‘Такого месяца нет’);
end; end. 

Ввод k
начало
конец
-
-
+
+
+
Зима
+
-
Весна
3,4,5
1,2,12



Лето
6,7,8


9,10,11

Осень


-

Такого месяца нет



6.Вывести на экран таблицу перевода из градусов по шкале Цельсия в градусы по Фаренгейту для значений от 15С до 30С с шагом в 1С. Перевод осуществляется по формуле: F=C*1.8+32.
Program zf;
Var i:integer; f:real;
Begin
Writeln(‘Температура’);
For i:=15 to 30 do
Begin
f:=i*1.8+32;
Writeln(‘по Цельсию’, i, ‘по Фаренгейту’, f:5:2);
End;
End.
Температура
начало

-
i:=15..30


+

f:=i*1.8+32


по Цельсию, i,
по Фаренгейту, f




конец

7. Найти сумму 10 произвольных чисел.
Program z;
Const
N=10;
Var k, x, s: integer;
Begin
k:=0; s:=0; {k- количество введенных чисел}
while k < N do
begin
k:=k+1;
write(‘Введите число’);
readln(x);
s:=s+x;
end;
writeln(‘Сумма чисел равна’, s);
end.

начало


N:=10, k:=0, s:=0


k<N

-


s:=s+x
+

k:=k+1


s
Ввод x

конец

8. В автопарке, имеющем 18 машин марки КАМАЗ, каждый из КАМАЗов перевез за день определенный объем груза. Определить суммарный объем перевозок грузов за день.
Uses wincrt;
Type KAMAZ=array [1..18] of real;
Var
i:integer;
p:KAMAZ;
S:real;
Begin
S:=0;
For i:=1 to 18 do
Begin
Writeln(‘Введите объем перевозок’, I,‘-ой машины, т’);
Readln(p[i]);
S:=S+p[i]; End;
Writeln(‘Суммарный объем перевозок S=’,S:8:2,‘т’);
End.
начало

конец
S
S:=S+p[i]
Ввод p[i]
+
-
i:=1..18
S:=0

9. Известна среднемесячная зарплата всех 16 сотрудников одного отдела. Найти величину наибольшей среднемесячной зарплаты в отделе.
Uses wincrt;
Type ZARPL=array [1..16] of real;
Var
i:integer;
sotr:ZARPL;
max:real;
Begin
For i:=1 to 16 do
Begin
Writeln(‘Введите зарплату ’,I,‘-го сотрудника, руб.’);
Readln(sotr[i]);
End;
max:=sotr[1];
For i:=2 to 16 do
If max<sotr[i] then max:=sotr[i];
Writeln(‘Наибольшая зарплата =’, max:10:2, ‘руб.’);
начало
End.
max:=sort[1]
+
-
Ввод sort[i]
i:=1..16

конец


-
max<sotr[i]
i:=2..16


+
+

max:=sort[i]


-



max


конец

10. Известны результаты экзамена по информатике одной группы из 22 студентов. Определить, сколько студентов сдали экзамен на 4 и 5.
Текст программы:
Type INF=array[1..22] of integer;
Var
stud:INF;
i,p:integer;
begin
p:=0;
for i:=1 to 22 do
begin
stud[i]:=0;
while ((stud[i]<1) or (stud[i]>5)) do
writeln(‘Введите оценку ’,i,’-го студен-та’);
readln(stud[i]);
if stud[i]>3 then p:=p+1;
end;
writeln(‘На 4 и 5 сдали экзамен ’,p,’ сту-дентов’);
end.
начало

-
-
i:=1..22



+

stud[i]:=0


stud[i]<1) or (stud[i]>5)

-
+
-
-


+
p:=0

Ввод stud[i]




stud[i]>3

+

p:=p+1






На 4 и 5 сдали экзамен p сту-дентов


конец

11. Предположим, известны результаты соревнований по стрельбе, в которых принимали участие 9 человек. Расположить данные результаты в порядке возрастания набранных при стрельбе очков.
Type STREL=array[1..9]of integer;
Var
rez:strel;
i,j,s:integer;
Begin
For i:=1 to 9 do
begin
writeln(‘Введите результаты ’,i,’-го участни-ка’);
readln(rez[i]);
end;
for i:=1 to 8 do
for j:=i+1 to 9 do
if rez[i]>rez[j] then
begin
s:=rez[j];
rez[j]:=rez[i];
rez[i]:=s;
end;
writeln(‘Отсортированные по возрастанию результаты:’);
for i:=1 to 9 do write (rez[i]:5,’ ‘);
end.
начало

Ввод rez[i]
+
-
i:=1..9

конец
rez[i]
+
-
i:=1..9
Отсортированные по возрастанию результаты:
-
+
s:=rez[j],
rez[j]:=rez[i],
rez[i]:=s,
+
-
rez[i]>rez[j]
i:=1..8 j:=i+1..9

12. Задан одномерный массив В (10), заполненный произвольным образом. Подсчитать количество элементов массива, больших заданного числа k.
Var b:array [1..10] of word;
I, k, s : word;
Begin
s:=0;
For i:=1 to 10 do
b[i]:=random(100);
Write(‘Введите число k’);
Readln(k);
For i:=1 to 10 do
If b[i]>k then s:=s+1;
Write(‘Количество элементов’, s);
End.

конец
s
-
+
s:=s+1
b[i]>k
-
+
-
i:=1..10
+
начало
Ввод k
b[i]:=random(100);
s:=0
i:=1..10

13. Определить самую высокую температуру и самый теплый день в мае.
Var t:array [1..31] of integer;
I, max, n : integer;
Begin
For i:=1 to 31 do
Begin
t[i]:=random(30);
Write(b[i], ‘ ‘);
End;
max:=t[1]; n:=1;
For i:=2 to 31 do
Begin
If t[i] > max then max:=t[i]; n:=i ;
End;
Write(‘максимальная температура’, max, ‘в’, n, ‘день’);
End.
начало

max:=t[1]
n:=1
+
конец
max,n
-
+
-
max:=t[i]
n:=i
t[i] > max
i:=2..31
b[i]
-
t[i]:=random(30)
+
i:=1..31

14. Пусть задана матрица А из действительных чисел размера 3х4. Найти наибольший элемент во второй строке данной матрицы.
Type Matr=array[1..3,1..4] of real;
Var max:real;
a:Matr;
i,j:integer;
begin
for i:=1 to 3 do
for j:=1 to 4 do
begin
writeln(‘Введите элемент а[‘,i,’,’,j,’]’);
readln(a[i,j]);
end;
max:=a[2,1];
for j:=2 to 4 do
if max<a[2,j] then max:=a[2,j];
writeln(‘Наибольший элемент второй строки=’,max:8:2);
max:=a[2,1]
max:=a[2,j]
j:=2..4
-
начало
+
i:=1..3 j:=1..4
end.+
конец
max
-
+
-
max<a[2,j]
a[i,j]

15. Известны результаты 5 студентов по итогам экзаменов по химии и информатике. Найти фамилии студентов, сдавших оба экзамена на отлично.
Program Sessia;
type PR=array [1..5,1..2]of integer;
Fam=array[1..5]of string[10];
var r:PR;
st:Fam;
i,j:integer;
begin
for i:=1 to 5 do
begin
writeln('Введите фамилию ',i,'-го сту-дента');
readln(st[i]);
writeln('Введите оценку данного сту-дента по химии (от 2 до 5)');
readln(r[i,1]);
writeln('Введите оценку данного сту-дента по информатике (от 2 до 5)');
readln(r[i,2]);
end;
for i:=1 to 5 do
if (r[i,1]=5) and (r[i,2]=5) then writeln('Студент-отличник - ',st[i]);
i:=1..5
end.
начало
i:=1..5
Ввод st[i], r[i,1], r[i,2]
-

конец
st[i]
+
(r[i,1]=5) and (r[i,2]=5)
+
-
+
-

16. Сформировать таблицу Пифагора (таблица умножения) и вывести ее на экран.
Program Pifagor;
Uses crt;
Var p: array[1..9, 1..9] of integer; i, j:integer;
Begin
Clrscr;
for i:=1 to 9 do
for j:= 1 to 9 do
begin
p[i,j]:= i*j;
write(p[i,j], ‘ ‘);
writeln
end;
end.
начало
-
+
i:=1..9
j:=1..9

конец
p[i,j]
p[i,j]:= i*j

17. Задан двумерный массив В(10, 10), заполненный случайными числами из [-10,10]. Найти и вывести на экран те элементы массива, которые
больше заданного числа k.
Program massiv;
Uses crt;
Var b: array[1..10, 1..10] of integer; i, j, k :integer;
Begin
Clrscr;
for i:=1 to 10 do
начало
begin
for j:= 1 to 10 do
begin
b [i,j]:= random(20)-10;
-
i:=1..10
j:=1..10
write(b[i,j], ‘ ‘);
end;
writeln;
end;
+
write(‘Введите число k’);
readln (k);
b [i,j]:= random(20)-10
For i:=1 to 10 do
For j:=1 to 10 do
If b[i, j] >k then write (b[i, j]);
конец
b[i,j]
+
-
b[i, j] >k
+
-
i:=1..10
j:=1..10
Ввод k
b[i,j]
End.
18. Дано предложение. Сколько слов является перевёртышами и будет ли это число совершенным.
var i,j,k,l,l1,sum,k1 : longint;
a,b,c : string;
d : array [1..60] of longint;
begin
clrscr;
textcolor(11);
write('введите текст: ');
readln(a);
l:=length(a);
if (a[l]<>'.')or(a[l]<>'!')or(a[l]<>'?')
then begin
a[l+1]:=' ';
inc(l);
end
else a[l]:=' ';
for i:=1 to l do if (a[i]=' ')
then begin
l1:=length(b);c:='';
for j:=l1 downto 1 do c:=c+b[j];
if b=c then inc(k);b:='';
end
else b:=b+a[i];
if k=1 then begin
write('совершенное');
readln;halt;
end;
sum:=0;k1:=1;
for i:=1 to k-1 do if k mod i=0 then begin
d[k1]:=i;inc(k1);
end;
for i:=1 to k1-1 do sum:=sum+d[i];
if k=sum then write('совершенное')
else write('не совершенное');
readln;
end.

-
b:=b+a[i];
b:=''
inc(k)
a[l]:=' '
-
c:=c+b[j]
+
j:=11..1
l1:=length(b),c:=''
+
a[l]:=' '
-
+
for
a[l]:=' '
-
a[l+1]:=' ', inc(l);
+
(a[l]<>'.')or(a[l]<>'!')or(a[l]<>'?')
l:=length(a)
Ввод а
начало

+
+
+

совершенное
k=1


-


sum:=0, k1:=1

-
i:=1.. k-1



k mod i=0

d[k1]:=i,inc(k1)


-



i:=1 ..k1-1

конец
не совершенное
совершенное
k=sum
-
+
sum:=sum+d[i]
+
-

19. Найти значение выражения 1*1+2*2+...+n*n
var n,s,i : integer;
begin
write('n = ');
readln(n);
s:=0;
for i:=1 to n do
s:=s+i*i;
writeln('s = ',s);
readln;
end.
начало
конец
s
s:=s+i*i
-
+
i:=1.. n
s:=0
Ввод n

20. Найти сумму.
var a,b,s : integer;
begin
clrscr;
write('a=');readln(a);
write('b=');readln(b);
s:=a+b;
write('сумма s=',s);
readln;
end.
начало
s:=a+b

конец
Ввод a,b
s

21. Составить из двух таблиц 3-ю упорядоченную по возрастанию
var a : array [1..10] of longint;
b : array [1..20] of longint;
c : array [1..30] of longint;
n,m,k,l,i,j,min : longint;
begin
clrscr;
write('введ.кол.эл.таб.а n=');readln(n);
write('введ.кол.эл.таб.b m=');readln(m);
for i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
end;
for i:=1 to m do
begin
write('b[',i,']=');readln(b[i]);
end;
k:=n+m;{кол.эл.таб.с}
(*заносим эл.таб.а в таб.с*)
for i:=1 to n do c[i]:=a[i];
(*заносим эл.таб.в в таб.с*)
for i:=1 to m do c[i+n]:=b[i];
(*упорядочим таб.с[1..k] по возраст*)
for i:=1 to k-1 do
begin
l:=i;{номер мин.}min:=c[i];
for j:=i+1 to k do
if c[j]<min then
begin
min:=c[j];l:=j;
end;
c[l]:=c[i];{меняем местами 1-й и мин.эл.}
c[i]:=min;
end;
for i:=1 to k do writeln('Ответ:c[',i,']=',c[i]);
readln;
начало
end.
Ввод n,m

Ввод a[i]
-
+
i:=1.. n
+
c[i]:=a[i]
-
+
i:=1.. m
c[i+n]:=b[i]
-
i:=1.. n
+
-
i:=1.. m
Ввод b[i]
k:=n+m

конец
c[i]
+
i:=1.. k
c[l]:=c[i]
c[i]:=min
+
min:=c[j], l:=j
-
-
c[j]<min
+
i:=1..k-1
i:=i+1..k
-
l:=i,
min:=c[i]
+

22. Найти максимальное число из трёх
var a,b,c,max : integer;
begin
clrscr;
write('a=');readln(a);
write('b=');readln(b);
write('c=');readln(c);
if (a>b) and (a>c) then max:=a;
if (b>a) and (b>c) then max:=b
else max:=c;
write('max=',max);
readln;
end.
начало

конец
max
-
(b>a) and (b>c)
max:=c
max:=b
+
-
+
max:=a
(a>b) and (a>c)
Ввод a,b,c

23. Найти наибольшее из четырёх чисел.
var a,b,c,d,max,max1,max2 : real;
procedure bol2( aa,bb : real; var maxmax : real );
begin
if aa>bb then maxmax:=aa
else maxmax:=bb;
end;
begin
clrscr;
write('введте a,b,c,d через пробел ');
readln(a,b,c,d);
bol2(a,b,max1);
bol2(c,d,max2);
bol2(max1,max2,max);
writeln('max=',max);
readln;
end.
1) Блок-схема процедуры:
bol2( aa,bb : real; var maxmax : real )
2)Блок-схема основной программы:
конец
max
bol2(max1,max2,max)
bol2(c,d,max2)
bol2(a,b,max1)
Ввод a,b,c,d
начало
maxmax:=aa
конец
-
maxmax:=bb
+
aa>bb

24. Количествово букв "а" в тексте
uses crt;
var d : string;
n,i : integer;
begin
write('наберите текст ');
readln(d);
n:=0;
for i:=1 to length(d) do
if d[i]='а' then n:=n+1;
write('В тексте а=',n);
readln;
end.
i:=1..length(d)
конец
n
n:=n+1
-
+
d[i]='а'
-
+
n:=0
Ввод d
начало

25. Составить программу определения среднего арифметического
uses crt;
var a : array [1..10] of integer;
s : real;
sum,n,i : integer;
begin
clrscr;
write('n=');readln(n);
for i:=1 to n do
begin
write('a[',i,']=');
readln(a[i]);
начало
end;
sum:=0;
for i:=1 to n do
Ввод n
sum:=sum+a[i];
s:=sum/n;
writeln('ср ариф= ',s);
-
-
i:=1..n
readln;
end.

конец
s
s:=sum/n
sum:=sum+a[i];
i:=1..n
sum:=0
+
a[i]
+

26. Записать программу возвед. числа а в степень n
var a,n,i,p : integer;
begin
clrscr;
write('n=');readln(n);
write('a=');readln(a);
p:=1;
начало
for i:=1 to n do p:=p*a;
write('p=',p);
readln;
Ввод n,a
end.
-
+
конец
p
p:=p*a
i:=1..n
p:=1

27. Сост. прог. выч. факториала числа n.
Пример: 5!=1*2*3*4*5
7!=1*2*3*4*5*6*7 }
var f,n,i : integer;
begin
clrscr;
write('n=');readln(n);
f:=1;
for i:=1 to n do f:=f*i;
write('f=',f);
readln;
f:=f*i
f:=1
Ввод n
начало
end.

i:=1..n
-
+
f
конец

28. Написать программу подсчета количества часов, минут и секунд в данном количестве суток.
uses crt;
var syt,has,min,sec : extended;
begin
clrscr;
write('сут = ');
readln(syt);
has:=24*syt;
min:=60*has;
sec:=60*min;
writeln('часов : ',has:0:0);
writeln('минут : ',min:0:0);
writeln('секунд : ',sec:0:0);
readln;
Ввод syt
начало
end.
конец
has, min, sec
has:=24*syt
min:=60*has
sec:=60*min

29. Составить программу проверки есть ли в тексте буква "s"
var t : string;
i : integer;
ot : boolean;
begin
clrscr;
writeln('введите текст:');readln(t);
ot:=false;
for i:=1 to length(t) do
if t[i]='s' then ot:=true;
if ot=true then write('да')
else write('нет');
readln;
Ввод t
начало
end.
-
Нет
Да
конец
+
ot=true
ot;=true
-
+
t[i]='s'
-
+
i:=1..length(t)
ot:=false

30. Найти значение выражения ( -натуральное число, а>0, х>0, у=1+(1/(1+(1/1+...1+1/x))..)) n знаков "+"
uses crt;
var x,n,i : integer;
y : real;
begin
clrscr;
write('n=');readln(n);
write('x=');readln(x);
y:=x;
for i:=1 to n do y:=1+1/y;
write('y=',y);
readln;
end.
y:=1+1/y
y:=x
Ввод n,x
начало
-
+
конец
y
i:=1..n

31. Найти значение выражения ( -нат. число, а>0, х>0, f=sqr(a+sqr(a+sqr(a+..sqr(a))..) ) n знаков "+"
uses crt;
var a,n,i : integer;
f : real;
begin
clrscr;
write('n=');readln(n);
write('a=');readln(a);
f:=a;
for i:=1 to n do f:=a+sqr(f);
write('f = ',f);
readln;
f:=a+sqr(f)
f:=a
Ввод n,a
начало
i:=1..n
end.

-
+
конец
f

32. Дано предложение составить программу располагающую слова в порядке убывания длины слов
uses crt;
type slov = array [1..10] of string;
var p,b : string;
s : slov;
i,j,l : integer;
q : boolean;
procedure maxdl( ii,jj : integer;ss : slov; var ll : integer );
var t:integer;m:string;
begin
m:=ss[ii]; { считает max(t) }
ll:=ii; { l-номер max }
for t:=ii+1 to jj do
if length(m)<length(ss[t]) then
begin
m:=ss[t];
ll:=t;
end;
end {maxdl};
begin
clrscr;
write('текст p=');readln(p);
j:=1;
for i:=1 to length(p) do
begin
b:=p[i];
if b=' ' then j:=j+1
else s[j]:=s[j]+b;{ склеивание слова и заносим в таб }
end;
b:='';
for i:=1 to j do
begin
maxdl(i,j,s,l); { находим номер мах элм }
b:=s[i]; { меняем местами мах элм: }
s[i]:=s[l];
s[l]:=b;
end;
for i:=1 to j do write(s[i],' ');
readln;
end.
1 Блок-схема процедуры.
+
-
+
-
конец
m:=ss[t],ll:=t
length(m)<length(ss[t])
t:=ii+1.. jj
t:=ii+1.. jj
m:ss[ii], ll:=ii
Maxdl(ii,jj:integer; ss:slov;var ll:integer)

2 Блок-схема основной программы.
-
+
+
-
-
+
-
конец
s[i]
i:=1..j
b:=s[i],s[i]:=s[l],
s[l]:=b
maxdl(i,j,s,l)
i:=1..j
b:=’’
s:=s[i]+b
j:=j+1
b=’’
b:=p[i]
i:=1..length(p)
j:=1
+
Ввод p
начало

33. Дана вещ. таблица a[1..n].
Найти кол-во отрицательных элементов таблицы. }
uses crt;
var k,n,i : longint;
a : array [1..10] of longint;
begin
clrscr;
write('n = ');readln(n);
for i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
end;
for i:=1 to n do
Ввод n
начало
if a[i]<0 then inc(k);
write('k = ',k);
readln;
end.
+
+
-
-
конец
k
+
-
a[i]
inc(k)
a[i]<0
i:=1..n
i:=1..n

34. Найти максимальный элемент таблицы а[1..10]
uses crt;
var a : array [1..10] of longint;
max,i,n : longint;
begin
clrscr;
write('n = ');readln(n);
for i:=1 to n do
begin
a[i]
Ввод n
начало
i:=1..n
write('a[',i,']=');readln(a[i]);
end;
max:=a[1];
for i:=2 to n do
if a[i]>max then max:=a[i];
write('max = ',max);
readln;
end.
+
+
-
max:=a[i]
+
a[i]>max
-
-
конец
max
i:=2..n
max:=a[1];

35. Дана таблица [1..n] из целых чисел. Получить элементы, которые находятся между max и min
const L=20
type massiv=array[1..L] of integer;
var tabl:massiv;
n,i,max,min:integer;
begin
writeln(‘>n’);
readln(n);
for i:1 to n do
begin
writeln(i,’й элемент=’);
readln(tabl[i]);
end;
max:=tabl[1];
min:=tabl[1];
for i:=2 to n do
begin
if tabl[i]>max
then max:=tabl[i];
if tabl[i]<min
then min:=tabl[i]
end;
for i:1 to n do
if (tabl[i]>min) and (tabl[i]<max) then
writeln(i,’й элемент=’,tabl[i]);
readln;
end.

+
-
-
+
-
+
+
+
-
-
конец
tabl[i],i
(tabl[i]>min) and (tabl[i]<max)
i:=1..n
min:=tabl[i]
tabl[i]<min
max:=tabl[i]
tabl[i]>max
i:=2..n
max:=tabl[1],min:=tabl[1]
Ввод tabl[i]
-
Ввод n
начало
i:=1..n
+

36. Составить программу для определения лежит ли точка (x3;y3),
на прямой проходящей через точки (x1;y1),C(x2;y2)
uses crt;
var v,x1,x2,x3,y1,y2,y3 : real;
begin
clrscr;
write('x1=');readln(x1);
write('y1=');readln(y1);
write('x2=');readln(x2);
write('y2=');readln(y2);
write('x3=');readln(x3);
write('y3=');readln(y3);
v:= (x3-x1)*(y2-y1)-(y3-y1)*(x2-x1);
if v=0
then write('лежит')
else write('не лежит');
readln;
end.
начало
Ввод x1,x2,x3,y1,y2,y3
v:= (x3-x1)*(y2-y1)-(y3-y1)*(x2-x1);
-
конец
не лежит
лежит
v=0
+

37. Найти номер максимального элемента таблицы а[1..10]
uses crt;
var a : array [1..100] of longint;
k,i,n,max : longint;
begin
Ввод n
max:=a[1];k:=1
конец
i:=1.. n
начало
-
+
k
clrscr;
write('n=');readln(n);
for i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
a[i]>max
i:=2.. n
end;
max:=a[1];k:=1;
for i:=2 to n do
if a[i]>max then
begin
a[i]
max:=a[i];k:=i;
end;
write('номер: ',k);
readln;
end.
-
+
+
-
max:=a[i]
k:=i

38. Дан линейный массив из n элементов. Составить программу упорядочивания элементов данного массива.
+
начало
Ввод n
i:=1.. n
+
a[i]
uses crt;
var a : array [1..100] of longint;
j,i,n,max : longint;
begin
clrscr;
write('n=');readln(n);
for i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[j]>a[i] then
max:=a[j]
a[j]:=a[i]
a[i]:=max
a[j]>a[i]
i:=1.. n-1
j:=i+1..n
begin
max:=a[j];
-
-
a[j]:=a[i];
a[i]:=max;
end;
for i:=1 to n do writeln('a[',i,']=',a[i] );
+
readln;
+
end.
-
конец
a[i]
i:=1..n

39. Дано предложение, определить количество слов в нём.
uses crt;
var tec : string;
l,i,n : longint;
begin
clrscr;
n
n:=n+1
tec[i]=' '
l:=length(tec)+1;tec[l]:=' '
Ввод tec
i:=1.. l
начало
-
конец
write('введите текст:');readln(tec);
l:=length(tec)+1;tec[l]:=' ';
for i:=1 to l do if tec[i]=' 'then n:=n+1;
write('В тексте ',n,' слов');
readln;
end.
+
-
+

40. Дан текст, определить кол-во слов "кот".
uses crt;
var a ,kot: string;
i,m,k : longint;
begin
clrscr;
write('введите текст ');readln(a);
k:=0;m:=length(a);
kot:= a[i]+a[i+1]+a[i+2];
for i:=1 to m-2 do kot='кот'then inc(k);
write('В тексте ',k,' слов кот');
readln;
end.
начало
k:=0;m:=length(a)
kot:= a[i]+a[i+1]+a[i+2]
+
kot='кот'
k
inc(k)
-
+
i:=1.. m-2
конец
-
Ввод a

41. Найти количество различных чисел в одномерной таблице
(*МЕТОД:Каждый следующий элемент сравниваем со всеми
предыдущими и если равных ему среди предыдущих не будет
то flag оставляем неизменным и счетчик к увеличиваем*)
uses crt;
Ввод n
начало
var a : array [1..10] of longint;
i,j,k,flag,n : integer;
begin
clrscr;
write('введите кол.эл.таб. а n=');readln(n);
for i:=1 to n do
begin
-
-
-
-
i:=2.. n
i:=1.. n
write('a[',i,']=');readln(a[i]);
end;
k:=1;{Пусть разных чисел нет т.е.все одинак.}
for i:=2 to n do
+
+
+
begin
flag:=0;j:=i-1;{j -стоит перед i}
k:=0
a[i]
while (flag=0) and (j>=1) do
begin
if a[i]=a[j] then flag:=1;{решение}
j:=j-1;
end;
if flag=0 then k:=k+1;
end;
write('Колич.различных чисел к=',k);
readln;
end.
flag=0
k:=k+1

(flag=0) and (j>=1)
a[i]=a[j]
j:=j-1

+
+
конец
k
flag:= 0;j:=i-1
flag:=1

42. Каждую букву слова A поместить в таблицу.
uses crt;
var a : string;
n,i : longint;
b : array [1..10] of string;
begin
clrscr;
write('введите текст:');readln(a);
n:=length(a);
for i:=1 to n do b[i]:=a[i];
for i:=1 to n do
begin
writeln('b[',i,']=',a[i]);
end;
readln;
end.
n:=length(a)
Ввод a
начало
-
+
i:=1.. n
+
-
i:=1.. n
конец
a[i]
b[i]:=a[i]

43. Составить алгоритм нахождения суммы цифр числа.
uses crt;
var i,n,k,s : longint;
b : array [1..10] of integer;
begin
clrscr;
write('введите число ');readln(n);
k:=1;
while n>=1 do
begin
b[k]:=trunc(n) mod 10; {элм. таб}{b[k]:= n mod 10};
n:=trunc(n)div 10; {n: = n div 10};
k:=k+1;
end;
for i:=1 to k do s:=s+b[i];
k:=1
Ввод n
начало
write('s=',s);
readln;
end.
конец
s
s:=s+b[i]
+
-
i:=1..k
-
b[k]:=trunc(n) mod 10,
n:=trunc(n)div 10,
k:=k+1
n>=1
+

44. Найти двузначное число, сумма кубов цифр которого равна n.
uses crt;
var j,i : integer;
z,n : longint;
begin
clrscr;
начало
write('n=');readln(n);
for j:=1 to 9 do
Ввод n
for i:=1 to 9 do
if i*i*i+j*j*j=n then begin z:=10*i+j;
write('z=',z);
end;
j:=1..9
i:=1..9
readln;
end.


+
i*i*i+j*j*j=n


z:=10*i+j

-

z
конец

Задания для самостоятельной работы
На языке программирования Pascal написать программы в соответствии с вашим вариантом. Задачи должны быть решены алгоритмически и на языке программирования Pascal.
В заданном тексте подсчитать наибольшее количество подряд идущих пробелов.
var text: string;
max,dl,schet,i: worol;
begin
writeln(‘введите текст’,’’);
dl:=length(text);
max:=a; m:=0;
for i:=1 to dl do
if i=’’ then Jnc(m) else
begin
if m>max then max:=m;
m:=0;
начало
end;
writeln(‘максимальное кол-во:’,max);
readln;
dl:=length(text)
max:=a; m:=0
end.

-
i:=1..dl

+
Jnc(m)
+
i=’’
-
+
max:=m
m:=0
-
m>max
max
конец

Из заданного текста удалить те его части, которые заключены в кавычки (вместе с кавычками).
var text: string;
i,kol,met1,met2,dl:worol;
begin
writeln(‘вводите текст:’);
readln(text);
dl:=length(text);
kol:=0; met1:=0; met2:=0;
for i:=1 to dl do
begin
if (kol=1) and (text[i]=’ ’) then
begin
kol:=2;
met2:=i-met1+1;
end;
if kol=2 then
begin
delete(text,met1,met2);
met1:=0;
met2:=0; kol:=0;
end;
if (text[i]=’ ’) and (kol=0) then
begin
kol:=0;
met1:=i;
end;
end;
writeln(text);
readln;
end.

+
+
-
конец
text
kol:=0
met1:=i
(text[i]=’ ’) and (kol=0)
+
+
-
delete(text,met1,met2)
met1:=0
met2:=0, kol:=0
kol=2
-
kol:=2
met2:=i-met1+1
(kol=1) and (text[i]=’ ’)
i:=1..dl
dl:=length(text)
kol:=0;met1:=0 met2:=0
Ввод text
-
начало

Осуществить циклический сдвиг компонент заданного вектора A(N) вправо на две позиции, то есть получить вектор A= (a n-1, an,a1,a2,…,an-2)
const L=20; sd=2;
type VEKT=array[1..L] of integer;
var b,a:VEKT;
i:integer;
begin
write(‘введите вектор,’ ’);
for i:=1 to L do
read(a[i]);
for i:=1 to L do
начало
-
+
Ввод a[i]
-
i:=1..L
+
Ввод a[i]
-
begin
if i<=sd then b[ i]:=a[L-sd+i]
else b[i]:=a[i-sd];
write(b[i]);
end;
readln;
end.
+
i:=1..L
+
-
i<=sd
b[ i]:=a[L-sd+i]
b[i]:=a[i-sd]
b[i]
конец

В заданном массиве A(N) определить число соседств:
начало
А) двух положительных чисел;
Б) двух чисел разного знака;
В) двух чисел одного знака.
kpd:=0; kraz:=0; kod:=0
const L=20
type chsod=array[1..L] of integer;
var a: chsod;
-
i:=1..L
i,kpd,kraz,kod:word;
begin
kpd:=0; kraz:=0; kod:=0;
+
for i:=1 to L do begin
Ввод a[i]
write (’a[’,i’,]=’);
readln(a[i]);
end;
for i:=1 to L-1 do
begin
if (a[i]>0) and (a[i+1]>0) then
-
i:=1..L-1
kpol:=kpol+1;
if a[i]*a[i+1]<0 then kraz:=kraz+1;
if a[i]*a[i+1]>0 then kod:=kod+1;
end;
-
write(‘положительных:’,kpol);
+
(a[i]>0) and (a[i+1]>0)
write(‘разных знаков:’,kraz);
write(‘одинаковых знаков:’,kod);
kpol:=kpol+1
readln;
end.
-
+
kraz:=kraz+1
a[i]*a[i+1]<0
-
+
kod:=kod+1
a[i]*a[i+1]>0
-
kpol,kraz,kod
конец

Используя сведения о ежемесячных выплатах зарплаты сотрудникам фирмы, выяснить, не оказалась ли годовая зарплата кого-либо из сотрудников ниже годового минимума, оговоренного в его контракте.
Const chel=20
Type people=array[1..chel] of string;
price=array[1..12] of word;
Var k,i,j:byte;
s,min:word;
spis,pera:people;
plata:price;
begin
writeln(’введите размер минимальной зарплаты’);
readln(min);
s:=0;
k:=0;
for i:=1 to chel do
begin
write(’имя сотрудника:’);
readln(pers[i]);
write(‘его зарплата’);
for j:=1 to 12 do
begin
writeln(j,-й месяц:’);
readln(plata[j]);
s:=s+plata[j];
end;
if s<min then
begin
k:=k+1;
spis[k]:=pers[i];
end;
s:=0;
end;
writeln(‘список работников с платой минимальной’);
for i:=1 to k do
writeln(spis[i]);
readln;
end.

начало

конец
k:=k+1 spis[k]:=pers[i]
Ввод pers[i]
i:=1..chel
+
+
+
-
-
-
spis[i]
i:=1.. k
s:=0
i:=1..12
s<min
s:=s+plata[j]
Ввод plata[j]
s:=0;
k:=0;

Элементы заданного массива x = (x1,x2,x3,…,xn) переупорядочить следующим образом: x= (xn, xn-1,…x1)
const L=20;
type massiv=[1..L] of integer;
var i:integer;
x,b:massiv;
begin
for i:=1 to L do
begin
writeln(‘x[‘,i,’]=’);
readln(x[i]);
end;
for i:=1 to L do
begin
b[i]:=x[L-i+1]
write(b[i]);
end;
начало
-
-
i:=1..L
i:=1..L
+
+
Ввод x[i]
b[i]:=x[L-i+1]
конец
b[i]
readln;
end.
Вычислить сумму квадратов всех элементов заданного массива X(N), за исключением элементов, кратных пяти.
начало
const L=20;
type massiv=[1..L] of integer;
var s,i:integer;
Ввод n
-
Ввод a[i]
i:=1..n
+
a:massiv;
begin
writeln(‘>n’);
readln(n);
for i=1 to n do
writeln(‘a[‘,I,’]=’);
readln(a[i]);
s:=0;
for i:=1 to n do
if a[i] mod 5<>0 then
s:=s+a[i]*a[i];
s:=0
writeln(‘сумма квадратов=’,s);
readln;
конец
+
+
-
s
a[i] mod 5<>0
s:=s+a[i]*a[i]
i:=1..n
end.
В заданном массиве a(n), все элементы которого попарно различны найти:
А) наибольший элемент из отрицательных;
Б) наименьший из положительных;
В) второй по величине элемент.
const L=20
type massiv=array[1..L] of integer;
var a:massiv;
k,n,i,max,max2,maxo,minp,j:integer;
begin
writeln(‘>n’); readln(n);
for i:=1 to n do
begin
writeln(‘a[‘,i,’]=’);
readln(a[i]);
end;
for i:=1 to n-1 do
if a[i]=a[i+1] then
begin
writeln(‘есть одинаковые элементы!’);
break;
end;
maxo:=a[1]; minp:=a[1]; max:=a[1]; max2:=0;
k:=0
for i:=1 to n do
begin
if a[i]>0 then
if a[i]<minp then minp:=a[i]
else
if a[i]>maxo then maxo:=a[i];
if a[i]>max then max:=a[i];
end;
i:=1; j:=1
while maxo2=0 do
begin
for i:=1 to n do
begin
if a[i]=max-j then
max2:=a[i];
k:=i;
end;
Jnc(j);
end;
if minp<=0 then writeln (‘наименьшего положительного элемента нет!)
else writeln(minp);
if maxo<=0 then writeln(‘наибольшего отрицательного элемента нет!’)
else writeln(maxo);
if max2=max then writeln(‘второго по величине элемента нет!’)
else writeln(max2);
readln; end.
начало
есть одинаковые элементы!
a[i]=a[i+1]
i:=1..n-1
-
-
-
a[i]>max
a[i]<minp
a[i]>0
i:=1..n
-
Ввод a[i]
i:=1..n

Ввод n
+
-
-
+
+
+
-
minp:=a[i]
-
+
+
a[i]>maxo
max:=a[i]
maxo:=a[i]
maxo:=a[1]; minp:=a[1]; max:=a[1]; max2:=0;
k:=0
break

конец
+
-
+
-
-
+
-
+
+
-
+
+
-
max2
max2=max
max2 нет
maxo
maxo>=0
maxo нет
max2:=a[i]
k:=i
minp
minp нет
minp<=0
a[i]=max-j
i:=1..n
max2=0

Выяснить, есть ли в заданном предложении буква «ы».
var pr: string;
i,k:integer;
pr[i]=’ы’
i:=1.. length(pr)
begin
writeln(‘введите предложение’);
readln(pr);
k:=0
for i:=1 to length(pr) do
if pr[i]=’ы’ then k:=1;
if k=1 then writeln(‘есть’)
начало
Ввод pr
k:=1
конец
else wrieln(‘нет’);
readln;
-
-
+
-
+
нет
k=1
есть
end.
начало
10. Выяснить, верно ли то, что в предложении имеется заданное слово S?
var pr,s:string;
a,dl,I,j,k,l:integer;
Ввод pr,S
begin
writeln(‘введите предложение:’);
readln(pr);
writeln(‘введите слово S:’);
dl:=length(S), l:=0, j:=0
readln(S);
+
+
+
+
dl:=length(S);
l:=0; j:=0;
-
-
-
-
-
-
-
l<dl
pr[i]=S[1]
i:=1.. a
a:=length(pr)-dl+1;
l:=0
for i:=1 to a do
begin
if pr[i]=S[1] then
for k:=i to (i+dl) do
if pr[k]=s[j] then
begin
l:=l+1;
k:=i to (i+dl)
j:=j+1;
end;
if l<dl then l:=0;
end;
pr[k]=s[j]
if l>=dl then writeln(‘есть’)
else writeln(‘нету’);
+
readln;
конец
есть
нету
l>=dl
l:=l+1, j:=j+1
end.
11. Вычеркнуть из заданного слова все буквы «а».
var sl:string;
i:integer;
begin
writeln(‘введите слово’);
readln(sl);
for i:=1 to length(sl) do
if sl[i]=’a’ then Delete(sl,i,1);
writeln(‘результат:’,sl);
readln;
-
-
+
+
конец
sl
Delete(sl,i,1)
sl[i]=’a’
i:=1..length(sl)
начало
Ввод sl
end;
12. Выяснить, верно ли, что в заданном предложении есть два одинаковых соседствующих символа.
Var pr:string;
k,i,dl:integer;
begin
writeln(‘введите предложение’);
readln(pr);
dl:=length(pr);
k:=0;
for i:=1 to dl-1 do
if pr[i]=pr[i+1] then
k:=1;
Ввод pr
начало
if k=1 then writeln(‘верно’)
else writeln(‘не верно’);
readln;
+
-
-
+
-
+
k:=1
pr[i]=pr[i+1]
i:=1..dl-1
dl:=length(pr), k:=0
k=1
верно
конец
Не верно
end.
Рекомендуемая литература:
1. Баврин, И.И. Высшая математика [Текст] /И.И. Баврин; учебник [гриф МО].-7-е изд.,- М.:Академия,2008.-616 с. - (Высш. проф. образование).
2. Безручко, В.Т. Компьютерный практикум по курсу "Информатика" [Текст]:учеб. пособие для студентов вузов/В.Т. Безручко.-3-е изд., перераб. и доп.-М.: Форум: ИНФРА-М,2009.-368 с.: ил.
3. Информатика. Общий курс [Текст]:учеб. пособие для вузов/А.Н. Гуда, М.А. Бутакова, Н.М. Нечитайло, А.В. Чернов; под ред.В.И. Колесникова; [гриф УМО].-3-е изд.-М.; Ростов н/Д: Дашков и К; Наука-Спектр,2009.-400 с.
4. Калабухова, Г.В. Компьютерный практикум по информатике. Офисные технологии [Текст]: учеб. пособие для вузов/Г.В. Калабухова, В.М. Титов; [гриф УМО].-М.: Форум: Инфра-М,2008.-336 с.: ил.
5. Канцедал, С.А. Алгоритмизация и программирование [Текст]: учеб. пособие для сред.проф. образования/С.А. Канцедал; [гриф УМО].-М.: Форум: Инфра-М, 2008.-352 с.: ил.
6. Могилев, А.В. Практикум по информатике [Текст]/А.В. Могилев, Н.И. Пак, Е.К. Хеннер; под ред. Е.К. Хеннера.-4-е изд., стереотип.- М.:Академия,2008.- 608 с.
7. Павловская, Т.А. Паскаль. Программирование на языке высокого уровня [Текст]: практикум: учеб. пособие для вузов/Т.А. Павловская; [гриф МО]. - М.; СПб.: Питер, 2007.-317 с.: ил.
8.Павловская, Т.А. Паскаль. Программирование на языке высокого уровня [Текст]: учеб. пособие для вузов/Т.А. Павловская; [гриф УМО]. - М.; СПб. [и др.]:Питер, 2009.-393 с.: ил.
9. Степанов, А.Н. Информатика [Текст]: учеб. пособие для студентов вузов/А.Н. Степанов; [гриф МО].-5-е изд.- М; СПб.[и др.]: Питер,2008.-765 с.: ил.

Приложенные файлы

  • docx 18167683
    Размер файла: 667 kB Загрузок: 0

Добавить комментарий