Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)


 

 

 

 



Динамическое выделение и освобождение памяти



При компиляции программы память компьютера разбивается на четыре области, содержащие код программы, глобальные данные, стек и динамически распределяемую память ( иногда ее называют heap - куча). Heap – это свободная память, с которой можно работать с помощью функций new и delete. Для new аргументом является выражение, определяющее размер выделяемого массива, а возвращаемое значение – это указатель на начало массива:

int *array=new int[10];

Если память не может быть выделена, то оператор new возвращает указатель NULL . После каждой операции выделения памяти обязательна проверка указателя на NULL:

if(array==NULL)

printf(“memory allocation error.”);

else

{

// действия при правильном выделении памяти

}

Выделенная динамически память автоматически не освобождается при выходе из блока или по завершению программы. Для ее освобождения обязательно необходимо выполнить команду delete[] имя_массива; (delete[] array; - для предыдущего случая).

 

Практическое задание.

Вариант1.

Вычислите скалярное произведение векторов и размерности n.

Размерность векторов и их координаты должны вводится с консоли.

Контрольные примеры:

Вариант 2.

Вычислите произведение матрицы на вектор.

Размерности вектора и матрицы A , координаты вектора и элементы матрицы должны вводится с консоли. Координаты вектора распечатайте на экране.

Контрольные примеры:

Вариант 3.

Вычислите сумму матриц. . Размерности матриц и их элементы введите с консоли. Элементы матрицы C выведите на экран.

Контрольные примеры:

Вариант 4.

Напишите процедуры умножения и сопряжения матриц и с их помощью вычислите

Размерности матриц и их элементы вводятся с консоли. Элементы матрицы C должны выводится на экран.

Контрольные примеры:

 

Тема 5. Ввод и вывод в языке С++.

В языке С имеется весьма развитая библиотека функций ввода-вывода. Однако в самом языке отсутствуют какие-либо предопределенные файловые структуры. Все данные обрабатываются как последовательность байт. Имеется три основных типа функций: потоковые, работающие с консолью и портами ввода-вывода и низкоуровневые.

Потоковые функции.

В потоковых функциях файлы данных рассматриваются как поток отдельных символов.

Когда программа открывает файл для ввода вывода при помощи потоковых функций, то открытый файл связывается с некоторой переменной типа FILE (определенной в stdio.h), содержащей базовую информацию об этом файле. После открытия потока с помощью функции fopen возвращается указатель на эту переменную. Этот указатель используется для ссылки к файлу при всех последующих операциях ввода-вывода и называется указателем потока.

Все потоковые функции обеспечивают буферизованный, форматированный или неформатированный ввод/вывод. Буферизация потока разгружает приложение. Однако следует иметь в виду, что при аварийном завершении программы содержимое буферов вывода может быть потеряно.

Аналогичным образом выглядят функции, работающие с консолью и портами. Они позволяют читать и писать на терминал или в порт ввода/вывода (например, в порт принтера). Функции портов ввода/вывода выполняют простое побайтное считывание или запись. Функции ввода/вывода на консоль обеспечивают несколько дополнительных возможностей, например можно определить момент, когда будет введен символ с консоли и т.п.

Для использования потоковых функций в программу должен быть включен заголовочный файл stdio.h. В нем содержатся описания прототипов функций ввода/вывода, а также - описания ряда констант. Константа EOF определяется как значение, возвращаемое при обнаружении конца файла, BUFSIZE - размер буферов потока, тип FILE определяет структуру, используемую для получения информации о потоке.

Поток открывается с помощью функций fopen(), fdopen() или freopen(). В момент открытия задаются режим файла и способ доступа. Эти функции возвращают указатель на переменную типа FILE, например

FILE *file1;

file1=fopen(“input.dat”,”r”);

открывает файл input.dat для чтения. Переменная file1 получает указатель на поток.

Возможные типы доступа:

“a” – запись в режиме добавления в конец файла,

”a+” –тоже, что и “a”, но возможно и чтение,

”r” – только для чтения,

”r+” – для чтения и записи,

”w” – открывается пустой файл для записи,

”w+” – открывается пустой файл для записи и чтения.

Когда начинается выполнение приложения, автоматически открывается следующие потоки: стандартное устройство ввода stdin, стандартное устройство вывода stdout, устройство сообщений об ошибках stderr, устройство печати stdprn и стандартное дополнительное устройство stdaux. Эти файловые указатели можно использовать во всех функциях ввода/вывода в качестве указателя на поток. Некоторые функции автоматически используют указатели на поток, например getchar() и putchar() используют stdin и stdout соответственно.

Для закрытия потоков используются функции fclose() и fcloseall(). Если программа не закрывает поток явно, то он закрывается автоматически по ее завершению.

Для перемещения по файлу можно использовать функции fseek(), ftell() и rewind().



Просмотров 748

Эта страница нарушает авторские права




allrefrs.su - 2025 год. Все права принадлежат их авторам!