Министерство образования и науки Челябинской области
Государственное бюджетное образовательное учреждение
профессиональная образовательная организация
«Златоустовский техникум технологий и экономики»
ГБОУ ПОО «ЗТТиЭ»
УЧЕБНОЕ ПОСОБИЕ «ЯЗЫК ПРОГРАММИРОВАНИЯ PASCAL»
г. Златоуст, 2017
Пособие содержит теоретический материал по каждой теме и практические задания для закрепления изученного материала с подробным пояснением. Пособие позволяет самостоятельно изучить язык программирования Pascal и помочь при изучении предмета. Оказывает значительную помощь преподавателю при составлении практических заданий.
Содержание
Введение 6
Редактор языка. 7
АЛФАВИТ ЯЗЫКА PASCAL 7
ПРОЦЕДУРЫ И ФУНКЦИИ 7
ТИПЫ ПЕРЕМЕННЫХ 9
ОПЕРАТОРЫ TURBO PASCAL 10
ОПЕРАТОРЫ ВЕТВЛЕНИЙ. 10
УСЛОВНЫЙ ОПЕРАТОР. 10
ОПЕРАТОРЫ ПОВТОРЕНИЙ 11
ОПЕРАТОР ВЫБОРА ОДНОГО ИЗ ВАРИАНТОВ 13
ПРОСТЫЕ И СТРУКТУРНЫЕ ТИПЫ ДАННЫХ 13
ФУНКЦИИ PASCAL. 16
ЛИНЕЙНЫЕ АЛГОРИТМЫ. 17
УСЛОВИЯ 19
СЛОЖНЫЕ УСЛОВИЯ 20
ПРОСТЕЙШИЕ ЦИКЛЫ 28
ВЛОЖЕННЫЕ ЦИКЛЫ 33
ЛИНЕЙНЫЕ МАССИВЫ 35
ДВУМЕРНЫЕ МАССИВЫ (МАТРИЦЫ) 41
В кратком изложении история языков программирования такова: изначально вычислительные машины программировались в машинном коде. Тоесть в их оперативную память напрямую вводили последовательность чисел, являющиеся кодами команд, которые процессор может выполнить. При этом программа составлялась с периодическим заглядыванием в таблицу кодов команд процессора и была отнюдь не наглядной. Затем появилась идея обозначить коды какими-то короткими, но осмысленными, и потому легко запоминаемыми словами – мнемониками, и создать программу, которая бы, руководствуясь таблицей команд, переводила последовательность мнемоник – мнемокод в последовательность машинных кодов. Такую программу называют ассемблером (assembler - сборочное устройство, транслятор, ассемблер). Программы стали гораздо нагляднее, но решение практических задач требовало написания очень длинных программ (например, файловый менеджер Volkov Commander имеет размер около 64000 байт). Тогда появились языки программирования высокого уровня. При их создании использовали то обстоятельство, что в программе часто встречаются участки одинакового кода, выполняющие какое либо одно действие: вывод строки, запись в файл, вычисление математической функции и т.д. В языках высокого уровня таким последовательностям кода присвоены имена, и программа составляется на условном языке, каждое, из слов которого заменяет десятки, ато и сотни команд процессора. Таким образом, программа становится еще нагляднее и короче. Существует множество условных языков высокого уровня, для каждого из них написано немало вариантов пограммы, переводящей условный код в последовательность машинных команд. Один из таких языков – Паскаль.
Язык программирования Pascal был разработан в 1968-1971 гг. Никлаусом Виртом в Цюрихском Институте информатики (Швейцария), и назван вчесть Блеза Паскаля – выдающегося математика, философа и физика 17-го века. Первоначальная цель разработки языка диктовалась необходимостью создания инструмента "для обучения программированию как систематической дисциплине". Однако очень скоро обнаружилась чрезвычайная эффективность языка Pascal в самых разнообразных приложениях, от решения небольших задач численного характера до разработки сложных программных систем - компиляторов, баз данных, операционных систем и т.п. К настоящему времени Pascal принадлежит к группе наиболее распространенных и популярных в мире языков программирования.
Для работы с языком программирования Turbo Pascal, скопируйте с дискеты папку TURBO PASCAL на диск C:, откройте ее, и создайте на рабочем столе ярлык для файла tp.exe. Можно приступать к работе. Кликните по ярлыку мышкой - на экране появится окно редактора TURBO PASCAL.
Язык программирования ТП 7.0, как и любой другой, имеет свой алфавит. Как правило, алфавитом языка программирования называют набор символов, разрешенный к использованию и воспринимаемый компилятором, с помощью которого могут быть образованы величины, выражения и операторы данного языка. Алфавит языка ТП 7.0 включает в себя все символы, представленные в кодировочной таблице, которая в настоящий момент загружена в оперативную память или хранится в ПЗУ Вашего компьютера. Каждому символу алфавита соответствует индивидуальный числовой код от 0 до 255. Алфавит языка ТП 7.0 составляют символы, используемые для составления идентификаторов:
- латинские строчные и прописные буквы;
- арабские цифры от 0 до 9 (в идентификаторах цифры могут использоваться наряду с буквами, начиная со второй позиции);
- символ подчеркивания (ASCII, код 95).
Специальные символы - символы, выполняющие определенные функции при построении различных конструкций языка: + - * / { } [ ] ( ) . , ' : ; ^ @ # $
Составные символы - группа символов, которые воспринимаются компилятором как единое целое: := (* *) (. .) ..
"Неиспользуемые" символы. Символы так называемой расширенной таблицы ASCII, т.е. символы, имеющие коды от 128 до 255 (в этой области находятся символы алфавита русского языка и символы псевдографики на IBM-совместимых компьютерах), а также некоторые символы из основной таблицы ASCII (например: (&), (!), (%), (-), (") и некоторые другие) не входят в алфавит языка, т.е. эти символы не используются в идентификаторах. Тем не менее, их можно использовать в тексте комментариев, а также в виде значений констант строк или констант символов.
Зарезервированные слова. ТП 7.0, как и его предшественники, включает в себя так называемые ключевые или зарезервированные слова (BEGIN, END, PROGRAM). В качестве имен идентификаторов в программе зарезервированные слова использоваться не могут. Если Вы будете использовать зарезервированные слова не по назначению, это вызовет ошибку при попытке откомпилировать программу.
В этом разделе записываются подпрограммы, осуществляющие сложные действия, которые необходимо произвести неоднократно на разных этапах выполнения программы. Подпограммы бывают двух типов: процедуры (PROCEDURE) и функции (FUNCTION). И те и другие пребставляют собой программы в миниатюре:
PROCEDURE (FUNCTION) | Заголовок процедуры (функции); |
LABEL | Подраздел объявления локальных меток; |
CONST | Подраздел объявления локальных констант; |
TYPE | Подраздел объявления локальных типов; |
VAR | Подраздел объявления локальных переменных; |
BEGIN | Раздел текстов подпрограмм. |
END; | Основной блок процедуры или функции; |
Они могут иметь всетеже разделы, что и основная программа, в частности, раздел локальных процедур и функций, вызываемых только в педелах данной подпрограммы.
Раздел основного блока программы
BEGIN {Основной блок программы}
{текст программы}
END.
В этом разделе содержится смысловая часть программы. Первым в программе идет зарезервированное слово program. За ним, после одного или нескольких пробелов следует идентификатор – имя программы. Каждое описание должно завершаться точкой с запятой. Таким образом, первая строка любой программы имеет вид:
Program name;
В Турбо Паскале оператор заголовка может быть опущен. После заголовка программы обычно идут описания переменных, констант, меток, подпрограмм и других объектов, используемых в программе. Эта часть программы называется разделом описаний.
Каждая программа обязательно должна иметь часть, которая выполняет какие-либо действия и называется разделом операторов (иногда телом программы).
Минимально допустимой выполняемой частью программы является составной оператор:
begin
S1; S2; …; Sn;
end
где S1, …, Sn – операторы, а зарезервированные слова begin и end играют роль скобок, но только для операторов, а не для математических выражений. Они так и называются операторными скобками. Каждому begin в программе должен соответствовать end.
Заголовки, то есть первые операторы программ и библиотечных модулей – это program и unit.
Для описания переменных, констант и составных частей программы – подпрограмм-процедур и подпрограмм-функций – используются зарезервированные слова var, const, procedure, function.
Операторы описания типов переменных, задаваемых пользователем, - это type, array, string, record…end, file of … .
Слова, используемые для программирования составных операторов, а также начинающие и оканчивающие последовательность исполняемых операторов программы, - begin и end.
Процедуры ввода read и readln обычно считывают ввод с клавиатуры, а процедуры вывода write и writeln обычно посылают вывод на экран.
Операторами, управляющими ходом выполнения программы (они так и называются управляющие операторы), являются if…then…else, for…to…do, repeat…until, case…of…end, for…downto…do, while…do.
В библиотечных модулях используются зарезервированные слова implementation (секция реализации), interface(интерфейсная секция). Зарезервированные слова для обозначения арифметических и логических операций – div, mod, and, or и некоторые другие.
ТИПЫ ПЕРЕМЕННЫХ
Тип переменной задает вид того значения, которое ей присваивается и правила, по которым операторы языка действуют с переменной, например:
Если переменные A и B целочисленного типа, то программа:
A:=3.14;
B:=2.71;
WRITELN(A,’ ‘,B,’ ‘,A+B);
Выведет на экран строку: “3.14 2.71 5.85”
Если же они строкового типа, то программа:
A:=’3.14’;
B:=’2.71’;
WRITELN(A,’ ‘,B,’ ‘,A+B);
Выведет: “3.14 2.71 3.142.71”, так как оператор сложения просто добавит строку B в конец строки A.
В Паскале предопределены следующие простейшие типы переменных:
Тип константы определяется способом записи ее значения:
Const
C1=17;
C2=3.14;
C3='A';
C4=False;
C5=C2+C1;
Можно использовать выражения. Выражения должны в качестве операторов содержать только константы, в том числе ранее объявленные, а так же знаки математических операций, скобки и стандартные функции.
BYTE – целое число от 0 до 255, занимает одну ячейку памяти (байт).
BOOLEAN – логическое значение (байт, заполненный единицами, или нулями), true, или false.
WORD – целое число от 0 до 65535, занимает два байта.
INTEGER – целое число от –32768 до 32767, занимает два байта.
LONGINT – целое число от –2147483648 до 2147483647, занимает четыре байта.
REAL – число с дробной частью от 2.9*10-39.до 1.7*1038, может принимать и отрицательные значения, на экран выводится с точностью до 12-го знака после запятой, если результат какой либо операции с REAL меньше, чем 2.9*10-39, он трактуется как ноль. Переменная типа REAL занимает шесть байт.
DOUBLE - число с дробной частью от 5.0*10-324.до.1.7*10308, может принимать и отрицательные значения, на экран выводится с точностью до 16-го знака после запятой ,если результат какой либо операции с DOUBLE меньше, чем 5.0*10-324, он трактуется как ноль. Переменная типа DOUBLE занимает восемь байт.
CHAR – символ, буква, при отображении на экран выводится тот символ, код которого хранится в выводимой переменной типа CHAR, переменная занимает один байт.
STRING – строка символов, на экран выводится как строка символов, коды которых хранятся в последовательности байт, занимаемой выводимой переменной типа STRING; в памяти занимает от 1 до 256 байт – по количеству символов в строке, плюс один байт, в котором хранится длина самой строки. При обьявлении переменной строкового типа можно заранее указать ее длину в байтах – X:
MyString:STRING[X];
При присвоении этой переменной строки длиннее X, присваиваемая строка будет обрезана с конца после X-того символа.
Размер переменной типа STRING в памяти можно узнать следующим способом:
Size:=SizeOf(MyString);
Функция SizeOf() возвращает размер, занимаемый переменной, служащей параметром. Параметром может служить и тип переменной; строка:
 Writeln(SizeOf(STRING));
Выведет на экран число 256, так как по умолчанию под все строки отводится по 256 байт.
Кроме того, можно узнать, сколько символов в строке (индекс последнего непустого символа в строке):  Size:=Ord(MyString[0]);
Используется ибращение к нулевому элементу (символу) строки, в котором хранится ее длина, но MyString[0] – значение типа CHAR, тоесть символ, код которого равен длине строки, нужный нам код – число возвращает функция Ord(). Таким же образом можно обратиться к любому N – тому элементу строки:
MyChar:=MyString[N];
{MyChar:CHAR}
ARRAY[a..b,c..d,….] OF “тип элемента”; - массив некоторой размерности, содержащий элементы указанного типа. Диапазоны индексов для каждого измерения указываются парами чисел или констант, разделенных двумя точками, через запятую (a..b,c..d). После OF записывается тип элементов массива. В памяти массив занимает место, равное: (b-a)*(d-c)*..* SizeOf(“тип элемента”). Размер массива не может превосходить 65536 байт. Обращение к элементам массива происходит следующим образом:
X:=MyArray[a,b,c,..];
При этом переменная X должна быть того же типа, что и элементы массива или приводимого типа. Число индексов (a,b,c,..) должно быть равно числу обьявленных при описании измерений массива.
СОСТАВНОЙ ОПЕРАТОР - это последовательность произвольных операторов рограммы, заключенная в операторные скобки. Турбо-Паскаль допускает произвольную глубину вложенности:
Begin
...
Begin
...
Begin
...
End;
End;
End;
Наличие ; перед End - пустой оператор.
IF THEN [ELSE ]
Условие – значение типа BOOLEAN или логическая операция. Если условие верно, выполняется оператор, или блок операторов, следующий за THEN, в противном случае выполняется блок операторов после ELSE, если он есть.
Условия могут быть вложенными и в таком случае, любая встретившаяся часть ELSE соответствует ближайшей к ней "сверху" части THEN.
Пример:
Var
A, B, C, D: Integer;
begin
A:=1;
B:=2;
C:=3;
D:=4;
If A B Then
If C
If C
C:=0
{обратите внимание, что перед Else}
{пустой оператор ";"не ставится}
Else
A:=B;
end.
а могло быть и так:
If A B Then
If C
If C
C:=0
Else
Else
Else A:=B
Рассмотрим программу, которая вводит произвольное целое число от 0 до 15 и выводит его в шестнадцатеричной системе:
Program Hex;
Var
Ch: Char;
N: Integer;
Begin
Write ('N = ');
Readln(N);
If (N = 0) And (N
Begin
If N
Ch:= Chr(Ord('0')+N)
Else
Ch:=Chr(Ord('A')+N-10);
End
Else
Writeln('Ошибка');
End.
Цикл с предопределенным числом повторений.
For := To(DownTo) Do
Переменная должна быть целого или перечислимого типа. При исполнении цикла переменная цикла изменяется от начального до конечного значения с шагом 1. Если стоит to, то переменная увеличивается, если downto – уменьшается.
Условия выполнения цикла проверяются перед выполнением блока операторов. Если условие не выполнено, цикл For не выполняется. Следующая программа подсчитывает сумму чисел от 1 до введенного:
Program Summa;
Var
I, N, S: Integer;
Begin
Write('N = ');
Readln(N);
S:=0;
For I:=1 To N Do
S:=S + I;
Writeln ('Cумма = ', S)
End.
Условный цикл с проверкой условия перед исполнением блока операторов.
While Do
Блок операторов будет исполняться, пока условие имеет значение true. Необходимо, чтобы значение условия имело возможность изменения при исполнении блока операторов, иначе исполнение цикла не закончится никогда (в DOS это приведет к зависанию компыютера). Если условие зарание ложно, блок операторов не исполнится ни разу.
Найдем машинное "эпсилон" для переменной типа Real:
Program Epsilondetect;
Var
Epsilon: Real;
Begin
Epsilon:=1;
While Epsilon + 1 1 Do
Epsilon: = Epsilon/2;
Writeln ('Эпсилон = ', Epsilon);
End.
Условный цикл с проверкой после выполнения блока операторов.
Repeat Until
Блок операторов независимо от значения условия будет выполнен хотябы один раз. Цикл заканчивается, если после очередного исполнения блока операторов условие имеет значение true.
Пример: программа запрашивает ввод одного символа и выводит его ASCII - код, пока не будет введен пустой символ:
Program Code;
Const
Cr = 13;
Var
Ch:Char;
Begin
Repeat
Readln (Ch);
Writeln (Ch,' = ', Ord (Ch));
Until Ord (Ch) = Cr
End.
Case Of Else End;
- выражение любого перечислимого типа,
- одна или более конструкций вида :.
Составим программу, имитирующую калькулятор. Программа вводит две строки: первая содержит два числа, разделенные пробелом или запятой, вторая - символ арифметического действия.
2 2
*
Признаком конца работы служит ввод любого символа, отличного от +, -, /, *.
Программа:
Program Calc;
Var
Operation: Char; {Знак Операции}
X, Y, Z: Real;
Stop: Boolean;
Begin
Stop:= False;
repeat
Writeln; {Пустая Строка - Разделитель}
Write ('X, Y = ');
Readln (X,Y);
Write ('Операция: ');
Readln (Operation);
Case Operation Of
'+': Z: = X+Y;
'-': Z: = X-Y;
'*': Z: = X*Y;
'/': Z: = X/Y;
Else
Stop:= True;
End;
If Not Stop Then
Writeln('Z = ',Z);
Until Stop;
End.
Любому из блоков операторов списка может предшествовать не одно, а несколько значений выбора, разделенных запятыми. Оператор безусловного перехода на строку с меткой.
Goto
Метка, должна быть описана в разделе описаний. Метка, описанная в процедуре (функции) локализуется в ней, поэтому передача управления извне процедуры (функции) на метку внутри нее невозможна.
ПРОСТЫЕ И СТРУКТУРНЫЕ ТИПЫ ДАННЫХ
Перечисляемый и ограниченный типы. Ранее рассматривались простые стандартные типы данных (Integer, Boolean,Char ...) - порядковые типы то есть к переменным этих типов применимы Succ и Pred. Real - не порядковый тип.
В Паскале разрешено введение новых типов. Секция Type располагается между секцией констант и секцией переменных. Введение своих типов повышает "читабельность" программ.
Например: Месяцы.
Type
Month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);
Var
M: Month;
Максимальная мощность перечисляемого типа - 256 значений, поэтому перечисляемый тип фактически задаёт подмножество типа Byte.
В Паскале отсутствуют средства, которые бы позволяли осуществить непосредственный ввод - вывод переменных перечисляемого типа, однако можно вывести код:
Write(Ord(M)).
Кроме того применимы операции сравнения:
If (M FEB) And (M
Write ('Весенний месяц');
Следует иметь ввиду, что упорядоченность элементов перечисляемого типа определяется порядком их следования. Самый левый элемент имеет минимальное значение, правый - максимальное.
Пример:
процедура, в которой переменной перечисляемого типа присваивается значение, в зависимости от введенного дня недели; если введённые символы ошибочны, возвращается соответствующее сообщение.
Program DAY (Input, Output);
Type
DayOfWeek = (Sun, Mon, Tue, Wen, Thu, Fri, Sat);
Var
D: DayOfWeek;
Well: Boolean;
Procedure Read_WD (Var I: DayOfWeek;Well: Boolean;);
Var
C: Char;
Begin
Read(C);
Well:= False;
Case C Of
"S": Begin
Readln(C);
Case C Of
"U": Begin
I:= Sun;
Well:= True;
End;
"A": Begin
I:= Sat;
Well:= True;
End;
End;{Of Case}
"M": Begin
Well:= True;
I:= Mon;
End;
"T": Begin Readln(C);
Case C Of
. . . . . . . . .
End;
"W": Begin
Well:= True;
I:= Wen;
End;
"F": Begin
Well:= True;
I:= Fri;
End;
End;
End;
Begin
Read_WD(D, Well);
If Not Well Then
Writeln ('Ошибка');
End.
Кроме перечисленного типа можно вводить ограниченные или интервальные типы.
Пример:
Type
Year = 1900..2000;
Letter = "A".."Z";
Левая и правая константы задают диапазон значений и их называют соответственно верхней и нижней границей ограниченного типа.
Константы в определении ограниченного типа должны относиться к одному и тому же базовому типу (целому, символьному, порядковому). Базовый тип констант определяет допустимость операций над данными ограниченного типа.
Пример:
Type
Days = (Mo, Tu, We, Th, Fr, Sa, Su);
WeekEnd = Sa..Su;
Var
W: WeekEnd;
. . . . . . . . . . . .
Begin
. . . . . . . . . . . .
W:= Sa;
. . . . . . . . . . . ,
Так как тип-диапазон наследует все свойства базового типа, но с ограничениями, связанными с его меньшей мощностью, то Ord(W) вернёт значения S , в то время как Pred(W) приведёт к ошибке.
И перечисляемый и ограниченный типы относят к простому типу.
Простой тип - это такой тип, который в некоторый момент времени хранит только одно значение.
Структурированные типы данных - совокупность связанных данных и множество правил, определяющих, как их организацию так и способ доступа к элементам данных.
Массив - это упорядоченный набор переменных одного типа.
Массив содержит фиксированное число компонент, которое задаётся при определении переменных типа массива. Тип компоненты массива может быть любым. Каждый элемент масива имеет свой индекс. Тип индекса - простой, поэтому все элементы массива могут быть перебраны при помощи операторов цикла.
Описание массивов:
Var
Mas: Array [1..15] Of Real.
Work: Array [(Mon, Tue, Wed)] Of Integer.
B: Array ['A'..'Z'] Of Boolean.
C: Array [1..3, 1..5] Of Real.
D: Array [(Black, White)] Of 11..20.
В Паскале многомерный массив можно описать как одномерный:
Type
Mas = Array [1..3] Of Array [1..5] Of Integer;
Var
A, B: Mas;
C: Array [1..3, 1..5] Of Integer;
{такая же структура но определена как двумерный массив}
Ссылка на элемент матрицы А, лежащий на пересечении I-той строки и J-ого столбца выглядит следующим образом A [I] [J]; законно и такое обращение A[2]:= B[1], для массива такая запись не верна. Все элементы структурированных типов допускают A:= B (исключение - переменные файлового типа).
Можно использовать комформант - массивы. Массивы с переменными границами в Турбо-Паскале использовать нельзя. Нельзя, также и сравнивать массивы:
If A = B Then ...
В Турбо-Паскале предварительно определены два массива Mem и Port.
exp(x)=ex
log(x)=ln x
sin(x)=sin x
cos(x) =cos x
tan(x)=tg x
atn(x)=arctg x
sqr(x)=
abs(x)= |x|
int(x)-целая часть x
rnd(1)-генератор псевдослучайное число [0; 1]
А теперь приступим непосредственно к программированию.
Для построения алгоритмов обычно разрабатывают блок-схемы. Элементы блок схем приведены ниже.
ИНЕЙНЫЕ АЛГОРИТМЫ.
1. Даны два числа (действительных) a и b. Получить их сумму, разность, произведение.
Program Summa;
var a,b,c,d,e:integer;
begin
write('a,b');
read(a,b);
c:=a+b;
d:=a-b;
e:=a*b;
writeln(c,d,e)
end.
Используя оператор var описываем переменные,т.е какой тип переменных будет использоваться. С помощью оператора write и read вводим 2 числа a и b. В переменную (c) заносится сумма двух чисел, в переменную (d) заносится разность данных чисел, в переменную (e) заносится произведение двух чисел. Оператор writeln выводит на экран монитора полученные результаты из переменных c,d,e. Блок-схема алгоритма показана на рис.1.
2. Дана длина ребра куба. Наити объем куба и площадь его боковой поверхности.
Program Ploshad;
var a,v,s:integer;
begin
write('a');
read(a);
v:=sqr(a)*a;
s:=(sqr(a))*6;
writeln(v,s)
end.
Объем куба вычисляется по формуле v=a3, площадь поверности s=6*a2, где а-длина ребра куба. Используя оператор write и read вводим число a. В переменной (v) находим объем куба, в переменной (s) находим площадь боковой поверхности
(sqr-"возведение в квадрат"). В операторе writeln отпечатываем ответ.
3. Даны катеты прямоугольного треугольника. Найти гипотенузу и его площадь.
Program Gipotenuza;
var a,b,c,s:real;
begin
write('a,b');
read(a,b);
c:=sqrt(sqr(a)+sqr(b));
s:=1/2*a*b;
writeln(c,s)
end.
Используя оператор write и read вводим катеты a и b. В переменной (c) находим гипотенузу (sqrt-"квадратный корень", sqr-"возведение в квадрат"), в переменной (s) находим площадь прямоугольного треугольника. В операторе writeln отпечатываем ответ.
4.Дана сторона равностороннего треугольника. Найти площадь этого треугольника.
Program Treugolnik;
uses crt;
var m,s:real;
begin
write('Сторона равностороннего треугольника=');
read(m);
s:=(sqr(m)*m)/2;
writeln('Площадь равностароннего треугольника=',s)
end.
5. Найти площадь кольца. Внутренний радиус, которого равен 20, а внешний заданному числу r (r20).
Program Kolco;
uses crt;
var r,s:real;
begin
write('Внешний радиус кольца (r20)=');
read(r);
s:=((3.14*sqr(r))-3.14*sqr(20));
writeln('Площадь кольца=',s)
end.
6. Вычислить расстояние между двумя точками отрезка AB с координатами (x1 y1) и (x2 y2).
Program Tochki;
uses crt;
var x1,y1,x2,y2,c:real;
begin
write('x1, y1, x2, y2');
read(x1,y1,x2,y2);
c:=sqrt(sqr(x2-x1)-sqr(y2-y1));
writeln('Расстояние между двумя точками отрезка AB=',c)
end.
7. Даны действительные числа x, y. Получить максимальное значение (x,y).
Program MaxMin;
uses crt;
var x,y:real;
begin
writeln('x,y');
read(x,y);
if x=y then writeln('значения равны') else
if xy then writeln('максимальное значение=',x)else writeln('максимальное значение=',y);
end.
На рис 2. изображена блок-схема решения данной задачи.
8. Даны действительные числа x, y. Вычислить значение
z= x-y, если xy
x-y+1, в противном случае
Program Znachenie;
uses crt;
var x,y,z:real;
begin
writeln('x,y');
read(x,y);
if (xy) then z:=x-y else begin
z:=(x-y)+1;
end;
writeln('z=',z)
end.
9. Даны два действительных числа. Вывести первое число, если первое число больше второго и оба числа, если это не так.
Program Chisla;
uses crt;
var a,b:real;
begin
writeln('a,b');
read(a,b);
if ab then writeln('a=',a)
else writeln('a=',a,'; ','b=',b)
end.
10. Даны 3 действительных числа. Выбрать из них те, которые принадлежат интервалу (1;3).
Program Dch;
uses crt;
var x,y,z:real;
begin
writeln('x,y,z');
read(x,y,z);
if (x1) and (x
if (y1) and (y
if (z1) and (z
end.
Вводим 3 числа x, y, z. В операторах IF последовательно проверяем условие принадлежности интервалу сначала значения х, потом у и затем z. Если это сложное условие выполняется, выводим на экран значение проверяемой переменной.
11. Найти корни квадратного уравнения ax2+bx+c=0.
Program Diskriminant;
uses crt;
var a,b,c,d,x1,x2:real;
begin
writeln('a,b,c');
read(a,b,c);
d:=(b*b)-4*a*c;
if(dкорней нет')else begin
x1:=((-b+sqrt(d))/(2*a));
x2:=((-b-sqrt(d))/(2*a));
writeln('d=',d,'; ','x1=',x1,'; ','x2=',x2)
end;
end.
Вводим 3 числа a, b, c. Чтобы найти корни квадратного уравнения, находим по формуле дискременант d. Далее проверяем условие, если дискременант меньше 0, тогда выводим сообщение “корней нет”. Если дискременант больше 0, тогда находим корни квадратного уравнения (x1, x2) по формулам и выводим значения этих корней.
12. Дано действительное число x. Получить целую часть числа x, затем число x округленное до ближайшего целого, затем дробную часть числа x.
Program Z;
uses crt;
var x,a,b,c:real;
begin
write('x');
read(x);
a:=int(x);
c:=x-a;
if (c=0.5) then b:=a+1 else b:=a;
writeln('a=',a,'; ','b=',b,'; ','c=',c)
end.
Вводим число x. В переменную(a) заносим целую часть числа x (int-целая часть), в переменную (c) заносим остаток от числа x. Проверяем условие: если дробная часть числа c=0.5, тогда в переменную (b) заносим целую часть числа округленную до ближайшего целого, если условие не выполняется, то в переменную (b) заносим значение переменной (a) без дробной части. Выводим на экран значение переменных (a, b, c).
13. Проверить, является ли данное введенное число четным.
Program B;
uses crt;
var x:real;
begin
write('x');
read(x);
if x/2=int(x/2) then writeln('четное') else writeln('не четное');
end.
14. Дано натуральное число n (n99). Определить количество сотен в нем.
Program Sotni;
uses crt;
var x,n:real;
begin
write('x');
read(x);
n:=int(x/100);
writeln('количество сотен=',n)
end.
15. Дано натуральное число n (n
А) Сколько цифр в числе n?
Б) Чему равна сумма его цифр?
В) Найти последнюю цифру числа n.
Г) Найти первую цифру числа n.
Д) Предположим, что n=10. Найти предпоследнюю цифру числа n.
А) Program Znachenie;
uses crt;
var n,x:real;
begin
writeln('n');
read(x);
begin
if (x=100) then writeln('три цифры');
if (x=10) and (xдве цифры');
if (xодна цифра');
end;
end.
Б) Program Znachenie;
uses crt;
var a,b,c,x:real;
begin
writeln('n');
read(x);
begin
if (x
writeln('сумма=',x)else begin
if (x=100) then writeln('сумма=',1)else begin
a:=int(x/10);
b:=x-a*10;
c:=a+b;
writeln('сумма=',c);
end;
end;
end;
end.
B) Program Znachenie;
uses crt;
var a,b,x:real;
begin
writeln('n');
read(x);
begin
if (x=100) then writeln('последняя цифра=',0)else begin
if (xпоследняя цифра=',x)else begin
a:=int(x/10);
b:=x-a*10;
writeln('последняя цифра=',b);
end;
end;
end;
end.
Г) Program Znachenie;
uses crt;
var x:real;
begin
writeln('n');
read(x);
begin
if (x=100) then writeln('первая цифра=',1)else begin
if (x9) then writeln('первая цифра=',int(x/10))else begin
if (xпервая цифра=',x)
end;
end;
end;
end.
Д) Program Znachenie;
uses crt;
var a,x:real;
begin
writeln('n');
read(x);
begin
if (x=10) then writeln('предпоследняя цифра=',1)else begin
if (x=100)then writeln('предпоследняя цифра=',0)else begin
a:=int(x/10);
writeln('предпоследняя цифра =',a);
end;
end;
end;
end.
16. Дано двухзначное число. Поменять местами цифры в нем.
Program Cifri;
uses crt;
var x,a,b,c,d:real;
begin
writeln('x');
read(x);
a:=int(x/10);
b:=x-a*10;
c:=b*10;
d:=c+a;
writeln;
writeln(d)
end.
Посчитаем на пальцах. Предположим, ввели число х = 75. После первой манипуляции в переменной (а) будет находится число 7 (75:10= 7,5 , затем возьмем целую часть от 7,5 - это будет число 7). А теперь получим вторую цифру. Как это делать, мы рассматривали выше. В переменной (b) окажется цифра 5. Дальше. 5х10=50. Вот к этому числу, которое находится в перменной (с) мы и прибавим значение из ранее полученной (а), т.е. 50+7=57.
Было 75, стало 57. Легко и просто.
17. Даны целые числа k, l, если числа не равны, то заменить каждое из них одним и тем же числом равным большему из исходных, а если равны, то заменить число нулями.
Program Dch;
uses crt;
var k,l:real;
begin
writeln('k,l');
read(k,l);
if kl then begin
if (kl) then l:=k else begin k:=l;
if k=l then
end;
writeln('k=',k, ' ','l=',l);
end
else begin
writeln('k=',0, ' ', 'l=',0);
end;
end.
18. Дано натуральное число x
A) Является ли это число поллиндромом (перевертышем) с учетом четырех цифр.
Б) Верно ли что это число содержит три одинаковых цифры.
В) Верно ли что все четыре цифры числа различны.
А) Program Dch;
uses crt;
var x,a,b,c,d,e,f:real;
begin
writeln('x');
read(x);
a:=int(x/1000);
b:=x-a*1000;
c:=int(b/100);
d:=b-c*100;
e:=int(d/10);
f:=d-e*10;
if (a=f) and (c=e) then writeln('является полиндромом') else writeln('не является полиндромом')
end.
Б) Program Dch;
uses crt;
var x,a,b,c,d,e,f:real;
begin
writeln('x');
read(x);
a:=int(x/1000);
b:=x-a*1000;
c:=int(b/100);
d:=b-c*100;
e:=int(d/10);
f:=d-e*10;
if ((a=c) and (c=e))or((a=e)and(e=f))or((c=e)and(e=f))or((a=c)and(c=f)) then writeln('содержит 3 одинаковых цифры') else writeln('не содержит 3 одинаковых цифр')
end.
В) Program Dch;
uses crt;
var x,a,b,c,d,e,f:real;
begin
writeln('x');
read(x);
a:=int(x/1000);
b:=x-a*1000;
c:=int(b/100);
d:=b-c*100;
e:=int(d/10);
f:=d-e*10;
if (ac) and (ae) and (af) and (ce) and (cf) and (ef) then writeln('все цифры разные') else writeln('нет разных цифр')
end.
19. Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит 8. Первое число номер по вертикали (при счете слева направо), второе число номер по горизонтали (при счете снизу вверх). Даны натуральные числа k, l, m, n, каждое из которых не превосходит 8. Требуется выяснить:
А) Являются ли поля k, l и m, n полями одного цвета.
Б) На поле k, l расположен ферзь. Угрожает ли он полю m, n.
В) На поле k, l расположен конь (ходит буквой "Г" по три клетки). Угрожает ли он полю m, n.
A) Program Dch;
uses crt;
var x,y,a,b,k,l,m,n:real;
begin
writeln('k,l,m,n');
read(k,l,m,n);
a:=k+l;
b:=m+n;
if int(a/2)=a/2 then x:=0 else x:=1;
if int(b/2)=b/2 then y:=0 else y:=1;
if x=y then writeln('клетки одинакового цвета')else writeln('клетки разного цвета')
end.
Изучив условие задачи, приходим к выводу, что если сумма координат клетки – четное число, то это один цвет, если нечетная – другой.
Б) Program Znachenie;
uses crt;
var a,b,c,d,k,l,m,n:real;
begin
writeln('k,l,m,n');
read(k,l,m,n);
if (k=m)or(l=n)then writeln('угрожает')else begin writeln('не угрожает');
begin
a:=(k+l);
b:=(m+n);
c:=(k-l);
d:=(m-n);
end;
if ((a=b)and(a=c))then writeln('угрожает');
end;
end.
Когда ферзь угрожает другим фигурам? Только в тех случаях, когда фигуры противника расположены по горизонтали, вертикали или диагонали относительно клетки, где находится ферзь (Рис.3). А как быть с диагональю? Рассмотрим все координаты клеток, расположенных на главной диагонали. Что заметили? А вот что. Сумма координат этих клеток везде одинакова! А что с побочной диагональю? Здесь разность координат - постоянное число. Вот и все. Дальше дело техники. Проверяем соответствующие условия и выводим ответ.
В) Program Znachenie;
uses crt;
var a,b,c,d,e,f,g,k,l,m,n,t:real;
begin
writeln('k,l,m,n');
read(k,l,m,n);
begin
if (k=m)or(l=m)then writeln('не угрожает')else begin
e:=(k+1);
f:=(k-1);
g:=(l+1);
t:=(l-1);
if ((m=e)and(n=g))or((m=f)and(n=t))or((n=e)and(n=t))or((m=f)and(n=g))then writeln('не угрожает')else begin
a:=(k+2);
b:=(k-2);
c:=(l+2);
d:=(l-2);
if ((m=a)and(m=b))and((n=c)and(n=d))then writeln('не угрожает')else begin
if ((m=b))and((n=d))then writeln('угрожает');
end;
end;
end;
end;
end.
20. Составить программу, реализующую эпизод применения компьютера в книжном магазине. Компьютер запрашивает стоимость книг, сумму денег, внесенную покупателем. Если сдачи не требуется, печатает на экране "СПАСИБО"; если денег больше, чем необходимо, то печатает "ВОЗМИТЕ СДАЧУ" и указывает сумму сдачи; если денег недостаточно, то печатает сообщение об этом, и указывает размер недостающей суммы.
Program Znachenie;
uses crt;
var m,n,s,k,l:real;
begin
write('Введите сумму n=');
read(n);
write('Введите стоимость товара m=');
read(m);
s:=(n-m);
k:=(m-n);
if (n=m)then writeln('СПАСИБО')else begin
if (nm)then writeln('ВОЗЬМИТЕ СДАЧУ',' ',s)else begin
if (n
end;
end;
end.
ПРОСТЕЙШИЕ ЦИКЛЫ
21. Протабулировать функцию sin x [0;1].
Program Sinus;
uses crt;
var y:real;
x:integer;
begin
x:=0;
writeln('x');
read(x);
while x
y:=sin(x);
x:=x+1;
end;
writeln('y=',y);
end.
Для того чтобы протабулировать данную функцию нужно построить цикл от 0 до 1. В переменной (y) находим значение функции.
Оператором writeln печатаем значение (у).
22. Дано натуральное число n.
А) Подсчитать сумму чисел от 1 до n.
Б) Подсчитать n-факториал.
А) Program Summa;
uses crt;
var s,f,n:real;
x:integer;
begin
writeln('n');
read(n);
s:=0;
x:=1;
while x
begin
s:=s+x;
x:=x+1;
end;
writeln('Сумма чисел=',s);
end.
Для подсчета суммы, нам нужно вначале задать пустое значение переменной, в которой будем накапливать текущие значения (s=0) .
Вводим число n, затем строим цикл от 1 до n. В теле цикла к переменной (s) прибавляем значения счетчика (x) и после выхода из цикла печатаем содержимое (s).
Б) Program Summa;
uses crt;
var s,f,n:real;
x:integer;
begin
writeln('n');
read(n);
s:=1;
x:=1;
while x
begin
s:=s*x;
x:=x+1;
end;
writeln('факториал=',s);
end.
Для того чтобы подсчитать факториал чисел от 1 до n нужно задать первоначальное значение переменной (s=1), в которой будет находится произведение. Вводим число n, затем строим цикл от 1 до n. В теле цикла текущее значение (s) умножаем на (x) и оставляем в переменной (s). После выхода из цикла печатаем ответ, который находится в переменной (s).
23. Начав с тренировки, спортсмен пробежал 10 км. Каждый день он увеличивал дневную норму на 10% предыдущего дня. Какой суммарный путь пробежал спортсмен за 7 дней?
Program Sportsmen;
var s,p,x,n:real;
i:integer;
begin
s:=10;
p:=10;
write('n');
read(n);
i:=2;
while i
begin
x:=(s*0.1);
s:=x+s;
p:=p+s;
i:=i+1;
end;
writeln('Суммарный путь, который пробежал спортсмен за 7 дней =',p,' ','км');
end.
24. Амеба через каждые 3 часа делится на 2 части. Сколько будет через 6, 9, 12, 24 ... часов.
Program Ameba;
uses crt;
var p,n:real;
i:integer;
begin
p:=1;
writeln('n');
read(n);
i:=3;
while i
begin
p:=p*2;
i:=i+3;
end;
writeln('Число амеб=',p);
end.
25. Подсчитать количество вагонов зерна полученных, если на первую клетку шахматной доски положить 1 зерно, на вторую-2, на третью-4, и т.д. Считать вес одного зерна 1 грамм. В одном вагоне-60 т.
Program Zerno;
uses crt;
var a,p,s,n:real;
i:integer;
begin
p:=1;
s:=0;
i:=1;
n:=64;
while i
begin
p:=p*2;
s:=s+p;
i:=i+1;
end;
a:=s/60000000;
writeln('a=',a:2);
end.
26. У гусей и кроликов вместе 64 лапы. Сколько может быть кроликов и гусей? (указать все сочетания).
Program kroliki;
uses crt;
var s,d,a,n:real;
i:integer;
begin
d:=0;
a:=int(64/2);
writeln('гусей а=',a,' ', 'кроликов d=',d);
i:=2;
while i
begin
a:=a-2;
d:=d+1;
if a=0 then writeln('гусей а=',a, ' ', 'кроликов d=',d);
end;
i:=i+2;
end.
27. Дано натуральное число n.
А) Узнать, сколько цифр в числе n.
Б) Узнать, чему равна сумма цифр числа n.
В) Найти первую цифру числа n.
А) Program NM;
uses crt;
var s,m,b,n:real;
i:integer;
begin
s:=0;
writeln('n');
read(n);
i:=1;
while i
begin
n:=int(n/10);
s:=(s+1);
end;
i:=i+1;
writeln('Количество цифр в числе=',s);
end.
Б) Program NM;
uses crt;
var s,a,m,b,k,n:real;
i:integer;
begin
s:=0;
writeln('n');
read(n);
i:=1;
while i
begin
a:=n;
n:=int(n/10);
b:=a-n*10;
k:=(b+k);
s:=s+1;
end;
i:=i+1;
writeln('Сумма цифр числа=',k);
end.
В) Program PerCif;
uses crt;
var n,k,a,i: integer;
begin
writeln('Введите число');
readln (n);
a:=n;
k:=1;
for i:=1 to 8 do
begin
a:=a div 10;
if a0 then k:=k+1;
end;
a:=1;
for i:=1 to k-1 do a:=a*10;
a:=n div a;
writeln('Первая цифра=',a);
end.
28. Дано натуральные числа n и m. Получить сумму n-последних цифр числа m.
Program NM;
uses crt;
var s,b,n,m:real;
x:integer;
begin
s:=0;
writeln('m,n');
read(m,n);
x:=1;
while x
begin
b:=m;
m:=int(m/10);
s:=s+(b-m*10);
x:=x+1;
end;
writeln(s);
end.
Предположим, m=125, n=2. Цикл повторится 2 раза.
В первом повторении значения переменных будут следующие:
b=125
m=12
s=0+(125-12*10)=0+(125-120)=5
Во втором повторении:
b=12
m=1
s=5+(12-1*10)=5+(12-10)=7
Сумма двух последних цифр числа 125 равна 7.
29. Пусть n- натуральное число и пусть n!! (двойной факториал), обозначает для нечетного 1*3*5*n. Для четного, n=2*4*6*n. Найти n!!
A) Нечетные.
Program Nechetnie;
uses crt;
var p,n:real;
i:integer;
begin
write('n');
read(n);
p:=1;
i:=1;
while in do
begin
p:=p*i;
i:=i+2;
end;
writeln('p=',p);
end.
A) Четные.
Program Chetnih;
uses crt;
var p,n:real;
i:integer;
begin
write('n');
read(n);
p:=1;
i:=2;
while i
begin
p:=p*i;
i:=i+2;
end;
writeln('p=',p);
end.
30. Составить программу, которая печатает таблицу умножения и сложения натуральных чисел в десятичной системе счисления.
Сложение
uses crt;
const n=9;
var i,j: integer;
begin
cls;
writeln('Таблица сложения');
for i:=0 to n do
begin
for j:=0 to n do
write(i+j:4);
writeln;
end;
end.
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
Для построения таблицы сложения строим 2 цикла: для строчки (i) и для столбика (j), от 0 до n. В операторе write и осуществляется действие для построения таблицы сложения.
Таблица умножения
uses crt;
const n=9;
var i,j: integer;
begin
cls;
writeln('Таблица умножения');
for i:=1 to n do
begin
for j:=1 to n do
write(i*j:4);
writeln;
end;
end.
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
2 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 |
3 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 |
4 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 |
5 | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 |
6 | 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 |
7 | 7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 |
8 | 8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 |
9 | 9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 |
Аналогично таблице сложения.
31. Построить рамку, 10x10 из единиц, внутри которой нули.
uses crt;
var i,j: integer;
begin
cls;
writeln('Единицы и нули');
for i:=1 to 10 do
begin
for j:=1 to 10 do
If (i=1) or (i=10) or (j=1) or (j=10) then write (1) else write (0);
writeln;
end;
end.
1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
Для того чтобы построить квадрат из 1 и 0, нужно построить 2 цикла: для строк (i) и столбцов (j) от 1 до 10. В операторе IF проверяем условие, если значение (i) или (j) =1 или 10 печатаем 1, если условие не выполняется, выводим 0.
Массив - проиндексированный список переменных, каждый элемент массива имеет одно и тоже имя и в скобках указывается индекс, т.е. номер элемента.
При обращении к элементу массива индекс указывается в квадратных скобках, в котором указывается имя массива и количество элементов в нем. Массив описывается в разделе var с использованием конструкции
Array[n..m] of type;
где вместо type должен быть указан общий для всех элементов тип (базовый тип).
32. Дан массив a(n). Выяснить, какое число встречается раньше положительное или отрицательное.
program pr1;
uses crt;
var a:array [1..10] of real;
i,n:integer;
s:real;
begin
for i:=1 to 10 do
begin
a[i]:=random (10)-5;
writeln (i,'',a[i]);
end;
writeln ('');
s:=0;
if a[1]=0 then write ('первое положительное ');
if a[1]
end.
В операторе var описываем массив. Указываем тип переменных, которые будем применять. Строим цикл от 1 до 10. Затем формируем массив из положительных и отрицательных случайных чисел. Выводим его на печать. Затем проверяем, какое число встречается в массиве первым: положительное или отрицательное и выводим сообщение об этом.
33. Дан массив a(n). Определить, состоит ли он из возрастающих элементов.
program mas;
uses crt;
var a:array [1..100] of real;
i,k:integer;
s,f:real;
begin
clrscr;
a[1]:=1;
a[2]:=2;
for i:=1 to 10 do begin
a[i]:=random(5);
writeln(a[i]);
end;
if a[1]a[2] then write('масив убывает')else
write('массив возрастает');
end.
В операторе var описываем массив. Указываем тип переменных, которые будем применять. Первому элементу в массиве присваиваем 1, а второму элементу 2. Строим цикл от 1 до 10. Затем формируем массив из случайных чисел. Выводим его на печать. Затем в операторе if проверяем, убывает массив или возрастает, и отпечатываем соответствующее сообщение.
34. Дана последовательность чисел a(n). Указать наименьшую длину числовой оси, содержащую эти числа.
program mas;
uses crt;
var a:array [1..100] of real;
i,k:integer;
max,min,x:real;
begin
clrscr;
write ('k=');
read (k) ;
a[1]:=max;
for i:=1 to k do begin
a[i]:= random(20);
writeln (a[i]);
if a[i]
if a[i]=max then max:=a[i];
end;
writeln(' ');
writeln('максимальное = ',max);
writeln('минимальное = ',a[2]);
x:=max-a[2];
writeln ('длина оси=',x);
end.
В операторе var описываем массив. Указываем тип переменных, которые будем применять. Вводим число. Затем первому элементу притсваиваем максимальное значение. Строим цикл от 1 до k. Затем формируем массив из случайных чисел. Выводим его на печать. Затем выполняем проверку если a[i]a[2] тогда в a[2] разместим a[i] и второе условие если a[i]=max тогда в max помещаем a[i], а уже после всех проделанных действий вычисляем длину оси и отпечатываем ответ.
35. Дан массив действительных чисел, размерность которого n. Подсчитать сколько в нем отрицательных нулевых и положительных элементов.
program mas;
uses crt;
var a :array [1..100] of integer;
i,n:integer;
k,t,h:real;
begin
writeln ('введите массив');
read (n);
k:=0;
t:=0;
h:=0;
for i:=1 to n do begin
a[i]:=random(10)-5;
writeln (a[i]);
if a[i]0 then k:=k+1;
if a[i]
if a[i]=0 then h:=h+1;
end;
writeln ('Положительных',k);
writeln ('отрицательных',t);
writeln ('нулевых',h);
end.
36. При поступлении в ВУЗ абитуриенты, получившие "2" на первом экзамене ко второму не допускаются. В массиве a(n) записаны оценки экзаменующихся, полученные на первом экзамене. Подсчитать, сколько человек не допущено ко второму экзамену.
program pr1;
uses crt;
var a:array [1..10] of real;
i,n:integer;
s:real;
begin
clrscr;
write ('размер массива ');
readln (n);
s:=0;
for i:=1 to n do
begin
a[i]:=random (4)+2;
if a[i]=2 then s:=s+1;
writeln (a[i]);
end;
write ('недопущено: ');
write (s);
end.
37. Дан массив. Определить сколько % от всего количества элементов массива составляет нечетные элементы.
program pr1;
uses crt;
var a: array[1..100] of integer;
i,n:integer;
d,p,s,f:real;
begin
clrscr;
writeln('размер массива ');
readln (n);
writeln ('');
s:=0;
for i:=1 to n do begin
a[i]:=random(10);
writeln(i,' ',a[i]);
d:=frac(a[i]/2);
if d0 then s:=s+1;
end;
p:=100/n;
f:=s*p;
writeln('процент нечетных элиментов в массиве ' ,f);
end.
38. Последовательность a(n) состоит из 0 и 1. Поставить в начало этой последовательности 0, а затем 1.
program pr1;
uses crt;
var a:array [1..100] of real;
i,n:integer;
begin
clrscr;
write ('размер массива ');
readln (n) ;
for i:=1 to n do
begin
a[i]:=random(2);
writeln (a[i]);
end;
writeln(' ');
for i:=1 to n do
begin
if a[i]=0 then writeln (a[i]);
end;
for i:=1 to n do
begin
if a[i]=1 then writeln (a[i]);
end;
end.
39. Дан массив a(n), среди чисел есть положительные и отрицательные. Заменить нулями те числа величины, которых по модулю больше наибольшего числа.
program pr1;
uses crt;
var a:array [1..100] of real;
i,n:integer;
s,x:real;
begin
clrscr;
write ('размер массива ');
readln (n) ;
for i:=1 to n do
begin
a[i]:=random(15)-9;
writeln (a[i]);
end;
for i:=1 to n do
begin
if a[i]=x then x:=a[i];
end;
writeln(' ');
writeln( 'max=',x);
writeln(' ');
for i:=1 to n do
begin
if abs(a[i])x then a[i]:=0 ;
writeln (a[i]);
end;
end.
40. В массиве a(n) есть только положительные и отрицательные числа. Вычислить произведение отрицательных элементов (p1) и произведение положительных элементов (p2). Сравнить модуль (p2) с модулем (p1) и указать какое из произведений больше.
program pr1;
uses crt;
var a:array [1..100] of real;
i,n:integer;
p1,p2:real;
begin
clrscr;
write ('размер массива ');
readln (n) ;
p1:=1 ;
p2:=1;
for i:=1 to n do begin
a[i]:=random(10)-5;
writeln (a[i]);
if a[i]
if a[i]0 then p2:=p2*a[i];
end;
writeln(' ');
writeln ('произведение отрицательных (p1) ',p1);
writeln ('произведение положительных (p2) ',p2);
if abs(p1)p2 then writeln ('p1p2');
if abs(p1)
end.
41. У прилавка магазина выстроилась очередь из n-покупателей. Время обслуживания i-того покупателя равно t. Определить время t(i) пребывание i-того покупателя в очереди.
program pr1;
uses crt;
var a:array [1..100] of real;
i,n,x,k,d:integer;
s:real;
begin
clrscr;
write ('число покупателей= ');
readln (n) ;
write('номер покупателя=');
read(x);
write('время обслуживания= ');
read(k);
for i:=1 to n do begin
a[i]:=i*k;
writeln(i,'=',a[i]);
end;
for i:=1 to n do begin
if i=x then s:=a[i];
end;
writeln('');
writeln(x,' покупатель простоял в очереди ',s,' минуты') ;
end.
42. Секретный замок для сейфа состоит из 10 расположенных в ряд ячеек, в которые надо вставить игральные кубики, но дверь откроется только в том случае, когда в любых трех соседних ячейках сумма точек на передних гранях кубиков будет равна 10. Напишите программу, которая разгадает код замка.
program pr1;
uses crt;
var a:array [0..1000] of integer;
i,n:integer;
s,c,o:string ;
begin
clrscr;
o:='open ';
c:='close ';
for i:=1 to 10 do begin
a[i]:=random(6)+1;
writeln (i,' ',a[i]);
end;
writeln;
for i:=1 to 8 do begin
n:=a[i]+a[i+1]+a[i+2];
writeln( 'a[',i,' ',i+1,' ',i+2,'] =',n);
end;
for i:=1 to 10 do begin
if n=10 then s:=o;
if n10 then s:=c ;
end;
writeln (s)
end.
43. Дана матрица a(n, n). Получить 1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
program matr;
uses crt;
var a:array [1..10,1..10] of real;
n:integer;
i,j:integer;
begin
clrscr;
write ('кол-во строк ');
readln (n);
for i:=1 to n do begin
for j:=1 to n do begin
if i=j then a[i,j]:=1;
if ij then a[i,j]:=0;
write (a[i,j]);
end;
writeln;
end;
end.
В операторе var описываем массив. Указываем тип переменных, которые будем применять. Вводим размер матрицы. Затем строим цикл для строк и для столбцов от 1 до n. В операторе if проверяем если i=j, то тогда в a[i,j] заносим 1, а иначе заносим 0. В операторе write отпечатываем полученную матрицу.
44. Дана матрица a(n, n). Получить 1 1 1 1 1
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 1 1 1 1
var a:array [1..100,1..100] of integer;
i,j,n: integer;
begin
clrscr;
writeln ('кол-во строк ');
readln (n);
for i:=1 to n do
begin
for j:=1 to n do
begin
if i=1 then a[i,j]:=1;
if j=1 then a[i,j]:=1;
if j=n then a[i,j]:=1;
if i=n then a[i,j]:=1;
write (' ',a[i,j]);
end;
writeln ;
end;
end.
В операторе var описываем массив. Указываем тип переменных, которые будем применять. Вводим размер матрицы. Затем строим цикл для строк и для столбцов от 1 до n. В операторе if осуществляем проверку и отпечатываем полученную матрицу.
45. Дано натуральное число n, и действительная матрица (n*9). Найти среднее арифметическое каждого из столбцов.
Program matr;
uses crt;
var a:array[1..10,1..9] of real;
i,j,n:integer;
s:real;
begin
write ('Количество строк ');
readln(n);
for i:=1 to n do
begin
for j:=1 to 9 do
begin
a[i,j]:=random(10);
write(a[i,j],' ');
end;
writeln;
end;
for j:=1 to 9 do
begin
s:=0;
for i:=1 to n do s:=s+a[i,j];
s:=s/n;
writeln(j,'столбец',' средне арифметическое ',s:1:1);
end;
end.
В операторе var описываем массив. Указываем тип переменных, которые будем применять. Вводим размер матрицы. Затем строим цикл для строк и для столбцов от 1 до n. Затем формируем массив из случайных чисел, отпечатываем его. Снова строим цикл для столбцов от 1 до 9, включаем счетчик s=0 и строим цикл для строк от 1 до n. В переменной s находим средне арифметическое значение каждого столбца. В операторе write отпечатываем полученный ответ.
43