Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 21.03.2012
Сообщений: 22

Сдвинуть элементы двумерного массива на k позиций влево

04.12.2012, 22:18. Показов 4039. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Немножко не умею пользоваться динамическими массивами.
Из-за этого кажется сделал глупые ошибки в программе
Суть программы:
Сдвинуть элементы массива на k позиций влево.
Пример
1 2
3 4
сдвиг на 1 влево
2 3
4 1

Мой вариант

C++ (Qt)
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
int main()
{
int i,j,a,k;
 
cout<<"vvedite sdvig matricy"<<endl;
 
cin >> k;
 
 
 
 
cout<<"vvedite razmernost matricy"<<endl;
    cin>>a;
 
int* mas=new int[a][a];      //////  Косяк в этих двух строчках
 
int* sam=new int[a][a];      ////// Не знаю как динамически выделить память под эти массивы.
 
 
    cout<<"razmernost matricy = "<<a<<endl;
    cout<<"vvedite elementy matricy po poryadky: "<<endl;
 
    
    
    for (i=0;i<a;i++)
    {
    for (j=0;j<a;j++)
    {
    cin>>mas[i][j]; 
    }
    }
 
    cout<<"zapolnyaem matricy chislami po poryadky..."<<endl;
 
    for (i=0;i<a;i++)
    {
    for (j=0;j<a;j++)
    {
    cout<<mas[i][j]<<" ";   
    }
    cout<<endl;
    }
 
int* p_mas = &mas[0][0];
for (i=0; i<a; i++)
{
for (j=0; j<a; j++)
{
sam[i][j]=*(p_mas+(i*a+j+k)%(a*a));
}
}
 
cout<<"result:"<<endl;
for (i=0;i<a;i++)
    {
        for (j=0;j<a;j++)
        {
            cout<<sam[i][j]<<' ';
        }
        cout<<endl;
    }
 
return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.12.2012, 22:18
Ответы с готовыми решениями:

Элементы вещественного массива сдвинуть на k позиций влево
Здравствуйте! Помогите, пожалуйста, с задачей: элементы вещественного массива сдвинуть на k позиций влево

Элементы массива циклически сдвинуть на k позиций влево
Помогите пожалуйста написать программу!!!понимаю что все должно быть оч легко, но... В С++: 1. Дан массив, состоящий из символов....

Все элементы массива X(30) циклически сдвинуть на n позиций влево
Все элементы массива X(30) циклически сдвинуть на n позиций влево при помощи указателей

2
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,028
Записей в блоге: 1
04.12.2012, 22:40
Лучший ответ Сообщение было отмечено Sheptashka как решение

Решение

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <random>
#include <ctime>
#include <iomanip>
 
 
void foo_right(int ** pArr,int _w, int _h, int count){
    int size=_w*_h;
    count=count%size;
    int * pTemp=new int[count];
    memmove(pTemp,((*pArr)+size-count),count*sizeof(**pArr));
    memmove((*pArr)+count,*pArr,(size-count)*sizeof(**pArr));
    memmove(*pArr,pTemp,count*sizeof(**pArr));
    delete [] pTemp;
}
void foo_left(int ** pArr,int _w, int _h, int count){
    int size=_w*_h;
    count=count%size;
    int * pTemp=new int[count];
     memmove(pTemp,*pArr,count*sizeof(**pArr));
     memmove(*pArr,(*pArr)+count,(size-count)*sizeof(**pArr));
     memmove((*pArr)+size-count,pTemp,count*sizeof(**pArr));
    delete [] pTemp;
}
 
int main(){
    srand(time(0));
    const int width=5;
    const int height=7;
    int ** pArr=new int*[height];
    int * ptemparr=new int[width*height];
    pArr[0]=ptemparr;
    for(int i=1;i<height;++i)
        pArr[i]=pArr[i-1]+width;
 
 
    for(int i=0;i<height;++i){
        for(int j=0;j<width;++j){
            pArr[i][j]=rand()%100;
            std::cout<<std::setw(3)<<pArr[i][j];
        }
        std::cout<<std::endl;
    }
 
    foo_left(pArr,width,height,2);
 
    std::cout<<std::endl;
    for(int i=0;i<height;++i){
        for(int j=0;j<width;++j){
            std::cout<<std::setw(3)<<pArr[i][j];
        }
        std::cout<<std::endl;
    }
    delete [] *pArr;
    delete [] pArr;
 
    std::cin.get();
    return 0;
}
Добавлено через 1 минуту
C++
1
2
void foo_right(int ** pArr,int _w, int _h, int count)//Сдвиг вправо - pArr - указатель на массив(массив выделен сплошным блоком памяти), _w,_h - "ширина и высота" массива, count - на сколько сдвинуть
void foo_left(int ** pArr,int _w, int _h, int count)//Сдвиг влево. Параметры те же
0
0 / 0 / 0
Регистрация: 21.03.2012
Сообщений: 22
04.12.2012, 22:43  [ТС]
А можно ли как-то вводить размерность матрицы (квадратной)
и элементы массива соответственно самому вручную с клавиатуры в консольном режиме?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.12.2012, 22:43
Помогаю со студенческими работами здесь

Сдвинуть циклически элементы одномерного массива на k позиций влево
Тема и есть условие задачи... Сам же я застопорился на написании алгоритма сдвига :- #include &lt;iostream.h&gt; #include...

Сдвинуть элементы одномерного динамического массива на заданное число позиций влево
Создать одномерный динамический массив целых чисел iArr размера n, где n вводит пользователь. Заполнить его случайными целыми числами...

Одномерный массив. Сдвинуть элементы циклически на n позиций влево
Ввести одномерный статический массив из k чисел. Сдвинуть элементы массива циклически на n позиций влево. #include &lt;iostream&gt; ...

Сдвинуть все элементы последовательности циклически на k позиций влево
1. Дано целое число. Если число отрицательное, то необходимо вывести все четные числа, начиная со введенного до -2. Если число...

Сдвинуть циклически элементы массива на К позиций вправо
В одномерном массиве,состоящем из n действительных элементов,запишите - Сдвиньте циклически элементы массива на К позиций вправо


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru