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

Разбить массив на К равных частей, элементы каждой части переставить в обратном порядке

01.04.2019, 19:05. Показов 3992. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание: Ввести одномерный массив А, в котором число элементов кратное К, вывести его. Разбить массив на К равных частей, элементы каждой переставить в обратном порядке.
Вот код:
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
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <math.h>
#include <time.h>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Russian");
    srand(time(NULL));
    int n = 12, k = 2, temp = 0;
    int a[n];
    int ms1[10];
    int ms2[10];
    cout << "Массив рандомных чисел: " << endl;
    for (int i = 0; i < n; i++)
    {
        a[i] = rand() % 25 ; //Диапазон [0; 25]
        cout <<"a["<<i<<"]="<< a[i] << " " << endl;
    }
    for (int i = 0; i < n/k; i++)
    {
        ms1[i] = a[i];
        ms2[i] = a[i+ n/ k];
    }
    cout << "Элементы первой половины массива в обратном порядке: " << endl;
    for (int i = 0; i < n/k; i++)
    {
        temp = ms1[i];
        ms1[i] = ms1[n-i-1];
        ms1[n-i-1] = temp;
        cout <<"ms1["<<i<<"]="<< ms1[i] << " " << endl;
    }
    cout << "Элементы второй половины массива в обратном порядке: " << endl;
    for (int i = 0; i < n/k; i++)
    {
        temp = ms2[i];
        ms2[i] = ms2[n-i-1];
        ms2[n-i-1] = temp;
        cout <<"ms2["<<i<<"]="<< ms2[i] << " " << endl;
    }
    getch();
    return 0;
}
Подскажите, я может что-то делаю не так, но при выводе числа этих двух массивов совсем другие.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.04.2019, 19:05
Ответы с готовыми решениями:

Разбить массив на пять частей и в каждой части поменять местами наибольший элемент с наименьшим
Дан массив X(5·N) (т.е. количество элементов массива кратно пяти). Разбить массив на пять частей и в каждой части поменять местами...

В каждой строке матрицы переставить в обратном порядке элементы
Разработать программу обработки прямоугольной матрицы – двумерного динамического массива. В каждой строке матрицы переставить в обратном...

Массив. Переставить элементы в обратном порядке
Ребята, Здравствуйте! Помогите пожалуйста. Вот задание: Переставить элементы вектора в обратном порядке. Вот элементы -1.365 -3.234...

20
Злостный нарушитель
 Аватар для Verevkin
10307 / 5729 / 1269
Регистрация: 12.03.2015
Сообщений: 26,540
01.04.2019, 19:32
Цитата Сообщение от Messerschmitt01 Посмотреть сообщение
Подскажите, я может что-то делаю не так
Я код не анализировал, но что с ним не так - скажу. Ты сам себе усложняешь задачу, пихая всю программу в main(). Не делай так, разбей на подзадачи и оформи их в виде функций.

Предлагаю начать с функции перестановки элементов куска памяти в обратном порядке. Вот тебе прототип:
C++
1
void revert_int(int* x, unsigned count);
0
0 / 0 / 0
Регистрация: 02.01.2019
Сообщений: 16
01.04.2019, 20:11  [ТС]
В функциях не разбираюсь еще, поэтому пишу исключительно как умею. Было бы неплохо по моему коду пройтись. Что с ним не так?
0
Злостный нарушитель
 Аватар для Verevkin
10307 / 5729 / 1269
Регистрация: 12.03.2015
Сообщений: 26,540
01.04.2019, 20:36
Цитата Сообщение от Messerschmitt01 Посмотреть сообщение
В функциях не разбираюсь еще, поэтому пишу исключительно как умею.
Скажи честно: ты хочешь научиться или тупо сдать и забыть?
Цитата Сообщение от Messerschmitt01 Посмотреть сообщение
Было бы неплохо по моему коду пройтись. Что с ним не так?
Зачем там 2 массива?
1
0 / 0 / 0
Регистрация: 02.01.2019
Сообщений: 16
01.04.2019, 20:38  [ТС]
По заданию массив делится на две части
0
Злостный нарушитель
 Аватар для Verevkin
10307 / 5729 / 1269
Регистрация: 12.03.2015
Сообщений: 26,540
01.04.2019, 20:44
Цитата Сообщение от Messerschmitt01 Посмотреть сообщение
По заданию массив делится на две части
нет. По заданию массив делится
Цитата Сообщение от Messerschmitt01 Посмотреть сообщение
на К равных частей
В любом случае, К массивов не нужны, нужен только 1 массив.

На вопрос-то ответь.
Цитата Сообщение от Verevkin Посмотреть сообщение
ты хочешь научиться или тупо сдать и забыть?
0
0 / 0 / 0
Регистрация: 02.01.2019
Сообщений: 16
01.04.2019, 20:51  [ТС]
Но К у меня 2 присвоено)

Добавлено через 1 минуту
Я хочу понять почему не работает, код писал сам.

Добавлено через 3 минуты
У меня есть массив, его я делю на значение К(я его опередлил как 2)
То есть массив делится на две части, элементы которых я должен обратно переставить
0
Злостный нарушитель
 Аватар для Verevkin
10307 / 5729 / 1269
Регистрация: 12.03.2015
Сообщений: 26,540
01.04.2019, 20:53
Цитата Сообщение от Messerschmitt01 Посмотреть сообщение
Но К у меня 2 присвоено)
Третий и последний раз спрашиваю:
Цитата Сообщение от Verevkin Посмотреть сообщение
Скажи честно: ты хочешь научиться или тупо сдать и забыть?
0
0 / 0 / 0
Регистрация: 02.01.2019
Сообщений: 16
01.04.2019, 20:56  [ТС]
Verevkin, по тексту выше понятно что я хочу понять как это работает,а значит научиться.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.04.2019, 20:57
Цитата Сообщение от Messerschmitt01 Посмотреть сообщение
Но К у меня 2 присвоено)
Массив это не окно или стакан. Слово разбить, это литература. Разбить палатку, это же не значит - вдребезги. Массив из 40 эле6ментов разбивается на 10 по 4 или 5 по 8 и т.д. оставаясь одним целым. Просто его участки рассматриваются обособленно . Благо указательная арифметика позволяет их рассматривать как подмассивы массивы. Послушайте советов Verevkin. Есть ощущение, что вы пытаетесь учить где-то из середины темы.
0
Злостный нарушитель
 Аватар для Verevkin
10307 / 5729 / 1269
Регистрация: 12.03.2015
Сообщений: 26,540
01.04.2019, 21:01
Цитата Сообщение от Messerschmitt01 Посмотреть сообщение
а значит научиться
Это похвально.
Но ты не понял условие задачи. Оно не предполагает выделение дополнительной памяти и копирование данных. Тебе нужно только взять исходный массив и переставить в нём значения элементов в зависимости от числа K и длины исходного массива.
-------
Твой код условию задачи не соответствует. Не надо так.
0
0 / 0 / 0
Регистрация: 02.01.2019
Сообщений: 16
01.04.2019, 21:08  [ТС]
Не врубаюсь как работать с определенным участком массива, не создавая еще одного.
Вот у меня есть массив из 10 чисел: 1 2 3 4 5 6 7 8 9 9, как мне "разбить" его на два участка, чтобы их потом отсортировать, при этом используя только этот массив
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.04.2019, 21:12
Цитата Сообщение от Messerschmitt01 Посмотреть сообщение
Не врубаюсь как работать с определенным участком массива, не создавая еще одного.
Messerschmitt01, участок с первого по пятый (индексы 0-4) - первый массив, а с шестого по десятый (5-9) - второй. Эти абстракции в голове у программиста, а для поддержания их он создаёт две пары переменных. Это погут быть индексы исходного массива, если с указателями вы не дружите.
0
0 / 0 / 0
Регистрация: 02.01.2019
Сообщений: 16
01.04.2019, 21:20  [ТС]
Всмысле в ручную нужно присваивать первому элеменьу - последний, второму - предпоследний, так?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.04.2019, 21:28
Цитата Сообщение от Messerschmitt01 Посмотреть сообщение
Всмысле в ручную нужно присваивать первому элеменьу - последний, второму - предпоследний, так?
Перемещение без std::swap (да и в нём тоже, как в копирующем так и перемещающем) делается с помощью временной переменной. Вопрос не в том. Перемещать данные вручную, если вы не используете алгоритмы (реверсное копирование например), это нормально. Вопрос в доступе. Messerschmitt01, диапазон индексов от 0 до 9 вы должны разделить на два диапазона (разбить) от 0 до 4 и от 5 до 9 и работать с этими диапазонами выполняя перемещения. Циклам где вы будете проходить по диапазонам нужны будут эти границы как пары значений. Messerschmitt01, если вы не начнёте учить с начала, то постоянно будете не понимать то, что станет непонятным тем, кто не поймёт, что именно, вы не понимаете.
0
Злостный нарушитель
 Аватар для Verevkin
10307 / 5729 / 1269
Регистрация: 12.03.2015
Сообщений: 26,540
01.04.2019, 21:37
Цитата Сообщение от IGPIGP Посмотреть сообщение
делается с помощью временной переменной
Можно и без неё.
Дарю автору классическую функцию.
C++
1
void swap(int* a, int* b) { *a ^= *b; *b ^= *a; *a ^= *b; }
Цитата Сообщение от Messerschmitt01 Посмотреть сообщение
Всмысле в ручную нужно присваивать первому элеменьу - последний, второму - предпоследний, так?
Чувак, послушай, прекрати сопротивляться и начни с написания функции из поста 2.
Напишешь - считай 75% работы сделано.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.04.2019, 21:41
Цитата Сообщение от Verevkin Посмотреть сообщение
Можно и без неё.
Можно. И возможно так оно и специализированно где-то. Но это шаблон и реализация для float уже так не прокатит, а для пользовательских типов будет использовать конструктор копии и оператор присваивания.
0
Злостный нарушитель
 Аватар для Verevkin
10307 / 5729 / 1269
Регистрация: 12.03.2015
Сообщений: 26,540
01.04.2019, 21:48
Цитата Сообщение от IGPIGP Посмотреть сообщение
Но это шаблон и реализация для float уже так не прокатит
А я обратного и не утверждал. Для данной задачи подходит, да и славненько.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.04.2019, 22:00
Цитата Сообщение от Verevkin Посмотреть сообщение
А я обратного и не утверждал. Для данной задачи подходит, да и славненько.
Я это понял. Так же как и то, что:
Цитата Сообщение от Verevkin Посмотреть сообщение
Дарю автору классическую функцию.
не будет работать. Есть подарки, которые можно дать лишь тогда, когда их может взять тот кому оно адресовано. Сейчас, ТС не понимает как задать вопрос. То есть, мы просто говорим о том, что значит "разбить". А имело бы смысл начинать с того, что такое массив, как таковой. То есть, учить всё последовательно. Иначе всё без толку.
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
01.04.2019, 22:13
Messerschmitt01,
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
#include <iostream>
#include <cstdlib>
#include <math.h>
#include <time.h>
using namespace std;
 
template<typename T>
void reverse(T* begin, T* end)
{
    for(T* lit = begin, *rit = end-1; lit<rit; ++lit, --rit)
         std::swap(*lit, *rit);
}
 
template<typename T>
void reverse_parts(T* begin, T* end, size_t num_parts)
{
     auto diff = (end - begin)/num_parts;
     if(diff)
         for(T* it = begin; it<end; it+=diff)
             reverse(it, std::min(it+diff, end));
}
 
 
int main()
{
    setlocale(LC_ALL,"Russian");
    srand(time(NULL));
    constexpr int n = 12, k = 2;
    int a[n];
    cout << "Массив рандомных чисел: " << endl;
    for (int i = 0; i < n; i++)
    {
        a[i] = rand() % 25 ; //Диапазон [0; 25]
        cout <<"a["<<i<<"]="<< a[i] << " " << endl;
    }
    
    reverse_parts(a, a + n, k);
    
    for (int i = 0; i < n; i++)
    {
        cout <<"a["<<i<<"]="<< a[i] << " " << endl;
    }
    getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2019, 22:13
Помогаю со студенческими работами здесь

В квадратной матрице целых чисел порядка N поменять переставить в обратном порядке элементы каждой строки, расположенные
В квадратной матрице целых чисел порядка N поменять переставить в обратном порядке элементы каждой строки, расположенные над главной...

Одномерный массив. Переставить элементы в обратном порядке. Написать метод
В одномерном массиве символов переставить элементы в обратном порядке не используя дополнительных массивов. Код написал. Все работает....

Переставить элементы массива в обратном порядке не используя дополнительный массив.
Написал но почему-то всё равно выводит в таком же порядке. uses crt; const n=10; var mas:array of real; i:byte; ...

Переставить элементы массива в обратном порядке, не использовав второй массив
задам массив из 10 чисел. Переставить элементы массива в обратном поряде. не использовать второй массив. 123456 ► 654321

Дан одномерный массив из 15 элементов. Переставить в обратном порядке элементы:
Ребят, нужно в рандомном массиве написать 3 функции, выполняющие следующие действия: а) Переставить в обратном порядке элементы,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru