ЛАБОРАТОРНАЯ РАБОТА РАБОТА C ЛИНЕЙНЫМИ ПРОГРАММАМИ (1 ВАРИАНТ)

advertisement
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА: РАБОТА C ЛИНЕЙНЫМИ ПРОГРАММАМИ (1 ВАРИАНТ)
ЦЕЛЬ: Научить вводить тексты программ в память ЭВМ, работать с ними,
редактировать их. Познакомиться с операторами присваивания, вывода
WRITE, научиться владеть этими операторами, научиться грамотно
записывать выражения на Паскале.
Программное обеспечение: Pascal (TP или BP) либо Интал.
Аппаратное обеспечение: ЭВМ типа IBM.
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:
Оператор присваивания:
<имя>:=выражение; где <имя>– имя переменной, выражения задают порядок
вычисления значения и состоят из операндов (переменных, констант,
функций), соединенных операциями.
Операции:
Обозначение
Наименование
*
Умножение
/
Деление
Div
Целочисленное деление
Mod
Остаток от деления
+
Сложение
-
Вычитание
Типы объектов с обеих сторон := должны строго совпадать, за исключением
того случая, когда тип переменной REAL, а тип выражения INTEGER..
Оператор вывода
например:
WRITE(<список>) или WRITELN(<список вывода>),
a) WRITE(t); – программа выводит значение переменной t, курсор остается
на этой же строке;
WRITELN(t, s) – программа выводит значение переменной t и s и затем
переводит курсор на новую строку.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
I. Изучить описание лабораторной работы.
II. Загрузить систему программирования Turbo Pascal.
III. Войти в режим редактирования и набрать текст программы.
IV. Запустить программу на трансляцию и выполнение (см. ниже).
При выполнении последнего пункта возможны ошибки как на этапе
трансляции, так и на этапе выполнения. Сообщение компилятора об ошибке
выдается в верхней части окна редактирования. При этом курсор
устанавливается в ту позицию, где возможна ошибка. Если сразу после этого
нажать <F1>, то на экране появляется дополнительная информация об
ошибке. Нажатие любой другой клавиши стирает информацию об ошибке.
При возникновении ошибки необходимо:
а) исправить ошибку;
б) повторить выполнение пункта (IV).
V. Продемонстрировать результаты выполнения работы преподавателю.
VI. Выполнить следующие пункты лабораторной работы и повторить пункты
(III-V)
VI. Оформить отчет по лабораторной работе, защитить и сдать его
преподавателю.
ЗАДАНИЯ I УРОВНЯ:
1. Необходимо нарисовать на экране фигурку. Для выполнения данного
здания можно воспользоваться оператором WRITELN()
Begin
*****
WRITELN(‘
***** ‘);
*******
WRITELN(‘
******* ‘);
WRITELN(‘ * ***** *‘);
* ***** *
*
*
WRITELN(‘ *
*
***
WRITELN(‘
*****
WRITELN(‘
*
***
*‘);
‘);
***** ‘);
*******
WRITELN(‘ ******* ‘);
* ***** *
WRITELN(‘ * ***** * ‘);
WRITELN(‘
*** ‘);
* *
WRITELN(‘
* * ‘);
* *
WRITELN(‘
* * ‘);
***
end.
Ввести программу в память ЭВМ (для этого нажать F10 , войти в пункт меню
'FILE' , выбрать подпункт 'NEW' , нажать клавишу ввода и набрать текст
программы).
Исполнить программу (нажав F10 (можно мышью), пункт ' RUN', подпункт '
RUN' или нажав одновременно Ctrl- F9 ) .
После того как опять появится меню и текст программы, (т.е. программа
выполнена), просмотреть ответы (нажав F10 (можно мышью), пункт DEBUG
, подпункт 'User screen' или нажав клавиши 'Alt-F5').
2. Добавим полоску (**************) в задание 1 , чтобы фигурка стояла
на
ней.
Для
этого
в
программу
добавляем
оператор
WRITELN(‘**************’) c .
3.
Нарисуем на экране стилизованную фигуру собачки. Для
выполнения данного здания также пользуемся оператором
WRITELN():
Begin
**
**
*****
*
***************
WRITELN(‘
**
**‘);
WRITELN(‘ *****
*‘);
WRITELN(‘
***************
*
*
‘);
*
*
WRITELN(‘
*
*‘);
WRITELN(‘
*
* ‘);
end.
3а) И к этой фигурке добавим полоску (**************), чтобы собачка
могла стоять на поверхности.
4. Попробуем объединить фигурки из заданий 1 и 2.
5. Попробуйте вывести на экран компьютера Ваше имя.
ЗАДАНИЯ II УРОВНЯ:
1. Сколько ударов в сутки делают часы с боем? (можно пользоваться
оператором WRITELN(...))
2. Найдите сумму чисел 7, 10, 13, 16, 19, 22, 25, 28 и 31.
3. Наводнение продолжалось ровно сутки. В первый час вода в реке
поднялась на один дюйм, во второй – на 2 дюйма, в третий – на 3
дюйма и т.д. На сколько дюймов прибыла вода в реке за сутки?
4. Изделие весит 89,4 г. Сообразите, сколько тонн весит миллион таких
изделий?
5. Круглое бревно весит 30 кг. Сколько весило бы оно, если бы было
вдвое толще, но вдвое короче?
6. Птицы летят клином: в 1-м ряду —1 птица, во 2-м ряду — 3 птицы, в
3-м ряду — 5 птиц и т.д. Сколько птиц летит в 11 ряду? Сколько всего
птиц летит в 11 рядах?
7. Поменять местами значения целых переменных х и у, используя
дополнительные переменные.
8. Поменять местами значения целых переменных х и у, не используя
дополнительные переменные.
9. Идет К-я секунда суток. Определить, сколько полных часов (h) и
полных минут (m) прошло к этому моменту (например, h=3 и m=40
для k=13257=3*3600+40*60+57). Можно использовать операцию
целочисленного деления c:=a div b;.
10. Написать программу, которая для заданного целого числа А печатает
строку:
А А3 А6
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1. Каковы назначение и возможности системы программирования Turbo
Pascal?
2. Как запустить программу на трансляцию и выполнение?
3. Какие типы переменных использовались в Ваших программах?
4. Верно ли, что в паскаль-программе надо описывать все имеющиеся в ней
переменные?
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА: РАБОТА C ЛИНЕЙНЫМИ ПРОГРАММАМИ
ЦЕЛЬ: Научить вводить тексты программ в память ЭВМ, работать с ними,
редактировать их. Познакомиться с операторами присваивания, ввода
READ, вывода WRITE, научиться владеть этими операторами.
Программное обеспечение: Turbo Pascal (Borland Pascal) либо Интал.
Аппаратное обеспечение: ЭВМ типа IBM.
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:
Линейным называется алгоритм, в котором результат получается путем
однократного выполнения заданной последовательности действий при
любых значениях исходных данных.
Переменная величина – это именованный элемент, который в процессе
выполнения программы может принимать различные значения.
Типы переменных:
Тип
Наименование
Диапазон
значений
допустимых
INTEGER
Целое
-32768…32767
LONGINT
Длинное целое
-2 *109 … 2*109
REAL
Вещественный
10-38 …1038
CHAR
Символьный
Множество
символов
ASCII
Переменные описываются в разделе VAR с указанием типа, например: var a:
integer; b,c: Real; R:char;.
Оператор ввода с клавиатуры READ() или READLN(), например:
а)READ(a, b) –программа ожидает ввода
Курсор остается на этой же строке;
значений переменных a
и b.
б) READLN (a, b) –программа ожидает ввода данных и затем переводит
курсор на новую строку.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
I. Изучить описание лабораторной работы.
II. Войти в режим редактирования и набрать текст программы.
III. Запустить программу на трансляцию и выполнение (см. ниже).
При выполнении последнего пункта возможны ошибки, как на этапе
трансляции, так и на этапе выполнения. Сообщение компилятора об ошибке
выдается в верхней части окна редактирования. При этом курсор
устанавливается в ту позицию, где возможна ошибка. Если сразу после этого
нажать <F1>, то на экране появляется дополнительная информация об
ошибке. Нажатие любой другой клавиши стирает информацию об ошибке.
При возникновении ошибки необходимо:
а) исправить ошибку;
б) повторить выполнение пункта (IV).
V. Выполнить следующие пункты лабораторной работы и повторить пункты
(III-V).
V. Оформить отчет по лабораторной работе, защитить и сдать его
преподавателю.
ЗАДАНИЯ I УРОВНЯ:
1. Даны алгоритм и программа нахождения суммы двух значений:
На Интале:
Программа задание
Описание a,b,S:
Целый
Конец_Описания
a:=5
b:=7
На Паскале
Комментарии:
VAR a,b,S: Integer;
Begin
a:=5;
S:=a+b
b:=7;
Вывод(S)
Конец_Программы
S:=a+b;
WRITELN(‘сумма=’,
S)
{ввод данных с
помощью
операторов
присваивания}
{получение суммы}
{вывод результата}
end.
1а). Ввести программу в память ЭВМ (пункт меню
'FILE' , выбрать
подпункт 'NEW' , нажать клавишу ввода и набрать текст программы).
Исполнить программу (пункт меню 'RUN', подпункт 'RUN' или нажать
одновременно Ctrl+F9). После того как опять появится меню и текст
программы, (т.е. программа выполнена), просмотреть ответы (F10, пункт
DEBUG, подпункт 'User screen' или, что же самое, нажать клавиши 'Alt+F5').
1б). Сохраните программу (пункт меню 'FILE' , выбрать подпункт 'SAVE'
или ‘SAVE AS’и в появившемся окне набрать имя программы (имя не
должно быть длиннее 8 символов)).
2. Заменить в программе знак '+' на знаки '-' ,'*' , '/' . Записать результаты в
тетрадь.
Они верны? Как подправить программу?
А если ввести дробные значения для a и b? Как отреагирует на это
компьютер?
(Нужно указать другой тип данных: Вещественный – Real.
на Интале:
Программа
задание1
Описание a,b,S:
Целый
Конец_Описания
a:=5.5
b:=7.89
на Паскале
VAR a,b,S: real;
Begin
a:=5.5;
b:=7.89;
S:=a+b
Вывод(S)
Конец_Программы
Комментарии:
{ввод данных с
помощью
операторов
присваивания}
{получение
суммы}
S:=a+b;
{отформатированWRITELN(‘сумма=’,S:5:2) ный вывод
результатов}
end.
{цифра 5 указывает на количество позиций, которое
будет занимать данное число на экране, а цифра 2
указывает количество позиций, отводимое под
дробную часть. Эти значения можно устанавливать и
произвольно, лишь бы первое было больше второго.
Проверьте. Что изменяется на экране?).
3. Заменить операторы присваивания а:=5.5; b:=7.89 на оператор ввода с
клавиатуры READLN (a, b). Ввести несколько раз значения переменных а
и b, всякий раз исполняя программу суммирования и записывая ответы.
4. Один из романов Ж. Верна называется "20000 тысяч лье под водой". Если
бы расстояния измерялись в километрах, то как бы звучало название этого
романа? (Одно морское лье равно приблизительно 5,555 километра).
Составить программу решения этой задачи.
5. Составить программу вычисления площади пола и площади боковой
поверхности комнаты длиной а=7м, шириной b= 5м и высотой с=3,5м.
ЗАДАНИЯ II УРОВНЯ
1. Создайте программу, вычисляющую процент выполнения плана по
каждому магазину.
Известны следующие данные:
_________________________________________________________
№ маг
План товарооборота
(усл. ед.)
Фактический товарооборот
(усл. ед.)
_________________________________________________________
1
160
140
2
550
680
3
770
790
_________________________________________________________
Выведите таблицу и результаты вычислений на экран, используя оператор
вывода WRITELN(A:n, B: m), где А,B - выводимые значения переменных; n,
m – количество позиций, которое отводится под переменную на экране
пользователя (если переменные целого типа). Найти суммарный
фактический товарооборот
2. Найти произведение цифр заданного четырехразрядного числа. (Ввод
цифр можно организовать в диалоге).
3. Вычислить площадь и периметр равностороннего треугольника со
стороной а.
4. Вычислить площадь и периметр квадрата со стороной а.
5. Вычислить площадь и длину окружности круга, радиус которого равен
а.
6. Вычислить расстояние между двумя точками с координатами (x1, y1) и
(x2, y2).
7. Целой переменной присвойте значение суммы цифр заданного
трехзначного числа.
8. Написать программу, которая для заданного целого числа А печатает
таблицу:
А
А3 А6
А6 А3 А
9. Дано шестизначное натуральное число. Определить число сотен и
десятков в нем.
10. Вычислить среднее арифметическое и среднее геометрическое трех
заданных чисел.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1.
2.
3.
4.
5.
В чем отличие оператора присваивания a:=5 от оператора read(a)?
При каком из этих способов ввода данных программа имеет более
широкое применение?
Какие типы переменных использовались в Ваших программах?
Если значение переменной равно 40 000, то какого типа будет эта
переменная? Чему равно наибольшее значение для переменных этого
типа?
Если значение переменной равно ‘А’, то какого типа будет эта
переменная? А если значение переменной будет равно ‘4’?
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА: ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ.
ОПЕРАТОР ЦИКЛА FOR. (вариант 1)
ЦЕЛЬ: Познакомить учащихся с операторами цикла, научить их составлять
программы с использованием операторов повторения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ: среда TURBO PASCAL
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ: Оператор FOR используется,
когда известно число повторений в цикле.
Этот оператор обеспечивает повторение цикла, управляемое переменной:
FOR переменная:=начальное значение TO конечное значение DO
оператор;
где переменная -переменная порядкового типа, причем она последовательно
принимает значения от начального до конечного с шагом 1,
либо:
FOR переменная:=начальное значение DOWNTO конечное
значение DO оператор,
где переменная принимает последовательно убывающие значения с шагом -1.
Если необходимо последовательно выполнять несколько операторов в теле
цикла, их следует объединить в составной оператор с помощью операторных
скобок BEGIN...END.
ПОСЛЕДОВАТЕЛЬНОСТЬ ВЫПОЛНЕНИЯ ЗАДАНИЯ:
1.
2.
3.
4.
5.
6.
Изучить необходимые сведения (см. выше).
Изучить задания. По каждому заданию разработать и ввести программу в
память ЭВМ.
Выполнить программу, используя команду Run.
Отладить программу и разобраться в ее работе можно, используя отладчик
ТР (клавиши <F7> или <F8> - программа выполняется по шагам при
каждом нажатии данных клавиш). Продемонстрировать ее работу в этом
режиме преподавателю.
Результат проверить на калькуляторе или вручную.
Оформить отчет, защитить и сдать его преподавателю.
ЗАДАНИЯ I УРОВНЯ:
1. Наводнение продолжалось ровно сутки. В первый час вода в реке
поднялась на 1 дюйм, во второй - на 2, в третий - на 3, и т.д. На сколько
дюймов поднимется уровень воды за сутки?
(Дана программа
вычисления суммы 24 членов ряда: 1+2+3+...+24):
На Интале
На Паскале
Программа Сумма
Описание s,k: Целый
Конец_Описания
s:=0;
var k,s: integer;
begin
s:=0;
for k:= 1 to 24 do
Повторять Для k от 1 до 24
s:=s+k;
s:=s+k
Завершить
writeln('сумма=',s)
Вывод (s)
end.
Конец_Программы
2. Пароход, отойдя от пристани, прошел за первый час 25 верст. Но так как
ветер был попутный, то он ускорял ход в час на 1 версту. На восьмом часу
он шел со скоростью 32 версты. Какое расстояние пройдет он за 8 часов?
3. Составьте программу решения следующей задачи: С первой яблони
сорвали одно яблоко, со второй-2 яблока, с третьей- 3 яблока, с
четвёртой-4 яблока и т.д. и, наконец, с пятнадцатой-15 яблок. Сколько
яблок сорвали со всех 15 яблонь?
4. Вычислите: 99-98+97-96+95-94+....+5-4+3-2+1.
5. Если дома на улице пронумерованы от 1 до 80, то сколько раз в
числах встречается цифра 4?
6. Наловил дед рыбы полный воз. Рыба – крупные лещи. Едет домой и
видит, лисичка свернулась калачиком, лежит на дороге. Дед – с воза,
подошел, а лисичка не шелохнется. Дед решил, что лиса мертвая: «Вот
славная находка! Будет старухе воротник на шубу». Взял он лису положил
на воз, а сам пошел впереди. А лисица улучила время и стала выбрасывать
из воза все по рыбке да по рыбке. Сначала лиса действовала осторожно, а
затем смелее. В первую минуту она выбросила 1 леща, во вторую– 2, в
третью–4 и т.д., через 7 минут она выбросила всю рыбу, и сама потихоньку
удрала. Сколько лещей досталось лисе?
ЗАДАНИЯ II УРОВНЯ
1. Ивана
Александровича
Хлестакова
приглашали
управлять
департаментом. В первый день к нему прислали тысячу курьеров, а в
каждый следующий – в два раза больше, чем в предыдущий. Иван
Александрович согласился, когда к нему прислали больше 30 000
курьеров. На какой день это произошло? (Внимание с типами данных.
Может быть, использовать тип Word или Longint?)
2.
512 рыцарей собрались на турнир,
Чтоб самого достойного узнал волшебный мир,
Они сразились по двое и до исхода дня
Из каждой пары рыцарей один упал с коня.
И если будут рыцари все так же продолжать,
То сколько дней осталось им друг с другом воевать?
3 Обманным путем лиса и волк раздобыли целую кучу рыбы.
Лиса и говорит:
-Давай, волк, делить поровну.
-Давай! Слаб я в математике, дели ты, лиса.
Бросила лиса волку 1 рыбку, а себе 2:
-Вот тебе, волк, одна рыбка, а мне 2 ...
-Не слишком ли мало?!
-Слушай дальше. Тебе три рыбки ...
-Это можно!
-Mне 4, а тебе 5, мне 6, a тебе 7…
И так далее. Последний раз бросила лиса себе 20 штук, и на этом рыба
кончилась. Доволен волк, полагая, что получил рыбы столько, сколько и
лиса. Кто получил больше рыбы и на сколько больше?
4. Однажды умный бедняк попросил у скупого богача приюта на две
недели, причем сказал: ’За это я заплачу тебе в первый день 1 рубль, во
второй – 2, в третий -3 и т.д., но ты будешь мне подавать милостыню: в
первый день 1 копейку, во второй –2, в третий–4 и т.д. увеличивая
милостыню каждый день вдвое’. Богач с радостью согласился. Сколько
барыша принесла эта сделка богачу?
5. Алгоритм Евклида нахождения наибольшего общего делителя (НОД)
неотрицательных целых чисел основан в следующих свойствах этой
величины. Пусть m и n – одновременно неравные нулю целые
неотрицательные числа и пусть m  n. тогда, если n=0, то НОД (n,m)=m, а
если n0, то для чисел m, n и r, где r – остаток от деления m на n,
выполняется равенство НОД(m,n) = НОД(n,r). Например, НОД (15, 6) =
НОД (6, 3) = НОД(3, 0) = 3.
Даны натуральные числа n, m:
а) используя алгоритм Евклида, найти наибольший общий делитель
чисел n и m.
б) найти наименьшее общее кратное n и m. (Как здесь может помочь
алгоритм Евклида?)
в) какой еще способ нахождения НОД (m, n) Вы знаете?
САМОСТОЯТЕЛЬНАЯ РАБОТА
1. Пусть: v1=v2=0; v3=1.5;
Вычислить vi 
i 1
vi 1  vi 2 vi 3 для i=110.
i2  1
2. Даны натуральные числа m и n. Найти такие натуральные p и q, не
имеющие общих делителей, что p/q = m/n.
3. Пусть а0=1; аk=kak-1+1/k, k=1, 2, ...Дано натуральное число n. Получить an.
4. На день рождения к Алле Пугачевой пришли гости. Первый гость
подарил ей 5 роз, а каждый последующий дарил на 5 роз больше. Сколько
певице подарили цветов, если последний гость подарил ей 100 роз?
5. Придумайте свою задачу на повторение действий и решите ее. Это
доставит Вам большое удовольствие (хотя бы придумать, ведь это
творчество).
_______________________________________________
Некоторые подсказки:
1.
Создать новый программный файл:
нажмите f10, установите
подсветку на ''New'' (Новый), нажмите клавишу ''Enter'';
2. Набрать текст программы: можно пользоваться операциями меню
”Edit” для копирования, вырезки и вставки;
3. Записать файл на диск:
нажмите ''F10'', установите подсветку
на ''File'' (файл), нажмите ''Enter'', установите подсветку на
''Save As''(сохранить как), нажмите ''Enter'', наберите на
клавиатуре имя файла, под которым файл будет сохранен на
диске, нажмите ''Enter''; (если файл уже существует на
диске, можно просто нажать “F2”)
4. Запустить программу на выполнение:
5. Просмотр результатов:
нажмите Ctrl/F9;
Нажмите Аlt/F5
6. Распечатать текст программы: включите принтер, вставьте в него
бумагу, нажмите ''F10'', установите подсветку на ''File'',
нажмите ''Enter'', установите подсветку на ''Print'', нажмите
''Enter''
Все эти действия можно выполнять и с помощью мыши.
______________________________________________________________
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1. Каково назначение режима Compile системы Turbo?
2. Какие команды имеются в режиме Compile?
3. В чем отличие линейных программ от циклических?
4. Как программируются циклические алгоритмы с явно заданным числом
повторений цикла?
5. Как программируются циклические алгоритмы с незаданным числом
повторений цикла?
6. Как найти сумму нечетных чисел больших 10 и меньших 100, используя
цикл FOR?
7. В чем проявляется ограниченность цикла FOR?
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА: ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ.
ОПЕРАТОРЫ WHILE, FOR
ЦЕЛЬ: Познакомить учащихся с операторами цикла, научить их составлять
программы с использованием операторов повторения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ: среда TURBO PASCAL или BP
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:
Схема универсального оператора цикла такова:
WHILE логическое выражение DO оператор; (оператор будет
повторяться, пока истинно логическое выражение). Цикл необходимо
составить так, чтобы перед каждым повторением оператора значение
логического выражения вычислялось заново. Если необходимо повторять
несколько операторов, их следует объединить составным оператором
BEGIN...END.
Оператор FOR обеспечивает повторение цикла, управляемое переменной:
FOR переменная:=начальное значение TO конечное значение
DO оператор;
где переменная – переменная порядкового типа, причем она последовательно
принимает значения от начального до конечного с шагом 1.
FOR переменная:=начальное значение DOWNTO
конечное
значение DO оператор;, где переменная принимает последовательно
убывающие значения с шагом -1.
ПОСЛЕДОВАТЕЛЬНОСТЬ ВЫПОЛНЕНИЯ ЗАДАНИЯ:
1.
2.
3.
4.
5.
6.
7.
Изучить необходимые сведения (см. выше).
Изучить задания. По каждому заданию разработать и ввести программу в
память компьютера.
Отладить программу с использованием отладчика ТР (клавиши <F7> или
<F8> - программа выполняется по шагам при каждом нажатии данных
клавиш) и продемонстрировать ее работу в этом режиме преподавателю
(порядок выполнения действий см. ниже).
Выполнить программу с самого начала, используя команду Run.
Произвести расчет по крайней мере при двух различных вариантах
исходных данных , выбранных самостоятельно. Результат проверить на
калькуляторе.
По желанию преподавателя распечатать программы на принтере.
Оформить отчет, защитить и сдать его преподавателю.
ЗАДАНИЯ I УРОВНЯ
1. Дана программа вычисления
1+2+3+...+100:
суммы S
первых 100 членов ряда:
На Интале
Программа сумма
Описание
S, K,n: Целый
Конец_Описания
k:=1
s:=0
Повторять_Пока k<=100
S:=S+k
K:=K+1
Завершить
Вывод(S)
Конец_Программы
на Паскале:
var k,s: integer;
begin
s:=0;
k:=1;
while k<=100 do begin
s:=s+k;
k:=k+1;
end;
writeln('сумма=',s)
end.
ВОПРОС: "исправьте" программу, чтобы цикл:
а) не выполнился ни разу;
б) выполнялся
число раз.
неограниченное
Измените программу так, чтобы она вычисляла n значений этого ряда
(надо ввести новую переменную, указав ее тип – integer (Целый) и с
помощью оператора READ(N) (Ввод(n)) указывать количество членов
ряда.)
3. Составьте программу решения следующей задачи: население города
ежегодно увеличивается на 1/40 наличного состава жителей (сейчас в нем
примерно 240 тыс.). Через сколько лет население города утроится? (тип
переменой "население" –REAL (Вещественный))
4. В 1626 году индейцы продали остров Манхеттен за 20 долларов. Если бы
эти деньги были помещены в банк на текущий счет и ежегодный прирост
составлял бы 4%, какова была бы стоимость капитала в 2003 году?
5. Вы положили деньги (10 000 рублей) в банк под 5%
ежемесячного
прироста. Как выгоднее помещать деньги: под простой процент либо
капитализированный (сложный)?
Вопросы: а) когда сумма вклада достигнет 30 000р.?
2.
б) какой будет сумма вклада после 10 лет?
в) каковы будут ответы на предыдущие вопросы, если, начиная с
3-го года, процент вырос до 10%?
ЗАДАНИЯ II УРОВНЯ
1 Дана последовательность из N натуральных чисел, определяющая рост
учеников в сантиметрах. Определить, построились ли ученики по росту.
2. Числа Фибоначчи определяются как а(0)=1, а(1)=1, а(i)=a(i-1)+a(i-2). Найти
десятое число Фибоначчи.
3. Готовясь к соревнованиям, лыжник в первый день побежал 10 км, затем
каждый день увеличивал расстояние на 10%. Сколько километров
пробежал он за неделю тренировок? На какой день он пробежал больше 15
км?
4. Вычисление
факториала числа f=10! записать с использованием
операторов цикла for, while, Repeat…until.
5. Два мудреца из Багдада Гафар и Чуфар загадали по одному натуральному
числу. Cоставить программу, определяющую, чье число содержит больше
простых делителей. Распечатать эти делители.
6. Два мудреца из Багдада Гафар и Чуфар загадали по одному натуральному
числу. Cоставить программу, определяющую, чье число содержит больше
различных простых делителей. Распечатать эти делители.
7. На старинной карте было зашифровано местонахождение клада. Чтобы
узнать, сколько шагов надо сделать от башни на север, необходимо найти
сумму шести чисел вида 33i, т.е s=33 +36 + 39 + 312 + 315+ 318. (Коротко это
записывается так:
6
3
3i
). Затем отделить 4 младшие цифры, найденное
i 1
число и будет нужным числом шагов.
8. В сказочном магазине «Матматика» продавались игрушки. Цены на них
являются степенями числа 2 – вот такая особенность этого магазина.
Хрюша решил удивить своих друзей Степашу и Каркушу и купить самую
дорогую игрушку, которую можно купить за имеющиеся у него деньги. У
него с собой P рублей. Может ли он выполнить свое желание? Игрушку
какой стоимости он купит?
9. На Киевскую Русь напали многоголовые Змеи-Горынычи. В Киеве в этот
момент был только Илья Муромец. Его “производительность” –3 головы в
час. Достаточно ли одного Ильи, чтобы за сутки очистить землю от
нечисти или надо посылать гонцов за другими богатырями?
10. В соревнованиях итоговая оценка определяется так: самая наибольшая и
самая наименьшая оценки из общей суммы удаляются (если таких оценок
несколько, то удаляется только одна), затем среди оставшихся
подсчитывается среднее арифметическое. Написать программу, которая
позволила бы по 10 оценкам судей автоматически выставлять итоговую
оценку спортсмену.
САМОСТОЯТЕЛЬНАЯ РАБОТА
1.
2.
3.
Подсчитать количество шестизначных «счастливых» билетов (сумма
первых трех цифр равна сумме трех последних). Напечатать все эти
номера (например, 123402, 005122 и т. п.)
Чтобы открыть секретный
сейф, агент 007 решил набирать в
возрастающем порядке все трехзначные числа, в записи которых нет
одинаковых цифр. Составить программу, которая бы печатала все такие
числа. Определить, сколько времени потребуется ему в худшем случае для
вскрытия сейфа, если для набора одного числа он тратит 2с?
Определить, сколько времени потребуется агенту 007 для вскрытия сейфа,
если код– четырехразрядное число. Цифры могут повторяться.
Порядок выполнения (подсказки)
1.
Запустить
программу
Паскаль
Для ОС ‘Windows’:
2.Открыть
старый
файл:
File/Open/''Enter''
3. Набрать
текст
программы
наберите текст программы,
используя пункт меню «Edit».
найти ярлык программы
Из
системной
оболочки:
Установите
либо
через
”Пуск”,
подсветку
на
”Программы” выбрать имя
turbo.exe либо на
программы. Нажать клавишу
bp.exe.
Нажать
мыши либо нажать ''Enter''.
клавишу мыши либо
нажать ''Enter'' на
клавиатуре
4. Записать нажмите ”F2”
файл на диск:
5.Выполнить
программу
нажмите Ctrl/F9
6. Просмотр
результатов
нажмите Аlt/F5
выберите
нужное
имя файла из списка
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1. Каково назначение режима Run системы Turbo?
2. Какие команды имеются в режиме Run?
3. Как записывается и работает оператор FOR?
4. Для организации каких циклов применим оператор FOR?
5. В чем отличие оператора WHILE от оператора REPEAT?
6. Что такое вложенные циклы?
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА:
ПРОГРАММИРОВАНИЕ
АЛГОРИТМОВ. КОМАНДА ВЕТВЛЕНИЯ.
РАЗВЕТВЛЯЮЩИХСЯ
ЦЕЛЬ: Изучить основные операторы и конструкции языка Паскаль для
программирования разветвляющихся алгоритмов. Научиться использовать
оператор IF в программах.
ПО: Turbo Pascal
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:
Условный оператор позволяет проверить некоторое условие и в зависимости
от результатов проверки, выполнить то или иное действие.
На алгоритмическом языке:
на языке Паскаль:
Полная форма команды ветвления:
Если условие
То действие
Иначе действие 2
Конец_Если
IF условие
THEN
оператор 1
ELSE
оператор 2;
Неполная форма команды ветвления.
Если условие
То действие
IF условие
оператор;
THEN
Конец _Если
Команда IF выполняет после слов THEN, ELSE только один оператор.
Если требуются выполнить более чем один оператор, то
операторов заключаем в операторные скобки BEGIN...END.
цепочку
Для получения сложных условий простые условия объединяют с помощью
скобок и операций AND(и), OR(или), NOT(не), например (х>-5) and (x<5)
(простые условия заключаются в скобки и соединяются союзом).
ЗАДАНИЯ I УРОВНЯ
Составьте программы для решения следующих задач. По выбору
преподавателя текст одной из программ введите в память компьютера,
произведите отладку введенной программы и выполните.
1. Дана программа нахождения меньшего из двух чисел:
на алг.языке
на Паскале
Программма МИД
Var a,b, min: real;
Описание
а,b,min:Вещественный
BEGIN
Конец_Описания
Ввод (а,b,’Введите 2 числа’)
Если а>b
То min:=a
READ(a,b);
IF A<B
THEN min: = a
ELSE
Иначе min:= b
Конец_Если
Вывод (min)
writeln(min)
min: = b;
Конец_Программы
END.
Введите программу в память компьютера, исполните ее для значения a=5;
b=7 (когда Вы нажмете клавиши ‘ctrl+f9’ (исполнение программы),
компьютер переключится на черный экран ( экран пользователя). Здесь
Вы вводите значения a и b, указывая, например, 5 и 7 (нажимая клавишу
ввода)). Просмотр ответов–комбинация клавиш ‘Alt-F5’.
2. Найти меньшее из трех, используя следующий алгоритм:
Программа Наименьшее
Описание
a, b, c, минимум: Вещественный
Конец_Описания
Ввод (a, b, c,’Введите 3 числа’)
Если a < b
То минимум : = a
Иначе минимум:= b
Конец_Если
Если с < минимум
То минимум : = с
Конец_Если
Вывод (минимум)
Конец_Программы
3. Выяснить, существует ли треугольник с длинами сторон х, у, z.
(треугольник существует, если длина каждой стороны меньше суммы двух
других сторон).
4. Даны действительные числа а, b,c (a0). Выяснить, имеет ли уравнение
Ах2+Вх+С=0 действительные корни. В этом случае найти корни квадратного
уравнения. Иначе должен выдаваться ответ, что действительных коней нет.
5. Напишите программу, которая по номеру дня недели - целому числу от 1
до 7 - выдает в качестве результата количество занятий в вашей группе в
соответствующий день.
ЗАДАНИЯ II УРОВНЯ
1. Два зайца поспорили, кто из них больше съест морковок за один присест.
Напечатайте рекорд первого зайца, если он больше рекорда второго, и оба
значения, если это не так.
2. Пройдет ли сундук с сокровищами со сторонами а, b, с в иллюминатор
затонувшего корабля диаметра d?
3. Имеется треугольник с координатами (0,0), (5,0), (0,5).Попадет ли точка
А(х,у) внутрь либо на границы этого треугольника? Ответ вывести в
форме «Да» / «Нет»
4. Даны координаты (как целые от 1 до 8) двух полей шахматной доски.
Определить, может ли ферзь за один ход перейти с одного из этих полей
на другое.
5. Разборчивая невеста при выборе жениха руководствуется правилом:
«жених должен быть старше ее, но не намного». По известным
возрастам: невесты – N лет, женихов R1 лет, R2 лет, R3 лет– определить,
которого она выберет– первого второго или третьего.
САМОСТОЯТЕЛЬНАЯ РАБОТА:
Условимся считать поля k,l и m,n – различными и это числа от 1 до 8.
Определить, являются ли поля (k,l) и (m,n) полями одного цвета?
На поле (k,l) стоит ладья. Определить, угрожает ли она полю (m,n)?
На поле (k,l) стоит слон. Определить, угрожает ли он полю (m,n)?
На поле (k,l) стоит ферзь. Определить, угрожает ли он полю (m,n)?
На поле (k,l) стоит конь. Определить, угрожает ли он полю (m,n)?
На поле (k,l) стоит король. Определить, угрожает ли он полю (m,n)?
Даны координаты (как целые от 1 до 8) двух полей шахматной доски.
Определить, может ли ферзь за один ход перейти с одного из этих полей
на другое. Ответ вывести в форме «Да» / «Нет»
8. Даны координаты (как целые от 1 до 8) двух полей шахматной доски.
Определить, может ли ладья за один ход перейти с одного из этих полей
на другое. Ответ вывести в форме «Да». В противном случае найти
координаты (t,s) клетки первого хода, чтобы это можно было сделать за
два хода и вывести сообщение «Нет/(t,s)».
9. У белых на доске остался король, у черных – король и ладья.
Охарактеризовать положение белых с помощью одного из слов «шах»,
«мат», «пат», «обыкновенная позиция».
1.
2.
3.
4.
5.
6.
7.
10.У белых на доске остался король, у черных – король и ферзь.
Охарактеризовать положение белых с помощью одного из слов «шах»,
«мат», «пат», «обыкновенная позиция».
КОНТРОЛЬНЫЕ ВОПРОСЫ И ЗАДАНИЯ:
1. Опишите зависимости между переменными а и х; у и х, которые
определяются следующими сериями команд:
a) Если х>y
То z:= -y*х
б) if f>0 then y=2*y else
if f=0 then y:=abs(y)
Иначе z:=y – х+1
else y:=--1;
Конец_Если
1. Сколько вариантов различных действий есть у команды ветвления в
полной форме? в неполной? а у команды выбора CASE (выбор одного
варианта из нескольких)?
2. Объясните ошибки в следующих записях: а) х=у=1; б) if x>0 or y=4 then
z:=1; else z:=2;.
3. Запишите на Паскале выражение, истинное при выполнении указанного
условия и ложное в противном случае: а) x принадлежит отрезку [0,1]; б)
каждое из чисел x, y, z положительно; в) только одно из чисел x, y, z
положительное; г) хотя бы одно из чисел x, y, z положительно.
4. Нарисуйте на плоскости (x, y) область, в которой и только в которой
истинно указанное выражение: а) x*x>=1; б) x*x<=1.
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА: ПРОГРАММИРОВАНИЕ РАЗВЕТВЛЯЮЩИХСЯ
АЛГОРИТМОВ. ОПЕРАТОР CASE..OF.
ЦЕЛЬ: Изучить основные операторы и конструкции языка Паскаль для
программирования разветвляющихся алгоритмов. Научиться использовать
оператор выбора (варианта) CASE в программах.
ПО: Turbo Pascal
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:
Оператор варианта применяется, когда требуется сделать выбор из
нескольких возможностей. Эта структура позволяет переходить на одну из
ветвей в зависимости от заданного выражения. Оператор выбора заменяет
несколько операторов
развилки (его ещё называют оператором
множественного ветвления):
например, сообщать название сезона по его номеру:
CASE <К-порядковая переменная> of
case n of
<константа 1> :<оператор 1>;
1: writeln('зима ');
<константа 2> :<оператор 2>;
2: writeln('весна ');
. . .
<константа N>:<оператор N>;
[ELSE <оператор>;]
3: writeln(' лето');
4: writeln('осень ');
end {case};
{ветку [ELSE] можно не использовать.}
END {case};
Любая из указанных серий операторов может состоять как из единственного
оператора, так и нескольких.
Повторимся, выражение К может быть любого порядкового типа (например
1..10).
ЗАДАНИЯ I УРОВНЯ
Составьте программы для решения следующих задач. По выбору
преподавателя текст одной из программ введите в память компьютера,
произведите отладку введенной программы и выполните ее.
1. Составить программу, позволяющую получить словесное наименование
дня недели.
на Интале:
на Паскале
Программа оценка
Var x: integer;
Описание х: Целый
A: string;
а: Строковый
Begin
Конец _Описания
Write (‘введите номер дня’);
Ввод (х, 'x=')
Readln(х);
Выбрать_По х
Case х of
1:
а:='понедельник';
1:
a:=‘понедельник’;
2:
а:='вторник';
2:
a:=‘вторник’;
3:
а:='среда';
3:
a:=‘среда’;
4:
а:='четверг';
4:
a:=‘четверг’;
5:
а:='пятница';
5:
a:=‘пятница’;
6:
а:='суббота';
6:
a:=‘суббота‘;
7:
а:='воскресенье';
7:
a:=‘воскресенье’;
Иначе
недели нет';
а:='такого дня
Конец_Выбора
Вывод(а)
else а:='такого дня недели нет';
end;
writeln(a)
end.
Конец
2. Составить программу,
позволяющую получить
словесное наименование
оценок 110 по следующему
алгоритму (на Интале):
Программа оценка
Описание х:Целый
а: Строковый
Конец_Описания
Ввод (х, 'x=')
Напишите программу на
Паскале. Введите программу в
память ЭВМ, исполните ее
Выбрать_По х
несколько раз (когда Вы
нажмете клавиши ‘ctrl+f9’
(исполнение программы),
компьютер переключится на
черный экран (экран
пользователя)). Вы вводите
значение x, например, 5, и
нажимаете клавишу ввода).
Просмотр ответов –
комбинация ‘Alt-F5’.
10: а:='превосходно'
9:
а:='отлично'
8:
а:='очень хорошо'
6 .. 7:
а:='хорошо'
4 .. 5: а:='удовлетворительно'
3:
а:='неудовлетворительно'
2:
а:='плохо'
1:
а:='очень плохо'
Иначе
а:='такой отметки нет'
Конец_Выбора
Вывод(а)
Конец_Программы
3. В старояпонском календаре
был принят двенадцатилетний
цикл. Годы внутри цикла
носили названия животных:
крысы, коровы, тигра, зайца,
дракона, змеи, лошади, овцы,
обезьяны, петуха, собаки,
свиньи. Напишите программу,
которая позволяет ввести
номер года нашей эры и
печатает его название по
старояпонскому календарю.
(1996 г. – начало очередного
цикла).
Идея: поскольку цикл
является двенадцатилетним,
поставим название года в
соответствие остатку от
деления номера этого года на
Var g: integer;
Begin
Write (‘введите год’);
Readln(g);
Case g mod 12 of
0:
Writeln (‘год обезьяны’);
1:
Writeln (‘год петуха’);
2:
Writeln (‘год собаки’);
3:
Writeln (‘год свиньи’);
4:
Writeln (‘год крысы ’);
5:
Writeln (‘год коровы ’);
6:
Writeln (‘год тигра ‘);
7:
Writeln (‘год зайца ’);
12.
Составьте алгоритм на Интале.
8:
Writeln (‘год дракона ’);
9:
Writeln (‘год змеи’);
10: Writeln (‘год лошади’);
11: Writeln (‘год овцы’);
end;
end.
4. Напишите программу, которая по номеру дня недели - целому числу от 1
до 7 - выдает в качестве результата количество занятий в вашей группе в
соответствующий день.
5. Определить знак заданного целого числа. Ответом должно быть «+», «-», «0».
ЗАДАНИЯ II УРОВНЯ
1. Составить программу ввода буквы или цифры, или спецзнака.
Выводить сообщение типа «Это цифра …» или «Это буква …», «Это
спецзнак …». К сообщению добавлять саму цифру, букву или
спецзнак.
2. Ввести букву русскую или латинскую и вывести сообщение, какая
это буква: русская, латинская, прописная, строчная.
3. По заданному номеру месяца вывести название следующего месяца.
4. По заданному номеру месяца, дате и году дня недели определить дату
следующего дня.
5. В старояпонском календаре был принят 60-летний цикл, состоящий из
пяти 12-летних подциклов. Подциклы обозначались названиями
цвета: зеленый, красный, желтый, белый и черный. Годы внутри
подцикла носили названия животных: крысы, коровы, тигра, зайца,
дракона, змеи, лошади, овцы, обезьяны, петуха, собаки, свиньи.
Написать программу, которая позволяет ввести номер года нашей эры
и печатает его название по старояпонскому календарю. (1984 г. – год
зеленой крысы– начало очередного цикла).
САМОСТОЯТЕЛЬНАЯ РАБОТА:
6. Что будет напечатано в результате выполнения операторов
К:=40; case k mod 4 of
0: writeln(‘k=4M’);
1: writeln(‘k=4M+1’);
2: writeln(‘k=4M+2’);
3: writeln(‘k=4M+3’);
end;
7. В зависимости от стажа работы педагогам введена надбавка в размере:
для работающих от 5 до 10 лет–10%; для работающих от 10 до 15
лет–15%; для работающих свыше 15 лет–20%. Составьте программу,
которая по заданному стажу работы определит размер надбавки в
процентах.
8. Дан текст, содержащий только буквы А, В, С и заканчивающийся точкой.
Подсчитать количество вхождений каждой буквы в текст.
КОНТРОЛЬНЫЕ ВОПРОСЫ И ЗАДАНИЯ:
5. Сколько вариантов различных действий есть у оператора выбора (CASE)?
6. Что произойдет, если значение порядковой переменной К не совпадет ни с
одной из меток?
7. Когда возникает необходимость организации развилки?
8. Выражение какого типа может выступать в качестве условия при
организации развилки?
Какие значения принимают такие выражения?
9. Записать примеры 1-3 первого уровня c помощью условного оператора.
Сколько развилок понадобилось в каждом из случаев?
10.В каком из случаев целесообразно использовать оператор выбора?
11.Приведите пример оператора выбора, где выражение– K–селектор выбора
имеет перечислимый тип.
ЛАБОРАТОРНАЯ РАБОТА № (вариант)
ТЕМА: ПРОГРАММИРОВАНИЕ РАЗВЕТВЛЯЮЩИХСЯ
АЛГОРИТМОВ. УСЛОВНЫЙ ОПЕРАТОР IF, ОПЕРАТОР ВЫБОРА
CASE…OF.
ЦЕЛЬ: Изучить основные операторы и конструкции языка Паскаль для
программирования разветвляющихся алгоритмов. Научиться использовать
операторы IF, CASE в программах.
ПО: Turbo Pascal
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:
На алгоритмическом языке:
на языке Паскаль:
Полная форма команды ветвления:
Если условие
IF условие
То действие
Иначе действие 2
THEN оператор 1
ELSE
оператор 2
Конец_Если
Неполная форма команды ветвления.
Если условие
То действие
IF
условие
оператор;
THEN
Конец _Если
Команда IF выполняет после слов THEN, ELSE только один оператор.
Если требуются выполнить более чем один оператор, то
операторов заключаем в операторные скобки BEGIN...END.
цепочку
Для получения сложных условий простые условия объединяют с помощью
скобок и операций AND(и), OR(или), NOT(не), например (х>-5) and (x<5).
Оператор варианта применяется, когда требуется сделать выбор из
нескольких возможностей:
например, сообщать название квартала по его номеру:
CASE <порядковая переменная> of
case n of
<константа 1>:<оператор 1>;
1: writeln('1 квартал');
<константа 2>:<оператор 2>;
2: writeln('2 квартал');
3: writeln('3 квартал');
. . .
<константа N>:<оператор N>;
[ELSE <оператор>;]
4: writeln(‘4 квартал');
end {case};
{ветку [ELSE] можно не использовать}
END {case};
ЗАДАНИЯ I УРОВНЯ
Составьте программы для решения следующих задач. По выбору
преподавателя текст одной из программ введите в память компьютера,
произведите отладку введенной программы и выполните ее.
1. Дана программа нахождения большего из двух чисел:
на алг.языке
На Паскале
Программма БИД
Var a,b, max: real;
Описание
BEGIN
а,b,max:Вещественный
READ(a,b);
Ввод (а,b,’Введите 2 числа’)
IF A>B
Если а>b
THEN max: = a
То max:=a
ELSE max: = b;
Иначе max:= b
Конец_Если
writeln(max)
Вывод (max)
END.
Конец_Программы
Введите программу в память ЭВМ, исполните ее (см. лаб. работу №1)
для значения a=15; b=7 (когда вы нажмете клавиши ‘ctrl+f9’ (исполнение
программы), компьютер
переключится
на
черный экран ( экран
пользователя). Здесь вы введете значения a и b). Просмотр результата–
комбинация клавиш ‘Alt-F5’.
2 . Найдите меньшее из двух, для чего знак '>' в решении задачи 1 надо
изменить на ...
3. Найти большее из трех, использовав следующий алгоритм:
Алгоритм Наибольшее
a, b, c, мах: Вещественный
Ввод (a, b, c,’Введите 3 числа’)
Если a > b
То мах : = a
Иначе мах:= b
Конец_Если
Если с > мах
То мах: = с
Конец_Если
Вывод (мах)
Конец_Программы
4.
Составить программу, позволяющую получить словесное наименование
оценок 110 по следующему алгоритму (на Интале):
Программа оценка
Описание х:Целый
а: Строковый
Конец_Описания
Ввод (х, 'x=')
Выбрать_По х
10: а:='превосходно'
9:
а:='отлично'
6 .. 7:
а:='хорошо'
4 .. 5: а:='удовлетворительно'
3:
а:='неудовлетворительно'
2:
а:='плохо'
1:
а:='очень плохо'
Иначе
а:='такой отметки нет'
Конец_Выбора
8:
а:='очень хорошо'
Вывод(а)
Конец_Программы
5. Напишите программу, которая по номеру дня недели - целому числу от 1
до 7 - выдает в качестве результата количество занятий в вашей группе в
соответствующий день.
ЗАДАНИЯ II УРОВНЯ
1. Опишите зависимости между переменными а и х; у и х, которые
устанавливаются следующими сериями команд:
a) Если х>=0
б) if f>0 then y=1 else
То у:= х
Иначе у:= - х
if f=0 then y:=0
else y:=-1;
Конец_Если
2. Пройдет ли прямоугольная открытка со сторонами а см, b см в конверт со
сторонами x см, y см?
3. Меньшее из двух чисел заменить их полусуммой, большее - их
удвоенным произведением.
4. Даны координаты (как целые от 1 до 8) двух полей шахматной доски.
Определить, может ли конь за один ход перейти с одного из этих полей
на другое.
5. Найти корни квадратного уравнения Ах2+Вх+С=0.
САМОСТОЯТЕЛЬНАЯ РАБОТА:
 Принадлежит ли точка с координатами (х,у) кольцу с радиусами R1 и
R2?
 В зависимости от стажа работы на предприятии введена надбавка в
размере: для работающих от 5 до 10 лет–5%, для работающих от 10 до
15 лет–10%, для работающих от 15 до 20 лет–15%, для работающих
свыше 20 лет–20%. Составьте программу, которая по заданному стажу
работы определит размер надбавки в процентах.
КОНТРОЛЬНЫЕ ВОПРОСЫ И ЗАДАНИЯ:
1.
Сколько вариантов различных действий есть у команды ветвления в
полной форме? в неполной? а у команды выбора (CASE)?
2.
Объясните ошибки в следующих записях: а) 1 and 0; б) x>0 or y=4.
3.
Запишите на Паскале выражение, истинное при выполнении
указанного условия и ложное в противном случае: а) x принадлежит отрезку
[0,1]; б) каждое из чисел x, y, z положительно; в) только одно из чисел x, y, z
положительное; г) хотя бы одно из чисел x, y, z положительно.
4.
Нарисуйте на плоскости (x, y) область, в которой и только в которой
истинно указанное выражение: а) abs(x)>=1; б) abs(y)>=1; в) abs(x)<=1;
г)abs(y)<=1.
5.
Могут ли в полной развилке не выполниться операторы ни по одной из
ветвей? Выполниться по обеим ветвям?
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА: ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ МАССИВОВ.
ЦЕЛЬ: Познакомить учащихся с массивами, научить вводить и выводить,
обрабатывать данные, занесенные в массив, т.е. усвоить правила работы с
переменными типа массив языка программирования Паскаль.
ПО:TURBO PASCAL.
ТЕОРИЯ: Под массивом понимается упорядоченная последовательность
конечного числа данных одного типа, объединенных под общим именем.
Имена массивов образуются так же, как и имена простых переменных.
Одномерные массивы, т.е. наборы однотипных данных, можно описать
следующим образом:
var имя массива : array [размер] of тип ;
Например:
На Интале
На Паскале
а:Массив[6]
Целый
a:array [1..6]
integer;
Комментарии
of в массиве a – 6
элементов целого
типа
b:Массив[10]
Символьный
b: array[1..10] of в массиве b – 10
char;
элементов
символьного типа
А) Вводить данные в массив можно следующим образом, например: CONST
f:array[1..10] of integer=(1,2,3,4,0,6,8,10,-5,6); {в массив из 10 элементов
вводятся числа, указываемые в скобках}
Б) Вводить, выводить данные в массив и из массива, обрабатывать данные
удобно с помощью циклов, например: for i:=1 to n do read(f[i]);
{один из
способов ввода данных в одномерный массив).};
В) for i:=1 to n do write(f[i],’ ‘);
{вывод данных из одномерного массива).}
Итак, а[i]– значение элемента в массиве А, i–порядковый номер элемента
(запомните это).
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
1. Изучить описание лабораторной работы
2. Войти в режим редактирования и набрать текст программы (см. пункт 1
задания).
3. Запустить программу на трансляцию и выполнение (ctrl-<F9>).
4. Эту же программу обязательно выполнить по шагам с использованием
Турбо - отладчика (при выполнении очередного шага нажимать клавиши
<F7> или <F8>). В окно Watch занести контролируемые данные и
проследить за изменением их значений при выполнении программы.
(Добавлять
переменные
в
окно
Watch
можно,
нажав
последовательно:<F10>, выбрав пункты<Debugg> и <Add watch> и далее
указав нужные вам переменные. Окна переключать можно с помощью
клавиши <F6>.)
5. Проверить работоспособность программы на других исходных данных.
6. Составить программы для других пунктов задания
7. Оформить отчет по лабораторной работе, защитить и сдать его
преподавателю.
ЗАДАНИЯ I УРОВНЯ:
1 Дана программа нахождения суммы 6 элементов массива:
На Интале
На Паскале
Программа summa
const a = array На Интале элементы
[1..6] of
последовательности
вводятся
integer = (5,присваиванием
1,7,13,-8,21)
(можно с помощью
цикла), на Паскале –
var i ,s: integer;
можно вводить,
begin
используя раздел
описания const.
s:=0;
Описание
A:Массив[6] Целый
i, s:Целый
Конец_Описания
s:=0;
a[1]:=5
a[2]:=-1
a[3]:=7
a[4]:=13
a[5]:=-8
a[6]:=21
Повторять
Комментарии
for i:= 1 do 6 В цикле меняется i–
номер элемента
do
массива,
s:=
одновременно
s+a[i];
находим s –сумму
элементов
writeln ( s )
последовательности.
end.
Полученное значение
выводим на экран.
_Для i От 1 До 6
s:=s+A[i]
Завершить
Вывод(s)
Конец_Программы
а) изменить программу так, чтобы она находила среднее арифметическое
чисел, входящих в массив.
б) изменить программу так, чтобы она находила сумму N элементов
массива (N не должно превышать количества элементов, заявленных в
разделе CONST). N вводить с помощью оператора readln(N).
2 Найти сумму положительных элементов массива, добавив структуру :
Если а [i ] >0
то S:= S+а [i ]
if а[ i ] > 0 then S:= S+а
[i ]
Конец_Если
3. В массиве из N элементов найти количество нулевых элементов массива.
4 В массиве из N элементов найти количество нулевых элементов массива,
сумму отрицательных и произведение положительных элементов массива.
5 Юноши выпускного класса решили заказать костюмы для выпускного
бала. Они должны принести в ателье таблицу с указанием роста каждого.
Для ателье эта работа будет выгодной, если эти данные лежат в пределах от
160 до 180см. Вывести сообщение, выгодна ли эта работа для ателье.
ЗАДАЧИ II УРОВНЯ
 Крокодил Гена решил выиграть в лотерею автомобиль. Для этого он
накупил N лотерейных билетов. Чебурашка попросил поделиться с ним,
т.к. тоже хотел выиграть что-нибудь, а деньги, как всегда, забыл в
телефонной будке. Гена отобрал себе те билеты, номера на которых
являлись степенью сегодняшнего числа. Напечатайте номера лотерейных
билетов, доставшихся Чебурашке.
 На Киевскую Русь напали многоголовые Змеи-Горынычи. В Киеве в этот
момент был только Илья Муромец. Его “производительность” –3 головы в
час. Достаточно ли одного Ильи, чтобы за сутки очистить землю от
нечисти или надо посылать гонцов за другими богатырями?
САМОСТОЯТЕЛЬНАЯ РАБОТА:
 Составьте программу на языке Паскаль для выполнения следующих
расчетов
Фамилия
Начислено Удержано К выдаче
И.О.
...
...
...
...
Итого
б). Выполните расчеты по введенной программе со следующими данными:
Фамилия И. О. | Начислено | Удержано |
Вялков М. П.
135000
15200
Котов Е. И.
178000
23200
Борова А. И.
141200
18700
Сатяева М. Н.
165500
18900
Так как величины, указываемые в задании, превышают предельное значение
величин типа INTEGER (32768), то необходимо использовать тип REAL
либо LONGINT.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1. Как описывается массив?
2. Какова размерность массива с[1..23] of real?
3. Как вводить данные в массив?
4. Как выводить данные из массива?
5. Почему удобно пользоваться циклами при работе с массивами?
6. Ване поручили найти величину среднего роста учеников его группы.
Некто решил помочь Ване. Он составил такой алгоритм:
Var a: array [1..10]; sr:real , i:integer;
begin sr:=0;
for i:=1 to 10 do
sr:= sr+а[i]/10;
writeln(sr);
end.
Он помог Ване? Составьте и Вы свою программу.
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА: ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ МАССИВОВ.
ПОИСК НАИБОЛЬШЕГО (НАИМЕНЬШЕГО) ЭЛЕМЕНТА В
МАССИВЕ.
ЦЕЛЬ: Закрепить умение учащихся работать с массивами. Овладевать
навыками поиска нужного элемента в массиве.
ПО:TURBO PASCAL.
ТЕОРИЯ:
Для поиска наибольшего элемента последовательности можно применить
следующий метод решения: в некоторой переменной М запоминаем первое
число. Остальные элементы последовательности сравниваем с числом,
хранящимся в М. Записываем в M большее из этих чисел (т.е. сохраняем в M
прежнее число - если оно больше, - либо записываем вместо него
следующее).
Повторяем операцию сравнения до тех пор, пока не дойдем до конца данной
последовательности (последовательный перебор).
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
1. Изучить описание лабораторной работы
2. Войти в режим редактирования и набрать текст программы.
3. Запустить программу на трансляцию и выполнение (<Ctrl+F9>)
(выполнение по шагам –клавиши <F7> или <F8>. Ввод данных для
выполнения программы по шагам: <Ctrl+F7>). Просмотр результатов:
<Alt+F5>.
1 Проверить работоспособность программы на других исходных данных.
2 Оформить отчет по лабораторной работе, защитить и сдать его
преподавателю.
ЗАДАНИЯ I УРОВНЯ:
1. Имеется 6 (1000) пронумерованных слитков золота. Вам можно
выбрать самый тяжелый. Как Вы будете действовать?
(Cоставить программу нахождения наибольшего из 6 (1000) элементов
последовательности):
На Интале
На Паскале
Программа
const n=6;
Комментарии
Описание
a: array[1..n] of
integer =
A:Массив[6] Целый
(5,1,7,13,8,21);
i, m:Целый
var i ,m : integer;
Конец_Описания
a[1]:=5
a[2]:=1
a[3]:=7
a[4]:=13
a[5]:=8
a[6]:=21
begin
m:=a[1]
m:=a[1];
Повторять_
Для i от 2 до 6
Если a[i]>m
то
m:=a[i]
Конец_Если
Завершить
Вывод(m)
Конец_Программы
В переменной m
запоминаем первое
число.
Остальные элементы
последовательности
сравниваем с числом,
хранящимся в m.
Записываем в m
большее из этих чисел
(т.е. сохраняем в m
прежнее число - если
оно больше, - либо
записываем вместо
него следующее).
Повторяем операцию
for i:= 2 do n do
сравнения до тех пор,
пока не дойдем до
if a[i]>m
конца данной
then m:=a[i]; последовательности.
writeln ('max=', m)
end.
а) Тут как тут объявился черт, который подменил слитки на булыжники, а
выбирать необходимо, такова иногда жизнь. Как бы Вы сейчас действовали?
(можно поменять знак '... ' на '...').
2. Действия черта были замечены и обманные слитки помечены знаком “-“,
а настоящие – знаком ”+”. Вам нужно сделать выбор среди слитков,
помеченных знаком ”+”(«-»). (Найти наибольшее из положительных /
(отрицательных) элементов массива). Можно добавить структуру выбора:
Если а [i ] >0 и a[i]> max
То max:=a[i]
if (а[ i ] > 0) and (max<a[i]) then max:= а[i ]
Конец_Если
Для отрицательных элементов эта структура будет записываться …
3. Вы по-прежнему выбираете один из пронумерованных слитков. Но теперь
Вы должны принести на финиш не только самый тяжелый слиток, но и
записать его номер. (В массиве из N элементов найти наименьший из
элементов массива и его порядковый номер. Необходимо ввести
дополнительную переменную k, дать ей начальное значение, равное 1, а в
цикле, как только найдется элемент, превышающий max, запомнить его
значение в переменной мах и одновременно в переменной k запомнить
значение переменной i, т.е. порядковый номер наименьшей
на момент
просмотра величины).
4. Интересно, а сколько слитков наибольшего веса есть в наборе? (В массиве
из N элементов найти количество наибольших элементов массива (сколько
циклов в Вашей программе?).)
5. Вам необходимо выбрать теперь уже два слитка: самый тяжелый и самый
легкий. (В массиве из N элементов найти наибольший и наименьший из
элементов массива.) Как бы сделать так, чтобы выполнить задачу за один
проход?
6. Придумайте свои занимательные задачи.
ЗАДАЧИ II УРОВНЯ
1. У жильцов дома изменились обстоятельства и они затеяли переезд. В
частности, жильцы квартиры с наибольшей площадью хотят поменяться
с жильцами квартиры с наименьшей площадью. Составьте алгоритм
(программу) такого обмена.
2. Дана последовательность из 100 различных целых чисел. Найти сумму
чисел этой последовательности, расположенных между максимальным и
минимальным числами (в сумму можно включить и сами эти два числа).
3. В ЭВМ поступают результаты N участников соревнований по плаванию.
Выдать на печать результаты трех лучших участников (Если результаты
нескольких участников, например, претендующих на первое место,
одинаковы, то выдавать на печать только одно значение).
4. В ЭВМ поступают фамилии и результаты N участников соревнований по
плаванию и их фамилии. Выдать на печать результаты трех лучших
участников и их фамилии.
Считать, что результаты регистрирует
фотофиниш и результаты спортсменов различны.
5. В ЭВМ поступают результаты N участников соревнований и фамилии
спортсменов. Выдавать на печать лучший результат после выступления
очередного участника. После окончания соревнования напечатать
итоговое сообщение о победителе.
6. В соревнованиях
по фигурному катанию выступление каждого
спортсмена независимо оценивается несколькими судьями, а затем из
набора оценок удаляются наиболее высокая и наиболее низкая. Вывести
на печать новое распределение оценок данного спортсмена.
7. Дано некое число. Выбросить из него наибольшую и наименьшую цифру.
Если наиболее высокая цифра не одна, выбросить их все, аналогично
поступить с наименьшей цифрой.
8. В соревнованиях
по фигурному катанию выступление каждого
спортсмена независимо оценивается несколькими судьями, а затем из
набора оценок удаляются наиболее высокая и наиболее низкая, а для
оставшихся оценок вычисляется среднее арифметическое, которое и идет
в зачет спортсмену. Если наиболее высокую оценку выставило несколько
судей, то удаляется только одна такая оценка; аналогично поступают с
наиболее низкими оценками. Определить оценку, которая пойдет в зачет
спортсмену (два знака после запятой).
9. В соревнованиях по фигурному катанию участвуют N спортсменов.
Выступление каждого спортсмена независимо оценивается несколькими
судьями, а затем из набора оценок удаляются наиболее высокая и
наиболее низкая, а для оставшихся оценок
вычисляется среднее
арифметическое, которое и идет в зачет спортсмену. Если наиболее
высокую оценку выставило несколько судей, то удаляется только одна
такая оценка; аналогично поступают с наиболее низкими оценками.
Определить оценку, которая пойдет в зачет каждому спортсмену.
10.В соревнованиях по фигурному катанию участвуют N спортсменов.
Выступление каждого спортсмена независимо оценивается несколькими
судьями, а затем из набора оценок удаляются наиболее высокая и
наиболее низкая, а для оставшихся оценок
вычисляется среднее
арифметическое, которое и идет в зачет спортсмену. Если наиболее
высокую оценку выставило несколько судей, то удаляется только одна
такая оценка; аналогично поступают с наиболее низкими оценками.
Определить оценку, которая пойдет в зачет каждому спортсмену после
первого дня соревнований. Вывести список спортсменов для второго дня
соревнований вместе с полученными очками (начинают катание
фигуристы, получившие наименьшее количество баллов).
11.У прилавка в магазине выстроилась очередь из N покупателей. Известно
время обслуживания продавцом каждого покупателя. Определить время
пребывания каждого покупателя в очереди. Указать номер покупателя, для
обслуживания которого продавцу понадобилось меньше всего времени.
САМОСТОЯТЕЛЬНАЯ РАБОТА:
1. В сказочном магазине «Матматика» цены на игрушки были простыми
числами.(Всего N игрушек) Хрюша решил удивить своих друзей
Степашу и Каркушу и купить самую дорогую игрушку. У него с собой
P рублей. Может ли он выполнить свое желание? Если нет, то какой
стоимости игрушку он может купить?
2. Поменять местами наибольший элемент с последним элементом
массива, а наименьший элемент - с первым элементом массива.
ВОПРОСЫ ДЛЯ ЗАКРЕПЛЕНИЯ:
1. Сколько циклов нужно для поиска наибольшего элемента в наборе
однотипных элементов?
2. Сколько циклов нужно для поиска количества наибольших элементов?
3. Известны цены на один и тот же товар в нескольких магазинах.
Определите, в каком магазине товар можно купить дешевле всего?
Приведите формализованное описание условия.
4. Великан Гигабайт поймал семь малышей - семь братьев Чипов. Желая
повеселиться, великан заявил, указывая на рычажные весы без гирь: "Если
вы найдете способ, как найти самого легкого из семи братьев за шесть
взвешиваний, я отпущу его?" Как это сделать?
5. Если братья найдут шесть способов поиска самого легкого из братьев,
великан обещал отпустить всех. Вы поможете братьям?
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА:
ПРОГРАММИРОВАНИЕ
ДВУМЕРНЫХ МАССИВОВ.
С
ИСПОЛЬЗОВАНИЕМ
ЦЕЛЬ: Познакомить учащихся с массивами, научить вводить и выводить,
обрабатывать данные, занесенные в массив, т.е. усвоить правила работы с
переменными типа массив языка программирования Паскаль.
ПО:TURBO PASCAL.
ТЕОРИЯ: Под массивом
понимается
упорядоченная совокупность
(последовательность, набор) конечного числа данных одного типа,
объединенных под общим именем. Имена массивов образуются так же, как и
имена простых переменных. Двумерные массивы
можно описать
следующим образом:
var имя массива ; array [размер] of тип, где в "размере" указывается на
первом месте количество строк, а на втором месте – количество столбцов;
Например: var f: array[1..n,1..m] of real; {- массив, состоящий из n строк и m
столбцов и в нем -n*m элементов вещественного типа}.
a:array [1..10,1..5] of integer {-массив, состоящий из 10 строк и 5
столбцов и в нем -10*5 элементов целого типа}.
Вводить, выводить данные в массив и из массива, обрабатывать данные
удобно с помощью циклов, например:
один из способов ввода данных в вывод данных
массив
(таблицей)
for i:=1 to n do
из
массива
for i:=1 to n do begin
for j:=1 to m do
for j:=1 to m do
write(а[i,j],’ ‘);
read(а[i,j]);
writeln;
end;
Итак, а[i,j] - значение элемента массива a, первым указывается i порядковый номер строки, вторым j - порядковый номер столбца, на
пересечении которых находится данный элемент.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
1. Изучить описание лабораторной работы
2. Войти в режим редактирования и набрать текст программы (см. пункт 1
задания).
3. Запустить программу на трансляцию и выполнение (ctrl-<F9>).
 Эту же программу выполнить по шагам с использованием Турбо отладчика (при выполнении очередного шага нажимать клавиши <F7>
или <F8>).В окно Watch можно занести контролируемые данные и
проследить за изменением их значений при выполнении программы.
(Добавлять переменные в окно Watch можно, нажав<Ctrl+F7>)
4. Проверить работоспособность программы на других исходных данных.
5. Составить программы для других пунктов задания.
6. Оформить отчет по лабораторной работе, защитить и сдать его
преподавателю.
ЗАДАНИЯ I УРОВНЯ:
1 Дана программа нахождения суммы
массива:
На Интале
На Паскале
а)const a: array[1..2,1..10] of
integer= ((5,7,0,3,-5,4,-5,7,0,1),
(2,3,6,0,1,1,1,2,9,7));
var i, j, S, : integer;
begin
S:= 0;
for i:= 1 to 2 do
for j:= 1 to 10 do
S:= S + a [i,j] ;
Writeln ( S )
End.
Программа summa
Описание A: Массив[2,10]
б) var i, j, S, : integer;
a: array[1..2,1..10] of
элементов
Целый
integer;
i,j, S: Целый
Конец_Описания
begin
for i:= 1 to 2 do
Повторять Для i от 1 до 2
for j:= 1 to 10 do
Для j от 1 до 10
read(a[i,j]);
Ввод(A[i,j],'элемент=')
Завершить
S:= 0;
s:=0;
for i:= 1 to 2 do
Повторять Для i от 1 до 2
for j:= 1 to 10 do
Для j от 1 до 10
S:= S + a [i,j] ;
s:=s+A[i,j];
Завершить
Writeln ( S )
Вывод(s)
End.
Конец_Программы
а) изменить программу так, чтобы она находила среднее арифметическое
чисел, входящих в массив.
б) изменить программу так, чтобы она находила произведение элементов
массива. Чему произведение равно? Если 0, то как исправить программу?
2. Найти сумму положительных элементов массива, добавив структуру:
Если а [i,j ] >0
То S:= S+а [i,j]
if а[ i,j ] > 0 then S:= S+а [i,j ];
Конец_Если
3. Известны цены на 5 товаров в 3 магазинах. Определить товар наибольшей
стоимости.
4. Известны следующие данные по магазинам:
№
магазина
Товарооборот
за март
Товарооборот
за апрель
Товарооборот
за май
1
45
47
41
2
55
58
50
3
62
55
55
Создайте программу, вычисляющую суммарный товарооборот по каждому
магазину за 3 месяца. Выведите таблицу результатов вычислений на экран,
используя оператор WRITELN(A:n, B: m), где А – номер магазина, В–
выводимые значения суммарного товарооборота, n,m - количество позиций,
которое отводится под переменную на экране пользователя.
5.
Известны цены на 5 товаров в 3 магазинах. Определить количество
единиц товара наибольшей стоимости.
ЗАДАНИЯ II УРОВНЯ
1. Найти наибольший элемент а заштрихованной части матрицы размерности
n*n (см. рис. 1)
2. Заполнить матрицу n*n по стрелке (cм. рис.– по часовой стрелке либо
против ее).
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1. Как описывается двумерный массив?
2. Какова размерность массива с[1..21,1..3] of real?
3. Как вводить данные в двумерные массивы?
4. Как выводить данные из двумерного массива?
5. Почему удобно пользоваться циклами при работе с массивами?
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА:
ПРОГРАММИРОВАНИЕ
С
ИСПОЛЬЗОВАНИЕМ
МНОЖЕСТВ.(1 вариант)
ЦЕЛЬ: Изучить правила объявления и использования переменных типа
множество на языке программирования Паскаль. Получить практические
навыки работы с операциями и процедурами при работе с множествами.
ПО: Turbo Pascal-7.0.
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:
Под множеством понимают неупорядоченный набор различных
логически связанных между собой объектов одного типа. Количество
элементов множества может меняться от 0 до 256. Элементами множеств
могут быть величины любого порядкового типа, кроме Integer, Longint,
Word. Значения элементов целочисленного типа должны принадлежать
множеству 0..255, перечисляемый тип может содержать не более 256
элементов.
Постоянные множества в Паскале задаются перечислением их элементов,
например:
[1, 2, 3, 4, 5];
[] (пустое множество);
[1..100].
В квадратных скобках могут находиться не только константы, но и любые
выражения, имеющие тип элементов данного множества.
Переменные множества должны быть описаны предложением
VAR <имя>: SET OF <базовый тип>
Примеры: VAR S: SET OF 2 .. 100; D: SET OF ‘A’ .. ‘Z’
Для множеств определены три операции: « + », « * », « - », которые
обозначают соответственно объединение, пересечение и разность множеств.
С их помощью можно строить различные выражения множественного типа.
Объединением двух множеств называется множество
элементов,
принадлежащих обоим множествам. Пересечением двух множеств
называется множество тех элементов, которые принадлежат одновременно
двум множествам. Разностью двух множеств называется множество,
содержащее те элементы первого множества, которые не являются
элементами второго.
В Паскале определены следующие отношения для множеств:
 принадлежность элемента х множеству А (x in A);
 равенство (эквивалентность) двух множеств А и В (А = В);
 включение множества А во множество В (А < B);
 нестрогое включение множества А в множество В (А <= B);
 отношения <, <=, >, >=, <>.
Процедура INCLUDE включает новый элемент I во множество S:
INCLUDE(S,I); Процедура EXCLUDE исключает элемент I из множества
S: EXCLUDE(S,I).
В отличие от массива, к элементам множества нет прямого доступа. Поэтому
ввод и вывод элементов осуществляется с использованием операции «+» при
вводе и операции «in» при выводе.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
1. Изучить необходимые сведения, указанные выше.
2. Пункты 1 и 2 задания можно объединить (по согласованию с
преподавателем).
3. Войти в режим редактирования и набрать текст программы
4. Выполнить программу.
5. Проверить работоспособность программы на других исходных данных.
6. Составить программы для других пунктов задания.
7. Оформить отчет по лабораторной работе. Отчет по лабораторной работе
должен содержать постановку задачи, краткое описание идеи либо
алгоритм, а также программу.
ЗАДАНИЯ
I УРОВЕНЬ
1. Получить множества [1..13] и [5..20].
Var i:byte;
c: set of 1..13;
D: set of 5..20;
{V: set of 1..20;}
Begin c:=[];d:=[];
{* для последующих задач}
{v:=[];}
For i:=1 to 13 do include(c,i);
For i:=5 to 20 do include(d,i); write('c=');
For i:=1 to 13 do
If i in c then write(i:4);
writeln;write('d=');
For i:=5 to 20 do
If i in d then write(i:4);writeln;
end.
2. Найти пересечение множеств d и c. Ответом должно быть множество
[5..13]
3. Найти отрицание множеств d и c. Ответом должно быть множество …
4. Найти отрицание множеств c и d. Ответом должно быть множество …
(Ответы в 3 и 4 пунктах не совпали?)
5. Найти объединение этих множеств. Ответом должно быть множество …
I I УРОВЕНЬ
1. Сформировать с помощью функции RANDOM() множество, содержащее 5
целых чисел из диапазона 1..10 и вывести это множество на экран.
2. Дана строка. Содержит ли она только латинские символы?
3. Дана строка. Содержит ли она и строчные символы?
4. Дана строка. Содержит ли она только русские символы?
5. Дана строка. Содержит ли она и прописные символы?
6. Дана строка. Содержит ли она только арабские цифры?
7. Даны 2 строки. Входят ли все символы одной строки в другую?
8. Дана строка. Содержит ли она символы “№ ! » ; , . % : ? @ # $ ^ & * ( )” ?
9. Разработать программу, какому алфавиту (русскому или латинскому),
принадлежит введенный с клавиатуры символ.
10.Даны два множества, состоящие из 10 целых чисел из диапазона 1..100. Из
них выделить одно подмножество, делящееся на 2 без остатка, и другое,
делящееся на 3 без остатка.
САМОСТОЯТЕЛЬНАЯ РАБОТА
 Разработать игровую программу для тренировки памяти. В ее основу
положить следующее правило игры. Необходимо ввести как можно
больше чисел при соблюдении следующих условий: числа должны
быть из диапазона 0..255: запрещается последовательно вводить два
числа, абсолютная разность между которыми меньше 7 (например, 5 и
6, 7 и 11).Программа должна заканчивать свою работу после
обнаружения первой ошибки игрока. На печать выводить количество
правильно введенных чисел.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1. Как описываются переменные типа множество?
2. Какова максимально допустимая мощность множества?
3. Как осуществляется ввод значений переменных типа множество?
4. Как осуществляется вывод значений переменных типа множество?
5. Какие операции допустимы над переменными типа множество?
6. Что такое разность двух множеств?
7. Как понимать объединение двух множеств ?
8. Даны множества [1,5,9..13] и [5..10]. Пересечением этих множеств является
множество...?
Оценка «10» ставится, если выполнены все пункты I уровня, выполнено по
пункту из заданий II, (самостоятельная работа оценивается отдельно) и есть
ответы на теоретические вопросы
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА:
ПРОГРАММИРОВАНИЕ
МНОЖЕСТВ.
С
ИСПОЛЬЗОВАНИЕМ
ЦЕЛЬ: Получить практические навыки работы с операциями для работы с
множествами.
ПО: Turbo Pascal-7.0.
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:
Работа с множествами позволяют иногда сократить программу и сделать ее
более наглядной и эффективной за счет уменьшения проверок.
Под
множеством
в
Турбо-Паскале
понимается
ограниченный
неупорядоченный набор элементов одинакового типа. Множественный тип
данных задается: SET of <базовый тип>. Базовый тип определяет конечную
мощность значений множества. Оно определяется перечислением через
запятую элементов базового множества и заключается в квадратные скобки
(явное задание). Под мощностью множества подразумевается общее число
его элементов. Множество, не содержащее элементов, называется пустым и
обозначается []
Примеры задания множеств:
type
0..1;
d=set
of Var p:
CHAR;
SET
of
Var S: set of
0..9;
Var p: SET of d;
Над множествами определены бинарные операции:
«+»- объединение (новому множеству принадлежат элементы обоих
множеств): s1:=[1,2]; s2:=[3,2,4]; s:=s1+s2; {s=[1,2,3,4]}. Математическое
обозначение операции: s1s2.
«*»– пересечение (новому множеству принадлежат общие элементы обоих
множеств), s1:= [1,2]; s2:=[3,2,4]; s:=s1+s2; {s=[2]}. Математическое
обозначение операции: s1s2.
«-» –разность (новое множество содержит те элементы первого множества,
которые не являются элементами второго): s1:= [1,2]; s2:=[3,2,4]; s:=s1-s2;
{s=[1]}. Математическое обозначение операции: s1\s2. Следует учесть, что
s1-s2<>s2-s1.
Множества можно сравнивать (=,<>,<=,>=,>,<).
Операция определения принадлежности элемента некоторому множеству–
«IN»: X in S (тип элемента Х тот же, что и у элементов множества S).
В отличие от массива, к элементам множества нет прямого доступа.
Поэтому ввод и вывод элементов осуществляется с использованием операции
«+» при вводе и операции «in» при выводе.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
1 Пункты 1, 2, 3, 4 задания можно объединить (по согласованию с
преподавателем).
2 Войти в режим редактирования и набрать текст программы
3 Выполнить программу. (Добавлять переменные в окно Watch можно,
нажав одновременно <Ctrl>+<F7> и далее указав нужные переменные.
Окна переключать можно с помощью клавиши <F6>.)
4 Проверить работоспособность программы на других исходных данных.
5 Составить программы для других пунктов задания.
6 Оформить отчет по лабораторной работе, защитить и сдать его
преподавателю.
ЗАДАНИЯ I УРОВНЯ
1. Дана программа. Что она делает? Как называется данная операция?
var s,s1,s2:set of 0..9;
i: integer;
begin
s1:=[1,2];
s2:=[3,2,4];
s:=s1+s2;
{s=[1,2,3,4]}
writeln;
for i:=0 to 9 do
if i in s then begin k:=k+1; write (i,' ')
end;
end.
2. Составить аналогичную программу для операции пересечения множеств и
записать полученный результат.
3. Составить программу для операции разности двух множеств s1-s2.
Записать полученный результат.
4. Изменится ли результат, если новое множество будет равно s2-s1?
Записать полученный результат.
5. Даны 3 множества Х1, Х2, Х3, содержащие целые числа из диапазона
1..100. Мощность каждого множества равна 10. Сформировать новое
множество Y=(X1X2)  (X1\X2), а также проверить выполнение условия:
X3<=Y.
II УРОВЕНЬ
1. Дана программа подсчета количества цифр в символьной строке:
var s:string;
begin
k: integer;
k:=0;
readln(s);
(*)
Введите программу в память ЭВМ, исполните ее.
writeln(s);
for i:=1 to length(s) do
if c in [0..9] then begin k:=k+1; write (c)
end;
end.
2 . Если требуется вывести только различные цифры из строки, то программа
станет:
var s,s2:string;
begin
c: set of char;
z: char; k,i: integer;
k:=0;
readln(s);
writeln(s);
for i:=1 to length(s) do
if s[i] in ['0'..'9'] then begin k:=k+1;
c:=c+[s[i]]
{накапливаем множество различных цифр}
end;
for i:=0 to 9 do begin
{ проверка и вывод}
str(i,s2);
z:=s2[1];
if z in c then write(i,' ')
end;
writeln;
end.
3. В строке символов с точкой в конце определить количество различных
букв, входящих в нее.
4. Дана строка символов. Требуется построить и вывести множество,
элементами которого являются:
a) встречающиеся в строке знаки арифметических операций и знаки
препинания;
b) буквы, которые встречаются в каждом слове текста только один раз;
c) буквы, входящие в текст не менее двух раз;
d) гласные буквы, которые входят в текст;
e) гласные буквы, которые входят в каждое слово:
f) все глухие согласные буквы, которые не входят хотя бы в одно слово
g) все звонкие согласные буквы, которые входят в строку символов;
h) первые вхождения символов в текст;
i) символы, отличные от букв и пробелов;
j) только латинские символы, входящие в строку символов.
(дается одно задание по выбору преподавателя)
5. Дано натуральное n (2<=n<=255). Найти все меньшие n простые числа,
используя решето Эратосфена (выписываются подряд все целые числа от 2
до n. Первое простое число 2. Подчеркнем его, а все большие двух числа,
кратные 2, зачеркнем. Первое из оставшихся чисел: 3. Подчеркнем его, а все
большие числа, кратные 3, зачеркнем. Первое из оставшихся чисел: 5, и т.д.)
САМОСТОЯТЕЛЬНАЯ РАБОТА
 Разработать игровую программу. В ее основу положить следующее
правило. В игре участвуют два человека. Первый последовательно
вводит 10 символов русского (латинского) алфавита. Второй пытается
отгадать то, что ввел его соперник, и вводит свои 10 символов.
Программа считает и выводит на экран число угаданных символов.
Затем игроки меняются ролями.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1.
2.
3.
4.
5.
6.
Какие операции допустимы над множествами?
Может ли множество не содержать ни одного элемента?
Может ли множество содержать элементы различных типов?
Как работает операция “in”?
Эквивалентны ли отношения: p in [6,7,35] и (p=35)or (p=6) or (p=7)
Во множестве символов текста определить, каких букв: гласных или
согласных больше.
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА: ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ ЗАПИСЕЙ.
ЦЕЛЬ: Изучить правила объявления и использования записей на языке
программирования Паскаль. Получить практические навыки работы с
операторами и функциями для работы с записями.
ПО: Turbo Pascal-7.0.
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:
Запись–это структурированный тип данных, который может объединять
величины разных типов. Каждая величина, входящая в запись, хранится в
специально отведенном для этого поле. Для обозначения записей
используется служебное слово RECORD. Описание структуры записи
производится обычно в разделе TYPE и имеет следующий вид:
<имя типа> = RECORD
<имя поля> : <тип поля>;
<имя поля> : <тип поля>;
…
<имя поля> : <тип поля>;
END;
Для обращения к какому-либо полю записи сначала следует указать имя
записи, а затем после точки–имя поля. Ниже приведена программа,
организующая заполнение информацией массива z, состоящего из 10
записей, содержащих сведения о поставщиках товаров (наименование
поставщика, его адрес, телефон, наименование банка и номер расчетного
счета):
program zapisi;
type
post=record
naim: string[30];
adres: string[50];
tel:
integer;
(*)
bank: string[30];
num: integer;
end;
var z: array [1..10] of post;
x: post;
i: integer;
begin
for i:=1 to 10 do
begin
writeln (‘введите сведения о ‘, i, ‘-ом поставщике’);
write (‘наименование’); read (x.naim);
write (‘адрес’); read (x.adres);
write (‘телефон’); read(x.tel);
write (‘наименование банка’); read (x.bank);
write (‘номер расчетного счета’); read (x.num);
z[i] := x;
end;
end.
При необходимости постоянно обращаться к полям одной и той же
записи можно использовать оператор WITH, который имеет вид:
WITH <имя записи> DO <оператор>.
Внутри оператора можно опускать имя записи при обращении к ее
полям, что позволяет упростить оформление программы. Так фрагмент
ввода данных в приведенном выше примере можно было представить
следующим образом:
with x do
begin
write (‘наименование’); read (naim);
write (‘адрес’); read (adres);
write (‘телефон’); read(tel);
write (‘наименование банка’); read (bank);
write (‘номер расчетного счета’); read (num);
end;
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
1. Изучить необходимые сведения, указанные выше.
2. Пункты 1 и 2 задания можно объединить (по согласованию с
преподавателем).
3. Войти в режим редактирования и набрать текст программы
4. Проверить работоспособность программы на других исходных данных.
5. Составить программы для других пунктов задания.
6. Оформить отчет по лабораторной работе. Отчет должен содержать тему и
цель, постановку задачи, краткое описание идеи либо алгоритм,
программу, результаты. При защите необходимо отвечать на контрольные
вопросы и уметь пояснять работу программы.
ЗАДАНИЯ I УРОВЕНЬ
1. Ввести программу (*) в память,
2. Дополнить программу выводом данных из массива.
3. Изменить программу (использовать оператор присоединения WITH).
4. Вывести сведения о пятом поставщике.
5. Определить, какие поставщики имеют счета в Беларусбанке.
ЗАДАНИЯ II УРОВЕНЬ
Дана ведомость абитуриентов, сдавших вступительные экзамены в институт
(приведено начало ведомости
Ф.И.О.
Оценки
Иванов А.Г.
9
Петров Л.Л
Раковский Д.Г.
9 9 9
4 4 5
6 5
Местожительство
Минск
Барановичи
Брест
1.
Определить количество абитуриентов со средним баллом не менее 6.
2.
Определить количество абитуриентов со средним баллом не менее 6,
фамилии которых начинаются с буквы А.
3.
Определить количество абитуриентов, фамилии которых начинаются с
буквы «И».
4.
Определить количество абитуриентов, со средним баллом не менее 6,
проживающих в городе Минске.
5.
Определить количество абитуриентов, проживающих в городах,
название которых начинается с буквы «Б».
6.
Определить количество абитуриентов, средний балл которых выше
среднего балла по институту.
7.
Определить количество абитуриентов, фамилии которых начинаются с
буквы «Р» и получивших хотя бы одну оценку «5».
8.
Определить количество абитуриентов, получивших хотя бы одну
оценку «7».
9.
Определить количество абитуриентов, средний балл которых выше
среднего балла по институту. Напечатать список поступающих, причем
первыми в списке идут абитуриенты, сдавшие все экзамены на 10(9).
10. Определить количество абитуриентов, проживающих в городе Минске
и фамилии которых начинаются с буквы «П».
КОНТРОЛЬНЫЕ ВОПРОСЫ:
9. Как описываются переменные типа запись?
10.В каких случаях целесообразно использование переменных типа запись?
11.Каково назначение оператора WITH?
12.В чем отличие записей от массивов?
Download