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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
qwertyk
#1

Создание массива при работе программы - C++

26.11.2008, 00:59. Просмотров 1376. Ответов 13
Метки нет (Все метки)

Суть такова при работе программы я получу 2 числа (M и N), заранее я их не знаю. Мне надо создать двумерный массив (если это возможно) размером именно M на N.
Если создать именно массив невозможно подскажите какую либо другую структуру, которая позволит это сделать.
Предложение сделать массив заранее (к примеру 100 на 100) не интересно, с ним потом будет трудно работать.

+ желательно учесть то что потом мне надо будет отдельные строки этого массива и возможно сам массив передавать в функции, копировать, изменять...
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2008, 00:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание массива при работе программы (C++):

Не является внутренней или внешней командой - ошибка не при компиляции а при работе программы - C++
В VS скомпилировал код #include <iostream> using namespace std; int main() { int a; cout<<"Hallo"; cin>>a; cout<<a; ...

Ошибка при работе программы - C++
Помогите найти ошибку Код: #include <iostream> #include <windows.h> #include "winbase.h" #include <fstream> #include...

Ошибка при работе программы - C++
Здравствуйте! У меня такая проблема, вылетает программа. Она работает, компилируется, данные вводятся, но когда я перехожу к выводу перечня...

Пауза при работе программы. - C++
Кроме system("pause") есть еще команды, которыми можна приостановить работу программы?

Крэш программы при работе с кострукторами - C++
Пробую разобраться с конструкторами. Увы пока крэш ( Подскажите #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstring> ...

Краш программы при работе с tinyxml2 - C++
Привет всем. Использую tinyxml2, пытаюсь из этого xml документа: <response list="true"> <user> <id>12345678</id> ...

13
StarWorm
17 / 16 / 4
Регистрация: 20.11.2008
Сообщений: 81
26.11.2008, 01:12 #2
Создать массив динамически:
Код
int** arr=new int*[M];
for(iny i=0;i<M;i++)
   arr[i]=new int[N];
...
...
for(iny i=0;i<M;i++)
   delete [] arr[i];
delete [] arr;
Примерно вот так...
1
Alirp
56 / 51 / 1
Регистрация: 04.05.2008
Сообщений: 273
26.11.2008, 08:52 #3
Можно и не динамический, просто объявление массива писать после ввода переменных, примерно так:
Код
int M, N;
cout << "Введите значение числа M:"
cin >> M;
cout << "Введите значение числа N:"
cin >> N;
int mas [M][N];
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
26.11.2008, 10:12 #4
Хм, это вообще не скомпилируется.
0
Alirp
56 / 51 / 1
Регистрация: 04.05.2008
Сообщений: 273
26.11.2008, 10:33 #5
Цитата Сообщение от CheshireCat Посмотреть сообщение
Хм, это вообще не скомпилируется.
Всё отлично компилируется и без единого варнинга, если не веришь проверь сам.
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
26.11.2008, 12:40 #6
Согласен, я был не прав. Следующий вопрос: хорошо, скомпилировалось... и как это будет работать, как ты думаешь?
0
Alirp
56 / 51 / 1
Регистрация: 04.05.2008
Сообщений: 273
26.11.2008, 12:55 #7
Цитата Сообщение от CheshireCat Посмотреть сообщение
Согласен, я был не прав. Следующий вопрос: хорошо, скомпилировалось... и как это будет работать, как ты думаешь?
Работать все будет правильно, сначала с помощью ввода задаются значения переменных, а затем обявляется двумерный массив с известным размером, вот если бы я сначала обявил массив, а затем задал значения переменных N и M, тогда бы да, согласен работало не корректно.
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
26.11.2008, 13:03 #8
Поправочка:
Это НЕ ДОЛЖНО скомпилироваться, поскольку противоречит Стандарту, 8.3.4/1. Если некоторые компиляторы и допускают такие вольности, то это не есть правильно.

А правильный компилятор (C++, но не С99!) должен сказать:
>: error C2057: expected constant expression

А поскольку твой код оперирует с потоковым вводом (cin), то это именно C++, не так ли?
0
Alirp
56 / 51 / 1
Регистрация: 04.05.2008
Сообщений: 273
26.11.2008, 14:15 #9
Цитата Сообщение от CheshireCat Посмотреть сообщение
Это НЕ ДОЛЖНО скомпилироваться, поскольку противоречит Стандарту, 8.3.4/1. Если некоторые компиляторы и допускают такие вольности, то это не есть правильно.
Я таких компиляторов, в которых это не работает не встречал, и ничего не правильного я здесь не вижу.
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
26.11.2008, 14:23 #10
А я, к сожалению, встречал... Поэтому и приходится на работе - писать переносимый код.
Например, GCC 4.3 - с установками по умолчанию спокойно "проглатывает" этот код; но такое поведение специально оговорено как C Language Extensions в его Complete Guide. Если же потребовать -pedantic (т.е. точное соответствие Стандартам), то он тоже откажется компилировать это.
А вот MSVC++ 8 (2005) сразу ругается и отказывается компилировать.
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
26.11.2008, 17:54 #11
Вообще-то да, динамику надо создавать с помощью new. И к слову, динамически объявить двухмерный массив нельзя.
1
Matskoff-Lion
4 / 4 / 0
Регистрация: 25.11.2008
Сообщений: 41
26.11.2008, 18:58 #12
Можно создать массив одномерный MxN, а доступ к элементам получать не через указатели на срезы, а как делает паскаль например: путем арифметического высчитывания индекса

А вот с Alirp'ом я в корне не согласен: такое компилиоваться не должно. Это противоречит стандартам С++, в объявлении массива (в памяти стат. объектов) должны быть значения известные на момент компиляции, чтобы компилятор выделил необходимую память.
1
qwertyk
27.11.2008, 16:50 #13
StarWorm,Matskoff-Lion, Spo1ler
Спасибо большое! У меня нет слов кроме слова круто =).
Alirp, к сожалению это у меня тоже не катит, иначе бы я не создал тему.

Добавлено через 14 часов 27 минут 21 секунду
StarWorm, спасибо за отрывок кода но возникает вопрос:
Что значит буквосочетание iny в строке кода
Код
for(iny i=0;i<M;i++)
Matskoff-Lion
4 / 4 / 0
Регистрация: 25.11.2008
Сообщений: 41
27.11.2008, 19:31 #14
Что значит буквосочетание iny
это опечатки. предполагалось int.
T и Y рядом находятся
1
27.11.2008, 19:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2008, 19:31
Привет! Вот еще темы с ответами:

При работе программы выдаёт ошибку - C++
Ошибка: Expression: c &gt;= -1 &amp;&amp; c &lt;= 255. Что должна делать программа?: Дана строка. Удалить слова, не содержащие букв «A», «В», «Е»....

Вылет при работе программы с неизвестной ошибкой - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; int main() { int x=0; // хранит количество слов в строке ...

Ошибка при работе разреженного массива - C++
Выдаёт: Нарушение прав доступа при записи Вот класс разреженный массив #pragma once #include &lt;list&gt; using namespace std; ...

как сделать так, чтоб при работе программы можно было вводить в качестве данных русские слова? - C++
мммм?


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

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

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