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

Liczby pierwsze w C. Dodanie sprawdzenia do zbioru liczbowego.

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
103 wizyt
pytanie zadane 21 listopada 2017 w C i C++ przez rayman22 Użytkownik (710 p.)

Witam. Napisałem kod, który sprawdza, czy wpisana liczba do scanf jest pierwsza oraz wyświetla zbiór liczb od 2 do N. Co mógłbym dodać do pętli for w ciag_liczb, aby wyświetlić tylko liczby pierwsze w tym zbiorze?

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

bool czy_pierwsza(int n, int i);
int ciag_liczb (int n, int i);

int main(void)
{
    int n, i;

    printf("Podaj liczbe calkowita: ");
    scanf("%d", &n);

    if (czy_pierwsza(n, i) == 1)
        printf("%d jest liczba pierwsza.\n", n);

    else
        printf("%d nie jest liczba pierwsza.\n", n);

    ciag_liczb(n, i);

    system("pause");
    return (0);
}

bool czy_pierwsza(int n, int i)
{
    if (n < 2)
        return false;

    for (i=2; i*i<=n; i++)
        if (n%i == 0)
            return false;
    return true;
}

int ciag_liczb (int n, int i)
{
    if (n < 3)
        return 1;

    for (i=2; i <= n; i++) {
        printf("%d\n", i);
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 21 listopada 2017 przez Dexterim Dyskutant (8,370 p.)
To akurat dość proste skoro napisałeś funkcje która sprawdza czy liczba jest pierwsza wystarczy wywołać ją dla każdej liczby w ciągu i jeśli zwracana wartość przez funkcje czy_pierwsza jest true to wyświetlasz ją na ekran. W skrócie należy skorzystać z if'a i Twojej funkcji czy pierwsza
komentarz 21 listopada 2017 przez rayman22 Użytkownik (710 p.)

Mój kod w całości wygląda tak:

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

bool czy_pierwsza(int n, int i);
int ciag_liczb(int n, int i);

int main(void)
{
    int n, i;

    printf("Podaj liczbe calkowita: ");
    scanf("%d", &n);

    if (czy_pierwsza(n, i) == 1)
        printf("%d jest liczba pierwsza.\n", n);

    else
        printf("%d nie jest liczba pierwsza.\n", n);

    ciag_liczb(n, i);

    system("pause");
    return (0);
}

bool czy_pierwsza(int n, int i)
{
    if (n <= 2)
        return false;

    for (i=2; i*i<=n; i++)
        if (n%i == 0)
            return false;
    return true;
}

int ciag_liczb (int n, int i)
{
    if (n < 3)
        return 1;

    for (i=2; i <= n; i++) {
        if (czy_pierwsza(n, i) == 1)
            printf("%d\n", i);
    }
}

 

Nadal nie potrafię zrozumieć, dlaczego program nie działa.

komentarz 21 listopada 2017 przez Dexterim Dyskutant (8,370 p.)
edycja 21 listopada 2017 przez Dexterim
nigdzie nie definiujesz ile zmienna i wynosi. Tak w ogóle to po co Ci ona?

W sumie i jest pośrednio tylko błedem. Twój program nie działa poprawnie ponieważ gdy wywołujesz funkcje cz_pierwsza w ciagu licz to jako paramter caly czas dajesz to samo liczbe do sprawdzenia

Podobne pytania

0 głosów
3 odpowiedzi 204 wizyt
pytanie zadane 2 lipca 2018 w C i C++ przez Oskar F. Użytkownik (620 p.)
0 głosów
3 odpowiedzi 5,263 wizyt
pytanie zadane 11 listopada 2017 w C i C++ przez Scypyon Gaduła (3,460 p.)

90,900 zapytań

139,572 odpowiedzi

313,905 komentarzy

60,373 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...