- •Кафедра ”Информационных систем управления”
- •Основные типы данных, операции и выражения, форматный ввод-вывод данных. Линейные и разветвляющиеся алгоритмы Методические указания
- •Пример программы
- •Контрольные вопросы
- •Решение задач с использованием циклических алгоритмов. Обработка числовых и символьных массивов Методические указания
- •Примеры программ
- •Контрольные вопросы
- •Работа с файлами. Использование процедур и функций Методические указания
- •Пример задания
- •Контрольные вопросы
- •Динамическое управление памятью. Методические указания
- •Примеры программ
- •Контрольные вопросы
Контрольные вопросы
Что называется файлом? Физический и логический файлы.
В чем состоит сходство и различие между массивом и файлом?
Какие функции предназначены для открытия и закрытия файлов и как они работают?
Как осуществляется ввод-вывод символов и символьных строк в файл?
Форматированный ввод-вывод в файл.
Ввод-вывод записей произвольной длины в файл.
В чем отличие бинарных и текстовых файлов?
Как осуществить корректировку файла (дозапись, вставка информации в файл, изменение части данных файла)?
ЛАБОРАТОРНАЯ РАБОТА №4
Динамическое управление памятью. Методические указания
В соответствии с полученным вариантом задания следует:
Составить блок-схему решения задачи на уровне процедур и функций. Блок-схема должна отражать логическую структуру алгоритма.
По разработанному алгоритму написать программу, удовлетворяющую следующим требованиям:
- пользовательские типы определить с помощью typedef;
- включить меню, содержащее пункты:
а) создание исходной динамической структуры данных;
б) вывод на экран информации, хранящейся в динамической структуре данных;
в) поиск заданной информации в динамической структуре;
г) вставка и удаление информации из связанных динамических структур, корректировка значений;
д) выход из программы;
- алгоритм, соответствующий каждому пункту меню, реализовать в виде функции.
Явное объявление указателей выглядит следующим образом:
int *pi; //указатель на целое значение
int (*pMas)[10][20]; //указатель на массив целых чисел
long **pp; //указатель на указатель на переменную типа long
void *p; //нетипизированный указатель
Указатели являются статическими переменными. В начале работы программы значение указателя не определено. Указателю можно присвоить значение адреса выделенной под переменную области памяти или значение NULL – пустой адрес. После освобождения области памяти, с которой был связан указатель, его значение не определено.
Выделение и освобождение памяти под динамические переменные определенного типа выполняется функциями из библиотек alloc.h malloc.h и calloc.h:
void *malloc(unsigned n);
//Выделяет блок памяти размером n байт и присваивает адрес указателю.
void *calloc(unsigned n,unsigned size);
//Выделяет память под n элементов, каждый из которых требует для //хранения size байт. Блок памяти при этом заполняется нулями.
Для освобождения памяти, связанной с указателем, служит функция free
void free(void *p);
Примеры программ
Создать динамический список, записав в него все буквы латинского алфавита от A до Z.
#include <alloc.h>
struct elem
{
char sim;
struct elem *next;
};
struct elem *create(char a,char b)
{
struct elem *tmp,*beg;
tmp=(struct elem*)malloc(sizeof(struct elem));
tmp->sim=a;
beg=tmp;
a++;
for(char i=a;i<=b;i++)
{
tmp->next=(struct elem*)malloc(sizeof(struct elem));
tmp=tmp->next;
tmp->sim=i;
}
tmp->next=NULL;
return beg;
}
Оператор вызова процедуры имеет следующий вид:
struct elem *top;
top=create('A','Z');