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

Новичёк в ступоре, вывести массив с конца - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Vavrenyuk
 Аватар для Vavrenyuk
6 / 6 / 0
Регистрация: 01.12.2012
Сообщений: 113
05.04.2013, 18:10     Новичёк в ступоре, вывести массив с конца #1
Помогите пожалуйста новичку с массивами, только 2ой день на C++
Необходимо вывести элементы массива в обратном порядке.
Вот написал какую-то чушь, он мне и выводит не понять что.

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int n,i,a[105],s=0,ss=0;
int main()  {
    cin>>n;
    for (i=0;i<n;i++)
    cin>>a[i];
    for (i=0;i<n;i--)
    cout<<a[i];
    system("pause");  
}
Нужно что бы она работала так:

Например вводим
3
1 2 3

нам мне должно выводить на экран:

3 2 1

Помогите кто чем сможет, пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
05.04.2013, 18:21     Новичёк в ступоре, вывести массив с конца #2
Vavrenyuk,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int main()
{
    const int size(5);
    int mas[size] = {1, 2, 3, 4, 5};
 
    for(int i = size - 1; i >= 0; --i)
        cout << mas[i] << ' ';
 
    cout << "\n\n";
    return 0;
}
Petar07
2 / 2 / 0
Регистрация: 11.10.2012
Сообщений: 93
05.04.2013, 18:29     Новичёк в ступоре, вывести массив с конца #3
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
#include <iostream>
 
using namespace std;
 
int n, i, a[10], s=0, ss=0;
int size = 10;
 
int main() 
{
 
    for (i=0;i<10;i++)
 
        cin >> a[i];
 
    for (i=size-1; i>=0; --i)
 
        cout << a[i] << ' ';
 
    system("pause");
 
    return 0;
 
    
}
забыл только убрать твои переменные
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
05.04.2013, 18:42     Новичёк в ступоре, вывести массив с конца #4
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <array>
#include <iterator>
int main()
{
    std::array<int, 5> a = {1,2,3,4,5};
    std::copy(a.rbegin(), a.rend(), std::ostream_iterator<int>(std::cout, " "));
}
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.04.2013, 19:01     Новичёк в ступоре, вывести массив с конца #5
Цитата Сообщение от Vavrenyuk Посмотреть сообщение
for (i=0;i<n;i--)
Ты присваиваешь 0, потом начинаешь уменьшать, 0-1=-1, с учётом условия i<n цикл будет продолжаться, пока счётчик из-за переполнения не станет положительным, тогда он примет максимально представимое значение. Или до ошибки доступа к памяти. Для того, чтоб перебрать индексы массива с декрементом, начинать надо с максимального индекса, то есть с n-1. Условие i>=0, но я предпочитаю беззнаковые счётчики и условие i<0, для беззнаковых переполнение происходит уже при 0-1, в результате значение тоже становится максимально представимым, которое выбирается (вместе с разрядностью) заведомо больше любого возможного n. Тип size_t имеет разрядность адреса, то есть количество представимых значений равно количеству возможных адресов в адресном пространстве, при этом тип беззнаковый. Даже если предположить, что элемент весит один байт, а массив занимает всё адресное пространство, в адресном пространстве всё равно всегда есть хотябы один запрещённый адрес для null_ptr, тогда максимально представимое значение заведомо больше любого возможного n. Тем более если выбрать тип ещё большей разрядности.

Добавлено через 1 минуту
Цитата Сообщение от Vavrenyuk Посмотреть сообщение
int n,i,a[105],s=0,ss=0;
int main() *{
* * cin>>n;
for (i=0;i<n;i++)
cin>>a[i];
А если введут 106? Или массив должен быть динамическим, или нельзя вводить количество элементов.
Vavrenyuk
 Аватар для Vavrenyuk
6 / 6 / 0
Регистрация: 01.12.2012
Сообщений: 113
05.04.2013, 21:00  [ТС]     Новичёк в ступоре, вывести массив с конца #6
taras atavin, Большое спасибо за объяснения!
Цитата Сообщение от taras atavin Посмотреть сообщение
А если введут 106?
106 не введут т.к. эту задачу я брал на сайте, а непосредственно там, в условии, чётко написано, что N<=100, 105 я взял, потому что преподаватель (если что - это не по учёбе, мне 13 лет пока, скажем на курсе(хотя так не назавёшь) ) говорит всегда, что нужно брать с запасом.

Всем спасибо за ответы!
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
06.04.2013, 06:35     Новичёк в ступоре, вывести массив с конца #7
Цитата Сообщение от taras atavin Посмотреть сообщение
и условие i<0,
очепятка. i<n.

Добавлено через 10 минут
Цитата Сообщение от Vavrenyuk Посмотреть сообщение
106 не введут т.к. эту задачу я брал на сайте, а непосредственно там, в условии, чётко написано, что N<=100, 105 я взял, потому что преподаватель (если что - это не по учёбе, мне 13 лет пока, скажем на курсе(хотя так не назавёшь) ) говорит всегда, что нужно брать с запасом.
106 введут, ни какие условия не помешают. Запас - это совсем другое. Вот смотри: пусть по условию n<=255, без запаса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
int main()
{
 uint8_t n;
 uint16_t i;
 int a[255];
 std::cin>>n; // Больше не введут, так как тип не позволит
 for (i=0; i<n; ++i)
 {
  std::cin>>a[i];
 }
 std::cout<<std::endl;
 for (i=n-1; i<n; --i)
 {
  std::cout<<a[i]<<" ";
 }
 return 0;
}
и с запасом на случай, если больше понадобится (а не больше введут):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
int main()
{
 uint16_t n;
 uint32_t i;
 int a[65536];
 std::cin>>n;
 for (i=0; i<n; ++i)
 {
  std::cin>>a[i];
 }
 std::cout<<std::endl;
 for (i=n-1; i<n; --i)
 {
  std::cout<<a[i]<<" ";
 }
 return 0;
}
. Но так делать нельзя по одной простой причине: а вдруг n именно меньше, но во многих экземплярах сразу? Поэтому правильно без запаса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
int main()
{
 uint8_t n;
 uint16_t i;
 int *a;
 std::cin>>n;
 a=new int [n];
 for (i=0; i<n; ++i)
 {
  std::cin>>a[i];
 }
 std::cout<<std::endl;
 for (i=n-1; i<n; --i)
 {
  std::cout<<a[i]<<" ";
 }
 delete []a;
 return 0;
}
и с запасом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
int main()
{
 uint16_t n;
 uint32_t i;
 int *a;
 std::cin>>n;
 a=new int [n];
 for (i=0; i<n; ++i)
 {
  std::cin>>a[i];
 }
 std::cout<<std::endl;
 for (i=n-1; i<n; --i)
 {
  std::cout<<a[i]<<" ";
 }
 delete []a;
 return 0;
}
.

Добавлено через 3 минуты
А 106 введут, читай "Хакинг. Искусство эксплойта".

Добавлено через 1 минуту
Ну в крайнем случае можно зарезервировать массив (как у тебя) и сделать проверку ифом сразу после ввода.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2013, 08:54     Новичёк в ступоре, вывести массив с конца
Еще ссылки по теме:

Заменяемые значения вывести в массив В. Вывести на экран полученную матрицу и массив B. C++
Вывести на экран количество месяцев оставшихся до конца года C++
C++ С первым указателем пройти массив с начала, со вторым - с конца

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
06.04.2013, 08:54     Новичёк в ступоре, вывести массив с конца #8
Два простых варианта:
двигать параметр цикла от 0 до N-1, а в обращении к элементу брать индекс [N-1 - параметр цикла], либо двигать параметр цикла от N-1 до 0 и обращаться к элементу под индексом, равным параметру цикла.
Если количество элементов в массиве неизвестно (вводится во время выполнения программы), то следует использовать динамические массивы (пример использования у тараса в конце. Брать неизвестный скорее всего для вас тип данных uint16_t не обязательно). Если известно - использовать константу.
Yandex
Объявления
06.04.2013, 08:54     Новичёк в ступоре, вывести массив с конца
Ответ Создать тему
Опции темы

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