Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2023, 20:19   #1
faktor
Пользователь
 
Регистрация: 14.02.2023
Сообщений: 10
По умолчанию (C++)Переставить соседние - объяснение по коду

Задан массив из n целых чисел. Поменяйте местами соседние элементы массива (a0 с a1,a2 с a3 и так далее). Если элементов нечетное количество, то последний элемент следует оставить на своем месте.
Входные данные:
7
3 5 -7 7 5 -9 -4
Выходные данные
5 3 7 -7 -9 5 -4

Есть код: помогите пожалуйста написать к нему объяснение с помощью комментария в коде:
Код:
int main() {
    int arr[100], n;
    cin >> n;

    //Вносим данные в массив
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }

    for (int i = 0; i < n; i++) {
        if (i % 2 == 1)
        {
            int temp = arr[i];
            arr[i] = arr[i - 1];
            arr[i - 1] = temp;
        }
    }

    //Вывод данных массива
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    return 0;
}

Последний раз редактировалось BDA; 02.03.2023 в 22:04.
faktor вне форума Ответить с цитированием
Старый 02.03.2023, 21:24   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Код:
int main() {
  int arr[100], n;
  cin >> n;

// Цикл перебора индексов элементов массива
  for (int i = 0; i < n; i++) {
// Вносим данные в массив
    cin >> arr[i];
  }

// Цикл перебора индексов элементов массива
  for (int i = 0; i < n; i++) {
// Если индекс элемента не четный
    if (i % 2 == 1)
    {
// Меняем элемент с предыдущим: сохраняем значение в переменной temp
      int temp = arr[i];
// Перезаписываем a[i] (значение a[i] останется сохранено в переменной temp)
      arr[i] = arr[i - 1];
// Перезаписываем значение предыдущего элемента a[i - 1] из переменной temp
      arr[i - 1] = temp;
    }
  }

// Цикл перебора индексов элементов массива
  for (int i = 0; i < n; i++) {
// Вывод данных массива
    cout << arr[i] << " ";
  }
  return 0;
}
В следующий раз используйте теги [CODE][/CODE]. Так код выглядит более читабельным.
macomics вне форума Ответить с цитированием
Старый 02.03.2023, 22:06   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Еще можно отказаться от if:
Код:
for (int i = 1; i < n; i += 2) {
    int temp = arr[i];
    arr[i] = arr[i - 1];
    arr[i - 1] = temp;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 02.03.2023, 22:07   #4
faktor
Пользователь
 
Регистрация: 14.02.2023
Сообщений: 10
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
В следующий раз используйте теги . Так код выглядит более читабельным.
спасибо большое, буду знать
faktor вне форума Ответить с цитированием
Старый 03.03.2023, 15:02   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,551
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Еще можно отказаться от if:
При нечётном n будет ошибка: обращение к несуществующему элементу. Так что без if не обойтись: смотреть, сколько ещё осталось непереставленных. Тогда уж:
Код:
  int n2 = n/2 ;
  int j=0 ; 
for (int i = 0; i < n2; i ++)
 {
    int temp = arr[j];
    arr[j] = arr[j + 1];
    arr[j + 1] = temp;
    j += 2;
}

Последний раз редактировалось digitalis; 03.03.2023 в 15:13.
digitalis на форуме Ответить с цитированием
Старый 03.03.2023, 15:48   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
При нечётном n будет ошибка:
Это какое еще обращение к несуществующему элементу?
Код:
n = 5
; for (int i = 1; i < n; i += 2)
; инициализация переменной цикла
i = 1
; условие цикла
i < n: 1 < 5 :true
; тело цикла
// temp = a[1]
// a[1] = a[0]
// a[0] = temp
; конец цикла
i += 2: 1 + 2 = 3
; условие цикла
i < n: 3 < 5: true
; тело цикла
// temp = a[3]
// a[3] = a[2]
// a[2] = temp
; конец цикла
i += 2: 3 + 2 = 5
; условие цикла
i < n: 5 < 5: false
// вышли из цикла, а элемент a[4] не меняли местами

Последний раз редактировалось macomics; 03.03.2023 в 15:52.
macomics вне форума Ответить с цитированием
Старый 03.03.2023, 22:56   #7
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,551
По умолчанию

Да, малость попутал. Вот если бы i <= n ... Давно не писал на Си...
digitalis на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сравнить две соседние ячейки таблицы php с помощью js ? ara05ru JavaScript, Ajax 5 16.08.2019 14:24
Переставьте соседние элементы массива asdf_7 Помощь студентам 3 24.11.2014 19:07
Числа превосходящие соседние элементы Mantor Помощь студентам 2 27.12.2011 15:39
поменять соседние слова местами alex(21) Общие вопросы C/C++ 3 20.02.2011 16:28
[Asm]поменять соседние числа попарно nuevegramodelamor Помощь студентам 0 25.01.2011 22:43