Файл: Лабораторная работа 1 Изучение среды разработки программ 3 Лабораторная работа 2 Исследование базовых типов данных языка Си 18.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.12.2023
Просмотров: 288
Скачиваний: 3
СОДЕРЖАНИЕ
Лабораторная работа № 1Изучение среды разработки программ
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Лабораторная работа № 2Исследование базовых типов данных языка Си
Лабораторная работа № 4Применение управляющих инструкций языка для организации ветвлений в программе
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
Лабораторная работа № 5Исследование циклов
Лабораторная работа № 6Применение массивов и указателей для решения прикладных задач
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Лабораторная работа № 7Исследование массивов и указателей
Лабораторная работа № 8Применение функций работы со строками для решения прикладных задач
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Практическое занятие № 6Использование функций для работы с массивами
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Практическое занятие № 7Программирование рекурсивных алгоритмов
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Практическое занятие № 8Применение производных типов данных для решения прикладных задач
ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Лабораторная работа № 5Исследование методов доступа к файлам данных
Лабораторная работа № 6Исследование связанных списков данных
-
Исследовать возможность решения этой задачи с использованием трех способов:
-
функциями последовательного доступа к файлам; -
функциями прямого доступа к файлам; -
файловыми потоками С++;
Сделать выводы о целесообразности использования того или иного метода считывания или записи данных в файл;
2. Работа со структурированными данными
-
Используя полученную на занятии 13 программу, реализовать возможность сохранения с последующим чтением из файла введенных данных. -
Исследовать возможность решения этой задачи с использованием трех способов:
-
функциями последовательного доступа к файлам; -
функциями прямого доступа к файлам; -
файловыми потоками С++;
-
Сделать выводы о целесообразности использования того или иного метода считывания или записи данных в файл;
Занятие 15
Лабораторная работа № 6
Исследование связанных списков данных
Цель занятия:
-
Совершенствование навыков разработки программ в среде программирования MS Visual C++ -
Совершенствование навыков в программировании с использованием указателей -
Исследование процесса формирования элементов связанного списка -
Исследование операций с элементами связанных списков
Время на выполнение работы: 4 часа
Программа исследований:
-
Исследование процесса формирования элементов связанного списка -
Исследование операций с элементами связанных списков
Подготовка к выполнению работы:
-
Изучить материал настоящего руководства и рекомендованную литературу (структура программы на языке высокого уровня, алфавит и элементарные конструкции языка Си, переменные и константы, стандартные типы данных, выражения и операции в языке Си, циклы, массивы и указатели, функции, файлы данных, динамические структуры данных). -
Практически освоить порядок работы на ПЭВМ в среде программирования MS Visual C++.
Материалы для подготовки к занятию:
-
Конспект лекций -
[1] стр. 114-119
Содержание отчета:
-
Цели исследования. -
Программу работы. -
Диаграммы работы операций с элементами связанного списка -
Листинг программы -
Результаты исследований -
Выводы по каждому пункту и общий вывод.
МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ
-
Исследование формирования элементов связанного списка
Каждый элемент списка содержит ключ, идентифицирующий этот элемент. Ключ обычно бывает либо целым числом, либо строкой и является частью поля данных. В качестве ключа в процессе работы со списком могут выступать разные части поля данных. Например, если создается линейный список из записей, содержащих фамилию, год рождения, стаж работы и пол, любая часть записи может выступать в качестве ключа: при упорядочивании списка по алфавиту ключом будет фамилия, а при поиске, к примеру, ветеранов труда ключом будет стаж. Ключи разных элементов списка могут совпадать.
Рисунок 15.1 - Однонаправленный список
// описание структуры, позволяющей создать линейный список
struct List
{ // -- поля данных --
char name[20]; // имя
int age; // возраст
// -- поля связи ---
List *next; // указатель на следующий
}; // элемент списка
List *start; // start - специальный глобальный
// указатель для входа в список
// для пустого списка должен
// быть равен нулю
Для этого списка определены три операции:
- добавление нового элемента списка Add();
- удаление элемента из списка Del();
- переход к следующему элементу списка Next().
Рассмотрим их.
2. Исследование операций с элементами связанных списков
1. Добавление нового элемента списка Add().
// функция добавления элементов в список
List* Add(List *cur) // cur - текущий эл-т
{
// выделение памяти для нового элемента списка
List *p=(List*)malloc(sizeof(List)); // p - новый эл-т if(!p) // если выделить память не удалось
{
cout<<" Error !";
return 0;
}
if(!start) // если список пуст
{
start=p; // то новый элемент будет первым
p->next=NULL; // и последним в списке
return p;
}
// если список не пустой, то добавляем элемент
// после текущего и связываем новый элемент с
// последующим
p->next=cur->next;
cur->next=p; // связываем текущий элемент с новым
return p; // возвращаем указатель на новый элемент
}
Динамическое создание новых элементов списка производится с использованием стандартной функции работы с памятью malloc():
List *p=(List*)malloc(sizeof(List));
Рассмотрим подробнее этот оператор. Функция sizeof(List) определяет размер структуры List в байтах. Функция malloc() выделяет блок памяти этого размера. Результат выполнения этой функции преобразуется к типу указатель на структуру List - (List*), то есть возвращает указателю p типа структуры List адрес первого байта выделенной памяти.
2. Удаление элемента из списка Del().
// функция удаления элемента списка
void Del(List *cur) // cur - указатель удаляемый элемент
{
// создаем указатель для перемещения и
// устанавливаем на начало
List *p=start;
if (cur==start) // если удаляем первый эл-т списка
{
free(start); // освобождаем память
start=start->next;// второй делаем первым
return ;
}
// выполняем, пока не достигли конца списка
// или предшествующего текущему
while (p && p->next!=cur)
p=Next(p); // переходим к следующему
if(!p) // дошли до конца не найдя предшествующего
{
cout << "Не найден элемент";
return ;
}
// связываем предыдущий с последующим
p->next=cur->next;
// освобождаем память текущего
free(cur);
return;
}
3. Переход к следующему элементу списка Next().
// функция перехода к следующему элементу списка
List* Next(List *cur)
{
// возвращаем указатель на следующий элемент списка
return (cur->next);
}
ЗАДАНИЕ НА ИССЛЕДОВАНИЕ
-
Исследовать принципы работы описанных операций и на основе этого разработать графические схемы, отражающие операции, определенные для списка. -
Разработать функцию main(), позволяющую с использованием описанных операций производить работу со связанным списком данных.
ЛИТЕРАТУРА
-
С/C++. Программирование на языке высокого уровня / Т.А.Павловская. – СПб.: Питер, 2002. -464 с. -
С/С++. Структурное программирование: Практикум /Т.А.Павловская, Ю.А.Щупак. –СПб.: Питер, 2002. – 240 с. -
Шилдт Г. Теория и практика С++: пер. с англ. –СПб.: BHV, 1996. – 248 с. -
Страутструп Б. Язык программирования С++. 2-е издание. –М.: Бином, 2000. –358 с.