МУ_ЛР3_ОП (Методические указания к лабораторным работам)

2018-01-11СтудИзба

Описание файла

Файл "МУ_ЛР3_ОП" внутри архива находится в папке "Методические указания к лабораторным работам". Документ из архива "Методические указания к лабораторным работам", который расположен в категории "". Всё это находится в предмете "программирование на основе классов и шаблонов" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "программирование на основе классов и шаблонов" в общих файлах.

Онлайн просмотр документа "МУ_ЛР3_ОП"

Текст из документа "МУ_ЛР3_ОП"

16



Методические указания к лабораторной работе № 3 по курсу

ОСНОВЫ ПРОГРАММИРОВАНИЯ

ГУИМЦ

"Массивы и указатели"

( 4 часа)

Москва, МГТУ, СУЦ - 2014 год

_____________________________________________________________________________________________



СОДЕРЖАНИЕ

1. Цель лабораторной работы №3 по дисциплине ОП(Основы программирования) - СУЦ 4

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

3. Основные понятия 4

3.1. Массивы 4

3.2. Указатели 6

3.3. Динамическая память 7

3.4. Отладка программ. 7

3.5. Модули 8

3.6. Библиотеки функций 8

3.7. Библиотеки функций и шаблонов классов: RTL, STL, MFC, ATL 9

4. Примеры по теме ЛР № 4 10

4.1. Примеры описаний и инициализации массивов 10

4.2. Сумма элементов массива 10

4.3. Поиск максимума в массиве и его номера 11

4.4. Итерационный цикл расчета значения функции 11

4.5. Указатели и динамические массивы 12

5. Контрольные задания для ЛР №3. 12

5.1. Ввод и вывод массива. Вычисление суммы элементов 12

5.2. Определение минимума в массиве и его номера 12

5.3. Инициализация массива в программе и определение отдельных сумм 12

5.4. Использование указателя для массива 12

5.5. Вычисление и запоминание значений массива 12

5.6. Блок-схемы заданий 13

6. Варианты заданий для студентов СУЦ. 13

7. Дополнительные требования для студентов СУЦ (д.т.). 14

7.1. Ввод и вывод двумерного массива. Вычисление суммы его элементов. 14

7.2. Определение максимума в двумерном массиве и его координат 14

7.3. Инициализация двумерного массива 14

7.4. Вычисления значений полинома 14

7.5. Блок-схемы заданий 15

8. Демонстрация, защита ЛР и отчет по ЛР. 15

9. Контрольные вопросы по ЛР. 15

10. Литература. 16







1 Цель лабораторной работы №3 по дисциплине ОП(Основы программирования) - СУЦ



Целью данной ЛР по дисциплине ОП является получение начальных знаний и умений для использования массивов и указателей на языке программирования СИ. Студенты используют консольные проекты и отлаживают программы в среде программирования MS VS 2005/2008/2010. Студенты знакомятся со способами описания и использования масс и указателей в программах, выполняют отладку программы по своему варианту и получают исполнимую программу, готовую к выполнению, оформляют отчет по ЛР и защищают его.

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

  1. Познакомиться с методическими указаниями и основными понятиями данной ЛР

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

  3. Создать консольные проекты для проверки примеров и выполнения задания ЛР.

  4. Проверить в данном проекте примеры из методических указаний, выполнив их в отладчике в пошаговом режиме.

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

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

  7. Подготовить отчет по шаблону.

  8. Защитить ЛР с предоставлением отчета и ответами на контрольные вопросы.

  9. Для продвинутых студентов выполнить задания для дополнительных ( необязательных) требований и также отобразить их в отчете по ЛР.



3 Основные понятия

4 Массивы

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

<тип массива > <имя массива> [<размерность массива>];

Например:

int iMas [10]; // описан массив iMas целого типа, содержащий 10 элементов ( номера 0:9)

char sMas [MAX]; // массив sMas символьного типа, содержащий MAX элементов

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

Например:

iMas [5] = 3; // элементу массива iMas с номером 5 (6-му) присваивается 3

sMas [i + 5] = 'А'; // элементу массива sMas с номером i (i+4) присваивается символ 'А'

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

<тип массива > <имя массива> [<размерность массива1>][<размерность массива2>] …;

Например, двумерный массив может быть описан так:

int iMas [5][5]; // двумерный массив iMas целого типа, содержащий 5*5 элементов

При использовании переменных массивов с размерностью более 1-й должен быть указан номер (индекс) по каждому измерению (переменная с индексами – определяет в кождый момент времени один элемент массива):

iMas [i][j] = 10; // iMas с номерами i и j по каждому измерению присваивается 10

Массивы нужны для того, чтобы сделать программу более короткой, для обработки больших объемов данных и для обеспечения динамической настройки программ. Число измерений массивов в С и С++ не ограничивается.

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

#define N 10 // Переменная этапа компиляции

int Mas[N]; // Описание массива размерностью 10

const int NMax = 5; // константная переменная

int MasS[NMax]; // Описание массива размерностью 5

int MasIni[] = {1,2,3,4}; // Описание массива размерностью 4

Инициализация двумерных массивов:

int C[3][6] ={ { 1,2,3,4,5,6}, { 1,2,3,4,5,6},{ 1,2,3,4,5,6} };

В программе можно динамически определить число элементов в массиве:

int iMas1[] = {3,3,2,4,5,6,0,1,9};

Razm = sizeof(iMas1)/sizeof(int);

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

int * PtrMas; // Указатель на целую переменную

int MasP[]={ 1,2,3}; // Описание массива

PtrMas = MasP; // Указателю присваивается указатель на начало массива

int m = PtrMas[1]; // k = 2!

Также забегая вперед, проиллюстрируем использование указателей для работы с динамическими массивами. Проиллюстрируем это зразу на примере. В указателе PtrMas запоминается адрес области динамической памяти, выделенной оператором new. Далее динамический массив заполняется в цикле. Затем с использованием операции разыменования (*) мы получим новое значение из массива (в переменную l). Оно равно 3.

PtrMas = new int [5];

for ( int k = 0 ; k< 5 ; k++)

PtrMas[k] = k + 1; // Динамическое заполнение массива числами от 1 до 5

int l = 2 ;

*(PtrMas + l) = l + 1; // Использование указателя для занесение на место [2] значения 3 (2+1)

l = PtrMas[l] ; // l = 3

5 Указатели

Кроме использования массивов, есть и другой способ, чтобы сделать программу динамически настраиваемой во время выполнения. Это переменные специального типа - указатели. Такие переменные содержат в качестве значения не число, а адрес другой переменной (в оперативной памяти). При описании таких переменных нужно указать специальный знак – звездочка (“*”). Кроме того, должно быть указан тип переменных, на которые данный указатель может ссылаться. Можно объявить и массив указателей и выполнить предварительную инициализацию указателя. Описание указателя:

<тип указателя > * <имя указателя> [ = < значение для инициализации>];

Например:

// Указатели

int /*i , */ j , k ;

int *pInt; // Указатель на переменную типа int

int **ppInt; // Указатель на указатель на переменную типа int

int *pMas[10]; // Массив указателей

int aI =5; // Простая переменная

int *pInit = &aI; // инициализация указателя

Для работы с указателями используются две специальные операции: операция именования (“&”) и операция разыменования (“*”). Операция именования используется для вычисления значения указателя – адреса переменной или выражения. Операция разыменования используется для получения значения переменной, адрес которой задан данным указателем. Примеры:

/// Задание значениq и адресов

j = 15;

pInt = &j; // именование - в указатель записывается адрес

i = *pInt; // разыменование – берем значение переменной по указателю (j)

ppInt = &pInt;

k = **ppInt; // двойное разыменование указателя

Для упрощения работы с указателями, а также для удобной перегрузки операций в классах в С++ введено понятие ссылки. Ссылка также задает адреса других переменных и объектов, но явного использования операций именования и разыменования для ссылок не требуется. Белее детально со ссылками вы познакомитесь в курсе Объектно - ориентированного программирования (см. литературу[6] и MSDN).

6 Динамическая память

Часто все переменные и массивы располагаются в оперативной памяти заранее, до начала выполнения программы. Все рассмотренные ранее примеры включали такие переменные и массивы. Размер выделенной памяти под массив, то есть его размерность в этом случае изменить нельзя. Поэтому приходится заранее рассчитывать максимально возможную размерность массива, которая приемлема для всех случаев. Это приводит к перерасходу памяти для отдельных случаев. Для экономии памяти и для построения более универсальных программ используют динамически выделяемые переменные. С помощью специальных операций (new и delete) можно выделять память во время выполнения программы. Такие данные называются динамическими. Ранее в языке СИ оперативная память выделялась с помощью специальных функций (alloc, malloc и т.д.). Динамические переменные располагаются в оперативной памяти в специальной области. Для работы с такими данными используют указатели и ссылки. Пример выделения динамической памяти для указателей и ссылок:

int * piDyn = new int; // Выделяется область для целой переменной

int *piDMas = new int[10]; // Выделяется область для массива целых 10 переменных

int *piDMas = new int[i]; // Выделяется область для массива целых i переменных

Работа с указателями на динамические переменные и массивы выглядит так:

*piDyn = 5;

piDMas[0] = 5;

По завершению блока, в котором выделены динамические переменные их надо удалить специальным оператором delete:

delete piDyn;

delete []piDMas;

Кроме этого для работы с динамической памятью могут быть использованы функции работы с динамической памятью ( библиотека malloc.h): выделение (calloc , malloc) и освобождения (free), оперативной памяти Пример:

#include <malloc.h>

int *pMasInt;

pMasInt = (int *) malloc ( 10 ); // выделить 10 байт

free( pMasInt ); // Освободить динамическую память

pMasInt = (int *) calloc ( 10 , sizeof (int)); // выделить для массива 10 ‘ktvtynjd по размеру int

pMasInt[3] = 10; // Работа с динамическим массивом

int iTest = pMasInt[3] ;

free( pMasInt ); // Освободить динамическую память

Другие возможности для работы с библиотекой вы найдете в литературе и документации по СИ.

7 Отладка программ.

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

  • Запустить программу в режиме отладки без трассировки по шагам (F5);

  • Выполнить программу по шагам (F10);

  • Выполнить программу по шагам с обращениями к вложенным функциям(F11);

  • Установить точку останова (BreakPointF9);

  • Выполнить программу до первой точки останова (F5);

  • Просмотреть любые данные в режиме отладки в специальном окне (locals);

  • Просмотреть любые данные в режиме отладки при помощи мышки;

  • Изменить любые данные в режиме отладки в специальном окне (locals и Watch);

  • Установить просмотр переменных в специальном окне (Watch);

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

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

Примечание. Подробное описание материала и понятий вы можете найти в литературе [1 - 6] или справочной системе MS VS. Кроме того, не пропускайте лекции по курсу. Не рекомендую безоговорочно верить материалам из сети Интернет (например, в Википедии), так как там в некоторых статьях есть ошибки!

8 Модули

При проектировании и разработке программ применяется метод модульного программирования. Суть его заключается в том, что сложная программа разбивается на отдельные части (модули – не надо путать с учебными модулями). Каждый модуль разрабатывается отдельно и возможно разными программистами. Такой способ называют также декомпозицией. Совокупность модулей составляет проект программы. Модули бывают разных типов:

  • Исходные модули, содержащие текст на языке программирования.

  • Объектные модули получаются в результате компиляции программы.

  • Исполнимые модули предназначены для выполнения программы.

Исходные модули могут быть разных типов. Основные исходные модули – это модули программ (*.c, *.cpp) и модули заголовочных файлов (*.h , *.hpp). Они включены в разные разделы дерева проекта программы.

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

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5076
Авторов
на СтудИзбе
455
Средний доход
с одного платного файла
Обучение Подробнее