Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/30: Рейтинг темы: голосов - 30, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 7

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

05.10.2011, 13:59. Показов 5766. Ответов 6

Студворк — интернет-сервис помощи студентам
 Комментарий модератора 
A1uk, Правила
3.3. Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п.
Изначальное название темы: "Помогите исправить код".


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

Сама Задача (Написать функцию, которая сдвигает циклически строки матрицы так, что первая строка переходит на место второй, вторая – на место третьей и т.д., а последняя строка перемещается на место первой. Использовать ее для обработки матрицы заданной размерности.)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//--------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
int **x, n, d;
 
void func(int n,int **x)
{}
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
n=StrToInt(Edit1->Text);
x=new int *[n];
for(int i=0;i<n;i++) x[i]=new int[n];
StringGrid1->ColCount=n;
StringGrid1->RowCount=n;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // Ввод
    for ( int i = 0; i < n; i++ )
        for ( int j = 0; j < n; j++ )
            x[i][j] = StringGrid1->Cells[j][i].ToInt();
 
    // Обмен
    for ( int i = 0; i < n; i++ )
        for ( int j = 0; j < n; j++ )
        {
            d = x[i][j];
            x[i][j] = x[n-1][j];
            x[n-1][j] = d;
        }
 
    // Вывод
    for ( int i = 0; i < n; i++ )
        for ( int j = 0; j < n; j++ )
            StringGrid1->Cells[j][i] = String(x[i][j]);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 Close ();
}
//----------------------------------------------------------------------------
Миниатюры
Создание динамического массива и его инициализация в конструкторе класса  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.10.2011, 13:59
Ответы с готовыми решениями:

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно, пытаюсь разобраться что происходит в...

Инициализация объектов класса в конструкторе другого класса
У меня есть класс Subscriber,в котором есть несколько объектов другого класса Date,мне нужно,чтобы при создании Subscriber объекты класса...

Инициализация перемнных класса в конструкторе
Есть ли разница между Constructor():var_1(VAL), var_2(VAL) {} и Constructor() { var_1 = VAL; var_2 = VAL; } ?

6
 Аватар для XeNoCi
3 / 3 / 1
Регистрация: 18.07.2011
Сообщений: 63
05.10.2011, 21:52
Может отчасти поможет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//-----------------------------------------------
class matrOper{
public:
matrOper(unsigned char nrzX,unsigned char nrzY);
~matrOper();
 
 
void Prisvoe(unsigned char* a);
void Obmen();
void Vivod(unsigned char* a);
private:
unsigned char parXY[2];
 
 
 
 
}
/////////////////////////////.cpp////////////////////////////////////
 
//---------------------------------------------------------
void matrOper::matrOper(unsigned char nrzX,unsigned char nrzY)
{
parXY[0]=nrzX;
parXY[1]=nrzY;
 
int **M=new int [nrzY];
for(int i=0;i<nrzY;i++) M[i]=new int[nrzX];
}
void matrOper::~matrOper()
{
for(int i=0;i<nrzY;i++) delete[]M[i];
delete[]M;
}
//---------------------------------------------------------- 
void matrOper::Prisvoe(unsigned char* a)
{
    for ( int i = 0; i < nrzY; i++ )
        for ( int j = 0; j < nrzX; j++ )
            M[i][j] = a[i*nrzX+j];
 
}
//----------------------------------------------------------
void matrOper::Obmen()
{
unsigned char d=0;
 
    for ( int i = 0; i < nrzY; i++ )
        for ( int j = 0; j < nrzX; j++ )
        {
            d = M[i][j];
            M[i][j] = M[nrzY-1][j];
            M[nrzY-1][j] = d;
        }
}
//----------------------------------------------------------
void Vivod(unsigned char* a)
{
    for ( int i = 0; i < nrzY; i++ )
        for ( int j = 0; j < nrzX; j++ )
            a[j][i] = M[i][j]);
 
}
//----------------------------------------------------------
В общем типа того, проверить пока не могу-компилятор не под рукой
1
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 7
08.10.2011, 12:38  [ТС]
Помогите найти ошибку отредактировал в классы и при нажатии кнопки выполнить выдается ошибка ...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
class func {int n, d, **x;
public: func (int n1)
{n1=n;
 x=new int *[n];
 for (int i=0; i<n; i++) x[i]=new int[n];
}
void f()
{int n, d, **x;
//ввод
    for ( int i = 0; i < n; i++ )
        for ( int j = 0; j < n; j++ )
            x[i][j] = Form1->StringGrid1->Cells[j][i].ToInt();
   //Обмен
    for (int i=0; i<n; i++)
        for (int j=0; j<n; j++)
        {d=x[i][j];
        x[i][j]=x[n-1][j];
        x[n-1][j]=d;
        }
    //Вывод
     for (int i=0; i<n; i++)
        for(int j=0; j<n; j++)
        Form1->StringGrid1->Cells[j][i] = String(x[i][j]);
}
};
int n1;
void __fastcall TForm1::Edit1Change(TObject *Sender)
{ int n1;
 n1=StrToInt(Edit1->Text);
 StringGrid1->ColCount=n1;
 StringGrid1->RowCount=n1;
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
func ob1(n1);
ob1.f();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
Миниатюры
Создание динамического массива и его инициализация в конструкторе класса  
0
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 7
10.10.2011, 16:57  [ТС]
Цитата Сообщение от A1uk Посмотреть сообщение
{n1=n; x=new int *[n]; for (int i=0; i<n; i++) x[i]=new int[n]; }
заменить на n=n1
возникла новая проблема в Массиве не меняются строчки при нажатии кнопки "Button1"
0
 Аватар для XeNoCi
3 / 3 / 1
Регистрация: 18.07.2011
Сообщений: 63
17.10.2011, 22:26
Прошу прощения за долгую задержку...дела.
Вот переделаный уделаный код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//XeNoCi & JANE----------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
 
int n1;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
class func {
public:
int n, d, **x;
 
func (int n1)
{
n=n1;
x=new int *[n];
for (int i=0; i<n; i++) x[i]=new int[n];
}
///
defunc ()
{
for (int i=0; i<n; i++) delete[]x[i];
delete[]x;
}
//////////////////////
void f()
{
//Ввод
    for ( int i = 0; i < n; i++ ){
        for ( int j = 0; j < n; j++ ){
            x[i][j] = Form1->StringGrid1->Cells[j][i].ToInt();
    }
    }
   //Обмен строк в 3 этапа
   int *m=new int[n];
   for(int i=0;i<n;i++){
   m[i]=x[n-1][i];
   }
   for(int i=n-1;i>0;i--){
   for (int j=0;j<n;j++){
   x[i][j]=x[i-1][j];
   }
   }
   for(int i=0;i<n;i++){
   x[0][i]=m[i];
   }
 
 
    delete[]m;
    //Вывод
     for (int i=0; i<n; i++){
        for(int j=0; j<n; j++){
        Form1->StringGrid1->Cells[j][i] = String(x[i][j]);
        }
     }
}
///////////////////////
 
};
/////////////////////////////////////////////////////
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
 n1=StrToInt(Edit1->Text);
 StringGrid1->ColCount=n1;
 StringGrid1->RowCount=n1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
func ob1(n1);
ob1.f();
ob1.defunc();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
Несколько полезных как я думаю советов:
1-старайся создавать функции-независимые блоки(т.е функции друг от друга не зависят)
2-разделяй код графическими разделителями(комментарными строками)
3-все-таки мое мнение, что класс необходимо размещать в отдельном модуле(при работе с компонентами не слишком эффективно)
4-не нужно забывать удалять динамически созданные переменные(особенно массивы)
5-переменные, которые особо важны стоит объявлять логически(выигрыш при локальном варианте при большом количестве повторений мал, а трудность восприятия кода растет)
6-не нужно создавать кашу из кода(не бойтесь ставить Enter компилятору все равно)
Ну и еще,не знаю,но я придерживаюсь такому стандарту записи тела функции(просто к сведению)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//---------------------------------------------------------------------------------
void Function()
{
char a=0;
String s="";
int t=0;
/*-----------------*/
...патчевание переменных,предварительные вычисления и расчеты
/***************/
...основное тело
 
///////////////////////
...уничтожение динамических переменных(при наличии)
}
//----------------------------------------------------------------------------------
1
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 7
18.10.2011, 19:46  [ТС]
Цитата Сообщение от XeNoCi Посмотреть сообщение
3-все-таки мое мнение, что класс необходимо размещать в отдельном модуле(при работе с компонентами не слишком эффективно)
4-не нужно забывать удалять динамически созданные переменные(особенно массивы)
Да это верно, нам разъяснили это...
0
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 7
11.01.2012, 12:47  [ТС]
Подскажите как реализовать задачу с помощью срезов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
int **x, n, d;
 
void func(int n,int **x)
{
    //Ввод
       for ( int i = 0; i < n; i++ )
        for ( int j = 0; j < n; j++ )
            x[i][j] = Form1->StringGrid1->Cells[j][i].ToInt();
    //Обмен
     for (int i=0; i<n; i++)
        for (int j=0; j<n; j++)
        {d=x[i][j];
        x[i][j]=x[n-1][j];
        x[n-1][j]=d;
        }
 
}
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
 n=StrToInt(Edit1->Text);
 x=new int *[n];
 for (int i=0; i<n; i++) x[i]=new int[n];
 StringGrid1->ColCount=n;
 StringGrid1->RowCount=n;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{func (n,x);
        //Вывод
        for (int i=0; i<n; i++)
            for(int j=0; j<n; j++)
           StringGrid1->Cells[j][i] = String(x[i][j]);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 Close();       
}
//---------------------------------------------------------------------------
valarray shift (int num) const;// новый массив значений в котором все элементы сдвинуты на num позиций размер исходного массива = массиву результирующего
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2012, 12:47
Помогаю со студенческими работами здесь

Инициализация в конструкторе или теле класса ?
Вопрос я думаю достаточно нубский, но google не помог. например есть класс public class Point { public int X {get; set;} ...

Инициализация полей структуры в конструкторе по-умолчанию класса
Всем привет! #include &lt;string&gt; #include &lt;vector&gt; #pragma once class StudentsList { public:

Инициализация вектора статическим массивом в конструкторе класса
Доброго всем времени суток!Помогите разобраться.Есть класс.Нужно вектор заполнить из статического массива,своего рода константной таблицей....

Создание массива объектов класса через список инициализации в конструкторе композита
Может, просто плохо искала, но не могу найти. Есть класс, атрибутом которого является массив объектов другого класса. Как составить...

Инициализация массива в конструкторе
подскажите пожалуйста, по условиям задачи необходимо создать массив int #include &lt;iomanip&gt; #include &lt;cstdlib&gt; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru