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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
#1

Определить сколько раз меняется знак в последовательности - C++

15.12.2010, 15:57. Просмотров 1592. Ответов 12
Метки нет (Все метки)

Люди, помогите ... что то не могу с задачей разобраться!!!
Дан массив не нулевых натуральных чисел.
определить сколько раз меняется знак в последовательности!!!
Подскажите как это сделать ???
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2010, 15:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить сколько раз меняется знак в последовательности (C++):

Определить, сколько раз в последовательности меняется знак. - C++
Помогите пожалуйста с решением задачи: С клавиатуры вводится последовательность ненулевых целых чисел. Определить, сколько раз в этой...

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

Определить сколько раз меняется знак в последовательности чисел - C++
Нужна программа и блок-схема. Написать программу, определяющую сколько раз меняется знак в последовательности чисел, введенных с...

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

Определить сколько раз в заданной последовательности меняется знак - C++
3) дана последовательность ненулевых целых чисел. Определить сколько раз в этой последовательности меняется знак. Например, в...

Определить, сколько раз в последовательности меняется знак числа - C++
Помогите решить ТОЛЬКО с помощью циклов и условного оператора 1.Есть последовательность целых чисел, заканчивается нулем. Определить,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
eczo
37 / 37 / 1
Регистрация: 15.12.2010
Сообщений: 110
15.12.2010, 16:34 #2
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
25
26
#include<iostream>
#include<cstdlib>
 
using namespace std;
 
int main(){
    int i,p=0,k,a,b;
    int mass[10]={}; // кол-во элементов на твое усмотрение я взял 10))
    cout<<"VVedite diapazon a..b:\n"; //диапазон сделал для отриц и полож элиментов
cin>>a>>b;
 
    for( i =0;i<10;i++){
     mass[i]= rand()*(b-a)/RAND_MAX + a;
        cout<<mass[i]<<" ";
    }
 
     for( i =0;i<10;i++){
        if(mass[i]>0&&mass[i+1]<0){p+=1;}
        else if(mass[i]<0&&mass[i+1]>0){p+=1;}
     }
 
cout<<endl;
cout<<"Kollichestvo znakoperemen : ="<<" "<<p;
system("PAUSE>>null");
return 0;
}
0
deadlock
376 / 355 / 8
Регистрация: 14.12.2010
Сообщений: 1,265
15.12.2010, 16:38 #3
по условию в 17 строке вылетишь за пределы массива, нужно i<9 потому как у тебя ниже сравнивается знак элемента массива[i+1], а массив имеет размерность 10
0
reich
110 / 46 / 3
Регистрация: 03.09.2009
Сообщений: 112
15.12.2010, 16:50 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main(int argc, char *argv[]){
    int arr[] = { -1, -2, -3, 4, -9, 12, -32, 34, 12 };
    int num = sizeof( arr ) / sizeof( arr[0] );
    int sp = 1, sc = 1, c = 0;
    for ( int i = 0; i < num; i++ ){
        sc = arr[i] >= 0 ? 1 : 0;
        if ( sp != sc && i != 0 ) c++;
        sp = arr[i] >= 0 ? 1 : 0;
    }
    printf( "%d\n", c );
    return 0;
}
arr - это массив натуральных чисел
с - количество изменений знака в массиве

Добавлено через 47 секунд
C++
1
2
3
4
for( i =0;i<10;i++){
        if(mass[i]>0&&mass[i+1]<0){p+=1;}
        else if(mass[i]<0&&mass[i+1]>0){p+=1;}
     }
Access violation

Добавлено через 1 минуту
Цитата Сообщение от deadlock Посмотреть сообщение
i<9
максимальное i < 9 это 8. Нужно i < 10
0
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
15.12.2010, 18:09  [ТС] #5
Цитата Сообщение от eczo Посмотреть сообщение
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
25
26
#include<iostream>
#include<cstdlib>
 
using namespace std;
 
int main(){
    int i,p=0,k,a,b;
    int mass[10]={}; // кол-во элементов на твое усмотрение я взял 10))
    cout<<"VVedite diapazon a..b:\n"; //диапазон сделал для отриц и полож элиментов
cin>>a>>b;
 
    for( i =0;i<10;i++){
     mass[i]= rand()*(b-a)/RAND_MAX + a;
        cout<<mass[i]<<" ";
    }
 
     for( i =0;i<10;i++){
        if(mass[i]>0&&mass[i+1]<0){p+=1;}
        else if(mass[i]<0&&mass[i+1]>0){p+=1;}
     }
 
cout<<endl;
cout<<"Kollichestvo znakoperemen : ="<<" "<<p;
system("PAUSE>>null");
return 0;
}
нужно сделать что бы массив водился с клавиатуры!!!=)) как7??
0
reich
110 / 46 / 3
Регистрация: 03.09.2009
Сообщений: 112
15.12.2010, 18:22 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cstdio>
 
int main(int argc, char *argv[]){
    const int arr_size = 5;
    int arr[arr_size];
    printf( "Enter %d elements:\n", arr_size );
    for ( int i = 0; i < arr_size; i++ ){
        scanf( "%d", &arr[i] );
    }
    int sp = 1, sc = 1, c = 0;
    for ( int i = 0; i < arr_size; i++ ){
        sc = arr[i] >= 0 ? 1 : 0;
        if ( sp != sc && i != 0 ) c++;
        sp = arr[i] >= 0 ? 1 : 0;
    }
    printf( "Number of sign changes: %d\n", c );
    return 0;
}
Добавлено через 3 минуты
Еще можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdio>
#include <cstdlib>
 
int main(int argc, char *argv[]){
    int *arr = NULL, num = 0;
    printf( "Enter number of array elements: " );
    scanf( "%d", &num );
    arr = (int*)calloc( num, sizeof( int ) );
    printf( "Enter %d elements: \n", num );
    for ( int i = 0; i < num; i++ ){
        scanf( "%d", &arr[i] );
    }
    int sp = 1, sc = 1, c = 0;
    for ( int i = 0; i < num; i++ ){
        sc = arr[i] >= 0 ? 1 : 0;
        if ( sp != sc && i != 0 ) c++;
        sp = arr[i] >= 0 ? 1 : 0;
    }
    free( arr );
    printf( "Number of sign changes: %d\n", c );
    return 0;
}
1
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
15.12.2010, 18:28  [ТС] #7
Цитата Сообщение от reich Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cstdio>
 
int main(int argc, char *argv[]){
    const int arr_size = 5;
    int arr[arr_size];
    printf( "Enter %d elements:\n", arr_size );
    for ( int i = 0; i < arr_size; i++ ){
        scanf( "%d", &arr[i] );
    }
    int sp = 1, sc = 1, c = 0;
    for ( int i = 0; i < arr_size; i++ ){
        sc = arr[i] >= 0 ? 1 : 0;
        if ( sp != sc && i != 0 ) c++;
        sp = arr[i] >= 0 ? 1 : 0;
    }
    printf( "Number of sign changes: %d\n", c );
    return 0;
}
Добавлено через 3 минуты
Еще можно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdio>
#include <cstdlib>
 
int main(int argc, char *argv[]){
    int *arr = NULL, num = 0;
    printf( "Enter number of array elements: " );
    scanf( "%d", &num );
    arr = (int*)calloc( num, sizeof( int ) );
    printf( "Enter %d elements: \n", num );
    for ( int i = 0; i < num; i++ ){
        scanf( "%d", &arr[i] );
    }
    int sp = 1, sc = 1, c = 0;
    for ( int i = 0; i < num; i++ ){
        sc = arr[i] >= 0 ? 1 : 0;
        if ( sp != sc && i != 0 ) c++;
        sp = arr[i] >= 0 ? 1 : 0;
    }
    free( arr );
    printf( "Number of sign changes: %d\n", c );
    return 0;
}
спасибо=)))) помог=))))
0
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
17.12.2010, 11:37  [ТС] #8
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
спасибо=)))) помог=))))
а что значит sp и sc??
0
reich
110 / 46 / 3
Регистрация: 03.09.2009
Сообщений: 112
17.12.2010, 12:03 #9
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
а что значит sp и sc??
current sign и previous sign
текущий знак и предыдущий знак
1
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
17.12.2010, 12:04  [ТС] #10
Цитата Сообщение от reich Посмотреть сообщение
current sign и previous sign
текущий знак и предыдущий знак
int sp = 1, sc = 1, c = 0;
for ( int i = 0; i < num; i++ ){
sc = arr[i] >= 0 ? 1 : 0;
if ( sp != sc && i != 0 ) c++;
sp = arr[i] >= 0 ? 1 : 0;
}
Объясни пожалуйста вот этот момент.
0
reich
110 / 46 / 3
Регистрация: 03.09.2009
Сообщений: 112
17.12.2010, 12:10 #11
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
C++
1
2
3
4
5
6
int sp = 1, sc = 1, c = 0;
    for ( int i = 0; i < num; i++ ){
        sc = arr[i] >= 0 ? 1 : 0;
        if ( sp != sc && i != 0 ) c++;
        sp = arr[i] >= 0 ? 1 : 0;
    }
Объясни пожалуйста вот этот момент.
1. Обьявляем и инициализируем целочисленные переменные:
sc - переменная, которая определяет знак текущего числа.
sp - переменная, которая определяет знак предыдущего числа
c - счетчик изменений знаков
2. цыкл от нуля до длинны массива чисел
2.1 проверяем знак текущего числа; если число положительное присваиваем sc число 1
если число отрицательное, присваиваем sc число 0
2.2 Проверяем, отличается ли знак текущего числа от знака предыдущего(если итерация цыкла не первая). Если отличается, прибавляем к счетчику единицу.
2.3 Можно заменить строку
C++
1
sp = arr[i] >= 0 ? 1 : 0;
на
C++
1
sp = sc;
. Здесь просто запоминаем знак текущего числа для следующей итерации
1
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
17.12.2010, 12:13  [ТС] #12
Цитата Сообщение от reich Посмотреть сообщение
1. Обьявляем и инициализируем целочисленные переменные:
sc - переменная, которая определяет знак текущего числа.
sp - переменная, которая определяет знак предыдущего числа
c - счетчик изменений знаков
2. цыкл от нуля до длинны массива чисел
2.1 проверяем знак текущего числа; если число положительное присваиваем sc число 1
если число отрицательное, присваиваем sc число 0
2.2 Проверяем, отличается ли знак текущего числа от знака предыдущего(если итерация цыкла не первая). Если отличается, прибавляем к счетчику единицу.
2.3 Можно заменить строку
C++
1
sp = arr[i] >= 0 ? 1 : 0;
на
C++
1
sp = sc;
. Здесь просто запоминаем знак текущего числа для следующей итерации
спасибо, стало понятнее=)))
0
easybudda
Модератор
Эксперт CЭксперт С++
9632 / 5580 / 948
Регистрация: 25.07.2009
Сообщений: 10,714
17.12.2010, 12:16 #13
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
#define SIZE 10
 
int main(void){
    int arr[SIZE] = { 1, 2, -1, 4, -5, -6, 3, 8, 2, -1 }, i, cnt;
    
    printf("Array:\n");
    for ( i = 0; i < SIZE; ++i )
        printf("%d%c", arr[i], ( i < SIZE -1 ) ? ' ' : '\n');
    
    cnt = 0;
    for ( i = 1; i < SIZE; ++i )
        if ( arr[i] * arr[i-1] < 0 )
            ++cnt;
    printf("%d sign changes.\n", cnt);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2010, 12:16
Привет! Вот еще темы с ответами:

Определить, сколько раз во введенной последовательности меняется знак при переходе к следующему элементу - C++
Вводится последовательность вещественных чисел, оканчивающаяся нулём, и состоящая более чем из одного ненулевого элемента. Определить,...

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

Дана последовательность ненулевых целых чисел, оканчивающаяся нулем. Определить, сколько раз в этой последовательности меняется знак - C++
Помогите решить задачи через цикл do _ while: 4) Дана последовательность ненулевых целых чисел, оканчивающаяся нулем. Определить, ...

Массив: Определить, сколько раз меняется знак в данной последовательности чисел, запомнить номера позиций, в которой происходит смена знака. - C++
Всем привет, помогите мне решить пара задач по c++ Учительница проверяет изучали ли мы этот метод решения задачи по этому прошу сделать...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.12.2010, 12:16
Ответ Создать тему
Опции темы

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