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

isPrime

Ostatnio zmodyfikowano 2017-03-12 08:46
Autor Wiadomość
Tenshey
Temat założony przez niniejszego użytkownika
isPrime
» 2017-03-11 15:38:20
Witam. Mam za zadanie stworzyć program, aby dla każdej liczby wyświetlało słowo TAK, jeśli liczba ta jest pierwsza, słowo: NIE, w przeciwnym wypadku. Zatrzymałem się w tym momencie. Jakiś pomysł jak powinienem zmienić funkcję prime aby zwracała tekst?

przykład:
C/C++
Input:

3
11
1
4

Output:
TAK
NIE
NIE
C/C++
#include <iostream>

using namespace std;

bool prime( int n );
void wpisztab( int test );
void wypisztab( int test );

int main()
{
    int test;
   
   
    cout << "How many test do you wanna do?!" << endl;
    cin >> test;
    cout << "Put your valeus into the query." << endl;
    wpisztab( test );
    cout << "Lets checks if your valeus are prime!" << endl;
    wypisztab( test );
   
   
   
}


void wpisztab( int test )
{
    int tab[ 10000 ];
    int liczba = 1;
    do
    {
        cin >> tab[ liczba ];
        liczba++;
       
    } while( liczba <= test );
   
}


void wypisztab( int test )
{
    int tab[ 10000 ];
    int liczba = 1;
    do
    {
        cout << prime( tab[ liczba ] ) << endl;
        liczba++;
       
    } while( liczba <= test );
   
}



bool prime( int n )
{
    int i;
   
    for( i = 2; i < n; i++ )
    {
        if( n % i == 0 )
        {
            return false;
        }
    }
    return true;
}
P-158840
maly7
» 2017-03-11 16:19:26
Liczba 0 oraz 1 nie jest liczbą pierwszą, więc dodaj stosowny warunek :D

Aby zwracało słowo tak lub nie musisz zamiast typu bool zwracać np. string:
C/C++
string prime( int n )
{
    if( n < 2 )
         return "NIE";
   
    for( int i = 2; i < n; i++ )
    {
        if( n % i == 0 )
             return "NIE";
       
    }
    return "TAK";
}

Dodatkowo, żeby pętla wykonywała się szybciej możesz użyć:
for( int i = 2; i * i <= n; i++ )
P-158850
mateczek
» 2017-03-11 20:21:09
czy to zadanie ze "spoja"?? lub "maina"??
C/C++
void wpisztab( int test )
{
    int tab[ 10000 ]; // tablica lokalna funkcji poza funkcją nie istnieje!!!
P-158880
Tenshey
Temat założony przez niniejszego użytkownika
ispirme
» 2017-03-11 21:57:20
tak, zadanie ze spoja. Ostatecznie zrobiłem coś takiego.
C/C++
#include <iostream>

using namespace std;

string prime( int n );
void wpisztab( int test );
bool wypisztab( int test );

int main()
{
    int test;
    int tab[ 10000 ];
    int liczba = 1;
   
    cout << "How many test do you wanna do?!" << endl;
    cin >> test;
    cout << "Put your valeus into the query." << endl;
    wpisztab( test );
    cout << "Lets checks if your valeus are prime!" << endl;
   
    do
    {
        cout << prime( tab[ liczba ] ) << endl;
        liczba++;
       
    } while( liczba <= test );
   
}


void wpisztab( int test )
{
    int tab[ 10000 ];
    int liczba = 1;
    do
    {
        cin >> tab[ liczba ];
        liczba++;
       
    } while( liczba <= test );
   
}


string prime( int n )
{
    for( int i = 2; i * i <= n; i++ )
    {
        if( n % i == 0 )
        {
            return "NIE";
        }
    }
    return "TAK";
}
Lecz zwraca tylko wartosc tak...
P-158886
maly7
» 2017-03-11 23:03:45
Zobacz co napisał mateczek.
Tworzysz w funkcji tablicę (lokalnie), wpisujesz do niej x danych, ale po wyjściu z funkcji tablica lokalna (utworzona w tej funkcji) jest usuwana.
Żeby zapisać w tej funkcji dane do tablicy utworzonej w mainie musisz przekazać jako argument funkcji wskaźnik/referencję na tablicę.
Może nie jest to w tym programie istotne, ale dlaczego nie zapełniasz tablicy od 0 tylko od 1? Jeśli tablica byłaby mniejsza lub teraz ktoś wprowadziłby 10000 danych to wyszedłbyś poza jej zakres.

C/C++
#include <iostream>

using namespace std;

string prime( int n );
void wpisztab( int * tab, int test );
bool wypisztab( int test );

int main()
{
    int test;
    int tab[ 10000 ];
    int liczba = 0;
   
    cout << "How many test do you wanna do?!" << endl;
    cin >> test;
    cout << "Put your valeus into the query." << endl;
    wpisztab( tab, test );
    cout << "Lets checks if your valeus are prime!" << endl;
   
    do
    {
        cout << prime( tab[ liczba ] ) << endl;
        liczba++;
       
    } while( liczba < test );
   
}


void wpisztab( int * tab, int test )
{
    int liczba = 0;
    do
    {
        cin >> tab[ liczba ];
        liczba++;
       
    } while( liczba < test );
   
}


string prime( int n )
{
    if( n < 2 ) return "NIE";
   
    for( int i = 2; i * i <= n; i++ )
    {
        if( n % i == 0 )
        {
            return "NIE";
        }
    }
    return "TAK";
}
P-158897
mateczek
» 2017-03-12 08:46:05
C/C++
cout << "How many test do you wanna do?!" << endl;
// w zadaniach na automatyczne sprawdzarki żadnych takich tekstów !!!
To ma być program, który wypluwa dane a nie przypadkowe teksty!!!
Jeśli wyjście ma zawierać "TAK" to ma to być dokładnie to słowo. Nie może być "tak" ani "Tak" ani żaden inny tekst w stylu "ta liczba jest pierwsza"

http://pl.spoj.com/problems​/PRIME_T/ jeśli to jest to zadanie z linka, to Twoja tablica ma mieć rozmiar o jedno zero większy.
Tablicowanie nie jest niezbędne do rozwiązania tego zadania.
P-158914
« 1 »
  Strona 1 z 1