Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

09.10.2008, 15:26. Просмотров 18764. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2008, 15:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание динамического массива (C++):

Создание динамического массива - C++
const int Num=5; const int SIZE=4096 * Num; SHORT Buf; как такое заменить, если Num- инициализируется при загрузке программы,...

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

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

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

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

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

34
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 Посмотреть сообщение
Возможно что данный НАЧИНАЮЩИЙ прогер еще не достиг данных высот... так что не грузи!
Если для вас ссылки - это ВЫСОТЫ, тогда о каком С++ может идти речь.. Это основы языка.
0
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
0
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.
0
Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
12.10.2008, 14:07 #34
я не спорю что написал без ошибок,но нас учат что проверка лишняя не когда не бывает ,по поводу последнего кода,возможно и просто ,это у меня в будущем,с класами опеерацый мы еще не проходили .
0
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
12.10.2008, 14:47 #35
Цитата Сообщение от Casper! Посмотреть сообщение
но нас учат что проверка лишняя не когда не бывает
Касаемо оператора new это утверждение неверно. Более того, 50% преподов(ну не везде конечно..) сами некомпетентны и могут лишь обучить только самому простому. Так что бери литературу и занимайся сам!

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

Создание динамического массива - C++
Ребята подскажите пожалуйста не давно начал изучать С++ ,решил добавить еще один язык для себя помимо Delphi, и вот вопрос как объявить...

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

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

Создание динамического двумерного массива - C++
void CreateArray(double **DynamicArray, int n){ //??? double **DynamicArray = new double* ; for (int Count = 0; Count &lt; 2*n;...


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

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

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