ИНФОРМАТИКА И ИКТ В ПОМОЩЬ УЧАЩЕМУСЯ Основы

advertisement
ИНФОРМАТИКА И ИКТ
В ПОМОЩЬ УЧАЩЕМУСЯ
Основы объектно-ориентированного программирования.
СПб СВУ МВД
Компьютер – это устройство не способное мыслить самостоятельно, как
человек. Для того чтобы компьютер мог работать с информацией (передавать,
обрабатывать, хранить) его нужно научить делать все это. Научить значит построить
работу компьютера по инструкции. Такая инструкция и называется программой.
Программа представляет собой набор команд, которые машина должна
выполнить в определенной последовательности. При этом подразумевается, что будет
достигнута та или иная цель, которую планировал человек.
Запустить программу на выполнение может любой человек. Для этого обычно
бывает достаточно нажать какую-нибудь специальную кнопку или открыть
определенный файл. Знаний при этом может быть минимум. Достаточно того, чтобы
человек просто знал, что программа делает и как с ней работать. Такой гражданин
называется пользователем. А вот чтобы написать программу (последовательность
команд) на понятном компьютеру языке, нужно специальное образование, в
результате
которого
получается
так
называемый программист.
Именно
профессиональные программисты умеют писать программы для вычислительных
машин. Эти программы решают очень много разных задач.
Язык - система знаков. Язык ЭВМ (машинный язык) - двоичная знаковая
система. Поэтому, чтобы компьютер мог понять написанную программу, она должна
быть переведена на язык, понятный компьютеру. Этот процесс перевода называется
трансляцией
Существует два различных подхода к трансляции:
– интерпретация (Интерпретатор переводит и выполняет программу строка за
строкой)
– компиляция (Компилятор переводит программу целиком, а затем выполняет
её)
В состав систем программирования входят:
• Текстовый редактор
• Компилятор
• Отладчик
• Справочная система
• Среда выполнения программы
Существует множество языков программирования, на которых написано еще
больше различных программ, мы с вами рассмотрим один из самых
распространенных языков программирования используемых для обучения
программированию – Pascal.
Язык программирования Паскаль был разработан профессором, директором
Института информатики Швейцарской высшей политехнической школы Николаусом
Виртом в 1968-1970 гг. как язык обучения студентов программированию.
Но думать, что Паскаль - язык исключительно для обучения,
было бы неверно. Вот что говорил об этом Н. Вирт (1984 г.):
“Утверждалось, что Паскаль был разработан в качестве языка для
обучения. Хотя это утверждение справедливо, но его
использование при обучении не являлось единственной целью. На
самом деле я не верю в успешность применения во время
обучения таких инструментов и методик, которые нельзя
использовать при решении каких-то практических задач.
Язык программирования Pascal был назван в честь
французского учёного Блеза Паскаля, который еще в 1642 г. изобрел первую
механическую счётную машину. Она представляла собой
систему взаимодействующих колёсиков, каждое из которых
соответствовало одному разряду десятичного числа и
содержало цифры от 0 до 9. Когда колёсико совершало
полный оборот, следующее сдвигалось на одну цифру (это
похоже на принцип ручных счетов). Машина Паскаля умела
только складывать и вычитать.
Символы языка - это элементарные знаки, используемые при составлении
текстов. Алфавит языка - набор таких символов.
Алфавит языка Turbo Pascal 7.0 включает:
• все латинские прописные и строчные буквы
• арабские цифры (0 – 9)
• символы + - * / = < > , . ; : ’ _ ( ) { } и др.
• служебные (зарезервированные) слова
Для записи команд, имен функций, поясняющих терминов Turbo Pascal 7.0
существует набор строго определенных слов, которые называются служебными или
зарезервированными (это английские мнемонические сокращения).
Служебные слова делятся на три группы:
• операторы (READ, WRITELN и др.)
• имена функций (SIN, COS и др.)
• ключевые слова (VAR, BEGIN, END и др.)
При составлении программ мы будем использовать систему программирования Pascal
ABC, общий вид данной программы выглядит вот так:
Любая программа на Паскале имеет определенную структуру:
•
•
•
Заголовок программы
Раздел описаний
Тело программы
Пример создания программы:
PROGRAM имя;
………..
Const; - раздел констант;
Var; - раздел переменных;
BEGIN
оператор 1;
оператор 2;
…..
оператор n-1;
оператор n;
Readln
END.
- заголовок программы
- раздел описаний
- тело программы (тело программы
заключено между begin и end.)
•
Заголовок программы
Первой строкой программы является её заголовок. Он подобно заголовку книги
рассказывает читателю, что это программа, для решения какой задачи она
предназначена.
Заголовок программы не обязательная строка.
Данная строка в программе записывается первой и выглядит именно так:
Program_{имя программы};
Написание строки начинается со слова program, после которого ставится пробел.
Далее :
Вместо {имя программы} пишется имя программы. Написание имени
программы должно быть латинскими буквами без пробелов.
В конце строчки ставится ; данный символ воспринимается программой как
переход на следующую строку.
Пример:
Внешний вид в программе
Запись словами
Program primer;
Begin
Writeln(‘Добрый день’);
end.
(на экране монитора
выводится надпись – добрый
день)
•
Раздел описания
Раздел описания – раздел программы служащий для описания:
• раздел подключаемых библиотек (модулей) – uses
• раздел описания меток; - label
• раздел описания констант; - const
• раздел описания типов; - type
• раздел описания переменных; - var
• раздел описания процедур и функций. – procedure, function
Мы рассмотрим наиболее часто встречаемые разделы. Это разделы подключаемых библиотек, описания констант, описания переменных.
 Раздел описания модулей
- определяется служебным словом USES и содержит имена подключаемых
модулей (библиотек).
Раздел описания модулей должен быть первым среди разделов описаний.
Имена модулей отделяются друг от друга запятыми:
• uses CRT, Graph;
Рассмотрим их более подробно.
1.
Модуль CRT.
Модуль CRT содержит набор процедур и функций управления текстовым выводом на
экран дисплея, звуковым генератором и чтением символов с клавиатуры без
отображения их на экране, а также переменных и констант режимов работы и цветов.
В PascalABC он практически не используется.
В программе записывается так:
Uses_CRT;
Пример:
Запись словами
uses crt;
begin
write(‘Информа
тика');
readln
end.
Внешний вид в программе
2.
Модуль GraphABC.
Модуль GraphABC представляет собой простую графическую библиотеку и
предназначен для создания графических и анимационных программ. Рисование
осуществляется в специальном графическом окне.
В программе записывается так:
Uses_GraphABC;
Пример :
Внешний вид в программе
Запись словами
uses GraphABC;
begin
Circle(100,100,50);
end.

Раздел описания констант.
Раздел описания констант начинается со служебного слова const, после которого
следуют элементы описания вида.
Общий вид записи:
имя константы = значение; или имя константы : тип =
значение;
В программе записывается так:
Const pi=3.14;
Запись словами
const pi:real=3.14;
begin
Write(‘Число пи равно’, pi);
end.

Или
Const pi:real=3.14
Пример:
Внешний вид в программе
Раздел описания переменных.
Каждая встречающаяся в программе переменная должна быть описана.
Описание обязательно должно предшествовать использованию переменной.
Раздел описания переменных начинается зарезервированным словом var, затем
через запятую перечисляются имена переменных и после двоеточия следуют их тип и
точка с запятой.
Общий вид записи: Var все переменные:тип переменной;
В программе записывается так:
Var_a,b,c:integer;
x,y:real;
Запись словами
Var a,b:integer;
c:real;
begin
a:=5;
b:=10;
c:=a/b;
Write(‘Частное =’,
c);
end.
Пример:
Внешний вид в программе
Типы переменных
•
Тело программы
Тело программы начинается со слова BEGIN и заканчивается, словом END.
В программе записывается так:
Begin
………..
End.
Пример:
Запись словами
Внешний вид в программе
Var a,b:integer;
c:real;
begin
a:=5;
b:=10;
c:=a/b;
Write(‘Частно
е =’, c);
end.
•
Операторы
Оператором называют специальную совокупность служебных слов и специальных
знаков выполняющих определенные действия. Операторы отделяются друг от друга
точкой с запятой ";".
Рассмотрим самые распространенные операторы.
1. Оператор вывода информации.
• Для вывода информации на экран в программе Pascal используется
оператор WRITE.
Общий вид записи:
• Write(‘введите переменную’); - выводит надпись на экран - введите
переменную.
• WriteLn(‘введите переменную’); - выводит надпись в новой строчке на
экране - введите переменную.
• Write(‘частное чисел = ’, c); - выводит надпись на экран частное чисел = и
значение данной переменной.
Запись словами
Write(‘введите число’); - выводит
надпись на экран - введите число.
Пример:
Внешний вид в программе
WriteLn(‘введите число’); выводит надпись в новой строчке
на экране - введите число.
Write(‘введите число ’, c); выводит надпись на экран введите
число 5
(Переменная должно быть
описана в разделе описания
переменных)
Оператор ввода.
Для вывода информации с клавиатуры в программе pascal используется
оператор READ.
Общий вид записи:
2.
•
•
•
•
Read(переменная); - вводит значение переменной задаваемое с клавиатуры.
ReadLn(переменная); - вводит значение переменной задаваемое с
клавиатуры, на новой строчке.
ReadLn – задерживает выполнение программы на экране до нажатия любой
клавиши.
Пример:
Запись словами
Read(с); - вводит значение
переменной с задаваемое с
клавиатуры.
ReadLn(с); - вводит значение с
переменной задаваемое с
клавиатуры, на новой строчке.
ReadLn – задерживает
выполнение программы на экране
до нажатия любой клавиши.
Внешний вид в программе
3.
Условный оператор (if)
Условный оператор организует структуру алгоритма с ветвлением.
Происходит проверка логического выражения (условия) в зависимости от
которого выбирается одна из двух альтернативных ветвей алгоритма.
Если значение условия истинно (TRUE), то будет выполняться оператор 1,
записанный после ключевого слова then.
В противном случае будет выполнен оператор 2, следующий за словом else, при
этом оператор 1 пропускается.
IF
Рассмотрим более подробно.
IF_ условие_then
Begin
Оператор 1
End
Else
Begin
Оператор 2
End;
Begin
Var a,b:integer;
c:real;
begin
Writeln('Введите число а');
readln(a);
Writeln('Введите число b');
readln(b);
c:=a-b;
if c>0
then begin
Write('Число а больше b'); end
else begin
Write('Число b больше a'); end;
end.
Услов
ие
Операт
ор 1
Вместо слова условие пишется условие
необходимое для решения задачи. Вместо слова
оператор 1 пишутся операторы необходимые для
решения задачи если условие истина, вместо слова
оператор 2 пишутся операторы необходимые для
решения задачи если условие ложно.
Запись словами
Then
ДА
End
Пример:
Внешний вид в программе
Else
Нет
Begin
Операт
ор 2
End;
4. Циклы
Цикл – это многократное повторение одного и того же действия.
Действия, которые повторяются, называются шагом цикла.
Условие, в течение которого действие выполняется, называется условием выполнения
цикла.
Существуют три вида циклов:
1. Цикл с предусловием – условие выполнения проверяется до шага цикла.
Общии вид:
while
while_<условие>
do
Begi
n
begin
Do
ДА
Условие
<тело цикла>
end;
Цикл с предусловием выполняется до
тех пор, пока условие выполнения не
станет ложным, и продолжается, если
условие истинно.
Запись словами
Program primer;
Var x:integer;
Begin
X:=0;
while X<10
do
begin
X:=x+1;
Writeln(‘привет’);
end;
readln
end.
Тело
цикла
End
Пример:
Внешний вид в программе
2.
Цикл с постусловием – условие выполнения проверяется после шага цикла.
Общии вид:
repeat
repeat
<тело цикла>
Тело цикла
until
<условие выхода>;
until
Цикл с постусловием выполняется
до тех пор, пока условие не станет
истинно, если условие ложно, цикл
продолжается.
Запись словами
Условие
Пример:
Внешний вид в программе
var n,s: integer;
BEGIN
write('Введите целое число: ');
readln(n);
s:=0;
repeat
s:=s+n mod 10;
n:=n div 10;
until n=0;
writeln('Сумма цифр этого
числа равна:',s);
readln;
END.
3.
Цикл с параметром – выполняется определенное заранее известное
количество раз.
Общий вид:
For
<имя переменной>:=<нач. значение> to <кон. значение>
Do <оператор>;
Цикл с параметром используется переменная, называемая параметром цикла.
Перед выполнением цикла параметру устанавливается начальное значение.
После выполнения шага цикла значение параметра увеличивается на единицу.
Цикл продолжается до тех пор пока параметр не достигнет своего конечного
значения.
for
Do ДА
Переменная=
нач. значение
to кон.
Нет
Шаг цикла
Изменение
параметра
Пример:
Запись словами
Внешний вид в программе
var i, n, s : integer;
BEGIN
write('Введите N: ');
readln(n);
s:=0; for i:=1 to n do
s:=s+i;
writeln('Сумма равна: ',s)
END.
4. Массивы
Массив– это составной объект, образованный из элементов (компонент) одного и
того же типа.
Такой тип данных применяется в программировании для обозначения объектов,
аналогичных числовым последовательностям в математике, где сразу целая группа
чисел обозначается одним именем (чаще всего буквой), а для обращения к каждому
отдельному числу данной последовательности используются
различные индексы (номера элементов).
Рассмотрим массив Х1, Х2, …, Хn. Здесь


Х – имя массива;
1, 2,…, n – индексы (порядковые номера) элементов;
 Х7 – седьмой элемент массива Х.
Тип одномерного массива описывается следующим образом:
Type
Имя типа : Array [нижняя граница .. верхняя граница)] Of тип элементов;
Var
Имя переменной: имя типа;
Переменную типа массив можно описать сразу в разделе описания переменных
Var:
Var Имя переменной: array [нижняя граница .. верхняя граница)] Of тип
элементов;
Здесь
•
•
•
•
Array – служебное слово (в переводе с английского означает «массив»);
Of – служебное слово (в переводе с английского означает «из»).
Тип индекса – любой порядковый тип, кроме типов integer, longint.
Тип же самих элементов может быть любым, кроме файлового типа.
Пример:
Запись словами
Program M2;
Var A : Array [1..5]
Of Integer;
I : Integer;
Begin
For I:=1 To 5 Do
Readln(A[I]);
For I:=5 Downto 1 Do
Write(A[I],'___');
End.
Внешний вид в программе
Практическая часть.
Задача 1: Составить программу вычисления площади прямоугольника по
заданной длине и ширине:
Действие
Алгоритм
Программа
Написание программы
Program_задача1;
начинается с заголовка
программы .
За ним следует раздел
Var a,b:integer; s:real;
описаний, в нем описываются
переменные, которые
используются в программе.
Тело программы начинается
Begin
Начало
со слова begin
Вводим с клавиатуры длину и
WriteLn(‘введите
Ввод a,b
ширину прямоугольника.
длинну’); ReadLn(a);
WriteLn(‘введите
ширину’); ReadLn(b);
Вычисляем площадь по
формуле
Выводим значение площади
Тело программы
заканчивается словом end.
S=a*b
Вывод S
Конец
S:=a*b;
WriteLn(‘площадь
прямоугольника = ’, s);
End.
Задача 2. Напишите программу нахождения наибольшего числа из двух
вводимых с клавиатуры.
Действие
Алгоритм
Программа
Написание программы
Program_задача2;
начинается с заголовка
программы .
За ним следует раздел
Var a,b:integer; s:real;
описаний, в нем
описываются переменные,
которые используются в
программе.
Тело программы начинается
Begin
Начало
со слова begin
Вводим с клавиатуры первое
WriteLn(‘введите 1
Ввод a,b
и второе число.
число’); ReadLn(a);
WriteLn(‘введите2
число’); ReadLn(b);
Отнимаем из одного число
второе
Сравним полученный
результат с 0, если он
меньше 0, тогда выводим на
монитор - первое число
меньше, если нет то
выводим на монитор второе меньше
Тело программы
заканчивается словом end.
S:=a-b;
S=a-b
B
T
У
if c>0
then begin Write('Число а
больше b'); end
else begin Write('Число b
больше a'); end;
E
End.
Конец
Задача 3. Напишите программу, которая позволить
последовательно 10 чисел после введенного с клавиатуры.
Действие
Программа
Написание программы начинается с заголовка Program primer;
программы .
За ним следует раздел описаний, в нем
описываются переменные, которые
Var x,a:integer;
используются в программе.
Тело программы начинается со слова begin
Вводим с клавиатуры первое число.
Begin
writeln('a');
readln(a);
Приравниваем переменную и вводимое
число, используем цикл с предусловием,
X:=a;
задаем условия выполнения цикла.
while X<a+10
do
Изменяем переменную на единицу.
begin
Выводим значение переменной.
X:=x+1;
Writeln('
',x);
end;
Тело программы заканчивается, словом end.
readln
end.
выводить
Задача 4. Напишите программу, подсчета суммы цифр числа.
Действие
Программа
Написание программы начинается с заголовка
Program primer;
программы .
За ним следует раздел описаний, в нем
var n,s: integer;
описываются переменные, которые
используются в программе.
Тело программы начинается со слова begin
Вводим с клавиатуры число (желательно более
BEGIN
двухзначного).
write('Введите целое число: ');
readln(n);
Приравниваем первоначальное значение суммы
0.
s:=0;
Используем цикл с постусловием, задаем
условия выполнения цикла.
Выводим значение переменной.
Тело программы заканчивается, словом end.
repeat
s:=s+n mod 10;
n:=n div 10;
until n=0;
writeln('Сумма цифр этого числа
равна:',s);
readln;
END.
Задача 5. Напишите программу, подсчета суммы чисел от 0 до заданного с
клавиатуры.
Действие
Написание программы начинается с заголовка
программы .
За ним следует раздел описаний, в нем
описываются переменные, которые
используются в программе.
Тело программы начинается со слова begin
Вводим с клавиатуры число.
Приравниваем первоначальное значение
суммы 0.
Используем цикл с параметром.
Программа
Program_primer;
var i, n, s : integer;
BEGIN
write('Введите N: ');
readln(n);
s:=0;
for i:=1 to n do
s:=s+i;
Выводим значение переменной.
writeln('Сумма равна: ',s)
END.
Тело программы заканчивается, словом end.
Задача 6. Определите, что будет напечатано в результате работы следующего
фрагмента программы:
var k, s: integer;
begin
s:=0;
k:=1;
while s < 66 do begin
k:=k+3;
s:=s+k;
end;
write(k);
end.
Пояснение.
Цикл while выполняется до тех пор, пока истинно условие s < 66, т. е. переменная
s определяет, сколько раз выполнится цикл.
Значение s есть сумма первых n членов арифметической прогрессии.
прогрессии,
,
— сумма первых n членов прогрессии,
— количество членов.
Цикл прервется, когда
Найдем :
решить это неравенство,
— разность
.
нам
,
необходимо
,
решить
(т. к. k:=k+3). Чтобы
квадратное уравнение
, среди его корней нас интересуют только положительные,
следовательно,
Воспользовавшись методом интервалов, находим, что первое натуральное n, при
котором нарушается условие, есть
.
Подставив известные параметры в
получаем, что
Задача 7. Определите, что будет напечатано в результате работы следующего
фрагмента программы:
Бэйсик
Паскаль
Dim s, k As Integer
s=0
k=0
While k < 30
k=k+3
s=s+k
End While
Console.Write(s)
Var s, k : integer;
BEGIN
s:=0;
k:=0;
while k<30 do
begin
k:=k+3;
s:=s+k;
end;
write(s);
END.
Си
Алгоритмический
{
int s, k;
s = 0;
k = 0;
while (k<30) {
k = k+3;
s = s+k;
}
printf("%d", s);
}
нач
цел s, k
s:=0
k:=0
нц пока k < 30
k:=k+3; s:=s+k
кц
вывод s
кон
Пояснение.
Цикл while выполняется до тех пор, пока истинно условие k < 30, т. е. переменная
k определяет, сколько раз выполнится цикл.
Цикл выполнится
раз ( "+1" потому, что в дроби мы не учитываем
то, что при 18 он тоже выполнится). Заметим, что в s накапливается сумма
арифметической прогрессии, содержащей 11 членов, с разностью 3. Следовательно,
.
Задача 8. Определите, какое число будет напечатано в результате выполнения следующего алгоритма:
Var a,b,t,M,R :integer;
Function F(x:integer):integer;
begin
F:=(5-x)*(x+3);
end;
BEGIN
a:=-20; b:=20;
M:=a; R:=F(a);
for t:=a to b do begin
if (F(t)> R)then begin
M:=t;
R:=F(t);
end;
end;
write(R);
END.
Пояснение.
1. Алгоритм ищет наибольшее значение функции F(t) на интервале от a до b
2.
график этой функции – парабола,
оси которой направлены вниз, поэтому функция имеет наибольшее значение в
вершине.
3. Найдем абсциссу вершины:
как видно, она лежит в
нужном интервале.
4. Теперь, так как в программе сказано "write(R)" найдем ординату (которая и
есть
)
Задача 9. Определите, какое число будет напечатано в результате выполнения
следующего алгоритма (для Вашего удобства алгоритм представлен на четырех
языках):
Бэйсик
Паскаль
DIM A, B, T, M, R AS
INTEGER
A = -20: B = 20
T = A: M = A: R =
F(A)
FOR T = A TO B
IF F(T) < R THEN
var a,b,t,M,R :integer;
Function F(x:
integer):integer;
begin
F := 2*(x-19)*(x-19)
+ 7;
end;
M=T
R = F(T)
ENDIF
NEXT T
PRINT M
FUNCTION F(x)
F = 2*(x-19)*(x19)+7;
END FUNCTION
BEGIN
a := -20; b := 20;
M := a; R := F(a);
for t := a to b do begin
if (F(t)< R) then begin
M := t;
R := F(t);
end;
end;
write(M);
END.
Си
Алгоритмический
#include
int F(int x)
{
return 2*(x-19)*(x-19)+7;
}
void main()
{
int a, b, t, M, R;
a = -20; b = 20;
M = a; R = F(a);
for (t=a; t<=b; t++){
if (F(t) < R) {
M = t; R = F(t);
}
}
printf("%d", M);
}
алг
нач
цел a, b, t, R, M
a := -20; b := 20
M := a; R := F(a)
нц для t от a до b
если F(t)< R
то
M := t; R := F(t)
все
кц
вывод M
кон
алг цел F(цел x)
нач
знач := 2*(x-19)*(x19)+7
кон
Пояснение.
1. Алгоритм ищет наименьшее значение функции F(t) на интервале от a до b
2.
график этой функции –
парабола, оси которой направлены вверх, поэтому функция имеет наименьшее значение в вершине.
3. Найдем абсциссу вершины
как
лежит в нужном интервале.
видно,
она
Задача 10. Ниже записана программа. Получив на вход число x , эта программа
печатает два числа, a и b. Укажите наибольшее из таких чисел x, при вводе которых
алгоритм печатает сначала 3, а потом 0.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
Пояснение.
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10
это равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается
последняя цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет
равно 0; поэтому цикл выполняется столько раз, сколько цифр в десятичной записи
введенного числа, при этом число a столько же раз увеличивается на 1. Следовательно, конечное значение a совпадает с числом цифр в x. Для того, чтобы a стало a = 3, x
должно быть трёхзначным.
Теперь рассмотрим оператор изменения b:
while x>0 do begin
b:=b*(x mod 10);
end;
Оператор mod оставляет только остаток от деления, при делении на 10 это последняя
цифра x; следовательно, число b получается произведением цифр числа x.
Если b =x(1) *x(2) *x(3) = 0, где число в скобках означает номер цифры в числеx, то
хотя бы один из множителей равен нулю, но это означает, что на каком-то шаге x нацело делится на 10. Если это происходит на первом шаге, то x(1) и x(2) могут быть
любыми однозначными числами. Т. к. мы хотим получить наибольшее число, то x =
990.
Задача 11. Дан целочисленный массив из 30 элементов. Элементы массива могут
принимать целые значения от 0 до 100 – баллы учащихся выпускного класса за итоговый тест по информатике. Для получения положительной оценки за тест требовалось
набрать не менее 20 баллов. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит минимальный балл среди учащихся, получивших за тест положительную оценку. Известно, что в классе хотя бы
один учащийся получил за тест положительную оценку. Исходные данные объявлены
так, как показано ниже. Запрещается использовать переменные, не описанные ниже,
но разрешается не использовать часть из них.
Дано
const
N=30;
var
a: array [1..N] of integer;
i, j, min: integer;
begin
for i:=1 to N do readln(a[i]);
…
end.
Решение
const
N=30;
var
a: array [1..N] of integer;
i, j, min: integer;
begin
for i:=1 to N do readln(a[i]);
Пояснение.
min:=100;
for i:=1 to N do
if (a[i]>=20) and (a[i]<=min) then
min:=a[i];
writeln(min);
end.
Задача 12. Опишите на языке программирования алгоритм подсчета максимального
количества подряд идущих элементов, каждый из которых больше предыдущего, в целочисленном массиве длины 30.
Пояснение.
Решение на Паскале.
const N = 30;
var a: array [1..N] of integer;
MaxIncr, NumIncr, i: integer;
begin
MaxIncr: =1;
NumIncr: =1;
for i: =1 to N-1 do
if (a[i] < a [i+1]) then
NumIncr: =NumIncr+1
else begin
if (NumIncr> MaxIncr) then
MaxIncr: =NumIncr;
NumIncr: =1;
end;
if (NumIncr> MaxIncr) then
MaxIncr:=NumIncr;
writeln (MaxIncr);
end.
Задача 13. Дан целочисленный массив из 40 элементов. Элементы массива могут
принимать произвольные значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит сумму элементов
наибольшей возрастающей последовательности подряд идущих элементов массива.
Исходные данные объявлены так, как показано ниже. Запрещается использовать
переменные, не описанные ниже, но разрешается не использовать часть из них.
ПАСКАЛЬ
БЕЙСИК
Const
N = 40;
N = 40
Var a: array [1..N] of integer;
i, l, lmax, s, smax:
integer;
begin
for i : = 1 to N do
readln(a[i]);
...
end.
СИ
DIM A(N) AS INTEGER
DIM I, L, LMAX, S, SMAX AS
INTEGER
FOR I = 1 TO N
INPUT A (I)
NEXT I
...
END
Алгоритмический язык
#include
#define N 40
void main(void)
{int a [N]; int
i, l, lmax, s, smax;
for (i = 0; i < N; i++)
scanf ("%d", & a [ i ] ) ;
...
}
алг
нач
цел N = 40
целтаб а[1:N]
цел i, L, Lmax, S, Smax
нц для i от 1 до N
ввод a[i]
кц
...
кон
Естественный язык
Объявляем массив А из 40 элементов.
Объявляем целочисленные переменные I, L, Lmax, S, Smax.
В цикле от 1 до 40 вводим элементы массива А с 1-го по 40-й.
...
В качестве ответа вам необходимо привести фрагмент программы (или описание
алгоритма на естественном языке), который должен находиться на месте многоточия.
Вы можете записать решение также на другом языке программирования (укажите
название и используемую версию языка программирования) или в виде блок-схемы. В
этом случае вы должны использовать те же самые исходные данные и переменные,
какие были предложены в условии (например, в образце, записанном на естественном
языке).
Пояснение.
ПАСКАЛЬ
lmax : = 0 ;
l := 1;
s := а[1];
for i : = 2 to N do
if a[i] > a[i - 1] then
begin
l := l + 1;
s:=s+a[i];
end
else
begin
if l>lmax, then
begin
lmax:=l;
smax : = s
end;
l := 1;
s := a[i]
end ;
if l > lmax then
smax : = s;
writeln(smax);
БЕЙСИК
LMAX = 0
L=1
S = A (1)
FOR I = 2 TO N
IF A (I) > A (I - 1) THEN
L=L+1
S = S + A (I)
ELSE
IF L > LMAX THEN
LMAX = L
SMAX = S
ENDIF
L=1
S = A (I)
ENDIF
NEXT I
IF L > LMAX THEN
SMAX = S
ENDIF
PRINT SMAX
СИ
Алгоритмический язык
lmax = 0;
Lmax : = 0
1 = 1;
s=a[0];
for(i =1; i < N; i++)
if(a[i] > a[i - 1])
{
l++;
s += a[i];
}
else
{
if(l > lmax)
{
lmax = 1;
smax = s ;
}
L := 1
S := a[i]
нц для i от 2 до N
если a[i] > a[i - 1]
TO
L := L + 1
S := S + a [i ]
иначе
если L > Lmax
TO
Lmax : = L
Smax : = S
все
L := 1
S := a[i}
l = 1;
s=a[i];
}
if(l > lmax)
smax = s;
printf("%d", smax);
все
кц
если L > Lmax
то
Smax : = S
все
вывод Smax
Естественный язык
Записываем в переменную Lmax начальное значение, равное нулю, в переменную L
— начальное значение, равное единице, в переменную S — начальное значение, равное первому элементу массива.
В цикле перебираем все элементы со 2-го до 40-го. Если значение текущего элемента массива оказывается больше значения предыдущего элемента: увеличиваем значение переменной L на 1;
увеличиваем значение переменной S на значение текущего элемента. Иначе: если
значение переменной L больше значения переменной Lmax, то переменной Lmax
присваиваем значение переменной L, а переменной Smax присваиваем значение
переменной S; переменной L присваиваем значение 1; переменной S присваиваем
значение текущего элемента массива.
После окончания цикла, если значение переменной L оказалось больше значения
переменной Lmax, присваиваем переменной Smax значение переменной S. Выводим
значение переменной Smax.
Для самостоятельного решения:
1. Напишите программу нахождения площади круга, основные переменные
задаются с клавиатуры.
2. Напишите программу нахождения площади трапеции, основные переменные
задаются с клавиатуры.
3. Напишите программу нахождения длинны окружности, основные
переменные задаются с клавиатуры.
4. Напишите программу нахождения площади круга, основные переменные
задаются с клавиатуры.
5. Напишите программу решения квадратного уравнения.
6. Напишите программу решения системы уравнений
число х и а, вводится с клавиатуры.
7. Напишите программу вычисления произведение чисел от 1 до 5, используя
различные варианты цикла
8. Напишите программу которая вычисляет сумму кубов от a до b, которые
задаются с клавиатуры, используя оператор с параметром.
9. Определите, что будет напечатано в результате работы следующего
фрагмента программы:
var k, s: integer;
begin
s:=1;
k:=0;
while k < 13 do begin
s:=s+2*k;
k:=k+4;
end;
write(s+k);
end.
10. Определите, что будет напечатано в результате работы следующего
фрагмента программы:
var n, s: integer;
begin
n := 3;
s := 0;
while n <= 7 do begin
s := s + n;
n := n + 1
end;
write(s)
end.
11. Определите, что будет напечатано в результате выполнения программы
(записанной ниже на разных языках программирования):
Бэйсик
Паскаль
DIM N, S AS INTEGER
N=1
S=0
WHILE N <= 20
S = S + 33
N=N+1
WEND
PRINT S
var n, s: integer;
begin
n := 1;
s := 0;
while n <= 20 do
begin
s := s + 33;
n := n + 1
end;
write(s)
end.
Си
Алгоритмический
#include
void main()
{
int n, s;
n = 1;
s = 0;
while (n <= 20)
{
s = s + 33;
n = n + 1;
}
printf("%d", s);
}
алг
нач
цел n, s
n := 1
s := 0
нц пока n <= 20
s := s + 33
n := n + 1
кц
вывод s
кон
12. Определите, какое число будет напечатано в результате выполнения
следующего алгоритма:
Var a,b,t,M,R :integer;
Function F(x:integer):integer;
begin
F:=(x+5)*(1-x);
end;
BEGIN
a:= -5; b:=5;
M:=a; R:=F(a);
for t:=a to b do begin
if (F(t)< R)then begin
M:=t;
R:=F(t);
end;
end;
write(R);
END.
13. Определите, какое число будет напечатано в результате выполнения
следующего алгоритма:
Var a,b,t,M,R :integer;
Function F(x:integer):integer;
begin
F:=3*(x-10)*(x+2)+2;
end;
BEGIN
a:= -20; b:=20;
M:=a; R:=F(a);
for t:=a to b do begin
if (F(t)> R)then begin
M:=t;
R:=F(t);
end;
end;
write(R);
END.
14. Определите, какое число будет напечатано в результате выполнения
следующего алгоритма (для Вашего удобства алгоритм представлен на
четырех языках):
Бэйсик
DIM A, B, T, M, R AS INTEGER
A = -20: B = 20
M = A: R = F(A)
FOR T = A TO B
IF F(T) < R THEN
M=T
R = F(T)
END IF
NEXT T
PRINT M
FUNCTION F(x)
F = 2*(x-9)*(x-7)
END FUNCTION
Паскаль
var a,b,t,M,R :integer;
Function F(x: integer):integer;
begin
F:= 2*(x-9)*(x-7);
end;
BEGIN
a:=-20; b:=20;
M:=a; R:=F(a);
for t:= a to b do begin
if (F(t) < R) then begin
M:=t;
R:=F(t);
end;
end;
write(M);
END.
Си
Алгоритмический
#include
int F(int x)
{
return 2*(x-9)*(x-7);
}
void main()
{
int a, b, t, M, R;
a = -20; b = 20;
M = a; R = F(a);
for (t=a; t<=b; t++){
if ( F(t) < R ) {
M = t; R = F(t);
}
}
printf("%d", M);
}
алг
нач
цел a, b, t, R, M
a:= -20; b:= 20
M:= a; R:= F(a)
нц для t от a до b
если F(t)< R
то
M:= t; R:= F(t)
все
кц
вывод M
кон
алг цел F(цел x)
нач
знач := 2*(x-9)*(x-7)
кон
15. Ниже записана программа. Получив на вход число x , эта программа печатает
два числа, a и b. Укажите наименьшее из таких чисел x, при вводе которых
алгоритм печатает сначала 3, а потом 7.
var x, a, b : integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do begin
a := a + 1;
b := b * (x mod 10);
x := x div 10;
end;
writeln(a); write(b);
end.
16. Ниже записана программа. Получив на вход число x , эта программа печатает
два числа, L и M. Укажите наименьшее из таких чисел x, при вводе которых
алгоритм печатает сначала 3, а потом 7.
var x, L, M: integer;
begin
readln(x);
L:=0; M:=0;
while x > 0 do begin
L:= L + 1;
M:= M + x mod 10;
x:= x div 10;
end;
writeln(L); write(M);
end.
17. Опишите на русском языке или на одном из языков программирования
алгоритм получения из заданного целочисленного массива размером 30 элементов
другого массива, который будет содержать модули значений элементов первого
массива.
18. Опишите на русском языке или на одном из языков программирования
алгоритм подсчета суммы всех отрицательных элементов заданного целочисленного
массива размером 30 элементов. Если отрицательных элементов нет, сообщите об
этом.
19. В массиве хранится информация о годе рождения каждого из 30 человек.
Определить порядковый номер самого старшего по возрасту человека?
20. Дан целочисленный массив из 30 элементов. Элементы массива могут
принимать целые значения от 0 до 1000. Опишите на языке
программирования "Паскаль" алгоритм, позволяющий найти и вывести
сумму элементов массива, не кратных пятнадцати. Гарантируется, что в
исходном массиве есть хотя бы один элемент, значение которого не делится
на пятнадцать. Исходные данные объявлены так как показано ниже.
Запрещается использовать переменные, не описанные ниже, но разрешается
не использовать часть из них.
ПАСКАЛЬ
БЕЙСИК
const
N=30;
var
a: array [1..N] of integer;
i, j, s: integer;
begin
for i:=1 to N do
readln(a[i]);
…
end.
N=30
DIM A(N) AS INTEGER
DIM I, J, S AS INTEGER
FOR I = 1 TO N
INPUT A(I)
NEXT I
…
END
СИ
Естественный язык
#include
#define N 30
void main(void){
int a[N];
int i, j, s;
for (i=0; i
scanf("%d", &a[i]); …}
Объявляем массив A из 30 элементов.
Объявляем целочисленные переменные I,
J, S.
В цикле от 1 до 30 вводим элементы
массива A с 1-го по 30-й.
Контрольные вопросы:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Состав язык Паскаль.
Основные ключевые слова в Паскаль.
Какова структура программы на языке Паскаль?
Как описываются переменные в Паскаль?
Какие стандартные арифметические функции вам известны?
Операторы ввода и вывода данных.
Формы записи оператора if.
Формат записи оператора while.
Формат записи оператора repeat.
Формат записи оператора for.
Какой структурированный тип данных называют массивом?
Что понимается под размерностью массива?
Каким образом массив описывается в языке Паскаль.
Каким образом осуществляется доступ к элементам массива?
Приложение 1
procedure SetPixel(x,y,color: integer);
function GetPixel(x,y): integer;
procedure MoveTo(x,y: integer);
procedure LineTo(x,y: integer);
procedure Line(x1,y1,x2,y2: integer);
procedure Circle(x,y,r: integer);
procedure Ellipse(x1,y1,x2,y2: integer);
procedure Rectangle(x1,y1,x2,y2: integer);
procedure RoundRect(x1,y1,x2,y2,w,h:
integer);
procedure Arc(x,y,r,a1,a2: integer);
procedure Pie(x,y,r,a1,a2: integer);
procedure Chord(x,y,r,a1,a2: integer);
Закрашивает один пиксел с
координатами (x,y) цветом color.
Возвращает текущее значение цвета
для пиксела с координатами (x,y).
Передвигает невидимое перо к точке
с координатами (x,y); эта функция
работает в паре с функцией
LineTo(x,y)
Рисует отрезок от текущего
положения пера до точки (x,y);
координаты пера при этом также
становятся равными (x,y).
Рисует отрезок с началом в точке
(x1,y1) и концом в точке (x2,y2).
Рисует окружность с центром в точке
(x,y) и радиусом r.
Рисует эллипс, заданный своим
описанным прямоугольником с
координатами противоположных
вершин (x1,y1) и (x2,y2).
Рисует прямоугольник, заданный
координатами противоположных
вершин (x1,y1) и (x2,y2).
Рисует прямоугольник со
скругленными краями; (x1,y1) и
(x2,y2) задают пару
противоположных вершин, а w и h –
ширину и высоту эллипса,
используемого для скругления краев.
Рисует дугу окружности с центром в
точке (x,y) и радиусом r, заключенной
между двумя лучами, образующими
углы a1 и a2 с осью OX (a1 и a2 –
вещественные, задаются в градусах и
отсчитываются против часовой
стрелки).
Рисует сектор окружности,
ограниченный дугой (параметры
процедуры имеют тот же смысл, что и
в процедуре Arc).
Рисует фигуру, ограниченную дугой
окружности и отрезком,
соединяющим ее концы (параметры
procedure TextOut(x,y: integer; s: string);
procedure FloodFill(x,y,color: integer);
procedure FillRect(x1,y1,x2,y2: integer);
procedure Polygon(var a; n: integer);
procedure Polyline(var a; n: integer);
Функция
ABS(x)
SQR(x)
SIN(x)
COS(x)
ARCTAN(x)
EXP(x)
EXP10(x)
LN(x)
LOG(x)
SQRT(x)
A DIV B
A MOD B
TRUNC(x)
RANDOM(x)
ROUND(x)
ODD(x)
ORD(x)
CHR(x)
SUCC(x)
процедуры имеют тот же смысл, что и
в процедуре Arc).
Выводит строку s в позицию (x,y)
(точка (x,y) задает верхний левый
угол прямоугольника, который будет
содержать текст из строки s).
Заливает область одного цвета цветом
color, начиная с точки (x,y)
Заливает прямоугольник, заданный
координатами противоположных
вершин (x1,y1) и (x2,y2), цветом
текущей кисти
Строит ломаную по n точкам,
координаты которых заданы в
массиве a элементов типа Point.
Строит замкнутую ломаную по n
точкам, координаты которых заданы в
массиве a элементов типа Point
Приложения 2
Назначение
Вычисление абсолютного значения x: |х|
Вычисление квадрата x: x*x
Вычисление синуса x: sin x
Вычисление косинуса x: cos x
Вычисление арктангенса x: arctg x
Вычисление экспоненты (числа Е) в степени x
Вычисление 10 в степени x
Вычисление натурального логарифма x
Вычисление десятичного логарифма x
Вычисление квадратного корня из x
Вычисление частного при делении А на В с отбрасыванием
остатка
Нахождение остатка от делении А на В
Нахождение целой части x
Псевдослучайное число в интервале [0, x]
Округление значения x в сторону ближайшего целого
Проверяет аргумент на нечетность. Результат TRUE, если
аргумент нечетный, FALSE – если четный.
Возвращает порядковый номер аргумента и, как следствие,
преобразует величину порядкового типа в величину целого
типа.
Определение символа языка Паскаль по его порядковому
номеру
Нахождение элемента, идущего после данного в перечне
допустимых элементов
PRED(x)
FRAC(X)
INT(X)
Pi
EOF(x)
Нахождение элемента, идущего перед данным в перечне
допустимых элементов
Возвращает дробную часть x
Возвращает целую часть x
Значение математической постоянной π
Возвращает TRUE, если файл находится в стоянии “конец
файла”, иначе FALSE, если нет конца файла
Download