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

Подсчитать количество перемен знака в последовательности целых чисел - C++

Восстановить пароль Регистрация
 
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
20.11.2012, 22:22     Подсчитать количество перемен знака в последовательности целых чисел #1
Всем доброго времени суток!
Написал программу которая подсчитывает количество перемен знака в последовательности целых чисел.
Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{  
  int N, count = 0;  
   cout << "How many elements?" << endl;  
  cin >> N;
  int arr[N];
  cout << "Plese enter the elemets" << endl;
  for (int i = 0; i < N; i++)
   cin >> arr[i];
  for (int i = 0; i < N; i++)
   if (arr[i] < 0 && arr[i+1] >= 0 || arr[i] >= 0 && arr[i+1] < 0)
    count++;
   cout << count << endl;   
system("PAUSE >> null"); 
}
Считает во многих случаях правильно, кроме случая, когда у меня числа: -1, 1, -1.
На выходе должно быть 2, то есть знак поменялся 2 раза, а вместо этого на выходе 3, не понимаю почему?
Если числа 1, -1, 1, то считает всё верно, на выходе 2.
Надеюсь на вашу помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2012, 22:22     Подсчитать количество перемен знака в последовательности целых чисел
Посмотрите здесь:

Подсчитать количество целых чисел среди чисел a, b, c C++
В последовательности из N произвольных чисел подсчитать количество нулей C++
Массив из 20 целых чисел. Подсчитать количество четных чисел C++
Записать в массив N целых чисел. Подсчитать количество пар противоположных чисел среди компонентов этого массива C++
Подсчитать количество целых среди чисел a.b.c C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
20.11.2012, 23:33     Подсчитать количество перемен знака в последовательности целых чисел #2
Когда в цикле i равняется 2, то arr[i+1] - не прокатывает.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.11.2012, 23:39     Подсчитать количество перемен знака в последовательности целых чисел #3
Потому что выходит за массив
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
20.11.2012, 23:45  [ТС]     Подсчитать количество перемен знака в последовательности целых чисел #4
David Sylva, а почему работает вариант с цифрами 1, -1, 1
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.11.2012, 23:46     Подсчитать количество перемен знака в последовательности целых чисел #5
В 14 стоку нужно изменить условие на i < N -1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{  
  int N, count = 0;  
   cout << "How many elements?" << endl;  
  cin >> N;
  int arr[N];
  cout << "Plese enter the elemets" << endl;
  for (int i = 0; i < N; i++)
   cin >> arr[i];
  for (int i = 0; i < N -1 ; i++)
   if (arr[i] < 0 && arr[i+1] >= 0 || arr[i] >= 0 && arr[i+1] < 0)
    count++;
   cout << count << endl;   
system("PAUSE >> null"); 
}
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
20.11.2012, 23:49  [ТС]     Подсчитать количество перемен знака в последовательности целых чисел #6
xtorne21st, спасибо, потестил, всё работает.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.11.2012, 23:51     Подсчитать количество перемен знака в последовательности целых чисел #7
Цитата Сообщение от Leonman Посмотреть сообщение
David Sylva, а почему работает вариант с цифрами 1, -1, 1
Он имеет ввидус, что при проверке последней итерации ( если их всего одна ) происходит обращение к несуществующему элементу массива, т.е. к случаяному значению, которое храниться в соседнем секторе. И оно может удовлетрорять условие( что бывает крайне редко). В arr[i+1] при условии i < N как раз таки и происходит обращение к случаяному элементу, т.е. осуществляется выход за предел массива.
Leonman
 Аватар для Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
21.11.2012, 00:17  [ТС]     Подсчитать количество перемен знака в последовательности целых чисел #8
xtorne21st, Спасибо, разобрался.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2012, 00:42     Подсчитать количество перемен знака в последовательности целых чисел
Еще ссылки по теме:

Подсчитать количество участков, образующих непрерывные последовательности чисел со значениями C++
C++ В последовательности из n произвольных чисел подсчитать количество нулей
C++ В последовательности целых чисел определить количество чётных чисел кратных 7

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

Или воспользуйтесь поиском по форуму:
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
21.11.2012, 00:42     Подсчитать количество перемен знака в последовательности целых чисел #9
Leonman у вас не корректна ситуация с размером массива, размер массива должна быть константная величина. В вашем случае память надо выделять динамически под массив.
Yandex
Объявления
21.11.2012, 00:42     Подсчитать количество перемен знака в последовательности целых чисел
Ответ Создать тему
Опции темы

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