Другие языки программирования и технологии
задачка про массив C++
вот такая вот задача Задан массив из k чисел. Сдвинуть элементы массива на n позиций циклически ВЛЕВО. вот тело программы http://pastebin.com/Uc9P4iCz Так вот сам вопрос : как изменить конкратно ЭТОТ текст программы чтобы сдвиг происходил на n позиций ВПРАВО? ? заранее спасибо
после строчки
n=(int)fmod(n,k);
вставить
n=k-n;
n=(int)fmod(n,k);
вставить
n=k-n;
#include <iostream>
using namespace std;
void shift(int *, const size_t, const unsigned, const bool left = true);
void show(int * p, const size_t size);
int main() {
const size_t N = 30;
int a[N];
for (size_t n = 0; n <= N; n++) a[n] = n + 1;
show(a, N);
shift(a, N, 10);
show(a, N);
shift(a, N, 10);
show(a, N);
shift(a, N, 10, false);
show(a, N);
shift(a, N, 10, false);
show(a, N);
cin.get();
return 0;
}
void show(int * p, const size_t size) {
for (size_t k = 0; k < size; k++) cout << p[k] << ' ';
cout << endl;
}
void shift(int * p, const size_t size, const unsigned n, const bool left) {
int temp;
for (unsigned m = 0; m < n; m++) {
if (left) {
temp = p[0];
for (size_t k = 1; k < size; k++) p[k - 1] = p[k];
p[size - 1] = temp;
} else {
temp = p[size - 1];
for (size_t k = size - 1; k > 0; k--)
p[k] = p[k - 1];
p[0] = temp;
}
}
}
using namespace std;
void shift(int *, const size_t, const unsigned, const bool left = true);
void show(int * p, const size_t size);
int main() {
const size_t N = 30;
int a[N];
for (size_t n = 0; n <= N; n++) a[n] = n + 1;
show(a, N);
shift(a, N, 10);
show(a, N);
shift(a, N, 10);
show(a, N);
shift(a, N, 10, false);
show(a, N);
shift(a, N, 10, false);
show(a, N);
cin.get();
return 0;
}
void show(int * p, const size_t size) {
for (size_t k = 0; k < size; k++) cout << p[k] << ' ';
cout << endl;
}
void shift(int * p, const size_t size, const unsigned n, const bool left) {
int temp;
for (unsigned m = 0; m < n; m++) {
if (left) {
temp = p[0];
for (size_t k = 1; k < size; k++) p[k - 1] = p[k];
p[size - 1] = temp;
} else {
temp = p[size - 1];
for (size_t k = size - 1; k > 0; k--)
p[k] = p[k - 1];
p[0] = temp;
}
}
}
В 18-й строке:
b[ i ] = a[(int) fmod( i - n, k)];
P.S. а не проще вместо (int) fmod( i-n, k) написать (i - n) % k? К чему такие извращения?
b[ i ] = a[(int) fmod( i - n, k)];
P.S. а не проще вместо (int) fmod( i-n, k) написать (i - n) % k? К чему такие извращения?
Похожие вопросы
- Придумайте задачку на массив в delphi (pascal)
- помогите массив c#.
- Помогите сделать лабораторную работу по теме "Одномерные массивы" [C++]
- Поиск наибольшего отрицательного элемента массива (c++) и его удаление, написал программу, где то косячек =/
- Массивы C#
- Массивы C++
- Помогите с исправить ошибку, массивы, c++builder
- Не пойму как удалить элементы массива (C++).
- Сформировать двумерный массив C++
- Одномерные массивы c++