МУ_ЛР3_ОП (1079925), страница 2
Текст из файла (страница 2)
Исполнимые модули предназначены для непосредственного выполнения на компьютере или подключения в выполняемую программу. Основные исполнимые модули имеют расширение *.exe (или *.com), поэтому операционная система может контролировать их запуск. Модули динамических библиотек имеют расширение *.dll. Существуют и другие разновидности исполнимых модулей, зависящих от используемых технологий. Исполнимые модули формируются специальной программой системы программирования редактором связей (или компоновщиком). Редактирование связей заключается в проверке межмодульных связей по функциям и по данным и объединении их единый исполнимый модуль. Последовательный процесс обработки программы для получения исходного модуля представлен в методическом пособии в разделе 3[5].
Для объединения модулей функционально и по данным в С++ используются прототипы функций и описание внешних переменных. Покажем это на простом примере:
// Модуль 1
int i = 0; // Глобальная переменная
int Summ(int a, int b){}; // Описание функции в модуле 1
…
// Модуль 2
extern int i; // Описание внешних данных
int Summ(int , int ); // Прототип внешней функции
main(){
…
i = 5; // Использование внешних данных
S = Summ(2,2); // Вызов внешней функции
…
}
В модуле 2 используется переменная i, описанная как глобальная переменная в модуле 1. В модуле 2 используется функция Summ, описанная как в модуле 1. Для правильного объединения связей (работы редактора связей) используются описания внешних данных (extern) и задание прототипа функции Summ.
9 Библиотеки функций
В системах программирования предусматривается много библиотек для функций различного назначения (например, для работы со строками, выполнения ввода и вывода, работы с массивами и т.д.). Эти библиотеки подключаются с помощью заголовочных файлов или пространств описаний (имен - namespace). Кроме заголовочных файлов для использования библиотек подключаются специальные модули (иногда они подключаются автоматически), содержащие описания функций ( *.lib или *.dll). Пример подключения библиотек ввода/вывода и библиотек для работы с математическими и системными функциями:
#include <math.h>
#include <process.h>
#include <stdio.h>
Стандартных библиотек очень много. Нужно хорошо знать их назначение и их состав для использования в программах. Чем лучше знания о библиотеках, тем быстрее и безошибочно можно создать сложную программу. В современных системах программирования доступны (большом количестве) библиотеки классов, которые описывают новые дополнительные типы данных.
10 Библиотеки функций и шаблонов классов: RTL, STL, MFC, ATL
В СИ++ введены специальные классы для работы с массивами. Для их использования необходимо освоить основы Объектно-ориентированного программирования, что вам предстоит в дальнейших дисциплинах. Для общих сведений приводим здесь материал о назначении библиотек MS VS.
В системы программирования включаются различные библиотеки функций и классов. В MS VS включено несколько групп таких библиотек, которые постоянно развиваются и добавлялись по мере развития самой системы программирования. К сожалению, для разных языков и систем программирования пока нет единого стандарта, поэтому разрабатывать программные системы, используя библиотеки разных разработчиков, затруднительно. Однако существуют технологии и платформы, позволяющие решить эту проблему.
В MS VS предусмотрены следующие группы библиотек:
-
C RTL - C Run-Time Libraries - стандартные библиотеки этапа выполнения.
-
STL - Standard C++ Library – стандартные библиотеки С++.
-
MFC - Microsoft Foundation Class Library – библиотеки классов MS.
-
ATL - Active Template Library – библиотеки шаблонов.
-
.NET Framework Class Library– библиотеки платформы .NET.
В C RTL включено много библиотек для работы со стандартными типами данных, файлами, строками и т.д. Эти библиотеки возникли относительно давно, но поддерживаются в настоящее время и представляют собой набор базовых средств программирования на языках С и С++.
В STL включено много библиотек, ориентированных на С++, и обеспечивающих работу с множеством классов, объектов и шаблонов. Эти библиотеки доступны всем пользователям и включают: библиотеки потокового ввода, вывода (cin, cout), работу с контейнерами объектов (vector, string, list, map, stack, set и многие другие.), работу с функциями из библиотек этапа выполнения (CRT).
В MFC включен широчайший набор классов и функций, позволяющих обеспечить программирование практически любых задач. Это библиотеки классов и функций: построения приложений, в том числе и в среде Windows, оконного интерфейса, управления файлами, работы с контейнерными классами, графического интерфейса, поддержки различных технологий, в том числе и современных (версии библиотек постоянно обновляются), программирования коммуникаций, обработки документов и многое другое. В частности, в других ЛР, мы познакомимся с контейнерами типа CArray, CList и др.
В ATL представлен набор библиотек, поддерживающих AX и СОМ технологий. Число доступных классов и шаблонов в этих библиотеках соизмеримы с набором библиотек MFC, они имеют дополнительные классы и классы, которые можно одновременно использовать совместно с MFC (“Shared by MFC and ATL”). В частности, в других ЛР, мы познакомимся с контейнерами типа CAtlArray, CAtlList и др.
.NET библиотеки представляют собой набор (иногда и более точно говорят платформу) библиотек для разработки программ – приложений самого универсального вида. В эту платформу включаются такие библиотеки, которые исключают необходимость использования устаревших библиотек (CTR и STL). Применение этой платформы позволяет сделать приложения более универсальными, охватывает большее число современных технологий и обеспечивает интеграцию с другими системами программирования, в том числе и на разных языках. В частности в этой платформе определены шаблоны классов Array, List и многие другие. .NET библиотеки широко используются для создания сайтов (ASP).Платформа .NET будет изучаться в отдельных дисциплинах.
Описания библиотек наиболее полно и с примерами в представлены [4]. Кроме того, описания библиотек CTR и STL вы найдете в [13]. Всю новую информацию об библиотеках можно также найти на сайтах MS. Хорошее знание существующих библиотек, их пополнения в новых версиях, несомненно, поможет вам стать профессионалом в программировании. В других ЛР цикла вы познакомитесь с составляющими других библиотек.
11 Примеры по теме ЛР № 4
Вторая часть задания, помимо первой связанной с изучением теоретического раздела, заключается в том, чтобы испытать в проекте СИ уже отлаженные программы и фрагменты программ. Нужно изучить технику этих программ и алгоритмы их работы. Это Вам понадобиться для выполнения контрольных заданий. Возможно, что, осваивая теоретическую часть работы, вы уже на компьютере проверили выполнение фрагментов текста и применения массивов и указателей, тогда вам будет проще продемонстрировать их работу преподавателю. В дополнение к примерам, расположенным выше нужно испытать и изучить примеры расположенные ниже в этом разделе. Эти действия нужно обязательно сделать в отладчике.
Для выполнения этой части ЛР этого нужно создать пустой проект в MS VS (Test_LR3), как описано выше, скопировать через буфер обмена в него текст данных примеров, отладить его и выполнить.
12 Примеры описаний и инициализации массивов
Здесь нужно проверить все примеры описания и инициализации массивов, приведенные в теоретической части ЛР. Проверьте операторы динамического определения размерности массива.
13 Сумма элементов массива
Ниже приведена работающая программа, в которой вычисляется сумма элементов массива. Массив задан значениями инициализации. Число элементов фиксировано.
// Описание массивов
int Mas[5] = { 1,2,3,4,5}; // элементы с индексами 0 ... 4
// Простой цикл с массивом
int SumMas = 0;
for (int k = 0 ; k < 5 ; k++ )
SumMas = SumMas + Mas[k] ;
printf("\nСумма массива SumMas = %d \n" , SumMas);
Попробуйте изменить значения в исходном массиве и выполнить вычисление заново.
14 Поиск максимума в массиве и его номера
Проверьте нижерасположенную программу поиска минимума в массиве.
// Дан массив iMas. Найти минимальный элемент и его порядковый номер.
int iMas[] = {1,22,3,-4,5,4,0};
int Max;
int Razm = sizeof(iMas)/sizeof(int);
// Распечатка массива
printf("\nЗадан массив iMas :\n");
for (int i =0 ; i < Razm; i++ )
printf( "iMas[%2d] = %d\n" , i , iMas[i]);
// Начальные условия цикла поиска максимума
int NumMax = 0;
Max = iMas[0];
// Поиск Мах
for ( int i = 1; i < Razm; i++)
if ( Max < iMas[i])
{ Max = iMas[i]; NumMax = i; };
// вывод результата
printf("\nВ массиве Max= %d его номер N = %d \n", Max ,NumMax);
15 Итерационный цикл расчета значения функции
Следующий пример – итерационные вычисления. Формула для вычисления значения функции – вычисление суммы членов ряда имеет вид:
Нетрудно составить циклическую программу для вычисления суммы этого ряда с точностью eps. Для математического обоснования алгорится обратитесь к учебни кам по математике.
///////////// цикл итерационный для функции exp(y)
float sum = 1.0f; // Начальное значение для переменной сумирования
float x = 0.5f ;
float step = x; // Начальное значение для степени х
float fac = 1.0f; // Начальное значение для переменной текущего факториала
float Count = 1.0f;
float eps = 0.001; // точность, с которой будет расчитана сумма ряда.
while ( step/fac > eps ) // проверка точности вычисления
{
sum+= step/fac; // суммирование членов ряда
Count += 1.0f ; // n - порядковый номер члена ряда
fac *= Count; // fac = fac * Count; - промежуточный факториал
step = step*x; // в степени x
};
printf(" Ряд - exp = %f Функция из библиотеки = %f x = %f\n",sum , exp( x), (x ));
Измените вручную значение х (сейчас оно равно 0,5) прямо в программе и проведите повторные вычисления. В контрольном задании вы должны построить цикл для разных значений х и запомнить в массиве вычисленные значения функции.
16 Указатели и динамические массивы
В тестовом проекте проверьте работу примеров, связанных с указателями и динамическими массивами, расположенных в теоретической части ЛР (см. выше). Проверку выполнения операций присваивания с помощью указателей необходимо произвести с помощью отладчика. В отладчике результаты необходимо продемонстрировать и преподавателю.
17 Контрольные задания для ЛР №3.
Следующие контрольные задания являются обязательными для выполнения в данной ЛР. Студенты эту часть выполняют после изучения теоретической части ЛР и проверки тестовых примеров основных тем ЛР.
18 Ввод и вывод массива. Вычисление суммы элементов
Для целочисленного массива MasInt (тип int), размерностью 6 элементов, выполнить следующие действия:
-
Выполнить в цикле ввод элементов массива с клавиатуры.
-
Вычислить сумму элементов этого массива.
-
Распечатать столбиком элементы массива и его сумму( в отдельно строке).
19 Определение минимума в массиве и его номера
Во введенном массиве, в отдельном цикле, выполняется поиск максимального элемента и его номера. Результаты поиска вывести на экран. Программу отладить и проверить на разных примерах.
20 Инициализация массива в программе и определение отдельных сумм
Описать массив действительных чисел MasD (10 элементов) и выполнить его инициализацию. Константы инициализации массива могут быть разных знаков. Построить один цикл для вычисления сумм положительных и отрицательных элементов. Результаты вычислений вывести на экран.
21 Использование указателя для массива
Описать указатель на тип целый. Присвоить его адрес номеру минимального элемента из задания 1 данного раздела. Вывести на печать значение с помощью этого указателя.
22 Вычисление и запоминание значений массива
Вычислить массив MasF (float) по формуле ряда для заданной библиотечной функции для каждого значения аргумента х. Результат запомнить в массиве (и показать в отладчике). Значения и шаг изменения переменной х заданы в таблице вариантов (см. ниже.). Распечатать результат в форме таблицы (номер - значение функции - значение функции из библиотеки. - значение аргумента). Таблицу оформить рамкой из точек (“.”). Цикл вычисления значений рассмотрен выше. Для реализации данной задачи необходим двойной цикл. Для вычисления значения функции из библиотеки нужно подключить заголовочный файл: