- •6 Вспомогательные материалы для выполнения лабораторных работ 102
- •3Введение
- •4Рекомендации по выполнению практической части лабораторных работ
- •5Методы процедурного программирования
- •6Модульное проектирование
- •7Структурное программирование
- •7.1Проектирование сверху вниз
- •7.2Модульное программирование
- •7.3Структурное кодирование
- •9Цель работы
- •10Порядок выполнения работы
- •11.1Запуск ide. Типы приложений
- •11.2Создание нового проекта
- •11.3Добавление к проекту файлов с исходным кодом
- •3.3.1 Добавление нового файла
- •3.3.2 Добавление существующего файла
- •11.4Многофайловые проекты
- •11.5Компиляция, компоновка и выполнение проекта
- •3.5.1 Конфигурация проекта
- •3.5.2 Как открыть проект, над которым вы работали ранее
- •12Встроенная справочная система
- •13Проблемы с вводом-выводом кириллицы
- •5.1. Замечания по потоковому вводу-выводу
- •6. Работа с отладчиком
- •6.1. Установка точки прерывания
- •6.2. Выполнение программы до точки прерывания
- •6.3. Пошаговое выполнение программы
- •6.3.1 Проверка значений переменных во время выполнения программы
- •6.3.2 Окна Auto, Local и Watch
- •7 Содержание отчета по лабораторной работе
- •14Контрольные вопросы
- •Как открыть проект, над которым вы работали ранее?
- •14.1Рекомендуемые источники информации
- •15Лабораторная работа 2. Программирование разветвляющихся алгоритмов
- •16Цель работы
- •17Задание
- •18Рекомендации по разработке программы
- •19Требования к отчету
- •20Контрольные вопросы
- •21Рекомендуемые источники информации
- •Московский государственный технический университет им. Н.Э. Баумана.
- •22Лабораторная работа 3. Табулирование функций с использованием рядов Тейлора
- •23Цель работы
- •24Задание
- •25Рекомендации по выполнению работы
- •25.1Указание к задаче 1 задания
- •25.2Указание к задаче 2 задания
- •25.3Указание к задаче 3 задания
- •25.4Указание к задаче 4 задания
- •26Содержание отчета.
- •27Контрольные вопросы
- •28Рекомендуемые источники информации
- •29 Варианты задания
- •29.1.1.1Вариант 1
- •29.1.1.2Вариант 2
- •29.1.1.3Вариант 3
- •29.1.1.4Вариант 4
- •29.1.1.5Вариант 5
- •29.1.1.6Вариант 6
- •29.1.1.7Вариант 7
- •29.1.1.8Вариант 8
- •29.1.1.9Вариант 9
- •29.1.1.10Вариант 10
- •29.1.1.11Вариант 11
- •29.1.1.12Вариант 12
- •29.1.1.13Вариант 13
- •30Лабораторная работа 4 Численные методы решения нелинейных уравнений
- •31Цель работы.
- •32Задание.
- •33Рекомендации по выполнению работы
- •34Содержание отчета
- •40Примеры работы с массивами
- •40.1Количество элементов между минимальным и максимальным
- •40.2Динамические массивы
- •40.3Использование датчика случайных чисел.
- •41Содержание отчета
- •42Контрольные вопросы
- •43Рекомендуемые источники информации
- •44Лабораторная работа 6. Численное интегрирование функций
- •45Цель работы.
- •46Задание.
- •47Рекомендации по выполнению работы.
- •47.1Метод прямоугольников.
- •47.2Метод трапеций.
- •47.3Формулы для вычисления точных значений интеграла:
- •47.4Примеры передачи в функцию в качестве параметров одномерных массивов и имен функций.
- •3.5. Пример вывода таблицы результатов
- •47.5Функция для печати таблицы результатов
- •48Содержание отчета
- •49Контрольные вопросы
- •50Рекомендуемые источники информации
- •51Лабораторная работа 7 Обработка и печать числовой матрицы
- •52Цель работы
- •53Задание
- •Рекомендации по выполнению работы
- •53.1Создание двухмерных динамических массивов
- •53.2Передача многомерного массива в функцию с помощью параметров.
- •53.3Пример разработки программы сортировки строк матрицы
- •53.4Основные правила работы с двухмерными массивами
- •53.5Рекомендации по созданию программы
- •54Содержание отчета
- •55Контрольные вопросы
- •57.3Рекомендации по выполнению работы
- •57.4Ввод-вывод строк
- •57.5Пример программы работы с символьными строками.
- •I. Исходные данные и результаты
- •II. Алгоритм решения задачи
- •57.6Работа с файлами
- •Void open (char*FileName, int режим, int защита);
- •57.7Потоки ввода-вывода.
- •57.7.1.1Функции для обмена с потоками
- •57.7.1.2Функции чтения
- •57.8Использование аргументов командной строки
- •Часть 1.
- •Часть 2.
- •63.33. Рекомендации по выполнению работы
- •63.4Алгоритм вычисления обратной матрицы
- •63.4.1.1Шаг 1. Прямой ход
- •63.4.1.2Шаг 2. Обратный ход
- •63.4.23.2. Точность вычисления обратной матрицы.
- •69Задание и требования к результатам работы
- •70Рекомендации по выполнению работы
- •70.1Шаги разработки программы
- •70.2Работа со структурами
- •70.3Дополнительные требования для «сильных» студентов:
- •71Содержание отчета
- •72Контрольные вопросы
- •73Рекомендуемые источники информации
- •74Домашнее задание. Методические указания к домашнему заданию по курсу «Основы программирования»
- •76Цели домашнего задания
- •2. Требования к выполнению задания
- •76.1Групповая разработка проектов
- •76.2Шаги выполнения задания
- •77Требования к отчету
- •78Оценка выполнения задания
53Задание
2.1 Разработать функцию для вывода на экран матрицы double matr[N][M] для распечатки двухмерных массивов. Размерность матрицы может быть произвольной.
Функция должна обеспечивать удобное для пользователя отображение матрицы на экране в фиксированном (fixed) или научном (scientific) форматах с требуемой точностью n знаков после запятой (устанавливается setprecision(n)). Матрица, тип формата, число знаков после запятой и число знаков в целой части (используется только при выводе в фиксированном формате, для научного формата всегда равна 1) должны передаваться в функцию в виде параметров.
Указание: В зависимости от требуемой точности вывода элементов, размера матрицы и формата вывода, функция должна вычислить ширину поля вывода одного элемента матрицы w (при печати используется в операторе setw(w) ) и определить число столбцов матрицы (ncol), которое поместится в одной строке на экране, и количество рядов (строка на экране вмещает 80 символов и все столбцы матрицы могут не поместиться в одной строке).
Печать матрицы следует выполнять в несколько рядов по ncol столбцов в каждом (кроме последнего ряда), печатая в каждом ряду все строки столбцов этого ряда. Над каждым столбцом печатать его номер.
2.2 Использовать эту функцию для печати квадратной матрицы А размером N*N (где N вводится с клавиатуры).
- все элементы главной диагонали матрицы А равны 1;
- элементы, лежащие выше главной диагонали, вычисляются по формуле
A i,j = xi / (j!)i ,
а элементы, лежащие ниже главной диагонали, по формуле
A i,j = (-x)i / (j!)i, где i,j =1,2,…,N; x=1.
Для вычисления значений элементов матрицы использовать рекуррентные соотношения.
Алгоритм заполнения матрицы реализовать в виде функции.
2.3 Не изменяя кода функции вывода матрицы, распечатать матрицу в «научном» формате и в формате с фиксированной точкой с требуемой точностью.
Распечатать с помощью разработанной функции, используя вспомогательный массив указателей на строки, матрицу размером B[10][10], заданную с помощью оператора описания (нединамическую). Значение элементов матрицы В определяется соотношением: B[i][j]=i*10+j.
2.4 Вставьте в программу и объясните результаты выполнения следующих операторов
для матрицы В[10][10]:
cout<<B<<" "<<B[0]<<" "<<B[2]<<endl;
cout<<B[0][0]<<" "<<**B <<" "<<*B[0]<<endl;
cout<<*(*(B+1))<<" "<<*B[1]<<endl;
cout<<*(B[0]+1)<<" " <<*(*B+1)<<endl;
cout<<B[0][20]<<" "<<*(B[0]+20)<<" "<<*B[2]<<endl;
Рекомендации по выполнению работы
Прежде чем приступать к выполнению задания прочитайте приведенный ниже текст и выполните по шагам программу сортировки строк матрицы, приведенную в п.3.3 (в отчет программу не включать).
53.1Создание двухмерных динамических массивов
В динамической области памяти можно создавать двумерные массивы с помощью операции new или функции mаllос. Остановимся на первом варианте, поскольку он более безопасен и прост в использовании.
Обращение к элементам динамических массивов производится точно так же, как к элементам «обычных», с помощью конструкции вида a[i ][j].
Универсальный способ выделения памяти под двумерный массив, когда обе его размерности задаются на этапе выполнения программы, приведен ниже:
int nrow, ncol;
cout << " Введите количество строк и столбцов :";
cin >> nrow >> ncol;
int **a = new int *[nrow]; // 1
for(int i = 0; i < nrow; i++) // 2
a[i] = new int [ncol]; // 3
Для того чтобы понять, отчего динамические массивы описываются именно так, нужно разобраться в механизме индексации элемента массива. Поскольку для доступа к элементу массива применяется две операции разадресации, то переменная, в которой хранится адрес начала массива, должна быть указателем на указатель.
В операторе 1 объявляется переменная типа «указатель на указатель на int» и выделяется память под массив указателей на строки массива (количество строк — nrow). В операторе 2 организуется цикл для выделения памяти под каждую строку массива. В операторе 3 каждому элементу массива указателей на строки присваивается адрес начала участка памяти, выделенного под строку двумерного массива. Каждая строка состоит из ncol элементов типа int (рис. 1).
Освобождение памяти из-под массива с любым количеством измерений выполняется с помощью операции delete [], например: delete [] a;
Рис. 1. Схема динамической области памяти, выделяемой под массивы
