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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
15.12.2010, 15:57     Определить сколько раз меняется знак в последовательности #1
Люди, помогите ... что то не могу с задачей разобраться!!!
Дан массив не нулевых натуральных чисел.
определить сколько раз меняется знак в последовательности!!!
Подскажите как это сделать ???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2010, 15:57     Определить сколько раз меняется знак в последовательности
Посмотрите здесь:

C++ Написать программу, определяющую сколько раз меняется знак в последовательности чисел введенных с клавиатуры.
C++ Определить, сколько раз в последовательности меняется знак.
C++ Массив: Определить, сколько раз меняется знак в данной последовательности чисел, запомнить номера позиций, в которой происходит смена знака.
Дана последовательность ненулевых целых чисел, оканчивающаяся нулем. Определить, сколько раз в этой последовательности меняется знак C++
Определить, сколько раз в последовательности меняется знак числа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
}
deadlock
 Аватар для deadlock
372 / 351 / 7
Регистрация: 14.12.2010
Сообщений: 1,265
15.12.2010, 16:38     Определить сколько раз меняется знак в последовательности #3
по условию в 17 строке вылетишь за пределы массива, нужно i<9 потому как у тебя ниже сравнивается знак элемента массива[i+1], а массив имеет размерность 10
reich
 Аватар для 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
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??
reich
 Аватар для 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;
}
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;
}
спасибо=)))) помог=))))
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
17.12.2010, 11:37  [ТС]     Определить сколько раз меняется знак в последовательности #8
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
спасибо=)))) помог=))))
а что значит sp и sc??
reich
 Аватар для reich
110 / 46 / 3
Регистрация: 03.09.2009
Сообщений: 112
17.12.2010, 12:03     Определить сколько раз меняется знак в последовательности #9
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
а что значит sp и sc??
current sign и previous sign
текущий знак и предыдущий знак
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;
}
Объясни пожалуйста вот этот момент.
reich
 Аватар для 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;
. Здесь просто запоминаем знак текущего числа для следующей итерации
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;
. Здесь просто запоминаем знак текущего числа для следующей итерации
спасибо, стало понятнее=)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2010, 12:16     Определить сколько раз меняется знак в последовательности
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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);
}
Yandex
Объявления
17.12.2010, 12:16     Определить сколько раз меняется знак в последовательности
Ответ Создать тему
Опции темы

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