Перевод кода с Pascal на Си или С++ (рекурсия) - C (СИ)
Формулировка задачи:
Здравствуйте, помогите, пожалуйста, перевести код с Pascal на С++, либо на Си. Задание состояло в следующем: «Описать рекурсивную логическую функцию sym(s,i,j), проверяющую, является ли симметричной часть строки s, начинающаяся i-ым и кончающаяся j-ым её элементами».
Благодарю.
function sym(var s: string; i, j: integer): boolean;
begin
if i > j then
Result := True
else
Result := (s[i] = s[j]) and sym(s, i+1, j-1);
end;
var
s: string;
i, j: integer;
begin
write('Введите строку: '); readln(s);
write('Введите номер элемента, с которого нужно проверить часть строки: '); readln(i);
write('Введите номер элемента, которым заканчивается проверяемая часть строки: '); readln(j);
writeln('Часть строки ', not sym(s, i, j) ? 'не ' : '', 'симметрична.')
end.Решение задачи: «Перевод кода с Pascal на Си или С++ (рекурсия)»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
bool sym(char * s, int i, int j){
if (i > j) return true;
else{
if(s[i] == s[j]) sym(s, i+1, j-1);
else return false;
}
}
int main(){
setlocale(LC_ALL, "rus");
int i=0, j=0, n = 20;
char * s = (char*) malloc(n*sizeof(char));
printf("Введите строку: ");
scanf("%s", s);
printf("Введите номер элемента, с которого нужно проверить часть строки: ");
scanf("%d", &i);
printf("Введите номер элемента, которым заканчивается проверяемая часть строки: ");
scanf("%d", &j);
printf("\nЧасть строки ");
if (sym(*&s, i, j)) printf("не");
printf("симметрична.");
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем функцию sym, которая выполняет рекурсию для проверки симметрии строки
- В функции main устанавливаем локальную кодировку, выделяем память под строку и запрашиваем у пользователя ввод строки, номер первого элемента и номер последнего элемента для проверки
- Вызываем функцию sym с передачей первого и последнего элементов в качестве аргументов
- Выводим результат на экран
- Возвращаем 0, чтобы указать на успешный конец работы программы