Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Liczby pierwsze

Ostatnio zmodyfikowano 2013-11-30 22:09
Autor Wiadomość
Tym3k
Temat założony przez niniejszego użytkownika
Liczby pierwsze
» 2013-11-30 17:22:06
C/C++
#include <iostream>
#include <conio.h>
#include <ctime>
#include <cstdlib>
#include <math.h>
using namespace std;

void uzupelnij_tablice( int tablica[], int ile, int min, int max )
{
   
    srand( time( 0 ) );
   
    for( int i = 0; i < ile; i++ )
    {
        tablica[ i ] = rand() %( max - min + 1 ) + min;
        cout << tablica[ i ] << ",";
       
       
    }
    cout << endl << endl;
}


/////////////////////////////////////////////////////////////////////
int liczby_pierwsze( int tablica[], int ile, int max )
{
    int x, i;
   
   
   
    for( int j = 0; j < ile; j++ )
    {
        if( tablica[ j ] > max )
             max = tablica[ j ];
       
    }
    cout << "max: " << max << endl << endl;
   
   
    ////////////////////////////////
    int zakres_gorny;
    zakres_gorny = int( sqrt( max ) );
    cout << zakres_gorny;
   
    //for(int i=2 ; i<ile; i++)
    // {
    // tablica[i]=true;
    // }
   
    for( int i = 2; i < zakres_gorny; i++ )
    {
        if( tablica[ i ] != 0 )
        {
            x = i + i;
            while( x <= ile )
            {
                tablica[ x ] = 0;
                x += i;
            }
        }
    }
    for( i = 2; i < ile; i++ )
    if( tablica[ i ] != 0 )
    {
        cout << "liczby pierwsze: " << tablica[ i ] << endl;
       
    }
}




/////////////////////////////////////////////////////////////////////

int main()
{
    int dlugosc;
    int tab[ dlugosc ];
   
   
    do
    {
        cout << "wybierz dluggosc tablicy od 10 do 20" << endl;
        cin >> dlugosc;
    }
    while( dlugosc < 10 || dlugosc > 20 );
   
    uzupelnij_tablice( tab, dlugosc, 1, 99 );
    liczby_pierwsze( tab, dlugosc, 1 );
   
   
    getch();
   
   
}

Czasami do liczby pierwszej dodaje jakby 1 lub 2, ktoś może widzi błąd?
w sensie, gdy na przykład podam 10 liczb:

83 49 79 62 94 89 2 3 35 24
Podaje z tego liczby pierwsze 79 62 89 3

62 nie jest liczbą pierwszą tylko 61

i właśnie, zawsze się trafi jedna lub więcej takich błędnych wyników które są powiększone/pomniejszenie o 2 lub 1.
P-97917
pekfos
» 2013-11-30 19:15:37
Algorytm sprawdzający jest zły i niepoprawnie tworzysz tablicę tab.
P-97944
Tym3k
Temat założony przez niniejszego użytkownika
» 2013-11-30 20:47:23
Algorytm napisze inaczej, ale mógłbyś mi powiedzieć co źle zrobiłem z tablicą?
P-97953
pekfos
» 2013-11-30 20:48:43
Rozmiar tablicy musi być stałą, znaną w czasie kompilacji.
P-97954
Tym3k
Temat założony przez niniejszego użytkownika
» 2013-11-30 22:09:59
C/C++
#include <iostream>
#include <conio.h>
#include <ctime>
#include <cstdlib>
#include <math.h>

using namespace std;

const int dlugosc = 100;
int tab[ dlugosc ];

////////////////////////////////////////////////////////////////
int uzupelnij_tablice( int tablica[], int ile, int min, int max )
{
   
    srand( time( 0 ) );
   
    for( int i = 0; i < ile; i++ )
    {
        tablica[ i ] = rand() %( max - min + 1 ) + min;
        cout << tablica[ i ] << ",";
       
       
    }
    cout << endl << endl;
   
}
//////////////////////////////////////////////////
bool czy_pierwsza( int l )
{
    for( int i = 2; i < l; i++ )
    {
        bool wynik = true;
        for( int i = 2; i < l; i++ ) {
            if( l > 2 )
            if( l % i == 0 )
            { wynik = false;
                break; }
        }
        return wynik;
    }
}
int powtorka( int l )
{
    int s = 0;
    for( int i = 0; i < l; i++ ) {
        if( l == tab[ i ] ) {
            s = s + 1;
        }
    }
    return s;
}




////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////
int main()
{
   
   
    uzupelnij_tablice( tab, dlugosc, 1, 99 );
    for( int i = 0; i < dlugosc; i++ ) {
        int l = tab[ i ];
        if( czy_pierwsza( tab[ i ] ) )
        // cout<<tab[i]<<" - liczba pierwsza\n";
             cout << "Liczba pierwsza: " << tab[ i ] << " wystapila: " << powtorka( tab[ i ] ) << " razy" << endl;
       
       
    }
   
    getch();
   
}
zrobiłem!
P-97965
« 1 »
  Strona 1 z 1