Объясните, почему не проходит проверка на простое число? - 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. Получился код:
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include <ctype.h>
  5. #include <limits.h>
  6. int main(void)
  7. {
  8. char buffer[100];
  9. while((scanf("%s", buffer)!= EOF))
  10. {
  11. if(number(buffer))
  12. printf("number: %s\n", buffer);
  13. else if(palindrome(buffer))
  14. printf("palindrome: %s\n", buffer);
  15. else if(date(buffer))
  16. printf("date: %s\n", buffer);
  17. else
  18. printf("word: %s\n", buffer);
  19. }
  20. getchar();
  21. return 0;
  22. }
  23. int number(char buffer[])
  24. {
  25. int place = 0;
  26. bool number = true;
  27. while(buffer[place] != '\0')
  28. {
  29. if(isdigit(buffer[place]))
  30. {
  31. place++;
  32. continue;
  33. }
  34. else
  35. {
  36. number = false;
  37. break;
  38. }
  39. }
  40. if(number)
  41. return 1;
  42. else
  43. return 0;
  44. }
  45. int palindrome(char buffer[])
  46. {
  47. char *start = buffer,*end;
  48. while (*buffer)
  49. {
  50. end = buffer;
  51. buffer++;
  52. }
  53. while (end >= start)
  54. {
  55. if (*end!=*start)
  56. return 0;
  57. end--;
  58. start++;
  59. }
  60. return 1;
  61. }
  62.  
  63. int date(char buffer[])
  64. {
  65. return 0;
  66. }
  67. int prime(char buffer[])
  68. {
  69. int z;
  70. int isprime = 0;
  71. unsigned int i = *buffer;
  72. i = atoi(buffer);
  73. if( i < 0 || i > INT_MAX)
  74. return 0;
  75. else
  76. {
  77. for(z = 2; z < i/2 ; z++)
  78. {
  79. if((i % z)==0)
  80. {
  81. isprime = 1;
  82. break;
  83. }
  84. }
  85. if(isprime == 0)
  86. return 1;
  87. else
  88. return 0;
  89. }
  90. return 0;
  91. }
Объясните почему не проходит проверка на простое число и что я делаю не так.

Решение задачи: «Объясните, почему не проходит проверка на простое число?»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include <ctype.h>
  5. #include <limits.h>
  6.  
  7. int palindrome(char buffer[])
  8. {
  9.  char *start=buffer,*end;
  10.  while (*buffer)
  11. {
  12.         end=buffer; buffer++;
  13. }
  14.  while (end>=start)
  15. {
  16.   if (*end!=*start)
  17.   return 0;
  18.   end--;
  19.   start++;
  20. }
  21.  return 1;
  22.  
  23. }
  24.  
  25. int main(void)
  26. {
  27.  
  28.     char buffer[100];
  29.  
  30.     while((scanf("%s", buffer)!= EOF))
  31.     {
  32.         int is_number=0;
  33.         int rez = atoi(buffer);
  34.  
  35.             if(rez)is_number=1;
  36.                 else
  37.             {
  38.                     if((buffer[0] == '0') && (!buffer[1]))is_number=1;
  39.             }
  40.  
  41.             if(is_number)
  42.             {
  43.                     printf("%snumber: %d\r\n", prime(rez) ? "prime ":"",rez);
  44.             }
  45.             else
  46.             {
  47.             if(palindrome(buffer))
  48.                     printf("palindrome %s",buffer);
  49.             else
  50.                     printf("word %s",buffer);
  51.             }
  52.     }
  53.     getchar();
  54.     return 0;
  55. }

Объяснение кода листинга программы

  1. В начале кода объявлены функции palindrome и main, а также включены необходимые заголовочные файлы.
  2. Функция palindrome принимает на вход строку buffer и проверяет ее на простоту, сравнивая символы с начала и конца строки. Если они не совпадают, то функция возвращает 0, иначе 1.
  3. В функции main создается буфер buffer размером 100 символов для считывания входных данных.
  4. В цикле while считываются строки с помощью scanf, до тех пор, пока не будет достигнут конец файла.
  5. Для каждой считанной строки создается переменная is_number, которая инициализируется как 0. Переменная rez считывается как целое число с помощью atoi.
  6. Если rez больше 0, то is_number устанавливается в 1. Если rez равно 0, то проверяется второй символ. Если он равен 0, то is_number устанавливается в 1.
  7. Если is_number равно 1, то выводится сообщение о том, является ли число простым с помощью функции prime и само число.
  8. Если is_number равно 0, то проверяется, является ли строка палиндромом с помощью функции palindrome. Если да, то выводится сообщение palindrome. Если нет, то выводится сообщение word.
  9. В конце функции main вызывается getchar для считывания символа новой строки, а затем функция возвращает 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.643 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы