Объясните, почему не проходит проверка на простое число? - 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;
}

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

  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
Похожие ответы