15 / 15 / 5
Регистрация: 19.10.2009
Сообщений: 187
1

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

25.10.2009, 22:29. Показов 4792. Ответов 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;
}
И еще один вопрос,почему при занесении в двумерный массив при выводе элементов в этом же цикле,в котором и заносили,и при выводе элементов потом,значения в последнем столбце не совпадают?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.10.2009, 22:29
Ответы с готовыми решениями:

Циклический сдвиг вниз и вправо двумерного динамического массива
Прошу помочь написать алгоритм сдвига строк вниз, столбцов вправо. Вверх и влево осилила. Вот моя...

Циклический сдвиг элементов массива влево на одну позицию
Дан массив размера N. Осуществить циклический сдвиг элементов массива влево на одну позицию (при...

Осуществить циклический сдвиг элементов массива влево на одну позицию
Помогите, пожалуйста, решить программы на си++, если не решу мне хана, заранее спасибо: Дан массив...

Осуществить циклический сдвиг элементов массива вправо на одну позицию
4Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на одну позицию (при...

18
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,644
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]


Исправляй.
0
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 23:00 3
Цитата Сообщение от Metal_666_ Посмотреть сообщение
почему при занесении в двумерный массив при выводе элементов в этом же цикле,в котором и заносили,и при выводе элементов потом,значения в последнем столбце не совпадают?
Рушишь кучу. Лучше бы вылетало по аксесс-виолайшэн.
0
15 / 15 / 5
Регистрация: 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 Посмотреть сообщение
Рушишь кучу. Лучше бы вылетало по аксесс-виолайшэн.
А по подробнее,желательно код если можно,а то я не особо силен еще во всяких фишках....
0
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 23:10 5
Metal_666_, Тут объяснять, уйдет времени больше, чем написать снуля, самому.

Добавлено через 1 минуту
Судя по этому:
Цитата Сообщение от Metal_666_ Посмотреть сообщение
#include <iostream.h>
какой-то странный компилятор у тебя. Что за?
0
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,644
25.10.2009, 23:13 6
Надо быть последовательным.
Покажи исправленное.
0
15 / 15 / 5
Регистрация: 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;
}
0
Эксперт С++
3210 / 1458 / 73
Регистрация: 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.
0
15 / 15 / 5
Регистрация: 19.10.2009
Сообщений: 187
25.10.2009, 23:23  [ТС] 9
Цитата Сообщение от niXman Посмотреть сообщение


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

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

0
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 23:26 12
Цитата Сообщение от Metal_666_ Посмотреть сообщение
Да блин,я ток второй месяц программирование учу,так что мне пока мало что известно,и первый язык,который мы учим-это C++ 6.0,так что я не виноват в том,какими функциями пользуюсь...
Тебя никто не обвиняет. Просто если есть возможность, выбери нормальный компилятор, MSVS-2008 хотябы.
0
15 / 15 / 5
Регистрация: 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];

Завожу одномерный массив,в котором будет храниться последняя строчка,которую потом поместим на первую позицию.(исходя из моего метода выглядит так:всем элементам строки,начиная с последней,присваиваем значения предыдущей,последняя естественно пропадает,затем мы и завели для нее массив)
0
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,644
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 минуты
И меняй среду программирования, да.
0
15 / 15 / 5
Регистрация: 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 строчки,так как при компиляции выделяется именно она.
0
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,644
25.10.2009, 23:51 16
Ну, у меня другая среда программирования. у меня нормально всё в этом месте.
А поэксперементировать-то никак, что ли?
...Вот я даже отсюда вижу, на что твой компилятор МОЖЕТ ругаться, хотя я не уверен.
Ты зачем в 28-ой строке пишешь a [i] [j] при i==3?

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

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

Добавлено через 32 минуты
Огромное спасибо тем,кто пытался мне помочь,это во всем виновата моя тупость,разобрался,действительно с индексами наворотил хрень какуюто)))
0
5 / 5 / 2
Регистрация: 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;
        }
}
0
15 / 15 / 5
Регистрация: 19.10.2009
Сообщений: 187
26.10.2009, 13:12  [ТС] 19
Задача решена,это я с индексами протупил...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2009, 13:12
Помогаю со студенческими работами здесь

Одномерные массивы (циклический сдвиг всех элементов массива на одну позицию влево)
Написать программу, которая делает циклический сдвиг всех элементов массива а1, а2, ..., аn на одну...

Дан массив размера N. Осуществить сдвиг элементов массива вправо на одну позицию (при этом A1 перейдет в A2, A2 — в A3,
Дан массив размера N. Осуществить сдвиг элементов массива вправо на одну позицию (при этом A1...

Сдвиг массива на одну позицию вправо
Задано вектор T(n), 12&lt;=n. Сформувати вектор Y с элементов T, что передають самому большому...

Сдвиг массива вправо на одну позицию
Помогите , заранее спасибо! Задан вектор T(n), n=&lt;12. Сформулировать вектор У из элементов Т ,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru