В этом уроке рассмотрим:
- Структуру программы на языке Паскаль
- Примеры простейших программ
- Работу с переменными. Примеры
- Справочная информация по типам данных
- Справочная информация по операторам ввода/вывода
- Справочная информация выражениям и стандартным функциям
Разделы справочной информации внимательно читать не обязательно, к ним стоит обращаться по мере необходимости.
1 Структура программы на Паскаль
PROGRAM имя программы;
(английскими буквами, одно слово. Хотите глубже? То необходимо воспользоваться правилами написания идентификаторов)
USES подключаемые библиотеки (модули);
(дополнительные возможности, их можно подключать к программе в этой строке)
LABEL список меток;
(из одного места программы «прыгать» в другое)
CONST раздел описания констант;
(постоянные величины, их нельзя изменять)
TYPE описание типов переменных;
VAR определение глобальных переменных;
(описание всех переменных величин, которые в программе могут изменяться)
ОПРЕДЕЛЕНИЕ ПРОЦЕДУР;
ОПРЕДЕЛЕНИЕ ФУНКЦИЙ;
BEGIN
основной блок программы
END
.
Разумеется, что не все приведенные выше блоки обязательны для использования. Сейчас приведем тот минимум, который необходимо использовать.
Program ex123; Begin End.
Данная программа ни чего не делает, так как в ней нет ни одного оператора.
2 Пример программы на Pascal
Hello world на паскаль
Результатом данный программы будет вывод на экран строки «Hello, World!».
Program Hello_World; Begin Write('Hello, World'); End.
Запустите Turbo Pascal и перепишите исходный код программы. Теперь запустите программу, это можно сделать зажав сочетание клавиш Ctrl+F9. Результат выполнения программы всегда можно посмотреть зажав сочетание клавиш Alt+F5.
Тут:
Program Hello_World;
— это название вашей программы, зачастую его не используют.- Все что пишется до первого
Begin
— это раздел описания. Здесь программа просто сообщает компилятору сведения об используемых объектах и еще некоторую информацию. - Основной блок кода, так называемый раздел операторов, всегда начинается с
Begin
и заканчиваетсяEnd
. (обратите внимание:Begin
всегда без точки, а последний закрывающийEnd
. всегда с точкой). Write('Hello, World');
— это первый исполняемый оператор в нашей программе, который сообщает компилятору о том, что необходимо напечатать строку"Hello, World!"
.
Стоит отметить, что язык Паскаль не чувствителен к регистру символов, т.е. write()
, Write()
, WRITE()
, и даже WrItE()
— все это для Паскаля означает одно и тоже.
Вычисление суммы двух чисел на Паскаль
Program Summa; { программа называется Summa } Const A = 23; B = 76; var S: integer; begin S := A + B; { сумма чисел A и B } writeln('Сумма чисел 23 и 76 равна: S = ', S); readln { <-- Ожидание нажатия Enter, после которого программа завершится } end.
Предлагаю сразу запустить эту программу, а пояснения к ней можно найти ниже…
3 Константы и переменные. Примеры
Переменные в Pascal, служат для хранения некоторых величин. Переменные тождественны идентификаторам, т.е. для того, чтобы в программе объявить переменную необходимо назвать ее.
3.1 Константы
Те переменные, которые не изменяются, называются константами. Различают следующие типы констант:
- Числовые константы (целочисленные и вещественные). Пример:
const N: integer = 12; //число N – целого типа S: integer = 5; //число S – целого типа pi: real = 3.14; //число «пи» - вещественного
После объявления каждой величины указывается её тип, а потом присваивается значение. Но предыдущая запись тоже верна, поскольку компилятор Паскаля настроен так, что он автоматически определяет тип постоянной. Но этого нельзя сказать о следующем типе чисел – переменных.
- Символьные константы. Единичный символ, записанный в апострофы:
'А', 'В'
- Строковые константы. Некоторая произвольная последовательность символов, заключенная в апострофы:
'Pascal programming language'
Рассмотрим программу «Hello world!» с использованием константы.
Program Hello_World_With_Const; Uses Crt; Const hello = 'Привет, '; Var name:string; Begin ClrScr; Write('Введите имя: '); Read(name); Write(hello, name, '!'); ReadLn End.
В данном случае мы объявили константу hello
равную значению ‘Привет, ‘. Далее в программе достаточно в нужном месте подставить эту константу. Теперь если нам вдруг понадобиться вместо программы, которая здоровается, сделать программу, которая прощается, достаточно в начале программы поменять «Привет, » на «До свидания, » и программа будет прощаться с пользователем.
Если Вы обратили внимание, то в примере у константы не указан явно не указан тип, такие константы называются Обычными константами. Тип обычных констант определяется по их значению.
Помимо обычных констант существуют Типизированные константы. Тип таких констант объявляется явно:
Const Stroka :string = 'Привет'; Number :Integer = 777; Pi :Real = 3.14159;
Дополнительно хочется обратить внимание на апострафы в константах. Если Вам в константе понадобится использовать апострофы, то просто продублируйте их:
Const stroka = 'I''m a programmer!';
3.2 Переменные в Pascal
Для хранения данных, полученных от пользователя, в программе вводятся переменные. К примеру для того, чтобы передать программе имя какого-то человека нам нужно в коде программы записать строчку:
Read(name);
Данная строка сообщает нашей программе о том, что нужно получить данные от пользователя и сохранить их в переменную name
, которую мы указываем в скобках оператора Read
(с англ.: читать).
Хочу обратить Ваше внимание на тот факт, что все идентификаторы(переменные, название программы) в коде Turbo Pascal могут состоять исключительно из символов латинского алфавита (A-Z, a-z), цифр (0-9) и символа нижнего подчеркивания («_»). Также идентификаторы не должны начинаться с цифр.
/* Примеры правильных имен переменных */ variable Variable var1 var_1234 VARIABLE /* Примеры не правильных имен переменных */ -variable 123Var Var-123
Для целых чисел часто используются два основных типа: Integer
и LongInt
. Единственным отличием типов переменных, используемых для одного формата данных, — это Диапазон допустимых значений. К примеру для Integer
диапазон допустимых значений [-32768, 32767]
, то есть минимальным значением для переменной типа Integer
является число -32768
, а максимальным — 32767
.
Переменные перед использованием надо объявить в секции var
, при этом указывается тип переменных. Например:
var N, m: integer; Q, r, t: real;
Секция описания переменных всегда стоит после описания констант (постоянных) – сначала идет конструкция const
, а потом var
.
Теперь попробуем объявить несколько переменных разного типа. Допустим мы хотим знать имя пользователя, его возраст и его рост. Для этого возьмем код программы их первого примера и изменить в соответствии с новыми требованиями.
Program Hello_World_With_Variable; Uses Crt; Var name :string; years, height :Integer; Begin ClrScr; Write('Введите Ваше имя: '); ReadLn(name); Write('Сколько Вам лет? ') ReadLn(years); Write('Какой у Вас рост?(в см) ') ReadLn(height); Write('Привет, ', name, '! Я знаю что тебе ', years, ' лет', ' и твой рост составляет', height, ' см'); ReadLn End.
Хочу обратить ваше внимание на 5 строчку кода. Когда у нас есть несколько переменных одного типа, мы можем объявить их в одной строке, описав их через запятую и после последнего поставить знак двоеточия и написать требуемый тип.
4 Справочная информация по типам данных
Типы данных в Паскале определяют возможные значения переменных, констант, выражений и функций. Они бывают встроенными и пользовательскими. Встроенные типы изначально присутствуют в языке программирования, а пользовательские создаются программистом.
По способу представления и обработки типы данных бывают:
- простые
- структурированные
- указатели
- объекты
- процедуры
В этой статье будут рассмотрены лишь, наиболее простые типы данных, так как на начальных этапах обучения, вашей программе будет проще обойтись, например, без файлов и записей, чем без целочисленных или строковых переменных.
4.1 Целочисленный тип
Сюда входят несколько целочисленных типов, которые различаются диапазоном значений, количеством байт отведённых для их хранения и словом, с помощью которого объявляется тип.
Тип | Диапазон | Размер в байтах |
shortint | -128…127 | 1 |
integer | -32 768…32 767 | 2 |
longint | -2 147 483 648…2 147 483 647 | 4 |
byte | 0…255 | 1 |
word | 0…65 535 | 2 |
Объявить целочисленную переменную можно в разделе Var, например:
Var book: word;
Над переменными этой категории можно выполнять все арифметические и логические операции за исключением деления (/
), для него нужен вещественный тип. Также могут быть применены некоторые стандартные функции и процедуры.
4.2 Вещественный тип
В Паскале бывают следующие вещественные типы данных:
Тип | Диапазон | Память, байт | Количество цифр |
Real | 2.9e-39 … 1.7e38 | 6 | 11-12 |
Single | 1.5e-45 … 3.4e38 | 4 | 7-8 |
Double | 5.0e-324 …1.7e308 | 8 | 15-16 |
Extended | 3.4e-4932 … 1.1e493 | 10 | 19-20 |
Comp | -9.2e63 … (9.2e63)-1 | 8 | 19-20 |
Над ними может быть выполнено большее количество операций и функций, чем над целыми. Например, эти функции возвращают вещественный результат:
- sin(x) – синус;
- cos(x) – косинус;
- arctan(x) – арктангенс;
- ln(x) – натуральный логарифм;
- sqrt(x) – квадратный корень;
- exp(x) – экспонента.
4.3 Логический тип
Переменная, имеющая логический тип данных может принимать всего два значения: true
(истина) и false
(ложь). Здесь истине соответствует значение 1, а ложь тождественная нулю. Объявить булеву переменную можно так:
Var A: Boolean;
Над данными этого типа могут выполняться операции сравнения и логические операции: not , and, or, xor.
4.4 Символьный тип
Символьный тип данных – это совокупность символов, используемых в том или ином компьютере. Переменная данного типа принимает значение одного из этих символов, занимает в памяти компьютера 1 байт. Слово Char определяет величину данного типа. Существует несколько способов записать символьную переменную (или константу):
- как одиночный символ, заключенный в апострофы: ‘W’, ‘V’, ‘п’;
- указав код символа, значение которого должно находиться в диапазоне от 0 до 255.
- при помощи конструкции ^K, где K – код управляющего символа. Значение K должно быть на 64 больше кода соответствующего управляющего символа.
К величинам символьного типа данных применимы операции отношения и следующие функции:
Succ(x)
— возвращает следующий символ;Pred(x)
— возвращает предыдущий символ;Ord(x)
— возвращает значение кода символа;Chr(x)
— возвращает значение символа по его коду;UpCase(x)
— переводит литеры из интервала
4.5 Строковый тип
Строка в Паскале представляет собой последовательность символов заключенных в апострофы, и обозначается словом String
. Число символов (длина строки) должно не превышать 255. Если длину строки не указывать, то она автоматически определиться в 255 символов. Общий вид объявления строковой переменной выглядит так:
Var <имя_переменной>: string[<длина строки>];
Каждый символ в строке имеет свой индекс (номер). Индекс первого байта – 0, но в нем храниться не первый символ, а длина всей строки, из чего следует, что переменная этого типа будет занимать на 1 байт больше числа переменных в ней. Номер первого символа – 1, например, если мы имеем строку S=‘stroka’, то S[1]=s;
. В одном из следующих уроков строковый тип данных будет рассмотрен подробнее.
Перечисляемый тип данных
Перечисляемый тип данных представляет собой некоторое ограниченное количество идентификаторов. Эти идентификаторы заключаются в круглые скобки, и отделяются друг от друга запятыми. Пример:
Type Day=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); Var A: Day;
Переменная A
может принимать лишь значения определенные в разделе Type
. Также можно объявить переменную перечисляемого типа в разделе Var:
Var A: (Monday, Tuesday);
К данному типу применимы операции отношения, при этом заранее определенно, что Monday<Tuesday<Wednesday
т. д. Также можно применять функции succ, pred, ord,
процедуры inc
и dec
, и использовать операцию присваивания: A:=Tuesday;
4.6 Интервальный тип данных
Когда необходимо задать какой то диапазон значений, то в таких ситуациях применяется интервальный тип данных. Для объявления используется конструкция m..n, где m – минимальное (начальное) значение, а n – максимально (конечное); здесь m и n являются константами, которые могут быть целого, символьного, перечисляемого или логического типа. Описываться величины интервального типа могут как в разделе типов, так и в разделе описания переменных.
Общий вид:
TYPE <имя_типа> = <мин. значение>..<макс. значение>;
Пример:
TYPE Cards = 1..36;
5 Pascal. Операторы ввода-вывода
5.1 Ввод данных
Процедура ввода данных с клавиатуры – Read
(читать). Ее можно представить так:
Read(<Список ввода>);
В качестве списка ввода выступают имена переменных. Во время выполнения оператора ввода данных программа останавливается и ждет, пока они будут введены. Для завершения ввода необходимо нажать Enter
. Если переменных несколько, то они могут вводиться через пробел, либо, введя одну переменную нужно нажать Enter
, потом ввести вторую и т. д.
Для перевода каретки после выполнения оператора Read
на новую строку, следует прибавить окончание ln
:
Readln(<Список ввода>);
Также можно не указывать список ввода:
Readln;
Программа не перейдет к выполнению следующей части до тез пор, пока не выполниться пустой оператор.
5.2 Вывод данных
Для вывода данных в Паскале имеется оператор Write
. Для того, чтобы каретка переводилась на следующую строку, к нему прибавляется окончание ln
и получается Writeln
. В общем виде эти операторы имеют вид:
Write(<Список вывода>); Writeln(<Список вывода>);
Элементами списка вывода являются величины различных типов, в том числе выражения и строки, отделенные друг от друга запятыми, например:
Write(x, y);
Здесь x
и y
– параметры, заключенные в круглые скобки. Возможно использование оператора вывода и без параметров:
Writeln; {Курсор переведется на следующую строку}
Недостаточно просто вывести значение на экран, нужно также сделать это как можно корректнее. Допустим нам нужно в одном операторе Write
вывести значения нескольких переменных (a=1, b=2, c=3
). Пишем:
Write(a, b, c);
После выполнения, на экране действительно отобразятся значения данных переменных, но это понятно компьютеру, а пользователь увидит число 123
. Необходимо придать вид выводимым данным, сделать это в Паскале можно двумя способами:
1) Вписать пробел вручную, например:
Write(a, ‘ ’, b, ‘ ’, c);
2) Воспользоваться возможностью форматированного вывода:
Write(a, b:2, c:2);
Двоеточие относиться к переменной, после которой оно следует, и говорит программе, что при выводе (переменной) нужно выделить место, заданное целым числом (в нашем случае это 2), т. е. под значения, хранящиеся в переменных b
и c
отводиться две клетки, сами они выведутся «прижатыми» к правому краю.
Процедура форматированного вывода может применяться и к другим типам данных, но особого внимания заслуживает вещественный тип. Как известно переменные вещественного типа имеют целую и дробную части, поэтому для них предусмотрена такая форма записи с использованием формата:
Write(32.1012:5:2);
Результат выполнения: 32.101
Формат 5 означает, что всего под число 32.1012
выделено 5 клеток, а 2 – из этих пяти под дробную часть отводиться 2 клетки.
6 Выражения с тандартные функции
6.1 Стандартные функции Pascal
В программировании, довольно часто приходиться выполнять однотипные действия, причем в задачах разного уровня и класса. И для ускорения процесса написания кода эти действия выносят в специальные подпрограммы – стандартные функции. Обращение к такой подпрограмме происходит по ее имени, а в скобках указывается значение аргумента. В следующей таблице указаны те стандартные функции, которые используются в языке программирования Pascal.
Функция | Назначение |
ABS(x) | Вычисление абсолютного значения x: |х| |
SQR(x) | Вычисление квадрата x: x*x |
SIN(x) | Вычисление синуса x: sin x |
COS(x) | Вычисление косинуса x: cos x |
ARCTAN(x) | Вычисление арктангенса x: arctg x |
EXP(x) | Вычисление экспоненты (числа Е) в степени x |
EXP10(x) | Вычисление 10 в степени x |
LN(x) | Вычисление натурального логарифма x |
LOG(x) | Вычисление десятичного логарифма x |
SQRT(x) | Вычисление квадратного корня из x |
A DIV B | Вычисление частного при делении А на В с отбрасыванием остатка |
A MOD B | Нахождение остатка от делении А на В |
TRUNC(x) | Нахождение целой части x |
RANDOM(x) | Псевдослучайное число в интервале [0, x] |
ROUND(x) | Округление значения x в сторону ближайшего целого |
ODD(x) | Проверяет аргумент на нечетность. Результат TRUE, если аргумент нечетный, FALSE – если четный. |
ORD(x) | Возвращает порядковый номер аргумента и, как следствие, преобразует величину порядкового типа в величину целого типа. |
CHR(x) | Определение символа языка Паскаль по его порядковому номеру |
SUCC(x) | Нахождение элемента, идущего после данного в перечне допустимых элементов |
PRED(x) | Нахождение элемента, идущего перед данным в перечне допустимых элементов |
FRAC(X) | Возвращает дробную часть x |
INT(X) | Возвращает целую часть x |
Pi | Значение математической постоянной π |
EOF(x) | Возвращает TRUE, если файл находится в стоянии “конец файла”, иначе FALSE, если нет конца файла |
6.2 Выражения в Pascal
Выражение состоит из переменных, констант, полей в записях, указателей функций, круглых скобок и знаков операций. Для корректной записи выражений необходимо знать не только как обозначаются те или иные операции, функции и т. п., но также стоит предусмотреть приоритеты их выполнения, математические и логические правила, а также некоторые тонкости самого языка. Для более углубленного изучения выражений, стоит рассмотреть несколько примеров.
1) 12+3*3=21 (12+3)*3=45
Как видите выражения в Pascal, имеют такой же приоритет, как и в математике, а с помощью круглых скобок его можно изменить.
2) (a>1) and (a<=20)
Такое логическое выражение возвращает истину, лишь в том случае, когда истинны оба выражения, т. е. если a входит в диапазон от 1 до 20 включительно. Стоит обратить внимание на скобки, здесь они необходимы для изменения приоритета, так как у операторов сравнения он низший.
3) (a+3>0) and (a+3<15) or (b>1) and (b<10)
Условие вернет истину, тогда когда истинными будут два условия слева или справа от OR, а также если они оба будут истинными.
Логическая операция OR (или) суть дизъюнкция в логики и поэтому имеет следующую таблицу истинности:
X | Y | X or Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Ложь имеет место только когда X
и Y
ложны (нули). В том случае, чтобы истина возвращалась только тогда, когда одно из условий верно следует применить оператор XOR (исключающее или):
(a+3>0) and (a+3<15) xor (b>1) and (b<10)
4) x^(a) = exp(a*ln(x))
В Pascal нет функции возведения числа в степень (кроме степени 2), поэтому существует два пути:
1 — умножать число само на себя, какое то количество раз;
2 — воспользоваться функциями экспоненты и натурального логарифма.
В этом примере использованы оба варианта, но если степень, в которую необходимо возвести число, достаточно велика, то предпочтение следует отдать второму способу.
Начало. Тексты программ
Материал из Вики проекта PascalABC.NET
Перейти к навигацииПерейти к поиску
HelloWorld
begin writeln('Привет, мир!'); end.
Это – самая первая программа на любом языке программирования.
Вычисление площади круга
const Pi = 3.1415; begin var r := ReadReal('Введите радиус круга: '); var S := Pi*r*r; Println('Площадь круга равна ',S); end.
Здесь иллюстрируется ввод, затем вычисления и вывод результата.
Вычисление A8
Код на PascalABC.NET:
var a: real; begin var a := ReadReal('Введите a: '); var a2,a4,a8: real; // вспомогательные переменные var a2 := a * a; var a4 := a2 * a2; var a8 := a4 * a4; Println(a,$'{a} в степени 8 = {a8}'); end.
Здесь иллюстрируется использование промежуточных переменных и вычислений: без промежуточных вычислений мы бы потратили 7 умножений, а с промежуточными – всего 3.
Вычисление расстояния между двумя точками на прямой
Код на Pascal:
var a,b: real; // координаты точек r: real; // расстояние между точками на прямой begin write('Введите координату точки a: '); readln(a); write('Введите координату точки b: '); readln(b); r := abs(a-b); writeln('Расстояние между точками = ',r); end.
Здесь иллюстрируется использование стандартной функции abs
Вычисление гипотенузы по катетам
var a,b: real; // катеты c: real; // гипотенуза begin write('Введите катеты прямоугольного треугольника: '); readln(a,b); c := sqrt(a*a+b*b); writeln('Гипотенуза = ',c); end.
Здесь иллюстрируется использование стандартной функции sqrt
Бросание кубиков
var r1,r2: integer; // значения на верхних гранях кубиков begin r1 := Random(6)+1; r2 := Random(6)+1; writeln('Очки, выыпавшие на кубиках: ',r1,' ',r2); writeln('Сумма очков равна ',r1+r2); end.
Здесь иллюстрируется использование стандартной функции Random
Обмен значений двух переменных с использованием третьей
var x,y: real; v: real; // вспомогательная переменная begin write('Введите x,y: '); readln(x,y); v := x; x := y; y := v; writeln('Новые значения x,y: ',x,' ',y); end.
Это – классическая задача о перемене местами значений двух переменных с использованием третьей переменной. Она часто возникает в других задачах. Интересно, что x и y являются как входными, так и выходными переменными
Код на PascalABC.NET:
var x,y: real; begin write('Введите x,y: '); readln(x,y); var v: real; // вспомогательная переменная v := x; x := y; y := v; writeln('Новые значения x,y: ',x,' ',y); end.
Данное решение использует внутриблочное описание переменной. В результате вспомогательная переменная описывается первый раз лишь в тот момент, в который она действительно понадобилась
Выделение цифр из двузначного числа
var x: integer; // двузначное число c1,c2: integer; // первая и вторая цифры двузначного числа begin write('Введите двузначное число: '); readln(x); c1 := x div 10; c2 := x mod 10; writeln('Первая и вторая цифры двузначного числа: ',c1,' ',c2); end.
Ссылки
- Программы для начинающих
- Сайт PascalABC.NET: Программы и алгоритмы для начинающих
текст программы:
var a:string;
begin
writeln(‘Введите Ваше имя’);
readln(a);
writeln(‘Здравствуйте, ‘,a);
end.
Напишите программу, запрашивающую Ваше имя, Ваш возраст и рост в см (ввод с клавиатуры) и выводящую на экран следующее сообщение:
Здравствуйте, …
Вам … лет
Ваш рост … см
текст программы
var a:string;
v,r:integer;
begin
writeln(‘Введите Ваше имя’);
readln(a);
writeln(‘Сколько Вам лет’);
readln(v);
writeln(‘Введите Ваш рост в см’);
readln(r);
writeln(‘Здравствуйте, ‘,a);
writeln(‘Вам ‘,v,’ лет’);
writeln(‘Ваш рост ‘,r,’ см’);
end.
Вычисление математических выражений
Задача (урок )
Напишите программу для вычисления значение выражения y=5x+20 где x целое число, вводимое с клавиатуры. Вывод оформите следующим образом:
при x=… y=…
Обратите внимание, что если x – цело число, то вычисляемый y тоже будет целым числом.
Математические выражения на Pascal расписываются со всеми математическими операциями и учитывая порядок действий: y:=5*x+20
текст программы:
var x,y:integer;
begin
writeln(‘введите целое число’);
readln(x);
y:=5*x+20;
writeln (‘при x=’,x,’ y =’,y);
end.
Задача (урок )
Программа демонстрирующая работу функций div и mod.
текст программы:
var a,b:integer;
begin
writeln(‘введите целое число a’);
readln(a);
writeln(‘введите целое число b’);
readln(b);
writeln (‘a mod b = ‘,a mod b);
writeln (‘a div b = ‘,a div b);
end.
Условный оператор if … then … else (если … тогда … иначе)
Задача (урок )
Напишите программу для вычисления значение выражения
где x целое число, вводимое с клавиатуры.
Пояснение.
В данной задаче используется условный оператор if для того, чтобы исключить деление на 0. Пример алгоритма с ветвлением (или разветвляющийся алгоритм).
блок-схема
текст программы:
var x:integer;
y:real;
begin
writeln(‘введите целое число’);
readln(x);
if (x-3)<>0 then
begin
y:=(x+5)/(x-3);
writeln (‘при x=’,x,’ y =’,y);
end
else
writeln(‘значение выражения не определено’);
end.
Задача (урок )
Вычислите значение выражения
x целое число, вводимое с клавиатуры.
Обратите внимание, что в данной задаче у нас идет ограничение на переменную x: под корнем выражение (5x-20) должно быть больше или равно 0 и (x-4) не равно 0. Задачу решаем с использование сложного условия.
Вариант 1 с “и”: (5*x-20>=0) and (x-4<>0)
Вариант 2 с “или”: (5*x-20<0) or (x-4=0)
блок-схема вариант 1
Задача (урок )
Составить программу, которая если вводимое с клавиатуры целое число четное выводить на экран сообщение “это четное число”, в противном случае – “это нечетное число”.
текст программы:
var x:integer;
begin
writeln(‘Ведите целое число’);
readln(x);
if x mod 2=0 then writeln(‘это четное число‘)
else writeln(‘это нечетное число‘);
end.
Задача (урок )
Составить программу, которая если вводимое с клавиатуры целое число больше 0 выводить на экран сообщение “это число положительное”, если число равно 0 – “это ноль”, если число меньше 0 – “это число отрицательное”.
var x:integer;
begin
writeln(‘Ведите целое число’);
readln(x);
if x>0 then writeln(‘это число положительное‘);
if x=0 then writeln(‘это ноль‘);
if x<0 then writeln(‘это число отрицательное‘);
end;
Задача (урок )
Составить программу-тест по арифметике, состоящую из 5 примеров. Программа должна работать следующим образом: на экран выводится пример (вопрос) и пользователь вводит ответ с клавиатуры. За 5 правильных ответов ставиться оценка “5”, за 4 – “4”, за 3 – “3”, за 2, 1, 0 правильных ответов оценка “2”.
Пояснение.
При написании программы по данной задаче нам потребуется 5 переменных числового типа (лучше использовать тип real, но если оговорить, что ответами на примеры должны быть целые числа, ведь примеры подбирает сам учащийся, то используем тип integer). Назовем наши переменные для хранения ответов ot1, ot2, ot3, ot4, ot5, для оценки – oz.
Подсчет и выставление оценки: через оператор if за каждый правильный ответ будем прибавлять 1 бал, а чтобы баллы накапливались используем формулу oz:=oz+1. Таким образом, в переменной oz будет храниться правильное количество ответов, но оценки 0 и 1 нет по условию задачи, следовательно нужно через if поставить “2” если oz<=2.
текст программы
var ot1,ot2,ot3,ot4,ot5:real;
oz:integer;
begin
writeln(‘Вычислите’);
writeln(’12-4=?’);
readln(ot1);
if ot1=8 then oz:=oz+1;
writeln(‘3*15=?’);
readln(ot2);
if ot2=45 then oz:=oz+1;
writeln(‘8+13=?’);
readln(ot3);
if ot3=21 then oz:=oz+1;
writeln(‘7/2=?’);
readln(ot4);
if ot4=3.5 then oz:=oz+1;
writeln(‘9*7=?’);
readln(ot5);
if ot5=63 then oz:=oz+1;
if oz<=2 then oz:=2;
writeln(‘Ваша оценка ‘,oz);
end.
Задача (урок )
Напишите программу для нахождения корней квадратного уравнения
текст программы
var a,b,c,D:integer;
x1,x2:real;
begin
writeln(‘Решение квадратного уравнения a*x*x+b*x+c=0’);
writeln(‘введите a’);
readln(a);
writeln(‘введите b’);
readln(b);
writeln(‘введите c’);
readln(c);
D:=b*b-4*a*c;
if D>=0 then
begin
x1:=(-b+sqrt(D))/2*a;
x2:=(-b-sqrt(D))/2*a;
writeln(‘x1=’,x1,’ x2=’,x2);
end
else writeln(‘нет корней’);
end.
Задача (урок )
Напишите программу нахождения наибольшего числа из трех случайных чисел от 1 до 10.
Для нахождения наибольшего числа из трех, нужно сначала сравнить два числа и выбрать наибольшее из них через оператор if, затем сравнить полученное наибольшее с третьим числом, если третье число больше, то переприсваиваем.
текст программы
var a,b,c,max:integer;
begin
a:=random(20)+1;
writeln(a);
b:=random(20)+1;
writeln(b);
c:=random(20)+1;
writeln(c);
readln(c);
if a>b then max:=a else max:=b;
if max<c then max:=c;
writeln (‘наибольшее из трех чисел ‘,max);
end.
Задача (урок )
Напишите программу которая “умеет” определять четное число вводиться с клавиатуры или нечетное.
Пояснение: четные числа делятся на 2 с остатком 0, поэтому нужно использовать в качестве условия функцию mod (x mod 2=0).
var m:integer ;
begin
writeln(‘введите число’);
readln(m);
if m mod 2=0 then writeln(‘число четное’)
else writeln(‘число нечетное’);
end.
Работа со строковыми функциями copy и length
Задача (урок )
Напишите программу, которая у любого введенного с клавиатуры слова, длинной не более 15 символов вырезает подстроку с 5-го символа длинной в 5 символов.
текст программы
var sl:string[15];
begin
writeln(‘Ведите слово длинной не более 15 символов’);
readln(sl);
writeln(‘Результат – ‘,copy(sl,5,5));
end.
Задача 10 (урок 09.03.21)
Напишите программу, которая у любого введенного с клавиатуры слова меняет местами 1-ю и последнюю буквы.
Пояснение.
Пусть исходная строка храниться под именем s, тогда последний символ нового слова он же первый символ исходного подстрока – copy(s,1,1).
Как узнать номер последнего символа исходного слова? У нас есть функция вычисляющая длину строки length, количество символов в слове и номер последнего символа это одно и то же число. Получаем первый символ нового слова – copy(s,length(s),1).
Осталось найти середину: нам нужно вырезать со второго символа строчку длинной на 2 символа меньше, чем длинна исходного слова (первый и последний символу уже использованы) – copy(s,2,length(s)-2)
Чтобы было проще записывать выражение, присвоим значение функции переменной n:=length(s)
текст программы
var s:string;
n:integer;
begin
writeln(‘Ведите слово’);
readln(s);
n:=length(s);
writeln(‘Результат -‘, copy(s,n,1)+copy(s,2,n-2)+copy(s,1,1));
end.
Задача (урок )
Напишите программу, которая получает с клавиатуры слово и если количество букв в слове четное выводит половинку слова (например: дорога – дор), если количество букв в слове нечетное, тогда часть слова до центральной буквы и последнюю букву (например: ромашка – рома).
текст программы
var
s:string;
k:integer;
begin
writeln(‘введите слово‘);
readln(s);
k:=length(s);
if k mod 2=0 then writeln(copy(s,1,k div 2))
else
writeln(copy(s,1,k div 2)+copy(s,k,1));
end.
Задача (урок )
Напишите программу, которая получает с клавиатуры слово и если количество букв в слове кратно 4 выводит вторую половинку слова (например: крокодил – одил), если количество букв в слове не кратно 4, тогда последние 2 буквы (например: ромашка – ка).
текст программы
var
s:string;
k,n:integer;
begin
writeln(‘введите слово‘);
readln(s);
k:=length(s);
if k mod
4=0 then
begin
n:=k div 2;
writeln(copy(s,n+1,n))
end
else
writeln(copy(s,k-1,2));
end.
Задача (урок )
Напишите программу, которая для любого вводимого с клавиатуры трехзначного числа вычисляет и выводит на экран количество сотен, десятков и единиц (например, для числа 741 результат будет: сотен – 7, десятков, – 4, единиц – 1)
текст программы
var x:integer;
e,d,s:integer;
begin
writeln(‘введите 3-х значное число’);
readln(x);
s:=x div 100;
e:=x mod 10;
d:=x div 10 mod 10;
writeln(‘сотен – ‘,s,’ десятков – ‘,d,’ единиц – ‘,e);
end.
Задача (урок)
Составить программу, в которой стороны прямоугольника (a – ширина, b – высота) задаются двумя случайных числа в диапазоне от 5 до 20 и если a больше b, то вычисляется площадь прямоугольника, иначе – периметр. Вывод данных оформить следующим образом:
ширина …
высота …
площадь (или периметр) …
блок-схема
текст программы
var a,b,s,p:integer;
begin
a:=random(16)+5;
writeln(a);
b:=random(16)+5;
writeln(b);
if a>b then
begin
s:=a*b;
writeln(‘площадь ‘,s);
end
else
begin
p:=2*(a+b);
writeln(‘периметр ‘,p);
end;
end.
Оператор цикла с известным количеством повторений for i:=начальное значение to конечное значение do оператор
Задача (урок )
Составьте программу, которая из 10 случайных чисел из промежутка от 10 до 20 находит количество чисел меньших 17. Оформите вывод следующим образом: вывод чисел через пробел в строчку, на следующей строке количество чисел меньших 17.
блок-схема
текст программы
var i,x,k:integer;
begin
k:=0;
for i:=1 to 10 do
begin
x:=random(11)+10;
write(x,’ ‘);
if x<17 then k:=k+1;
end;
writeln;
writeln(‘Количество меньших 17 ‘,k);
end.
Задача (урок )
Составьте программу, которая выводит на экран в строчку 15 случайных чисел из промежутка от 1 до 30 и подсчитывает количество четных чисел.
Пояснение.
Обратите внимание, что переменная k – счетчик, поэтому начальное значение переменной обнуляем. Условие для подсчета четных: if a mod 2 =0 then k:=k+1, т.е. если число четное, то k увеличивается на 1.
Текст программы
var i,a,k:integer;
begin
k:=0;
for i:=1 to 15 do
begin
a:=random(30)+1;
if a mod 2=0 then k:=k+1;
write(a,’ ‘);
end;
writeln;
writeln(‘Количество четных ‘,k);
end.
Задачи из ОГЭ по информатике на циклы:
Что будет напечатано в результате работы следующей программы?
var s,k:integer;
begin
s:=50;
for k:=1 to 6 do s:=s-4;
write(s);
end.
Работа программы:
var s,k:integer; – описание переменных целого типа s и k
s:=50; – s=50
for k:=1 to 6 do s:=s-4;
k=1 s=50-4=46
k=2 s=46-4=42
k=3 s=42-4=38
k=4 s=38-4=34
k=5 s=34-4=30
k=6 s=30-4=26
write(s); – вывод на экран значение переменной s равное 26
Можно решить данную задачу выражением.
Цикл выполняется 6 раз, следовательно s = 50 – 6*4 = 26
Оператор цикла while (цикл ПОКА)
while <условие> do оператор;
Выполняет действие или действия пока истинно условие. После каждого прохождения тела цикла, условие проверяется и если условие ложно, осуществляется выход из цикла.
Если условие истинно всегда, то происходит зацикливание.Чтобы прервать зациклившуюся программу, следует использовать комбинацию клавиш Ctrl-F2.
Условие – логическое выражение, записанное с помощью логических операторов сравнения.
Задача (урок )
Составьте программу,которая для введенного с клавиатуры целого числа выводит на экран в столбик число единиц, десятков, сотен и т.д.
Пример: 742
результат
2
4
7
Текст программы
var x,a:integer;
begin
readln(x);
writeln(‘результат’);
while x<>0 do
begin
a:=x mod 10;
writeln(a);
x:=x div 10;
end;
end.
Задача (урок 27.04.2021)
Составьте программу, которая пока не будет введен 0 запрашивает целые положительные числа с клавиатуры и находит среди них наибольшее. Результат выводится на экран.
Пояснение
Обратите внимание, что если требуется найти наибольшее число, начальное значение переменной, в которой будем его хранить, делаем наименьшим из возможных (в данном случае max=0).
Условие для нахождения максимального элемента if a>max then max:= a.
блок-схема
Текст программы
var x,max:integer;
begin
max:=0;
readln(x);
while x<>0 do
begin
if x>max then max:=x;
readln(x);
end;
writeln(‘max=’,max);
end.
Задача (урок )
Составьте программу, которая пока не будет введен 0 запрашивает целые положительные числа с клавиатуры и находит среди них количество двузначных чисел, оканчивающихся на цифру 3. Среди вводимых чисел обязательно есть такое число. Результат выводится на экран.
Пояснение.
Для подсчета количества используем накопитель, переменную k. Обратите внимание, что переменная k – счетчик, поэтому начальное значение переменной обнуляем. Условие для подсчета: (x mod 10=3) – окончание на 3, (x>9) and (x<100) – двузначное число, k:=k+1, т.е. если число удовлетворяет условию, то k увеличивается на 1.
Текст программы
var x,k:integer;
begin
k:=0;
readln(x);
while x<>0 do
begin
if (x mod 10=3)and(x>9)and(x<100) then k:=k+1;
readln(x);
end;
writeln(‘результат’,k);
end.
Задача (урок)
Составьте программу, которая выводит на экран в строчку 10 случайных чисел из промежутка от 2 до 7 и подсчитывает количество чисел равных 2.
Пояснение.
Для подсчета количества двоек используем накопитель, переменную k. Обратите внимание, что переменная k – счетчик, поэтому начальное значение переменной обнуляем. Условие для подсчета 2: if a=2 then k:=k+1, т.е. если число равно 2, то k увеличивается на 1.
Текст программы
var i,a,k:integer;
begin
k:=0;
for i:=1 to 10 do
begin
a:=random(6)+2;
if a=2 then k:=k+1;
write(a,’ ‘);
end;
writeln;
writeln(‘Количество двоек ‘,k);
end.
Задача (урок)
Составьте программу, которая выводит на экран в строчку 10 случайных чисел из промежутка от 1 до 30 и находит наибольшее число.
Пояснение
Обратите внимание, что если требуется найти наибольшее число, начальное значение переменной, в которой будем его хранить, делаем наименьшим из возможных (в данном случае max=0).
Условие для нахождения максимального элемента if a>max then max:= a.
Текст программы
var i,a,max:integer;
begin
max:=0;
for i:=1 to 10 do
begin
a:=random(30)+1;
if a>max then max:=a;
write(a,’ ‘);
end;
writeln;
writeln(‘Максимальное ‘,max);
end.
Задача (урок)
Составьте программу, которая выводит на экран в строчку 10 случайных чисел из промежутка от 1 до 30 и находит наименьшее число.
Пояснение
Обратите внимание, что если требуется найти наименьшее число, начальное значение переменной, в которой будем его хранить, делаем наибольшим из возможных (в данном случае min=31).
Условие для нахождения наименьшего if a<min then min:= a.
Текст программы
var i,a,min:integer;
begin
min:=31;
for i:=1 to 10 do
begin
a:=random(30)+1;
if a<min then min:=a;
write(a,’ ‘);
end;
writeln;
writeln(‘Наименьшее ‘,min);
end.
Задача (урок)
Составьте программу, которая выводит на экран в строчку 10 случайных чисел из промежутка от 1 до 10 и находит сумму чисел <=3.
var i,a,s:integer;
begin
s:=0;
for i:=1 to 10 do
begin
a:=random(10)+1;
if a<=3 then s:=s+a;
write(a,’ ‘);
end;
writeln;
writeln(‘Сумма чисел <=3 ‘,s);
end.
Задача (урок)
Составьте программу, которая из 5, вводимых с клавиатуры целых чисел, находит максимальное число, оканчивающееся на цифру “5” (среди вводимых чисел обязательно есть такое число).
Текст программы
var i,a,max:integer;
begin
max:=0;
for i:=1 to 5 do
begin
readln(a);
if (a mod 10=5) and (a>max) then max:=a;
end;
writeln(‘Максимальное число оканчивающееся на 5: ‘,max);
end.
Задача (урок)
Составьте программу, вычисляющую значение выражения f=1+2+3+4+ …+n, где n – целое положительное число, вводимое с клавиатуры.
Пояснение
Обратите внимание, что в формуле складываются числа с 1 и по порядку до n. Мы знаем, что переменная цикла for i, тоже принимает значения с начального до конечного по порядку. Если n будет конечным значение переменной цикла, то i будет принимать нужные нам слагаемые: 1, 2 ,3, 4 … n.
Остается понять как организовать сложение, здесь и в подобных случаях используется формула f:=f+i и в самом начале программы или перед циклом переменной f присваивается значение 0 (f:=0)
Ход программы (пример):
пусть f=0, n=4
работа оператора for i:=1 to n do f:=f+i
шаг 1: i=1 f=0+1=1, в ОП (оперативной памяти) f=1
шаг 2: i=2 f=1+2=3, в ОП f=3
шаг 2: i=3 f=3+3=6, в ОП f=6
шаг 2: i=4 f=6+4=10, в ОП f=10
Проверка: f=1+2+3+4=10
Текст программы
var i,f,n:integer;
begin
f:=0;
writeln(‘введите целое число < 100’);
readln(n);
for i:=1 to n do f:=f+i;
writeln(‘f=’,f);
end.
Задача (урок)
Составьте программу, вычисляющую значение выражения f=1*2*3*4* …*n, где n – целое положительное число, вводимое с клавиатуры.
Пояснение
В данной программе мы используем тот же прием, что и в примере 8, но в данной ситуации нам не подходит начальное значение f=0 (при умножении на 0 произведение равно 0). Нам нужно число не влияющее на результат умножения, т.е. начальное значение f=1.
Получаем: for i:=1 to n do f:=f*i
Текст программы
var i,f,n:integer;
begin
f:=1;
writeln(‘введите целое число < 100’);
readln(n);
for i:=1 to n do f:=f*i;
writeln(‘f=’,f);
end.
Задача (урок)
Составьте программу, вычисляющую значение выражения
где n – целое положительное число, вводимое с клавиатуры.
Пояснение
В данной программе целесообразно отдельно посчитать в цикле числитель (например, f1=1+2+3+…+n) и знаменатель (f2=1*2*3*…*n), а после цикла вычислить все выражение f=f1/f2.
Обратите внимание, что в данной программе знаменатель никогда не будет равным 0, поэтому исключать деление на 0 через оператор if не нужно.
Текст программы
var i,f1,f2,n:integer;
f:real;
begin
f1:=0;
f2:=1;
writeln(‘введите целое число < 100’);
readln(n);
for i:=1 to n do
begin
f1:=f1+i;
f2:=f2*i;
end;
f:=f1/f2;
writeln(‘f=’,f);
end.
Задача (урок)
Составьте программу, вычисляющую значение выражения
где x – целое число, n – целое положительное число, вводимые с клавиатуры.
Пояснение
В данной задаче на каждом шаге цикла нам нужно получить соответствующую степень числа x. На первом – 1-ю, на втором – 2-ю и т.д. Мы не можем использовать переменную цикла i в формуле, так как в pascal нет функции степень с произвольным показателем. Если взять переменную p с начальным значением 1 (p:=1) и в цикле использовать формулу для подсчета степени числа x p:=p*x, то получим:
шаг 1: i=1 p=1*x=x
шаг 2: i=2 p=x*x
шаг 3: i=3 p=x*x*x и т.д.
Но нам нужно подсчитывать и сумму степеней f=x+x*x+x*x*x+…. В этом же цикле будем считать сумму по формуле f:=f+p, задав начальное значение f=0.
шаг 1: i=1 p=1*x=x, f=0+p=x
шаг 2: i=2 p=x*x, f=x+p=x+x*x
шаг 3: i=3 p=x*x*x, f=x+x*x+x*x*x и т.д.
Текст программы
var i,f,p,n,x:integer;
begin
f:=0;
p:=1;
writeln(‘введите целое число < 100’);
readln(n);
writeln(‘введите число x’);
readln(x);
for i:=1 to n do
begin
p:=p*x;
f:=f+p;
end;
writeln(‘f=’,f);
end.
Задача (урок)
Составьте программу, вычисляющую значение выражения f= x+2x+3x+…+nx
где x – целое число, n – целое положительное число, вводимые с клавиатуры.
Пояснение
В этой программе будем использовать переменную цикла i как коэффициент для переменной x:
for i:=1 to n do f:=f+i*x
Текст программы
var i,f,n,x:integer;
begin
f:=0;
writeln(‘введите целое число < 100’);
readln(n);
writeln(‘введите число x’);
readln(x);
for i:=1 to n do f:=f+i*x;
writeln(‘f=’,f);
end.