Тема: Массивы
Добрый день!
Помогите начинающему программисту.
Мне необходимо из прямоугольного массива сделать несколько одномерных массивов по столбцам.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Массивы
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Добрый день!
Помогите начинающему программисту.
Мне необходимо из прямоугольного массива сделать несколько одномерных массивов по столбцам.
Dim myarr(3, 3) As Integer Dim i As Integer, j As Integer For i = 0 To 3 For j = 0 To 3 myarr(i, j) = i + j 'заполнение исходного массива Next j Next i Dim myarr0(3) As Integer, myarr1(3) As Integer, myarr2(3) As Integer, myarr3(3) As Integer For i = 0 To 3 myarr0(i) = myarr(i, 0) myarr1(i) = myarr(i, 1) myarr2(i) = myarr(i, 2) myarr3(i) = myarr(i, 3) Next i
А в более общей форме, когда заранее неизвестно какой будет величина массива?
Вы прописали кол-во столбцов константой , а можно их описать переменной?
Спасибо за ответ
Переменной описать их (кол-во столбцов) безусловно можно, задать динамический массив
Dim myarr(), потом его переопределить
reDim myarr(x,y), цикл тот же сделать вместо For i = 0 To 3 -> For i = 0 To ubound(myarr,1)
Но - как тогда заранее задать (определить) те массивы, которые должны содержать столбцы, если их число заранее неизвестно? Единственный вариант, который вижу я, - создать очередной динамический массив типа Variant, каждый член которого будет содержать этот самый "столбец" из первоначального массива. Но по сути это получится "переливание из пустого в порожнее".
//Все переливать закончили. Все работает. Желающие могут убедиться.
#include <iostream>
using namespace std;
int **creat(int &n, int &m)
{cout <<"n="; cin>>n; cout<<"m="; cin>>m;
int**mas=new int*[n];
for (int i=0; i<n; ++i) mas[i]=new int [m];
for (int i=0; i<n; ++i)
for (int j=0; j<m; j++) {cout<<"mas["<<i<<"]["<<j<<"]="; cin>>mas[i][j];}
return mas;}
int main()
{int n, m;
int summa =0;
int**a=creat(n,m);
int *b=new int[m];
for (int j=0; j<m; ++j)
{int max=a[0][j];
for (int i=0; i<n; ++i)
if (a[i][j]>=max) {max=a[i][j];b[j]=max;}}
for (int j=0; j<m; ++j)
{cout<<"Максимальное число в столбце("<<j<<")="<<b[j]<<endl; summa+=b[j];}
cout<<"Норма матрицы="<<summa;
for(int j=0; j<m; j++) delete [] b ;
for(int i=0; i<n; i++) delete [] a [i];
delete [] a;
return 0;}
Vladimir, рад за вас! Единственное, хотел бы уточнить, а что же это за версия VBA воплотилась в вашем коде? Честно скажу, отстал я от этой жизни...
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Массивы
Форум работает на PunBB, при поддержке Informer Technologies, Inc