0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 8
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте,ребят кто может подсказать как пределать код? что б массивы создавались динамически, ну там писалось введите кол элемнтов стороки, введите кол элементов столбца,
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2008, 15:26
Ответы с готовыми решениями:

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

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

Создание динамического массива
объясните пожалуйста вот эту часть // sozdanie dinamicheskogo massiva m*n...

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

34
2 / 2 / 0
Регистрация: 08.10.2008
Сообщений: 17
09.10.2008, 20:33 21
Author24 — интернет-сервис помощи студентам
я уже ево удалил
0
15 / 14 / 2
Регистрация: 02.09.2008
Сообщений: 168
10.10.2008, 18:22 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
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 20
10.10.2008, 20:47 23
Программу писать не буду... но если хочеш создать динамический массив юзай оперцаю 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
15 / 14 / 2
Регистрация: 02.09.2008
Сообщений: 168
10.10.2008, 21:01 24
Уговорил но то на проверку ввода меньше 0
0
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 20
10.10.2008, 21:05 25
Хмм... проблем нет... и проверку нате:
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 26
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
15 / 14 / 2
Регистрация: 02.09.2008
Сообщений: 168
11.10.2008, 12:40 27
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
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 20
11.10.2008, 15:55 28
Цитата Сообщение от 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
0 / 0 / 0
Регистрация: 11.10.2008
Сообщений: 15
11.10.2008, 16:02 29
Я в C++ не так уж разбираюсь, так что извини
0
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 20
11.10.2008, 16:30 30
Я сам не шибко разбираюсь, только учусь) А так проблем нет! За что извиняешся? Не зделал вроде ничо!)
0
118 / 12 / 3
Регистрация: 21.08.2007
Сообщений: 222
11.10.2008, 19:56 31
Цитата Сообщение от 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
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 20
11.10.2008, 20:55 32
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 33
Я просто хочу чтобы все программисты с самого начала учились по правильной литературе и правильным вещам. Только и всего. Пойми ты - не существует программистов НАЧИНАЮЩИХ и ЗАКОНЧИВШИХ. Учатся все. Нет вообще таких терминов как НАУЧИЛСЯ ПРОГРАММИРОВАТЬ или ТОЛЬКО УЧИТСЯ. Все учатся. И к слову - если ты будешь, например, писать по стандарту, тебя никто не осудит при приёме на работу, если твой код не пройдёт компиляцию, потому что компилятор не в полной мере следует стандарту(ну если осудят - грошь-цена такой вакансии..).

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

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
15 / 14 / 2
Регистрация: 02.09.2008
Сообщений: 168
12.10.2008, 14:07 34
я не спорю что написал без ошибок,но нас учат что проверка лишняя не когда не бывает ,по поводу последнего кода,возможно и просто ,это у меня в будущем,с класами опеерацый мы еще не проходили .
0
118 / 12 / 3
Регистрация: 21.08.2007
Сообщений: 222
12.10.2008, 14:47 35
Цитата Сообщение от Casper! Посмотреть сообщение
но нас учат что проверка лишняя не когда не бывает
Касаемо оператора new это утверждение неверно. Более того, 50% преподов(ну не везде конечно..) сами некомпетентны и могут лишь обучить только самому простому. Так что бери литературу и занимайся сам!

Цитата Сообщение от Casper! Посмотреть сообщение
это у меня в будущем,с класами опеерацый мы еще не проходили .
Не жди, пока пройдёте на учёбе, начинай прямо сейчас самостоятельное изучение. Запомни - программировать ты можешь научиться только САМ. В школе и университете тебя этому не научат.
0
12.10.2008, 14:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2008, 14:47
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru