Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165

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

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

Студворк — интернет-сервис помощи студентам
Люди, помогите ... что то не могу с задачей разобраться!!!
Дан массив не нулевых натуральных чисел.
определить сколько раз меняется знак в последовательности!!!
Подскажите как это сделать ???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.12.2010, 15:57
Ответы с готовыми решениями:

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

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

Определить сколько раз в последовательности меняется знак
Изменение знака Последовательность состоит из целых чисел и завершается числом 0. Определите, сколько раз в этой последовательности...

12
38 / 38 / 17
Регистрация: 15.12.2010
Сообщений: 110
15.12.2010, 16:34
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
378 / 358 / 23
Регистрация: 14.12.2010
Сообщений: 1,265
15.12.2010, 16:38
по условию в 17 строке вылетишь за пределы массива, нужно i<9 потому как у тебя ниже сравнивается знак элемента массива[i+1], а массив имеет размерность 10
0
 Аватар для reich
110 / 46 / 4
Регистрация: 03.09.2009
Сообщений: 112
15.12.2010, 16:50
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
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
15.12.2010, 18:09  [ТС]
Цитата Сообщение от 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 / 4
Регистрация: 03.09.2009
Сообщений: 112
15.12.2010, 18:22
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
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
15.12.2010, 18:28  [ТС]
Цитата Сообщение от 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
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
17.12.2010, 11:37  [ТС]
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
спасибо=)))) помог=))))
а что значит sp и sc??
0
 Аватар для reich
110 / 46 / 4
Регистрация: 03.09.2009
Сообщений: 112
17.12.2010, 12:03
Цитата Сообщение от 2008kedr2008 Посмотреть сообщение
а что значит sp и sc??
current sign и previous sign
текущий знак и предыдущий знак
1
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
17.12.2010, 12:04  [ТС]
Цитата Сообщение от 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 / 4
Регистрация: 03.09.2009
Сообщений: 112
17.12.2010, 12:10
Цитата Сообщение от 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
3 / 3 / 2
Регистрация: 16.11.2010
Сообщений: 165
17.12.2010, 12:13  [ТС]
Цитата Сообщение от 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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
17.12.2010, 12:16
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.12.2010, 12:16
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru