Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методические указания 2 (1)

.pdf
Скачиваний:
25
Добавлен:
12.02.2015
Размер:
542.06 Кб
Скачать

ФГБОУ ВПО «Омский государственный университет им. Ф.М. Достоевского»

Институт математики и информационных технологий

Методические указания и задания по учебной практике на ЭВМ.

Часть I.

Омск 2013

1

Методические указания и задания по учебной практике на ЭВМ.

Часть I / Сост.: Н.С. Бахта, Н.П. Тыркова, Омск: ФГБОУ ВПО «ОмГУ им. Ф.М. Достоевского», 2013. с. 16

В методических указаниях по учебной практике на ЭВМ приведены задания для лабораторных работ и варианты индивидуальных программ, рекомендации и требования к ним для студентов первого курса ИМИТ специальностей «Прикладная математика и информатика» и «Фундаментальная математика и механика», а также студентов второго курса направления «Педагогическое образование (математика и информатика)». Указания могут быть использованы при проведении лабораторных работ по курсу «Информатика и вычислительная техника» для студентов естественных и экономических специальностей.

2

ad bc 0 .

Лабораторная работа №1 Ознакомление со средой Free Pascal.

1.Вызвать Free Pascal (из приложения FAR или из меню ПУСК Windows).

2.Создать программу, которая выводит на экран сообщение, приветствующее создателя.

3.Сохранить программу на диске D:, дав ей индивидуальное имя.

4.Откомпилировать программу и вызвать её на выполнение.

5.Выйти из Free Pascal.

6.Скопировать файл, содержащий программу на съёмный носитель.

7.Снова вызвать Free Pascal, открыть ранее созданный файл (не тот, который находится на съёмном носителе!)

8.Сделать изменения в программе так, чтобы сообщение выводилось в рамке. Описать три переменные, которые будут хранить соответственно число, месяц и день недели. Присвоить значения этим переменным и вывести их на экран. Проверить работу программы.

9.Сохранить измененную программу под другим именем на диске D: и на съёмном носителе.

10.Создать новый файл в Free Pascal. Установить режим работы с двумя окнами.

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

12.Сохранить исходный файл с прежним именем. Новому файлу дать другое имя при сохранении на съёмный носитель.

13.Проверить работу программ.

14.Выйти из Free Pascal.

Лабораторная работа №2 Задания на описание переменных, вычисление выражений и ввод-вывод.

1.Написать программу на языке Паскаль, которая спрашивала бы пользователя, как его зовут, а затем выводила приветствие с использованием этого имени так, чтобы последняя буква приветствия находилась в 40-й позиции на экране от левого края.

2.Дана система из двух линейных уравнений с двумя неизвестными:

ax by e;cx dy f .

Вычислить x и y по формулам: x

x

,

y

y

, где ad bc , x ed fb , y af ce .

 

 

 

 

 

 

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

Посмотрите, что произойдет, если ввести коэффициенты уравнений так, что

3. Заданы

вершины треугольника (своими координатами на плоскости):

A(x1, y1) , B(x2 , y2 ) ,

C(x3, y3) .

Вычислить длину

медианы, проведенной из вершины

A по формуле:

 

1

 

 

 

 

 

mA

 

2a2

2b2 c2 , где a, b,

c – длины сторон треугольника, которые можно вычислить,

 

2

 

 

 

 

 

 

используя координаты вершин.

4. Выражение ab bc на языке Паскаль можно записать в виде: a b b / c . Записать на Паскале следующие выражения:

3

1)

ln x e y

ab

;

 

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2)

 

| x y |

 

;

 

 

 

 

 

 

 

 

 

x y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3)

2a b log2 (bc) ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4)

6 ab(cd ef ) ;

 

 

5)

 

xy z 4

| x ex |

z ;

 

(106

 

 

 

 

 

 

 

 

 

ln y )

 

 

 

 

 

6)

2sin

x y

cos

x y

;

 

 

 

2

 

 

 

 

 

 

2

 

7)tg 3x arctg y ;

8)arcsin x.

5.Запишите выражение на языке Паскаль в общепринятой математической форме: x2 sin( y2 alfa) / abs(x4 exp( 5)) x .

6.Переменные a и c имеют значения 6 и 4 соответственно. Какое значение примет переменная b после выполнения оператора присваивания:

1)b : a 2 / 3 c ;

2)b : (a 2) /(3 c) ?

Лабораторная работа №3 Задания на применения операторов ветвления, цикла и выбора.

1.Проверить, являются ли все три вещественных числа, введенных пользователем с клавиатуры, положительными и вывести соответствующее сообщение (например, «Не все числа положительны»).

2.Заданы три вещественных числа. Проверить, существует ли треугольник, длинами сторон которого являются эти числа, и вывести соответствующее сообщение.

3. Заданы вершины треугольника (своими координатами на плоскости): A(x1, y1) , B(x2 , y2 ) , C(x3, y3) . Выяснить тип треугольника (тупоугольный, прямоугольный или остроугольный), и

вывести соответствующее сообщение.

4. Что появится на экране в результате работы нижеследующей программы (попытаться ответить на вопрос, не запуская программу)?

program testreal; {$N+}

var a,b : single; i : integer;

begin a:=1/31; b:=0;

for i:=1 to 31 do b:=b+a;

writeln(b);

readln;

end.

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

4

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

русская буква, знак препинания, прочие символы. Вывести на экран соответствующее сообщение.

6. Вычислить сумму

S

1

 

 

 

1

 

 

 

1

 

, где n – нечетное число, большее 1. Число n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

3

3 5

(n 2) n

 

 

 

 

 

 

 

 

 

 

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

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

Примеры:

***********************

* Добрый день, Андрей! *

***********************

*****************************

* Добрый день, Пётр Иванович! *

*****************************

Лабораторная работа №4 Задания на составление подпрограмм, использование массивов.

Указание:

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

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

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

3.Переделать подпрограмму из предыдущего задания в подпрограмму– функцию.

4.Написать тестирующие программы для пунктов 2 и 3.

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

Лабораторная работа №5 Задания на использование файлов, указателей и динамической памяти.

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

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

5

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

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

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

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

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

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

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

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

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

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

Индивидуальное задание №1

Цель работы.

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

Содержание задания.

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

Рекомендации к программе.

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

6

2.Для простоты лучше заполнять таблицу, последовательно выводя на экран строки, а не столбцы.

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

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

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

Пример выходной формы (последняя страница таблицы).

Экран № 4

 

 

 

Таблица значений функции

 

 

 

 

 

При параметре 2.65676Е+00

 

 

! -

- - - - - - - -

! -

- - - - - - - - - -

! -

- - - - - - - -

! -

- - - - - - - - - -

!

!

Аргумент

!

Функция

!

Аргумент

!

Функция

!

! -

- - - - - - - -

! -

- - - - - - - - - -

! -

- - - - - - - -

! -

- - - - - - - - - -

!

!

1.5000

!

1.8793Е-01

!

1.5300

!

1.0836Е-01

!

! -

- - - - - - - -

! -

- - - - - - - - - -

! -

- - - - - - - -

! -

- - - - - - - - - -

!

!

1.5600

!

2.8683Е-02

!

1.5900

!

-5.1016Е-02

!

! -

- - - - - - - -

! -

- - - - - - - - - -

! -

- - - - - - - -

! -

- - - - - - - - - -

!

!

1.6200

!

-1.3067Е-00

!

1.6500

!

-2.1020Е-01

!

! -

- - - - - - - -

! -

- - - - - - - - - -

! -

- - - - - - - -

! -

- - - - - - - - - -

!

!

1.6800

!

-2.8955Е-01

!

1.7100

!

-3.6864Е-01

!

! -

- - - - - - - -

! -

- - - - - - - - - -

! -

- - - - - - - -

! -

- - - - - - - - - -

!

!

1.7400

!

-4.4739Е-01

!

1.7700

!

-5.2574Е-01

!

! -

- - - - - - - -

! -

- - - - - - - - - -

! -

- - - - - - - -

! -

- - - - - - - - - -

!

!

1.8000

!

-6.0362Е-01

!

1.8300

!

-6.8096Е-01

!

! -

- - - - - - - -

! -

- - - - - - - - - -

! -

- - - - - - - -

! -

- - - - - - - - - -

!

!

1.8600

!

-7.5768Е-01

!

1.8900

!

-8.3372Е-01

!

! -

- - - - - - - -

! -

- - - - - - - - - -

! -

- - - - - - - -

! -

- - - - - - - - - -

!

!

1.9200

!

-9.0901Е-01

!

1.9500

!

-9.8348Е-01

!

! -

- - - - - - - -

! -

- - - - - - - - - -

! -

- - - - - - - -

! -

- - - - - - - - - -

!

!

1.9800

!

-1.0571Е+00

!

2.0100

!

-1.1297Е+00

!

! -

- - - - - - - -

! -

- - - - - - - - - -

! -

- - - - - - - -

! -

- - - - - - - - - -

!

!

2.0400

!

-1.2013Е+00

!

2.0700

!

-1.2719Е+00

!

! -

- - - - - - - -

! -

- - - - - - - - - -

! -

- - - - - - - -

! -

- - - - - - - - - -

!

!

2.1000

!

-1.3413Е+00

!

 

!

 

!

! -

- - - - - - - -

! -

- - - - - - - - - -

! -

- - - - - - - -

! -

- - - - - - - - - -

!

Для продолжения нажмите ENTER

7

Требования к программе.

Основные:

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

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

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

4.Должна проверяться правильность ввода параметра p и в случае неверного ввода предлагаться повторный ввод.

Дополнительные:

5.Есть возможность переключения типа вывода значения функции – научный или с фиксированной точкой (тогда для числа знаков после точки тоже должна быть константа).

6.Значения табулируемой функции, т.е. f (x) , вычисляются в подпрограмме, которая

вызывается при построении таблицы.

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

8.Выполняется проверка согласованности констант, т.е. проверяется войдет ли таблица заказанных размеров на экран, поместятся ли числа в столбцах заказанной ширины и т.д.

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

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

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

8

 

 

 

 

Варианты задания №1.

 

 

 

 

 

Ниже использованы обозначения:

x - аргумент функции

 

f (x) ; h - шаг табулирования; p -

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

 

 

 

 

1. Протабулировать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

lg(1

 

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

px

)

 

 

при

x9

 

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f (x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

arctg 2 px

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

при

x

9

 

e

p

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

на 2.4,2.4 с шагом h 0.03 ; p 2,2 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. Протабулировать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

lg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(x p)2 p 4

при

x arctg ( p)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f (x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

при

x arctg ( p)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.5 x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

pe

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

на 2,4 с шагом h 0.02 ; p ( , 0.5] [0.5, ) .

 

 

 

 

 

 

 

 

 

 

3. Протабулировать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

при

 

x

7

 

 

p

 

 

 

 

0.25 e

px

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f (x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

lg

 

 

 

 

 

 

 

 

 

arctg 2 px

при

 

x7

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

на 2,6 с шагом h 0.05;

p 3,3 .

 

 

 

 

4. Протабулировать

 

 

 

 

 

 

 

 

x 4

 

 

p cos

 

 

 

 

 

 

p

 

f (x)

4

 

 

 

px

 

 

 

 

 

 

 

lg( e

 

 

)

при x arctg ( p)

при x arctg ( p)

на 4,2 с шагом h 0.04;

 

p

 

2.5 .

 

 

5. Протабулировать

 

 

 

 

9

 

 

3

 

 

 

 

 

 

 

 

 

 

при

x sin p

 

 

1 x

2

p

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f (x)

 

 

2 x

 

 

 

 

 

 

 

 

 

 

px

 

1)

при

x sin p

 

 

 

 

 

 

 

ln(e

 

 

 

на 4,2 с шагом h 0.03 ;

p 2,2 .

 

 

 

 

 

 

 

 

 

 

 

 

6. Протабулировать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

lg 5 (2 x2 p 2 )

при

x arctg ( p)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

f (x) cos(x2 p)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x arctg ( p)

 

1

 

px

 

 

 

 

 

 

 

при

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

на 2,3 с шагом h 0.04;

 

p

 

4 .

 

 

7. Протабулировать

 

 

 

 

5 1 4 p 2 arctg 2 px f (x)

lg(1 px )

на 2.4,2.6 с шагом h 0.025 ;

p 0,3 .

 

 

 

 

8. Протабулировать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x 4 1

 

 

при

 

 

 

3

 

 

 

 

 

 

 

 

0.2 p

2 x 2

 

f (x)

 

 

 

 

 

 

px

 

 

при

 

 

 

 

 

 

 

 

 

lg( 2 e

 

)

 

 

 

 

 

на 2.7,2.3 с шагом h 0.05;

 

 

p

 

3 .

 

 

 

 

 

 

 

 

 

 

9. Протабулировать

 

 

 

 

 

 

 

 

 

при x p

при x p

x arctg ( p 2)

x arctg ( p 2)

 

 

 

 

 

 

 

 

 

 

 

 

при x arctg ( p x)

 

5

1

x

2

p

4

 

 

 

 

 

 

 

 

 

f (x)

 

 

 

 

 

 

 

 

 

 

2 x

 

 

 

 

 

 

 

 

 

 

 

 

px

 

 

 

при x arctg ( p x)

 

 

 

 

 

 

 

 

 

на 2.7,2.3 с шагом h 0.025 ;

 

lg(1 e

 

)

 

p

 

3 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10. Протабулировать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10