Создание двумерного динамического массива

Лабораторная работа 1.

Задание

1. Навигация в ОС Линукс и простейшие команды. Создание каталога, файла, копирование данных из одного файла в другой, перемещение файла в другой каталог. «Hello world!», или иная фраза, выводимая на экран в Linux, в том числе результат элементарных операций с числами (+, -, *, /). (См. дополнительные файлы, включая методическое пособие)

2. Указатели в C/C++. Выполнить одно из заданий ниже с использованием массивов, списков и т.п. К сдаче лабораторной подготовить файл с описанием рассматриваемого метода.

Задания

1. Метод Гаусса для решения систем уравнений

2. Метод Симпсона для вычисления интегралов

3. Метод простой итерации для трансиндентных уравнений

4. Метод Ньютона для трансиндентных уравнений

5. Вычисление градиента двумерной функции

6. Обращение матрицы

7. Нахождение корней полинома

8. Решение дифференциального уравнения методом Эйлера

9. Решение дифференциального уравнения методом Рунге-Кутта

10. Вычисление функции Бесселя целого порядка

11. Вычисление сферических функций Бесселя

12. Вычисление полиномов Эрмита

13. Вычисление полиномов Чебышева

14. Вычисление интеграла вероятности

15. Вычисление интегралов Френеля

16. Вычисление модифицированных функций Бесселя

17. Функции Бесселя дробного порядка

18. Функции Неймана целого порядка

19. Модифицированные функции Бесселя

20. Перевод из произвольной (выбирает пользователь) системы счисления в 10-чную и обратно

21. Умножение двух матриц (входные значения из файлов, результат – в файл, узнать у пользователя имена файлов)

22. Гамма-функция дробного аргумента

23. Полигамма функция

24. Неполная бетта-функция

25. Обратная функция ошибок

26. Написать программу (функцию) вычисления приближенного значения exp(x) через сумму ряда вида: .

Теоретическая часть

Задание на С++ по указателям

Объявление указателя

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

тип *имя указателя

Например:

int*a; double*b, *d; char*c;

Знак «звездочка» относится к имени указателя. Значение указателя соответствует первому байту участка памяти, на который он ссылается. На один и тот же участок памяти может ссылаться любое число указателей.

В языке Си существует три вида указателей:

1. Указатель на объект известного типа. Содержит адрес объекта определенного типа.

2. Указатель типа void. Применяется, еcли тип объекта заранее не определен.

3. Указатель на функцию.

Операции над указателями

Над указателями можно провести две унитарные операции:

1. & (взять адрес). Указатель получает адрес переменной. Данная операция применима к переменным, под которые выделен соответствующий участок памяти.

2. * (операция разадресации). Предназначена для доступа к величине, расположенной по данному адресу.

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

Указатели, как правило, используются при работе с динамической памятью (heap, или «куча»). Для работы с динамической памятью в языке Си определены следующие функции: malloc, сalloc, reallocи free.

В языке C++ для выделения и освобождения памяти определены операции newи deleteсоответственно. Используют две формы операций:

1. Тип *указатель = newтип (значение) – выделение участка памяти в соответствии с указанным типом и занесение туда указанного значения.

deleteуказатель – освобождение выделенной памяти.

2. Тип *указатель = newтип[n] – выделение участка памяти размером n блоков указанного типа.

delete[ ] указатель – освобождение выделенной памяти.

Создание двумерного динамического массива

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

double**umas2;

umas2 = new double*[n];

for(i=0; i<n; i++)

umas2[i] = new double[m];

for(i=0; i<n; i++)

delete [ ]umas2[i];

delete [ ]umas2;

 


Дата добавления: 2018-05-13; просмотров: 239; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!