Ошибка в коде (перевод с паскаля) - C (СИ)
Формулировка задачи:
есть код на паскале
но мне он нужен в си, попробовал перевести сам, но программа работает неправильно
помогите исправить
uses crt; var a,b,c:longint; begin clrscr; write('Введите целое положительное число a='); readln(a); b:=a; c:=0; while b>0 do begin c:=c*10+(b mod 10); b:=b div 10; end; writeln(c); if c=a then write('Палиндром') else write('Не палиндром'); readln end.
#include <stdio.h> int main() { long int a,b,c; printf ("Введите целое положительное число а=\n"); scanf ("%ld", a); b=a; c=0; while (b>0) { c=c*10+(b%10); b=b/10; } if (c=a) printf ("Палиндром\n"); else printf ("Не палиндром\n"); return 0; }
Решение задачи: «Ошибка в коде (перевод с паскаля)»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int check (char str[]) { int i,length; length=strlen(str); for (i=0;i<length;i++) if (str[i]!=str[(length-1)-i]) return 0; return 1; } int main() { char str[80]; // где N-любое количество элементов массива gets(str); if (check(str)==1) printf ("Palindrome"); else printf("Not palindrome"); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Функция check принимает на вход строку и проверяет, является ли она палиндромом
- В функции main мы объявляем массив str типа char, который будет содержать строку
- Мы считываем строку с помощью функции gets(str) и передаем ее в функцию check
- Если функция check вернула 1, то выводим
Palindrome
, иначе выводимNot palindrome
- Функция check возвращает 1, если строка является палиндромом, и 0 в противном случае
- В функции check мы используем цикл for для сравнения символов строки
- Мы сравниваем каждый символ строки со своим
зеркальным
символом, сдвинутым на длину строки вправо - Если найден хотя бы один несовпадающий символ, то возвращаем 0
- Если все символы совпадают, то возвращаем 1
- В функции main мы не обрабатываем ошибки, поэтому если ввод пользователя некорректен (например, содержит пробелы или символы, которые не являются буквами), то программа выдаст неопределенное поведение
- Если в строке есть пробелы, то перед вызовом функции check их нужно удалить, иначе они могут влиять на результат проверки
- Если строка очень длинная, то возможна переполнение буфера, что может привести к серьезным проблемам безопасности
- Функция gets не проверяет переполнение буфера, поэтому она небезопасна для использования
- Мы используем функцию printf для вывода результата проверки палиндрома
- Параметр
Palindrome
для функции printf должен быть задан в кавычках, чтобы интерпретироваться как строка - Параметр
Not palindrome
для функции printf должен быть задан в кавычках, чтобы интерпретироваться как строка - Мы используем оператор return 0 в конце функции main, чтобы указать, что функция main успешно завершилась
- Функция main не обрабатывает ситуацию, когда ввод пользователя пустой или содержит только пробелы
- При вводе пустой строки или строки, состоящей только из пробелов, программа выведет
Not palindrome
, так как не сможет найти ни одного совпадения
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д