Transcript Document

Алгоритмизация и
программирование на языке
TurboPascal
Алгоритм – четкое описание последовательности действий,
которые необходимо выполнить при решении задачи
Свойства алгоритмов
Дискретность (алгоритм
Массовость (возможность
состоит из последовательности
отдельных шагов)
применения алгоритма к большому
количеству различных исходных данных)
Результативность (возможность
Детерминированность
получения из исходных данных результата
за конечное число шагов)
(строго определенная
последовательность действий)
Выполнимость и понятность
(алгоритм должен содержать команды,
Входящие в систему команд исполнителя
И записанные на понятном для исполнителя языке)
Способы записи алгоритмов:
На естественном языке
В виде блок-схемы
На языке
программирования
Блок-схема – наглядное графическое представление алгоритма,
когда отдельные его этапы изображаются при помощи
геометрических фигур, называемых блоками, а связи между этапами
указываются при помощи стрелок, соединяющих эти фигуры.
Элементы блок-схемы
начало (конец)
ввод (вывод) данных
да
Условие
нет
арифметический блок
Алгоритм решения задачи называется линейным,
если все команды в нем исполняются последовательно одна за другой.
Алг Переправа;
Рассмотрим старинную задачу
о волке, козе и капусте.
Человеку нужно переправить
на противоположный берег
волка, козу и капусту.
В
лодку человек может
поместиться либо с козой,
дано волк, коза, капуста, дед;
надо всех перевезти;
нач
1.Перевезти козу;
2. Возвратиться самому;
либо с волком, либо с капустой.
3. Перевезти волка;
На берегу нельзя оставить волка
4. Возвратиться вместе с козой;
с козой или козу с капустой.
5. Перевезти капусту;
6. Возвратиться самому;
7. Перевезти козу;
кон.
начало
Волк, коза, капуста, дед
Перевезти козу
Вернуться деду
Перевезти волка
Вернуться вместе с козой
Перевезти капусту
Вернуться деду
Перевезти козу
конец
Составьте алгоритм и блок-схему для следующей задачи:
По заданным значениям b = 5, c = 6, d = 9, g = 3
надо получить значение m = f : c, где f = b + d – g.
начало
Алг задача1;
b:=5
дано b,c,d,g;
надо m;
c:=6
нач
b:=5;
d:=9
c:=6;
:= оператор
d:=9;
присваивания
g:=3;
g:=3
f:=b+d-g
f:=b+d-g;
m:=f/c;
вывод m;
m:=f/c
Вывод m
кон.
конец
Составьте алгоритм и блок-схему для следующей задачи:
Зная длины трех сторон треугольника, вычислить
его площадь (по формуле Герона) и периметр
Алг задача1;
начало
дано a,b,c;
a,b,c
надо P,S;
p:= (a+b+c)/2
нач
ввод a,b,c;
P:=a+b+c
p:=(a+b+c)/2;
P:=a+b+c;
S:=sqrt(p*(p-a)*(p-b)*(p-c));
S:=sqrt(p*(p-a)*(p-b)*(p-c));
вывод P,S;
кон.
Вывод P,S
Sqrt(x) квадратный
корень
конец
Составьте алгоритм и блок-схему для следующей задачи:
По известным начальной и конечной скоростям, времени движения и
массе тела вычислить под действием какой силы тело начнет двигаться.
Алг задача2;
дано m,V0,V,t;
начало
m,V0,V,t
надо F;
нач
ввод m,V0,V,t;
a:= (V-V0)/t
F:=m*a
a:=(V-V0)/t;
F:=m*a;
Вывод F
вывод F;
кон.
конец
Интегрированная среда TurboPascal.
Правила записи программы.
Никлаус Вирт (Niklaus
Wirth), создатель
языка Pascal.
Структура программы
Program <имя программы>;
const <описание констант>;
type <описания типов>;
var <описание переменных>;
begin
<операторы языка>;
end.
Заголовок программы
Раздел описания констант
Раздел описания типов
Раздел описания
перменных
Тело програмы
Константы языка ТурбоПаскаль
Константы не меняют своего значения в процессе выполнения
программы. Они описываются с помощью служебного слова
const, за которым идет список имен констант, каждому из которых
с помощью символа «=» присваивается значение. Одна
константа от другой отделяется точкой с запятой.
Const
h=3;
b=-7.5;
c=‘abcde’;
Переменные языка ТурбоПаскаль
Переменные могут изменять свое значение в процессе
выполнения программы неограниченное число раз. Описание
переменных начинается со служебного слова var, за которым
следуют имена переменных, и через двоеточие указывается их
тип.
var
a,b: real;
c,d: integer;
f: byte;
Типы данных в языке ТурбоПаскаль
Целочисленный тип данных: integer (а:=5;).
Вещественный тип данных: real (с:=6.5;).
Символьный тип данных: char (b:=‘s’;).
Логический тип данных: boolean. Могут принимать два
значения: true (истина) или false (ложь).
Простейшие операторы языка Паскаль
Оператор присваивания
Оператор ввода
“:=”
read(x); или readln(x);
a:=3.5;
b:=c;
Слева всегда стоит имя переменной,
а справа – значение.
Когда в программе встречается
оператор
read,
ее
действие
приостанавливается до тех пор, пока
не будут введены исходные данные.
Оператор вывода
write(x); или writeln(x);
Задача 1: заданы длины трех сторон треугольника a,b,c.
Вычислить периметр и площадь его. Значения a,b,c ввести
с клавиатуры.
Program treugolnik;
var
a,b,c,S,p,P: real;
begin
write(‘a=‘);
readln(a);
write(‘b=‘);
readln(b);
write(‘c=‘);
readln(c);
p:=(a+b+c)/2;
S:=sqrt(p*(p-a)*(p-b)*(p-c));
P:=a+b+c;
writeln(‘S=‘,S);
writeln(‘P=‘,P);
end.
z
Задача 2: Вычислите значение выражения
2
2 x  y при x=2,5 и y=4,25. (квадрат sqr(x))
Program z2;
var
x,y,z: real;
begin
x:=2.5;
y:=4.25;
z:=sqrt(2*x+sqr(y));
writeln(‘z=‘,z);
end.
Задача 3: Вычислите значение выражения
gt
при x0=250, g=10,V0=30 и t=5.
v t
2
f  x0
0
2
Program z3;
const g=10;
var
x0,V0,t,f: real;
begin
x0:=250;
V0:=30;
t:=5;
f:=x0+V0*t-(g*sqr(t)/2);
writeln(‘f=‘,f);
end.
Задача 4: Написать программу вычисления объема
параллелепипеда. Значения длин сторон вводятся
с клавиатуры.
Program z4;
var
a,b,c,V: real;
begin
write(‘a=‘);
readln(a);
write(‘b=‘);
readln(b);
write(‘c=‘);
readln(c);
V:=a*b*c;
writeln(‘V=‘,V);
end.
Задача 5: Написать программу
вычисления стоимости
покупки,
состоящей из нескольких
тетрадей и карандашей.
Цена одной тетради,
одного карандаша,
количество карандашей
и количество тетрадей
вводятся с клавиатуры.
Program z5;
var
a,b,c,d,S: real;
begin
write(‘1 copybook=‘);
readln(a);
write(‘1 pencil=‘);
readln(b);
write(‘kol-vo copybook =‘);
readln(c);
write(‘kol-vo pencil=‘);
readln(d);
S:=a*c+b*d;
writeln(‘S=‘,S);
end.
Задача 6: Написать программу пересчета расстояния из верст
в километры (1 верста = 1066,8 м). Расстояние в верстах
вводится с клавиатуры.
Program z4;
const v=1066.8;
var
a,b: real;
begin
write(‘a=‘);
readln(a);
b:=a*v/1000;
writeln(‘b=‘,b,’km’);
end.
Инструкция CASE
 Инструкция case используется для выбора
одного из нескольких направлений
дальнейшего хода программы.
 Выбор последовательности действий
осуществляется во время выполнения
программы в зависимости от равенства
значения переменной-селектора константе,
указанной перед группой инструкций.
 В качестве переменной-селектора можно
использовать переменную целого (integer) или
символьного (char) типа.
Инструкция CASE
Case выражение of
список_констант1: begin
инструкции1
end;
список_констант2: begin
инструкции2
end;
…………….
список_константN: begin
инструкции1
end;
end;
Инструкции между begin и end выполняются только в том случае,
если значение выражения после слова case совпадает с
константой из соответствующего списка.
Задача: Написать программу, которая запрашивает у пользователя
номер месяца и выводит соответствующее название времени года. В
случае, если пользователь укажет недопустимое число, программа
должна вывести сообщение «Ошибка ввода данных»
Program time;
var month: integer;
begin
write(‘vvedite № mesyaca=‘);
readln(month);
case month of
1,2,12: writeln(‘zima’);
3,4,5: writeln(‘vesna’);
6,7,8: writeln(‘leto’);
9,10,11: writeln(‘osen’);
else writeln(‘oshibka vvoda dannih’);
end;
readln;
end.
Задача: написать программу, которая запрашивает у
пользователя номер дня недели и выводит одно из сообщений:
«рабочий день», «суббота» или «воскресенье».
Program time;
Var den: integer;
begin
write(‘vvedite № dnya nedeli=‘);
readln(den);
case month of
1,2,3,4,5: writeln(‘rabochiy den’);
6: writeln(‘subbota’);
7: writeln(‘voskresenye’);
else writeln(‘oshibka vvoda dannih’);
end;
readln;
end.
Задача: написать программу, которая
запрашивает возраст
учащихся и выводит номер класса, в котором учится ребенок.
"Калькулятор". Ученик вводит с клавиатуры число, символ
арифметического действия (+, -,*,/) и еще одно число. Компьютер
должен напечатать результат.
Указание. Используйте 3 оператора ReadLn, так как одним
оператором ReadLn вводить числовые и символьные данные вы
не умеете.
Задача: Ввести с клавиатуры дату
(день, месяц, год), записать ее,
назвав месяц словами.
Циклы
 Цикл предписывает многократное выполнение одной
и той же последовательности действий.
 Цикл с параметром предписывает многократное
выполнение одной и той же последовательности
действий при значениях параметра в интервале от
начального до конечного значений с заданным шагом.
For параметр:=нач.значение to кон.значение do оператор;
 цикл for используют тогда, когда заранее, перед
началом его работы известно, сколько раз он должен
выполниться
Вывод десяти звездочек на экран
program Zvezdy ;
var i : integer ;
begin
for i := 1 to 10 do
write ('*')
end.
Что будет отражено на экране после запуска
программы на исполнение?
program schet;
var i : integer;
begin
for i := 1 to 5 do
write (i);
end.
Написать программу, которая выводит на экран
таблицу квадратов чисел от 1 до 10.
Параметр цикла может быть не только числом, но и символом. В
этом случае начальные и конечные значения тоже должны быть
символами, а переменная цикла будет перебирать все значения
между ними в том порядке, в каком они указаны в таблице ASCII.
program Alfavit;
var c : char;
begin
for c := ’a’ to ’z’ do
write (c);
end.
Написать программу нахождения
суммы целых чисел от 1 до 10
program Summa_chisel_ot1do10;
var s, i : integer;
begin
s := 0;
for i := 1 to 10 do
s := s + i;
writeln (’Summa chisel ot 1 do 10 ravna’, s)
end.
Написать программу нахождения
произведения целых чисел от 1 до 5
Найти количество нечётных чисел
из интервала от 30 до 50
program Skoko_nechetnyx_chisel_ot_30_do_50;
var k, i : integer;
begin
k := 0; { вначале счётчик равен 0 }
for i := 30 to 50 do
if k mod 2 <> 0 { Если число не делится на 2, то оно
нечётное … }
then k := k + 1 { … и его надо посчитать }
writeln('В интервале от 30 до 50 ', k, ' нечётных чисел')
end.
Цикл с предусловием
Цикл с предусловием предписывает
многократное выполнение одной и той
же последовательности действий с
проверкой истинности условия перед
телом цикла:
While лог.выражение do оператор;
Цикл с предусловием (ПОКА) чаще всего
используют в двух следующих случаях:
1. Число повторений заранее не известно
(например,
цикл
до
достижения
требуемой точности результата, цикл до
первого отрицательного элемента и
т.п.). Такой цикл называется циклом
типа пока с прерыванием.
2. Число повторений заранее известно, но
шаг параметра цикла не равен 1. Такой
цикл называется циклом типа пока без
прерывания.
Цикл с предусловием
While лог.выражение do оператор;
Оператор, стоящий после служебного слова do и
называемый телом цикла, будет выполняться
циклически, пока логическое условие
истинно.
Условие выполнения тела цикла проверяется до
начала каждой итерации. Поэтому, если
условие сразу не выполняется, то тело цикла
игнорируется, и управление передается
оператору, стоящему сразу за телом цикла.
Задача:. посчитать числа от 1 до 100 (вывести их на
экран).
program Schitalka;
var i : integer;
begin
i := 1;
while i <= 100 do
begin
writeln (i);
i := i + 1 { Если убрать эту строку – программа зациклится }
end
end.
Задача:. Составить программу для вывода
первых 10 положительных чётных чисел.
program Nabor;
var i : integer;
begin
i := 2;
while i <= 20 do
begin
writeln (i);
i := i + 2 { переход к следующему чётному числу }
end
end.
Сколько раз выполнится оператор while в
следующем фрагменте программы:
s:= 0; k:= 1;
while s <= 7 do
begin
k:= k + 1;
s:= s + k
end;
Сколько раз выполнится оператор while в
следующем фрагменте программы:
k:= 1;
s:= 0;
while k < 5 do
begin
k:= k + 1;
s:= s + k
end;
Задача: Будем повторять вычисления функции
y=1/x до тех пор, пока не введем х=0.
Program funk;
var x:real;
begin
Write(‘Введите значение х=’);
readln(x);
While x<>0 do
{пока х не равен 0 повторяем}
begin
writeln(‘Y=’,1/X:9:4);
write(‘Введите значение х=’);
readln(x);
end;
end.
Цикл с постусловием
Цикл с постусловием предписывает
многократное выполнение одной и той
же последовательности действий с
проверкой истинности условия после
тела цикла
Repeat оператор until лог.выражение;
Repeat оператор until лог.выражение;
 Инструкции цикла repeat выполняются
до тех пор, пока условие, стоящее после
слова until, ложно.
 После слова until надо записывать
условие завершения цикла.
 Цикл repeat – это цикл с постусловием,
т.е. инструкции тела цикла будут
выполнены хотя бы один раз.
Задача: Написать программу, вычисляющую сумму и
среднее
арифметическое
последовательности
положительных чисел, которые вводятся с клавиатуры.
(Для завершения ввода ввести ноль).
Program summa;
Var a,n,S:integer; m:real;
begin
S:=0;
n:=0;
repeat
readln(a);
S:=S+a;
n:=n+1;
until a<=0;
n:=n-1;
m:S/n;
writeln(‘summa chisel=‘,S);
writeln(‘srednee arifmeticheskoe=‘,m);
readln;
end.
Задача: Написать программу, которая определяет максимальное
число из введенной с клавиатуры последовательности
положительных чисел. (Для завершения ввода ввести ноль).
Program maximum;
Var a,m:integer;
Begin
m:=0;
repeat
readln(a);
if a>m then m:=a;
until a<=0;
writeln(‘maximum=‘,m);
readln;
end.
Задача: Написать программу, которая «задумывает»
число в диапазоне от 1 до 10 и предлагает пользователю
угадать число за 5 попыток.
Program zag;
const npop=5;
var comp,igrok,n:integer;
begin
Randomize; {инициализация генератора случайных чисел}
comp:=Random(9)+1; {компьютер задумал число}
writeln(‘vvedite chislo’);
repeat
n:=n+1;
readln(igrok);
until (n=npop) or (comp=igrok);
if comp=igrok then writeln(‘ura!’)
else writeln(‘vi proigrali’);
readln;
end.