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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2009, 20:36   #1
world12_tk
Форумчанин
 
Регистрация: 24.02.2009
Сообщений: 269
По умолчанию си рекурсия

Добрый вечер... У меня возникла проблема.. Мне нужно было написать программу, которая проверяет, является ли симметричной последовательность символов в этой последовательности, начинающаяся с i-го и кончающаяся j-м элементом. Программа должна быть написана с рекрусивной функцией. Вот мой исходник:
Код:
#include<stdio.h>
int fun (char pos[100], int i, int j)
{
 int k;
  for (k=i;i==j;k++)
  {
  if (i>=j)
  {
    return 1;

    }
  if (pos[i]==pos[j])
    return 0;
  else
    fun=fun(pos,i+1,j-1);
  }
  return fun;
}

main(char pos[100], int i, int j)
{
printf("введите последовательность символов: ");
  scanf("%s",&str);
  printf("Введите i: ");
  scanf("%d",&i);
  printf("Введите j: ");
  scanf("%d",&j);

  if (fun(pos,i,j)==1)
    printf("\n");
  else
    printf("\n");
  getch();
}
Проблема в том, что она не компилируется и я не могу найти ошибку.
Помогите мне исправить.
Заранее спасибо.
world12_tk вне форума Ответить с цитированием
Старый 10.04.2009, 23:06   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Не компилируется - смотри, что компилятор пишет.
Цитата:
fun=fun(pos,i+1,j-1);
Это не паскаль
Цитата:
main(char pos[100], int i, int j)
main(int argc, char *argv[]) или main()

В общем
Код:
#include <stdio.h>

#define MAXLENGTH 0x100

int IsSymmetric(char str[], int i, int j)
{
	return i >= j || str[i] == str[j] && IsSymmetric(str, i + 1, j - 1);
}

int main(int argc, char *argv[])
{
	char str[MAXLENGTH];
	int l;
	for (l = 0; ; l++)
	{
		if (l >= MAXLENGTH)
		{
			printf("String too long");
			while (getchar() != '\n');
			getchar();
			return 1;
		}
		char c = getchar();
		str[l] = c;
		if (c == '\n')
			break;
	}
	str[l] = 0;
	int i, j;
	printf("i = ");
	scanf("%d", &i);
	printf("j = ");
	scanf("%d", &j);
	if (i < 0 || i >= l || j < 0 || j >= l)
	{
		printf("Incorrect value of i or j");
		getchar();
		return 1;
	}
	printf(IsSymmetric(str, i, j) ? "Symmetric" : "Asymmetric");
	while (getchar() != '\n');
	getchar();
	return 0;
}
Somebody вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия. p@ul Помощь студентам 4 30.12.2009 14:46
рекурсия Vital_k Паскаль, Turbo Pascal, PascalABC.NET 1 08.02.2008 13:09
Рекурсия АнНютик Паскаль, Turbo Pascal, PascalABC.NET 1 29.01.2008 22:50
Рекурсия Pravednik Помощь студентам 3 21.01.2008 14:18
Рекурсия Xeon332 Помощь студентам 5 16.01.2008 20:52