Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 153, средняя оценка - 4.90
Alinka
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 8
#1

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

09.10.2008, 15:26. Просмотров 18514. Ответов 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;
}
//---------------------------------------------------------------------------
вот такой вот код, кто подскажет как изменить его
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tengel
2 / 2 / 0
Регистрация: 08.10.2008
Сообщений: 17
09.10.2008, 20:33     Создание динамического массива #21
я уже ево удалил
Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
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;
}
WaRLoCK_UA
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';
}
Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
10.10.2008, 21:01     Создание динамического массива #24
Уговорил но то на проверку ввода меньше 0
WaRLoCK_UA
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';
}
igor_nf
118 / 12 / 1
Регистрация: 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. Код в юмор.
Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
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 ошибки ???
WaRLoCK_UA
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. Код в юмор.
Можно вместе с тобой) С компилятором пообщаешся)
rinal
0 / 0 / 0
Регистрация: 11.10.2008
Сообщений: 15
11.10.2008, 16:02     Создание динамического массива #29
Я в C++ не так уж разбираюсь, так что извини
WaRLoCK_UA
0 / 0 / 0
Регистрация: 09.10.2008
Сообщений: 20
11.10.2008, 16:30     Создание динамического массива #30
Я сам не шибко разбираюсь, только учусь) А так проблем нет! За что извиняешся? Не зделал вроде ничо!)
igor_nf
118 / 12 / 1
Регистрация: 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 Посмотреть сообщение
Возможно что данный НАЧИНАЮЩИЙ прогер еще не достиг данных высот... так что не грузи!
Если для вас ссылки - это ВЫСОТЫ, тогда о каком С++ может идти речь.. Это основы языка.
WaRLoCK_UA
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
igor_nf
118 / 12 / 1
Регистрация: 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.
Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
12.10.2008, 14:07     Создание динамического массива #34
я не спорю что написал без ошибок,но нас учат что проверка лишняя не когда не бывает ,по поводу последнего кода,возможно и просто ,это у меня в будущем,с класами опеерацый мы еще не проходили .
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2008, 14:47     Создание динамического массива
Еще ссылки по теме:

Создание динамического массива объектов C++
Создание динамического символьного массива C++
C++ Создание динамического массива
C++ Создание динамического массива
C++ Создание динамического массива

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

Или воспользуйтесь поиском по форуму:
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
12.10.2008, 14:47     Создание динамического массива #35
Цитата Сообщение от Casper! Посмотреть сообщение
но нас учат что проверка лишняя не когда не бывает
Касаемо оператора new это утверждение неверно. Более того, 50% преподов(ну не везде конечно..) сами некомпетентны и могут лишь обучить только самому простому. Так что бери литературу и занимайся сам!

Цитата Сообщение от Casper! Посмотреть сообщение
это у меня в будущем,с класами опеерацый мы еще не проходили .
Не жди, пока пройдёте на учёбе, начинай прямо сейчас самостоятельное изучение. Запомни - программировать ты можешь научиться только САМ. В школе и университете тебя этому не научат.
Yandex
Объявления
12.10.2008, 14:47     Создание динамического массива
Ответ Создать тему
Опции темы

Текущее время: 07:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru