рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

ИНФОРМАТИКА

ИНФОРМАТИКА - раздел Информатика, Министерство Образования И Науки Украины Национальный Аэрокосмически...

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

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

«Харьковский авиационный институт»

 

 

А.В. Карташов, Ю.А. Скоб, В.А. Халтурин, И.А. Трофимова,

Л.И. Черноштан, Ю.К. Чернышев, О.В. Яровая

 

 

ИНФОРМАТИКА

по лабораторному практикуму   Харьков “ХАИ” 2005

Требования к выполнению лабораторных работ

При выполнении лабораторной работы необходимо решить предлагаемую задачу алгоритмически, написать программу, проверить ее выполнение на примерах и составить отчет. Программа должна правильно выполняться при любых значениях исходных данных. Правильность работы всех ветвей программы должна быть проверена на тестах. При отсутствии решения и в каждой аномальной ситуации должно быть напечатано соответствующее сообщение, например: "Исходные данные создают аномальную ситуацию: деление на ноль" и т.п. Не доводя до аварийного останова ЭВМ, надо предложить ввести новые данные.

Отчет должен содержать:

1. Тему и цель задания.

2. Постановку задачи.

3. Требования к заданию и условия варианта.

4. Программу на языке Паскаль.

5. Результаты (протокол выполнения одного из примеров на экране) работы программы.

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

 

СТРУКТУРА ПРОГРАММЫ И СТАНДАРТНЫЕ ТИПЫ ДАННЫХ

Цель работы–ознакомление со средой программирования Турбо Паскаль и встроенными типами данных и процедурами ввода-вывода; приобретение навыков составления программы на языке Турбо Паскаль.

Постановка задачи:записать и посчитать по заданному варианту программу линейного алгоритма в среде Турбо Паскаль.

 

Теоретические сведения

Элементы среды Турбо Паскаль

В окне редактора первая строка содержит все команды главного меню: File– операции с файлами, смена каталога, выход из режима Турбо-Паскаль; Edit – возвращение в режим редактирования;

Run

  Run Ctrl-F9 Program reset Ctrl-F2 Go to cursor F4 Trace into F7 Step over F8 User screen Alt-F5

Содержание команд подменю:

Run (Ctrl-F9) – автоматическое выполнение программы из файла редактора;

Trace into (F7) – построчное выполнение программы (трассировка);

Step over (F8) – пооператорное выполнение программы (трассировка), но без просмотра выполнения подпрограмм-функций и процедур;

Program reset (Ctrl-F2) – прекращение построчного выполнения программы (трассировки);

Go to cursor (F4) – выполнение программы от текущей строки до строки, где находится курсор;

User screen (Alt-F5) – просмотр результата выполнения программы.

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

Переход в главное меню осуществляется нажатием клавиши F10, выход из главного меню – повторным нажатием F10 или клавиши ESC.

После того как набрана программа, пользователь переходит в главное меню и нажатием подменю RUN передает программу на выполнение.

Для просмотра результатов счёта пользователь выбирает подменю User screen (Alt-F5).

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

Турбо Паскаль позволяет при отправлении программы на счёт обнаруживать синтаксические ошибки и ошибки выполнения. В этом случае возникают сообщение об ошибке, её номер и пояснение на английском языке. Сам курсор указывает на то место в программе, где подразумевается ошибка. При высвечивании ошибки ее необходимо исправить курсором и отправить программу на выполнение (Run). Для отыскания ошибок используют трассировку программы (выполнение по шагам).

 

Стандартные типы данных среды Турбо Паскаль и описание величин

Тип данных– это характеристика, которая для величины определяет:

· необходимый размер памяти;

· диапазон значений, которые может принимать величина;

· возможные операции над величиной (подразумеваются действия относительно использования величин в выражениях);

· формы представления величин (или формат представления величин).

Логический тип: BOOLEAN .

Значением является множество из двух упорядоченных элементов с названием FALSE и TRUE. Форма изображения – запись соответствующего слова false или true. ЗАМЕЧАНИЕ. Операции not, and, or, xor – соответственно обозначают отрицание, конъюнкцию, дизъюнкцию, исключение.…

Символьный тип: CHAR.

Отводится 1 байт памяти.

Значением может быть один из 255 упорядоченных элементов множества всех символов, представленных кодами ЭВМ таблицы ASCII (American Standard Code Information – американский стандартный код для обмена информацией).

Допустима операция сложения символов – знак «+», но как результат создается тип величины, который не уже не является типом CHAR, а представляет собой структурированный тип STRING.

Форма изображения – символ записывается в апострофах.

ПРИМЕР: 'a', 'c', '2', '-', ' '.

При выводе символов на экран апострофы не изображаются.

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

ПРИМЕР : 'a' соответствует записи #97; 'z' соответствует записи #90.

Целые типы величин.

Короткое целое без знака: BYTE.

Отводится 1 байт памяти.

Допустимы положительные значения: 0..255.

Короткое целое со знаком: SHORTINT.

Отводится 1 байт памяти.

Допустимы положительные и отрицательные значения: -128..127.

Целое без знака: WORD.

Отводится 2 байта памяти.

Допустимы положительные значения: 0..65 535.

Целое со знаком: INTEGER.

Отводится 2 байта памяти.

Допустимы положительные и отрицательные значения:

-32768..32767.

Длинное целое со знаком: LONGINT.

Отводится 4 байта памяти;

Допустимы положительные и отрицательные значения: -2147483648..2147483647

Действительные типы величин.

Допустимы стандартные операции. Форма представления: а) с плавающей точкой;

Описание величин

 

В Паскале действует правило: все объекты программы, которым присваиваются имена, а именно:

ПРОГРАММНЫЕ ЕДИНИЦЫ – ПРОЦЕДУРЫ И ФУНКЦИИ;

ВЕЛИЧИНЫ – КОНСТАНТЫ, ПЕРЕМЕННЫЕ, ТИПИЗИРОВАННЫЕ КОНСТАНТЫ;

ТИПЫ ВЕЛИЧИН, КОТОРЫЕ ПОЛЬЗОВАТЕЛЬ ХОЧЕТ ОБЬЯВИТЬ, должны быть описаны. При этом описать величину – это означает оговорить ее тип, а в некоторых случаях – и значение.

Описание константпроизводится в разделе CONST.

ПРИМЕР:

CONST

i=1;

x=0.1;

y=1.254e-02;

f=false;

c='a';

ЗАМЕЧАНИЕ. Описываются константы лишь по одной величине. Описание списком, то есть такое описание, когда одно значение задается сразу нескольким величинам, записанным через запятую, запрещено.

Описание переменныхпроизводится в разделе по VAR-схеме:

VAR

K : integer;

X1, y1 : real;

Ff, b : boolean;

D : char;

Описание типизированных констант производится в разделе CONST, возможно даже вместе с описанием констант, по схеме:

<идентификатор> : <тип> = <значение>;

ПРИМЕР:

CONST

A: integer = 2;

X2: real = 3.05;

X3: real = -1.30056e-25;

B1: boolean = true;

C5: char = ¢ j ¢;

ЗАМЕЧАНИЕ. Описывать списком типизированные константы запрещено. Типизированная константа при описании содержит структуры, которые отвечают и структуре, и переменной. Типизированные константы еще называют СТАРТОВЫМИ ВЕЛИЧИНАМИ; в отличие от констант они могут в процессе выполнения программы изменять свое значение.

 

Процедуры ввода данных

Для ввода значений величин типа: real, integer, char используется стандартная процедура, которую условно можно представить в следующем виде: read[ln][([файл], идентификатор1[,идентификатор2,...])] где: файл - имя логического файла для ввода значений с внешнего физического файла;

Процедура вывода данных

Процедура вывода используется для стандартных типов данных вида real, integer, char, boolean и имеет вид write[ln][([файл],параметр1[:w1[:d1]],параметр2[:w2[:d2]],..)], где файл – имя логического файла для вывода значений во внешний физический файл;

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

 

1. Войти в среду Турбо Паскаль.

2. По заданному варианту в окне текстового редактора написать программу по вводу и выводу значений стандартных типов данных.

3. Перейти в главное меню (команда F10), войти в меню RUN и запустить программу на выполнение (подменю Run).

4. Просмотреть результаты счёта (команда Alt-F5).

5. Вернуться в окно редактора (нажать любую клавишу).

6. Просмотреть все режимы выполнения программы по частям:

Program reset (Ctrl-F2); Go to cursor (F4);

Trace into (F7); Step over (F8).

7. Выйти из режима Турбо Паскаль (команда Alt-X).

 


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

 

Номер варианта Целые числа Действительные числа Количество символов Вывести значения
Количество Формат Количество Формат
Ширина поля Ширина поля Количество знаков после запятой
True False True True False True True False False True True False False True True False True False False True False True False False True True

 

Пример программы

 

PROGRAM lab4;

USES CRT; { ПОДКЛЮЧЕНИЕ МОДУЛЯ CRT }

CONST

LOG=TRUE;

VAR K,M,N :INTEGER;

X,Y :REAL;

S1,S2,S3 :CHAR;

BEGIN

CLRSCR; { ОЧИСТКА ЭКРАНА }

WRITELN (' ВВЕДИТЕ ЦЕЛЫЕ ЧИСЛА K, M, N В ОДНУ СТРОКУ ЧЕРЕЗ ПРОБЕЛ.');

WRITELN (' ПОСЛЕ ПОСЛЕДНЕГО ЧИСЛА НАЖМИТЕ КЛАВИШУ "ENTER" ');

READLN (K, M, N);

WRITELN;

WRITELN (' ':20,'ЦЕЛЫЕ ЧИСЛА');

WRITELN (' ':5,'ВЫВОД В ФОРМАТЕ',' ':10,'ВЫВОД БЕЗ ФОРМАТА');

WRITELN (' ':10,'K=',K:5,' ':20,'K=',K);

WRITELN (' ':10,'M=',M:5,' ':20,'M=',M);

WRITELN (' ':10,'N=',N:5,' ':20,'N=',N);

WRITELN;

WRITELN (' ВВЕДИТЕ ДЕЙСТВИТЕЛЬНЫЕ ЧИСЛА X, Y В ОДНУ СТРОКУ ЧЕРЕЗ ПРОБЕЛ.');

WRITELN (' ПОСЛЕ ПОСЛЕДНЕГО ЧИСЛА НАЖМИТЕ КЛАВИЩУ "ENTER" ');

READLN (X,Y);

WRITELN ;

WRITELN (' ':20,'ДЕЙСТВИТЕЛЬНЫЕ ЧИСЛА');

WRITELN (' ':5,'ВЫВОД В ФОРМАТЕ',' ':10,'ВЫВОД БЕЗ ФОРМАТА');

WRITELN (' ':10,'X=',X:8:4,' ':15,'X=',X);

WRITELN (' ':10,'Y=',Y:8:4,' ':15,'Y=',Y);

WRITELN;

WRITELN (' ВВЕДИТЕ СИМВОЛЬНЫЕ ДАННЫЕ ДЛЯ ПЕРЕМЕННЫХ S1, S2, S3.');

WRITELN (' ПОСЛЕ КАЖДОГО СИМВОЛА НАЖМИТЕ КЛАВИШУ "ENTER" ');

WRITE (' s1='); READLN(S1);

WRITE (' s2='); READLN(S2);

WRITE (' s3='); READLN(S3);

WRITELN ;

WRITELN (' ':20,'СИМВОЛЬНЫЕ ДАННЫЕ');

WRITELN (' ':5,'ВЫВОД В ФОРМАТЕ',' ':10,'ВЫВОД БЕЗ ФОРМАТА');

WRITELN (' ':10,'S1=',S1:3,' ':20,'S1=',S1);

WRITELN (' ':10,'S2=',S2:3,' ':20,'S2=',S2);

WRITELN (' ':10,'S3=',S3:3,' ':20,'S3=',S3);

WRITELN ;

WRITELN (' ':20,'ЛОГИЧЕСКИЕ ДАННЫЕ');

WRITELN (' ':5,'ВЫВОД В ФОРМАТЕ',' ':10,'ВЫВОД БЕЗ ФОРМАТА');

WRITELN (' ':10,'LOG=',LOG:7,' ':15,'LOG=',LOG);

WRITELN; WRITELN; WRITELN;

WRITELN (' ДЛЯ ПРОДОЛЖЕНИЯ РАБОТЫ НАЖМИТЕ КЛАВИШУ "ENTER" ');

READLN ; {ЗАДЕРЖКА ЭКРАНА ВЫПОЛНЕНИЯ ПРОГРАММЫ ДО НАЖАТИЯ КЛАВИШИ "ENTER"}

END.

 

Результат выполнения программы приведен на рис. 1.1.

 

Рис. 1.1

 

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

 

ВЫРАЖЕНИЯ

 

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

Постановка задачи:вычислить значение Y .

 

Пример:

при x = 3.5; z = 10-5; b = 4.

Программа расчета:

program lab;

CONST {исходные данные вводим как константы}

x=3.5;

z=1e-5;

b=4;

VAR

ch,zn,y:real; {числитель, знаменатель дроби, результат }

BEGIN

ch:=exp(x)+exp(6*ln(z))-4.5E2*sqrt(x); {числитель для Y}

zn:=exp(x*ln(z))+exp(3.5*ln(b)); {знаменатель}

y:=ch/zn; {значение Y }

WriteLn('Arithmetic expression: Y=',y:8:4);{вывод результатов на экран}

END.

 

Результаты расчета:

 

Arithmetic expression: Y= -6.3184

 

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

 

1. Y=;

2. Y=

3. Y=

4. Y=

5. Y=

6. Y=;

7. Y=

8. Y=

9. Y=

10. Y=;

11. Y=;

12. Y=;

13. Y=;

14. Y=;

15. Y=;

16. Y=;

17. Y=;

18. Y=

19. Y=;

20. Y=

21. Y=;

22. Y=

23. Y=

24. Y=

25. Y=;

26. Y=;

27.Y=;

28. Y=;

29. Y=;

30. Y=;

 

 

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

 

УСЛОВНЫЕ ОПЕРАТОРЫ

Цель работы–ознакомление с задачами, в которых используются условные операторы if и case; приобретение навыков в применении условных операторов в программе.

Постановка задачи: составить программу ввода исходных данных, анализа аномальных ситуаций и условий для вычислений; вывести результаты в виде, принятом в математике.

 

Теоретические сведения

Оператор условия if является одним из самых популярных средств, изменяющих естественный порядок выполнения операторов программы. Он может принимать… Ключевые слова if, then, else означают соответственно «если», «то», «иначе».… Если значение логического выражения (условия) истинно (True), выполняется <оператор-1>, если ложно (False) –…

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

Задача 1

Ввести числа x и a и вычислить значения функции Y при помощи оператора if. Предусмотреть проверку аномальных ситуаций, при которых функций не существует. Эта задача соответствует задаче 1 в примере.

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

 

Задача 2

Используя оператор варианта case, составьте программу с вводом исходных данных, номера варианта и вывода результата. Эта задача соответствует задаче 2 в примере.

1. Вычислить площадь геометрической фигуры

Исходные данные ввести с клавиатуры.

2. Дано положительное число a не больше 3. В зависимости от целой части этого числа вычислить:

3. Даны три целых положительных числа a, b, c. Определив остаток k от деления этих чисел на целое положительное число d (равное, например, 3), вычислить

4. Дана последовательность символов: 'a', 'b', 'c', 'd', 'e', 'v', 'x', '.', ',', ':'. Классифицировать эти символы, указывая группы:

- гласные буквы;

- согласные буквы;

- знаки пунктуации.

Ввести символ с клавиатуры. Вывести на экран символ с указанием группы.

5. Ввести символ с клавиатуры. Определить, является ли этот символ:

- латинской буквой;

- русской буквой;

- знаком арифметической операции (+, -, *, /);

- другим символом.

6. Ввести вещественные числа: x, a, b, c. Вычислить

7. Даны три числа a, b, c. Вычислить:

8. Ввести с клавиатуры любой символ. Классифицировать его следующим образом:

· латинская буква;

· русская буква;

· цифра;

· другой символ.

9. Числа a, b, c, d ввести с клавиатуры. Определить, какое из этих чисел является минимальным. Если минимальным является первое число, то передать управление оператору с меткой m1; если второе –передать управление оператору с меткой m2, и т.д. Под метками предусмотреть операторы вывода информации об определенном минимуме и его номере в последовательности чисел.

10. Даны три целых положительных числа a, b, c. Определить целую часть k от деления на 3 числа . Вычислить

11. Даны два числа x и y. Вычислить: ;

12. Дано положительное число и вещественное число x. В зависимости от округления a вычислить

13. Ввести с клавиатуры числа a и b. Вычислить

14. В зависимости от значения остатка от деления целого числа a на 3, вычислить

С клавиатуры ввести вещественное число x и целое число a.

15. Ввести с клавиатуры трехзначное целое положительное число. Определить, есть ли среди цифр этого числа одинаковые. Напечатать на экране либо 'Нет одинаковых цифр', либо 'Две одинаковые цифры', либо 'Три одинаковые цифры'.

Примечание. Цифры вводить без пробелов и при анализе в программе считать цифру символом (тип char)

16. Ввести номер месяца года (например, 1 соответствует месяцу 'январь', 12 – месяцу 'декабрь'). В зависимости от номера месяца вывести на экран название месяца, а также время года.

17. Ввести координаты точки . Проанализировать положение точки на плоскости и вывести одно из следующих сообщений: 'точка находится в 1-й четверти', … 'точка находится в 4-й четверти', 'точка находится на оси Х' и т.д.

18. Дано положительное число a. В зависимости от его округления вычислить

Число x ввести с клавиатуры.

19. Вычислить

Иначе сообщить о том, что x не входит в указанные диапазоны. Значение x ввести с клавиатуры.

20. Ввести вещественные числа x, a и целое число k. В зависимости от значения остатка от деления числа k на 4, составить программу для вычисления

21. Вычислить

Число x ввести с клавиатуры. Вывести значения x, z и номер варианта.

 

22. Вычислить

Использовать функции Round или Trunc. Значения xи b ввести с клавиатуры.

 

23. Символ вводить с клавиатуры. Классифицировать символ следующим образом:

- латинская буква;

- цифра;

- скобка.

 

24. Ввести с клавиатуры символы S1 и S2, соответствующие дню недели. Если введены два символа 'пн', то напечатать 'понедельник', 'вт' – 'вторник', 'ср' – 'среда', 'чт' – 'четверг', 'пт' –'пятница', 'сб' – 'суббота', 'вс' – 'воскресенье'. Предусмотреть возможность ввода прописных и строчных букв, а также вложения оператора case в оператор case.

 

25. Ввести с клавиатуры числа xи y. Затем сделать сообщение о вводе операции и ввести один из символов: +, -, *, /. Вывести результат операции. Константами селектора в операции case будут символы операций. При вводе другого символа (не операции) предусмотреть сообщение.

 

26. Вычислить

Числа a, b, c, x, k ввести с клавиатуры.

 

27. Вычислить

Числа aиx ввести с клавиатуры.

28. Вычислить

Числа xиk ввести с клавиатуры.

29. В зависимости от значения остатка от деления числа k (ввести с клавиатуры) на 3 вычислить:

30. Используя внутренний код символа по формуле

#<номер символа в таблице кодов>,

протестировать нажатие следующих клавиш:

ESC – внутренний код #27 {конец работы}

ENTER – внутренний код #13, #10.

Для тестирования ENTER использовать вложенный оператор case.

 

Задача 3

Ввести с клавиатуры координаты точки (переменные x и y). Проверить принадлежность этой точки заштрихованной области. Эта задача соответствует задаче 3 в примере.

 

Частичное совмещение круга и треугольника Фигура образована частичным совмещением одинаковых квадратов
Квадрат за вычетом меньшего квадрата Фигура составлена из полукруга и половины квадрата
Пересечение круга и прямоугольника Полукольцо с внутренним радиусом r = 2 и внешним R = 3
Фигура составлена из квадрата и половины меньшего квадрата Фигура составлена из половины эллипса и квадрата
Части круга, лежащие: а) выше прямой y = 1; б) ниже прямой y = –1. Полукруг за вычетом прямоугольника
Фигура, образованная наложением одинаковых эллипсов Квадрат за вычетом круга
Фигура составлена из полукруга и квадрата Пересечение эллипса и круга
Часть квадрата, ограниченная прямыми x = 1, x = –1 Квадрат за вычетом меньшего квадрата
Пересечение кольца и квадрата Круг, за вычетом части, лежащей в квадрате
Круг за вычетом квадрата Фигура образована наложением эллипса на прямоугольник
Круг за вычетом треугольника Часть эллипса, ограниченная сверху прямой y = 1, а снизу прямой y = –1
Эллипс за вычетом кольца Круг с наложением двух квадратов
Квадрат за вычетом полукруга Части эллипса, лежащие: а) левее прямой x = –1; б) правее прямой x =1
Частичное совмещение квадрата и круга Круг за вычетом квадрата
Фигура составлена из двух одинаковых квадратов Частичное совмещение квадрата и половины такого же квадрата

 

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

 

ОПЕРАТОРЫ ЦИКЛА

 

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

Постановка задачи.

Для заданного ряда необходимо найти следующее:

1) сумму N элементов ряда (с использованием оператора FOR);

2) сумму S элементов ряда для каждого значения x из заданного интервала, каждый раз изменяя значение x на величину шага hx. Каждую сумму искать с точностью до e, то есть прекратить вычисления, когда значение очередного члена ряда станет меньше e. Использовать для организации циклов операторы WHILE, REPEAT…UNTIL.

Теоретические сведения

Очень часто при составлении программ встречается ситуация, когда действие необходимо выполнить некоторое количество раз. Здесь требуется оператор… В языке Pascal три оператора цикла: · с параметром for;

Var

p,x:real;

i,n:integer;

Begin

read(x,n);{ввод x ,n}

p:=1;{присвоение степени начального значения}

For i:=1 to abs(n) do

p:=p*x;{вычисление степени}

ifn<0 then {если степень отрицательна}

p:=p/x;

write(p);

End.

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

while <условие>do<оператор>;

Этот оператор задает повторяющееся выполнение оператора, содержащегося в нем. Перед каждым выполнением внутреннего оператора производится проверка значения булевского выражения (условие), которое служит критерием повторения: если это выражение имеет значение true, то выполняется очередная итерация; в противном случае выполнение оператора цикла заканчивается. Если выражение с самого начала имеет значение false, то цикл не выполнится ни разу.

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

Program digits;

Var

n,k:integer;

Begin

write(‘введите n’);

readln(n);

k:=1;

While n div 10>0 do

Begin

k:=k+1;

n:=n div 10;

end;

write(‘Количество цифр:’,k);

End.

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

write(‘введите положительное n’);

readln(n);

While n < 0 do

Begin

write(‘введите n’);

readln(n);

end;

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

Оператор цикла с постусловием имеет следующую синтаксическую форму:

Repeat

оператор1;

оператор2;

. . . . . .

операторN;

until <условие>;

Этот оператор аналогичен предыдущему. Отличие заключается в том, что условие окончания цикла проверяется после выполнения очередной итерации (таким образом гарантируется хотя бы однократное выполнение цикла). Кроме того, критерием окончания цикла является равенство выражения, описывающего <условие>, константе true. Если выражение имеет значение false, то цикл выполняется.

Перепишем теперь фрагмент ввода, используя цикл repeat.

Repeat

write(‘введите положительное n’);

readln(n);

until n>=0;

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

.

Для любого k было бы нерационально считать входящие в выражения для общего члена степень и факториал с самого начала, имея их значения при предыдущем k. Как степень, так и факториал будут возрастать с ростом k, что может привести к потере точности и/или переполнению разрядной сетки при раздельном их вычислении. Удобнее найти так называемое рекуррентное соотношение, которое устанавливает зависимость между двумя соседними членами ряда в виде коэффициента рекуррентности (q) и в дальнейшем вычислять рекуррентно bk = bk–1q для k = 1, 2, ... при очевидном начальном условии b0 = x. Для нашего случая

.

 

Пример выполнения задания

;

1) n = 9, x = 0.6;

2) x = 0.1…1.0,

 

Вывод коэффициента рекуррентности q

  . Проверка правильности вычисления q

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

 

 

1. ;

1) n = 6, x = 0.1; 2) x = 0.1…1.0,

 

2. ;

1) n = 8, x = 1.2; 2) x = 1…2,

 

3.

 

4.

 

5.

 

6.

 

7.

 

8.

 

9.

 

10.

 

11.

 

12.

 

13.

 

14.

 

15.

 

16.

17.

 

18.

 

19.

 

20.

 

21.

 

22.

 

23.

 

24.

 

25.

 

26.

 

27.

 

28.

 

29.

 

30.

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

МАССИВЫ

 

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

Постановка задачи: выполнить два задания, по одному на каждый вид массива.

Теоретические сведения

Одним из основных структурированных типов алгоритмических языков программирования является тип-массив. Каждое значение типа-массива состоит из… Для корректного определения типа-массива необходимо задать две характеристики:…

Type

A:array [ t1 ] of t2;

где arrayиof – служебные слова, t1 обозначает тип индекса массива, t2 – тип компонент массива. В дальнейшем идентификатор этого типа может быть использован в описании переменных.

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

Ниже приведены несколько примеров описания массивов.

Type

M1 = array[1..100] of real;

M2 = array[char] of boolean;

Matrix = array[1..10] of array[1..20] of integer;

Var

Vector : M1;

Sym_Table : M2;

Arr1,Arr2 : Matrix;

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

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

Для задания количества элементов массива используется имя типа; число элементов определяется количеством возможных значений указанного типа, что отличает Pascal от многих других языков, в которых размер массива задается либо целым числом (или выражением целого типа), либо диапазоном целых чисел. Такая особенность языка Pascal придает ему дополнительную гибкость, позволяя “нумеровать” элементы массива не только целыми числами, но и значениями произвольного дискретного типа. Например, массив Sym_Table из предыдущего примера может адекватно моделировать некоторую логическую шкалу, в которой каждому символу (с типом char) соответствует некоторое логическое значение, а доступ к элементам этого массива может быть организован следующим образом:

Sym_Table [‘a’] := true;

If Sym_Table [‘.’] then …;

В качестве элементов массива могут выступать значения любого типа, в частности, ими могут быть значения любых составных типов, например массивы:

Var

V2 : array[1..10] of array[1..20] of byte ;

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

Var

V2:array[1..10,1..20] of byte;

Количество индексов в определении (то есть размерность массива) в языке не ограничивается.

Pascal допускает единственно возможное действие над массивом в целом: использование его в операторе присваивания, например:

Vect1:=Vect2;

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

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

Так, доступ к элементам массива, описанного в первом примере, строится следующим образом:

Vector[1];

Vector[(i+1)*2].

Двумерный массив V2, описанный выше, допускает такой доступ к своим элементам:

V2[3,7]

V2[i,j]

Рассмотрим подробнее массив V2. Вследствие того, что его можно трактовать как «массив массивов», то, например, конструкция V2[k] вполне допустима в языке и в данном случае обозначает k–й массив в группе из 10 массивов байтовых элементов. Для того чтобы адресоваться, скажем, к 5-му элементу этого массива, можно записать V2[k][5].

Такая запись корректна, но ее более привычный эквивалент – V2[k,5] – можно считать сокращением первоначальной записи.

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

 

Рассмотрим примеры решения некоторых типовых задач, связанных с обработкой массивов.

 

1. Упорядочивание массива по возрастанию.

Упорядочивание массива по какому-либо признаку называется сортировкой. Существуют различные методы сортировки, они различаются в основном по скорости получения результата. Рассмотрим один из них – метод “пузырька”. Это наиболее простой (но и наиболее медленный) метод сортировки. Его еще называют «сортировка обменом пар».

Рассмотрим алгоритм этого метода подробно. Пусть имеется последовательность из шести чисел, содержащих следующие значения: 1, 3, 4, 2, 6, 5.

Пройдем по массиву, сравнивая первый элемент со вторым, второй с третьим и так далее до пятого. Будем проверять упорядоченность, и если она нарушена (т.е. если значение некоторого элемента больше значения следующего элемента), то поменяем эти значения местами. Например, дойдя до третьего элемента, значение которого равно 4, мы обнаружим, что оно больше значения четвертого элемента, равного 2. Выполнив обмен, получим новую последовательность значений: 1, 3, 2, 4, 6, 5.

После этого перейдем к четвертому элементу. Теперь его значение равно 4. Значение следующего элемента равно 6, оно больше 4, поэтому обмена значениями не происходит. Перейдя к пятому, обнаруживаем, что его значение больше шестого, и производим обмен. Итак, выполнив один проход по массиву, получим последовательность значений: 1, 3, 2, 4, 5, 6.

Эта последовательность до конца не отсортирована. Однако мы можем с уверенностью сказать, что наибольший элемент находится на своем месте – на правой границе массива. Выполняя новые проходы, каждый раз сокращая количество просматриваемых элементов на 1, мы в конечном счете отсортируем все значения. Данный алгоритм получил название «пузырьковая сортировка», так как в процессе каждого прохода элемент как бы «всплывает» на свое место, подобно пузырьку воздуха в воде.

Приведем пример программы, реализующей описанный алгоритм сортировки.

Program sort;

Const

n=7;

Var

a:array[1..n] of real;

x,i,j:integer;

Begin

For i:=1 to n do

Begin

write(‘a[‘,i,’]=’);

readln(a[i]);

end;

For i:=1 to n-1 do

For j:=1 to n-i do

If a[j]>a[j+1] then

Begin

x:=a[j];

a[j]:=a[j+1];

a[j+1]:=x

end;

For i:=1 to n do

write(a[i]:5);

readln;

End.

2. Поиск элемента в массиве.

Одна из важных невычислительных задач – поиск данного значения среди элементов массива. Такой поиск также называется поиском по ключу. На практике поиск осуществляется в упорядоченном массиве. Имеются различные алгоритмы поиска. В данном учебном примере осуществим поиск путем сплошного перебора. Если элемент найден, напечатаем его номер, если нет – выдадим соответствующее сообщение. Существенным является то, какой из одинаковых элементов массива, равных данному, нас интересует: первый, встретившийся при поиске, или последний. В данном примере будем искать первый. Поиск осуществляется в цикле. Как только элемент найден, надо выйти из цикла. Для досрочного выхода из цикла используем оператор безусловного перехода goto. Если досрочный выход не произойдет, значит, элемент, равный данному, в массиве отсутствует. В таком случае выдача сообщения об отсутствии элемента должна быть сразу после цикла поиска. Следовательно, чтобы обойти печать номера элемента, надо использовать еще один оператор goto и еще одну метку в программе.

Возможный вариант программы поиска:

Program poisk;

Const

n=7;

label1,2;

Var

a:array[1..n] of real;

x:real;i:integer;

Begin

For i:=1 to n do

Begin

write(‘a[‘,i,’]=’);

readln(a[i]);

end;

write(‘введите искомое x=’);

readln(x);

For i:=1 to n do

If a[i]=x then goto 1;

writeln(‘такого числа в массиве нет’);

goto 2;

1: write(‘номер элемента массива, равного данному значению ’,i)

End.

3.Алгоритмы обработки матриц.

Двумерный массив или прямоугольная матрица B из n строк и m столбцов в общем виде выглядит следующим образом:

b11 b12 b1m

b21 b22 b2m

bn1 bn2 bnm

На языке Pascal имена элементов массива записываются также с двумя номерами (индексами):

b[1,1],b[1,2],…,b[1,m],b[2,1],b[2,2],…,b[2,m],…,b[n,1],b[n,2],…,b[n,m].

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

Рассмотрим задачи обработки матриц и алгоритмы их решения.

3.1. Вычисление суммы элементов главной диагонали квадратной матрицы.

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

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

При вычислении суммы элементов диагонали следует обратить внимание на имена суммируемых элементов: оба индекса имеют одинаковое значение, т.е. в общем виде имя элемента диагонали будет b[i,i]. Это означает, что можно рассматривать диагональ как одномерный массив и использовать один цикл для вычислений.

Программа имеет следующий вид:

Program Sum_Diagonal;

Const

N=3;

Var

b:array[1..n,1..n] ofreal;

I,j:interger;

S:real;

Begin

writeln(‘введите значения элементов матрицы по строкам’);

writeln(‘в конце каждой строки нажимайте Enter’);

For i:=1 to n do

Begin

forj:=1 to n do read(b[i,j]);

writeln;

end;

S:=0;

For i:=1 to n do

S:=s+b[i,i];

write(‘сумма элементов диагонали матрицы s=’,s);

End.

3.2.Нахождение наибольших элементов каждой строки матрицы.

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

Program Max_In_Rows;

Const

n=3;

Var

b:array[1..n,1..n] ofreal;

I,j:interger;

a:array [1..n] of real;

Begin

writeln(‘введите значения элементов матрицы по строкам’);

writeln(‘в конце каждой строки нажимайте Enter’);

For i:=1 to n do

Begin

forj:=1 to n do read(b[i,j]);

writeln;

end;

For i:=1 to n do

Begin

a[i]:=b[i,1];

For j:=2 to n do

if a[i]<b[i,j] then a[i]:=b[i,j];

end;

writeln (‘Наибольшие значения строк матрицы S’);

writeln (‘Номер строки Наибольшее значение’);

For i:=1 to n do

writeln (i:6,’ ’:20,a[i]);

End.

3.3. Нахождение сумм элементов столбцов матрицы.

При обработке матриц можно осуществлять операции как над строками, так и над столбцами. При нахождении суммы элементов столбцов можно использовать алгоритм из программы summa предыдущего раздела. Для лучшего понимания работы программы введем переменную S для вычисления суммы, а затем для каждого столбца запишем полученный результат в массив a, т.е. присвоим его переменной a[j], где j – текущий номер столбца матрицы.

Ниже приводится возможный вариант программы.

Program Sum_By_Columns;

Const

n=3;

Var

b:array[1..n,1..n] ofreal;

I,j:interger;

S:=real;

a:array [1..n] of real;

Begin

writeln(‘введите значения элементов матрицы по строкам’);

writeln(‘в конце каждой строки нажимайте Enter’);

For i:=1 to n do

Begin

forj:=1 to n do read(b[i,j]);

writeln;

end;

For j:=1 to n do

Begin

S:=0;

for i:=1 to n doS:=S+b[i,j];

a[,j]:=S;

end;

write(‘сумма элементов столбцов матрицы: ’);

For i:=1 to n do

write(a[i]);

End.

3.4. Перестановка строк матрицы.

В прямоугольной матрице b из n строк и m столбцов требуется поменять местами две строки. При решении этой задачи можно использовать алгоритм обмена значениями двух переменных из программы сортировки. Для этого достаточно организовать цикл по переменной столбца и, используя промежуточную (буферную) переменную, менять местами каждую пару элементов, стоящих в одном столбце. При заданных номерах строк K и L решение выглядит так:

Program Sum_Diagonal;

Const

n=3;m=4;

Var

b:array[1..n,1..m] ofreal;

c:real;

K,L,i,j:interger;

Begin

write(‘Введите номера меняемых местами строк матрицы’);

readln(K,L);

writeln(‘введите значения элементов матрицы по строкам’);

writeln(‘в конце каждой строки нажимайте Enter’);

For i:=1 to n do

Begin

forj:=1 to n do read(b[i,j]);

writeln;

end;

For j:=1 to m do

Begin

c:=b[K,j];

b[K,j}:=b[L,j};

b[L,j}:=c;

end;

writeln;

writeln(‘матрица с переставленными строками:’);

For i:=1 to n do

Begin

For j:=1 to m do

write(b[i,j]);

wtiteln

end;

End.

 

Пример решения лабораторной работы.

Задача 1. Рассчитать сумму отрицательных элементов массива А(n), если известно, что n = 5, A = (1.5, -4.6, 10, -1.7, -4.9).

Программа 1:

PROGRAM lab5_1;

CONST

n=5;

TYPE

ar=array[1..n] of real;

VAR

a:ar;

s:real;

i:integer;

BEGIN

{Ввод исходных данных}

WriteLn(‘Введите ’, n, ' вещественных элементов массива‘);

for i:=1 to n do

Read(a[i]);

{Выполнение задачи}

s:=0;

for i:=1 to n do

if a[i]<0 then s:=s+a[i];

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

if s=0 then WriteLn(‘Отрицательных элементов нет.’)

else WriteLn(' S=',s:8:4);

END.

Результаты расчета:

 

S=-11.2000

 

Задача 2. Найти разность R между максимальным и минимальным элементами массива

 

Программа 2:

 

PROGRAM lab;

CONST

m=3; {количество строк, столбцов}

TYPE

mas=array[1..m,1..m] of integer;

VAR

A:mas; {массив А}

R:integer; {разность}

Amax:integer; {максимальный элемент}

Amin:integer; {минимальный элемент}

i,j:integer; {счетчики по строкам, столбцам}

BEGIN

for i:=1 to m do {чтение исходных данных}

for j:=1 to m do read(A[i,j]);

close(fi)

Amin:=A[1,1]; {начальные установки}

Amax:=A[1,1];

for i:=1 to m do {поиск минимального и максимального элементов} for j:=1 to m do

begin

if A[i,j]<Amin then Amin:=A[i,j];

if A[i,j]>Amax then Amax:=A[i,j]

end;

R:=Amax-Amin; {разность}

WriteLn(' R=',R:4);

close(fo)

END.

 

 

Результаты расчета:

R = 20

 

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

Задача 1

1. Найти корни уравнения Ax + Bsina = 0, где a = 1.3, A = {1.1, 2.5, 3.9, 8.1, 4.5, 12.1, 11.9, 15.5}. (i = 1..8).

2. Вычислить массив , где – положительные корни уравнения Ax + Bcosb = 0, при А = 0.75, B = 4.5, b = -1.5 .. 2.5, .

3. Найти сумму всех положительных элементов массива A = {-1.2, 3.5, 4.1, 8.5, 5.3, -6.1, 3.4, 2.7}.

4. Найти произведение элементов массива A = {1, 3.5, 4, -0.8, 1.9, 5, 13}, удовлетворяющих условию , если С = 2, D = 10. Сформировать из этих элементов массив Z.

5. Вычислить

при Y = -5.5, X = {-1.8, -1.6, ... , 1.2}. Результат представить в виде массива.

6. Найти номера первого нечетного и последнего четного чисел из последовательности целых чисел N = {10, 8, 4, 3, 6, 15, 2}.

7. Даны два массива: A = {1.1, 2, 4, 5.1, -8.2, -1.5, 1.2}, B = {-1.3, 2.7, -3.2, 5, 1.8, -4.6, -1.2}. Найти число перемен знаков последовательности попарных произведений

8. Найти разность между максимальным и К-м элементом массива А = {-1.1, 2.5, -2.9, 8.8, 14.5, 2.2, -1.3, 5.9} при К = 4.

9. Вычислить элементы массива

где x – корни серии уравнений Аx + sini = 0, , А = 5.5.

10. Найти сумму первых К положительных элементов массива А = (2.8, -3.5, -2.1, 4, 6, 8.1, 6.2, 9.5, 1.1) при К = 5.

11. Найти количество элементов массива A = {1.2, 5, 7, 9.3, 6.9, -8, -1.5, 2.5, 2.8}, удовлетворяющих условию , если С = -3.5, D = 6. Сформировать из этих элементов массив F.

12. Найти произведение последних N отрицательных элементов массива А = (-5, 6.1, -9.2, 4, 5, -2, 7, -1, 5, 4, 1.9, -3, 5); N = 3.

13. Сформировать массив , четные компоненты которого равны компонентам массива А = (-5.1, 2.3, 4.6, 5.8, -2.9), нечетные – компонентам массива В = (2.8, 3, 5.4, -1.9, -4.1).

14. Найти количество положительных, отрицательных и равных нулю элементов массива М = (-5, 0.1, 2.8, 0.64, 3, -5.1, 0, -7.5, 4.6, 10).

15. Среди последовательности чисел найти первое, меньшее заданного числа e (e = ).

16. Элементы массива A вычисляются по формуле , i = 1..10. Сформировать массив B, элементы которого удовлетворяют условию , если С = 2.5, D = 10.3.

17. Задан массив целых чисел N = (1, 5, -3, 3, 15, 21, 8, -5). Необходимо за один просмотр найти два минимальных числа.

18. Вычислить значения элементов массива S, которые являются модулями элементов массива Z: .

19. Даны два массива: М1 = (-5, 10, 21, 35, -9, 11, 4, 5) и М2 = (1, 5, 10, -3, 4, -15, 36, 6, 11). Найти их объединение и результат записать в массив М3.

20. Вычислить где х = , массив, элементы которого являются остатком от деления целых компонентов массива N = (156, 18, 72, 10, 95, 100) на целое число К = 9.

21. Задан массив Х = (-1.5, 6.8, -3, 9, 7, -2.7, -4.5, 1.6). Вычислить произведение модулей отрицательных и сумму положительных элементов массива Х.

22. Заданы массивы А = (-1.1, 2, 8, 9, 5, 5.3, 5, -5, 2.1) и С = (8, 9, 1, 2, -5, 3.4, 4.9, 6, 1.8). Найти их пересечение и результат записать в массив В.

23. Задан массив А = (5.5, -6, 8, 9.1, -3.5, 4.1, 10, -1, 2.5). Вычислить , где и – соответственно максимальный и минимальный элементы массива А; – их среднее арифметическое.

24. В массиве Н = (-0.5, 2.8, 9.1, -0.3, 10, -1, 2.1, 8.2) указать номер первого элемента, сумма которого с последующим за ним элементом не превышает D (D = 1.5).

25. Вычислить

где – элементы массива В = (0.1, 2, 5, -3.1, 4.2, -1.2, 6, -2, 3.7, 5.2), n = 10, a = 4.5.

26. Решить квадратное уравнение , где А – сумма элементов массива К = (2.1, 0.25, 1.4, -1.9), В – их произведение, а С = -1.34.

 

27. Вычислить элементы массива Y по формуле

где - корень уравнения , – элемент массива А = (1.2, -4.6, 3.8, -2.3, 0.6, 1.7).

28. Найти большее из чисел А, В, С, где А – сумма модулей отрицательных, В – произведение положительных элементов массива К, С – разность между максимальным и минимальным его элементами. К = (10.1, 0.2, -3.4, -0.5, 3.6, -12.9, 5.7).

29. Определить произведение двух чисел А×В, где А – сумма первых К, а В – последних К элементов массива С = (2, 4, -2, 9, 7, -10, 11, -1), К = 3.

30. Определить величины и индексы максимального по модулю и минимального элементов массива В = (-1.5, 6.9, 13, 6.2, -17, 8, 6.6).

 

Задача 2

1. Задан массив А(m,n). Сформировать массив В из наименьших элементов каждой строки массива А:

2. Дан массив В(m,n). Сформировать массив С(n) из сумм элементов каждого столбца В:

3. В массиве Е(m,n) поменять местами элементы i-й и k-й строк:

4. В массиве Р(m,n) все элементы разделить на максимальный элемент k-го столбца:

5. Задан массив А(m,n). Сформировать массив С из элементов четных столбцов и массив В из элементов нечетных строк массива А:

6. Дан целочисленный массив О(m,n). Сформировать одномерные массивы В и С, содержащие, соответственно, четные и нечетные элементы массива А:

7. Сформировать массив В из произведений элементов столбцов массива Z:

8. Сформировать массив Т из сумм элементов, расположенных в строках с отрицательными элементами на главной диагонали исходного массива Z:

9. Сформировать массив NS из номеров строк массива R, в которых имеются повторяющиеся значения:

10. В массиве Q(m,n) заменить отрицательные элементы номером столбца, в котором они находятся:

11. Сформировать массив В из элементов массива А, меньших Е:

12. Сформировать массив В из элементов, расположенных ниже главной диагонали исходного массива К:

13. В массиве V(n,n) элементы строки, содержащей наибольший элемент, заменить на s:

14. Преобразовать массив H(n,n), разделив все элементы на максимальный элемент К-го столбца:

15. Найти разность R между максимальным и минимальным элементами массива W:

16. Задан массив A(m,n). Сформировать массив B из положительных элементов массива A:

, m = 2, n = 3.

17. Преобразовать массив G(m,n), поменяв местами элементы К-го и (К+1)-го столбцов:

18. К отрицательным элементам массива D(m,n) прибавить S, а из положительных вычесть X:

19. В массиве F(n,m) заменить все положительные элементы их квадратами, а отрицательные – их кубами:

20. Сформировать массив В из отношений элементов N и S столбцов массива:

21. Сформировать массив R из номеров строк массива Y(m,n), в которых находятся максимальные элементы каждого столбца:

22. Сформировать массив К из положительных отношений элементов n-го и s-го столбцов массива

23. Сформировать одномерный массив В из элементов массива А(n,n), которые по величине больше, чем С:

24. Элементы массива S(m,m) разделить на сумму элементов, расположенных на главной диагонали:

25. Преобразовать массив А(m,n), умножив его элементы на сумму соответствующих им индексов:

26. Сформировать массив В из элементов главной диагонали и массив С из элементов дополнительной диагонали исходного массива А:

27. Определить сумму S элементов массива А(n,n), расположенных ниже главной диагонали, и произведение Р элементов массива А(n,n), расположенных выше главной диагонали:

28. Преобразовать массив К(m,m), заменив все элементы, большие А, максимальным элементом массива К, а элементы, меньшие В, – минимальным его элементом:

29. Определить массив В из произведений элементов строк исходного массива K:

30. Найти разность R между максимальным и минимальным элементами массива Y:

 

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

 

ТЕКСТОВЫЕ ФАЙЛЫ

 

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

Постановка задачи:

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

2. Ввести исходный массив из текстового файла. Вывести его в естественном виде. Выполнить задание. Результаты вывести в другой текстовый файл.

Теоретические сведения

Файл – поименованная область для хранения данных на физическом носителе. Доступ к файлу для обмена данными происходит по имени. Устройства ЭВМ, с которыми происходит обмен данными, в MS DOS также… CON – клавиатура (экран дисплея); если ‘СОN’ организован для чтения, то это клавиатура, если для записи – экран;

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

 

ПОДПРОГРАММА-ПРОЦЕДУРА

 

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

Постановка задачи:

1. Выполнить задание с использованием процедур.

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

3. Решение задачи оформить в виде процедуры.

4. Исходную матрицу и результаты вывести в другой текстовый файл. Вывод данных в файл оформить в виде процедуры.

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

Теоретические сведения

В языке Pascal подпрограмма является частью основной программы, ее описание располагается в описательной части программы, т.е. перед первым begin… Подпрограмм может быть несколько, их описания располагаются в произвольном… Описание подпрограмм можно сравнить с записываемой в математике формулой «в общем виде», в которую при расчетах…

Begin

If x < y then z := x

else z := y

End;

 

Begin

{Ввод исходных данных задачи}

Writeln(‘Введите три числа’);

Readln(a,b,c);

{Присваивание исходных данных для функции}

x := a;

y := b;

Min; {Первый вызов функции}

{После вызова функции z=min (a,b)}

{Присваивание новых исходных данных для функции}

x := z;

y := c;

Min; {Второй вызов функции}

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

Writeln (‘Наименьшее из введенных чисел - ’, z);

End.

 

Использование параметров для обмена данными

 

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

Формальные параметрыописываются в заголовке и используются при записи алгоритма в описании процедуры.

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

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

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

Параметры-значения описываются без слова var. Для их хранения на время выполнения подпрограммы выделяются дополнительные ячейки в памяти. При вызове подпрограммы значения фактических параметров копируются в ячейки формальных параметров и алгоритм подпрограммы обращается именно к этим копиям. После окончания работы подпрограммы доступ к этим ячейкам теряется. Следствиями этого для параметров-значений являются следующие факты:

· в качестве фактического параметра при вызове подпрограммы в общем случае может быть выражение, в частности, переменная или константа;

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

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

Параметры-переменные описываются со словом var. Для их хранения на время выполнения подпрограммы в памяти не выделяются дополнительные ячейки. При работе алгоритма подпрограммы переменные – формальные параметры – используют ячейки памяти фактических параметров и обращаются непосредственно к ним. Следствиями этого для параметров-переменных являются следующие факты:

· в качестве фактического параметра при вызове подпрограммы может быть только переменная;

· изменение значения формального параметра при выполнении подпрограммы приводит к такому же изменению значения фактического параметра;

· параметры-переменные могут использоваться как для передачи в подпрограмму исходных данных, так и для передачи результата из подпрограммы в вызывающую программу.

Напишем новую программу, решающую задачу 1 с использованием подпрограммы с параметрами. Исходные данные подпрограммы (x, y) могут быть описаны как параметры-значения, а результат (z) должен быть описан как параметр-переменная.

 

Program Min2;

{Описание переменных}

Var a,b,c, {исходные данные задачи}

z : real; {результат функции и результат задачи}

{Описание функции}

Procedure Min (x,y : real; var z :real);

Begin

If x < y then z := x

else z := y

End;

 

Begin

{Ввод исходных данных задачи}

Writeln(‘Введите три числа’);

Readln(a,b,c);

{Первый вызов функции}

Min (a,b,z);

{После вызова функции z=min (a,b)}

{Второй вызов функции}

Min (z,c,z);

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

Writeln (‘Наименьшее из введенных чисел - ’, z);

End.

 

Пример выполнения лабораторной работы

Задание. Найти разность R между максимальным и минимальным элементами массива

Программа расчета:

 

program lab_8_2;

uses crt;

const MaxDim = 10; {максимальный размер матрицы}

type arr=array[1.. MaxDim,1.. MaxDim] of integer; {описание типа arr}

{для массива А }

var A : arr; {массив А}

R : integer; {разность}

Amax : integer; {максимальный элемент}

Amin : integer; {минимальный элемент}

m : word; {реальный размер квадратной матрицы}

fi,fo : text; {файловые переменные}

{описание процедуры чтения массива из файла}

{f, a1, MaxD, m1 – формальные параметры}

 

Procedure ReadFromFile (var f:text; var a1:arr; MaxD:word ;var m1:word);

{Исходные данные: f – файл исходных данных,

MaxD – максимальная размерность массива a1.

Результат: заполненный массив a1 и его реальный размер – m1. .}

Var i, j : word; {счетчики по строкам, столбцам –

локальные переменные }

begin

readln (f,m1); {чтение размера матрицы из}

{первой строки файла}

if m1> MaxD then {проверка размера матрицы}

begin

m1:= MaxD;

writeln(‘Матрица из файла урезана до размера массива’);

end;

 

for i:=1 to m1 do {чтение из файла матрицы А}

begin

for j:=1 to m1 do read ( fi,a1[i,j] );

readln(fi); {перевод указателя файла на новую строку}

end;

end;

 

{описание процедуры нахождения минимального и максимального элементов массива}

 

Procedure MaxMin(a1:arr; m1:word; var min, max : integer);

{Исходные данные: массив a1 и его реальный размер – m1.

Результат: min, max – минимальный и максимальный его элементы.}

Var i, j : word; {счетчики по строкам, столбцам –

локальные переменные }

begin

min:=a1[1,1]; {начальные установки}

max:=a1[1,1];

{поиск минимального и максимального элементов:}

for i:=1 to m1 do

for j:=1 to m1 do

begin

if a1[i,j] < min then min:=a1[i,j];

if a1[i,j] > max then max:=a1[i,j];

end;

end;

 

 

{описание процедуры вывода результата в файл и на экран}

 

Procedure SaveToFile(var f:text; min, max, R : integer);

{Исходные данные: f – файл для сохранения результата, min, max, R – выводимые в файл и на экран данные. Результатом подпрограммы является вывод результатов программы в файл и на экран}

 

begin

writeln (fo,' Amax=',max,' Amin=',min,' Разность=',R);

writeln ('Amax=',max,' Amin=',min,' Разность=',R);

end;

{начало основной программы}

begin

clrscr;

assign (fi, 'input8_2.pas');

reset (fi);

{вызов процедуры чтения данных из файла}

{ fi, A, MaxDim, m – фактические параметры}

ReadFromFile (fi, A, MaxDim, m);

close( fi );

{вызов процедуры решения основной задачи}

{A, m, Amin, Amax – фактические параметры}

MaxMin(A, m, Amin, Amax);

R:=Amax-Amin; { вычисление разности}

assign (fo, 'out_8_2.pas');

rewrite (fo);

{вызов процедуры вывода результатов в файл}

{ fo, Amin, Amax, R – фактические параметры}

SaveToFile(fo, Amin, Amax, R);

close (fo);

repeat until keypressed;

end.

 

Файл исходных данных Input8_2.pas:

12 4 -7 6 1 7 -8 3 2

 

Файл результата Out_8_2.pas:

Amax=12 Amin=-8 Разность=20

Варианты заданий взять из лабораторной работы № 5 (для задачи 2).

 

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

 

ПОДПРОГРАММА-ФУНКЦИЯ

 

Цель работы – составление программ с использованием подпрограмм-функций; усвоение принципа локализации.

Постановка задачи:вычислить значение Y, написав для его вычисления удобные функции; необходимые для вычисления значения ввести из текстового файла.

Теоретические сведения

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

Структура описания функции имеет такой вид:

 

function <имя функции>[(<список формальных параметров>)] :<тип>;

[<раздел описания>]

Begin

<перечисление операторов и программных единиц>

End;

 

Отличие в описании состоит в том, что в заголовке указывается тип функции, а в блоке реализации обязательно должен присутствовать оператор присваивания:

<имя функции> := <выражение>;

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

В качестве примера рассмотрим применение подпрограммы-функции к задаче 1 из лабораторной работы № 7.

 

Program Min3;

{Описание переменных}

Var a,b,c, {исходные данные задачи}

{Описание функции}

Function Min (x,y : real) : real; { min – результат функции }

Begin

If x < y then min := x

else min := y

End;

 

Begin

{Ввод исходных данных задачи}

Writeln(‘Введите три числа’);

Readln(a,b,c);

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

Writeln (‘Наименьшее из введенных чисел - ’, min( min(a,b),c);

End.

 

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

 

Пример:

при x = 3.5; z = 10-5; b=4.

Программа расчета:

program lab_8;

var x1, z1, b1 : real; {исходные данные}

f : text;

{функция для вычисления степени p положительного числа a}

function pov(a, p :real) : real;

begin

pov:=exp(p*ln(a))

end;

{функция для вычисления выражения задачи}

function y(x,z,b :real) : real;

var

ch,zn,y:real; {числитель, знаменатель дроби, результат }

begin

ch:=exp(x)+pov(z,6)-4.5E2*sqrt(x); {числитель для Y}

zn:=pov(z,x)+pov(b,3.5); {знаменатель}

y:=ch/zn; {значение Y }

end;

 

BEGIN

{ввод исходных данных из файла}

Assign(f, ‘inp.txt’);

Reset(f);

Readln(f,x1,z1,b1);

Close(f);

{вычисление y и вывод результата на экран}

WriteLn(' Arithmetic expression: Y=',y(x1,z1,b1):8:4);

END.

 

Файл исходных данных Inp.txt:

3.5 1.0e-5 4

Результаты расчета:

Arithmetic expression: Y= -6.3184

Варианты заданий взять из лабораторной работы № 2.

 

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

ЗАПИСИ

 

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

Постановка задачи:

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

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

3. Результаты вывести в текстовый файл. Вывод результатов должен производиться специально созданной для этого процедурой.

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

 

Теоретические сведения

Запись – структура, состоящая из конечного числа компонент, называемых полями. Компоненты записи (поля) могут принадлежать разным типам. Компонента (поле) –… Описание.

Теоретические сведения

Модули пользователя Модуль в Турбо Паскале – специальным образом оформленная библиотека… 1) объем текста основной программы вместес инклудами и памятью для числовых величин не должен превышать 64 кбт, а…

Создание модуля

· заголовок модуля (UNIT <имя модуля>); · раздел объявлений – интерфейс : INTERFACE; · раздел реализаций – IMPLEMENTATION;

Варианты заданий взять из лабораторной работы № 7 или № 9 по указанию преподавателя.

– Конец работы –

Используемые теги: информатика0.043

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: ИНФОРМАТИКА

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

Лекции по курсу Информатика Лекция 1. Основные понятия и методы теории информатики и кодирования. Информатика как научная дисциплина. Понятие информации и информационных процессов
Лекция Основные понятия и методы теории информатики и кодирования... Информатика как научная дисциплина... Понятие информации и информационных процессов...

ЛЕКЦИЯ 1. 3 ПОНЯТИЕ ПРАВОВОЙ ИНФОРМАТИКИ И ЕЕ ПРЕДМЕТ. Правовая информатика как наука и учебная дисциплина. О месте правовой информатики в системе наук и правоведении. 14
ВВЕДЕНИЕ... ЛЕКЦИЯ... ПОНЯТИЕ ПРАВОВОЙ ИНФОРМАТИКИ И ЕЕ ПРЕДМЕТ Правовая информатика как наука и учебная дисциплина...

Лекции 1.ОСНОВНЫЕ ПОНЯТИЯ И КАТЕГОРИЯ ИНФОРМАТИКИ. 2 ЛЕКЦИИ 2. МАТЕМАТИЧЕСКИЕ ОСНОВЫ ИНФОРМАТИКИ. СИСТЕМЫ СЧИСЛЕНИЯ. 12 ЛЕКЦИЯ 3. АППАРАТНОЕ ОБЕСПЕЧЕНИЕ ЭВМ. 20 ЛЕКЦИЯ 4. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ КОМПЬЮТЕРОВ.. 49 Широко распространён также англоязычный вар
gl ОГЛАВЛЕНИЕ... Лекции ОСНОВНЫЕ ПОНЯТИЯ И КАТЕГОРИЯ ИНФОРМАТИКИ... ЛЕКЦИИ МАТЕМАТИЧЕСКИЕ ОСНОВЫ ИНФОРМАТИКИ СИСТЕМЫ СЧИСЛЕНИЯ...

Объект и предмет информатики. Структура Информатики
Информатика делится на ряд разделов... Теоретическая информатика... Основная статья Теоретическая информатика...

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

КУРС ЛЕКЦИЙ по дисциплине Информатика Лекция 1 1. Введение в информатику
Федеральное агентство по образованию... Государственное образовательное учреждение... высшего профессионального образования...

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

Рассматривается история развития информатики и излагается предмет информатики
Ключевые слова advanced brainware CD RW DARPA edu gov hardware Internet MAX net org science true Windows автомат база данных вектора... Хотя информатика и считается достаточно молодой наукой по отношению ко многим... При рассмотрении вопроса об истории информатики будем исходить из первых признаков и событий информационного обмена...

ЛЕКЦИИ ПО КУРСУ ИНФОРМАТИКА Лекция 1. Введение. История информатики. Измерение
Лекция... Введение История информатики Измерение...

Тема урока: Информация и её виды. Что изучает информатика? Техника безопасности в компьютерном классе Урок информатики в 10 классе 1 Из материалов сайта
Урок информатики в классе... Из материалов сайта Скородянской средней школы Губкинского района... Цель урока Познакомить учащихся с новым предметом Изучить понятие информации Воспитание умения слушать учителя...

0.034
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам