Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Nadzor
7 / 7 / 1
Регистрация: 14.08.2014
Сообщений: 160
#1

Где ошибка?

07.08.2017, 00:17. Просмотров 867. Ответов 32
Метки нет (Все метки)

Здравствуйте. Не могу никак понять, где же я допустил ошибку..
Мне нужно заполнить двумерный массив через клавиатуру n раз, а в итоге первый и второй столбы содержать одинаковые значения (например 5 и 6, которые вводились в последнюю строку массива) соответственно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <algorithm>
using namespace std;
 
void main()
{
    int n, a, b, x, y, x1, x2, y1, y2, Max=0;
    cin >> n >> a >> b;
    int* mas = new int[n, 2];
 
    for (int i = 0; i<n; i++)
    {
        cin >> x >> y;
        mas[i,0] = x;
        mas[i,1] = y;
    }
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2017, 00:17
Ответы с готовыми решениями:

Вывести на экран количество слов где первая и последняя буквы одинаковы (не понимаю где ошибка)
задан текст нужно вывести на экран количество слов где первая и последняя буквы...

Подскажите, где может быть ошибка (структуры)? (скорее всего где-то амперсенд нужен, все вроде проверил)
написать универсальный тип, который представляет точку на плоскости в...

Укажите где ошибка (ошибка во время выполнения программы)
Здравствуйте, помогите пожалуйста найти ошибки в коде которые возникаю при...

Ошибка при компиляции. Где ошибка? (Работа с классом)
Уважаемые форумчане! При компиляции проекта возникает ошибка &quot; undefined...

В чём ошибка.В коде там где коментарий там ошибка поучается.
#include &lt;iostream&gt; #include &lt;Windows.h&gt; using namespace std; class...

32
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
07.08.2017, 00:25 #2
Цитата Сообщение от Nadzor Посмотреть сообщение
int n, a, b, x, y, x1, x2, y1, y2
У тебя кнопки на клавиатуре платные?
0
Nadzor
7 / 7 / 1
Регистрация: 14.08.2014
Сообщений: 160
07.08.2017, 00:26  [ТС] #3
Цитата Сообщение от DevAlone Посмотреть сообщение
У тебя кнопки на клавиатуре платные?
Код который я сбросил - это только часть всего проекта
0
Байт
Эксперт C
17943 / 11933 / 2479
Регистрация: 24.12.2010
Сообщений: 24,043
07.08.2017, 00:41 #4
Nadzor, Вспомни, как индексируются массивы в Си(++)
Или это какие-то новые, неведомые мне, стандарты?
0
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
07.08.2017, 00:45 #5
Nadzor, я про то, что переменным надо давать осмысленные имена.

Добавлено через 29 секунд
Цитата Сообщение от Nadzor Посмотреть сообщение
new int[n, 2];
Тут C++, а не C#, нужно new int*[2]; а лучше одномерный вектор пар.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <vector>
 
int main()
{
  std::vector<std::pair<int, int>> array;
 
  array.push_back(std::make_pair(12, 33));
 
  for(auto& pair : array)
    std::cout << pair.first << ": " << pair.second << std::endl;
}
1
GbaLog-
Любитель чаепитий
3164 / 1470 / 465
Регистрация: 24.08.2014
Сообщений: 5,200
Записей в блоге: 1
Завершенные тесты: 2
07.08.2017, 05:26 #6
какой же замечательный этот operator ,.
2
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
07.08.2017, 05:46 #7
Цитата Сообщение от GbaLog- Посмотреть сообщение
какой же замечательный этот operator ,.
А при чём тут он? Он не даст того эффекта, которого ожидает ТС
0
GbaLog-
Любитель чаепитий
3164 / 1470 / 465
Регистрация: 24.08.2014
Сообщений: 5,200
Записей в блоге: 1
Завершенные тесты: 2
07.08.2017, 06:45 #8
Цитата Сообщение от DevAlone Посмотреть сообщение
А при чём тут он?
при том, наверное, что именно благодаря ему код ТСа компилируется.
а ТС сидит и не понимает, что он сделал не так.
но вообще не должен, потому что там void main.
1
Байт
Эксперт C
17943 / 11933 / 2479
Регистрация: 24.12.2010
Сообщений: 24,043
07.08.2017, 11:39 #9
Цитата Сообщение от DevAlone Посмотреть сообщение
Он не даст того эффекта, которого ожидает ТС
Зато даст совсем другой
Вот чему эквивалентен код ТС
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <algorithm>
using namespace std;
 
void main()
{
    int n, a, b, x, y, x1, x2, y1, y2, Max=0;
    cin >> n >> a >> b;
    int* mas = new int[2];
 
    for (int i = 0; i<n; i++)
    {
        cin >> x >> y;
        mas[0] = x;
        mas[1] = y;
    }
}
И результат закономерен...
2
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
07.08.2017, 11:58 #10
Лучший ответ Сообщение было отмечено Nadzor как решение

Решение

Байт,


Nadzor,
попробуй
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 <algorithm>
using namespace std;
 
int  main()
{
    int n, a, b, x, y, x1, x2, y1, y2, Max=0;
    cin >> n >> a >> b;
   
   int** mas = new int*[2];
      mas [0] = new int[n];
       mas [1] = new int[n];
 
    for (int i = 0; i<n; i++)
    {
        cin >> x >> y;
        mas[0][n] = x;
        mas[1][n] = y;
    }
 
// ...........................................
 
// ............................................
 
// обязательно в том месте где массив уже не нужен
delete[]  mas [0];
delete[]  mas [1];
delete mas ;
}
2
GbaLog-
Любитель чаепитий
3164 / 1470 / 465
Регистрация: 24.08.2014
Сообщений: 5,200
Записей в блоге: 1
Завершенные тесты: 2
07.08.2017, 12:27 #11
Цитата Сообщение от ValeryS Посмотреть сообщение
delete mas ;
может всё таки delete [] mas;?
1
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
07.08.2017, 13:03 #12
Цитата Сообщение от GbaLog- Посмотреть сообщение
может всё таки
может
очепятка
0
Nadzor
7 / 7 / 1
Регистрация: 14.08.2014
Сообщений: 160
07.08.2017, 14:06  [ТС] #13
Цитата Сообщение от DevAlone Посмотреть сообщение
Тут C++, а не C#, нужно new int*[2]; а лучше одномерный вектор пар.
Не вижу смысла его использовать, как по мне, так с обычным массивом получишь куда более оптимизированную программу или может быть я его не в нужных направлениях использую..

Добавлено через 18 секунд
Цитата Сообщение от DevAlone Посмотреть сообщение
нужно new int*[2];
Впервые вижу

Добавлено через 1 минуту
Цитата Сообщение от DevAlone Посмотреть сообщение
я про то, что переменным надо давать осмысленные имена.
Стараюсь)
0
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
07.08.2017, 14:06 #14
Цитата Сообщение от Nadzor Посмотреть сообщение
Впервые вижу
массив из двух([2]) указателей(*) на int
1
Nadzor
7 / 7 / 1
Регистрация: 14.08.2014
Сообщений: 160
07.08.2017, 14:10  [ТС] #15
Цитата Сообщение от Байт Посмотреть сообщение
Вспомни, как индексируются массивы в Си(++)
[][] вроде как или [,] ?

Добавлено через 59 секунд
Цитата Сообщение от ValeryS Посмотреть сообщение
массив из двух([2]) указателей(*) на int
А можно пример? Вижу. Спасибо
0
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
07.08.2017, 14:16 #16
Цитата Сообщение от Nadzor Посмотреть сообщение
Не вижу смысла его использовать, как по мне, так с обычным массивом получишь куда более оптимизированную программу или может быть я его не в нужных направлениях использую..
Это тот случай, когда оптимизировать не нужно(да и толку от той оптимизации? Только чуть меньше памяти будет кушать программа), а если ты будешь использовать массив массивов, как предлагали выше, то программа не получится более оптимизированной, чем вектор пар.
0
Nadzor
7 / 7 / 1
Регистрация: 14.08.2014
Сообщений: 160
07.08.2017, 14:18  [ТС] #17
Цитата Сообщение от ValeryS Посмотреть сообщение
int** mas = new int*[2];
mas [0] = new int[n];
mas [1] = new int[n];
Извините, а зачем 2 и 3 строки?
Каждая строка массива может принимать свою длину?

Если запишу так:

C++
1
2
3
int** mas = new int*[2];
mas [0] = new int[2];
mas [1] = new int[4];
То я получу две строки, где 0-я и 1-я в которых размер 2 и 4 соответстено?
0
Nadzor
7 / 7 / 1
Регистрация: 14.08.2014
Сообщений: 160
07.08.2017, 14:25  [ТС] #18
Цитата Сообщение от ValeryS Посмотреть сообщение
int** mas = new int*[2];
mas [0] = new int[2];
mas [1] = new int[4];
Где ошибка?


Верно мое воображение?)
0
Nadzor
7 / 7 / 1
Регистрация: 14.08.2014
Сообщений: 160
07.08.2017, 14:29  [ТС] #19
Цитата Сообщение от DevAlone Посмотреть сообщение
да и толку от той оптимизации?
А время исполнения программы останется тем же?

Добавлено через 2 минуты
Цитата Сообщение от Байт Посмотреть сообщение
Зато даст совсем другой
Вот чему эквивалентен код ТС
Мне нужно две квадратные скобочки [][]
0
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
07.08.2017, 14:32 #20
Цитата Сообщение от Nadzor Посмотреть сообщение
Если запишу так:
то получишь
один массив на 2 а другой на 4 элемента
но обычно так не делают,дюже неудобно

в двух словах
выделяем массив указателей
C++
1
 new int*[2];
результат указатель на указатель
C++
1
 int** mas
потом выделяем массив и присваиваем указателю из массива указателей
C++
1
2
mas [0] = new int[n];
mas [1] = new int[n];
в общем случае когда нужен массив m на n
делается через цикл

C++
1
2
3
int** mas = new int*[m];
for(int i=0;i<m;i++)
   mas [i] = new int[n];
но поскольку всего 2 строки в массиве, смысла большого в цикле нет
2
07.08.2017, 14:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2017, 14:32

Где ошибка?
//--------------------------------------------------------------------------- ...

Где ошибка?
#include &lt;iostream&gt; class Shape { public: Shape(double a = 0, double b...

Где ошибка?
if(x&lt;=0) {y=((sin(x+3))/(pow(x,5)*tan(2*pow(x,3)))); plot1-&gt;Points-&gt;AddXY(x,...


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

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

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