Алгоритм и программа. Алгоритм и программа. Что такое программа? Что такое алгоритм?
Вид материала | Программа |
- Урок №2. Тема: «Структура программы на Turbo Pascal», 71.26kb.
- План Введение применение алгоритмов для формирования орфографической зоркости у учащихся, 423.87kb.
- Конспект урока по информатике на тему: «Линейные алгоритмы», 85.45kb.
- Урок по теме: "Язык программирования Турбо Паскаль", 101.29kb.
- Тест Томаса Килмана, матрица стратегий поведения в конфликте, алгоритм, 116.81kb.
- Расширенный алгоритм Евклида, 78.19kb.
- Алгоритм и программа поиска минимального и максимального элементов в массиве. Задача, 17.73kb.
- Волновой алгоритм (Алгоритм Ли), 30.36kb.
- Учить писать конспект. Учить составлять список литературы., 102.02kb.
- Алгоритм и программа расчета оптимальной формы резервуара для хранения нефти. 02069547., 33.75kb.
PASCAL
Урок 1.
Алгоритм и программа.
Алгоритм и программа.
Что такое программа?
Что такое алгоритм?
С сегодняшнего дня наша главная задача – взглянуть на программу не сточки зрения пользователя ЭВМ, а с позиции программиста. Сегодня мы сделаем первый шаг к программированию.
Алгоритм – это совокупность чётко сформулированных правил для решения задач за конечное число шагов.
Теперь посмотрите внимательно на это определение. Подумайте, сталкивались ли вы когда-либо с подобным явлением – возникала ли у вас необходимость в чётко сформулированных правилах для решения какой-то задачи?
Примеры использования алгоритмов человеком: рецепты, инструкции к техническим устройствам, алгоритмы игр (прятки, например).
Можно сказать, что алгоритм – это последовательность команд, управляющих работой какого-либо объекта (исполнителя алгоритма).
Алгоритм должен обладать некоторыми важными свойствами.
Свойства алгоритмов:
1. Точность и последовательность.
Это свойство указывает, что любой алгоритм должен состоять из конкретных действий, следующих в определённом порядке (пример: рецепт приготовления пельменей). Каждая команда должна определять однозначное действие исполнителя.
2. Понятность.
Алгоритм должен быть понятен его исполнителю, то есть тому, кто его исполняет. Алгоритм должен составляться на конкретного исполнителя.
3. Результативность.
Это свойство означает, что алгоритм всегда должен приводить к какому-то результату, то есть быть законченным. В противном случае алгоритм называют незаконченным или невыполняемым. Это обычно происходит, когда в алгоритме не хватает некоторых команд, или некоторые команды неверны.
Пример (нахождение большего из двух чисел):
Даны два числа А и В. Найти большее число.
Алгоритм:
- вычтем из первого числа второе (А-В);
- если получился положительный результат, то первое число больше второго;
- если получился отрицательный результат, то второе число больше первого.
Пусть А=67, В=43. Пусть А=-24, В=-12. Пусть А=35, В=35.
Как видно, в таком алгоритме не хватает команды: «если результат равен 0, то числа равны.
Для выполнения алгоритма как правило необходимы какие-то исходные данные: для повара – продукты, для токаря – детали.
Теперь давайте с вами пока закроем обсуждение объекта «алгоритм» и перейдём к другому нашему объекту – «программа». И сначала запишем одно из возможных определения этого понятия.
Программа – это алгоритм, записанный на языке исполнителя.
О чём нам говорит данное определение. Прежде всего, мы можем сказать, что программа – это также совокупность чётко сформулированных правил для решения задачи за конечное число шагов. Но чем она отличается от алгоритма?
Пример: приготовление пельменей – командный и программный режимы.
Т.е., программа это тот же алгоритм, но выполняемый в программном, а не командном режиме и полностью понятный исполнителю (не требует дополнительных пояснений извне).
Кроме того, слово программа обычно используют, говоря именно об информатике и ЭВМ, а алгоритм – это более общее понятие.
Компьютерные программы тоже состоят из отдельных команд. Самые простые – команды машинного языка:
- изобразить на экране точку;
- включить звук заданной высоты и громкости:
- сложить два числа и т.д.
Все эти команды «мелкие», поэтому программа выполнения даже очень простого задания будет состоять из большого числа команд. Пример: рисование окружности.
Компьютер рисует каждую геометрическую фигуру по точкам, которые он, как мы определили, умеет рисовать. Таким образом, для прорисовки окружности ЭВМ должна нарисовать последовательность точек, расположенных на определённом расстоянии от центра окружности. Программа для этого будет содержать множество практически одинаковых команд: нарисуй точку там-то, нарисуй точку там… и т.д. Но не проще ли придумать одну команду, которая бы однозначно определяла действия компьютера, не вникая в подробности. И такие команды придуманы. Они называются процедурами. Если присвоить этим процедурам простые названия, то программы будут небольшие и понятные.
К примеру, в нашем случае уместна была бы процедура «Окружность», которая являлась бы командой компьютеру выполнить программу рисования окружности по заданным параметрам. А какие параметры (или данные) необходимо здесь знать компьютеру? Расположение центра окружности и величина радиуса.
Давайте теперь закрепим сказанное в рабочих тетрадях.
Программа ЭВМ состоит из отдельных команд. Самые простые – команды машинного языка. Из них состоят более сложные команды – процедуры.
Теперь мы можем дать новое определение слову «программа» с точки зрения программиста – человека, который создаёт программы для компьютера. Программа – это алгоритм, записанный с помощью процедур, т.е. команд, понятных и компьютеру и программисту.
Для создания таких программ придуманы специальные средства, которые называются языками программирования. Такие языки содержат в себе набор процедур, а также программную среду, позволяющую, скажем так, «записывать» эти процедуры и переводить записанную программу в машинный код. Один из таких языков вам предстоит в дальнейшем изучить и освоить.
Таким образом, мы пришли к ещё одному термину – «программирование». Под этим словом понимают как просто процесс создания программ, так и более сложный процесс, подразумевающий решение задачи при помощи ЭВМ посредством построения алгоритмов на специальных алгоритмических языках.
Основные приёмы программирования:
1) Сведение сложного к простому.
2) Собственные процедуры.
3) Ветвления.
Урок 2.
Язык программирования Pascal.
Язык программирования Pascal.
Паскаль (Pascal) – алгоритмический язык программирования высокого уровня.
Любой язык программирования содержит, прежде всего, алфавит, из которого строятся команды и другие элементы программы (большинство языков программирования за основу взяли алфавит английского языка). Из алфавита строятся так называемые «слова» (или команды), которые, связываясь между собой при помощи специальных правил (синтаксиса), образуют программу.
Алфавит языка Pascal:
1. Буквы латинского алфавита.
2. Цифры от 0 до 9.
3. Специальные символы:+ - * / _ ) ( : ; ‘ и др.
4. Буквы русского алфавита.
Структура программы (на языке Паскаль):
PROGRAM n; заголовок
VAR a1;...;a2; раздел описания
BEGIN
p1;...;p2 раздел операторов
END.
Команду алгоритма в Паскале принято называть оператором.
Оператор содержит указание компьютеру, что надо выполнять в данный момент.
Оператор ещё называют процедурой, поскольку каждая команда, написанная на языке высокого уровня, даёт ЭВМ команду выполнять несколько более мелких команд.
Операторы в программе отделяются друг от друга символом «;».
Оператор вывода WRITE.
Первый оператор, с которого мы начнём знакомство, даёт компьютеру указание вывести на экран текст.
«WRITE» с английского «пиши».
Общий вид:
1. WRITE(параметр)
2. WRITELN(параметр)
Отличие второго оператора заключается в том, что после его выполнения курсор автоматически переходит на следующую строку.
Большинство операторов содержат параметры, которые указываются в круглых скобках.
Примеры:
WRITE(2005) 2005
WRITE(2*2) 4
WRITE(‘Привет’) Привет
WRITE(‘Я’,’изучаю’,’Паскаль’) ЯизучаюПаскаль
WRITE(‘12’,’5+1’,5+1,’=’,120+21) 125+16=141
При составлении программы все операторы заключаются в логические скобки BEGIN и END.
Теперь попробуем создать первую программу на языке Паскаль.
Для создания программ созданы системы программирования, которые включают в себя средство для написания программ и средство для перевода текста программы на язык машинного кода и исполнения программы.
Такая система существует и для языка Паскаль. Мы рассмотрим систему программирования Borland Pascal версии 7.0.
Запустите систему.
Составим простейшую программу:
PROGRAM PR1;
BEGIN
WRITELN(‘Дважды два – четыре’);
WRITELN(‘2*2=4’);
WRITELN(‘Это всем известно’);
WRITE(‘ в целом мире’);
END.
Урок 3.
Оператор присваивания.
Оператор присваивания.
Для обозначения исходных данных и результатов вычислений употребляются переменные. В процессе вычислений переменная может принимать разные значения. Для задания значений переменным в Паскале существует ОПЕРАТОР ПРИСВАИВАНИЯ.
Общий вид:
ИМЯ ПЕРЕМЕННОЙ := ЗНАЧЕНИЕ ПЕРЕМЕННОЙ
:= - это знак присваивания.
Имя переменной – как правило, латинская буква.
Значением переменной может быть не только число, но и другая переменная, а также арифметическое выражение.
Пример:
a:=6 (с этого момента компьютер будет помнить, что а=6)
а:=2*3+4 (а=10)
b:=a (b=10)
y:=a+b+1 (y=21).
Если необходимо результат присваивания вывести на экран, используют оператор вывода WRITE.
Пример:
v:=-2+10;
h:=10*v;
s:=v+h;
WRITE(s);
END.
ВНИМАНИЕ! Все переменные в выражениях должны иметь какое-то значение (числовое), иначе результат не получится.
Все переменные, используемые в программе, описываются в разделе описания переменных, который имеет вид:
VAR__имя переменной 1, имя переменной 2 … имя переменной N : тип переменной;
Пример (набрать программу):
PROGRAM_PR2;
VAR a,b,y:INTEGER;
BEGIN
a:=10;
b:=5;
y:=a+b;
WRITE(‘y=’,y)
END.
Типы переменных:
INTEGER(целый) – описывает переменный целого типа (не дробные). при этом значение числа должно находиться в диапазоне от -32768 до 32767.
LONGINT(длинный целый) – диапазон от -2147483648 до 2147483647.
REAL(вещественный) – описывает дробные переменные.
Переменная в ходе выполнения программы может менять своё значение сколько угодно раз, но не может менять тип.
Пример (набрать программу):
PROGRAM_PR3;
VAR_k,l:INTEGER; s:REAL;
BEGIN
k:=10;
l:=4;
s:=5*k*l;
WRITELN(‘Первое значение S=’,s);
k:=15;
s:=k/l;
WRITE(‘Второе значение S=’,s)
END.
{ответы: s=200 и s=3,75}
Именем переменной может служить любая последовательность латинских букв, цифр и знака подчёркивания, но не начинающаяся с цифры.
Например:
Верное написание | Неверное написание |
x velichina summa1 polnaya_summa | ж a*b 2ab polnaya summa |
Урок 4.
Арифметические выражения.
Арифметические выражения.
Основные арифметические действия: + - * /.
Основное правило составления арифметических выражений в Паскале: в первую очередь выполняются вычисления в скобках, при этом приоритет всегда имеют действия * и /, а затем + и -.
Основные математические функции:
SQR(x) – x2
SQRT(x) -
ABS(x) -
SIN(x), COS(x)
Урок 5.
Арифметические выражения.
Самостоятельная работа:
задания 1-2 из сборника «ЗадачиПаскаль.doc».
Урок 6.
Арифметические выражения.
Разбор задачи, содержащей сложные арифметические выражения.
program ar;
var a,b,c,d,e,f:real;
begin
e:=2;
c:=sqrt(cos(e-1));
d:=c/(e*e);
b:=(d+2)/e;
a:=c*(d+b);
f:=a/(b*c/(d*e));
writeln(f)
end.
Самостоятельная работа:
задание 3 из сборника «ЗадачиПаскаль.doc».
Урок 7.
Арифметические выражения.
PROGRAM Arifm;
VAR k:INTEGER; x,y,z:REAL;
BEGIN
k:=2;
x:=SQR(SQR(SQR((k+1)/(k-1))));
y:=SIN(SQRT(k*k*k+1))/SQR(COS(7/(2*k)));
z:=(1+SQR(SIN(SQRT(x+1))))/COS(1.2*y-4);
WRITELN('Z=',z:3:3)
END.
Ответ: Z=5.833.
В записи десятичной дроби в Паскале дробная часть отделяется от целой не запятой, а точкой.
Для удобного отображения дробного числа на экране в оператор WRITE после имени переменной добавляют параметр, определяющий количество знаков перед запятой и после неё (например, S:3:2).
Сообщения об ошибках:
1. Сотрите точку после END.
Unexpected end of file – неожиданный конец файла.
При этом курсор как правило помещается в то место, где обнаружена ошибка.
2. Сотрите ; после любого из операторов.
“;” expected – ждал точку с запятой.
3. Вместо WRITELN напишите WITELN.
Unknown identifier – неизвестное имя.
Урок 8.
Арифметические выражения.
Контрольная работа:
Задания из файла «Паскаль Арифметика 1.doc».
Урок 9.
Оператор ввода READ.
Оператор ввода READ.
Оператор ввода предназначен для передачи пользователем исходных данных программы в компьютер с помощью клавиатуры. По окончанию ввода данных переменным присваиваются вводимые значения, которые затем используются в ходе выполнения программы.
Общий вид:
1. READ(список переменных);
2. READLN(список переменных);
Различие между этими двумя формами то же, что и в операторе WRITE.
Число переменных в списке может быть любым. Если переменных несколько, то они разделяются запятыми. При вводе переменных с клавиатуры после каждого значения необходимо нажимать клавишу ENTER.
Пример (составим программу, вычисляющую и выводящую на экран сумму двух любых чисел, вводимых пользователем с клавиатуры):
PROGRAM RD;
VAR a,b,s:REAL;
BEGIN
WRITELN(‘Введите значения переменных a и b’);
READLN(a,b);
s:=a+b;
WRITELN(‘S=’,s:3:0)
END.
Добавив в программу оператор READLN без списка переменных в скобках, мы тем самым прекратим выполнение программы до нажатия клавиши ENTER. Т.е. компьютер будет ждать от нас ввода переменных и нажатия ENTER, но так как переменных вводить не надо, то нужно только нажать ENTER.
PROGRAM RD;
VAR a,b,s:REAL;
BEGIN
WRITELN(‘Введите значения переменных a и b’);
READLN(a,b);
s:=a+b;
WRITELN(‘S=’,s:3:0);
READLN
END.
Рассмотрим такой пример: Составить программу вычисления площади окружности радиуса R (значение радиуса пользователь вводит с клавиатуры).
PROGRAM Sokr;
VAR r,s:REAL;
BEGIN
WRITELN('Введите значение радиуса');
READLN(r);
s:=3.14*SQR(r);
WRITELN('Площадь окружности равна ',s:3:1);
READLN
END.
Самостоятельная работа:
задание 4 из сборника «ЗадачиПаскаль.doc».
Урок 10.
Оператор ввода.
Самостоятельная работа:
задания 5-7 из сборника «ЗадачиПаскаль.doc».
Урок 11.
Строковые переменные.
Строковые переменные.
Для работы с текстом в Паскале можно использовать строковый тип переменных STRING. Переменной, описанной этим типом, можно присвоить в программе не числовое значение, а набор символов (текст) до 255 знаков.
Пример:
PROGRAM Stroka;
VAR a:STRING;
BEGIN
WRITELN(‘Введите слово’);
READLN(a);
WRITELN(‘Вы ввели слово ‘,a);
READLN
END.
Пример 2.
Составить программу, ведущую диалог с пользователем:
Компьютер: Привет! Как тебя зовут?
Пользователь: Вася
Компьютер: Очень приятно, Вася! А сколько тебе лет?
Пользователь: 15
Компьютер: Ого! Целых 15 лет! Ты уже совсем взрослый!
PROGRAM DIALOG;
VAR imya:STRING; vozrast:INTEGER;
BEGIN
WRITELN(‘Привет! Как тебя зовут?’);
READLN(imya);
WRITELN(‘Очень приятно, ‘,imya,’! А сколько тебе лет?’);
READLN(vozrast);
WRITELN(‘Ого! Целых ‘,vozrast,’ лет! Ты уже совсем взрослый!’);
READLN
END.
Самостоятельная работа:
Составить программу, которая подсчитывает и выводит на экран корень, квадрат и куб числа, введённого пользователем с клавиатуры.
Решение:
PROGRAM cub;
VAR x,kor,kw,kub:REAL;
BEGIN
WRITELN('Введите число:');
READLN(x);
kor:=SQRT(X);
kw:=SQR(X);
kub:=x*x*x;
WRITELN('Корень числа равен ',kor:5:1,', квадрат числа равен ',kw:5:1,', куб равен ',kub:5:1);
READLN
END.
Урок 12.
Условный оператор.
Условный оператор.
Предположим, нам необходимо составить программу, которая перемножала бы два числа, определяла, больше или меньше это произведение, чем 2000, и выводила сообщение на экран («Произведение большое» или «Произведение маленькое»).
Составим блок-схему алгоритма решения этой задачи:
Данный алгоритм имеет ветвление.
Для программирования ветвлений в Паскале используют условный оператор, который имеет следующий вид:
IF условие THEN оператор1 ELSE оператор2;
Например:
IF a>b THEN x:=a-b ELSE x:=a+b;
(если a>b тогда x=a-b иначе x=a+b).
Вернёмся к нашей задаче. Программа для её решения будет выглядеть так:
PROGRAM Uslov;
VAR a1,a2,y: REAL;
BEGIN
WRITELN(‘Введите первое число’);
READLN(a1);
WRITELN(‘Введите второе число’);
READLN(a2);
y:=a1*a2;
IF y>2000 THEN
WRITELN(‘Произведение большое’)
ELSE
WRITELN(‘Произведение маленькое’);
READLN
END.
Пример: составить программу, подсчитывающую и выводящую на экран значение переменной D, если известно, что ; учесть, что если a-1=0, то данная задача не решаема.
PROGRAM Delenie;
VAR a,b,d: REAL;
BEGIN
READLN(a,b);
IF a=1 THEN
WRITELN(‘Решений нет’)
ELSE
d:=a*b*b/(a-1);
WRITELN(‘D=’,d:3:2);
READLN
END.
Рассмотрим ещё раз схему: IF условие THEN оператор1 ELSE оператор2;
Под условием понимают два арифметических выражения, разделённых знаком сравнения.
Знаки сравнения:
Математика | > | < | = | ≥ | ≤ | ≠ |
Паскаль | > | < | = | >= | <= | < > |
Условный оператор в некоторых случаях пишут в краткой форме:
IF условие THEN оператор;
Например:
s:=6;
IF s<0 THEN s:=s+10;
s:=s+1;
WRITELN(s);
Данный фрагмент программы выведет на экран 7, а не 16. Однако, если s:=-6, тогда будет s равно 5 (т.к. условие выполнится).
То есть, такая форма условного оператора подразумевает, что нет какого-то противоположного действия, хотя ветвление всё же присутствует.
Самостоятельная работа:
задание 9 из сборника «ЗадачиПаскаль.doc».
Урок 13.
Условный оператор.
Самостоятельная работа:
задания 10-11 из сборника «ЗадачиПаскаль.doc».
Дополнительное задание 12 (Составить программу «калькулятор»):
program kalk;
var a,b:integer;
x:string;
f:real;
begin
writeln('Введите арифметическое действие’);
readln(a);
readln(x);
readln(b);
if x='+' then f:=a+b;
if x='-' then f:=a-b;
if x='*' then f:=a*b;
if x='/' then f:=a/b;
writeln(f:3:1);
readln
end.
Урок 14.
Составной оператор.
Составной оператор.
Составной оператор – это набор операторов, заключённых в логические скобки (BEGIN и END), и определяющийся в программе как один оператор.
Вот фрагмент программы, которая складывает два числа и выводит результат на экран:
x:=a+b;
WRITELN(‘Сумма равна ‘,x);
А вот фрагмент, который перемножает два числа и выводит ответ:
x:=a*b;
WRITELN(‘Произведение равно’,x);
Пусть нам необходимо составить программу, которая по желанию пользователя либо складывала, либо перемножала введённые числа (т.е. пользователь вводит с клавиатуры два любых числа и приказывает либо складывать, либо перемножать их).
PROGRAM Chisla;
VAR Otvet: STRING;
a,b: INTEGER;
BEGIN
WRITELN(‘Введите два числа’);
READLN(a,b);
WRITELN(‘Сложить или умножить?’);
READLN(Otvet);
IF Otvet=’сложить’ THEN
BEGIN
x:=a+b;
WRITELN(‘Сумма равна ‘,x);
END
ELSE
BEGIN
x:=a*b;
WRITELN(‘Произведение равно ‘,x);
END;
READLN
END.
В данной программе можно выделить две похожие структуры – набора операторов, заключённых в логические скобки BEGIN/END. Такие структуры называют составными операторами.
Составной оператор – это набор операторов, заключённых в логические скобки (BEGIN и END), и определяющийся в программе как один оператор.
При использовании в программе составных операторов, а также при составлении достаточно больших по объёму программ, очень удобно использовать ступенчатую запись программы, при которой составные операторы пишутся с некоторым отступом от левого края страницы. Такая запись облегчает чтение программы и позволяет избегать некоторых ошибок в написании.
Также полезно в записи программ:
- каждый оператор писать с новой строки;
- длинные операторы писать в несколько строк, при этом парные слова записывать друг под другом.
Самостоятельная работа:
Написать программу, которая по желанию пользователя возводила в квадрат или извлекала корень из введённого числа.
Program sostawnoy_operator;
var x,otvet:integer;
y:real;
begin
writeln('Введи число');
readln(x);
writeln('Что найти: корень или квадрат?’);
readln(otvet);
if otvet=’квадрат’ then
begin
y:=x*x;
writeln('Квадрат равен ',y:5:2);
end
else
begin
if x<0 then writeln('Нет решений') else
begin
y:=sqrt(x);
writeln(‘Корень равен ',y:5:2);
end;
end;
readln
end.
Урок 15.
Циклы в Паскале.
Циклы в Паскале.
В своей жизненной практике человек постоянно встречается с ситуациями, для решения которых требуется многократно повторять одни и те же действия, пока не выполнится некоторое заранее определённое условие.
Например, нам необходимо перевести английский текст на русский язык. Для решения этой задачи мы используем такой алгоритм:
- прочесть предложение;
- перевести предложение;
- записать перевод в тетрадь;
- если в тексте остались непереведённые предложения, то перейти к шагу 1;
- завершить работу.
А вот пример из информатики. Алгоритм перевода числа из 10-й системы счисления в 2-ю:
1. Разделить число на 2 и записать частное.
2. Разделить частное на 2.
3. Сравнить получившееся частное с числом 2.
4. Если частное больше 2, то перейти к шагу 2.
5. Прекратить деление, записать ответ.
Такие алгоритмические структуры, которые состоят из серии команд, выполняемых многократно, называются циклами.
Цикл – это последовательность операций, которые выполняются неоднократно.
Перечень повторяющихся команд называют «телом цикла».
Можно выделить три типа циклов:
1. Цикл с постусловием.
2. Цикл с предусловием.
3. Цикл со счётчиком.
Для описания каждого из этих типов в Паскале существует свой оператор.
1. Цикл с постусловием (REPEAT).
Структура:
Принцип действия оператора:
Сначала компьютер по очереди выполняет операторы, стоящие после слова REPEAT, пока не дойдёт до слова UNTIL. Если условие ложно, то компьютер снова по очереди выполнит эти операторы и снова проверит истинность условия и т.д. Если условие оказывается истинным, то работа оператора REPEAT прекращается и компьютер переходит к выполнению следующих команд.
Пример: Написать программу, которая выводила бы на экран цифры от 0 до 20 в столбик.
PROGRAM CIKL;
VAR a:INTEGER;
BEGIN
a:=0;
REPEAT
WRITELN(a);
a:=a+1
UNTIL a>20;
READLN
END.
Самостоятельная работа:
Задание 2 из сборника «Паскаль Циклы».
Урок 16.
Циклы в Паскале.
Самостоятельная работа:
Задание 3 из сборника «Паскаль Циклы».
Урок 17.
Циклы в Паскале.
2. Цикл с предусловием (WHILE).
Структура:
Принцип действия оператора:
Сначала компьютер проверяет истинность условия, стоящего после слова WHILE. Если условие истинно, то выполняется оператор, стоящий после слова DO. Затем снова проверяется истинность условия и т.д. Если условие ложно, то оператор WHILE прекращает свою работу и компьютер переходит к выполнению следующего оператора.
Пример: Написать программу, которая выводила бы на экран цифры от 0 до 20 в столбик.
PROGRAM CIKL;
VAR a:INTEGER;
BEGIN
a:=0;
WHILE a<21 DO
BEGIN
WRITELN(a);
a:=a+1;
END;
READLN
END.
Самостоятельная работа:
Задание 2 и 3 из сборника «Паскаль Циклы».
Урок 18.
Циклы в Паскале.
Отличия REPEAT от WHILE:
1) Программа выходит из цикла REPEAT тогда, когда условие истинно, а из WHILE, когда условие ложно.
2) WHILE может ни разу ни разу не выполнить оператор, стоящий после слова DO, а REPEAT хотя бы раз стоящие после него команды выполнит.
Например:
k:=8 REPEAT k:=1 UNTIL 3>2; WRITELN(k); на экране будет 1. | k:=8; WHILE 2>3 DO k:=1; WRITELN(k); на экране будет 8. |
Самостоятельная работа:
Задания 4,5 из сборника «Паскаль Циклы».
Задача 4:
PROGRAM CIKL;
VAR a,b:INTEGER;
BEGIN
b:=0;
REPEAT
a:=1;
b:=b+1;
REPEAT
WRITE(a,' ');
a:=a+1
UNTIL a>b;
WRITELN
UNTIL b>20;
READLN
END.
Задача 5:
PROGRAM PAROL;
VAR p:STRING;
BEGIN
REPEAT
WRITELN('Введите пароль!');
READLN(p)
UNTIL p='пароль';
WRITELN('Пароль правильный.');
READLN
END.
(программу можно усовершенствовать, добавив перед UNTIL такую строку:
IF p<>’пароль’ THEN WRITELN(‘Пароль неверный!’)
Урок 19-20.
Циклы в Паскале.
3. Цикл со счётчиком (FOR).
Этот цикл ещё называют циклом с известным количеством повторений.
Структура:
Пример: составить программу, выводящую на экран 200 раз слово Паскаль.
PROGRAM CIKL; VAR i:INTEGER; BEGIN FOR i:=1 TO 200 DO WRITELN(‘Паскаль’); READLN END. | PROGRAM CIKL; VAR s:INTEGER; BEGIN s:=1; REPEAT WRITELN(‘Паскаль’); s:=s+1 UNTIL s>200; READLN END. |
Цикл FOR используется для описания заранее известного количества повторений.
Счётчик – переменная порядкового типа (например, INTEGER).
Начальное и конечное значение – целое число, переменная или арифметическое выражение.
Каждый раз при выполнении цикла значение счётчика увеличивается на 1 и сравнивается с конечным, до тех пор, пока не станет больше его.
ВНИМАНИЕ: конечное значение должно быть больше начального, в противном случае вместо слова TO надо писать DOWNTO.
Пример:
PROGRAM CIKL;
VAR i:INTEGER;
BEGIN
FOR i:=200 DOWNTO 1 DO
WRITE(I,’ ‘);
READLN
END.
Практическая работа:
Задача 1: Написать программу, выводящую на экран в столбик все целые числа из интервала от a до b (интервал задаётся пользователем), а на следующей строке – сумму этих чисел. (задача 3 из сборника «ПаскальЦиклы»).
program ciklfor;
var i,a,b,s:integer;
begin
writeln('Введите два числа');
readln(a,b);
s:=0;
for i:=a to b do
begin
writeln(i,' ');
s:=s+i;
end;
write(s);
readln
end.
Задача 2: Доработать предыдущую программу так, чтоб она выполнялась также при условии a>b.
program ciklfor;
var i,a,b,s:integer;
begin
writeln('Введите два числа');
readln(a,b);
s:=0;
if a
for i:=a to b do
begin
writeln(i,' ');
s:=s+i;
end
else
for i:=a downto b do
begin
writeln(i,' ');
s:=s+i;
end;
write(s);
readln
end.
Задача 3: Написать программу, которая выводит таблицу квадратов первых десяти целых положительных чисел. Ниже представлен рекомендуемый вид экрана во время работы программы.
Таблица квадратов
Число Квадрат
- 1
- 4
- 9
- 16
- 25
- 36
- 49
- 64
- 81
- 100
PROGRAM TABLKWADR;
VAR i:INTEGER;
BEGIN
WRITELN('Таблица квадратов');
WRITELN('Число Квадрат');
FOR i:=1 TO 10 DO
BEGIN
WRITE(i,' ');
WRITELN(i*i);
END;
READLN
END.
Дополнительное задание: задачи №6 и №7 из сборника «ПаскальЦиклы».
№6:
PROGRAM PAROL;
VAR p:STRING; i:INTEGER;
BEGIN
for i:=1 to 3 do
begin
WRITELN('Введи пароль!');
READLN(p);
IF p<>'пароль' THEN
WRITELN('Пароль неверный!') ELSE
begin
WRITELN('Пароль правильный.');
exit;
end;
end;
WRITELN('Ты не знаешь пароля! Пошёл вон!');
READLN
END.
№7:
program summator;
var i,s,n,a:integer;
begin
s:=0;
writeln('Сколько чисел нужно сложить?');
readln(n);
for i:=1 to n do
begin
write('Введите ',i,'-е число:');
readln(a);
s:=s+a;
end;
write('Сумма введённых чисел равна ',s);
readln
end.
Урок 21.
Работа со звуком в Паскале.
Работа со звуком в Паскале.
Для создания звука в Паскале используются операторы, входящие в стандартный модуль CRT:
- SOUND(x) – включает звук с частотой x (Гц).
- NOSOUND – выключает звук.
- DELAY(x) – приостанавливает работу программы на x миллисекунд.
Для использования этих операторов необходимо вызвать модуль CRT в разделе модулей (USES CRT).
Пример:
PROGRAM ZWUK;
USES CRT;
BEGIN
SOUND(300);
DELAY(2000);
NOSOUND;
END.
Параметрами операторов могут быть не только числа, но и переменные.
Пример:
PROGRAM MUSIC;
USES CRT;
VAR s:INTEGER:
BEGIN
S:=20;
WHILE s<2000 DO
BEGIN
SOUND(s);
DELAY(100);
S:=s+20;
END;
NOSOUND;
END.
Практическая работа:
Написать программу, имитирующую сигнализацию автомобиля.
Урок 22.
Процедуры пользователя.
Процедуры пользователя.
Как уже говорилось ранее, все операторы Паскаля, как и любого другого языка высокого уровня – это процедуры. Т.е. система программирования рассматривает оператор как набор более мелких команд. Таким образом, операторы READ, WRITE, REPEAT…, IF…, SOUND и т.д. являются процедурами. Их ещё называют стандартными процедурами. Часть стандартных процедур (операторов) требует для их вызова лишь написания в программе, а часть входит в независимые модули, которые сначала нужно включить в программу, описав их в разделе USES. Но сколько бы ни существовало стандартных процедур, всех возможных задач, которые возникают в программировании, они не решат. Поэтому система программирования должна включать в себя возможность создания процедур.
Процедура, определяемая пользователем, это независимая часть программы, которую после однократного описания можно многократно вызывать по имени из последующих частей программы для выполнения определённых действий.
Процедуры пользователя описываются сразу после раздела описания переменных по следующей схеме:
PROCEDURE имя;
Описательная часть;
BEGIN
Исполнительная часть;
END;
Для запуска описанной таким образом процедуры достаточно в программе указать её имя.
Пример: Написать программу, формирующую сигнал SOS азбукой Морзе.
PROGRAM MORZE;
USES CRT;
VAR i:integer;
PROCEDURE t;
BEGIN
SOUND(700);DELAY(800);NOSOUND;DELAY(400);
END;
PROCEDURE TY;
BEGIN
SOUND(700);DELAY(3000);NOSOUND;DELAY(3000);
END;
BEGIN
FOR I:=1 TO 5 DO
BEGIN
ty;ty;ty;t;t;t;ty;ty;ty;DELAY(3000);
END.
А если создать несколько процедур, каждая из которых будет воспроизводить ноту, то можно написать мелодию.
Пример: Напишем программу, выводящую звук заданной пользователем частоты.
program melodiya;
uses CRT;
var s:integer;
procedure a;
begin
sound(s);delay(30000);nosound;
end;
begin
write('Введите частоту в герцах: ');
readln(s);
writeln('Слушайте звук!');
a;
end.
Пример: Напишем программу, выводящую мелодию, сочинённую пользователем. Ноты мелодии пользователь вводит в виде их частот.
program melodiya;
uses CRT;
var a:array[1..20] of integer;
i,v,n:integer;
procedure nota;
begin
sound(v);delay(30000);nosound;delay(30000);
end;
begin
writeln('Сколько нот вмелодии?');
readln(n);
writeln('Введите мелодию:');
for i:=1 to n do
readln(a[i]);
writeln('Слушаем?');
readln;
for i:=1 to n do
begin
v:=a[i];
nota;
end;
readln;
end.
Практическая работа:
1. Составьте программу, которая выводит звук определённой частоты, а пользователь определяет частоту этого звука: если указал частоту ниже или выше, то программа сообщает об этом и снова выводит звук, пока не получит правильный ответ.
2. Пусть пользователь вводит сообщение, закодированное азбукой Морзе, а программа озвучивает введённый код.
Решение задач:
1.
program melodiya;
uses CRT;
var s,v:integer;
procedure a;
begin
sound(v);delay(30000);nosound;
end;
begin
randomize;
v:=random(1000)+20;
repeat
a;
write('Угадай частоту:');
readln(s);
if s>v then
writeln('Ниже.');
if s
writeln('Выше.')
until s=v;
write('Угадал!');
readln;
end.
2.
program melodiya;
uses CRT;
var a:array[1..20] of integer;
i,v,n:integer;
procedure t;
begin
sound(700);delay(5000);nosound;delay(30000);
end;
procedure ty;
begin
sound(700);delay(30000);nosound;delay(30000);
end;
begin
writeln('Сколько символов в сообщении?');
readln(n);
writeln('Введите сообщение:');
for i:=1 to n do
readln(a[i]);
writeln('Слушаем?');
readln;
for i:=1 to n do
begin
if a[i]=1 then t;
if a[i]=0 then ty;
end;
readln;
end.
Урок 23.
Создание графики в Паскале.
Создание графики в Паскале.
Для создания графики используют операторы (процедуры), входящие в стандартный модуль GRAPH:
ОПЕРАТОР | НАЗНАЧЕНИЕ |
PUTPIXEL(x,y,c) | Точка с координатами x,y цветом с. |
LINE(x1,y1,x2,y2) | Прямая, заданная координатами двух концов. |
CIRCLE(x,y,r) | Окружность с центром с координатами x,y и радиусом r. |
MOVETO(x,y) | Перемещает текущий указатель в точку с координатами x,y. |
LINETO(x,y) | Проводит прямую из точки текущего указателя в точку с координатами x,y. |
RECTANGLE(x1,y1;x2,y2) | Прямоугольник, заданный координатами двух противолежащих углов. |
Перед использованием процедур создания графики необходимо загрузить в программу модуль GRAPH (добавить после заголовка строку USES GRAPH), инициализировать графический режим (INITGRAPH), а в конце программы закрыть графический режим (CLOSEGRAPH).
Пример: программа, рисующая на экране рожицу.
PROGRAM RISUNOK;
USES GRAPH;
VAR gd,gm:INTEGER;
BEGIN
gd:=detect;
INITGRAPH(gd,gm,’c:\BP\BGI’);
CIRCLE(320,240,200);
LINE(200,320,400,320);
CIRCLE(220,200,20);
CIRCLE(420,200,20);
READLN;
CLOSEGRAPH
END.
Операторы работы с цветом в Паскале:
ОПЕРАТОР | НАЗНАЧЕНИЕ |
SETCOLOR(с) | Задаёт текущий цвет линий. |
SETBKCOLOR(c) | Задаёт цвет фона. |
SETFILLSTYLE(t,c) | Устанавливает тип и цвет заливки. |
FLOODFILL(x,y,c) | Закрашивает замкнутую область до границы с цветом с, где x,y – координаты внутри области. |
BAR(x1,y1,x2,y2) | Рисует прямоугольник, закрашенный текущей заливкой. |
Модуль GRAPH позволяет удобно использовать всего лишь 16 цветов (все цвета в Паскале имеют номера от 0 до 15). Вот они:
0 | Black | Чёрный |
1 | Blue | Синий |
2 | Green | Зелёный |
3 | Cyan | Голубой |
4 | Red | Красный |
5 | Magenta | Фиолетовый |
6 | Brown | Коричневый |
7 | LightGray | Светло-серый |
8 | DarkGray | Тёмно-серый |
9 | LightBlue | Ярко-синий |
10 | LightGreen | Ярко-зелёный |
11 | LightCyan | Ярко-голубой |
12 | LightRed | Розовый |
13 | LightMagenta | Малиновый |
14 | Yellow | Жёлтый |
15 | White | Белый |
Пример: программа, рисующая на экране российский флаг.
program flag;
uses graph;
var gm,gd:integer;
begin
gd:=detect;
initgraph(gm,gd,'c:\BP\bgi');
setfillstyle(1,white);
bar(0,0,640,160);
setfillstyle(1,blue);
bar(0,160,640,320);
setfillstyle(1,red);
bar(0,320,640,480);
readln;
closegraph
end.
Практическая работа:
Составить программу, рисующую на экране на белом фоне зелёный вагон с синими колёсами.
program ris;
uses graph,crt;
var gd,gm,i:integer;
begin
gd:=detect;
initgraph(gd,gm,'c:\bp\bgi');
SETBKCOLOR(white);
setfillstyle(1,green);
bar(160,120,480,320);
setcolor(red);
circle(220,320,40);
circle(420,320,40);
setfillstyle(1,1);
floodfill(220,320,red);
floodfill(420,320,red);
readln;
closegraph
end.
Создание движущихся изображений.
Для создания иллюзии движения картинки по экрану используют циклы. Для этого некоторые параметры графических процедур заменяют переменными, динамически меняющимися в цикле.
Пример: Движение окружности по экрану (слева направо).
program okrugnost;
uses graph,crt;
var gd,gm,x:integer;
begin
gd:=detect;
initgraph(gm,gd,'c:\bp\bgi');
for x:=1 to 640 do
begin
circle(x,240,20);
delay(100);
cleardevice;
end;
readln;
closegraph;
end.
Пример: Движущаяся рожица.
program okrugnost;
uses graph, crt;
var gd,gm,x:integer;
begin
gd:=detect;
initgraph(gm,gd,'c:\bp\bin');
for x:=1 to 640 do
begin
circle(x,240,100);
circle(x-50,200,15);
circle(x+50,200,15);
line(x,240,x,250);
line(x-40,270,x+40,270);
delay(100);
cleardevice;
end;
readln;
closegraph;
end.
Практическая работа:
1. Составить программу, рисующую движение вагона по экрану справа налево.
2. Усовершенствовать программу так, чтобы двигалось три вагона.
Массивы.
При работе с большим числом данных одного типа очень удобно использовать массивы.
Итак, что же такое массивы...
Массив, это разновидность переменной. Он дает возможность хранить сколько угодно значений под одним и тем же именем. К каждому конкретному значению массива, необходимо обращаться через числовой индекс.
Массив - это набор переменных, имеющих одинаковое имя (идентификатор), но различающихся порядковыми номерами (индексами).2000>21>0>0>