🗊Презентация Понятие о динамических данных. Работа с динамическими массивами

Нажмите для полного просмотра!
Понятие о динамических данных. Работа с динамическими массивами, слайд №1Понятие о динамических данных. Работа с динамическими массивами, слайд №2Понятие о динамических данных. Работа с динамическими массивами, слайд №3Понятие о динамических данных. Работа с динамическими массивами, слайд №4Понятие о динамических данных. Работа с динамическими массивами, слайд №5Понятие о динамических данных. Работа с динамическими массивами, слайд №6Понятие о динамических данных. Работа с динамическими массивами, слайд №7Понятие о динамических данных. Работа с динамическими массивами, слайд №8Понятие о динамических данных. Работа с динамическими массивами, слайд №9Понятие о динамических данных. Работа с динамическими массивами, слайд №10Понятие о динамических данных. Работа с динамическими массивами, слайд №11Понятие о динамических данных. Работа с динамическими массивами, слайд №12Понятие о динамических данных. Работа с динамическими массивами, слайд №13Понятие о динамических данных. Работа с динамическими массивами, слайд №14Понятие о динамических данных. Работа с динамическими массивами, слайд №15Понятие о динамических данных. Работа с динамическими массивами, слайд №16Понятие о динамических данных. Работа с динамическими массивами, слайд №17Понятие о динамических данных. Работа с динамическими массивами, слайд №18

Вы можете ознакомиться и скачать презентацию на тему Понятие о динамических данных. Работа с динамическими массивами. Доклад-сообщение содержит 18 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Понятие о динамических данных. Работа с динамическими массивами.
Лекция №4
Описание слайда:
Понятие о динамических данных. Работа с динамическими массивами. Лекция №4

Слайд 2





Данные (классификация по времени жизни)
Описание слайда:
Данные (классификация по времени жизни)

Слайд 3





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

Слайд 4





Указатели в Си
Описание слайда:
Указатели в Си

Слайд 5


Понятие о динамических данных. Работа с динамическими массивами, слайд №5
Описание слайда:

Слайд 6


Понятие о динамических данных. Работа с динамическими массивами, слайд №6
Описание слайда:

Слайд 7


Понятие о динамических данных. Работа с динамическими массивами, слайд №7
Описание слайда:

Слайд 8


Понятие о динамических данных. Работа с динамическими массивами, слайд №8
Описание слайда:

Слайд 9


Понятие о динамических данных. Работа с динамическими массивами, слайд №9
Описание слайда:

Слайд 10





Связь массивов с указателями в Си
Описание слайда:
Связь массивов с указателями в Си

Слайд 11


Понятие о динамических данных. Работа с динамическими массивами, слайд №11
Описание слайда:

Слайд 12


Понятие о динамических данных. Работа с динамическими массивами, слайд №12
Описание слайда:

Слайд 13





Функции Си для распределения и освобождения памяти (<stdlib.h>)
malloc (англ. memory allocation, выделение памяти):
void *malloc(size_t size);
Функция malloc() возвращает указатель на первый байт области памяти размером size (в байтах), которая была выделена из кучи. Если нет достаточного объема памяти, возвращается NULL. 
calloc (англ. clear allocation, чистое выделение памяти):
	void *calloc(size_t num, size_t size);
      Функция calloc выделяет память для хранения num значений, каждое длиной size байт. Каждое значение инициализируется нулем.
Если нет достаточного объема памяти, возвращается NULL. 
realloc (англ. reallocation, перераспределение памяти).
	void *realloc(void *ptr, size_t newsize)
	Функция realloc() изменяет величину выделенной памяти, на которую указывает ptr, на новую величину, задаваемую параметром newsize. Величина newsize задается в байтах и может быть больше или меньше оригинала. Возвращается указатель на блок памяти, поскольку может возникнуть необходимость переместить блок при возрастании его размера. В таком случае содержимое старого блока копируется в новый блок и информация не теряется. Если свободной памяти недостаточно для выделения в куче блока размером newsize, то возвращается NULL. 
free (англ. free, освободить)
	void free( void * ptr );
     Функция free возвращает в кучу блок памяти, на который указывает ptr. Этот блорк ранее должен быть выделен с помощью вызова malloc, calloc или realloc.
Описание слайда:
Функции Си для распределения и освобождения памяти (<stdlib.h>) malloc (англ. memory allocation, выделение памяти): void *malloc(size_t size); Функция malloc() возвращает указатель на первый байт области памяти размером size (в байтах), которая была выделена из кучи. Если нет достаточного объема памяти, возвращается NULL. calloc (англ. clear allocation, чистое выделение памяти): void *calloc(size_t num, size_t size); Функция calloc выделяет память для хранения num значений, каждое длиной size байт. Каждое значение инициализируется нулем. Если нет достаточного объема памяти, возвращается NULL. realloc (англ. reallocation, перераспределение памяти). void *realloc(void *ptr, size_t newsize) Функция realloc() изменяет величину выделенной памяти, на которую указывает ptr, на новую величину, задаваемую параметром newsize. Величина newsize задается в байтах и может быть больше или меньше оригинала. Возвращается указатель на блок памяти, поскольку может возникнуть необходимость переместить блок при возрастании его размера. В таком случае содержимое старого блока копируется в новый блок и информация не теряется. Если свободной памяти недостаточно для выделения в куче блока размером newsize, то возвращается NULL. free (англ. free, освободить) void free( void * ptr ); Функция free возвращает в кучу блок памяти, на который указывает ptr. Этот блорк ранее должен быть выделен с помощью вызова malloc, calloc или realloc.

Слайд 14





Операции Си++ для распределения и освобождения памяти
Операция new:
	указатель=new тип;
       Указатель должен быть объявлен с помощью тип*.
       Операция выделяет ячейку памяти заданного типа и и присваивает значение адреса ячейки указателю. После типа в круглых скобках можно указать инициализирующее значение, а в квадратных – количество выделяемых ячеек. В большинстве реализаций одновременно круглые и квадратные скобки не допускаются.
	Примеры: 
	 int *ip = new int; /* создание объекта типа int и получение указателя на него */
	 int *ip2 = new int(2); // то же с установкой начального значения 2
	 inr *intArray = new int [ 10 ]; // массив из 10 элементов типа int double
       int **matr = new double [ m ] [ n ]; // матрица из m строк и n столбцов 
Операция delete:
	delete указатель;
      delete [] указатель;//для массивов
	Освобождение памяти, выделенной с помощью delete.
Описание слайда:
Операции Си++ для распределения и освобождения памяти Операция new: указатель=new тип; Указатель должен быть объявлен с помощью тип*. Операция выделяет ячейку памяти заданного типа и и присваивает значение адреса ячейки указателю. После типа в круглых скобках можно указать инициализирующее значение, а в квадратных – количество выделяемых ячеек. В большинстве реализаций одновременно круглые и квадратные скобки не допускаются. Примеры: int *ip = new int; /* создание объекта типа int и получение указателя на него */ int *ip2 = new int(2); // то же с установкой начального значения 2 inr *intArray = new int [ 10 ]; // массив из 10 элементов типа int double int **matr = new double [ m ] [ n ]; // матрица из m строк и n столбцов Операция delete: delete указатель; delete [] указатель;//для массивов Освобождение памяти, выделенной с помощью delete.

Слайд 15





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

Слайд 16





Пример 1. Ввод и вывод динамического одномерного массива, размер которого n задается вводом
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
void main()
{ int *a, n, i;
  cout<<"Input the number of elements\n";
  cin>>n;
  a=(int*)malloc(n*sizeof(int));
 //распред-ие памяти под динамический массив
  cout<<"Input elements\n";
  for (i=0;i<n;i=i+1)
    cin>>a[i];//*(a+i)
  for (i=0;i<n;i=i+1)
      a[i]=a[i]*a[i];
  cout<<"Squares of elements:\n";
  for (i=0;i<n;i=i+1)
    cout<<a[i]<<" ";
  cout<<endl;
  _getch();
  free(a);
}
Описание слайда:
Пример 1. Ввод и вывод динамического одномерного массива, размер которого n задается вводом #include <iostream.h> #include <conio.h> #include <stdlib.h> void main() { int *a, n, i; cout<<"Input the number of elements\n"; cin>>n; a=(int*)malloc(n*sizeof(int)); //распред-ие памяти под динамический массив cout<<"Input elements\n"; for (i=0;i<n;i=i+1) cin>>a[i];//*(a+i) for (i=0;i<n;i=i+1) a[i]=a[i]*a[i]; cout<<"Squares of elements:\n"; for (i=0;i<n;i=i+1) cout<<a[i]<<" "; cout<<endl; _getch(); free(a); }

Слайд 17





Пример 2. Динамические матрицы
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
void main()
{ int **a, n,m, i,j; //n-число строк, m-число столбцов;
  cout<<"Input n,m\n";
  cin>>n>>m;
  a=(int**)malloc(n*sizeof(int*)); 
  cout<<"Input matrix\n";
  for (i=0;i<n;i=i+1)
    {
      a[i]=(int*)malloc(m*sizeof(int));
      for (j=0;j<m;j=j+1)
           cin>>a[i][j];//*(*(a+i)+j)
     }
  for (i=0;i<n;i=i+1)
      for (j=0;j<m;j=j+1)
          a[i][j]=2*a[i][j];
  cout<<"The changed matrix:\n";
  for (i=0;i<n;i=i+1)
    {for(j=0;j<m;j=j+1)
           cout<<a[i][j]<<" ";
      cout<<endl;
      free (a[i]);
    }
  _getch();
  free(a);
}
Описание слайда:
Пример 2. Динамические матрицы #include <iostream.h> #include <conio.h> #include <stdlib.h> void main() { int **a, n,m, i,j; //n-число строк, m-число столбцов; cout<<"Input n,m\n"; cin>>n>>m; a=(int**)malloc(n*sizeof(int*)); cout<<"Input matrix\n"; for (i=0;i<n;i=i+1) { a[i]=(int*)malloc(m*sizeof(int)); for (j=0;j<m;j=j+1) cin>>a[i][j];//*(*(a+i)+j) } for (i=0;i<n;i=i+1) for (j=0;j<m;j=j+1) a[i][j]=2*a[i][j]; cout<<"The changed matrix:\n"; for (i=0;i<n;i=i+1) {for(j=0;j<m;j=j+1) cout<<a[i][j]<<" "; cout<<endl; free (a[i]); } _getch(); free(a); }

Слайд 18





Пример 3. Параметры функций типа тип**
#include <iostream.h>
#include <conio.h>
float sum(float **a, int n, int m);
void main()
{  float **a; int n,m, i,j;
   cout<<"Input n,m"<<endl;
   cin>>n>>m;
   a=new float*[n];
   for (i=0;i<n;i++)
       { a[i]=new float[m];
         for (j=0;j<m;j++)
             cin>>a[i][j];
       }
   cout<<"sum="<<sum(a,n,m)<<endl;
   _getch();
   for (i=0;i<n;i++)
      delete [] a[i];
   delete [] a;
}
Описание слайда:
Пример 3. Параметры функций типа тип** #include <iostream.h> #include <conio.h> float sum(float **a, int n, int m); void main() { float **a; int n,m, i,j; cout<<"Input n,m"<<endl; cin>>n>>m; a=new float*[n]; for (i=0;i<n;i++) { a[i]=new float[m]; for (j=0;j<m;j++) cin>>a[i][j]; } cout<<"sum="<<sum(a,n,m)<<endl; _getch(); for (i=0;i<n;i++) delete [] a[i]; delete [] a; }



Похожие презентации
Mypresentation.ru
Загрузить презентацию