АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Динамические массивы

Читайте также:
  1. I. ПСИХОДИНАМИЧЕСКИЕ МОДЕЛИ КОНСУЛЬТАТИВНОЙ ПРАКТИКИ
  2. I. ТЕРМОДИНАМИЧЕСКИЕ СВОЙСТВА ВОДЫ И ВОДЯНОГО ПАРА
  3. Гидродинамические процессы
  4. Гидродинамические характеристики потоков.
  5. Динамические переменные
  6. ДИНАМИЧЕСКИЕ РЯДЫ
  7. Динамические фазы аллювия.
  8. Динамические характеристики камеры в токовом режиме
  9. Задание 2. Структурно-динамические изменения баланса под влиянием хозяйственных операций.
  10. Идентификаторы, переменные, массивы
  11. Изучение работы динамических блоков (Динамические).

Операция new при использовании с массивами имеет следующий формат:

new тип_массива

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

Примеры:

1. int *a=new int[100];//выделение динамической памяти размером 100*sizeof(int) байтов double *b=new double[10];// выделение динамической памяти размером 10*sizeof(double) байтов

2. long(*la)[4];//указатель на массив из 4 элементов типа long

lа=new[2][4];//выделение динамической памяти размером 2*4*sizeof(long) байтов

3. int**matr=(int**)new int[5][10];//еще один способ выделения памяти под двумерный //массив

4. int **matr;

matr=new int*[4];//выделяем память под массив указателей int* их n элементов

for(int I=0;I<4;I++)matr[I]=new int[6];//выделяем память под строки массива

Указатель на динамический массив затем используется при освобождении памяти с помощью операции delete.

Примеры:

delete[] a;//освобождает память, выделенную под массив, если а адресует его начало

delete[]b;

delete[] la;

for(I=0;I<4;I++)delete [] matr[I];//удаляем строки

delete [] matr;//удаляем массив указателей

Пример

Удалить из матрицы строку с номером K

#include <iostream.h>

#include <string.h>

#include <iostream.h>

#include <stdlib.h>

void main()

{

int n,m;//размерность матрицы

int i,j;

cout<<"\nEnter n";

cin>>n;//строки

cout<<"\nEnter m";

cin>>m;//столбцы

//выделение памяти

int **matr=new int* [n];// массив указателей на строки

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

matr[i]=new int [m];//память под элементы матрицы

//заполнение матрицы

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

for(j=0;j<m;j++)

matr[i][j]=rand()%10;//заполнение матрицы

//печать сформированной матрицы

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

{

for(j=0;j<m;j++)

cout<<matr[i][j]<<" ";

cout<<"\n";

}

//удаление строки с номером к

int k;

cout<<"\nEnter k";

cin>>k;

int**temp=new int*[n-1];//формирование новой матрицы

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

temp[i]=new int[m];

//заполнение новой матрицы

int t;

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

if(i!=k)

{

for(j=0;j<m;j++)

temp[t][j]=matr[i][j];

t++;

}

 

//удаление старой матрицы

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

delete matr[i];

delete[]matr;

n--;

//печать новой матрицы

 

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

{

for(j=0;j<m;j++)

cout<<temp[i][j]<<" ";

cout<<"\n";

}

}


//Сумма элементов правее последнего отрицательного

#include <iostream>

using namespace std;

int main()

{

int n,i;

cout<<"n="; cin>>n;

float *a= new float[n];

float sum=0;

cout<<"Vvod massiva:";

for (i=0;i<n;i++) cin>>a[i];

int ineg=-1;

for (i=0;i<n;i++) if (a[i]<0) ineg=i;

for (i=ineg+1;i<n;i++) sum+=a[i];

cout<<sum;

return 0;

}

//Номер столбца из положительных элементов

#include <iostream>

using namespace std;

int main()

{

int nrow,ncol;

cin>>nrow>>ncol;

int **a=new int*[nrow];

int i,j;

for (i=0;i<nrow;i++)a[i]=new int [ncol];

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

for(j=0;j<ncol;j++)

cin>>a[i][j];

//Вывод исходного массива

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

{

for(j=0;j<ncol;j++) cout<<a[i][j]<<" ";

cout<<endl;

}

//Решение задачи

int num=-1; bool all_posit;

for(j=0;j<ncol;j++)

{

all_posit=true;

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

if (a[i][j]<0){all_posit=false;break;}

if (all_posit) {num=j; break;}

}

if (num==-1) cout<<"net";

else cout<<num;

return 0;

}


1 | 2 | 3 | 4 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.)