Η σελίδα μας αναβαθμίστηκε, γι' αυτό τον λόγο τα μέλη μας θα πρέπει να ζητήσουν νέο κωδικό πρόσβασης από την υπηρεσία "Αποστολή κωδικού πρόσβασης".
Εάν το email με τον νέο κωδικό δεν έρθει στο inbox κοιτάξτε και στο spam folder. Ο server είναι φρέσκος και δεν έχει το reputation που του αξίζει.

C++ Μία διόρθωση στον κώδικα μου

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
jim17
Δημοσιεύσεις: 1
Εγγραφή: 27 Μάιος 2008 04:53

C++ Μία διόρθωση στον κώδικα μου

Δημοσίευση από jim17 » 27 Μάιος 2008 05:06

Το παλεύω 2 εβδομάδες περίπου, μου είχε πέσει σε πρόοδο στην σχολή μου, χάλια έγραψα
αλλά έχω πεισμώσει. Είναι το κόσκινο του Ερατοσθένη, το έφτασα ως εδώ κι έχω κολλήσει.
Αν σας έρθει καμιά ιδέα για τον κώδικα μεταξύ των ///// θα ήμουν ευγνώμων στο forum.
Ευχαριστώ εκ των προτέρων!




#include <iomanip>
#include <iostream>
#include <cmath>

using namespace std;
const int megethos =400;

void sieve (bool[], int);
void print (bool[], int);
int main()
{
bool isPrime[megethos]={0};
sieve(isPrime,megethos);
print(isPrime,megethos);
}
void sieve(bool isPrime[],int n)
{
/////////////////////////////////////////////////////////////////////////////

for(int i=0;i<megethos;i++){ // arxikopoio ola ta isPrime se false
isPrime=false;
}

isPrime[2]=true; // theto ta 2 kai 3 se true
isPrime[3] = true;


for(int i = 5; i<megethos; i+=2) // exoterikos
for(int j=3; j<sqrt(i); j++) // esoteriko
{
if(isPrime[j] % isPrime == 0) // exetazo to ypoloipo
isPrime=true; // mipos isPrime=0;
else
isPrime=false;
}



system("pause");
}

///////////////////////////////////////////////////////////////////////////////
void print(bool a[], int n){
for(int i=1; i<n; i++)
if(a)
cout << setw(3)<<i;
else
cout<<setw(3)<<(i%20==0?'\n':' ');

}

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

C++ Μία διόρθωση στον κώδικα μου

Δημοσίευση από dva_dev » 27 Μάιος 2008 22:08

1) Στο κόσκινο του ερατοσθένη ξεκινάς θεωρώντας ότι όλοι οι αριθμοί είναι πρώτοι. Εσύ γιατί πας ανάποδα;
2) Ξεκινάς από το Ν=2.
3) Ολα τα πολλαπλάσια του Ν ξεκινώντας από το Ν^2 (Ν^2, Ν^2+Ν, Ν^2 + 2Ν, Ν^2 + λ*Ν) τα μαρκάρεις ότι δεν είναι πρώτοι.
4) Πάς στον επόμενο που δεν έχει μαρκαριστεί ότι δεν είναι πρώτος. Εδώ το Ν=3
5) Επαναλαμβάνεις από το βήμα 3) και κάτω

[edit]Μην ξεχνάς ότι στη C οι πίνακες ξεκινάνε από το μηδέν. Οπότε το 100 θα είναι στη θέση PINAKAS[99] <-- 100-1[/edit]

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 4 επισκέπτες