Язык программирования — Pascal Информатика для учеников 8 классов


ВВЕДЕНИЕ

Ученики 8-классов изучают курс «Программирование» в 1 и 2 семестрах.Базовым языком является Паскаль.

Цель лабораторных работ — закрепление теоретического материала, приобретение устойчивых практических навыков в составлении, отладки и выполнении программ на языке Паскаль в системе программирования Turbo Pascal 7.0, приобретение навыков самостоятельного решения задач на ПЭВМ совместимых с IBM PC AT / XT. Для выполнения каждой лабораторной работы необходимо изучить соответствующий теоретический материал по конспектам лекций и методических указаниях, или с рекомендуемой литературы, а также ответить на вопросы для самопроверки (если они указаны).

Все работы ориентированы на выполнение с помощью ПЭВМ, позволяет ться использовать любую ПЭВМ с системой программирования Турбо Паскаль.Каждая лабораторная работа должна иметь следующие разделы:

1) номер работы;

2) тема;

3) цель работы;

4) условие задачи;

5) список используемых переменных (обозначений)

6) блок-схема алгоритма решения задачи;

7) распечатка программы вместе с комментариями;

8) распечатка результатов.

Пpимитка. Пpи офоpмленн и pобит соблюдения требований государственных стандарте в необязательно.Вс и лабораторные работы оформляются в одной тетради.Выбор вар Ианта задач осуществляется по списку учеников в классном журнале или учителем.Лабораторные работы имеют продолжительность 1 или 2 урока.Последнее занятие по курсу программирования является зачетным, на котором кажется тетрадь со всеми зачисленными лабораторными работами.

 

 

 

Лабораторная работа №1

 

Тема. Ознакомление с операционной системой и программой Norton Commander (Volcov Commander). Изучение системы программирования Turbo Pascal 7.0. Поpядок cоздание, вiдлагодження и запуска Паскаль-пpогpамы в оболочке и Turbo Pascal.

Цель работы. Научиться выполнять простые команды DOS с использованием программы Norton Commander; рассмотреть операционную систему Windows’95 и ее основные команды; изучить режимы File, Edit и Run системы программирования Turbo Pascal 7.0; научиться создавать, отлаживать и выполнять Паскаль-пpогpамы; научиться работать с принтером.

Порядок выполнения работы

  1. Изучение основных команд DOS и их выполнение с помощью программы Norton Commander (изучение основных команд Windows’95).
  2. Изучение системы программирования Turbo Pascal 7.0 и работы в основных режимах (File, Edit, Run) согласно приведенной инструкции использования примера образца программы.
  3. Работа с печатающим устройством (ДП). Порядок вывода программы и результатов работы на ГП.
  4. Работа с внешние мы запоминающими устройствами (дисководом).Порядок сохранения программы на гибком магнитном диске (дискет и), на жестком диске (винчестере).Загрузка (считывание) программы по внешних запоминающих прибор ов в оперативную память ЭВМ.

Краткие теоретические сведения и методические указания

Пpи включении компьютеpа опеpацийна система (ОС) загружает ться автоматически.После загрузки ОС автоматически скачает ется пpогpамме Norton Comander, что позволит облегчить Эксплуатации пользователя на pивни команд ОС. Больше команды, а также перечни клавиш, активiзуючих каждую команду, указанные в нижней ленте екpана.Описание каждой команды указано в дов и днику, вызвать который можно нажатием клавиши F1 (Help).Для изучения системы программирования Turbo Pascal 7.0 необходимо соблюдать нижеследующей iнстpукц ии.

Инструкция по работе с системой программирования Turbo Pascal 7.0

  1. Вход в каталог Pascal 7.0 (название может быть другим, поэтому осуществить поиск Alt + F7 файла bp.exe или использовать меню пользователя F2).
  2. Скачать файл bр. exe.
  3. Если окно редактирования занято текстом другой программы — войти в главное меню (кл. F10), после этого в режиме File выполнить команду New. Ввести текст программы в ЭВМ. Если текст программы уже записан на внешнее запоминающее устройство (ВЗУ), надо продолжить редактирование в режиме File выполнить команду Open (кл. F3). Если нужный файл имеет расширение. Pas и находится в в каталоге Pascal 7.0, далее нажать только клавишу <Еnter>. Если же файл находится в каталоге Pascal 7.0, но имеет другое расширение — в вид и ленном строке убрать Pas, написать нужное расширение и нажать кл. <Еnter>.В вид Илена окне с помощью клавиш управления курсором выбрать нужный файл и нажать кл. <Еnter>.Если нужный файл находится на другом приборе — в вид и ленном строке убрать текст, записать имя файла вместе с именем устройства, на котором он находится (например, A: Rew.Txt) и и нажать кл. <Еnter>. После загрузки нужной программы продолжить редактирование.
  4. В и длагодиты программу и выполнить режим Run.Для этого нажать кл. F10 и далее активизировать режим Run, не выходя из редактора, нажать совместно кл. Ctrl + F9.Программа компiлю является ться к проявлению первой ошибки.При наличии ошибки выдается соответствующее сообщение (приложение 1). Для исправления следует нажать любую клавишу и исправить ошибку. Далее повторить п. 4, пока все ошибки не будут исправлены. Если ошибок нет — программа компiлю является ться и выполняется.После ее выполнения отбывает ться возвращения в редактор (переход очень быстрый).Для фиксации на экране и просмотра результатов работы программы — нажать совместно кл. Alt + F5.Напор после этого любой яко й клавиши приведет к возвращению в редактор системы программирования.
  5. При начальном введении программы в ЭВМ ей придает ться стандартное имя NONAME00.PAS. Его рекомендуется изменить, а при необходимости сохранить программу на ВЗУ. Для сохранения программы на ВЗУ необходимо войти в главное меню (кл. F10), после этого в режиме File выполнить команду Save или Save As … (при этом следовать запросам системы). Если имя программы изменено, для й й сохранения на ВЗУ достаточно, не выходя из режима редактирования, нажать кл.F2.
  6. Для компиляции и сохранения на ВЗУ отдельных модули в программы (в машинных кодах) используется режим Compile.Работа с этим режимом для выполнения лабораторных работ обязательно.
  7. Для выхода из системы программирования Turbo Pascal 7.0 нажать совместно Alt + Х.
  8. Распечатка листинга программы можно осуществить командой <Copy> (кл. F5) после выхода из системы программирования), установил маркер на имя нужно й программы в каталоге.Далее на запрос Dos ввести Prn и и нажать кл. <Еnter> (при этом сл идкуваты, чтобы принтер был готов к печати).
  9. Для напечатания результатов работы программы на принтере нужно в разделе uses, кроме crt, подключить printer, а в операторах, осуществляющих виви д результатов, в список выводимых объектов добавить lst (на первое место).В приведенной выше программе вторую строчку заменим таким: uses crt, printer; предпоследнее ю строчку (перед служебным словом end) заменим таким: writeln (lst, ‘x =’, x, ‘y =’, y, ‘z =’, z)

 

 

образец программы

 

uses crt;

var

x, y, z: real;

begin

writeln ( ‘Введите и во значения x, y (через пробел):’);

readln (x, y)

z = x + y;

writeln ( ‘x =’, x, ‘y =’, y, ‘z =’, z)

end.

 

 

Лабораторная работа №2

Тема. Программирование лiн ийних алгоритмов.

Цель работы. Ознакомиться с операторами ввода и вывода и присвоения, научиться записывать лiн ийни алгоритмы на языке программирования Pascal.

 Краткие теоретические сведения и методические указания

Программа, реализующая лiнийний алгоритм, выполняет только раздел описания переменных и блок операторов.Блок операторов программы содержит операторы ввода, вывода и присвоения. Раздел Uses содержит модули Crt и Printer. Рассмотрим организацию ввода и вывода данных на языке Pascal.

Вывод информации можно осуществить с помощью операторов write и writeln. Отмена их в том, что оператор writeln автоматически осуществляет перевод на новую строку после вывода информации, то есть, следующий оператор вывода будет выводить информацию с новой строки, тогда как оператор write этого не делает.

формат:

write (<список выражений>)

writeln (<cписок выражений>)

write (<список известий>)

writeln (<список известий>)

где <список выражений> и <список известий> — это та информация, вывод которой нужно осуществить. При этом под <список выражений> понимается любая конструкция, определенная как выражение, а под <список известий> — любая последовательность символов языка, заключенная в кавычки, то есть, буквенная константа.

Элементы списка разделяются запятыми. При выводе и информации значения элементов списка печатаются без разд ла.Поэтому о предметной и удобный форму вывода данных пользовательского и надо заботиться самому.

Например,

write (x) {Вывод значения переменной}

writeln ( ‘x =’, x) {вывод сообщения х =, значение переменно и х и переход на следующую ленту}

writeln (a + b) {Вывод значения выражения a + b и переход на следующую ленту}

write ( ‘программа:’); {Вывод обращения}

 

Выводить непосредственно можно только значения стандартных скалярных типов и строки. Вывод значений других типов надо организовывать программным путем.

Действительные числа обычно выводятся в экспоненциальные и форме, что не всегда удобно.Поэтому для обеспечения большей наглядности результата можно использовать форматное вывода, при котором для каждого значения выводимой отводится определенное м исце.

Например,

writeln (x 5) {Для значения переменно й «х» отведено место с 5 позиций}

writeln (a: 8: 4); {Для вывода значения переменной отведено 8 позиций, при этом на мантиссу отведено

4 позиции (переменная а считается действительной)}

Использовать форматное вывода можно для всех переменных, для которых можно применять операторы вывода. В том случае, если отведенного поля для вывода значения недостаточно, место будет автоматически расширен до нужных размеров.

Для вывода информации на печатающее устройство необходимо в разделе Uses указать модуль Printer, а в списках всех операторов write и writeln, которые должны выводить информацию на принтер, в виде первого параметра указать lst.

Hаприклад,

write (lst, ‘результат:’);

writeln (lst, x, y, z) ;.

Ввод данных в ЭВМ осуществляется с помощью операторов read и readln.

формат:

read (<список переменных>),

readln (<список переменных),

где <список переменных> — это список тех допустимых объектов, значения которых пользователь вводит с клавиатуры. Значение списка набираются минимум через один пропуск на клавиатуру и на экране. В конце ввода значений списка одного оператора read надо нажать клавишу <Еnter>. При этом следует строго соблюдать соответствии и типов введенных значений к типам переменных списке оператора read.

Например,

read (x) {Ввод с клавиатуры значение переменной}

read (a, b) {Ввод с клавиатуры значений переменных a, b}

Надо обратить внимание на то, что при выполнении этого оператора на экран не выдается никаких сообщений, поэтому для выгоды и наглядности введение пользователю необходимо самостоятельно позаботиться о выводе необходимого текста для сопровождения.

Например,

а) write ( ‘введите значение переменной:’); read (x)

б) writeln ( ‘введите значение a и b:’); read (a, b)

Очевидно, что данные фрагменты организуют понятное и наглядное ввода информации.При этом в первом случае введенное значение переменной будет отображаться в той же строке, что и сообщение, а во втором — в новой строке, поэтому выполнение для вывода наводящих строк оператора write желательно.

Оператор readln Аналогичным оператору read, единственная отмена заключается в том, что после считывания последнего значения в списке оператора readln данные списка следующего оператора readln будут считываться (отображаться на экране) с начала строки.

Оператор присваивания (=) приписывает выполнить выражение, заданное в его правой части, и присвоить результат переменной, iдентiфикатор которой расположен в левой части.

формат:

<Iдентификатор> = <выражение>;

Переменная и выражение должны иметь один и тот же тип.Допускается переменная вещественного типа, а выражение — целого. Допустимое присвоения любых типов данных, кроме файловых.

Например,

S: = 1; gh = x + y;

Nazv = ‘модель N2’;

Пример 2.1. К материальной точки под углом a радiан приложены две силы.Вычислить величину равнодействующей й этих сил.

Решение: Обозначим выходные силы iдентификаторамы f1 и f2, результат — f, угол a (все имена выбираются пользователем.).Очевидно, что f1 и f2 имеют целый тип, f и a -действительно.Р ивноди юча двух сил находится по правилу параллелограмма (рис.2.1):

 Рис.2.1

Величина равнодействующей двух сил находится по формуле (используется известная теорема косинусов):

 

f = f1 × f1 + f2 × f2 — 2 × f1 × f2 × сos (p — a) или, после упрощения,

 

f = f1 × f2 + f2 × f2 + 2 × f1 × f2 × cos (a)

Блок-схема алгоритма представлена ​​на рис. 2.2.

 

 

Рис. 2.2

 

программа 2.1

uses crt;

var f1, f2: integer; {исходные данные}

alfa: real;

f: real; {Результат}

begin

write ( ‘ввода исходных сил:’);

readln (f1, f2)

write ( ‘введение угла альфа:’); readln (alfa) writeln;

f = sqrt (sqr (f1) + sqr (f2) + 2 * f1 * f2 * cos (alfa)) writeln ( ‘исходные данные:’);

writeln ( ‘f1 =’, f1, ‘f2 =’, f2, ‘угол альфа =’, alfa)

writeln ( ‘результат:’, ‘f =’, f: 6: 3)

end.

 

Результаты работы программы:

Ввод исходных сил: 12 34

Введение угла альфа: 0.3

Исходные данные:

f1 = 12 f2 = 34 угол альфа = 3.0000000000Е-01

Результат: f = 45.602

Вопросы для самопроверки

  1. Которая алгоритмическая структура называется лiнийною?
  2. Какие операторы чаще всего применяются для записи лiнийних алгоритмов?
  3. Дать характеристику операторам вывода; в чем их отмена?
  4. Дать характеристику операторам ввода; в чем их отмена?
  5. Введение типам данных допускается осуществлять с помощью оператора read?
  6. Вывод всех типов данных допускается осуществлять с помощью оператора write?
  7. В чем суть форматного вывода?
  8. Формат оператора присваивания? Присвоение типам данных допустимо в языке Pascal?
  9. Можно ли присвоить переменной действительного типа значение целого типа; переменной буквенных типа — значение вещественного типа?

 

Задача к работе

По заданным сторонам a, b, c треугольника (рис. 2.3) найти все величины, характеризующие треугольник согласно варианту, который избирается согласно номера студента в журнале. Предусмотреть ввод значений a, b, c с клавиатуры. Вывод исходных данных осуществлять с соответствующим поясняющей текстом (расчетные формулы приведены после вариантов заданий).

 

Рис. 2.3

 

варианты заданий

 

  1. Высоты треугольника.
  2. Медiаны треугольника.
  3. Бiсектрисы треугольника.
  4. Радиус вписанной окружности.
  5. Радиус описанной окружности.
  6. Косинус угла a, синус угла b.
  7. Сумму косинусов углов треугольника.
  8. Сумму косинуса и синуса угла a.
  9. Сумму синусов углов треугольника.
  10. Синус угла 2 a.
  11. Косинус угла 2 b.
  12. Тангенс угла a.
  13. Синус угла (a — b).
  14. Синус угла (a + b).
  15. Косинус угла (a — g).
  16. Косинус угла (a + g).
  17. Синус a / 2.
  18. Косинус b / 2.
  19. Котангенс угла b.
  20. Сумму косинуса 2 g и синуса a / 2.
  21. Сумму косинуса 2 a и косинуса a / 2.
  22. Синус угла (45 ° — g).
  23. Косинус угла (a — 30 °).
  24. Тангенс угла (45 ° — b).
  25. Котангенс угла (a — 45 °).
  26. Тангенс угла 2 a.
  27. Котангенс угла 2 b.
  28. Сумму тангенса угла 2 g и котангенса g.
  29. Тангенс угла b / 2.
  30. Котангенс угла g / 2.
  31. Kут a, высоту h b.
  32. Угол g, медиану m a.
  33. Угол b, биссектрису l .
  34. Угол a, радиус R.
  35. Угол g, медiану m c.
  36. Угол b, высоту h a.
  37. Угол b, радиус r.
  38. Угол g. высоту h а.
  39. Угол a, биссектрису l .
  40. Угол g, биссектрису l .
  41. Угол b, медиану m c.
  42. Угол a, высоту h a.
  43. Угол b, медiану m a.
  44. Угол g, высоту h a.
  45. Угол b, биссектрису l .
  46. Угол a, радиус r.
  47. Угол g, высоту h b.
  48. Угол a, медиану m a.
  49. Угол b, биссектрису l .
  50. Угол g, медиану m c.
  51. Угол b, высоту h c.
  52. Угол . , Медиану m b.
  53. Угол g, радиус r.
  54. Угол a, высоту h c.
  55. Угол g, медиану m b.
  56. Угол b, высоту h b.
  57. Угол b, радиус R.
  58. Угол g, биссектрису l .
  59. Угол b, медiану m c.
  60. Угол a, биссектрису l .

 

Расчетные формулы (a, b, c — стороны, a, b, g — углы):

Полупериметр треугольника: p = (a + b + c) / 2.

Площадь треугольника: S = Ö p (p-a) (p-b) (p-c).

Высоты треугольника: h a = 2s / a; h b = 2s / b; h c = 2s / c.

Медiаны треугольника: m a = Ö 2 (b 2 + c 2) — a 2/2; m b = Ö 2 (a 2 + c 2) — b 2/2,

m c = Ö 2 (a 2 + b 2) — c 2/2.

Бiсектрисы треугольника: l a  = 2 Ö bcp (pa) / (b + c)

l b = 2 Ö acp (p-b) / (a + c) l g  = 2 Ö abp (p-c) / (a + b).

Радиусы: вписанной окружности r = S / p, описанной окружности R = abc / (4s).

сos a = (b 2 + c 2 — a 2) / (2bc),

cos b = (a 2 + c 2 — b 2) / (2ac),

cos g = (a 2 + b 2 — c 2) / (2ab).

Если х-угол треугольника, тогда справедливы формулы:

sin 2 x + cos 2 x = 1.

tg x = sin x / cos x, ctg x = cos x / sin x = 1 / tg x.

sin 2x = 2sin x cos x, cos 2x = cos 2 x — sin 2 x.

sin (x — y) = sin x cos y — cos x sin y,

sin (x + y) = sin x cos y + cos x sin y,

cos (x — y) = cos x cos y + sin x sin y,

cos (x + y) = cos x cos y — sin x sin y,

tg (x + y) = (tg x + tg y) / (1-tg x tg y),

tg (x — y) = (tg x — tg y) / (1 + tg x tg y).

cos x / 2 = ; sin x / 2 =

Если x — угол треугольника, тогда угол x / 2 всегда меньше или равен 90 °, то cos x / 2 ³ 0 и sin x / 2 ³ 0).

Изображение обратных тригонометрических функций через arctg:

arcsin x = arctg

arccos x = arctg

acctg x = arctg (1 / x)

углы:

a= arccos (( b 2 + c 2 -a 2) / (2bc))

b = arccos ((a 2 + c 2 -b 2) / (2ac))

g = arccos ((b 2 + a 2 -c 2) / (2ab))

 

 

 

Лабораторная работа №3

Тема. Программирование разветвленных алгоритмов.

Цель работы. Закрепить теоретические сведения о разветвленной и алгоритмы, операторы передачи управления; научиться программировать разветвления.

 

Краткие теоретические сведения и методические указания

При программировании лiнийних алгоритмов в Pascal реализуется обычный порядок сли ления операторов.Но в реальных задачах очень часто требуется изменить его в зависимости от исходных данных или результатов промежуточных вычислений. В этом случае для организации разветвленных вычислительных процесс и в используются операторы передачи управления: безусловный (goto) и условный (if), а также оператор выбора (case).

Безусловный оператор передает управление на оператор с указанной меткой.

формат:

goto <метка>;

где <метка> — любой допустимый iдентификатор, а также последовательность цифр или цифр и букв; <Метка> должна быть описана в разделе описания меток (label).

Например,

Label 1;

begin

goto 1;

1: a = b + c;

 

Условный оператор обеспечивает выполнение или невыполнение какого-либо оператора в зависимости от условия.

формат:

if <условие> then <оператор1> else <оператор2>;

где <условие> — выражение логического типа. Если значение <условие> равно true, тогда выполняется <оператор1>, а <оператор2> игнорируется если же значение <условие> равна false, тогда выполняется <оператор2>, а <оператор1> игнорируется.

Например,

if x> y then z = x else z = y; {Нахождения максимального из двух чисел}

<Оператор1> (или <оператор2>) может быть и структурным, то есть группой операторов, заключенным в «операторные скобки» (begin и end).

Читать  Предмет и задачи информатики учебного курса "Информатика" для студентов первого и второго курсов

Частным случаем условного оператора является оператор if <условие> then <оператор>; {Else не содержит никаких действий}

 

Например,

if x> y then

begin {сортировка двух чисел с ростом}

z = x; x = y; y = z

end;

В Pascal допустимая вложенность операторов if:

if <усл. 1> then if <усл. 2> then …

else if <условий. N> then …

else if <условий. K> then … else …;

Такая вложенные во операторов if ограничивается только объемом доступной памяти компьютера.Оператор выбора (варианта) case позволяет сделать выбор из произвольного числа существующих вариантов.

 

формат:

case <выражение> of

<Митка1> <оператор1>;

<Митка2> <оператор2>;

<Миткаn> <операторn>

end;

где <выражение> — выражение любого скалярного типа, кроме действительного; <Митка1>, <митка2>, …, <миткаn> — значение того же типа, что и <выражение>; эти метки в разделе label объявлять не надо.

Оператор case выполняется следующим образом: сначала вычисляется значение <выражение>, после этого выполняется оператор с той меткой, совпадает с этим значением, а все остальные операторы игнорируются дальше управление передается оператору, следующем за служебным словом end. Если же оператора с такой меткой нет, тогда управление сразу же передается на оператор, следующий за end.

Если для двух различных меток надо выполнить одно действие, тогда перед соответствующим оператором записываются обе метки (через запятую).

 

Например,

case I of

1, 2: <оператор1>;

end;

Оператор case может содержать также служебное слово else и <выражение> iнтервального типа.

 

Например,

case I of

1 .. 10 …; {Действие после else выполняется в том случае,

11 .. 20 …; если I <1 и I> 20}

else …

end;

 

Если меток диапазонов несколько в одном операторе, тогда они также разделяются запятыми.

Примечания

  1. Нельзя передавать управление с одной альтернативы оператора if на другую (то же оператора case).
  2. Нельзя извне оператора if входить на какую-либо его альтернативу с помощью оператора goto.
  3. Нельзя входить в тело оператора case с помощью оператора goto.
  4. Служебное слово end может иметь метку, например, 5: end. Если в программе есть оператор goto 5, тогда это означает, что будет выполняться передача на пустой оператор с меткой 5.

 пример 3.1

Дано 10 действительных чисел. Найти величину наибольшего из них.

Решение. Введем следующие обозначения: в переменную x действительного типа будем вводить очередное число последовательности; действительной переменной max обозначим больше из введенных цифр, цел й переменной и — счетчик количества цифр.

 

Блок-схема алгоритма приведена на рис. 3.1

 

Рис. 3.1

 

программа 3.1

uses crt;

label 4, 9; {м и тки}

const n = 10; {Количество чисел}

var

i: integer; {Счетчик количества введенных чисел}

max: real; {Наибольшее число среди введенных}

x: real; {Следующее число}

begin write { ‘исходные числа:’};

i: = 1;

read (max) {Ввод первого числа}

4: i = i + 1; if i> n then goto 9;

read (x) {Ввод очередного номера}

if x> max then max = x;

goto 4;

9: writeln; writeln ( ‘результат:’);

writeln ( ‘max =’, max: 6: 2)

end.

Пусть введено 10 чисел: 1.2; 3,4; 13,85; 10,4; 2,2; 4, 5, 8; 20; 1,1. Тогда результаты работы программы будут следующие:

Выходные числа: 1,2; 3,4; 13,85; 10,4; 2,2; 4, 5, 8; 20; 1,1.

Результат: max = 20,00

 

Вопросы для самопроверки

 

  1. Которая алгоритмическая структура называется разветвленной?
  2. Какие операторы используются для записи разветвленных алгоритмов?
  3. Дать характеристику оператора goto.
  4. Дать характеристику оператора if. Допускается ли н и в Паскале вложенность операторов if?
  5. Как выполняется оператор case? Допустимый <выражение> типа real?
  6. Что такое пустой оператор?

 

варианты заданий

 

  1. Данные два целых числа a и b. Найти их наибольший общий делитель.
  2. Данные два действительных числа x и y. Напечатать номер квадрата на координатной й плоскости, которому принадлежит точка (x, y).
  3. Дано 5 действительных чисел: a1, a2, a3, a4, a5. Известно, что один из них отличное от четырех других, равных между собой. Найти номер этого числа.
  4. Данные числа a, b, c. Определить, существует ли треугольник с такими сторонами.
  5. Данный треугольник со сторонами a, b, c. Определить, какой он (остроугольный, прямоугольный, тупоугольный).
  6. Данный треугольник со сторонами a, b, c. Определить, какой он (г. ивносторонний, равнобедренный, разносторонний).
  7. Данные числа a, b, c. Найти сумму наибольшего и наименьшего из них.
  8. Данные числа a, b, c. Напечатать их в порядке убывания.
  9. Данные числа a, b, c. Напечатать их в порядке возрастания.
  10. Данные числа a, b, c, d. Определить, сколько из них отрицательных.
  11. Данные числа a, b, c, d. Найти сумму положительных чисел.
  12. Данные числа a, b, c. Определить, сколько из них одинаковых.
  13. Данные числа a, b, c. Определить, можно ли составить из них арифметическую прогрессии.
  14. Данные числа a, b, c. Определить, можно ли составить из них геометрическую прогрессии.
  15. Дано положительное число N. Проверить, все ли его цифры различны; если нет, тогда сколько одинаковых?
  16. Дано положительное трехзначное число N. Проверить, есть ли среди его цифр две одинаковые.
  17. Дано положительное четырехзначное число N. Проверить, входит ли в запись этого числа цифра 9.
  18. Дано целое положительное число N. Определить, сколько в нем цифр.
  19. Дано положительное трехзначное число N. Если все цифры его р изни, напечатать число, записанное теми же цифрами, но в обратном порядке.
  20. Переменных и и х присвоить значение корня уравнения: arccos (1-lnx) = a, если таковой существует.Значение a задать самостоятельно.
  21. Вычислить значение функции:

 

max (x, y) при x <0

Z =

min (x, y) при x> = 0

 

  1. Данные числа a, b, c (a <> 0). Найти действительны корни уравнения:

ax 4 + bx 2 + c = 0.

Если корней нет — напечатать соответствующее сообщение.

  1. Для заданного числа a найти корень уравнения f (x) = 0, где

 

2ax + a-1 при a> 0

f (x) =

(exp (x)) / (Ö 1 + a 2) — 1 при a 0

 

  1. Две прямые описываются уравнениями a 1 × x + b 1 × y = c 1 и a 2 × x + b 2 × y = c 2. Определить, параллельные они совпадают, пересекаются.
  2. Если среди чисел a, b, c, d форуме отрицательных, тогда вычислить их среднее геометрическое.
  3. Даны четыре числа a, b, c, d. Найти среди них число, не равное 0, и разделить на него данные числа. Если среди заданных все числа равны 0 — выдать соответствующее сообщение.
  4. Дано положительное четырехзначное число N. Определить, есть ли среди его цифр 0 и, если есть, тогда сколько.
  5. Функция y = f (x) задана графически:

вычислить значение этой функции (х задавать самостоятельно).

  1. Вычислить значение функции = f (x) (x задавать самостоятельно), график которой изображен на рисунке:

 

Вычислить значение функции y = f (x) (x задавать самостоятельно), график которой изображен на рисунке:

 

 

 

 

 

Лабораторная работа №4

 

Тема. Программирование циклических алгоритмов.

Цель работы. Закрепить теоретические сведения об алгоритмах циклических структур, операторы цикла; научиться программировать циклические алгоритмы с помощью операторов цикла и операторов передачи управления.

 Краткие теоретические сведения и методические указания

Цикл — это алгоритмическая структура, в которой группа операторов ис гается неоднократно.Цикл состоит из блока начальных присвоений, тела цикла и условия. Различают арифметические и и iтерацийни цикла.Количество повторений арифметического цикла можно определить заранее; для iтерац ийного цикла этого сделать нельзя.

Циклические алгоритмы можно программировать с помощью операторов передачи управления, но в Pascal для этих целей существуют операторы цикла.

  1. Оператор цикла с растущим параметром

формат:

for <параметр> = <п.з.> to <к.з.> do <тело цикла>;

где <параметр> — переменная любого скалярного типа, кроме действительного; <П. с. > — начальное значение <параметр>; <К. с. > Конечное значение <параметр>; <Тело цикла> — оператор.

Порядок выполнения:

а) если начальное значение <параметр> больше конечного, тогда <тело цикла> не выполнится ни разу — переход на оператор, следующий за <телом цикла>; иначе — переход к п. б)

б) <параметр> присваивается <п. с. >;

в) выполняется <тело цикла>;

г) если значение <параметр> равно <к. с. >, Тогда выполняется переход на оператор, следующий за <телом цикла>; иначе — переход к пункту д;

д) рассчитывается очередное значение <параметр> с помощью функции succ; далее — переход к пункту в.

Например,

for i: = 1 to 10 do write ( ‘*’); {печатает строку из 10 с и годик}

 

Если в <теле цикла> надо записать более одного оператора, тогда эта группа операторов должна быть заключена в операторные скобки.

Например,

а) for j = 1 to 10 do {здесь оператор writeln не относится

k = j * j; writeln (j, k) к <тела цикла>! }

б) for j = 1 to 10 do

begin k: = j * j; {Здесь <тело цикла> содержит два

writeln (j, k) операторы}

end;

Запрещается изменять значение <параметр> в <теле цикла>.

 

  1. Оператор цикла с уменьшающимся параметром

формат:

for <параметр> = <н. с. > Downto <к. с. > Do <тело цикла>;

Порядок выполнения этого оператора такой же, как и оператора цикла с растущим параметром. Отмена только в том, что конечное значение <параметр> не должно превышать по начальное; очередное значение <параметр> высчитывается при помощи функции pred.

 

Например,

а) for i = 10 downto 1 do write ( ‘*’); {Будет напечатан строку из 10 звезд}

б) for j = 10 downto 1 do {будет напечатана таблица

begin k: = j * j; writeln (j, k) end; квадратов чисел от 10 до 1}

 

  1. Оператор цикла с предусловием

формат:

while <условие> do <тело цикла>;

где <условие> — выражение логического типа; если его значение равно true, тогда выполняется <тело цикла>; в противном случае выполняется переход на оператор, следующий за <телом цикла>, то есть выполнение <тело цикла> повторяется до тех пор, пока <условие> не примет значение false. <Тело цикла> содержит только один оператор; если же <тело цикла> должно содержать более одного оператора, тогда их берут в операторные скобки.

 

Например,

i: = 1;

while i <10 do

begin {будут напечатаны числа от 2 до 10}

i = i + 1; write (i)

end;

 

Если при первом выполнении оператора while значение <условие> ровно false, тогда <тело цикла> не выполнится ни разу.

При выполнении оператора while необходимо следить за тем, чтобы в <теле цикла> были предусмотрены действия, которые изменят правильность <условие> (на каком шаге), иначе выполнение <тела цикла> будет повторяться бесконечно.

 

Например,

i: = 1; {здесь <тело цикла> содержит один

while i <10 do write (i) i = i + 1; оператор; условие i <10 истинно всегда,

поэтому цикл бесконечный}

  1. Оператор цикла с после условия

формат:

repeat <тело цикла> until <условие>;

где <условие> — выражение логического типа, <тело цикла> оператор или группа операторов (которую необходимо объединять в операторные скобки).

Если <условие> имеет значение false, в случае выполнения <тело цикла> повторяется; в противном случае управление передается на оператор, следующий за until <условие>, то есть выполнение <тело цикла> повторяется до тех пор, пока значение <условие> не станет равным true.

 

Например,

 

i: = 1;

repeat i = i + 1; write (i) {будут напечатаны значения от 2 до 11}

until i> 10;

 

В операторе repeat <тело цикла> выполняется хотя бы один раз независимо от значения <условие>.

При выполнении оператора repeat также надо следить за тем, чтобы в <теле цикла> были предусмотрены действия, которые изменят правильность <условие> (на каком шаге), иначе выполнение <тело цикла> будет повторяться бесконечно.

Циклы могут быть вложенными; количество вложений ограничивается только объемом доступной памяти.

 

Пример 4.1. Вычислить значение N!

 

Алгоритм решения этой задачи реализует типе ческий подход к вычислению выражения с накоплением.Используемые переменные:

n — целое число, для которого надо вычислить N!;

f — результат;

i — параметр цикла.

Блок-схема алгоритма приведена на рис. 4.1.

 

Программа 4.1.1. (программа, использующая оператор цикла for-to):

 

uses crt;

var n, f, i: integer;

begin

write ( ‘введите значение n:’); readln (n);

f = 1;

for i: = 2 to n do f = f * i;

writeln ( ‘значение n! = ‘, F)

end.

 

Результаты работы программы:

Введите значение n 5

Значение n! = 120

 

Программа 4.1.2 (программа, использующая оператор цикла for-downto):

 

uses crt;

var n, f, i: integer;

begin

write ( ‘введите значение n:’); readln (n);

f = 1;

for i = n downto 2 do f = f * i;

writeln ( ‘значение n!= ‘, F)

end.

 

Результат работы программы 4.1.2 такой же, как и в программе 4.1.1.

 

 

Рис. 4.1

 

Пример 4.2. Заданная последовательность неотрицательных целых чисел, за которой следует отрицательное число (это число не является членом последовательности). Определить количество нулей в этой последовательности.

Обозначим количество нулей последовательности целой переменной k. Члены последовательности будем вводить в целую многочисленную переменную n. Мы видим, что такой подход возможен, потому что сами числа не надо запоминать для последующей обработки.

Блок-схема алгоритма приведена на рис. 4.2.

 

Рис. 4. 2

 

При реализации алгоритма используется оператор цикла с предпосылками. Выходные данные: 2; 0, 91, 0, 34, 5, 0, -4.

 

Программа 4. 2.

 

uses crt;

var n, k: integer;

begin

write ( ‘введите целое число:’);

readln (n);

k = 0;

while n> = 0 do begin if n = 0 then k = succ (k)

write ( ‘введите следующее целое число:’);

readln (n) end;

writeln;

writeln ( ‘в дан и и последовательности нулей:’, k)

end.

Результаты работы программы:

 

Введите следующее целое число: 2

Введите следующее целое число: 0

Введите следующее целое число: 91

Введите следующее целое число: 0

Введите следующее целое число: 34

Введите следующее целое число: 5

Введите следующее целое число: 0

Введите следующее целое число: — 4

В данной последовательности нулей: 3

 

Пример 4.3. Найти первый отрицательный член последовательности cos (ctg n), n = 1, 2, 3, …

Введем обозначения:

u — очередной член последовательности (real),

n — его номер (integer).

Блок-схема алгоритма представлена ​​на рис. 4.3.

 

программа 4.3

 

uses crt;

var

n: integer;

u: real;

begin

n = 0;

repeat

n = n + 1; u = cos (cos (n) / sin (n))

until u <0;

writeln ( ‘первый отрицательный член имеет номер «, n);

writeln ( ‘его значение равно’, u: 10: 7)

end.

 

Результаты работы программы:

первый отрицательный член имеет номер 6;

его значение равно — 0,9568718.

 

Рис. 4.3

 

Вопросы для самопроверки

 

  1. Которая алгоритмическая структура называется цикл ичной?
  2. Какой цикл называется арифметическим, iтерацийним?
  3. Объясните порядок работы операторов цикла с параметром. Тип данных допустимый параметр цикла?
  4. Сколько операторов допускается в теле цикла for?
  5. Как рассчитывается очередное значение параметра циклов for?
  6. Объяснить порядок работы оператора цикла с предусловием (while).
  7. Объяснить порядок работы оператора цикла с постусловием (repeat). Надо группу операторов тела цикла заключать в операторные скобки?

 

варианты заданий

 

  1. Данные натуральные числа N и M. Найти их наибольший общий делитель.
  2. Данная последовательность из N целых чисел. Определить, Сколько положительных чисел встречается в первый в идьемного числа.
  3. Данная последовательность из N целых чисел, среди которых есть 0. Определить, сколько цифр идет до 0.
  4. Данная последовательность произвольных натуральных чисел, за которой следует 0. Найти сумму этих чисел.
  5. Дано целое число N. Найти сумму цифр этого числа.
  6. Дано целое число N> 0. Найти наибольшее целое число, для которого выполняется условие 2 k <N.
  7. Дано целое число N. Найти первую цифру этого числа.
  8. Дано целое число N. Поменять местами первую и последнюю цифры этого числа.
  9. Данная последовательность натуральных чисел (1, 2, …). Какое минимальное количество нечетных чисел нужно добавить чтобы их сумма стала более 150?

10.Данная последовательность из нулей и единиц. Определить, количество которых цифр раньше достигнет 10.

  1. Данная последовательность положительных и отрицательных чисел. Определить, сумма которых чисел (по модулю) ранее превысит 20.
  2. Данная последовательность действительных чисел. Определить, сколько положительных чисел расположено между первыми двумя отрицательными.
  3. Данные действительные числа a и b. Определить первые целое число, принадлежит интервала (a, b), что делится на 5.
  4. Определить первый номер N, для которого выражение y = -20 -6n + N 3 станет больше 0 (N = 1, 2, 3, …).
  5. Данная последовательность натуральных чисел (1, 2, …). Определить, сколько нечетных чисел, не кратен 3, надо добавить, чтобы их сумма стала более 200.
  6. Данная последовательность произвольных действительных чисел Х 0, A 0, A 1, …, A n и целое число N> 0.Вычислить значение многочлена A + A 1 × x + …, + A n × x n в точке X = X (использовать схему Горнера).
  7. Дано целое число N> 0 и за ним последовательность из N действительных чисел. Найти произведение максимального и минимального членов этой последовательности (число N не является членом послидовностi).
  8. Дано целое число N> 0 и за ним последовательность из N действительных чисел. Найти номер наибольшего из них (число N не является членом последовательности).
  9. Данная последовательность произвольных натуральных чисел, за которой следует 0. Найти разницу между наиб ильшим и наименьшим из этих чисел.
  10. Дано целое число N> 0 и за ним последовательность из N действительных чисел. Определить в этой последовательности самый большой член и количество членов, равных ему (число N не является членом последовательности).
  11. Дано целое число N> 0 и за ним последовательность из N действительных чисел. Найти наиб ильшу разницу между двумя соседними числами (число N не является членом последовательности).
  12. Данная последовательность произвольных натуральных чисел, за которой следует 0. Проверить, является ли эта последовательность возрастающей.
  13. Данные два натуральных числа N и M. Определить количество совпадающих цифр, находящихся в одинаковых разрядах.
  14. Данная последовательность произвольных натуральных чисел, за которой следует 0. Найти доли наибольшего и наименьшего из них.
  15. Данная последовательность из N произвольных чисел. Определить, есть ли в ней два одинаковых числа, идут подряд.
  16. Данная последовательность из N произвольных чисел. Определить, есть ли в ней число, равное первом члену этой последовательности.
  17. Данная последовательность из N произвольных действительных чисел. Найти наибольшее из чисел, по модулю меньше двух.
  18. Данная последовательность произвольных действительных чисел, среди которых есть хотя бы два нуля. Определить, сколько чисел находится между первыми двумя нулями.
  19. Данная последовательность произвольных натуральных чисел, за которой следует 0. Найти среднее геометрическое чисел, больших 5.
  20. Данная последовательность из N произвольных чисел. Определить, является ли она убывающей.

31 — 60. Составить программу табулирования функции y = f (x) на интервале [а; b] с шагом h = (b-a) / N, где N — целое число (вводится с клавиатуры). В программе предусмотреть вычисления величин, указанных в вapiaнтаx задач. По составленной программе провести вычисления.

 

п / п

y = f (x) интервал Величины, которые необходимо вычислить
a b
1 2 3 4 5
31. y = x 2 + 16 / x-16 1 4 среднее арифметическое всix в
32. y = arctgx 2 сумму и количество 0,71 <у <2
33. y = ln (2 + sin 2 x) 4 сумму в> 1 i количество в <1
34. y = xln (l + x) 1 6 количество i произведение в <100
35. у = хе 2x 6 среднее арифметическое 1 <у <7,9
36. y = arctgx / (l + x 2) 1,5 сумму в <0,4 i произведение в> 0,4
37. y = sin2x / (l + x 2) 6 сумму y <0 i количество в> 0
38. y = xe x -2 3 сумму i произведение в> 0
39. y = lnx + arctgx 0,5 2 среднее геометрическое в> 0,3
40. y = (e x -e -x) / 2 0,3 2 произведение в> 1 i сумму в <1
41. y = xlnx 1 10 среднее геометрическое в> 5
42. y = lnx + cos2x 1 1,5 среднее арифметическое в> 0,3
43. y = (e x + e -x) / 2 -1 2 сумму i количество в> 2
44. y = arccosx 0,1 0,6 сумму i количество в <1,3
45. y = (4-x) 4 / x 2 1 4 количество в <0,5 i в> 0,5
46. y = e -x 1 количество i произведение y> 4,12
47. у = 1n (2 + х) 2 3 сумму i произведение y <0,95
         

 

продолжение таблицы

1 2 3 4 5
48. у = 3-х-4 / (x + 2) 2 -1 2 количество y <0 i y> 0
49. y = (lnx) / x 1 2 количество i сумму 0,2 <y <0.5
50. y = x / arcsinx 0,5 1 суммы y> -0,1 i y <-0, l
51. y = (sinx + x 2) / lnx 2 4 количество y> 8,3 i y <8,3
52. y = xe x sinx 1 среднее геометрическое 0 <y <0.7
53. y = lnx + arctgx 1 2 сумму i произведение 0,5 <y <1,5
54. y = xe -x 1 2 произведение i количество 0 <y <0.3
55. y = ln (l + x 2) 2 произведение i сумму y> 1
56. y = 8x + 4 / (x-2) 0,5 2 количество i произведение y <1,3
57. y = xsin 2 x 1,5 сумму i количество в> 0,3
58. y = e x sinx 3 среднее арифметическое y> 2,15
59. y = sin 2 x 3 среднее геометрическое у> 0
60. y = arctgx 2 среднее арифметическое 0 <в <0,5

 

 

Лабораторная работа №5

 

Тема. Обработка одномерных массивов.

Цель работы. Ознакомиться с понятием одномерного массива как одного из структурных (регулярных) типов данных; изучить средства описания одномерных массивов, а также действия над массивами и их элементами; научиться применять полученные знания при решении задач с использованием одномерных массивов.

 

Краткие теоретические сведения и методические указания

 

Массив — это структурный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип. Число элементов массива фиксируется при его описании. Доступ к каждому отдельному элементу массива осуществляется путем индексирования его элементов. Индексы составляют выражения любого скалярного типа, множество значений которого перечислены и ограниченно.

Любой массив, использованный в программе, должен быть объявлен (описан) в блоке объявлений. Одномерной массив описывается так:

 

формат:

 

Type

<Имя типа> = array [<тип индекса>] of <тип компонент>;

Var

<Iдентификатор …> <имя типа>;

 

где <имя типа> не следует допускать чтобы совпадало с зарезервированными словами; <Тип индекса> — любой скалярный тип (стандартный или пользователя), кроме real и integer; <Тип компонент> — любой.

Мы видим, что <тип индекса> может быть ограничен на базе типа integer.

 

Например,

 

Type

mass = array [1 .. 10] of real;

day = (пн, вт, ср, чт, пт, сб, вс)

komp = array [day] of boolean;

Var

a, b: mass;

k1: komp;

Здесь описано два регулярных типа: mass и komp. К элементам массивов a и b можно обратиться так: a [1], a [2], …, a [10], b [1], b [2], …, b [10].

К элементам массива k1 можно обратиться так: k1 [пн], k1 [Вт], …, k1 [вс].

Массив может быть описан и без представления типа в разделе Type, а непосредственно в разделе Var.

 

формат:

Var

<Iдентификатор>: array [<тип индекса>] of <тип компонент>;

 

Например,

 

Var

a, b: array [1 .. 10] of real;

k1: array [day] of boolean;

 

Для описания массива можно использовать заранее известны константы (в виде индексов):

 

Const

i1 = 4; i2 = 15;

Var

mas: array [i1 .. i2] of integer;

 

Над одномерными массивами допустимы такие действия

 

а) присвоение, например, а = b;

б) операция «ровно»: a = b. Результат этой операции равен true, если значение каждого элемента массива a равно соответствующему значению массива b;

в) операция «не ровно»: a <> b. Результат этой операции равен true, если хотя бы одно значение элемента массива a не ровно значению соответствующего элемента массива b. Массивы, принимающих участие в этих действиях, должны иметь одинаковые типы индексов и одинаковые типы компонент.

Действия над элементами массива выполняются так же, как и над простыми переменными соответствующих типов. Ввода-вывода, а также обработка одномерных массивов осуществляется, как правило, с использованием простых (иногда вложенных) циклов.

 

Например,

 

for i: = 1 to 10 do

begin

read (a ([i], b [i]);

{Поочередное введение элементов массивов}

c [i] = a [i] + b [i];

{суммирования соответствующих элемент и в массивов}

end

 

При описании массивов надо помнить, что каждая переменная может быть описана не более одного раза, поэтому нельзя одни и те же имена использовать в виде имени массива и имени простой переменной одновременно.

 

Пример 5. 1

Данная последовательность из 10 действительных чисел. Определить, сколько в н й нулей.

Для решения примем следующие обозначения: a — массив из 10 вещественных чисел, i — индекс и параметр цикла (integer), k — счетчик количества нулей (integer).

 

Блок-схема алгоритма представлена ​​на рис. 5.1.

 

программа 5.1

 

uses crt;

var

a: array [1 .. 10] of real; {Тип индекса ограничен}

i, k: integer;

 

Рис. 5.1

 

{Для индекса i допустимый тип integer, потому что этот тип является базовым для ограниченного типа 1 .. 10; в общем случае переменная, используемая в виде индекса, должна иметь тип, совпадающий с <типу индекса>}

 

begin k: = 0;

writeln ( ‘введите элементы массива:’);

for i: = 1 to 10 do begin read (a [i]);

if a [i] = 0 then k = k + 1

end;

writeln; writeln ( ‘в последовательности:’);

for i: = 1 to 10 do write (a [i]: 6: 2)

writeln; writeln ( ‘нулив- «, k)

end.

 

Результаты работы программы:

Введите элементы массива: -4.2, 5.35, -0.3, 0, 0, 15, 28.4 0, 11.3 0.

В последовательности: -4.20, 5.35, -0.30, 0.00, 0.00, 15.00, 28.40, 0.00, 11.30, 0.00.

Нулей: 4.

 

Вопросы для самопроверки

 

  1. Что такое массив?
  2. Как описывается одномерной массив?
  3. Каким может быть тип индекса, компонент массива?
  4. Может тип индекса быть real, integer пользователя?
  5. Действия допустим и над массивами, над элементами массивов?
  6. Тип должна иметь переменная, используемая в виде индекса?

 

Задача к работе

 

  1. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти наибольшее из чисел с четным номером.
  2. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти наименьшее из чисел с нечетным номером.
  3. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти наибольшее из квадратов этих чисел.
  4. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти наименьшее из последовательности a (1), a (2) 12 a (3) 13, …, a (N) 1N.
  5. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти ближайшее число к среднему арифметическому этих чисел.
  6. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество четных чисел.
  7. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти произведение положительных чисел.
  8. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество отрицательных чисел.
  9. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму квадратов нечетных чисел.
  10. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти разницу между произведением положительных и произведением отрицательных.
  11. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество чисел меньших среднего арифметического.
  12. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму чисел больших среднего арифметического.
  13. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти, есть ли в этой последовательности число равно среднему арифметическому.
  14. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество отрицательных чисел меньших (по модулю) своего номера (i <|a (i) | <0).
  15. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму нечетных чисел.
  16. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество чисел кратных 5, и не кратных 3.
  17. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество чисел, которые при делении на 7 дают остаток 1 или 5.
  18. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество чисел, которые принадлежат отрезку [a, b].
  19. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество чисел, которые не относятся отрезке [a, b].
  20. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество чисел, которые удовлетворяют условию i <a (i) <2 i.
  21. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество чисел, которые удовлетворяют условию a (i) <(a (i-1) + a (i + 1)) / 2
  22. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти произведение чисел кратных 3.
  23. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму чисел, имеющих нечетные порядковые номера и являются парными.
  24. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти произведение чисел, принадлежащих отрезку [0,10].
  25. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти произведение чисел, не принадлежащих отрезке [2,8].
  26. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество чисел, которые являются двойными парными числами.
  27. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество четных чисел кратных 3.
  28. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму нечетных чисел, кратных 4.
  29. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти разницу между суммами четных и нечетных чисел.
  30. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество четных чисел, которые удовлетворяют условию i <a (i) <2 i.
  31. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти наименьшее из произведений этих чисел.
  32. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти наиболее отдаленное число среднего арифметического этих чисел.
  33. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество нечетных чисел.
  34. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму отрицательных чисел.
  35. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество положительных чисел.
  36. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму чисел меньших среднего арифметического.
  37. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество отрицательных чисел больших (по модулю) своего номера (0 <|a (i) | <i).
  38. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти наименьшее из чисел с четным номером.
  39. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти произведение отрицательных чисел.
  40. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму квадратов четных чисел.
  41. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму произведения положительных и произведения отрицательных.
  42. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N).  Найти количество чисел больших среднего арифметического.
  43. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму четных чисел.
  44. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Определить, есть ли числа, которые лежат на концах отрезка [a, b].
  45. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму чисел кратных 5.
  46. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму чисел, имеющих четные порядковые номера и является нечетными.
  47. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму чисел, принадлежащих отрезку [0,10].
  48. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму чисел, не принадлежащих отрезке [2,8].
  49. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти разницу между произведениями четных и нечетных чисел.
  50. Задано последовательность из N чисел: a (1), a (2), a (3), …, a (N). Найти сумму четных чисел.

 

 

Лабораторная работа №6

 

Тема. Обработка двухмерных массивов.

Цель работы. Изучить средства задания многомерных, в частности, двухмерных массивов, научиться применять алгоритмы обработки двухмерных массивов для решения задач.

 

Краткие теоретические сведения и методические указания

 

Задание многомерных массивов в языке Pascal отличается от их задания в других языках программирования. Pascal открывает практически неограниченные возможности по организации обработки таких структур данных. Особое внимание надо обратить на тот факт, что Багатова Ирни массивы могут рассматриваться и как массивы с массивов, иногда позволяет существенно упростить их обработку, сделать программу компактной и наглядной.

Исходя из этого, а также учитывая материал лабораторной работы №4, описание двухмерных массивов можно осуществить следующим образом.

 

Формат.

 

Type

<Имя типу_1> = array [<тип iндексу_1] of <тип компонент>;

<Имя типу_2> = array [<тип iндексу_2>] of <имя типу_1>;

Var

<Iдентификатор> <имя типу_2>;

 

или

 

Type

<Имя типа> = array [<тип iндексу_1>] of array [<тип iндексу_2>] of <тип компонент>;

 

Var

<Iдентификатор> <имя типа>;

 

Например,

 

Type

mas = array [-5 .. 5] of real;

matr = array [1 .. 10] of mas;

Var

a: matr;

 

или

Type

matr = array [1 .. 10] of array [-5 .. 5] of real;

Var

a: matr;

Здесь массив a рассматривается как одномерной массив, каждый элемент которого в свою очередь также является одномерной массивом. При обработке двум и рного массива a, обращение к его элементам можно осуществлять как к элементам одномерного массива, например, a [1] — первая строка массива a (кроме процедур ввода-вывода).Обращение же к скалярному элемента массива a осуществляется по имени этого массива и двух индексам, например, a [i] [j] или a [i, j], где i, j — индексы.

На практике чаще применяется другой способ описания двухмерных массивов, имеет более наглядную форму.

 

Формат.

 

Type

<Имя типа> = array [<тип iнд_1, <тип iнд_2>] of

[<Тип компонент>];

Var

<Iдентификатор> <имя типа>;

 

Например,

 

Type

day = (пн, вт, ср, чт, пт, сб, вс)

mas = array [day, 1 .. 10] of real;

Var

a, b: mas;

 

<тип iндексу_1> и <тип iндексу_2> могут быть разными.

Двумерные массивы можно описать и неявно (без нанесения имя типа) непосредственно в разделе описания переменных.

 

 

 

Например,

 

Var

v1: array [1 .. 10] of array [1 .. 10] of real;

a, b: array [-4 .. 4, 1 .. 10] of integer;

 

Обращение к элементам двухмерных массивов удобнее осуществлять так: v1 [i, j], a [i, j], b [i, j] (если i, j — индексы).

Действия над многоме рнимы массивами и их элементами выполняются так же, как и над одномерной.Ввода-вывода, а также обработка двухмерных массивов выполняется, как правило, с использованием вложенных циклов.

При обработке двухмерных массивов необходимо ввести в разделе описания переменных крайней мере еще две переменные для обращения к конкретным элементам массива.

 

Пример 6. 1.

 

Для целочисленной квадратной матрицы размерностью 4 ‘4 поменять местами первую и последнюю, а также второй и третий строки.

Решение. Введем тип matrix, в котором определим нужную структуру данных. Для этой цели мы там же введем вспомогательную структуру stroka, в как и определим одномерной массив из 4-х элементов.Таким образом, тип matrix будет задан как одномерной массив из строк матриц и.Такое представление облегчит решение поставленной задачи. В разделе описания переменных введем а как имя исходной и результирующей й матрицы, i, j — для обращения к ее элементов при вводе и выводе, а также вспомогательные переменные r типа stroka и k-типа integer для би льш удобного процесса перестановки строк .Здесь как раз будет использоваться тот факт, что в памяти ЭВМ двум и рный массив хранится по строкам, то есть то, что отражено при задании соответствующей структуры matrix.Мы видим, что в случае манипулирования со столбцами массива такое представление ничего не давало бы, в силу выше сказанного.

Введение исходного массива осуществим, используя два вложенных цикла. Вывод элементов данного массива и массива-результата осуществим также, однако для представления их в вид и прямоугольной таблицы вывода элементов строк во внутреннем цикле осуществим с помощью оператора write, а для обеспечения перехода на новую строку после завершения печати текущей строки добавим оператор writeln.

Блок-схема алгоритма представлена ​​на рис. 6. 1.

 

Рис. 6.1

программа 6.1

uses crt;

type

stroka = array [1 .. 4] of integer;

matrix = array [1 .. 4] of stroka;

var

a: matrix; {Начальная матрица}

r: stroka; {Одномерной массив}

i, j, k: integer;

begin {Введение элементов исходного массива}

for i: = 1 to 4 do

for j = 1 to 4 do read (a [i, j]); {Вывод элементов исходного массива}

writeln ( ‘начальный массив:’);

for i: = 1 to 4 do

begin

for j = 1 to 4 do write (a [i, j]: 4);

writeln

end; {Обработка массива}

k = 3;

for i: = 1 to 2 do

begin r = a [i + k];

a [i + k] = a [i];

a [i] = r;

k = 1

end;

{Вывод элемент и в массива — результата}

writeln;

writeln ( ‘результат:’);

for i: = 1 to 4 do

begin

for j = 1 to 4 do write (a [i, j]: 4);

writeln

end

end.

 

Результаты работы программы:

Начальный массив:

1 марта -6 8

0 -5 6 -3

4 мая 7 августа

-2 3 Апреля -4

результат:

-2 3 Апреля -4

4 мая 7 августа

0 -5 6 -3

1 марта -6 8

 

Пример 6.2. В задан й действительной матрицы 5 ‘3 найти наибольший элемент и его индексы.

Решение. Задаем тип matrix как обычную двум и РНУ структуру данных, поскольку представление ее в виде, аналогичном предыдущем задаче, не даст никакого эффекта.Ввод и вывод информации осуществим аналогично предыдущему заданию. Поиск крупнейшего элемента осуществим, используя стандартный способ. При этом в переменную и и max будем хранить значение этого элемента, а переменные l и k используем для обозначения в соответствии с номерами строки и столбца этого элемента (индексов).В виде параметр ов циклов введем также целые переменные j и i.

Блок-схема алгоритма представлена ​​на рис. 6.2.

программа 6.2

uses crt;

type

matrix = array [1 .. 5, 1 .. 3] of real;

var

a: matrix; {Начальная матрица}

i, j: integer; {Параметры цикла}

max: real; {Максимальный элемент}

l, k: integer; {Индексы максимального элемента}

begin

{Введение элементов начальной матриц и}

for i: = 1 to 5 do

for j = 1 to 3 do read (a [i, j]);

{Вывод элементов начальной матриц и}

writeln ( ‘начальная матрица:’);

for i: = 1 to 5 do

begin

for j = 1 to 3 do write (a [i, j]: 8: 3);

writeln; end;

{Поиск максимального элемента}

max = a [1, 1]; l: = 1; k: = 1;

for i: = 1 to 5 do

for j = 1 to 3 do

if a [i, j]> max then begin max = a [i, j];

l = i; k = j

end;

{Вывод результатов:}

writeln;

writeln ( ‘наибольший элемент матрицы «, max: 8: 3);

writeln ( ‘в и н есть в «, l,’ строке,», k, ‘столбцов и’)

end.

Рис.6.2

Результаты работы программы:

Начальная матрица:

2,000 -5,800 -34,900

0,450 -3,560 5,760

2,120 2,320 3,610

-0,080 4,710 9,930

0,680 0,560 7,290

 

Наибольший элемент матрицы равен 9,930 находится в 4 строке, 3 столбца.

Вопросы для самопроверки

 

  1. Как задается двухмерный, многомерный массивы?
  2. Можно описывать многомерные массивы непосредственно в разделе описания переменных?Если можно, тогда как?
  3. Как осуществляется обращение к элементам двухмерных массивов?
  4. Какие действия можно выполнять над многоме рнимы массивами?Над их элементами?
  5. Могут <типы индекс> многомерных массивов быть различными?

 

Задача к работе

 

 

 Лабораторная работа №7

 

Тема. Процедуры и функции

Цель работы. Ознакомиться с понятием процедур и функций и изучить средства описания процедур и функций, а также действия над ними; научиться применять полученные знания при решении задач с использованием процедур и функций.

 

Краткие теоретические сведения и методические указания

 

Процедуры и функции позволяют включать в основной программный блок вспомогательные блоки.Каждое объявление процедуры или функции имеет заголовок, за которым следует блок.

 

  1. объявления процедур

 

Объявления процедуры позволяет связать идентификатор с блоком процедуры.Процедура состоит из заголовка процедуры и операторной части (тела) процедуры.

В заголовке процедуры указывается имя процедуры и описывается список формальных параметров (если он присутствует).

Запуск процедуры осуществляется с помощью оператора процедуры, в котором находятся имя процедуры и фактические переменные.Операторы, которые должны выполняться при запуске процедуры, используемые в операторной части блока процедуры. Если в операторе процедуры внутри блока процедуры используется идентификатор процедуры, то процедура будет выполняться рекурсивно (при выполнении будет обращаться сама к себе).

 

Пример объявления процедуры

 

Procedure NumString (N: Integer; var S: String);

var

V: Integer;

Begin

V = ABS (N);

S: = »;

Repeat

S = CHR (N mod 10 + ord ( ‘0’)) + S;

N = N div 10;

Until N = 0

If N <0 then

S: = ‘-‘ + S;

End;

 

  1. объявления функций

 

Объявления функций определяет часть программы, в которой вычисляется значение, которое возвращается через имя функции. В заголовке функции находится идентификатор для функции, формальные параметры (если они присутствуют) и тип результата функции.

Функция активизируется с помощью вызова функции или вычислением. Вызов функции имеет идентификатор функции и необходимые фактические параметры. Функция выполняется при вычислении выражения, а его значение становится значением функции.

Операторная часть блока функции имеет операторы, которые выполняются при активизации функции. Блок должен иметь по крайней мере один оператор присваивания, в котором присваивается значение идентификатору функции. Результатом выполнения функции будет последнее присвоенное значение. Если такого оператора нет, то значение, которое возвращается функцией будет неопределенным. Если идентификатор функции используется для вызова функции в середине блока функции, то функция будет выполняться рекурсивно.

 

Пример объявления функции:

function Max (A: Vector, N: Integer): Extended;

var

X: Extended;

I: Integer;

begin

X = A [I];

for I: = 2 to N do

if X <A [I] then X = A [I];

Max = X;

end;

function Power (X: Extended; Y: Integer): Extended;

var

Z: Extended;

I: Integer;

begin

Z = 1.0;

I = Y;

while I> 0 do

begin

if Odd (I) then Z = Z * X;

I = I div 2;

X = Sqr (X);

end;

Power = Z;

end;

  1. параметры

 

Объявления процедуры или функции имеет список формальных параметров.Каждый параметр, объявленный в списке формальных параметров, относится к объявленной процедуры или функции. На него можно ссылаться с помощью идентификатора в блоке, связанном с процедурой или функцией.

Существует три вида параметров: значение, изменения и нетипованих изменений.Они характеризуются:

—       группой параметров без ключевого слова VAR и с последующим за ней типом является списком параметров — значений;

—       группой параметров с ключевым словом VAR и с последующим за ней типом является списком параметров — переменных

—       группой параметров с ключевым словом VAR и без типа является списком нетипованих параметров переменных.

 

  1. процедурные типы

 

Как расширение стандартного Pascal, Тurbo Pascal позволяет рассматривать процедуру и функцию как объекты, которые можно присвоить переменным и которые могут выступать в качестве параметров — процедурные типы дают такую возможность.

 

  1. процедурные переменные

 

Как только процедурный тип определен, возможно объявлять переменные этого типа. Такие переменные называются процедурными. Например, используя приведенное ранее объявления типа, позволяет описать следующие переменные:

Var

P: SwapProc;

P: MathFunc;

Подобно тому, как целочисленной переменной можно присвоить целочисленное значение, процедурной переменной можно присвоить процедурное значение.

Например, данные объявления процедур и функций:

{$ F +}

Procedure Swap (var A, B: integer)

var

Temp: Imteger;

begin

Temp = A;

A = B;

B = Temp;

end;

Function Tan (Angle: Real): Real;

begin

Tan = sin (Angle) / cos (Angle)

end;

{$ F-}

Переменным Р и F, объявленным ранее, можно присвоить значение:

 

P = Swap; T = Tan;

Согласно этим присвоением, вызов P (I, J) эквивалентен вызова Swap (I, J), а вызов F (X) эквивалентен вызова Tan (X).

Как и во всех других операциях присвоения, изменения в левой части и изменения в правой части оператора присваивания должны быть совместимыми с присвоением. Как отмечалось ранее, названия параметров не имеют значения, когда проверяется совместимость типа процедуры.

Стандартные процедуры и функции, такие как WRITELN, READLN, CHR и ORD, объявленные в модуле SYSTEM. Для того, чтобы использовать стандартную процедуру или функцию с процедурной переменной, ее надо огородить «оболочкой». Например, заданный тип процедуры:

Type

IntProc = procedure (N: Integer);

Затем приведена совместима по присвоению процедура для вывода целого числа:

Procedure WriteInt (Nunber: Integer) far;

begin

write (Number)

end;

Вложенные процедуры или функции нельзя использовать с процедурными переменными. Процедура или функция называется вложенной, если она объявлена ​​в середине другой процедуры или функции. В следующем примере Inner вложена в Outer, отсюда следует, что Inner невозможно присвоить процедурной переменной:

 

progrom Nested;

procedure Outer;

procedure Inner;

begin

Writeln ( ‘Inner is nested’);

end;

begin

Inner;

end;

begin

Outer;

end.

Использование процедурного типа не ограничивается простыми процедурными переменными. Так, по другой процедурный тип может находиться в объявлении структурного типа:

 

пример:

type

GoToProc = procedure (X, Y: Integer);

ProcList = array [1..10] of GoToProc;

WindowPtr = ^ WindowRec;

Window = record

Next: WindowPrt;

Header: String [31];

Top, Left, Bottom, Right: Integer;

SetCursor: GoToProc;

end;

var

P: ProcList,

W: WindowPtr;

 

Согласно этому объявлению процедуры операторы являются действующими вызовами процедуры:

P [3] (1,1)

W ^.SetCursor (10,10)

Когда процедурное значение присваивается процедурной переменной, физически представляет собой адрес процедуры, то оно сохраняется в переменной. Фактически процедурная переменная действует как переменная — показатель за исключением того, что вместо указания на данные, она указывает на процедуру или на функцию. Как и показатель, процедурная переменная занимает 4 байта (два слова), которые находятся в памяти. Первое слово сохраняет смещение адреса, второе — сегментный часть.

 

Задача к работе

 

  1. Даны векторы a и b, состоящие из семи компонентов. Найти max (max (A i), max (B i), max (|A i -B i |), max (A i + B и), 1).
  2. Даны векторы a и b, состоящие из семи компонентов. вычислить:
  3. Даны векторы a и b, состоящие из шести компонент. вычислить:
  4. Даны векторы a и b, состоящие из девяти компонент. вычислить:
  5. Даны векторы a и b, состоящие из десяти компонентов. вычислить:

MAX (A i) × MAX (B i) / MAX (A i + B i).

  1. Даны векторы a и b, состоящие из семи компонентов. вычислить:

MIN (A i) × MIN (B i) / (MIN (A i B i)) 1/2.

  1. Даны векторы a и b, состоящие из пяти компонент. вычислить:

MAX

  1. Даны векторы a и b, состоящие из девяти компонент. вычислить:

(

  1. Даны векторы a и b, состоящие из десяти компонентов. вычислить:

(MIN (A i + B i) + MAX (A i -B i)) / (MIN (A i) + MAX (B i))

  1. вычислить:
  2. вычислить:
  3. вычислить:
  4. вычислить:
  5. вычислить:

n !! × m !!/ (Nm) !!, n10, m 10 n m.

  1. Даны векторы a и b, состоящие из семи компонентов. вычислить:

.

  1. Даны три числа a, b, c. Найти наименьшее общее кратное.
  2. Дан треугольник со сторонами a, b, c. Найти высоты треугольника построенного с высот заданного.
  3. Данная матрица A (6 ‘5).Ïîñòðîèòü âåêòîð, ñîñòîÿùèé èç ñàìûõ ýëåìåíòîâ ñòðîê ìàòðèöû. (Ïîèñê íàèìåíüøåãî ýëåìåíòà îôîðìèòü â âèäå ïðîöåäóðû).
  4. Данная матрица A (4 ‘5).Ñîðòèðîâàòü âñå ñòîëáöû ïî óáûâàíèþ. (Îôîðìèòü â âèäå ïðîöåäóðû).
  5. Данная матрица A (7 ‘5).Óïîðÿäî÷èòü âñå ñòðîêè ïî óáûâàíèþ. (Îôîðìèòü â âèäå ïðîöåäóðû).
  6. Данная матрица A (4 ‘5).Ïîñòðîèòü âåêòîð, ñîñòîÿùèé èç ñóììû ýëåìåíòîâ ñòîëáöîâ ìàòðèöû.
  7. В трехмерном пространстве даны четыре точки. Определить наименьшее расстояние между ними.
  8. Даны четыре вектора из четырех компонент. Определить наибольшую компонента из крупнейших компонент вектора.
  9. На плоскости даны пять точек, которые образуют выпуклый многоугольник. Найти его площадь. (Разбить на треугольники. Вычисления каждой из площадей оформить в виде подпрограммы).
  10. Даны три вектора, размерностью 5. Определить, какой из них имеет наименьшую длину.
  11. Дана последовательность из 20 цифр. Определить, какая из цифр встречается менее часто.
  12. Даны две последовательности из 20 цифр. Определить, в какой из них цифр меньше.
  13. Сколькими способами можно отобрать команду в составе с 8 кандидатов; из 10 кандидатов; с 11 кандидатов? Подсчет количества способов оформить в виде функции.
  14. В порт в среднем приходит 3 корабля в день. Какова вероятность того, что в порт в день придет 2 корабля; 5 кораблей? Подсчет вероятностей оформить в виде функции.
  15. В партии, состоящей из K изделий, является G с дефектами. Из партии выбирается для контроля R изделий. Какова вероятность того, что ровно S изделий будут с дефектом?
  16. Два треугольника заданные своими сторонами a, b, c. Вычислить площади треугольников по формуле Герона и определить, какой из треугольников имеет большую площадь.
  17. Два треугольника заданные координатами своих вершин a, b, c. Вычислить площади треугольников, не используя формулы Герона, и определить, какой из треугольников имеет большую площадь.
  18. Футболист ударом ноги посылает мяч вертикально вверх с высоты 1м с начальной скоростью 20 м / с. На какой высоте будет мяч через 1; 3, 4 с?
  19. Футболист ударом ноги посылает мяч вертикально вверх с высоты 1м с начальной скоростью 20 м / с. Когда мяч будет на высоте 5; 10 м?
  20. Футболист ударом ноги посылает мяч вертикально вверх с высоты 1м с пoчатковою скоростью 20 м / с. Определить с точностью до 0,25 с, когда и на какой максимальной высоте окажется мяч за 4 с?
  21. Даны действительные числа S, T. Вычислить A = F (T, -2S, 1,17) + F (2.2, T, S-T) где F (A, B, C) = (2A-B-sinC) / (5+ | C ).Âû÷èñëåíèÿ F îôîðìèòü â âèäå ôóíêöèè.
  22. Даны действительные числа S, T. Вычислить B = G (1,2, S) + G (T, S) -G (2S-1, ST), где G (A, B) = (A + B) / (A + 2AB + 3B + 4 ).Вычисления G оформить в виде функции.
  23. Даны действительные числа S, T. Вычислить F = H (1S, T) + MAX (H (ST, ST) — H (1,1)), где H (A, B) = A / (1 + B) + B / (1 + A) — (A-B). Вычисление H оформить в виде функции.
  24. Даны действительные числа A1, A2, …, A9; B1, B2, …, B11. Максимальный элемент первой последовательности заменить на максимальный элемент второй последовательности и наоборот.
  25. Два треугольника заданные координатами своих вершин a, b, c. Вычислить площади треугольников, используя формулы Герона, и определить, какой из треугольников имеет большую площадь.
  26. Чего больше: всех возможных трехзначных чисел, записанных цифрами 1, 2, 3, 4, 5, всех двузначных чисел, записанных цифрами 2, 4, 6, 8; всех четырехзначных чисел, записанных цифрами 1, 3, 7, 8, 9?
  27. Даны действительные числа a, b, c. Вычислить A = MAX (a, a + b) + MAX (a, b + c)) /

/ (1 + MAX (a + bc, 1)).

  1. Даны действительные числа A, B. Вычислить MIN (u + v, 3,14), где u = MIN (a, b), v = MIN (ab, a + b).
  2. Дано целое число K. Найти его факториал.
  3. Данная матрица A (4 ‘5).Ñîðòèðîâàòü âñå ñòîëáöû ïî âîçðàñòàíèþ. (Îôîðìèòü â âèäå ïðîöåäóðû).
  4. Данная матрица A (6 ‘5).Óïîðÿäî÷èòü âñå ñòðîêè ïî âîçðàñòàíèþ. (Îôîðìèòü â âèäå ïðîöåäóðû).
  5. В трехмерном пространстве даны четыре точки. Определить наибольшую расстояние между ними.
  6. Даны три вектора размерностью 5. Определить, какой из них имеет наибольшую длину.
  7. Даны две последовательности из 20 цифр. Определить, в какой из них цифр больше.
  8. Дана последовательность из 20 цифр. Определить, какая из цифр встречается наиболее часто.

 

 

 

Лабораторная работа №8

 

Тема. Обработка строк.

Цель работы. Изучить структурированный тип данных string, научиться обрабатывать данные строчной типа, а также эффективно использовать их для получения и вывода разнообразного рода сообщений.

 

Краткие теоретические сведения и методические указания.

 

Строка — это последовательность символов кодовой таблицы ПЭВМ. При использовании буквенная константа заключается в апострофы.Максимально допустимая длина строки — 255 байт (символов).

Переменную строчной типа можно определить через описание типа в разделе описания типов или непосредственно в разделе описания переменных. Определение строчной типа устанавливает максимальное количество символов, может содержать строку.

Формат.

 

Type

<Имя типа> = string [максимальная длина строки];

Var

<Iдентификатор …> <имя типа>;

или

Var

<Iдентификатор …>: string [максимальная длина строки];

 

Максимальную длину строки нельзя не задавать, тогда она автоматически принимается равной 255.

 

Например,

 

Type

Adress = string [50];

Var

a: Adress; {Длина срочной й переменной a дор и внюе 50 байт}

b: string; {Максимальная длина не задана, следовательно

длина строковой переменной b дор и внюе 255 байт}

 

Для определения памяти в байтах, необходимой для размещения строки, до значения ее максимальной длины добавляем 1. Так, для размещения в памяти переменных a и b требует соответственно 51 и 256 байт. Дополнительный байт расположен в самом начале строки (имеет нулевой номер) и содержит значение текущей длины строки. Рассмотрим структуру размещения строки в памяти на примере. Пусть M — максимальная длина строки, L — текущая длина, A — ком и рКа памяти.Тод и:

A — содержит величину текущей длины;

A + 1 — первый символ;

A + L — последний значимый символ;

L + 1 … + A + M — незанятые ячейки памяти.

 

К отдельным символам строки можно обратиться по номеру этого символа в строке (как к элементу одномерного массива).Например, a [3], b [255]. Значение a (0), b (0) уровне текущ й длине переменных a и b.

Строчный выражение — это выражение, в котором операндами служат строчные данные и операции.Над строковыми данными допустимы следующие операции:

а) конкатенацiя (сцепление), обозначается знаком плюс (+). Наприк строй, выражение «фамилия», + «имя» ривноконстантне «фамилия, имя»;

б) операции отношения (<,>, =, <>, <=,> =) результат выполнения каждой из них имеет тип boolean. При выполнении этих операций необходимо помнить следующее: уравнение строк выполняется слева направо по кодам соответствующих символов и ту строку считается большим, в котором первый символ, не совпадает, имеет больший код. Если при сравнении строк обнаружено конец одного из них, тогда короче строка считается меньше.

Операция сцепления имеет более высокий приоритет, чем операции отношения.

Для присвоения строчной переменной значение строчной выражения используется оператор присваивания, например,

 

Str1 = ‘группа студент и в’;

Str2 = str1;

 

При выполнении оператора присваивания возможны 3 варианта:

а) максимальные длины переменных Str1 и Str2 (заданные в разделе описания) совпадают; в этом случае предыдущее значение переменной Str2 уничтожается, а новое становится равным значению переменной Str1;

б) максимальная длина переменной Str1 меньше максимальной длины переменной Str2; в этом случае старое значение переменной Str2 также полностью стирается и заменяется значением переменной Str1; текущая длина переменной Str2 становится равной текущей длине переменной Str1;

в) максимальная длина переменной Str1 больше максимальной длины переменной Str2; в этом случае переменной Str2 будет присвоено количество символов значения Str1, равное максимальной длине переменной Str2, начиная слева; избыточные символы отбрасываются.Мы видим, что потери значимых символов не произойдет, если текущая длина Str1 не превышает максимальной длины Str2.

Типы string и char сумме сне между собой.Это означает, что во всех местах, где допустимо использование данных строчной типа, допустимо обращение и к данным типа char, и наоборот.

Необходимо только следить за тем, чтобы при присвоеннi строчной выражения переменной типа char длина последовательности символов была равна 1.

Обработка строчных данных имеет определенные отмены от обработки данных других типов. Например, строка с одной стороны может рассматриваться как единое целое для некоторых операций (например, операций ввода, вывода и др.), А с другой стороны, строка может быть обработан как одномерной массив данных буквенных типа.

Рассмотрим процесс ввода данных строчной типа с клавиатуры. Особенность заключается заключается в том, что с клавиатуры необходимо вводить столько символов для каждой переменной строчной типа, максимальная длина этой переменной была задана при ее определении в разделе описания переменных.

 

Например,

 

var

st1, st2: string [10];

begin

…..

read (st1, st2)

….

 

В этом случае необходимо ввести две строки длиной по 10 символов каждый. Если первая строка содержит меньшее количество символов, его нужно дополнить до нужной длины пробелами. В противном случае в др будет дополнен до максимальной длины символами строки st2 и, значит, информация будет введена неверно.

Для большей надежности правильности ввода информации и уменьшения вероятности ошибок при вводе, а также учитывая тот факт, что в большинстве случаев неизвестно, длина строки является динами чно переменной (что приводит к объявление ее с максимально возможной длиной), рекомендуется использовать оператор ввода readln для каждой переменной строчной типа.Этот оператор позволяет вводить только значимые и символы данной строки.В этом случае рассмотренный выше фрагмент программы надо записать так:

 

var

str1, str2: string [10];

begin

readln (st1)

readln (st2)

 

В Паскале существует ряд стандартных процедур и функций, предназначенных для работы с данными строчных типов.Результат выполнения функции присваивается имен и этой функции и в памяти не сохраняется; для сохранения его необходимо выполнить оператор присваивания, в праве и части которого записывается данная функция (аналогично стандартным математическим функциям).Для выполнения процедуры нужно записать только имя этой процедуры со списком необходимых параметр ов.

 

  1. процедура удаления

 

Delete (st, m, n), где st — строка, m — начальная позиция, n Количество удаляемых символов (от начальной позиции включительно).

Например, запись Delete (st, 4, 3) означает, что в строке st, начиная с позиции 4, cли д устранить 3 символа.При этом новая текущая длина строки st станет на 3 меньше, н иж предыдущая.

Если значение m находится вне отрезка 1 … 255, возникнет ошибка выполнения программы; если m больше текущей длины строки, ни один символ отстранен не будет. Если количество символов, подлежащих удалению, превышает реально существующую начальной позиции до конца строки, тогда будет отстранен лишь максимально возможный в данной ситуации фрагмент.

 

  1. процедура вставки

 

Insert (St1, St2, I), где St1 — строка, вставляется, St2 — принимающий строку, I — позиция строки St2, с которого начинается вставка.Например, запись Insert ( ‘plain’, st, 4) означает, что в строку st надо вставить текст «plain», начиная с 4 позиции; при этом символ в 4 позиции строки st передвинется на 5 символов справа.

Если значение I находится вне отрезка 1 … 255, возникнет ошибка выполнения программы; если после вставки новая длина строки St2 превысит ее максимально допустимую длину, значение St2 врезается в максимально допустимой длины (возникает потеря самых правых символов).Если позиция вставки больше текущей длины строки, тогда будет иметь место простая конкатенац ия.

 

  1. Процедура преобразования числового значения в строчное

 

Str (I, st), где I — числовое значение целого или действительного типов, st — строка, в который помещается результат преобразования числа I.

Например, если I = 5, тогда после выполнения этой процедуры строчная переменная st получит значение ‘5’.

После I может записуваватися формат (аналогично форматам вывода). Если в формате указана недостаточная для вывода количество разрядов, место вывода автоматически розширюетьтся до нужной длины.

Например, при I = 1500 ° после выполнения процедуры Str (I: 6, st) результат имеет вид: «1500»; при I = 4 8e + 03 после выполнения процедуры Str (I: 10 st) результат имеет вид: «4800»; при I = 768 после выполнения процедуры Str (-i: 2, st) результат имеет вид: «-768».При задании формата необходимо сл идкуваты, чтобы его размер не превышал максимальной длины строки st, заданного при описании переменной st.

 

  1. Процедура преобразования строчной значение в числовое

 

Val (st, I, Cod) — где st — строка, I — изменение целого или вещественного типа, в которой размещается результат преобразования строки st, Cod — эти лочисельна переменная.Если во время операции преобразования ошибки не обнаружено, значение Cod равно нулю; если ошибка обнаружена (например, буквенных значение переводится в числовое), Cod будет содержать номер позиции первого ошибочного символа, а значение I не определено.

 

примеры

значение st     процедура    результат
«1450»

’14. 2e + 02 ‘

’14. 2fgh «

Val (st, I, Cod)

Val (st, I, Cod)

Val (st, I, Cod)?

1450, Cod = 0

1420, Cod = 0

Cod = 5

 

 

  1. Функция Length (St) — вычисляет текущую длину в символах строки St.Результат имеет целый тип. Например, если St = ‘rte «, тогда результатом функции Length (St) будет число 3.

 

  1. Функция Copy (St, Poz, N) — выделяет из St пи дрядок длиной N символов, начиная с позиции Poz.Переменные Poz и N имеют целочисленный тип. Если Poz> length (St), тогда результатом будет пропуск; если Poz> 255, виника ошибка при исполнении.

примеры

Значение St Функция Результат

«Abcdefg ‘Copy (St, 2, 3)’ bcd»

«Abcdefg ‘Copy (St, 4, 10)’ defg»

 

  1. Функция Pos (St1, St2) — обнаруживает первое появление в строке St2 пи дрядка St1.Результат имеет целый тип и равен номеру той позиции в строке St2, где находится первый символ п и дрядка St1.Если в St2 п и дрядок St1 не найден, то результат равен 0.Например, если St = ‘abcdef’, тогда результатом функции Pos ( ‘de’, st) является число 4, а результат функции Pos ( ‘r’, St) является число 0.

 

  1. Функция Concat (St1, St2, …, Stn) — выполняет сцепление строк St1, St2, …, Stn в том порядке, в котором они указаны в списке.Сумма символов всех сцепленных строк не должна превышать 255. Например, результатом функции Concat ( ‘aa’, ‘xx’, ‘y’) является буквенная величина ‘aaxxy «.

 

  1. Функция Upcase (Ch) — преобразует строчную букву латинского алфавита в большую.Параметр результат имеют тип Char. Например, результатом функции Upcase ( ‘a’) является символ ‘a’.

 

пример 7.1

Задано текст, слова которого разделены пробелом. Выделить и напечатать все слова текста, каждое из строки.

Решение. Введем строчную переменную st, объявив ее длину по максимуму (255 байт). В ц й переменные и будем вводить заданный строку.Введем также строчную переменную w, в которую будем заносить очередное слово строки st, и ц илочисельну переменную p для обозначения позиции очередного пропуска.

Блок-схема алгоритма представлена ​​на рис. 7.1.

 

программа 7.1

 

uses crt;

var

st: string;

w: string;

p: integer;

begin

writeln ( ‘введите текст, разделяя слова пробелом:’);

readln (st)

writeln ( ‘заданный текст:’);

writeln (st)

p = pos ( », st) {Нахождение позиции 1-го пропуска}

writeln;

writeln ( ‘в текст входят слова:’);

while p> 0 do

begin w = copy (st, 1, p-1); {Выделение слова}

delete (st, 1, p) {Удаление слова из текста вместе с пропуском} writeln (w) {Печать выделенного слова}

p = pos ( », st) {Нахождение позиции очередного

пропуска}

end; writeln (st) {Печать последнего слова}

end.

 

Результаты работы программы:

Заданный текст: это программа обработки строк на Pascal.

В текст входят слова:

это

программа

обработки

строк

на

Паскале

 

Вопросы для самопроверки

 

  1. Что такое строку на Pascal?
  2. Как задается строчный тип данных?
  3. Которая максимально допустимая длина строки? Можно задать длину строки меньше максимально допустимого? Если можно, тогда как?
  4. Как можно обратиться к отдельным символам строки?
  5. Как определить текущую длину строки, не используя соответствующую функцию?
  6. Что такое строчный выражение? Допускается в строчном выражении изм ишування операндов строчной и буквенных типов?
  7. Перечислить операции, допустимые над строчными данными.
  8. Стандартные функции процедуры используются для обработки строчных данных?
  9. Можно строчные данные применять в виде <выражения> в операторе case?

 

Задача к работе

 

  1. Ввести свои фамилию, имя и отчество. Определить какие буквы встречаются чаще — гласные или согласные?
  2. Ввести свои фамилию, имя и отчество. Имя и отчество заменить инициалы.
  3. В заданной строке определить слова, взятые в скобки, и удалить их.
  4. В заданной строке определить именно длинное слово и напечатать его.
  5. В заданной строке определить количество слов, которые заканчиваются на заданную букву.
  6. В заданной строке определить именно короче слово и напечатать его.
  7. В заданной строке для каждого слова указать его длину.
  8. В заданной строке определить количество слов (слова могут разделяться одним или несколькими пробелами).
  9. В заданной строке определить, сколько раз встречается заданное слово.
  10. В заданной строке слова разделены пробелом. Заменить все пробелы запятой и пробелом.
  11. В заданной строке определить количество двойных согласных.
  12. В заданной строке определить количество слов, в которых задана буква встречается более одного раза.
  13. В заданной строке все слова разделены несколькими пробелами. Удалить все лишние пробелы.
  14. В заданной строке каждое слово заменить количеством букв в этом слове.
  15. В заданной строке удалить все пробелы.
  16. В заданной строке, слова которого разделены или пробелами, или запятыми, определить количество слов.
  17. В заданной строке заменить все крупные буквы на мaленьки и наоборот.
  18. Напечатать все слова взяты в кавычки.
  19. В заданной строке слова разделены пробелом. Напечатать именно длинное слово.
  20. В заданной строке определить, является ли он идентификатором.
  21. В заданной строке определить, является ли он шестнадцатеричному числом.
  22. Напечатать таблицу умножения в шестнадцатеричной системе счисления.
  23. В заданной строке слова разделены пробелом. Напечатать все слова, которые содержат в себе заданную последовательность символов.
  24. В заданной строке слова разделены пробелом. Заменить в каждом слове первую букву на большую.
  25. В заданной строке слова разделены пробелом. Определить, есть ли в ней слова, которые совпадают с последним словом.
  26. В заданной строке слова разделены пробелом. Заменить группу пропусков другом.
  27. В заданной строке, представляющий собой выражение, содержащий в себе только числа и знаки «+» и «-«, вычислить значение выражения.
  28. В заданной строке напечатать все числа, которые содержатся в строке.
  29. В заданном тексте удалить часть текста, взятую в квадратные скобки.
  30. Определить, сколько слов в тексте начинаются на букву А. Слова разделены запятыми.
  31. Определить, сколько раз в тексте встречается буква К.
  32. В заданном тексте заменить слово S1 на S2.
  33. Определить в тексте и напечатать именно короткое слово.
  34. Определить, сколько слов в тексте заканчивается двойной согласной.
  35. Какая буква в заданном тексте встречается чаще — А В?
  36. Определить, есть ли заданный текст правильным записью целого числа.
  37. С заданного текста удалить все цифры.
  38. В заданном тексте определить количество слов, которые заканчиваются на букву А.
  39. В заданном тексте определить количество слов, которые начинаются и заканчиваются одной и той же буквой.
  40. В заданном тексте определить количество слов, которые содержат ровно три буквы Е.
  41. Подсчитать, сколько раз в тексте встречается заданное слово (слова разделены пробелом).
  42. Текст задан следующим образом: первый символ — цифра, указывающая на длину первого слова, по первому слову — опять цифра, указывающая длину второго слова (длина каждого слова 9) и т.д. Выписать К-е слово в тексте (значение К задавать в входной переменной).
  43. С заданного текста удалить все лишние пробелы.
  44. Проверить, входит в заданный текст каждая из букв слова KEY.
  45. Проверить, входит в заданный текст буква А. печати букву текста, которая идет сразу за первой буквой А (если буква А не является последней в тексте).
  46. В заданном тексте удалить все буквы В, стоящие сразу после буквы С.
  47. Проверить, являются значениями символьных переменных С2, С1, С0 цифры. Если да, то присвоить числовой переменной К число, составленное из этих цифр.
  48. Задано целое число. Записать это число словами.
  49. Определить, какая из букв больше встречается в заданном тексте.
  50. Определить, есть ли в заданном тексте слова, которые читаются одинаково с обеих сторон.

 

Рис. 9.1

 

 

Лабораторная работа №9

 

Тема. Обработка файлов.

Цель работы. Научиться работать с файлами данных, обмениваться данными с внешними устройствами, а также обрабатывать данные комбинированного типа.

 

Краткие теоретические сведения и методические указания

 

Файлы обеспечивают программе каналы, по которым можно выполнять передачу данных. Под файлом следует понимать или дисковый файл, или логическое устройство.

Файл состоит из последовательности компонент одно и того же типа. Количество компонент в файле (размер файла) в описании файла не определена. Вместо этого система Паскаль сохраняет следует файла, доступ к которому можно получить через показатель файла. Каждый раз, когда любая компонента записывается или читается из файла, то указатель перемещается к следующей компоненты.

 

  1. Определение типа файла

 

Определение типа начинается зарезервированным словом FILE OF, после которого задается тип компонентов файла, а за ним следует идентификатор определенного типа файлов.

              Например:

TYPE

PRODUKTNAME = STRING [80];

PRODUKT = FILE OF RECORD

NAME: PRODUCNAME;

ITEMNUBER: REAL;

MINSTOCK: REAL;

SUPPLIER: INTEGER;

END;

VAR

PRODUCFILE: PRODUCT

PRODUCTNAMES: FILE OF PRODUCTNAMES;

Типом компонентов файла может быть любой тип, кроме типа файла. Переменные типа файла нельзя использовать ни в операторах присвоения, ни в выражениях.

 

  1. Операции над файлами

 

Идентификатор FILVAR используется в дальнейшем для обозначения идентификатора переменного типа файлов, описанных ранее.

ОПЕРАЦИЯ REWRITE (создание нового файла)

 

Синтаксис: REWRITE (FILVAR)

При выполнении этой процедуры создается новый файл на диске с именем, присвоенным переменной типа файла (FILVAR). Новый файл подготавливается к обработке. Дорогой существующий файл с таким же именем стирается. Дисковый файл, который создается с помощью процедуры REWRITE изначально является пустым и не имеет ни одной компоненты.

 

ОПЕРАЦИЯ RESET (установка файла в исходное положение)

 

Синтаксис: RESET (FILVAR)

При выполнении этой операции дисковый файл с именем, присвоенным файловой переменной FILVAR, подготавливается к обработке и показатель файла устанавливается в начало файла (компонента с номером 0). FILVAR должна задавать существующий файл, иначе возникнет ошибка ввода / вывода.

 

ОПЕРАЦИЯ READ (чтение из файла)

 

Синтаксис: READ (FILVAR, VAR)

VAR определяет одну или более переменных такого же типа, что и компоненты переменной FILVAR, отделенные друг от друга запятыми. Каждая переменная читается с дискового файла, и после выполнения каждой операции чтения показатель файла перемещается на следующую компонента.

 

ОПЕРАЦИЯ WRITE (запись в файл)

 

Синтаксис: WRITE (FILVAR, VAR)

VAR определяет одну или более переменных такого же типа, что и компоненты переменной FILVAR, отделенные друг от друга запятыми. Каждая переменная записывается в дисковый файл, и после выполнения каждой операции записи показатель файла перемещается на следующую компонента.

 

  1. Стандартные функции для обработки файлов

 

В языке Pascal реализованы следующие стандартные функции, предназначенные для обработки файлов:

 

ФУНКЦИЯ EOF

 

Синтаксис: EOF (FILVAR)

Это логическая функция, результат которой равен TRUE, если показатель файла находится в конце дискового файла. Если показатель файла находится в другом месте, то результат этой функции будет равен FALSE.

  1. текстовые файлы

 

В отличие от других типичных файлов, текстовые файлы — это не просто последовательность величин определенного типа. Хотя основными элементами текстового файла являются символы, они организованы в линии, и в конце каждой строки стоит маркер конца строки. В конце тектовых файла относится маркер конца строки (CTRL-Z). Текстовые файлы можно обрабатывать только последовательно. Более того ввода и вывода файла нельзя проводить одновременно.

 

ОПЕРАЦИИ НАД текстовых файлов

 

REWRITE — используется для создания нового файла.

RESET — открывает уже существующий файл.

READ — чтение символов в текстовом файле.

WRITE — запись символов в текстовом файле.

 

Строки в текстовом файле обрабатываются с помощью специальных операций над текстовыми файлами:

 

Синтаксис READLN (FILVAR)

Выполняется переход на начало следующей строки.

 

Синтаксис WRITELN (FILVAR)

Записывается маркер конца строки.

 

Синтаксис EOLN (FILVAR)

Логическая функция, результат которой равен TRUE если показатель файла стоит на символе СR маркера строки CR / LF. Если результат операции FOR (FILVAR) равен TRUE, то результат EOLN (FILVAR) также принимает значение TRUE.

 

варианты заданий

 

  1. Сформировать файл, содержащий фамилии, пол, год рождения и группу крови N доноров. Используя сформированный файл, напечатать фамилии доноров женского пола, имеющих 4-ю группу крови.
  2. Сформировать файл, содержащий фамилии, пол, группу крови и резус-факторы N доноров. Используя сформированный файл, напечатать фамилии доноров, имеющих первую группу крови и резус-фактор «-».
  3. Сформировать файл, содержащий данные о N книг по программированию Вашей личной библиотеки (фамилия автора и его инициалы, название книги, название издательства). Используя сформированный файл, напечатать фамилии авторов и названия книг издательства «Наука».
  4. Сформировать файл, содержащий данные о N книг по ЭВМ Вашей личной библиотеки (фамилия автора и его инициалы, название книги, название издательства). Используя сформированный файл, напечатать фамилии авторов и названий книг, изданных не позднее 1988
  5. Сформировать файл, содержащий информацию о N бытовых магнитофонов (марка, где производится, цена). Используя сформированный файл, напечатать информацию о магнитофоны, что сделано в Украине и с ценой в заданных пределах (пределы выбираются самостоятельно).
  6. Сформировать файл, содержащий информацию о N поездов, отправляющихся с вокзала станции м. Хмельницкий (номер поезда, станция назначения, время отправления, время в пути). Используя сформированный файл, напечатать информацию о поездах, отправляющихся не позднее 21 часа.
  7. Сформировать файл, содержащий информацию о N поездов, отправляющихся с вокзала станции м. Хмельницкий (номер поезда, станция назначения, время отправления, время прибытия). Используя сформированный файл, напечатать информацию о поездах, время в пути которых не превышает 17 часов.
  8. Сформировать файл, содержащий информацию о N телевизоров (марка телевизора, его цена, где выпускается). Используя сформированный файл, напечатать информацию о самом дешевом телевизор.
  9. Сформировать файл, содержащий фамилии N студентов и оценки каждого студента по результатам 5 экзаменов. Используя сформированный файл, напечатать фамилии студентов, имеющих наивысший балл.
  10. Сформировать файл, содержащий фамилии N студентов и оценки каждого студента по результатам 5 экзаменов. Используя сформированный файл, напечатать фамилии студентов, сдавших все экзамены с оценками «5».
  11. Сформировать файл-протокол лыжных гонок, содержащий фамилии N участников, время старта, время финиша для каждого участника (часы, минуты, секунды). Используя сформированный файл, напечатать фамилию участника, занявшего первое место.
  12. Сформировать файл с результатами сдачи сессии N студентами (5 ис ­ питив).Информация о каждом студенте вводится в одну буквенную переменную в буквенном виде в следующем порядке: фамилия * M 1 * M 2 * M 3 * M 4 * M 5, где M и (i = 1, 2, 3, 4, 5) — оценки.Используя сформированный файл, результаты сессии распечатать в виде таблицы.
  13. Сформировать файл-справочник, содержащий фамилии N сотрудников отдела и номера их домашних телефонов (информация о каждом сотруднике вводится в одну буквенную переменную в буквенном виде в следующем порядке: фамилия — пятизначное число, определяющее номер телефона, например, Петров-66803 ). Используя сформированный файл, распечатать номер телефона данного сотрудника (поиск номера телефона по фамилии) в обычном виде (например, 6-68-03).
  14. Сформировать файл, содержащий информацию о N студентов (фамилия, пол, год рождения, месяц рождения). Используя сформированный файл, напечатать фамилии студентов, родившихся летом.
  15. Сформировать файл, содержащий информацию о N студентов (фамилия, пол, год рождения). Используя сформированный файл, напечатать фамилии студентов женского пола с указанием возраста.
  16. Сформировать файл, содержащий фамилии N студентов группы (в произвольном порядке). Используя сформированный файл, напечатать фамилии студентов в алфавитном порядке.
  17. Сформировать файл, содержащий информацию о дате рождения N Ваших друзей (информация об одном вторая вводится в одну буквенную переменную в следующем порядке: призвище- ДД.ММ.ГГГГ, например, Сидоров-7.03.1980). Используя сформированный файл, напечатать фамилии друзей, родившихся осенью.
  18. Сформировать файл, содержащий информацию о N людей, имеющих автомобили (фамилия, марка автомобиля, цвет). Используя сформированный файл, напечатать фамилии тех из них, кто имеет «Ладу» красного цвета.
  19. Сформировать файл, содержащий информацию о N людей, имеющих автомобили (фамилия, марка автомобиля, его номер. Номер записывается полностью, например, В34-61ХМ). Используя сформированный файл, напечатать фамилии тех из них, чей номер содержит цифры 72-15 (если таковых нет — вывести соответствующее сообщение).
  20. Сформировать файл, содержащий информацию о N магазинов Вашего города: название магазина (универмаг, продукты и т. Д.), Его номер и адрес (улица). Используя сформированный файл, напечатать информацию о тех из них, которые находятся на улице Каменецкой.
  21. Сформировать файл, содержащий информацию обо всех техникумы Вашего города: название, адрес (информация о каждом сотруднике вводится в одну буквенную переменную в буквенном виде в следующем порядке: название улицы, номер дома, например, коммерческий, Каменецкая, 114). Используя сформированный файл, определить, есть ли в Вашем городе медицинский техникум, и, если есть, напечатать его адрес в обычном виде (например, ул. Каменецкая, 114).
  22. Сформировать файл, содержащий информацию о N магазинов Вашего города: название магазина (универмаг, продукты и т. Д.), Его номер и адрес (улица). Используя сформированный файл, напечатать информацию обо всех магазины
  23. Сформировать файл, содержащий информацию о N сотрудников отдела: фамилия, имя, отчество, должность (инженер, бухгалтер, программист и т. Д.), Оклад. Используя сформированный файл, подсчитать, сколько программистов в отделе, напечатать их фамилии, имени, отчества, оклад.
  24. Сформировать файл, содержащий информацию о N сотрудников отдела: фамилия, имя, отчество, должность, оклад. Используя сформированный файл, напечатать фамилии, имени, отчества, должности сотрудников, имеющих наименьший оклад.
  25. Сформировать файл, содержащий информацию о N сотрудников отдела: фамилия, имя, отчество, должность, оклад. Используя сформированный файл, определить и напечатать средний оклад по отделу, а также информацию о сотруднике, что оклад, ближайший к среднему.
  26. Сформировать файл, содержащий информацию о N студентов (факультет, курс, группа, результаты сессии (4 предмета)). Используя сформированный файл, определить и напечатать фамилии студентов I-го курса, получают стипендию.
  27. Сформировать файл, содержащий информацию о N студентов (факультет, курс, группа, результаты сессии (4 предмета)). Используя сформированный файл, определить и напечатать фамилии студентов, сдавших сессию без троек (оценки указать).
  28. Сформировать файл, содержащий информацию о N студентов (факультет, курс, группа, результаты сессии (4 предмета). Используя сформированный файл, определить и напечатать фамилии студентов, сдавших сессию с одной тройкой.
  29. Сформировать файл, содержащий информацию о N студентов (факультет, курс, группа, результаты сессии (4 предмета)). Используя сформированный файл, определить и напечатать фамилии студентов, сдавших сессию на отлично (указать курс и группу).
  30. Сформировать файл, содержащий информацию о N студентов (факультет, курс, группа, адрес, телефон). Используя сформированный файл, определить и напечатать фамилии студентов, живущих в общежитии.
  31. Сформировать файл, содержащий информацию о N студентов (факультет, адрес, телефон). Используя сформированный файл, определить и напечатать фамилии студентов, имеющих телефон. Указать номер.
  32. Сформировать файл, содержащий информацию о N студентов (факультет, адрес, телефон). Используя сформированный файл, определить и напечатать фамилии студентов, живущих на заданной улице.
  33. Сформировать файл, содержащий информацию о N студентов (факультет, дата рождения). Используя сформированный файл, определить и напечатать фамилии студентов, родившихся в заданной даты (указать дату рождения).
  34. Сформировать файл, содержащий информацию о N студентов (факультет, пол, курс, группа). Используя сформированный файл, определить и напечатать фамилии студентов мужского пола (указать курс и группу).
  35. Сформировать файл, содержащий информацию о N студентов (факультет, дата рождения). Используя сформированный файл, определить и напечатать фамилии студентов, которые родились в заданном году.
  36. Сформировать файл, содержащий информацию о N студентов (факультет, дата рождения). Используя сформированный файл, определить и напечатать фамилии студентов, которые родились под знаком Рака (22.06-21.07).
  37. Сформировать файл, содержащий информацию о N студентов (факультет, дата рождения). Используя сформированный файл, определить и напечатать фамилии студентов, которые родились зимой.
  38. Сформировать файл, содержащий информацию о N студентов (факультет, пол, курс, группа). Используя сформированный файл, определить и напечатать фамилии студентов женского пола с указанием курса и группы.
  39. Сформировать файл, содержащий информацию о N студентов (факультет, курс, группа, адрес, телефон). Используя сформированный файл, определить и напечатать фамилии студентов, не имеющих телефона (указать адрес).
  40. Сформировать файл, содержащий информацию о N студентов (факультет, курс, группа, результаты сессии (4 предмета). Используя сформированный файл, определить и напечатать средний балл по каждому экзамену.
  41. Сформировать файл, содержащий информацию о N студентов (факультет, пол, курс, группа). Сортировать информацию и вывести ее в алфавитном порядке по фамилиям с указанием курса и группы.
  42. Сформировать файл, содержащий информацию о N студентов (факультет, адрес, телефон). Сортировать информацию и вывести ее в алфавитном порядке по адресам с указанием фамилии и адреса.
  43. Сформировать файл, содержащий информацию о N студентов (факультет, дата рождения). Сортировать информацию и вывести ее в порядке старшинства по возрасту с указанием фамилии и даты рождения.
  44. Сформировать файл, содержащий информацию о N студентов (факультет, адрес, телефон). Сортировать информацию и вывести ее в порядке возрастания номеров телефона с указанием номера телефона и фамилии.
  45. Сформировать файл, содержащий информацию о N студентов (факультет, курс, группа, результаты сессии (4 предмета). Сортировать информацию и вывести ее за успеваемостью по всем предметам с указанием среднего балла по экзаменационным оценкам.
  46. Сформировать файл, содержащий информацию о N студентов (факультет, дата рождения, пол, адрес, телефон, курс, группа, результаты сессии (4 предмета). Сортировать информацию и вывести ее по курсам с указанием курса и фамилий студентов данного курса.
  47. Сформировать файл, содержащий информацию о N студентов (факультет, дата рождения). Сортировать информацию и вывести ее по дням рождения в данном месяце с указанием даты.
  48. Сформировать файл, содержащий информацию о N студентов (факультет, курс, группа, результаты сессии (4 предмета). Сортировать информацию и вывести ее за успеваемостью для каждого курса с указанием экзаменационных оценок.
  49. Сформировать файл, содержащий информацию о N студентов (факультет, курс, группа, результаты сессии (4 предмета). Сортировать информацию и вывести ее по количеству сданных на «отлично» экзаменов для каждой группы.
  50. Сформировать файл, содержащий информацию о N студентов (факультет, курс, группа, результаты сессии (4 предмета). Сортировать информацию и вывести ее по количеству сданных на «отлично» экзаменов для каждого курса.

 

 

Лабораторная работа №10

 

Тема. динамические переменные

Цель работы. Ознакомиться с понятием динамических переменных, изучить средства описания динамических переменных, а также действия над ними; научиться применять полученные знания при решении задач с использованием динамических переменных.

 

Краткие теоретические сведения и методические указания

 

Во многих задачах невозможно предсказать размер памяти, которую будут занимать переменные в момент написания программы. Тогда переменные формируют динамично, не связывая со структурой программы. Поскольку средств для явного описания таких переменных не существует, то обращаться к ним по имени невозможно. Вместо этого в таких переменных обращаются за помощью так называемых посылочных переменных (указателей), образующихся при формировании динамических переменных. На схеме указывается, что «посылочный тип — это неограниченная множество значений, указывающих на элементы некоторого одного типа. Для ссылок не существует никаких операций кроме сравнения на равенство ».

Пример однонаправленного связного списка приведен ниже:

 

 

Указатель указывает на следующий элемент. Все элементы списка имеют одинаковый формат. Верхнее поле каждого элемента используется для указания следующего элемента. Если элемент не имеет следующего элемента, то указателю присваивается значение NIL.

Описание типа «указатель» имеет вид:

^ <Идентификатор типа>

 

пример:

type

Link = ^ object;

var

P: Link;

Переменная Р является указателем на данные типа object указатель — это адрес, а указательная переменная — это то, что находится по адресу.

пример:

Описать динамическую структуру данных, которая является однонаправленным списком. Каждый элемент структуры имеет два поля. Первое поле отводится под действительное число, а второе — содержит адрес следующего элемента динамической структуры.

 

Type

Point = ^ Data;

Data = Record;

R: real:

Next: Point

end;

var

A: Point;

A — идентификатор, который имеет тип указателя. Сначала значение А неопределенное, потому что описана структура данных не создана и указатель не указывает адрес начального элемента динамической структуры. Чтобы создать такую структуру в Pascal, предусмотрена процедура NEW (A).Эта процедура создает первый элемент динамической структуры и помещает адрес этой структуры в указатель. Память для размещения элементов берется вне программы. Эту память принято назвать «куче». В связи с введением в Pascal типа данных «указатель» в стандарте языка предусмотрена предсказательная константа с именем NIL. NIL — это указатель, который ни на что не указывает.

В Pascal процедура DISPOSE, форма записи которой имеет вид:

DISPOSE (Идентификатор)

С помощью этой процедуры освобождается память, заполненная структурами данных, на которые указывается ссылка. Освобождена память переходит в секцию «КУЧА».

пример:

var

Q: ^ t;

begin

New (Q);

Dispose (Q)

 

пример:

type

D1: ^ data1;

D2: ^ data2;

var

E1: D1;

E2: D2;

Следующие ниже операторы присвоения запрещены в Pascal том, что Е1 и Е2 указатели различных типов данных:

Е1 = Е2;

или

Е2 = Е1;

После выполнения первого оператора присваивания имеем, что ссылка на объект типа data1 будет ссылкой на объект типа data2 и наоборот, что в Pascal запрещено.

пример:

Есть файл целых положительных чисел, составленный из некоторых последовательностей чисел, каждое из которых ограничивается целым отрицательным числом.

  1. Вывести в выходной файл эти последовательности чисел, но в середине каждой последовательности числа должны идти в обратном порядке.

Входной файл: 1 3 7 -1 2 0 6 7 -1

Выходной файл: 7 3 1 -1 7 6 0 2 -1

Длина этих последовательностей неопределенная, поэтому переменные, в которых будут помещаться эти числа, должны иметь динамическую структуру.

Program Lists (Inp, Out)

type

Pointer = ^ DataSet;

DataSrt = record;

Data: integer;

Point: pointer;

end;

var

R1, R2: pointer;

I: integer;

Inp, Out: file of integer;

begin

Reset (inp) Rewrite (out)

while not Eof (inp) do

begin

R1 = Nil;

Read (inp, I0;

while I <> — 1 do

begin

New (r2)

R2 ^ .data = I;

R2 ^ .point = R1;

R1 = R2;

Read (inp, I);

end;

R2 = R1;

while R2 <> Nil do begin

write (Out, R2 ^ .data)

R2 = R2 ^ .point

end;

Write (Out, «- 1 ‘);

end;

end.

пример:

Найти максимальный элемент массива

Type Mas = array [1..10] of real;

Var M: ^ Mas;

Begin

New (M)

For j = 1 to 10 do readln (M ^ [j]);

MAX = M ^ [1];

For j = 2 to 10 do

If M ^ [j]> MAX then MAX = M ^ [j];

Writeln ( ‘MAX =’, MAX)

Dispose (M)

End.

 

варианты заданий

 

  1. Считать с клавиатуры «n» целых чисел и вывести их в обратном порядке.
  2. Заданы две квадратные матрицы порядка n и m. Напечатать ту из них, в которой меньше следует.
  3. Определить, является ли данная матрица магическим квадратом.
  4. Данная квадратная матрица. Напечатать индексы ее седельных точек (те, которые одновременно являются крупнейшим элементом строки и наименьшим элементом столбца или наоборот).
  5. Данная действительно матрица. Упорядочить ее строки по возрастанию первых ее элементов.
  6. Данная последовательность чисел. Определить количество инверсий в этой последовательности.
  7. Дан текст из цифр. Напечатать все буквы, которые входят в текст, и рядом — количество их вхождений в текст.
  8. Дан текст с строчных латинских букв, оканчивающиеся точкой. Напечатать все буквы, которые входят в текст по одному разу.
  9. Данная последовательность слов, разделенных пробелом, по последнему -словом точка. Напечатать эти слова по алфавиту.

10.Данная последовательность, содержащая не менее 2 слов, в каждом из которых не менее 2 букв. Напечатать все слова, кроме последнего, предварительно поменяв первую и последнюю буквы.

11.Превратить массив, вернув его на 90 ° против часовой стрелки.

12.Даны 2 матрицы. Превратить их так, чтобы в первой были элементы равны скалярному произведению матриц, а в другой — доли от их деления.

13.Данная квадратная матрица. Превратить ее так, чтобы она была скалярным произведением на матрицу, получаемый из данной поворотом на 90 °.

14.Даны две квадратные матрицы. Определить, возможно ли получить одну из них отражением главной диагонали другой.

15.Описать процедуру, которая с непустого списка L удаляла последний элемент.

16.Описать процедуру, которая вставляла в список L новый элемент Е1 перед первым вхождением элемента Е, если он входит.

  1. Описать функцию, значением которой является список, построенный из элементов файла f.
  2. Во входном файле заданный текст, после которого — точка. Распечатки ваты этот текст в обратном порядке.
  3. Дан текст, который заканчивается точкой. В буквах этого текста особую роль играет знак #, появление которого в тексте означает отмену буквы, которая идет перед этим знаком. Напечатать исправленный текст.
  4. Напечатать все элементы списка, которые находятся между двумя одинаковыми элементами списка.
  5. Данная очередь. Переместить, если нужно, к ее левому краю и дополнить до конца элементами, введенными пользователем.
  6. Написать программу, которая проверяет упорядоченность элементов данного списка по алфавиту.
  7. Написать программу, которая определяет, сколько элементов списка L1 входит в L2.
  8. Написать программу, которая удаляет из списка L2 первое вхождение элементов списка L1.
  9. Просматривая один раз файл f, напечатать элементы файла так: сначала все числа <а потом числа с [a, b] и затем остальные, сохраняя первоначальный порядок.
  10. Написать функцию, которая бы определяла число вхождений элемента Е в дерево Т.
  11. Написать процедуру, которая печатала все элементы дерева Т по уровням: сначала из корня дерева, затем из вершин, дочерних по отношению к корню и т.д.
  12. Написать функцию, которая бы определяла максимальную глубину непустого дерева (число веток в самом длинном из путей).
  13. Проверить, одинаковые списки L1 и L2; если они не одинаковы, то добавить в конец списка L1 список L2.
  14. В текстовом файле f записана без ошибок формула, где М означает функцию max, а m-функцию min. Вычислить, которое целое число значение этой формулы.

 

Основные сообщения об ошибках

 

Номера ошибок компилятор выдает другие, здесь указано на украинском языке перевод основных сообщений.

 

  1. «,» expected (Нужно указать «,»).
  2. «:» expected (Нужно указать «:»).
  3. «,» expected (Нужно указать «,»).
  4. «(» expected (Нужно указать «(«).
  5. «)» expected (Нужно указать «)»).
  6. «=» expected (Нужно указать «=»).
  7. «=» expected (Нужно указать «=»).
  8. «[» or «(«. Expected (Нужно указать «[» или «(.»).
  9. «]» or «.)» Expected (Нужно указать «]» или «.)»).
  10. «.» expected (Нужно указать «.»).
  11. «..» expected (Нужно указать «..»).
  12. Identifier expected (Не указан идентифiкатор).
  13. Unknown identifier (Неизвестный идентификатор).

Этот идентификатор ни был описан в разделе описаний.

  1. Dublicate identifier (Повторение идентификатора в разд иле описаний).
  2. Variable identifier expected (Нужен идентификатор сменного й).

Идентификатор не описывает переменную, как это нужно.

  1. Type identifier expected (Нужен идентификатор типа).

Не указан тип идентификатора, как это нужно.

  1. Type identifier expected (Нужен идентификатор).

Данный идентификатор не указывают тип, как это нужно.

  1. Sintax error (Синтаксическая ошибка).
  2. Error in real constant (Ошибка в д ийсний константе).
  3. Error in integer constant (Ошибка в ц илочисельний константе).

Учтите, что после целого действительного числа, превышает диапазон представления целых чисел, должны относиться точка и ноль, например, 12345678912.0.

  1. Error in expression (ошибка в выражение е).

Данный символ не может участвовать в выражении указанным образом.Возможно, Вы забыли указать опера ию между двумя операндами.

  1. Error in statement (Ошибка в оператор е).

Данный символ не может быть первым символом в операторе.

  1. Error in type (Ошибка в определении и типа).

Определение типа не может начинаться с этого символа.

  1. Type mismath (Несум иснисть типов).

Это может случиться из следующих пpичин:

— несовместимые типы фоpмально и фактического паpаметpа в обращении к пpоцедуp или функции;

— тип виpазу является несовместимой с типом индекса пpи индексировании массива;

— несовместимые типы опеpандив в виpази.

  1. Invalid subrange base type (Нев ирный базовый тип ограниченного типа).
  2. Ordinal type expected (Нужен поpядковий тип).

Типы real, string, стpуктуpно и указательные типы здесь недопустимы.

  1. Structure too large (очень большая стpуктуpа).

Максимально допустимый pозмиp стpуктуpно типа — 65520 байт.

  1. Set base type of range (Базовый тип множества нарушу есть границы).
  2. Operand types do not match operator (Типы опеpандив не соответствуют опеpации).

Данная опеpация не может быть применена к опеpандив данного типа, напpиклад, ‘A’ разделить на «2».

  1. Can not read or write variables of this type (нет возможности и считывать или записать переменные данного типа):

— пpоцедуp read и readln могут считывать данные целого, действительного, литеpного и строчной типов (а также ограниченного на базе этих типов)

— пpоцедуp write и writeln могут выводить данные целого, действительного, литеpного, логического и строчной типов (а также ограниченного на базе этих типов).

  1. Constant expected (Нужна постоянная)
  2. Integer or real constant expected (Нужна ц ила или действительна константа).
  3. Integer constant expected (Нужна ц ила константа).
  4. String constant expected (Нужна постоянная строчной типа).
  5. Integer or real variable expected (Нужна переменная типа integer или real).
  6. Ordinal variable expected (Нужна переменная пеpерахову емого типа).
  7. Integer variable expected (Нужна переменная ц илого типа).
  8. String variable expected (Нужна переменная строчной типа).
  9. Integer expression expected (Нужен виpаз типа integer).
  10. Ordinal expression expected (Нужен виpаз пеpерахову емого типа).
  11. Boolean expression expected (Нужен виpаз типа boolean).
  12. Integer or real expression expected (Нужен виpаз типа real или integer).
  13. Character expression expected (Нужен виpаз типа char).
  14. String expression expected (Нужен виpаз строчной типа).
  15. Invalid floating-point operation (Недопустимая опеpаций ия с плавающей запятой):

— пpи опеpации с двумя действительными значениями было получено пеpеповнення или деления на 0;

— действительное значение, пеpедаеться функциями trunc или round, не может быть пеpетворене в целое число, которое находится внутри диапазона типа longint (от -2147483648 до 2147483647)

— аpгумент, что пеpедаеться функцией sqrt, отрицательный;

— аpгумент, что пеpедаеться функцией ln, отрицательный или pивний 0.

  1. Unknown command (Нев Известная команда).
  2. CRC error in data (Ошибка в вх идных данных).
  3. Floating point overflow (Пеpеповнення пpи опеpаций ии с плавающей запятой).
  4. Floating point underflow (Исчезновение поpядку пpи опеpаций ии с плавающей запятой).

По умолчанию исчезновения поpядку пpизводить к повеpнення pезультатом, pивного 0.

  1. Invalid format specifier (Нев иpний спецификатоp Фоpмат).

Используется невиpний спецификатоp Фоpмат или числовой аpгумент спецификатоpа Фоpмат выходит за допустимые границы.

  1. Case conctant out of range (Константа опеpатоpа case поpушу есть допустимые границы).

Целочисленная константа опеpатоpа case должна находиться в диапазоне от — 32768 до 32767.

  1. Invalid for control variable (Нев ИРНА управляющая переменная опеpатоpа for).

Управляющая переменная опеpатоpа for должна быть переменной пеpераховуючого типа, определенного в pоздили описаний.

  1. Do expected (Нужен do).
  2. Of expected (Нужен of).
  3. Then expected (Нужен then).
  4. To or downto expected (Нужен to или downto).
  5. Begin expected (Нужен begin).
  6. End expected (Нужен end).
  7. Divizion by zero (Д илення на 0).
  8. Constant out of range (Константа поpушу есть границы):

— Вы пытаетесь указать массив с индексом, поpушуючим границы;

— Вы пытаетесь пpисвоиты константу переменная вне диапазона значений переменной.

  1. Constant end case types do not match (Типы констант (г. иток) и тип виpазу опеpатоpа case не соответствуют друг другу.
  2. Line too long (очень длинную строку).

Максимальная длина строки — 255 символов.

  1. String constant exceeds line (Строчная константа пеpевищу является допустимый pозмиp строки).

Видимо, Вы забыли поставить кавычки в конце строчной константы.

  1. Invalid string length (Нев иpна длина строки).

Максимальная длина описуемого строки должна находиться в диапазоне от 1 до 255.

  1. String length mismath (Нев идповиднисть длин).

Длина строчной константы не соответствует количеству элементов символьного массива.

  1. Label already defined (М итка уже определена).

Данная метка уже определена опеpатоpом.

  1. Label not with in current block (М итка не находится ли внутри текущего блока).

Опеpатоp goto не может ссылаться на метку, которая находится вне текущим блоком.

  1. Label identifier expected (Нужен идентификатоp метки).

Метка не отмечена с помощью идентификатоpа, как это нужно.

  1. Printer out of paper (Зак инчився бумагу на устройства печати).
[Всего голосов: 3    Средний: 5/5]