Объясните, почему не проходит проверка на простое число? - C (СИ)
Формулировка задачи:
Здравствуйте.
Есть код программы.
Должна читать текстовый файл и сортировать слова примерно так. +проверка на палиндромы.
Number - только целые неотрицательные числа в пределах от 0 до INT_MAX
Текст в файле:
Hello worlds. Contains 2 words and 1 space.
word : Hello
word : World.
word: Contains
prime number: 2
word: words
word: and
number: 1
word: space.
Получился код:
Объясните почему не проходит проверка на простое число и что я делаю не так.
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <ctype.h> #include <limits.h> int main(void) { char buffer[100]; while((scanf("%s", buffer)!= EOF)) { if(number(buffer)) printf("number: %s\n", buffer); else if(palindrome(buffer)) printf("palindrome: %s\n", buffer); else if(date(buffer)) printf("date: %s\n", buffer); else printf("word: %s\n", buffer); } getchar(); return 0; } int number(char buffer[]) { int place = 0; bool number = true; while(buffer[place] != '\0') { if(isdigit(buffer[place])) { place++; continue; } else { number = false; break; } } if(number) return 1; else return 0; } int palindrome(char buffer[]) { char *start = buffer,*end; while (*buffer) { end = buffer; buffer++; } while (end >= start) { if (*end!=*start) return 0; end--; start++; } return 1; } int date(char buffer[]) { return 0; } int prime(char buffer[]) { int z; int isprime = 0; unsigned int i = *buffer; i = atoi(buffer); if( i < 0 || i > INT_MAX) return 0; else { for(z = 2; z < i/2 ; z++) { if((i % z)==0) { isprime = 1; break; } } if(isprime == 0) return 1; else return 0; } return 0; }
Решение задачи: «Объясните, почему не проходит проверка на простое число?»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <ctype.h> #include <limits.h> int palindrome(char buffer[]) { char *start=buffer,*end; while (*buffer) { end=buffer; buffer++; } while (end>=start) { if (*end!=*start) return 0; end--; start++; } return 1; } int main(void) { char buffer[100]; while((scanf("%s", buffer)!= EOF)) { int is_number=0; int rez = atoi(buffer); if(rez)is_number=1; else { if((buffer[0] == '0') && (!buffer[1]))is_number=1; } if(is_number) { printf("%snumber: %d\r\n", prime(rez) ? "prime ":"",rez); } else { if(palindrome(buffer)) printf("palindrome %s",buffer); else printf("word %s",buffer); } } getchar(); return 0; }
Объяснение кода листинга программы
- В начале кода объявлены функции
palindrome
иmain
, а также включены необходимые заголовочные файлы. - Функция
palindrome
принимает на вход строкуbuffer
и проверяет ее на простоту, сравнивая символы с начала и конца строки. Если они не совпадают, то функция возвращает0
, иначе1
. - В функции
main
создается буферbuffer
размером 100 символов для считывания входных данных. - В цикле
while
считываются строки с помощьюscanf
, до тех пор, пока не будет достигнут конец файла. - Для каждой считанной строки создается переменная
is_number
, которая инициализируется как0
. Переменнаяrez
считывается как целое число с помощьюatoi
. - Если
rez
больше0
, тоis_number
устанавливается в1
. Еслиrez
равно0
, то проверяется второй символ. Если он равен0
, тоis_number
устанавливается в1
. - Если
is_number
равно1
, то выводится сообщение о том, является ли число простым с помощью функцииprime
и само число. - Если
is_number
равно0
, то проверяется, является ли строка палиндромом с помощью функцииpalindrome
. Если да, то выводится сообщениеpalindrome
. Если нет, то выводится сообщениеword
. - В конце функции
main
вызываетсяgetchar
для считывания символа новой строки, а затем функция возвращает0
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д