• 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

Object Storage Arubacloud
0 głosów
2,291 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,055 wizyt
pytanie zadane 29 września 2018 w C i C++ przez KILEEREK0703 Nowicjusz (120 p.)
+2 głosów
1 odpowiedź 360 wizyt
0 głosów
3 odpowiedzi 293 wizyt
pytanie zadane 2 czerwca 2023 w C i C++ przez polandonion Mądrala (7,040 p.)

92,575 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...