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

Указатели: циклический сдвиг элементов массива - C++

Восстановить пароль Регистрация
 
bilochka
0 / 0 / 0
Регистрация: 10.02.2013
Сообщений: 17
10.02.2013, 14:20     Указатели: циклический сдвиг элементов массива #1
помогите пожалуйста написать программу
организовать введение данных в массив, обработку элементов и вывод результатов, используя указатели.
задание:
Дано натуральное число N (N – парное) и одномерный массив A1, A2, …, AN логических элементов. Виконати циклический сдвиг первой половины массива справа налево, а второй - слева направо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Troll_Face
 Аватар для Troll_Face
599 / 399 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
10.02.2013, 14:23     Указатели: циклический сдвиг элементов массива #2
а теперь все тоже самое, но по-русски... я так понял: вводится N (четное), создается динамический массив, и обе его половины сдвигаются циклически?
bilochka
0 / 0 / 0
Регистрация: 10.02.2013
Сообщений: 17
10.02.2013, 16:34  [ТС]     Указатели: циклический сдвиг элементов массива #3
да, именно так...
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
10.02.2013, 21:14     Указатели: циклический сдвиг элементов массива #4
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
#include <iostream>
 
int *copy(int *begin, int *end, int *destination) {
  int *copyOfDestination = destination;
  while (begin != end) {
    *destination++ = *begin++;
  }
  return copyOfDestination;
}
 
// ñäâèãГ*ГҐГІ Г¬Г*Г±Г±ГЁГў âëåâî Г*Г* number ýëåìåГ*òîâ
void shiftLeft(int *begin, int *end, int number) {
  int *storage = new int[number];
  copy(begin, begin + number, storage);
  for (int *first = begin; first != end - number; ++first) {
    *first = *(first + number);
  }
  copy(storage, storage + number, end - number);
  delete [] storage;
}
 
// ñäâèãГ*ГҐГІ Г¬Г*Г±Г±ГЁГў ГўГЇГ°Г*ГўГ® Г*Г* number ýëåìåГ*òîâ
void shiftRight(int *begin, int *end, int number) {
  int *storage = new int[number];
  copy(end - number, end, storage);
  for (int *last = end - 1; last != begin + number - 1; --last) {
    *last = *(last - number);
  }
  copy(storage, storage + number, begin);
  delete [] storage;
}
 
int main(int argc, char **argv) {
  int size = 10;
  int *array = new int[size];
 
  for (int i = 0; i < 10; ++i) {
    std::cout << (array[i] = i) << " ";
  }
  std::cout << std::endl;
  
  shiftLeft(array, array + size / 2, 2);
  shiftRight(array + size / 2, array + size, 2);
    
  for (int i = 0; i < 10; ++i) {
    std::cout << array[i] << " ";
  }
  std::cout << std::endl;
 
  delete [] array;
  std::cin.get();
  return 0;
}
Yandex
Объявления
10.02.2013, 21:14     Указатели: циклический сдвиг элементов массива
Ответ Создать тему
Опции темы

Текущее время: 14:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru