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

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

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

Редактировать программу - C++

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

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

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


текст
Код
#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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2008, 00:14     Редактировать программу
Посмотрите здесь:

Редактировать программу, вместо for использовать цикл while - C++
Задача-написать программу, которая в однонаравленном списке из вещестенных чисел перед каждым числом =20 вставить первый отрицательный...

Редактировать програму - C++
Заданна матрица 3Х3. Заменить в матрице числа буквами. #include &lt;iostream&gt; using namespace std; void main() { const int n=3; ...

редактировать и удалять - C++
как отредактировать и удалять записи из куче БД ?? #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include...

Редактировать рекурсивную функцию - C++
Доброго времени суток форумчане. У меня возник следующий вопрос, есть задание: Заданы n городов, между которыми определены рейсы...

Невозможно редактировать иконку - C++
Не получается рисовать на иконке средствами VS 2008. А именно на 32ух битных. Это проблема моих кривых рук или неподдержка альфа-канала для...

Чем редактировать blob поля? - C++
Кто подскажет ,во всех редакторах баз ето поле принимает memo,которое не редактируется ,а как занести туда текст я нигде не нашел.

Двумерный массив нужно редактировать - C++
Нужно решить 2 проблемы: 1) При вводе данных с клавиатуры он считывает только положительные целые числа. А мне нужно, чтобы абсолютно...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
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, но в него надо записать адрес блока памяти в которую будешь сохранять числа, иначе он никуда не указывает
типа
Код
    if ((Kmas = malloc(n*sizeof(int)) == NULL)
        return 1;
а в конце программы высвободить его через free(Kmas)
maxlennon
1 / 1 / 0
Регистрация: 21.12.2008
Сообщений: 8
21.12.2008, 20:09  [ТС]     Редактировать программу #3
вот отредактировал! а как прописать, чтобы всё таки серии считала??
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.12.2008, 23:21     Редактировать программу #4
надо до цикла память выделить, т.к. выделяется она один раз как и очищается потом, а у тебя получилось она n раз выделяется а очищается только один

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

тебе зачем n в функции ?
maxlennon
1 / 1 / 0
Регистрация: 21.12.2008
Сообщений: 8
22.12.2008, 01:24  [ТС]     Редактировать программу #5
помоги с самим текстом - очень прошу, не получается ни хрена!
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.12.2008, 08:36     Редактировать программу #6
Код
 
#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;
}
считает просто количество серий
maxlennon
1 / 1 / 0
Регистрация: 21.12.2008
Сообщений: 8
22.12.2008, 14:16  [ТС]     Редактировать программу #7
2 вопроса:
1) неужели нельзя мой текст как то чуть чуть изменить???
2) accept - почему твоя программа не запускается ни в одном компилляторе?(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2008, 22:56     Редактировать программу
Еще ссылки по теме:

Как редактировать токены функции strtok? - C++
Всем доброго времени суток! Есть задание, надо в символьной строке найти слова парной длины, добавить к ним с двух сторон символ '%' и...

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

Как редактировать файл на сайте\прочитать - C++
скажем на сайте есть файл.тхт,хочу редактировать ее,и вывести на экран его содержание...таким образом я напишу чат,но сайт будет на...

Можно ли программно редактировать Windows Firewall? - C++
Всем привет :) Можно ли программно редактировать виндосовский firewall? Например добавить определённую программу в исключения файрвола?...

Редактировать текст используя ms Word API с++ - C++
Собственно, все описано в теме. Не могли бы вы помочь ссылками/объяснениями как это сделать?


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

Или воспользуйтесь поиском по форуму:
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.12.2008, 22:56     Редактировать программу #8
сохрани файл с расширением .c
может быть int надо добавить перед main (это не обязательно для C)
а вообще в bc3.1 компилится с любым расширением и без int'а
минимальную длину серии функция не принимает, можно встроить чтобы она не считала серии короче чем k

Добавлено через 1 час 15 минут 31 секунду
Код
 
#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]$
терь с ограничителем
Yandex
Объявления
22.12.2008, 22:56     Редактировать программу
Ответ Создать тему
Опции темы

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