Объясните, почему не проходит проверка на простое число? - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д