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

program sprawdzający ile jest liczb pierwszych w przedziale od n1 do n2 źle działa

VPS Starter Arubacloud
0 głosów
2,402 wizyt
pytanie zadane 2 lutego 2018 w C i C++ przez mn130496 Gaduła (3,530 p.)

Witam

Jestem studentem pierwszego roku informatyki. W związku z tym ,że nadchodzi dużymi krokami egzamin z podstaw programowania postanowiłem  sobie ,że w ramach nauki do egzaminu zrobię raz jeszcze zadania , które robiliśmy 

przez cały semestr na laboratoriach jednak postanowiłem je troszeczkę przerobić. Postanowiłem każde zadanie robić na funkcjach  mimo tego że zadanie tego nie wymaga , żeby jak najlepiej nauczyć się funkcji ale do rzeczy.

Mam takie oto zadanie:Wprowadź liczbę całkowitą N. Sprawdź, ile liczb z zakresu 2..N jest liczbami pierwszymi.

Napisałem taki oto kod programu :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int czy_pierwsza(int n)
{
    int i;
     for(i=2;i<sqrt(n);i++)
    {
        if(n%i==0)
        {
            return(0);
                break;
        }

    }
    return(1);
}
void ile_liczb(int n1,int n2)
{
    int i , ile=0;
    for(i=n1;i<n2;i++)
    {
        if(czy_pierwsza(i)==1)
        {
            printf("  %d\t",i);
            ile=ile+1;
        }
    }
     printf("\nW podanym przedziale jest %d liczb pierwszych \n\n",ile);
}
int main(void)
{
    int n1,n2;
    printf("podaj dolny zakres: ");
    scanf("%d",&n1);
    printf("Podaj dolny zakres: ");
     scanf("%d",&n2);
     printf("Liczby pierwsze w zakresie od %d do %d to: \n",n1,n2);
     ile_liczb(n1,n2);
     system("pause");
    return (0);
}

Moim zdaniem program działa prawie dobrze , jedynym problemem jest to ,że jak dam sobie przykładowo zakres od 2 do 10 to  program wyświetla mi takie liczby jak 2 , 3 , 4 , 5 , 7 , 9 a przecież 4 nie jest liczbą pierwszą.Podobnie się dzieje jak podam zakres od 2 do 100 to program wyświetla oprócz liczb pierwszych liczby 25 , 29 , 49 itp. , które też nie są liczbami pierwszymi.Drugi problem mam taki , że nie wiem gdzie i dać printfa , że niema liczb pierwszych w przedziale bo gdy w funkcji ile_liczb dodam elsa to też za każdym razem mi wyskakuje najpierw kilka liczb pierwszych z przedziału a potem komunikat że nie ma liczb pierwszych. Próbuję już od dłuższego czasu znaleźć błąd ale nie mogę.Czy ktoś może mi pomóc w tym problemie?. Z góry dziękuję

pozdrawiam

1 odpowiedź

+1 głos
odpowiedź 2 lutego 2018 przez niezalogowany
wybrane 2 lutego 2018 przez mn130496
 
Najlepsza
Warunek zmień na i <= sqrt(n).

PS. Nie musisz przerywać pętli break, bo return przerywa całe dalsze działanie funkcji.
PS2. Uwzględnij 1 tak jak pisałem w poprzednim temacie.
PS3, Wybacz, że wcześniej tego błędu w warunku nie wyłapałem :D
komentarz 2 lutego 2018 przez mn130496 Gaduła (3,530 p.)
ok a możesz mi podpowiedzieć jak uwzględnić tą 1?
komentarz 2 lutego 2018 przez niezalogowany
No if sprawdzić przed pętlą i w razie tego przypadku zwrócić wynik false.
komentarz 2 lutego 2018 przez mn130496 Gaduła (3,530 p.)
ok dziękuję

Podobne pytania

0 głosów
1 odpowiedź 1,160 wizyt
pytanie zadane 29 września 2018 w C i C++ przez KILEEREK0703 Nowicjusz (120 p.)
+2 głosów
1 odpowiedź 409 wizyt
0 głosów
3 odpowiedzi 433 wizyt
pytanie zadane 2 czerwca 2023 w C i C++ przez polandonion Dyskutant (7,560 p.)

92,973 zapytań

141,938 odpowiedzi

321,180 komentarzy

62,301 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...