0 / 0 / 2
Регистрация: 16.12.2016
Сообщений: 118

Инвертировать массив

12.01.2017, 23:55. Показов 15709. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток!
Начал делать задачу, но сказал преподаватель, что не все тут, что необходимо!!!
Подскажите пожалуйста, что добавить? или что не так ....может быть... ???


Есть массив (1,2,3,4).
Вывернуть массив, т.е. значение, которое раньше было в последнем элементе, должно записаться в нулевой.

(Преподаватель сказала, что тут еще необходима переменная (tmp))
Но что за чудо конкретно необходимо не догадываюсь!!!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include<time.h>
using namespace std;
void main()
{
    setlocale(LC_ALL, "ru");
    srand(time(NULL));
 
            const int size = 10;
            int array[size], tmp;
            for (size_t i = 0; i < size; i++)
            {
                array[i] = size - i - 1;
                cout << " array [" << i << "] = " << array[i] << "\n";
            }
}

За ранее искренне благодарен!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.01.2017, 23:55
Ответы с готовыми решениями:

Инвертировать массив
/*5.Есть массив(1, 2, 3, 4......).Вывернуть массив, т.е.значение, которое раньше было в последнем элементе, должно записаться в нулевой; ...

Инвертировать одномерный массив
Добрый вечер. Помогите пожалуйста обнаружить ошибку. Нужно отобразить одномерный массив симметрично. Ввод: 3 6 10 11 Вывод: 11 10 6...

инвертировать
инвертировать 3-ий и 5-ый бит в слове. как это сделать? какие команды использовать?

21
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
13.01.2017, 02:30
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <vector>
#include <algorithm>
 
int main()
{
  std::vector<int> vec({1, 2, 3, 4});
  std::reverse(std::begin(vec), std::end(vec));
 
  for (auto i : vec)
    std::cout << i << std::endl;
 
  return 0;  
}
1
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
13.01.2017, 08:48
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
int main()
{
    int array[] = { 1, 5, 2, 9, 3, 7 };
    const size_t n = sizeof(array) / sizeof(array[0]);
 
    size_t i = 0, j = n-1;
    while (i < j)
    {
        int tmp  = array[i];
        array[i] = array[j];
        array[j] = tmp;
        i++; j--;
    }
 
    for (i=0; i<n; i++) {
        std::cout << array[i] << ' ';
    }
    std::cout << std::endl;
}
1
0 / 0 / 2
Регистрация: 16.12.2016
Сообщений: 118
13.01.2017, 11:15  [ТС]
Ок, разница в чем?
Одно и тоже действие происходит
Делается одно и тоже одним циклом


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
#include<time.h>
#include<stdlib.h>
 
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "ru");
    srand(time(NULL));
 
const int size = 10;
    int array[size], tmp, j=0;
    for (size_t i = 0; i < size; i++)
    {
        array[i] = size - i - 1;
        cout << " array [" << i << "] = " << array[i] << "\n";
        tmp = array[i];
        array[i] = array[j];
        array[j] = tmp;
    }
}
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
13.01.2017, 11:18
Цитата Сообщение от Predat Посмотреть сообщение
array[i] = size - i - 1;
Зачем это? Вы в значение элемента массива записываете индекс.
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
13.01.2017, 11:20
Цитата Сообщение от Predat Посмотреть сообщение
Делается одно и тоже одним циклом
Нет, не одно и то же. Если не веришь, пройдись в отладчике шаг за шагом.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
13.01.2017, 11:23
Лучший ответ Сообщение было отмечено Predat как решение

Решение

С помощью for цикла:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
int main()
{
    int array[] = { 1, 5, 2, 9, 3, 7 };
    const size_t n = sizeof(array) / sizeof(array[0]);
    for (size_t i=0; i < n/2; i++)
    {
        int tmp  = array[i];
        array[i] = array[n-1-i];
        array[n-1-i] = tmp;
    }
    for (size_t i=0; i < n; i++)
        std::cout << array[i] << " ";
}
Добавлено через 1 минуту
Без использования временной переменной
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main()
{
    int array[] = { 1, 5, 2, 9, 3, 7 };
    const size_t n = sizeof(array) / sizeof(array[0]);
    for (size_t i=0; i < n/2; i++)
        array[i] ^= array[n-1-i] ^= array[i] ^= array[n-1-i];
    for (size_t i=0; i < n; i++)
        std::cout << array[i] << " ";
}
2
0 / 0 / 2
Регистрация: 16.12.2016
Сообщений: 118
13.01.2017, 11:32  [ТС]
Ребята я не спорю!
Просто мне не понятно, что, где и как!?

C++
1
array[i] = size - i - 1; //этим условием я перевернул числа, преподаватель сказал, что это хорошо, но задание не доделано!!!
И еще

C++
1
2
3
const size_t n = sizeof(array) / sizeof(array[0]);
    for (size_t i=0; i < n/2; i++)
        array[i] ^= array[n-1-i] ^= array[i] ^= array[n-1-i];//ТАКОЕ УСЛОВИЕ МНЕ НЕ ПОНЯТНО, ПОТОМУ, ЧТО Я ТОЛЬКО НАЧАЛ МАССИВЫ
Из-за этого обратился к вам
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
13.01.2017, 11:50
Цитата Сообщение от Predat Посмотреть сообщение
ТАКОЕ УСЛОВИЕ МНЕ НЕ ПОНЯТНО, ПОТОМУ, ЧТО Я ТОЛЬКО НАЧАЛ МАССИВЫ
Это стандартная побитовая операция XOR, её изучают в школе.

Цитата Сообщение от Predat Посмотреть сообщение
этим условием я перевернул числа, преподаватель сказал, что это хорошо, но задание не доделано!!!
Преподаватель решил от вас просто отвязаться, либо вы его неправильно поняли. Это условие затирает данные элемента array[i] и записывает в них ненужный индекс. Вы могли записать их во временную переменную и использовать как индекс второго элемента массива, с которым происходит замена.

Добавлено через 35 секунд
Цитата Сообщение от Predat Посмотреть сообщение
ТАКОЕ УСЛОВИЕ МНЕ НЕ ПОНЯТНО
У меня, кстати, специально для этого случая, приведено два варианта решения.
1
0 / 0 / 2
Регистрация: 16.12.2016
Сообщений: 118
13.01.2017, 12:16  [ТС]
Получается, что без оператора size_of, задача по др. не решается?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
13.01.2017, 12:31
Лучший ответ Сообщение было отмечено Predat как решение

Решение

Цитата Сообщение от Predat Посмотреть сообщение
Получается, что без оператора size_of, задача по др. не решается?
sizeof нужен для автоматического вычисления размера массива. Если хочешь, можешь задавать этот размер вручную, сути это не изменит.
1
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
14.01.2017, 01:44
А чем плох был мой вариант?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5287 / 2375 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
14.01.2017, 11:48
Цитата Сообщение от Nemovok Посмотреть сообщение
А чем плох был мой вариант?
Nemovok, ты забыл поставить const в цикле!

Добавлено через 22 секунды
Nemovok, а если серьёзно, то ничем. Как по мне, так самый лучший вариант.

Добавлено через 6 минут
Nemovok, хотя я бы лично так написал:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main()
{
  std::vector<int> vec { 1, 2, 3, 4 };
  std::copy( vec.rbegin(), vec.rend(), std::ostream_iterator<int>( std::cout, " " ) );
}
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
14.01.2017, 12:00
Цитата Сообщение от Nemovok Посмотреть сообщение
А чем плох был мой вариант?
Лишний проход цикла.

Есть ещё std::reverse_copy
2
0 / 0 / 2
Регистрация: 16.12.2016
Сообщений: 118
14.01.2017, 12:06  [ТС]
Для меня не известны еще методы употребления

C++
1
2
3
4
#include <vector>
#include <algorithm>
 
int main()
Я пока работаю пока что с одномерным массивом, вот так

C++
1
2
3
4
5
6
7
8
9
#include<iostream>
#include<time.h>
using namespace std;
void main()
{
    setlocale(LC_ALL, "ru");
    srand(time(NULL));
 
}
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5287 / 2375 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
14.01.2017, 12:21
Цитата Сообщение от MrGluck Посмотреть сообщение
Есть ещё std::reverse_copy
Забыл совсем про него, благодарю. Вот так с std::reverse_copy ещё можно, как вариант:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <algorithm>
#include <iterator>
 
int main()
{
  int arr[] = { 1, 2, 3, 4 };
  std::reverse_copy( std::begin( arr ), std::end( arr ), std::ostream_iterator<int>( std::cout, " " ) );
}
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5287 / 2375 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
14.01.2017, 12:22
Цитата Сообщение от Predat Посмотреть сообщение
Для меня не известны еще методы употребления
C++
1
2
#include <vector>
#include <algorithm>
Ну, вот так тогда:
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
    int arr[] = { 1, 2, 3, 4 };
    for ( int i = ( sizeof( arr ) / sizeof( arr[0] ) ) - 1; i >= 0; --i )
        std::cout << arr[i] << " ";
}
Но это только инвертированный вывод на экран. Сам массив остался прежним.
0
0 / 0 / 2
Регистрация: 16.12.2016
Сообщений: 118
14.01.2017, 12:36  [ТС]
Блин, даже sizeof, еще не учили
Убирая sizeof показывает ошибку, как можно без него???
(Просто спрашивал преподавателя, за эту функцию, говорит, что это еще рано для нас употреблять в коде)
0
Любитель чаепитий
 Аватар для GbaLog-
3744 / 1800 / 566
Регистрация: 24.08.2014
Сообщений: 6,018
Записей в блоге: 1
14.01.2017, 12:42
Цитата Сообщение от Predat Посмотреть сообщение
как можно без него???
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
template<size_t N>
size_t size(const int (&)[N])
{
    return N;
}
 
int main()
{
    int arr[] = { 1, 2, 3, 4 };
    for ( int i = size(arr) - 1; i >= 0; --i )
        std::cout << arr[i] << " ";
}
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5287 / 2375 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
14.01.2017, 12:43
Лучший ответ Сообщение было отмечено Predat как решение

Решение

Цитата Сообщение от Predat Посмотреть сообщение
как можно без него???
Predat, вот так:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main()
{
    const int ARR_SIZE = 4;
    int arr[ARR_SIZE] = { 1, 2, 3, 4 };
    for ( int i = ARR_SIZE - 1; i >= 0; --i )
        std::cout << arr[i] << " ";
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.01.2017, 12:43
Помогаю со студенческими работами здесь

Инвертировать строку
Определите класс strtype_a, в состав которого входит функция-член invert, инвертирующая строку и конструктор, параметрами его являются...

Инвертировать таблицу с++
Здравствуйте, прошу помочь в написании программы инвертирования таблицы (структура).Таблица: 3 слолбика и 10 строк (поля можно любые). И...

Инвертировать столбцы
Помогите,пожалуйста переписать частично код программы...Преподаватель говорит что столбы инвертирую неправильно. #include &lt;clx.h&gt; ...

Инвертировать строку
Разбираюсь со строками. Почему на выводе получается &quot;sace&quot;?(должно быть &quot;aces&quot;, т.е. переворот строки) Перепроверил уже несколько раз....

Инвертировать строки
Доброго времени суток. Смотрел несколько похожих задач, но там все делалось с помощью библиотек algorithm и vector. Тут же нужно сделать...


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

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

Новые блоги и статьи
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru