Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Лабораторная работа 1. Вычисление математических выражений

Общие указания

Выбор варианта

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

,

где

– номер варианта;

– номер студента в списке группы;

– количество вариантов заданий на лабораторную работу.

Например, номер студента в группе – "23", количество вариантов – 20. Тогда номер варианта задания на лабораторную работу, которое необходимо выполнить студенту будет

.

 

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

,

где

– номер варианта;

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

– количество вариантов заданий на лабораторную работу.

Например, две последние цифры номера студенческого билета – «76», количество вариантов – 20. Тогда номер варианта задания на лабораторную работу, которое необходимо выполнить студенту будет

.

В первом семестре дисциплины (не путать со вторым учебным семестром, когда изучается дисциплина) выполняются 1-5 лабораторные работы. При этом лабораторная работа №4 оформляется как контрольная.

Во втором семестре дисциплины выполняются 6-9 лабораторные работы. При этом лабораторная работа №8 оформляется как контрольная.

Универсальность функций

В варианте может быть представлено несколько заданий. Каждое задание должно быть выполнено в виде отдельной функции, которая возвращает результат, который выводится или используется в функции «main». Никаких вычислений из текста задания в «main» не должно быть. Только ввод исходных данных и вывод результата.

Для примера рассмотрим задание лабораторной работы «Массивы» вариант №1:

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

1. сумму отрицательных элементов массива;

2. произведение элементов массива, расположенных между максимальным и минимальным элементами.

Упорядочить элементы массива по возрастанию.

В данном варианте можно выделить три самостоятельных операции:

1. Вычисление суммы отрицательных элементов массива.

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

3. Сортировка элементов массива по возрастанию.

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

В некоторых случаях разумно и необходимо создавать дополнительные функции. Для примера рассмотрим задание лабораторной работы «Файлы» вариант №14:

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

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

Оформление кода

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

· в нём должны быть отступы;

· имена функций и переменных должны отражать своё назначение;

· избегать использования глобальных переменных;

· переменные должны иметь подходящий тип с учётом знака и наименьшего размера;

· неиспользуемые переменные должны быть удалены;

· лишние операторные скобки (пары «{}») также должны быть удалены;

· входные параметры функций должны быть объявлены как константы (спецификатор «const»);

· в качестве библиотеки ввода-вывода необходимо использовать потоковую библиотеку ввода-вывода «iostream»;

· по результатам компиляции код не должен содержать ни одной ошибки и предупреждения;

· весь ввод-вывод должен происходить внутри функции «main»;

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

· комментарии программы должны отражать псевдокод.

Рассмотрим эти положения более подробно.

Отступы

Можно использовать два стиля отступов: стиль Олмана

void output_matrix(const double M[5][4])

{

unsigned int i, j;

for (i=0; i<5; i++)

{

for (j=0; j<4; j++)

cout << M[i][j] << " ";

cout << endl;

}

}

и стиль «K&R»:

void output_matrix(const double M[5][4]) {

unsigned int i, j;

for (i=0; i<5; i++) {

for (j=0; j<4; j++)

cout << M[i][j] << " ";

cout << endl;

}

}

Как видно основное отличие заключается в местоположении операторных скобок «{}». Более подробное описание можно найти в [1,9,10].

Имена функций и переменных

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

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

const double MROT = 4330; // минимальный размер оплаты труда

Для локальных переменных, наоборот, лучше подходят короткие имена; для использования внутри функции вполне сойдет просто «n», неплохо будет смотреться «size», а вот «numberOfElements» будет явным перебором.

Обычно используемые локальные переменные по соглашению могут иметь очень короткие имена. Так, употребление «i», «j» и «k» для обозначения счетчиков цикла, «р» и «q» для указателей, «s» и «t» для строк стало настолько привычным, что применение более длинных имен не принесет никакой пользы, а наоборот, может даже навредить. Например,

for (theElementIndex=0; theElementIndex<numberOfElements; theElementIndex++)

elementArray[theElementIndex] = theElementIndex;

или

for (i=0; i<size; i++)

elem[i] = i;

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

int main()

{

double M[5][4];

input_matrix(M);

transpose_matrix(M);

output_matrix(M);

return 0;

}

Функции, которые возвращают логическое значение (истина или ложь – «true» или «false»), нужно называть так, чтобы их смысл не вызывал сомнений. Так, из вызова

const double MROT = 4330; // минимальный размер оплаты труда

if (check_digit(c)) ...

непонятно, когда будет возвращаться «true», а когда «false», а вот вызов

if (is_digit(c)) ...

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

Более подробное описание можно найти в [1,9].

Глобальные переменные

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

 

const double pi = 3.1415926;

const unsigned int n = 5; // размер матрицы

 

void output_matrix(const double M[n][n]) {

unsigned int i, j;

for (i=0; i<n; i++) {

for (j=0; j<n; j++)

cout << M[i][j] << " ";

cout << endl;

}

}

 

int main()

{

double M[n][n];

...

output_matrix(M);

return 0;

}

Тип переменной

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

При выборе типа для переменных с числовыми значениями следует учитывать:

· может ли содержать переменная только целые числа или вещественные;

· являются значения знаковыми или беззнаковыми (для целых чисел);

· минимально возможный размер памяти.

Например, индекс элементов массива является целым беззнаковым числом и не может принимать дробные значения. Если в массиве не более 255 элементов, то следует использовать тип «unsigned char» иначе «unsigned int». Среднее значение целых чисел не является целым числом, поэтому следует использовать тип «double».

Неиспользуемые переменные

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

Лишние операторные скобки

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

 

double output_matrix(const double M[5][4])

{

unsigned int i, j;

double s = 0;

for (i=0; i<5; i++)

{

for (j=0; j<4; j++)

{

s += M[i][j];

}

}

return s;

}

может быть записана так

double output_matrix(const double M[5][4])

{

unsigned int i, j;

double s = 0;

for (i=0; i<5; i++)

for (j=0; j<4; j++)

s += M[i][j];

return s;

}

Спецификатор const

Если в программе имеются переменные, значения которых не требуется изменять, то такие переменные должны быть объявлены со спецификатором «const». Например:

int main()

{

const double pi = 3.1415926;

double alpha;

cout << "Введите угол в градусах: ";

cin >> alpha;

cout << "Угол в радианах: " << alpha * pi / 360 << endl;

return 0;

}

Все входные параметры функций (в т.ч. передаваемые по ссылкам), также должны быть объявлены со спецификатором «const».

double degree2radian(const double angle)

{

return alpha * 3.1415926 / 360;

}

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

Библиотека ввода-вывода

В качестве библиотеки ввода-вывода следует использовать потоковую библиотеку ввода-вывода «iostream». Лабораторные работы, выполненные с помощью библиотеки «stdio» к защите не принимаются.

Ошибки и предупреждения

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

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

Ввод-вывод

Весь ввод-вывод должен происходить внутри функции «main». Не допускается использование операторов ввода-вывода в отдельных функциях за исключением функций, которые специально предназначены для ввода и вывода информации (например, ввод и вывод значений элементов матрицы).

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

Контроль вводимых значений

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

Комментарии и псевдокод

Описание в виде псевдокода должно быть трансформировано в комментарии программы. Ниже приведён всевдокод

// Печать табулированных значений функции sqrt(|X| - 2) с учётом ОДЗ

// Ввести входные данные

// Для каждого значения аргумента

// Если он входит в область допустимых значений

// Вычислить значение функции

// И вывести его

и соответствующий ему текст программы

// Печать табулированных значений функции sqrt(|X| - 2) с учётом ОДЗ

#include <iostream>

using namespace std;

#include <cmath>

 

int main()

{

double X, Xn, dx, Xk, Y;

 

// Ввести входные данные

cout << "Введите Xнач, шаг, Xкон: ";

cin >> Xn >> dx >> Xk;

 

// Для каждого значения аргумента

for (X=Xn; X<=Xk; X+=dx)

{

// Если он входит в область допустимых значений

if (-2 < X && X < 2)

continue;

 

// Вычислить значение функции

Y = sqrt(abs(X) - 2);

// И вывести его

cout << "sqrt(|" << X << "| - 2) = " << Y << endl;

}

return 0;

}

Общие требования к содержанию отчётов

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

1. Цель работы.

2. Задание.

3. Описание созданных функций.

4. Листинг программы.

5. Пример выполнения программы.

6. Анализ результатов и выводы.

Титульный лист должен быть оформлен по правилам оформления нормативной документации. Пример оформления титульного листа представлен в приложении 2. Бланк оформления можно скачать по ссылке http://guap.ru/guap/standart/otch_lab_43.rtf.

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

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

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

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

Основное требование к описанию алгоритма заключается в том, чтобы оно было более подробным описанием процесса решения задачи, чем постановка задачи из п.1, но менее подробным, чем текст программы. В описании должна найти отражение основная идея решения поставленной задачи. Описание приводится в виде блок-схемы и псевдокода для каждого действия программы.

В заключительном разделе должен быть приведен критический анализ проделанной работы с указанием достоинств и недостатков разработанного алгоритма решения задачи и его программной реализации, а также - количественные характеристики программы: ее объем, объем дополнительной памяти[3], привлекаемой для реализации алгоритма, время работы программы, измеренное в количестве выполняемых типичных операций в зависимости от размеров исходных данных.

Цель работы

Целью работы является вычисление сложных математических выражений.

Задание на лабораторную работу

Напишите программу для расчёта двух формул. Предварительно подготовьте тестовые примеры по второй формуле с помощью калькулятора (результат вычисления по первой формуле должен совпадать со второй). Значение параметров тригонометрических функций должны задаваться пользователем в градусах.

Примечание: список математических функций библиотеки С++ приведён в «Приложение 4. Перечень функций стандартной библиотеки C++».

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

Вариант 1

Вариант 2

Вариант 3

Вариант 4

Вариант 5

Вариант 6

Вариант 7

Вариант 8

Вариант 9

Вариант 10

Вариант 11

Вариант 12

Вариант 13

Вариант 14

Вариант 15

Вариант 16

Вариант 17

Вариант 18

Вариант 19

Вариант 20

Цель работы

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

Задание на лабораторную работу

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

Для подготовки тестовых данных, рекомендуется использовать Microsoft Excel. Создадим электронную таблицу следующего вида:

Рис. 2. Пример таблицы расчёта тестовых значений

Для примера рассмотрим вариант №13. В ячейку B1 вводится значение аргумента, а в ячейку B2 значение погрешности вычислений. Поскольку в сумме индексация начинается с нуля, то значения n в столбце B также начинаются с нуля. Столбец C содержит вычисления выражения под знаком суммы , и в ячейке C5 записана следующая формула:

=СТЕПЕНЬ(-1;B5)*СТЕПЕНЬ($B$1;2*B5)/ФАКТР(2*B5+1)

Ряд нужно вычислять до тех пор, пока выполняется следующее условие:

где – заданная погрешность вычислений в ячейке B2. Разность хранится в столбце D и вычисляется в ячейке D5 по следующей формуле:

=ABS(C6-C5)

В столбце E записаны такие значения , для которых выполняется вышеуказанное условие. В ячейке E5 записана формула:

=ЕСЛИ(D5>$B$2;C5;0)

Таким образом, вычисляемое значение является суммой значений в столбце E. В ячейке D1 записано:

=СУММ(E5:E15)

Количество просуммированных элементов для ячейки D2 можно сосчитать как:

=СЧЁТЕСЛИ(E5:E15;"<>0")

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

=SIN(B1)/B1

Погрешность вычислений из ячейки F2 определяется как разница между полученным и теоретическим значениями:

=D1-F1

Значения в F1 и F2 нужны, чтобы проверить, правильно ли закодированы формулы. Погрешность в F2 должна быть меньше, чем в B2.

Используя приведённую таблицу можно легко подготовить тестовые данные:

0,001 0,841666667
0,001 0,453968254
0,001 0,046958198

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

Вариант 1

Вариант 2

Вариант 3

Вариант 4

Вариант 5

Вариант 6

Вариант 7

Вариант 8

Вариант 9

Вариант 10

Вариант 11

Вариант 12

Вариант 13

Вариант 14

Вариант 15

Вариант 16

Вариант 17

Вариант 18

Лабораторная работа 3. Функции

Цель работы

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

Задание на лабораторную работу

Задания на лабораторную работу приводятся в каждом варианте.

По тестовым данным должны вычисляться все ветки функции .

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

Вариант 1

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|» и «&» - поразрядные. Значения ввести с клавиатуры.

Вариант 2

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|» и «&» - поразрядные. Значения ввести с клавиатуры.

Вариант 3

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|» и «&» - поразрядные. Значения ввести с клавиатуры.

Вариант 4

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операция «|» - поразрядная. Значения ввести с клавиатуры.

Вариант 5

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|» и «&» - поразрядные. Значения ввести с клавиатуры.

Вариант 6

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|» и «&» - поразрядные. Значения ввести с клавиатуры.

Вариант 7

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|» и «^» - поразрядные. Значения ввести с клавиатуры.

Вариант 8

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|», «~» и «&» - поразрядные. Значения ввести с клавиатуры.

Вариант 9

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|», «~» и «&» - поразрядные. Значения ввести с клавиатуры.

Вариант 10

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|», «^», «~» и «&» - поразрядные. Значения ввести с клавиатуры.

Вариант 11

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|» и «^» - поразрядные. Значения ввести с клавиатуры.

Вариант 12

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|» и «&» - поразрядные. Значения ввести с клавиатуры.

Вариант 13

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|», «^» и «&» - поразрядные. Значения ввести с клавиатуры.

Вариант 14

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|» и «^» - поразрядные. Значения ввести с клавиатуры.

Вариант 15

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|» и «~» - поразрядные. Значения ввести с клавиатуры.

Вариант 16

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

где - действительные числа.

Функция должна принимать действительное значение, если выражение не равно нулю, и целое значение в противном случае. Через целые части значений , операции «|», «^», «~» и «&» - поразрядные. Значения ввести с клавиатуры.

Вариант 17

Вычислить и вывести на экран в виде таблицы значения функции на <

Последнее изменение этой страницы: 2016-07-23

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...