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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 5.00
maxlennon
1 / 1 / 0
Регистрация: 21.12.2008
Сообщений: 8
#1

Подсчёт числа серий положительных, отрицательных чисел и нулей длиной не менее k в массиве - C++

21.12.2008, 00:14. Просмотров 1150. Ответов 7
Метки нет (Все метки)

Задача:
Составить функцию для подсчёта числа серий положительных, отрицательных чисел и нулей длиной не менее k в одномерном массиве целых чисел. Серией называется последовательность элементов массива , принадлежащих одному классу: int series (int n, int *k mas, int *k zero, int *k minus, int k и тд).

помогите с редактированием текста.
не особо правильно работает-а ошибки не вижу(((


текст
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
 
 
int series(int n, int *Kmas, int *Kplus, int *Kminus, int *Kzero, int k);
 
void main(void)
{
    clrscr();
    int x, n, *Kmas, i, k;
    int Kplus, Kminus, Kzero;
 
    printf("\n Enter the number of elements: ");
    scanf("%d", &n);
 
    for(i=0; i<n; i++)
    {
        printf("\n Enter %d Element: ", i+1);
        if ((Kmas = malloc(n*sizeof(int))) == NULL)
        return 1;
        scanf("%d", &Kmas[i] );
    }
 
    printf("\n Now enter k: ");
    scanf("%d", &k);
    if(k<=n){
    Kplus=Kminus=Kzero=0;
 
    x=series(n, Kmas, &Kplus, &Kminus, &Kzero, k);
    printf("\n\n Sum of + numbers: %d", Kplus);
    printf("\n Sum of - numbers: %d", Kminus);
    printf("\n Sum of 0 numbers: %d", Kzero);
        }
     else
     printf("\nk must be less tan n");
    getch();
}
 
int series(int n, int *Kmas, int *Kplus, int *Kminus, int *Kzero, int k)
{
    int i;
    
    for(i=0; i<k; i++)
    {
        if(Kmas[i]>0)
            *Kplus=*Kplus+1;
        if(Kmas[i]<0)
            *Kminus=*Kminus+1;
        if(Kmas[i]==0)
            *Kzero=*Kzero+1;
    }
    return 1;
    free(Kmas);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2008, 00:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Подсчёт числа серий положительных, отрицательных чисел и нулей длиной не менее k в массиве (C++):

Подсчитать в массиве количество положительных, отрицательных чисел и нулей - C++
Задан массив С из 8 вещественных элементов. Подсчитать в нем количество положительных, отрицательных чисел и нулей.

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

Определить количество положительных, отрицательных элементов и нулей в массиве - C++
1. В массиве A из N элементов (N не больше 30) определить количество положительных, отрицательных элементов и нулей. Число N и значения...

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

Написать программу, которая предлагает пользователю ввести 10 чисел, вычисляет процент положительных и отрицательных чисел и процент нулей и выводи - C++
помогите =) написать программу, которая предлагает пользователю ввести 10 чисел, вычисляет процент положительных и отрицательных чисел и...

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

7
accept
4831 / 3252 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
21.12.2008, 07:10 #2
у тебя функция не считает количество серий

1 2 3 -1 -1 -1
тут две серии: одна положительная и одна отрицательная

1 2 3 1 2 3 -1 -1 -1 1 2 3 -1 -1 -1
тут 4 серии: две положительных две отрицательных

вообще в проге объявляется указатель Kmas, но в него надо записать адрес блока памяти в которую будешь сохранять числа, иначе он никуда не указывает
типа
C
1
2
    if ((Kmas = malloc(n*sizeof(int)) == NULL)
        return 1;
а в конце программы высвободить его через free(Kmas)
1
maxlennon
1 / 1 / 0
Регистрация: 21.12.2008
Сообщений: 8
21.12.2008, 20:09  [ТС] #3
вот отредактировал! а как прописать, чтобы всё таки серии считала??
0
accept
4831 / 3252 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
21.12.2008, 23:21 #4
надо до цикла память выделить, т.к. выделяется она один раз как и очищается потом, а у тебя получилось она n раз выделяется а очищается только один

как прописать, чтобы всё таки серии считала
при входе в серию один раз увеличивать её счётчик (флажок для каждой серии который может принимать два значения, внутри или снаружи, при входе флажок выставляется на "внутри" если флажок на "внутри" увеличить счётчик этой серии (чей флажок) и сразу флажок перевести на "снаружи")
для каждого числа (>0 <0 =0) свой флажок такого рода, таким образом счётчики будут срабатывать только на своих флажках и только когда они на "внутри"

тебе зачем n в функции ?
1
maxlennon
1 / 1 / 0
Регистрация: 21.12.2008
Сообщений: 8
22.12.2008, 01:24  [ТС] #5
помоги с самим текстом - очень прошу, не получается ни хрена!
0
accept
4831 / 3252 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
22.12.2008, 08:36 #6
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
 
/* подсчитывает число серий <0 =0 >0 чисел в массиве */
main()
{
    int getser(int *, unsigned, int *, int *, int *);
    int nneg, nzer, npoz;
    int nums[] = { 1, 2, -1, -2, 3, 4, 5, 0, 1 };
    
    if (getser(nums, sizeof nums / sizeof nums[0], &nneg, &nzer, &npoz) > 0)
        return 1;
    printf("negative: %d\n", nneg);
    printf("zeroes: %d\n", nzer);
    printf("pozitive: %d\n", npoz);
    return 0;
}
 
#define IN   1   /* внутри серии  */
#define OUT  0   /* снаружи серии */
 
/* getser:  считает число серий <0 =0 >0 чисел */
int getser(int *nump, unsigned n, int *neg, int *zer, int *poz)
{
    int nstate, zstate, pstate;
    
    *neg = *zer = *poz = 0;
    for (nstate = zstate = pstate = OUT; n > 0; nump++, n--)
        if (*nump < 0) {
            zstate = pstate = OUT;
            if (nstate == OUT) {
                nstate = IN;
                (*neg)++;
            }
        } else if (*nump == 0) {
            nstate = pstate = OUT;
            if (zstate == OUT) {
                zstate = IN;
                (*zer)++;
            }
        } else {
            nstate = zstate = OUT;
            if (pstate == OUT) {
                pstate = IN;
                (*poz)++;
            }
        }
    return (*neg || *zer || *poz) ? 0 : 1;
}
считает просто количество серий
1
maxlennon
1 / 1 / 0
Регистрация: 21.12.2008
Сообщений: 8
22.12.2008, 14:16  [ТС] #7
2 вопроса:
1) неужели нельзя мой текст как то чуть чуть изменить???
2) accept - почему твоя программа не запускается ни в одном компилляторе?(
0
accept
4831 / 3252 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
22.12.2008, 22:56 #8
сохрани файл с расширением .c
может быть int надо добавить перед main (это не обязательно для C)
а вообще в bc3.1 компилится с любым расширением и без int'а
минимальную длину серии функция не принимает, можно встроить чтобы она не считала серии короче чем k

Добавлено через 1 час 15 минут 31 секунду

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <stdio.h>
 
/* подсчитывает число серий <0 =0 >0 длиной не менее k чисел в массиве */
main()
{
    int getser(int *, unsigned, int *, int *, int *, unsigned);
    int nneg, nzer, npoz;
    int nums[] = { 1, 2, -1, -2, 3, 4, 5, 0, 1, -1 };
    
    if (getser(nums, sizeof nums / sizeof nums[0], &nneg, &nzer, &npoz, 3) > 0)
        return 1;
    printf("negative: %d\n", nneg);
    printf("zeroes: %d\n", nzer);
    printf("pozitive: %d\n", npoz);
    return 0;
}
 
#define IN   1   /* внутри серии  */
#define OUT  0   /* снаружи серии */
 
/* getser:  считает число серий <0 =0 >0 чисел */
int getser(int *nump, unsigned n, int *neg, int *zer, int *poz, unsigned k)
{
    int nstate, zstate, pstate, nceil, zceil, pceil;
        
    *neg = *zer = *poz = 0;
    nceil = zceil = pceil = k;    
    nstate = zstate = pstate = OUT;
    for ( ; n > 0; nump++, n--)
        if (*nump < 0) {
            zceil = pceil = k;
            if (nstate == OUT && --nceil > 0)
                continue;
            zstate = pstate = OUT;
            if (nstate == OUT) {
                nstate = IN;
                (*neg)++;
            }
        } else if (*nump == 0) {
            nceil = pceil = k;
            if (zstate == OUT && --zceil > 0)
                continue;
            nstate = pstate = OUT;
            if (zstate == OUT) {
                zstate = IN;
                (*zer)++;
            }
        } else {
            nceil = zceil = k;
            if (pstate == OUT && --pceil > 0)
                continue;
            nstate = zstate = OUT;
            if (pstate == OUT) {
                pstate = IN;
                (*poz)++;
            }
        }
    return (*neg || *zer || *poz) ? 0 : 1;
}
вывод

Код
[guest@localhost tmp]$ ./test
negative: 0
zeroes: 0
pozitive: 1
[guest@localhost tmp]$
терь с ограничителем
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2008, 22:56
Привет! Вот еще темы с ответами:

Среднее арифмитическое положительных и отрицательных чисел в массиве - C++
Здравствуйте. У меня возникла проблема с решением задания с массивом. Хочу попросить у вас помощи. Вот задание: Заполнить массив A. Массив...

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

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

Как посчитать количество положительных и отрицательных чисел в массиве? - C++
Вывожу 10 случайных чисел (-10....10), как подсчитать кол-во положительных чисел и кол-во отрицательных? #include&lt;iostream&gt; ...


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

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

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