Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2012, 21:59   #1
Alina111
Пользователь
 
Регистрация: 20.12.2011
Сообщений: 40
Восклицание Си.Рекурсивная функция

Ввести с клавиатуры массив из 20 элементов. Составить рекурсивную функцию, которая будет определять количество положительных элементов массива.

Вот что у меня получилось.Программа идет, но сама рекурсивная функция то ли неправильная, то ли просто не выводится.

Код:
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#define n 20


void input_1(int a[n])
{
	int i;
	printf("Введите элементы матрицы A:\n");
	for (i=0;i<n;i++)
			{
		printf("%d элемент=",(i+1));
		scanf("%d",&a[i]);
	}
	for (i=0;i<n;i++)
	{
		printf("%4d",a[i]);
		if((i+1)%5==0) printf("\n");
	}

}

int kol_pol(const int *a,int i,int &kol)
{
for (i=0;i<n;i++)
{
	if (a[i]>0)
	kol++;
	return (a,i+1,kol);
}
printf("Количество положительных элементов= ",kol);
printf("%5d",kol);
_getch();
}
int main()
{
setlocale(LC_CTYPE,"");
int a[n],i,kol;
input_1(a);
i=0;
kol=0;
kol_pol (a,i,kol);
_getch();
return 0;	
}
Alina111 вне форума Ответить с цитированием
Старый 01.07.2012, 03:27   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Alina111
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 20

void input(int *arr)
{
	int i;
	for (i = 0; i < N; i++)
		arr[i] = rand() % 100 - 50;
}

void print(int *arr)
{
	int i;
	for (i = 0; i < N; i++)
		printf("%d\n", arr[i]);
}

int count_positive(int *arr, int num)
{
	return (num >= N) ? 0 : count_positive(arr, num + 1) + (arr[num] > 0);
}

int main()
{
	int arr[N];
	srand(time(NULL));
	input(arr);
	print(arr);
	printf("\ncount of positive values: %d\n", count_positive(arr, 0));
	return 0;
}
у тебя была какая-то задумка на хвостовую рекурсию. вот вариант с хвостовой.
Код:
int count_positive(int *arr, int num, int kol)
{
	return (num >= N) ? kol : count_positive(arr, num + 1, kol + (arr[num] > 0));
}

int main()
{
	int arr[N];
	srand(time(NULL));
	input(arr);
	print(arr);
	printf("\ncount of positive values: %d\n", count_positive(arr, 0, 0));
	return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 01.07.2012 в 03:33.
pproger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсивная функция Ангелина-ванила Помощь студентам 2 01.12.2010 10:21
Рекурсивная функция Bernuar Помощь студентам 2 06.04.2010 10:07
Рекурсивная функция Skinnyman Помощь студентам 4 16.03.2010 18:05
Си++. Рекурсивная функция. Diamond2107 Помощь студентам 6 02.12.2009 19:48