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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
#1

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

20.11.2012, 22:22. Просмотров 853. Ответов 8
Метки нет (Все метки)

Всем доброго времени суток!
Написал программу которая подсчитывает количество перемен знака в последовательности целых чисел.
Вот код:

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     Подсчитать количество перемен знака в последовательности целых чисел
Посмотрите здесь:
Подсчитать количество перемен знака в одномерном числовом массиве C++
Из случайных чисел ввести одномерный массив, состоящий из 15 элементов. Найти количество перемен знака C++
В последовательности целых чисел определить третье положительное число и подсчитать количество цифр в нем C++
C++ Подсчитать количество изменений знака во введенной последовательности
Массив из 20 целых чисел. Подсчитать количество четных чисел C++
В заданной последовательности целых чисел найти количество чисел кратных заданному C++
Определить количество положительных чисел числовой последовательности целых чисел C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
20.11.2012, 23:33     Подсчитать количество перемен знака в последовательности целых чисел #2
Когда в цикле i равняется 2, то arr[i+1] - не прокатывает.
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.11.2012, 23:39     Подсчитать количество перемен знака в последовательности целых чисел #3
Потому что выходит за массив
Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
20.11.2012, 23:45  [ТС]     Подсчитать количество перемен знака в последовательности целых чисел #4
David Sylva, а почему работает вариант с цифрами 1, -1, 1
xtorne21st
интересующийся
303 / 274 / 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
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 266
20.11.2012, 23:49  [ТС]     Подсчитать количество перемен знака в последовательности целых чисел #6
xtorne21st, спасибо, потестил, всё работает.
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.11.2012, 23:51     Подсчитать количество перемен знака в последовательности целых чисел #7
Цитата Сообщение от Leonman Посмотреть сообщение
David Sylva, а почему работает вариант с цифрами 1, -1, 1
Он имеет ввидус, что при проверке последней итерации ( если их всего одна ) происходит обращение к несуществующему элементу массива, т.е. к случаяному значению, которое храниться в соседнем секторе. И оно может удовлетрорять условие( что бывает крайне редко). В arr[i+1] при условии i < N как раз таки и происходит обращение к случаяному элементу, т.е. осуществляется выход за предел массива.
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++ В последовательности целых чисел определить количество чётных чисел кратных 7
Написать программу, которая в последовательности целых чисел определяет количество чётных чисел, кратных 7 C++
Записать в массив N целых чисел. Подсчитать количество пар противоположных чисел среди компонентов этого массива C++
Подсчитать количество целых чисел среди чисел a, b, c C++

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru