С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

20.11.2012, 22:22. Просмотров 956. Ответов 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.
Надеюсь на вашу помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2012, 22:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подсчитать количество перемен знака в последовательности целых чисел (C++):

Подсчитать количество перемен знака в одномерном числовом массиве - C++
Дан одномерный числовой массив. Подсчитать кол-во перемен знака в массиве. Кол-во элементов в массиве задать в процессе диалога. Написать...

Из случайных чисел ввести одномерный массив, состоящий из 15 элементов. Найти количество перемен знака - C++
При помощи случайных чисел ввести одномерный массив, состоящий из 15 элементов. Массив должен содержать и положительные и отрицательны...

В последовательности целых чисел определить третье положительное число и подсчитать количество цифр в нем - C++
Помогите с решением задачи по С++. Нужно решить её при помощи цикла do while. В последовательности целых чисел определить третье...

Подсчитать количество изменений знака во введенной последовательности - C++
Ввести последовательность чисел, количество которых заранее неизвестно. Последовательность чисел вводится до тех пор, пока разность между...

В последовательности определить количество соседств двух чисел разного знака - C++
Даны натуральное число n, действительные числа a1,...,an. В последовательности a1,...,an определить число соседств двух чисел разного...

Массив из 20 целых чисел. Подсчитать количество четных чисел - C++
вот такая задача: в массиве а из 20 целых чисел. подсчитать количество четных чисел

8
David Sylva
1291 / 953 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
20.11.2012, 23:33 #2
Когда в цикле i равняется 2, то arr[i+1] - не прокатывает.
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.11.2012, 23:39 #3
Потому что выходит за массив
0
Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 270
20.11.2012, 23:45  [ТС] #4
David Sylva, а почему работает вариант с цифрами 1, -1, 1
0
xtorne21st
интересующийся
304 / 275 / 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"); 
}
0
Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 270
20.11.2012, 23:49  [ТС] #6
xtorne21st, спасибо, потестил, всё работает.
0
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.11.2012, 23:51 #7
Цитата Сообщение от Leonman Посмотреть сообщение
David Sylva, а почему работает вариант с цифрами 1, -1, 1
Он имеет ввидус, что при проверке последней итерации ( если их всего одна ) происходит обращение к несуществующему элементу массива, т.е. к случаяному значению, которое храниться в соседнем секторе. И оно может удовлетрорять условие( что бывает крайне редко). В arr[i+1] при условии i < N как раз таки и происходит обращение к случаяному элементу, т.е. осуществляется выход за предел массива.
1
Leonman
15 / 15 / 0
Регистрация: 17.06.2012
Сообщений: 270
21.11.2012, 00:17  [ТС] #8
xtorne21st, Спасибо, разобрался.
0
David Sylva
1291 / 953 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
21.11.2012, 00:42 #9
Leonman у вас не корректна ситуация с размером массива, размер массива должна быть константная величина. В вашем случае память надо выделять динамически под массив.
0
21.11.2012, 00:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2012, 00:42
Привет! Вот еще темы с ответами:

В заданной последовательности целых чисел найти количество чисел кратных заданному - C++
Напишите программу, которая в последовательности целых чисел определяет количество чисел, кратных 5 или 7. Программа получает на вход целые...

Определить в заданной последовательности целых чисел количество чисел Фибоначчи - C++
Выполнить задания, если задана последовательность целых чисел длиной n. Определить в заданной последовательности целых чисел количество...

В последовательности целых чисел определить количество чётных чисел кратных 7 - C++
Напишите программу, которая в последовательности целых чисел определяет количество чётных чисел, кратных 7.

Определить количество положительных чисел числовой последовательности целых чисел - C++
Дана числовая последовательность целых чисел, содержащая N элементов. Определить количество положительных чисел


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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