• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcje, liczby pierwsze w przedziale

0 głosów
662 wizyt
pytanie zadane 2 stycznia 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)

Napisz program, który wyświetla wszystkie liczby pierwsze w zadanym przedziale <x1, x2>, wprowadzonym z klawiatury. Funkcja powinna zwrócić 1, jeżeli a jest liczbą pierwszą, 0 w przeciwnym wypadku. Jeżeli nie wystąpi żaden taki element program ma wypisać komunikat "Nothing to show". W przypadku wprowadzenia przez użytkownika błędnych danych program powinien wyświetlić komunikat "Incorrect input" i zakończyć działanie z kodem błędu 1.

Wiem że wypisuje mi 1, a nie liczby pierwsze ponieważ w mojej funkcji jest return 1, jednak tego wymaga polecenie. Funkcja wypisywałaby liczby pierwsze gdy za return 1 podstawie:

printf("%d", a)

a za return 0 trzeba by podstawić break, z tym że tak nie moge zrobić. 

 

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int x1 = 0;
int x2 = 0;
int a = 0;
int k = 0;

int is_prime(int a, int x1, int x2, int k)
{
    for (a = x1; a <= x2; a++)
    {
        for (k = 2; k <= a; k++)
        {
            if (a%k == 0)
                {
                   if (k == a)
                   {
                    return 1;
                   }
                   else
                   {
                    return 0;
                   }
                }
        }
    }
}
int main()
{
    printf("Podaj x1: ");

    if (scanf("%d", &x1) != 1)
    {
        printf("Incorrect Input");
        return 1;
    }
    printf("Podaj x2: ");

    if (scanf("%d", &x2) != 1)
    {
        printf("Incorrect Input");
        return 1;
    }

    if (is_prime(a, x1, x2, k) == 1)
    {
        printf("%d", is_prime(a, x1, x2, k));
    }
    if (is_prime(a, x1, x2, k) != 1 && is_prime(a, x1, x2, k) != 0)
    {
        printf("Nothing to show");
    }
    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 2 stycznia 2020 przez Mya Bywalec (2,790 p.)
wybrane 3 stycznia 2020 przez ResCrove
 
Najlepsza

Wydaje mi się, że błędnie interpretujesz polecenie. Skoro masz funkcję o nazwie is_prime to ta funkcja powinna sprawdzać tylko jedną konkretną liczbę (mieć tylko jeden argument). Przedział sprawdzisz po prostu wywołując tą funkcję kilkukrotnie w pętli:

for (int i = x1; i <=  x2; i++)
{
   if(is_prime(i))
   {
      //...
   }
}

To rozwiąże problem wartości zwracanych i usunie te dziwne if-y jakie masz w głównej pętli.

Dodatkowo, wydaje mi się Incorrect input powinno zostać wyświetlone w przypadku gdy użytkownik wprowadzi niepoprawne wartości również z logicznego punktu widzenia (np. x1 > x2). Więc też to powinieneś sprawdzać.

Podobne pytania

–2 głosów
1 odpowiedź 471 wizyt
pytanie zadane 18 grudnia 2018 w C i C++ przez pysiek Początkujący (280 p.)
0 głosów
1 odpowiedź 154 wizyt
pytanie zadane 18 grudnia 2018 w C i C++ przez pysiek Początkujący (280 p.)
0 głosów
1 odpowiedź 757 wizyt
pytanie zadane 1 grudnia 2019 w C i C++ przez Hubertius Bywalec (2,970 p.)

93,425 zapytań

142,421 odpowiedzi

322,647 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...