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

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

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

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

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

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

Осуществить циклический сдвиг элементов массива вправо на одну позицию - C++
4Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на одну позицию (при этом A 1 перейдет в A 2 , A 2 — в A 3 ,...

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

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

Циклический сдвиг элементов массива по диагонали влево вниз - C++
Квадратный массив N×N по диагонали влево вверх. //--------------------------------------------------------------------------- ...

Сдвиг элементов массива вправо на ону позицию - C++
Реализовать программу , осуществляющую сдвиг элементов массива вправо на ону позицию. Не могу составить алгоритм для программы.

18
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,470
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
niXman
Эксперт С++
3137 / 1449 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 23:00 #3
Цитата Сообщение от Metal_666_ Посмотреть сообщение
почему при занесении в двумерный массив при выводе элементов в этом же цикле,в котором и заносили,и при выводе элементов потом,значения в последнем столбце не совпадают?
Рушишь кучу. Лучше бы вылетало по аксесс-виолайшэн.
0
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 Посмотреть сообщение
Рушишь кучу. Лучше бы вылетало по аксесс-виолайшэн.
А по подробнее,желательно код если можно,а то я не особо силен еще во всяких фишках....
0
niXman
Эксперт С++
3137 / 1449 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.10.2009, 23:10 #5
Metal_666_, Тут объяснять, уйдет времени больше, чем написать снуля, самому.

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


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

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

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

Завожу одномерный массив,в котором будет храниться последняя строчка,которую потом поместим на первую позицию.(исходя из моего метода выглядит так:всем элементам строки,начиная с последней,присваиваем значения предыдущей,последняя естественно пропадает,затем мы и завели для нее массив)
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,470
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
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 строчки,так как при компиляции выделяется именно она.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2009, 23:41
Привет! Вот еще темы с ответами:

Сдвиг элемента двумерного массива - C++
Напишите программу циклической перестановки чисел заданного массива так, чтобы i -e число стало ( i +1)-м, а последнее число – первым. ...

Сдвиг двумерного массива на n элементов - C++
Друзья перепробовал все.. ответ близок.. делаю все for'ами, скидывать что я писал не буду потому что они выдают у меня дичь. Я пытался...

Написать функцию, вставляющую строку в указанную позицию двумерного массива - C++
компилятор постоянно показывает ошибку, не могу понять где ошибка в коде, в котором я выделил, может кто видит ошибку подскажите...

Сортировка двумерного массива. Строки сортируются слева направо, а столбцы сверху вниз - C++
Требуется отсортировать двумерный массив по строкам и по столбцам. Размер массива NxN. Если можно, с комментариями. Строки сортируются...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
25.10.2009, 23:41
Ответ Создать тему
Опции темы

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