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

[C++] Liczby pierwsze

Ostatnio zmodyfikowano 2012-10-04 00:32
Autor Wiadomość
saund
Temat założony przez niniejszego użytkownika
[C++] Liczby pierwsze
» 2012-10-03 22:17:08
Właśnie zacząłem studia informatyczne. Wcześniej miałem tylko i wyłącznie kontakt z HTML/CSS/JAVASRCIPT ; )

Treść zadania:

Napisz program, który sprawdza, czy podana liczba całkowita jest liczbą pierwszą.
Wejście
Pierwsza linia wejścia zawiera jedną liczbę całkowitą określającą liczbę zestawów danych, których opisy występują kolejno po sobie. Opis jednego zestawu jest następujący:
W jedynej linii zestawu znajduje się jedna liczba całkowita n z przedziału od 1 do 100000000.
Wyjście
Dla każdego zestawu danych wypisać w osobnej linii słowo TAK jeśli liczba n jest pierwsza lub słowo NIE w przeciwnym wypadku.
Przykład
Dla danych wejściowych:

4
8
7
13
22

poprawną odpowiedzią jest:

NIE
TAK
TAK
NIE


Program który mam

C/C++
#include <iostream>
#include <math.h>
#include <stdlib.h>

using namespace std;

int TestPierwsza( unsigned long p )
{
    unsigned long r = sqrt( p );
    unsigned long i = 2;
   
    while( i <= r ) if( !( p % i++ ) ) return false;
   
    return true;
}

int main( void )
{
    unsigned long p;
    int x; //ilosc testow
   
    cout << "podaj liczbe testow" << endl;
    cin >> x;
    cout << "Podaj liczbę: ";
    cin >> p;
    cout << endl;
    for( int i = 0; i != x; ++i ) {
        if( TestPierwsza( p ) )
             cout << p << "TAK" << endl;
        else
             cout << p << "NIE" << endl;
       
    }
   
   
    system( "PAUSE" );
    return 0;
}

Problem: Mogę podać tylko jedną zmienną(źle). Chciałbym żeby program sprawdzić wszystkie liczby jakie wprowadzę. Niestety nie mogę skorzystać z tablicy gdyż nie wiem jaki będzie jej rozmiar, myślałem też o użyciu "vector" ale u mnie w podręczniku opis tej opcji jest dopiero w połowie książki lub o dynamicznej alokacji tablicy. (Nie że mi się nie chce) ale na pewno jest prostszy sposób.

Z góry dziękuje: )
Krytykę proszę konstruktywną.
funkcja testpierwsza()nie jest mojego autorstwa.
P-66014
DejaVu
» 2012-10-03 22:20:12
P-66015
saund
Temat założony przez niniejszego użytkownika
» 2012-10-03 23:37:05
Tak to prawda, że skorzystałem z nieswojego kodu. Jeśli ktoś by się kiedyś głowił nad takim samym problemem jak ja miałem to rozwiązanie
C/C++
int main( void )
{
    unsigned long p;
    int x; //ilosc testow
    cin >> x;
    while( x-- ) {
        cin >> p;
        if( TestPierwsza( p ) )
             cout << "TAK" << endl;
        else
             cout << "NIE" << endl;
       
    }
    return 0;
}

Jeszcze jedno przyznałem się do skorzystania z tej funkcji po edycji (1 min wcześniej) niż napisałeś post. Nie trzeba tak od razu ustrzelać kto co skopiował. Nie widzę nic złego z korzystania z nieswojego kodu i przerabiania go na swoje potrzeby. Jeśli nie widzisz ani jednej różnicy pomiędzy kodem oryginalnym z forum matematycznego a moim to twój problem. Nie liczyłem na to, że ktoś zrobi zadanie za mnie.
P-66020
DejaVu
» 2012-10-04 00:32:46
Jeszcze jedno przyznałem się do skorzystania z tej funkcji po edycji (1 min wcześniej) niż napisałeś post.
Nieprawda :) Twój post pojawił się o godz. "22:17:08" bez informacji, że to nie jest Twój kod. Później ja napisałem posta "22:20:13", a potem dopiero w wyniku Twojej edycji z godziny "22:20:54" pojawił się wpis, cytuję:
funkcja testpierwsza()nie jest mojego autorstwa.


Nie widzę nic złego z korzystania z nieswojego kodu i przerabiania go na swoje potrzeby.
A ja widzę problem, bo nawet tego kodu nie rozumiesz i nie byłbyś w stanie napisać takiego kodu samodzielnie nawet po trzech miesiącach programowania. Za dużo w nim tricków optymalizacyjnych jak na początkującego i za dużo w nim błędów, które wynikają z nieznajomości standardu C++ osoby, która ten kod pisała (w obecnych kursach tego nie uczą).
P-66021
« 1 »
  Strona 1 z 1