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

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

Войти
Регистрация
Восстановить пароль
 
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
#1

Сдвиг двумерного массива вниз на одну позицию - C++

25.10.2009, 22:29. Просмотров 1186. Ответов 18
Метки нет (Все метки)

Есть задача:сдвинуть элементы двумерного массива вниз на одну позицию,а последнюю строку переместить на первую.Делал,но при компиляции,некоторую часть делает,потом выкидывает ошибку,подскажите в чем дело,вот код:
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
#include <iostream.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
        SetConsoleOutputCP(1251);
        int n,n1;
        double a[3][2];
        double b[2];
   for (int i=0;i<4;i++)
      {
         for (int j=0;j<3;j++)
         a[i][j]=rand();
      }
   for (int i=0;i<4;i++)
      {
         for (int j=0;j<3;j++)
         cout<<a[i][j]<<" ";
         cout<<endl;
      }
   cout<<endl;
   for (int j=0;j<3;j++)
   b[j]=a[3][j];
 
   for(int j=0;j<3;j++)
      {
      for (int i=3;i>1;i--)
      a[i][j]=a[i-1][j];
      }
   for (int j=0;j<3;j++)
   a[0][j]=b[j];
 
   for (int i=0;i<4;i++)
      {
         for (int j=0;j<3;j++)
         cout<<a[i][j]<<" ";
         cout<<endl;
       }
   system("pause");
   return 0;
}
И еще один вопрос,почему при занесении в двумерный массив при выводе элементов в этом же цикле,в котором и заносили,и при выводе элементов потом,значения в последнем столбце не совпадают?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2009, 22:29     Сдвиг двумерного массива вниз на одну позицию
Посмотрите здесь:

C++ Циклический сдвиг элементов массива по диагонали влево вниз
C++ Сдвиг элементов массива вправо на ону позицию
C++ Осуществить циклический сдвиг элементов массива влево на одну позицию
Одномерные массивы (циклический сдвиг всех элементов массива на одну позицию влево) C++
C++ Сдвиг элемента двумерного массива
C++ Сортировка двумерного массива. Строки сортируются слева направо, а столбцы сверху вниз
Как добавить элемент в конец массива и расширить его на одну позицию? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
25.10.2009, 22:55     Сдвиг двумерного массива вниз на одну позицию #2
Начнём с заполнения массива
C++
1
2
3
4
   for (int i=0;i<4;i++)      {
         for (int j=0;j<3;j++)
         a[i][j]=rand();
   }
Это что? Это у тебя заполяется массив из 4-х столбцов и трёх строчек. А массив объявлен
double a[3][2]


Исправляй.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 23:00     Сдвиг двумерного массива вниз на одну позицию #3
Цитата Сообщение от Metal_666_ Посмотреть сообщение
почему при занесении в двумерный массив при выводе элементов в этом же цикле,в котором и заносили,и при выводе элементов потом,значения в последнем столбце не совпадают?
Рушишь кучу. Лучше бы вылетало по аксесс-виолайшэн.
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
25.10.2009, 23:09  [ТС]     Сдвиг двумерного массива вниз на одну позицию #4
Это исправил,спс,но вот он у меня всеравно при компиляции,когда доходит до 29 строчки выкидывает ошибку и буилдер виснет.Ошибка вот какая:Project.exe raised exeption class EAcessViolation with message 'Access violation at adress 0040126D.Read of address 0D25EB14'/Process stopped.Use Step or Run to continue.

Добавлено через 3 минуты
Цитата Сообщение от niXman Посмотреть сообщение
Рушишь кучу. Лучше бы вылетало по аксесс-виолайшэн.
А по подробнее,желательно код если можно,а то я не особо силен еще во всяких фишках....
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 23:10     Сдвиг двумерного массива вниз на одну позицию #5
Metal_666_, Тут объяснять, уйдет времени больше, чем написать снуля, самому.

Добавлено через 1 минуту
Судя по этому:
Цитата Сообщение от Metal_666_ Посмотреть сообщение
#include <iostream.h>
какой-то странный компилятор у тебя. Что за?
kravam
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
25.10.2009, 23:13     Сдвиг двумерного массива вниз на одну позицию #6
Надо быть последовательным.
Покажи исправленное.
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
25.10.2009, 23:17  [ТС]     Сдвиг двумерного массива вниз на одну позицию #7
Цитата Сообщение от niXman Посмотреть сообщение
Metal_666_, Тут объяснять, уйдет времени больше, чем написать снуля, самому.

Добавлено через 1 минуту
Судя по этому:

какой-то странный компилятор у тебя. Что за?
Нормальный компилятор С++Builder 6.0 ,этот заголовочный файл используется для ввода/вывода из потока...

Добавлено через 3 минуты
Цитата Сообщение от kravam Посмотреть сообщение
Надо быть последовательным.
Покажи исправленное.
Воть
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
#include <iostream.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
        SetConsoleOutputCP(1251);
 
        double a[3][2];
        double b[2];
   for (int i=0;i<3;i++)
      {
         for (int j=0;j<2;j++)
         a[i][j]=rand();
      }
   for (int i=0;i<3;i++)
      {
         for (int j=0;j<2;j++)
         cout<<a[i][j]<<" ";
         cout<<endl;
      }
   cout<<endl;
   for (int j=0;j<2;j++)
   b[j]=a[3][j];
 
   for(int j=0;j<2;j++)
      {
      for (int i=3;i>0;i--)
      a[i][j]=a[i-1][j];
      }
   for (int j=0;j<2;j++)
   a[0][j]=b[j];
 
   for (int i=0;i<3;i++)
      {
         for (int j=0;j<2;j++)
         cout<<a[i][j]<<" ";
         cout<<endl;
       }
   system("pause");
   return 0;
}
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 23:20     Сдвиг двумерного массива вниз на одну позицию #8
Цитата Сообщение от Metal_666_ Посмотреть сообщение
С++Builder 6.0
Ну...тогда все понятно

Цитата Сообщение от Metal_666_ Посмотреть сообщение
Нормальный компилятор
Да, если сравнивать с его предком(Borland C++ 3.1 for DOS)

Цитата Сообщение от Metal_666_ Посмотреть сообщение
этот заголовочный файл используется для ввода/вывода из потока...
Спасибо что просветил. Но дело в том, что подобных файлов в нормальны компиляторах(в прямом смысле этого слова), нет уже года 4.
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
25.10.2009, 23:23  [ТС]     Сдвиг двумерного массива вниз на одну позицию #9
Цитата Сообщение от niXman Посмотреть сообщение


Спасибо что просветил. Но дело в том, что подобных файлов в нормальны компиляторах(в прямом смысле этого слова), нет уже года 4.
Да блин,я ток второй месяц программирование учу,так что мне пока мало что известно,и первый язык,который мы учим-это C++ 6.0,так что я не виноват в том,какими функциями пользуюсь...
Ketino
8 / 8 / 0
Регистрация: 21.09.2009
Сообщений: 84
25.10.2009, 23:24     Сдвиг двумерного массива вниз на одну позицию #10
Цитата Сообщение от niXman Посмотреть сообщение
Тут объяснять, уйдет времени больше, чем написать снуля, самому.
Написать самому тоже тяжело, так как не ясна первоначальная задача.
kravam
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
25.10.2009, 23:26     Сдвиг двумерного массива вниз на одну позицию #11
Оч. хорошо.
Теперь объясни мне, зачем ты делаешь это действие?

C++
1
2
for (int j=0;j<2;j++)   
 b[j]=a[3][j];

niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 23:26     Сдвиг двумерного массива вниз на одну позицию #12
Цитата Сообщение от Metal_666_ Посмотреть сообщение
Да блин,я ток второй месяц программирование учу,так что мне пока мало что известно,и первый язык,который мы учим-это C++ 6.0,так что я не виноват в том,какими функциями пользуюсь...
Тебя никто не обвиняет. Просто если есть возможность, выбери нормальный компилятор, MSVS-2008 хотябы.
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
25.10.2009, 23:35  [ТС]     Сдвиг двумерного массива вниз на одну позицию #13
Цитата Сообщение от Ketino Посмотреть сообщение
Написать самому тоже тяжело, так как не ясна первоначальная задача.
Как не ясна?Выражусь более понятным языком:Дан двумерный массив,сдвинуть все его строки на одну позицию вниз,а последнюю поместить на первую позицию

Добавлено через 7 минут
Цитата Сообщение от kravam Посмотреть сообщение
Оч. хорошо.
Теперь объясни мне, зачем ты делаешь это действие?

C++
1
2
for (int j=0;j<2;j++)   
 b[j]=a[3][j];

Завожу одномерный массив,в котором будет храниться последняя строчка,которую потом поместим на первую позицию.(исходя из моего метода выглядит так:всем элементам строки,начиная с последней,присваиваем значения предыдущей,последняя естественно пропадает,затем мы и завели для нее массив)
kravam
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
25.10.2009, 23:41     Сдвиг двумерного массива вниз на одну позицию #14
Короче ясно, ничё не объясняй.
Смотри сюда.
Код C++
1
2
for (int j=0;j<3;j++) b[j]=a[3][j];

Видишь?
Это лажовый код.
Ты пытаешься присвоить переменной b [j] значение a[3][j]при том, что у тебя ВСЕГО
три строки.
То есть вот эта запись корректна
C++
1
a[2][j]
А вот эта нет
C++
1
a[3][j]
Исправляй.
Ну, ясно всё.
...Ты умеешь находить ошибки подобного рода? Владеешь какой-нибудь технологией?

Добавлено через 3 минуты
И меняй среду программирования, да.
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
25.10.2009, 23:41  [ТС]     Сдвиг двумерного массива вниз на одну позицию #15
Цитата Сообщение от kravam Посмотреть сообщение
Короче ясно, ничё не объясняй.
Смотри сюда.
Код C++
1
2
for (int j=0;j<3;j++) b[j]=a[3][j];

Видишь?
Это лажовый код.
Ты пытаешься присвоить переменной b [j] значение a[3][j]при том, что у тебя ВСЕГО
три строки.
То есть вот эта запись корректна
C++
1
a[2][j]
А вот эта нет
C++
1
a[3][j]
Исправляй.
Ну, ясно всё.
...Ты умеешь находить ошибки подобного рода? Владеешь какой-нибудь технологией?
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
#include <iostream.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
        SetConsoleOutputCP(1251);
        int n,n1;
        double a[3][2];
        double b[2];
   for (int i=0;i<4;i++)
      {
         for (int j=0;j<3;j++)
         a[i][j]=rand();
      }
   for (int i=0;i<4;i++)
      {
         for (int j=0;j<3;j++)
         cout<<a[i][j]<<" ";
         cout<<endl;
      }
   cout<<endl;
   for (int j=0;j<3;j++)
   b[j]=a[2][j];
 
   for(int j=0;j<3;j++)
      {
      for (int i=3;i>1;i--)
      a[i][j]=a[i-1][j];
      }
   for (int j=0;j<3;j++)
   a[0][j]=b[j];
 
   for (int i=0;i<4;i++)
      {
         for (int j=0;j<3;j++)
         cout<<a[i][j]<<" ";
         cout<<endl;
       }
   system("pause");
   return 0;
}
Да я бы их нашел,но у меня ошибка не в этих строчках вылетала.
Меня интересует цикл,который начинается с 27 строчки,так как при компиляции выделяется именно она.
kravam
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
25.10.2009, 23:51     Сдвиг двумерного массива вниз на одну позицию #16
Ну, у меня другая среда программирования. у меня нормально всё в этом месте.
А поэксперементировать-то никак, что ли?
...Вот я даже отсюда вижу, на что твой компилятор МОЖЕТ ругаться, хотя я не уверен.
Ты зачем в 28-ой строке пишешь a [i] [j] при i==3?

Я тебе третий раз говорю- у тебя всего три строки!
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
26.10.2009, 00:27  [ТС]     Сдвиг двумерного массива вниз на одну позицию #17
Цитата Сообщение от kravam Посмотреть сообщение
Ну, у меня другая среда программирования. у меня нормально всё в этом месте.
А поэксперементировать-то никак, что ли?
...Вот я даже отсюда вижу, на что твой компилятор МОЖЕТ ругаться, хотя я не уверен.
Ты зачем в 28-ой строке пишешь a [i] [j] при i==3?

Я тебе третий раз говорю- у тебя всего три строки!
А,блин,точно,все,терь не ругается)))Теперь он мне какую то кашу выдает вместо моего массива....

Добавлено через 32 минуты
Огромное спасибо тем,кто пытался мне помочь,это во всем виновата моя тупость,разобрался,действительно с индексами наворотил хрень какуюто)))
Ламер
5 / 5 / 0
Регистрация: 25.10.2009
Сообщений: 13
26.10.2009, 03:01     Сдвиг двумерного массива вниз на одну позицию #18
Так я не понял. Задача решена или нет?
ведь мысль была с копированием последней строки. Я попытался ее развить:

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
#include <iostream.h>
using namespace std;
 
int main()
{
    int ax=5, ay=6;          //Размерность массива
    int a[ax][ay], b[ay];
 
    for (int i=0;i<ax;i++)
        for (int j=0;j<ay;j++)
            a[i][j]=rand()%100;     //Заполнение массива
    for (int i=0;i<ax;i++)
        {
        for (int j=0;j<ay;j++)
        cout<<a[i][j]<<" ";         // Вывод массива
        cout<<endl;
        }
    cout<<endl;
    for (int j=0;j<ay;j++) b[j]=a[ax-1][j]; //Запомним последнюю строку
    for (int i=ax-1;i>0;i--)                //Сдиг массива
       for (int j=0;j<ay;j++) a[i][j]=a[i-1][j];
    for (int j=0;j<ay;j++) a[0][j]=b[j];
    for (int i=0;i<ax;i++)
        {
        for (int j=0;j<ay;j++) cout<<a[i][j]<<" ";// Вывод результата
        cout<<endl;
        }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2009, 13:12     Сдвиг двумерного массива вниз на одну позицию
Еще ссылки по теме:

C++ Выполнить циклический сдвиг двумерного массива на заданное количество столбцов
C++ Циклический сдвиг вниз и вправо двумерного динамического массива
C++ Написать функцию, вставляющую строку в указанную позицию двумерного массива
C++ Сдвиг двумерного массива на n элементов
Осуществить циклический сдвиг элементов массива вправо на одну позицию C++

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

Или воспользуйтесь поиском по форуму:
Metal_666_
15 / 15 / 2
Регистрация: 19.10.2009
Сообщений: 187
26.10.2009, 13:12  [ТС]     Сдвиг двумерного массива вниз на одну позицию #19
Задача решена,это я с индексами протупил...
Yandex
Объявления
26.10.2009, 13:12     Сдвиг двумерного массива вниз на одну позицию
Ответ Создать тему
Опции темы

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