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

C++ kod zródłowy - bug

VPS Starter Arubacloud
0 głosów
385 wizyt
pytanie zadane 11 września 2017 w C i C++ przez qlucha Obywatel (1,790 p.)

Witam w ramach nauki napisałem kod żródłowy który podaje Liczby pierwsze z danego zakresu , wyświetla je na ekranie i podaje ile ich jest .  I program działa ,  ale tylko  wyznacza mi liczby z zakeru 10,000 tys.  , dla 100,000tys. wyznacza tylko 10,000tys. , a dla 1 Miliona  WYSPUJE się .

Jest to kod do nauki , wiem że można było by go prościej zapisać pętlą while ,ale ucząc się , napisałem w ten sposób i nawet musze się przyznać poszedłem troche na skróty i podstawiłem zmienna do potęli jako iterator . Czy tak można czy ta praktyka jest zakazana w programowaniu , czy błąd leży w innym miejscu ???

#include <iostream>

using namespace std;

unsigned long long x;
unsigned long long counter=0;

int main()
{
    cout << "-----------------" << endl;
    cout << "- Prime numbers -" << endl;
    cout << "-----------------" << endl;
    cout << "\nZakres : ";
    cin >>x;
    unsigned long long Zakres[x];
    unsigned long long Primes[x];

    for(unsigned long long i=0;i<x;i++)
    {
        Zakres[i]=i+1;
    }

    unsigned long long y,l,r;
   for( x; x>1; x--)
    {
        bool test=0;
        l=Zakres[x-1];
        y=Zakres[x-1]/2;

       for( y; y>=2;y--)
        {
            r = l%y;
            if(r==0) test=1;
        }
        if(test==0)
        {
            //cout<<l<<endl;
            Primes[counter]=l;
            counter++;
        }
    }


    unsigned long long i=1;cout<<"\n";
    for( counter; counter>0; counter--)
    {
        cout <<"Lnr."<<i<<" =  "<<Primes[counter-1]<<endl;
        i++;
    }
        cout <<"\nW tym przedziale jest ich = "<<i-1<<endl;


    cin.get();
    cin.get();
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 11 września 2017 przez Ehlert Ekspert (212,630 p.)

Po pierwsze iteratory definiujesz poza pętlą for, co więcej globalnie. To zła praktyka. Na ten moment proponuję Ci zapoznać się z std::vectorTo rozwiąże problem przechowywania dużej ilości liczb pierwszych.

cin >>x;
unsigned long long Zakres[x];
unsigned long long Primes[x];

Mimo, że niektóre kompilatory to przepuszczają, to tak nie powinno się robić.

Dzielników liczby naturalnej szukamy w przedziale <1,sqrt(x)>

komentarz 11 września 2017 przez qlucha Obywatel (1,790 p.)
Ok dzieki za odpowiedz , przepisze kod i zainicjuje iteratory w pętli lokalnie albo użyje petli while, kod bedzie bardziej czytelniejszy.

Podobne pytania

0 głosów
3 odpowiedzi 305 wizyt
pytanie zadane 13 maja 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
+115 głosów
40 odpowiedzi 11,777 wizyt
+1 głos
2 odpowiedzi 505 wizyt
pytanie zadane 26 września 2019 w C i C++ przez Tedi Użytkownik (580 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...