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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2017, 12:59   #1
jaless1991
Пользователь
 
Регистрация: 09.11.2017
Сообщений: 14
По умолчанию Сдвиг массива вправо на 1 элемент

Скажите пожалуйста что я сделал не так? У меня не отображает последнюю цифру...

Код:
#include <iostream>

int main() {

	using namespace std; //объявляем пространственные имена

	const int n = 10; //указываем размер массива
	int a[n], i; //объявляем переменные
	const int temp = a[0];
	const int size = 12;

	setlocale(LC_ALL, "Russian");

	// вводим элементы массива
	cout << "Весь массив : " << endl;
	for (i = 0; i < n; i++) { //входим в цикл
		a[i] = rand() % (10 - (-10) + 1) + (-10); //генерация случайных чисел в заданом диапазоне
												  //rand() % (b - a + 1) + a
		cout << a[i] << " "; //выводим полностью сгенерированный массив
	}
	cout << endl;
	//сдвигаем на 1 вправо
	for (i = 1; i < size; i++) {
		a[i - 1] = a[i];
		a[size - 1] = temp;
	}
	
	// выводим элементы массива на экран
	cout << "Результат сдвига вправо :\n";

	for (int i = 0; i < n; ++i)
		cout << " " << a[i]; //выводим результат

	cout << "\n";
	system("pause"); //задержка консоли
}
jaless1991 вне форума Ответить с цитированием
Старый 29.11.2017, 13:08   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

1. Вы инициализировали temp значением a[0], которое еще не инициализировано ничем. В итоге temp не инициализирована.
2.
Код:
a[size - 1] = temp;
Не зависит от параметров цикла, не нужно в цикле.
p51x вне форума Ответить с цитированием
Старый 29.11.2017, 14:31   #3
jaless1991
Пользователь
 
Регистрация: 09.11.2017
Сообщений: 14
По умолчанию

Это я убрал, но всё-равно проблема осталась, вместо последней цифры отображает что-то непонятное...
jaless1991 вне форума Ответить с цитированием
Старый 29.11.2017, 15:22   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Теперь поправьте границы массива. То у вас n = 10, то вы до size = 12 бегаете и пишите в элемент, которого нет.
p51x вне форума Ответить с цитированием
Старый 29.11.2017, 15:57   #5
Мановар
Пользователь
 
Регистрация: 13.11.2016
Сообщений: 84
По умолчанию

Так что ли надо?
Код:
#include <iostream>
#include <ctime>
int main() {

	using namespace std; //объявляем пространственные имена

	const int n = 10; //указываем размер массива
	int a[n], i; //объявляем переменные
	int temp;
//	const int size = 12;
	srand(time(0));
	setlocale(LC_ALL, "Russian");

	// вводим элементы массива
	cout << "Весь массив : " << endl;
	for (i = 0; i < n; i++) { //входим в цикл
		a[i] = rand() % 21 -10; //генерация случайных чисел в заданом диапазоне
												  //rand() % (b - a + 1) + a
		cout << a[i] << " "; //выводим полностью сгенерированный массив
	}
	cout << endl;
	temp = a[n - 1];
	//сдвигаем на 1 вправо
	for (i = 1; i < n; i++) {
		a[n - i] = a[n - i - 1];
		
	}
	a[0] = temp;
	// выводим элементы массива на экран
	cout << "Результат сдвига вправо :\n";

	for (int i = 0; i < n; ++i)
		cout << " " << a[i]; //выводим результат

	cout << "\n";
	system("pause"); //задержка консоли
}
Мановар вне форума Ответить с цитированием
Старый 29.11.2017, 15:58   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Зачем вы тело цикла то поменяли?
p51x вне форума Ответить с цитированием
Старый 29.11.2017, 16:08   #7
Мановар
Пользователь
 
Регистрация: 13.11.2016
Сообщений: 84
По умолчанию

Вроде вправо, а не влево. Может чего и напутал пока его косяк с size нашел, да и temp константная.
Мановар вне форума Ответить с цитированием
Старый 29.11.2017, 16:31   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

НО ТС двигал в другую сторону и а0 он сохранял не просто так. Может он думал задвигать справа. Давайте не гадать, а подождем ТС.
p51x вне форума Ответить с цитированием
Старый 29.11.2017, 16:36   #9
Мановар
Пользователь
 
Регистрация: 13.11.2016
Сообщений: 84
По умолчанию

Согласен, чего пустую работу за зря делать. Да и сам уж должен додуматься, вроде все разжевали.
Мановар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Побитовый сдвиг вправо (C) Skeich Помощь студентам 0 04.12.2013 11:40
Массивы: переворот, сдвиг вправо, перестановка _Лето_ Общие вопросы C/C++ 1 29.11.2013 15:12
Арифметический сдвиг вправо на n без VBA Romashka) Microsoft Office Excel 3 06.11.2012 18:47
Сдвиг массива вправо на 1 элемент stas45rus Помощь студентам 2 30.08.2011 14:20
сдвиг массива вправо tem_80 Общие вопросы C/C++ 5 01.02.2011 15:21