Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/110: Рейтинг темы: голосов - 110, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 8

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

09.10.2008, 15:26. Показов 21069. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,ребят кто может подсказать как пределать код? что б массивы создавались динамически, ну там писалось введите кол элемнтов стороки, введите кол элементов столбца,
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
#pragma argsused
int main(int argc, char* argv[])
{
        int a;
        int Bufer;
        //ñîçäàåì ìàòðèöó è çàïîëíÿåì åå çíà÷åíèÿìè
        int Matr[4][3] = {1,5,6,2,3,4,2,5,9,23,43,23};
        int VrSt[4];
        int VrStr[3];
        //Âûâîäèì
        cout<<"Èñõîäíàÿ ìàòðèöà\n";
        for(int i=0; i<4 ; i++)
        {
                for(int j=0; j<3; j++)
                {
                cout<<Matr[i][j]<<"\t";
                };
                cout<<"\n";
        };
        cout<<"ñäâèãàòü âíèç=1 èëè âïðàâî=0 ?";
        cin>>a;
        cout<<"íà ñêîëüêî ïîçèöèé?";
        int n;
        cin>>n;
        if (a==1)
        {
         for (int i=0; i<n; i++) //ñêîëüêî ðàç ñäâèãàòü
         {
                for(int j=0; j<3; j++)     //ñäâèãàòü êàæäûé ñòîëáåö
                {
                        for(int k=0; k<3; k++)
                        {
                           VrSt[k+1] = Matr[k][j];
                        };
                        VrSt[0]=Matr[3][j];
                        for(int k=0; k<4; k++)
                        {
                           Matr[k][j]=VrSt[k];
                        };
                };
 
         };
        }
        else
        {
        for (int i=0; i<n; i++) //ñêîëüêî ðàç ñäâèãàòü
         {
                for(int j=0; j<4; j++)     //ñäâèãàòü êàæäóþ ñòðîêó
                {
                        for(int k=0; k<2; k++)
                        {
                           VrStr[k+1] = Matr[j][k];
                        };
                        VrSt[0]=Matr[j][2];
                        for(int k=0; k<3; k++)
                        {
                           Matr[j][k]=VrSt[k];
                        };
                };
 
         };
        }
        //âûâîä
        for(int i=0; i<4 ; i++)
        {
                for(int j=0; j<3; j++)
                {
                cout<<Matr[i][j]<<"\t";
                };
                cout<<"\n";
        };
        cin>>a;
        return 0;
}
//---------------------------------------------------------------------------
вот такой вот код, кто подскажет как изменить его
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2008, 15:26
Ответы с готовыми решениями:

Создание динамического массива
Объявите указатель на массив типа double и предложите пользователю выбрать его размер. Далее напишите четыре функции: первая должна...

Создание динамического массива
Добрый день! Хочу выделить память под массив, только после того как буду знать его длину. Длину вычисляю в функции. Память под массив...

Создание динамического массива
объясните пожалуйста вот эту часть // sozdanie dinamicheskogo massiva m*n a=(int**)malloc(m*sizeof(int *)); for(i=0;i&lt;m;i++) { ...

34
 Аватар для Tengel
2 / 2 / 0
Регистрация: 08.10.2008
Сообщений: 17
09.10.2008, 20:33
Студворк — интернет-сервис помощи студентам
я уже ево удалил
0
 Аватар для Casper!
15 / 14 / 2
Регистрация: 02.09.2008
Сообщений: 168
10.10.2008, 18:22
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
#include<iostream>
#include<tima.h>
using namespace std;
int newAray(int**pa)//vvod razmera massiva
{
int size;
cout<<"size";
cin>>size;
if(size<=0)return 0;
*pa=new int[size];
if(*pa==0) return 0;
return size;
}
void fillArray(int*a,int size)//zapolnenie slu4ainimi 4islami
{
for(int i=0;i<size;i++)
{
a[i]=rand()%100;
cout<<a[i]<<'\n';
}
cout<<'\n';
}
void main()
{
int*a=0;
int size=newArray(&a);
fillArray(a,size);
delete[]a;
}
0
 Аватар для WaRLoCK_UA
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 20
10.10.2008, 20:47
Программу писать не буду... но если хочеш создать динамический массив юзай оперцаю new
C++
1
2
3
4
5
6
7
8
9
10
11
void main()
{
     int size; cin>>size;
     int* mas=new int[size];
     for(int i=0;i<size;i++)
     {
          mas[i]=i+1;
          cout<<mas[i]<<'\t'
     }
cout<<'\n';
}
0
 Аватар для Casper!
15 / 14 / 2
Регистрация: 02.09.2008
Сообщений: 168
10.10.2008, 21:01
Уговорил но то на проверку ввода меньше 0
0
 Аватар для WaRLoCK_UA
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 20
10.10.2008, 21:05
Хмм... проблем нет... и проверку нате:
C++
1
2
3
4
5
6
7
8
9
10
11
void main()
{
     int size; do{cin>>size;}while(size<=0);
     int* mas=new int[size];
     for(int i=0;i<size;i++)
     {
          mas[i]=i+1;
          cout<<mas[i]<<'\t'
     }
cout<<'\n';
}
0
118 / 12 / 3
Регистрация: 21.08.2007
Сообщений: 222
11.10.2008, 11:28
Casper!
У меня есть несколько вопросов по этому коду. Ну про многочисленные синтаксические ошибки я уж не говорю. Во первых обратим внимание на тип, возвращаемый main:

ошибка: ‘::main’ must return ‘int’
что впрочем неудивительно - ни один вменяемый компилятор С++ не странслирует данную программу. Далее: господа - вы вообще книжки не читаете, как я понял да? Действуете наподобие слепого котёнка?
C++
1
2
*pa=new int[size];
if(*pa==0) return 0;
Зачем проверять значение, возвращаемое new? Или вас не учили, что при неудачной попытке выделить память new сгенерирует std::bad_alloc? Ааа... я кажется понял... что ж - продолжайте программировать в turbo C.. там такого, видимо, не наблюдается.. Далее: к чему этот цирк с указателями? С++ предоставляет механизм ссылок, в данном случае он будет как раз к месту. Или вас прёт через каждые три строчки проверять указатель на валидность?

P.S. Код в юмор.
0
 Аватар для Casper!
15 / 14 / 2
Регистрация: 02.09.2008
Сообщений: 168
11.10.2008, 12:40
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
#include<iostream>
#include<time.h>
using namespace std;
int newArray(int**pa)//vvod razmera massiva
{
intsize;
cout<<"size";
cin>>size;
if(size<=0)return 0;
 *pa=newint[size];
if(*pa==0) return 0;
returnsize;
 }
void fillArray(int*a,intsize)//zapolnenie slu4ainimi 4islami
{
for(inti=0;i<size;i++)
 {
a[i]=rand()%100;
cout<<a[i]<<'\n';
 }
cout<<'\n';
 }
void main()
 {
int*a=0;
intsize=newArray(&a);
fillArray(a,size);
delete[]a;
 }
у меня замечательно этот код работет
ты тыкаешь на ошибки компелятора ,а ты не пробывал просто исправить афографические 2 ошибки ???
0
 Аватар для WaRLoCK_UA
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 20
11.10.2008, 15:55
Цитата Сообщение от igor_nf Посмотреть сообщение
Во первых обратим внимание на тип, возвращаемый main:
Ключевое слово void явно указывает что main() не возвращает никакх значений!

Цитата Сообщение от igor_nf Посмотреть сообщение
Сообщение от C++ compiler
ошибка: ‘::main’ must return ‘int’
Ты с С++ Компилером на прямую общаешся? Научиш? 0_о
Да, кстати, сам работаю в среде Visual Studio 2008 и у меня все прекрасно работает... Ну пара ошибок, без ошибок не делается программа!
Цитата Сообщение от igor_nf Посмотреть сообщение
Или вас не учили, что при неудачной попытке выделить память new сгенерирует std::bad_alloc?
Если у операции new какимто макаром НЕ ПОЛУЧАЕТСЯ выделть динамическую память и вернуть ее указатель то она возвращает 0(ноль), так что проверка думаю здесь не лишняя... Есть же пользователи которые могут выделить массив на -5 елементов...


Цитата Сообщение от igor_nf Посмотреть сообщение
я кажется понял... что ж - продолжайте программировать в turbo C.. там такого, видимо, не наблюдается..
Какая разнится в какой среде писать, разные окошки программы? Компилятор - вот сила! А остальное не важно...
Цитата Сообщение от igor_nf Посмотреть сообщение
С++ предоставляет механизм ссылок, в данном случае он будет как раз к месту. Или вас прёт через каждые три строчки проверять указатель на валидность?
Возможно что данный НАЧИНАЮЩИЙ прогер еще не достиг данных высот... так что не грузи!

Цитата Сообщение от igor_nf Посмотреть сообщение
P.S. Код в юмор.
Можно вместе с тобой) С компилятором пообщаешся)
0
 Аватар для rinal
0 / 0 / 0
Регистрация: 11.10.2008
Сообщений: 15
11.10.2008, 16:02
Я в C++ не так уж разбираюсь, так что извини
0
 Аватар для WaRLoCK_UA
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 20
11.10.2008, 16:30
Я сам не шибко разбираюсь, только учусь) А так проблем нет! За что извиняешся? Не зделал вроде ничо!)
0
118 / 12 / 3
Регистрация: 21.08.2007
Сообщений: 222
11.10.2008, 19:56
Цитата Сообщение от WaRLoCK_UA Посмотреть сообщение
Ключевое слово void явно указывает что main() не возвращает никакх значений!
Хорошо, давай спорить. Все выдержки здесь и далее привожу из стандарта C++ ANSI ISO IEC 2003:
3.6.1 Main function [basic.start.main]
An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined. All implementations shall allow both of the following definitions of main:
int main() { /* ... */ }
Таким образом мы приходим к выводу, что мой компилятор в данном контексте в большей степени соответствует стандарту, нежели твой.

Цитата Сообщение от WaRLoCK_UA Посмотреть сообщение
Ты с С++ Компилером на прямую общаешся? Научиш? 0_о
Твоё ёрническое поведение здесь неуместно.

Да, кстати, сам работаю в среде Visual Studio 2008 и у меня все прекрасно работает...
См выше..

Ну пара ошибок, без ошибок не делается программа!
Да уж действительно. Никак без ошибок программа не делается. Ты знаешь, я до сегодняшнего дня думал по другому. Спасибо ты открыл мне глаза на мир.

Цитата Сообщение от WaRLoCK_UA Посмотреть сообщение
Если у операции new какимто макаром НЕ ПОЛУЧАЕТСЯ выделть динамическую память и вернуть ее указатель то она возвращает 0(ноль), так что проверка думаю здесь не лишняя... Есть же пользователи которые могут выделить массив на -5 елементов...
См. стандарт:
3.7.3.1 Allocation functions [basic.stc.dynamic.allocation]
An allocation function that fails to allocate storage can invoke the currently installed new_handler (18.4.2.2), if any. [Note: A program-supplied allocation function can obtain the address of the currently installed new_handler using the set_new_handler function (18.4.2.3). ] If an allocation function declared with an empty exception-specification (15.4), throw(), fails to allocate storage, it shall return a null pointer. Any other allocation function that fails to allocate storage shall only indicate failure by throwing an exception of class std::bad_alloc(18.4.2.1) or a class derived from std::bad_alloc.
Для тех кто в танке: по умолчанию, если специально не указано обратное, new должен бросать исключение std::bad_alloc. Мелкософтовский компилятор может не следовать стандарту, это их проблемы.

Цитата Сообщение от WaRLoCK_UA Посмотреть сообщение
Какая разнится в какой среде писать, разные окошки программы? Компилятор - вот сила! А остальное не важно...
Остальное - это что ? Что не важно ?

Цитата Сообщение от WaRLoCK_UA Посмотреть сообщение
Возможно что данный НАЧИНАЮЩИЙ прогер еще не достиг данных высот... так что не грузи!
Если для вас ссылки - это ВЫСОТЫ, тогда о каком С++ может идти речь.. Это основы языка.
0
 Аватар для WaRLoCK_UA
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 20
11.10.2008, 20:55
igor_nf, хорошо будем продолжать наш разговор)


Цитата Сообщение от igor_nf Посмотреть сообщение
Хорошо, давай спорить. Все выдержки здесь и далее привожу из стандарта C++ ANSI ISO IEC 2003:
Обрати внимание на год... язык как и сферы в которых пишет программист развиваются! Думаю тут все понятно...


Цитата Сообщение от igor_nf Посмотреть сообщение
Таким образом мы приходим к выводу, что мой компилятор в данном контексте в большей степени соответствует стандарту, нежели твой.
Не уверен!

Цитата Сообщение от igor_nf Посмотреть сообщение
Твоё ёрническое поведение здесь неуместно.
Дико извиняюсь, юмор отсутствует? 0_о

Цитата Сообщение от igor_nf Посмотреть сообщение
Да уж действительно. Никак без ошибок программа не делается. Ты знаешь, я до сегодняшнего дня думал по другому. Спасибо ты открыл мне глаза на мир.
Незнаю как это понимать, в любом случае - спасибо!)



Цитата Сообщение от igor_nf Посмотреть сообщение
Для тех кто в танке: по умолчанию, если специально не указано обратное, new должен бросать исключение std::bad_alloc. Мелкософтовский компилятор может не следовать стандарту, это их проблемы.
Не сказал бы что Microsoft Visual Studio можно назвать млкософтским компилятором...

Цитата Сообщение от igor_nf Посмотреть сообщение
Если для вас ссылки - это ВЫСОТЫ, тогда о каком С++ может идти речь.. Это основы языка.
Если человек только начал учится и учится по определенной системе т.е курсы или нечто иное то вынужден не согласится...

Добавлено через 4 минуты 35 секунд
Думаю продолжать спор не имеет смысла так как:
количество мнений==колчиество людей==true
0
118 / 12 / 3
Регистрация: 21.08.2007
Сообщений: 222
11.10.2008, 22:51
Я просто хочу чтобы все программисты с самого начала учились по правильной литературе и правильным вещам. Только и всего. Пойми ты - не существует программистов НАЧИНАЮЩИХ и ЗАКОНЧИВШИХ. Учатся все. Нет вообще таких терминов как НАУЧИЛСЯ ПРОГРАММИРОВАТЬ или ТОЛЬКО УЧИТСЯ. Все учатся. И к слову - если ты будешь, например, писать по стандарту, тебя никто не осудит при приёме на работу, если твой код не пройдёт компиляцию, потому что компилятор не в полной мере следует стандарту(ну если осудят - грошь-цена такой вакансии..).

Поэтому я не вижу ничего криминального в том, чтобы новички учились сразу по стандарту и выбирали адекватную среду разработки. Более того, считаю это необходимым для нормального развития программиста.

ps Почему я считаю вышеприведённый код юморным я сказал. Если кто-то хочет оспорить моё утверждение, прошу убедительных аргументов. А писюнами меряться - для этого есть "Общалка". Впрочем этого делать то я не собираюсь..
у меня замечательно этот код работет
Если код работает - это не значит что он правильный. Орфографические ошибки я как раз исправил - только не понимаю - зачем постить код с орфографическими ошибками? Я бы исправил код хотя бы так:
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
#include<iostream>
#include<time.h>
 
using namespace std;
int newArray(int *&pa)//vvod razmera massiva
{
int size;
cout << "size" << endl;
cin >> size;
if(size <= 0)return 0;
pa = new int[size];
return size;
}
void fillArray(int *&a,int size)//zapolnenie slu4ainimi 4islami
{
for(int i = 0;i < size; i++)
{
a[i] = rand() % 100;
cout << a[i] << '\n';
}
cout << '\n';
}
int main()
{
int *a = 0;
int size=newArray (a);
fillArray (a, size);
delete [] a;
}
или хотя бы так
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
#include <iostream>
 
using namespace std;
 
class vec {
  int *v;
  int size;
public:
  vec();
  ~vec();
  void set_random();
  friend ostream& operator << (ostream& stream, vec& V);
};
 
vec::vec() {
  cout << "Enter vector size: " << endl;
  cin >> size;
  v = new int[size];
}
 
vec::~vec() {
  delete [] v;
  size = 0;
}
 
void vec::set_random() {
  for(int i = 0; i < size; i++) 
    v[i] = rand() % 100;  
}
 
ostream& operator << (ostream& stream, vec& V) {
  for(int i = 0; i < V.size; i++)
    cout << V.v[i] << endl;
 
return stream;
}
 
int main() {
 
//обратите внимание как легко использовать класс 
vec a;
a.set_random();
cout << a;
 
}
но этот код не менее шуточный, хотя и показывает прменение стандартных
приёмов инкапсуляции, поскольку нет даже проверки на валидность введённых данных.
Лучше всего не изобретать велосипед, а посмотреть на STL.
0
 Аватар для Casper!
15 / 14 / 2
Регистрация: 02.09.2008
Сообщений: 168
12.10.2008, 14:07
я не спорю что написал без ошибок,но нас учат что проверка лишняя не когда не бывает ,по поводу последнего кода,возможно и просто ,это у меня в будущем,с класами опеерацый мы еще не проходили .
0
118 / 12 / 3
Регистрация: 21.08.2007
Сообщений: 222
12.10.2008, 14:47
Цитата Сообщение от Casper! Посмотреть сообщение
но нас учат что проверка лишняя не когда не бывает
Касаемо оператора new это утверждение неверно. Более того, 50% преподов(ну не везде конечно..) сами некомпетентны и могут лишь обучить только самому простому. Так что бери литературу и занимайся сам!

Цитата Сообщение от Casper! Посмотреть сообщение
это у меня в будущем,с класами опеерацый мы еще не проходили .
Не жди, пока пройдёте на учёбе, начинай прямо сейчас самостоятельное изучение. Запомни - программировать ты можешь научиться только САМ. В школе и университете тебя этому не научат.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.10.2008, 14:47

Создание динамического массива
Как создать динамически массив размера n если n вводиться с клавиатуры. А еще и двумерный cin&gt;&gt;n int a=new int; не работает

Создание динамического массива
Хотел написать программу, чтобы пользователь мог задать количество элементов в одномерном массиве, но компилятор пишет что количество...

Создание динамического массива
Как ввести самому количество элементов массива,а не задавать константно ?

Создание динамического массива
Как объявить вот так вот : int blocks = { {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}}; Мне пишет ошибку : массив не может...

Создание динамического массива
Добрый вечер! Подскажите пожалуйста, что необходимо сделать, чтобы заменить статический массив float array; на динамический, длинна...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru