/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
Nedlægge array - søge efter dubletter i ar~
Fra : felixnielsen@hotmail~


Dato : 22-01-06 18:07

JEg har ganske enkelt brug for at finde ud af hvordan man nedlægger et
array og hvordan man finder dubletter eg.

int array[10] = {2,2,2,3,4,5,5,6,7,8};
Jeg kunne så godt tænke mig en funktion der gav resultatet:
3 * 2
1 * 3
1 * 4
2 * 5
1 * 6
1 * 7
1 * 8

Det skulle ikke undre mig at man bliver nød til at skrive en funktion
for det, men det er sådan set også fint, jeg er bare ikke helt siker
på hvordan det skal gøres.


 
 
felixnielsen@hotmail~ (22-01-2006)
Kommentar
Fra : felixnielsen@hotmail~


Dato : 22-01-06 20:36

har fundet en løsning på det ene problem, bruger nu vectors istedet,
men jeg har stadig brug for at finde dupletter...


Kent Friis (22-01-2006)
Kommentar
Fra : Kent Friis


Dato : 22-01-06 20:48

Den 22 Jan 2006 11:36:12 -0800 skrev felixnielsen@hotmail.com:
> har fundet en løsning på det ene problem, bruger nu vectors istedet,
> men jeg har stadig brug for at finde dupletter...

Vectors? Så bruger du C++, og ikke C? Så bare glem alt om printf,
i C++ er det cout du skal have fat i.

(Og så må en af C++-folkene lige fortælle hvordan man får cout til
at skrive hex).

Mvh
Kent
--
Hard work may pay off in the long run, but laziness pays off right now.

Mogens Hansen (22-01-2006)
Kommentar
Fra : Mogens Hansen


Dato : 22-01-06 21:17


"Kent Friis" <nospam@nospam.invalid> wrote in message
news:43d3e173$0$15790$14726298@news.sunsite.dk...
> Den 22 Jan 2006 11:36:12 -0800 skrev felixnielsen@hotmail.com:
>> har fundet en løsning på det ene problem, bruger nu vectors istedet,
>> men jeg har stadig brug for at finde dupletter...

I C++ (ikke oversat):

#include <vector>
#include <algorithm>

using namespace std;

vector<int> vi;
// ...
vi.erase(
unique(vi.begin(), vi.end()),
vi.end());

>
> Vectors? Så bruger du C++, og ikke C? Så bare glem alt om printf,
> i C++ er det cout du skal have fat i.

>
> (Og så må en af C++-folkene lige fortælle hvordan man får cout til
> at skrive hex).

(ikke oversat)

#include <iomanip>

cout << hex << 23;

Venlig hilsen

Mogens Hansen



felixnielsen@hotmail~ (23-01-2006)
Kommentar
Fra : felixnielsen@hotmail~


Dato : 23-01-06 15:35

ok, så er jeg færdig med første del af mit første program, jeg kan
ikke lade være med at være lidt stolt da jeg kun har været igang med
c/c++ i under en uge
Nå, men her er det hvis nogle skulle være interesserede:

__________________________________________________________________________________________________

#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

int main() {

bool loop = true;
int i = 0;
int test = 3;
vector<int>P(1,2);

cout << "This will test for primes untill a maximum of
2.147.483.647 is reached." << endl;
cout << "Press Enter to start, pause/brake to Pause and Ctrl + C to
quit." << endl;
cin.get();

ofstream myFile("primes.txt",ios::out | ios::app);
myFile << P.back() << endl;

cout << P.back() << endl;
while (test <= 2147483647) {

while (loop == true) {

if (test % P[i] == 0) {
loop = false;
}

else if (i == P.size() -1) {
loop = false;
P.push_back(test);
myFile << P.back() << endl;
cout << test << endl;
}

else {
i++;
}
}

test = test + 2;
i = 0;
loop = true;
}

myFile.close();
cout << P.size() << " primes found from " << P.front() << " -> " <<
P.back() << endl;
cin.get();
}

__________________________________________________________________________________________________

Der er dog lige et par små ting som jeg kunne tænke mig at få svar
på.
1. Jeg kan ikke have med tal større end 2147483647 at gøre, hvis det
virkede at skrive unsigned int, ville det naturligvis være dobbelt
størrelse, men er i bund og grund ligemeget, jeg skal rode med meget
størrer tal hvis det kan lade sig gøre.
Jeg har i øjeblikket "prim95" gørende (er et program til at udregne
mersenneprimtal) og da det roder med tal i en størrelses orden af
10.000.000 cifre er jeg ret sikker på at det kan lade sig gøre

2. og så var der lige den anden ting, men den har jeg glemt O_o

ellers ,mange tak for hjælpen alle sammen.


Kent Friis (23-01-2006)
Kommentar
Fra : Kent Friis


Dato : 23-01-06 17:53

Den 23 Jan 2006 06:35:20 -0800 skrev felixnielsen@hotmail.com:
> ok, så er jeg færdig med første del af mit første program, jeg kan
> ikke lade være med at være lidt stolt da jeg kun har været igang med
> c/c++ i under en uge

Det kan anbefales at bestemme sig for om man vil lære C eller C++ inden
man går igang. Hvis man forsøger at lære dem på samme tid, kommer man
nem til at blande dem, og det bliver noget forfærdeligt noget.

Hvis man gerne vil lære begge sprog, vil jeg anbefale at starte med
C++.

> Nå, men her er det hvis nogle skulle være interesserede:

Det er C++.

> Der er dog lige et par små ting som jeg kunne tænke mig at få svar
> på.
> 1. Jeg kan ikke have med tal større end 2147483647 at gøre, hvis det
> virkede at skrive unsigned int, ville det naturligvis være dobbelt
> størrelse, men er i bund og grund ligemeget, jeg skal rode med meget
> størrer tal hvis det kan lade sig gøre.
> Jeg har i øjeblikket "prim95" gørende (er et program til at udregne
> mersenneprimtal) og da det roder med tal i en størrelses orden af
> 10.000.000 cifre er jeg ret sikker på at det kan lade sig gøre

Tag et kig på GMP. http://www.swox.com/gmp/

Mvh
Kent
--
Hard work may pay off in the long run, but laziness pays off right now.

Ukendt (29-01-2006)
Kommentar
Fra : Ukendt


Dato : 29-01-06 18:02

>> Jeg har i øjeblikket "prim95" gørende (er et program til at udregne
>> mersenneprimtal) og da det roder med tal i en størrelses orden af
>> 10.000.000 cifre er jeg ret sikker på at det kan lade sig gøre
>
> Tag et kig på GMP. http://www.swox.com/gmp/
>

1) Er det for at afprøve en bestemt algoritme, at du har kastet dig over
C++, og skal det bare blive vildt performance mæssigt ?
eller
2) Har du kastet dig over C++, og synes at primtals-algoritmerne og store
tal er et sjovt projekt at bruge det på , og er du lige glad med performance
?

Hvis 1) Kig på ovenstående, de har desuden et eksempelprogram til PI der
sikkert slår det almindelige mennesker lige finder på ...

Hvis 2) kan du for sjov kaste dig over at lave din egen HelTals klasse, der
kan holde uendeligt (ram-begrænset dog) store heltal. Hvis du starter med at
lave "+ operatoren" for klassen, kan du få den til at lave f.eks Fibonachi
rækken ret hurtigt. (1,2,3,5,8,13).
Til en start kunne princippet være at allokere en byte per tal, og så lave
additionen af to af sådanne 'store tal' objekter præcist som hvis man
gjorde det med papir og blyant. Det kan jo så forfines hen ad vejen ...
Det kan sikkert laves på 50 linier.
Senere kan du så implementere gange og division og modulus hvis du vil ...
Men vi skal nok have fundet en elektronisk C++ bog til dig så ...

tpt



Ivan Johansen (23-01-2006)
Kommentar
Fra : Ivan Johansen


Dato : 23-01-06 19:30

felixnielsen@hotmail.com wrote:
> 1. Jeg kan ikke have med tal større end 2147483647 at gøre, hvis det
> virkede at skrive unsigned int, ville det naturligvis være dobbelt
> størrelse, men er i bund og grund ligemeget, jeg skal rode med meget
> størrer tal hvis det kan lade sig gøre.
> Jeg har i øjeblikket "prim95" gørende (er et program til at udregne
> mersenneprimtal) og da det roder med tal i en størrelses orden af
> 10.000.000 cifre er jeg ret sikker på at det kan lade sig gøre

Du skriver ikke hvilken compiler du bruger, men de fleste har en type
som kan håndtere 64 bit tal. Den hedder sandsynligvis long long eller
__int64. Men der er stadig et stykke vej op til 10.000.000 cifre som
godt nok er en voldsom størrelse. Hvis du virkelig skal bruge så store
tal bliver du nødt til at finde et bibliotek som kan håndtere det. Jeg
kender desværre ikke et.

Ivan Johansen

felixnielsen@hotmail~ (23-01-2006)
Kommentar
Fra : felixnielsen@hotmail~


Dato : 23-01-06 20:38

Jeg bruger bloodshed dev-c++
ganske udemærket, men jeg er jo ikke godt nok inde i det til at vide
hvad forskelle der er på div kompillere


felixnielsen@hotmail~ (23-01-2006)
Kommentar
Fra : felixnielsen@hotmail~


Dato : 23-01-06 20:59

Nu har jeg været hele hjælp filen igennem, men har ikke fundet noget
om hvorfor jeg ikke kan bruge unsigned, ej heller noget om 64 bit.
plz hjælp mig, hvis i kan


felixnielsen@hotmail~ (30-01-2006)
Kommentar
Fra : felixnielsen@hotmail~


Dato : 30-01-06 23:29

ok, det her er noget rodet, men det fungerer


#include <iostream>
#include <vector>
#include <cmath>
#include <fstream>
#include <iterator>
#include <string>
std::vector<unsigned long long> P(0);
int prime_pointer = 0;
void find_primes() {
int p_size = P.size();
bool loop;
int i;
for (unsigned long long test = P.back() + 2; P.size() == p_size;
test += 2) {
for (loop = true, i = 0; P[i] < sqrt(test) && loop == true;
i++) {
if (test % P[i] == 0) {
loop = false;
}
else if (P[i+1] > sqrt(test)) {
loop = false;
P.push_back(test);
}
}
}
}
void write_primes() {
std::ofstream primes("primes.txt",std::ios::out | std::ios::app);
for (int i = prime_pointer; i < P.size(); i++) {
primes << P[i] << std::endl;
}
prime_pointer = P.size();
}
void read_primes() {
std::ifstream primes("primes.txt");
if (!primes && P.size() == 0) {
P.push_back(2);
P.push_back(3);
}
else if (P.size() == 0) {
copy(std::istream_iterator<__int64>(primes),
std::istream_iterator<__int64>(), back_inserter(P));
prime_pointer = P.size();
}
}
void print_calc() {
std::cout << " Reading primes from file... ";
read_primes();
int e = 0;
double prob = 1;
if (P.size() > 2) {
while (pow(P[e],2) < P.back()) {
e++;
}
for (int i = 0; i < e; i++) {
prob -= prob*pow(P[i],-1);
}
}
std::cout << "Done!" << std::endl;
int periode_size;
int p_pointer;
system("cls");
for (bool loop = true; loop == true; e++) {
p_pointer = P.size();
periode_size = pow(P[e+1],2)-pow(P[e],2);
prob -= prob*pow(P[e],-1);
std::cout << "
-----------------------------------------------------------------------------
" << std::endl;
std::cout << " Testing interval: " << P[e] << "^2 -> " <<
P[e+1] << "^2 - 1" << std::endl;
std::cout << " Estimated number of primes: " <<
floor(periode_size*prob) << std::endl;
while (P.back() < pow(P[e+1],2)) {
find_primes();
}
P.pop_back();
std::cout << " Primes found: " << P.size()-p_pointer <<
std::endl;
std::cout << " Uncertainty: " <<
((floor(periode_size*prob)-(P.size()-p_pointer))/periode_size)*100 <<
"%" << std::endl;
write_primes();
}
}
void documentation () {
system("cls");
std::cout << std::endl;
std::cout << " Primesstat documentation" << std::endl;
std::cout << std::endl;
std::cout << " About" << std::endl;
std::cout << std::endl;
std::cout << " Some time ago i got an idea that, if it worked,
could estimate" << std::endl;
std::cout << " how many primesnumbers could be found in a given
interval." << std::endl;
std::cout << " In order to test if it worked as well as i thought,
i wrote" << std::endl;
std::cout << " this little piece of software." << std::endl;
std::cout << " In my oppinion it works fine and now i want to share
it with" << std::endl;
std::cout << " the world." << std::endl;
std::cout << std::endl;
std::cout << " The math" << std::endl;
std::cout << std::endl;
std::cout << " An interval allways follow the rule:" << std::endl;
std::cout << " P(n)^2 -> P(n+1)^2 - 1" << std::endl;
std::cout << " eg. 2~2 -> 3~2 - 1" << std::endl;
std::cout << " NB. This interval is the size of 5, not 4." <<
std::endl;
std::cout << std::endl;
std::cout << " The maximum number of primes an interval can contain
is tricky" << std::endl;
std::cout << " but can be explained with a couple of examples." <<
std::endl;
std::cout << " 2^2 -> 3^2 - 1 = (3^2 - 2^2) * (2^-1)" << std::endl;
std::cout << " 3^2 -> 5^2 - 1 = (5^2 - 3^2) * (2^-1 - (2^-1 *
3^-1))" << std::endl;
std::cout << " 5^2 -> 7^2 - 1 = (7^2 - 5^2) * ((2^-1 - (2^-1 *
3^-1)) - (->)" << std::endl;
std::cout << " ((2^-1 - (2^-1 * 3^-1)) * 5^-1))" << std::endl;
std::cout << " The result should be round down to the nearest
integer." << std::endl;
std::cout << " It is somewhat tricky, but it works." << std::endl;
std::cout << std::endl;
std::cout << " The uncertainty in % is simply found:" << std::endl;
std::cout << " ((estimated number of primes - actual number of
primes) / (->)" << std::endl;
std::cout << " periode size) * 100" << std::endl;
std::cout << std::endl;
std::cout << " Troubleshooting" << std::endl;
std::cout << std::endl;
std::cout << " The program will automaticly write the primes found
to the" << std::endl;
std::cout << " file 'primes.txt', this file will grow rapitly as
more and" << std::endl;
std::cout << " more primes are found, otherwise the program will
have to" << std::endl;
std::cout << " start all over every time it is restarted. If it is
a problem" << std::endl;
std::cout << " having such a big file lying around, it can without
any" << std::endl;
std::cout << " problems be deleted." << std::endl;
std::cout << std::endl;
std::cout << " Another problem is that the program writes to the
file every" << std::endl;
std::cout << " time it is done testing an interval, therefor, if
you want to" << std::endl;
std::cout << " quit the program, do so right after it has started
testing a" << std::endl;
std::cout << " new interval." <<std::endl;
std::cout << std::endl;
std::cin.get();
std::cout << " Press enter to return to menu..." << std::endl;
std::cin.get();
}
void menu() {
std::string choice;
system("cls");
std::cout <<
"ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄ¿"
<< std::endl;
std::cout << "³1. Start testing³2. View documentation³3. Quit³"
<< std::endl;
std::cout <<
"ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÙ"
<< std::endl;
std::cout << std::endl;
std::cout << " Make a choice: ";
std::cin >> choice;
if (choice == "1") {
print_calc();
}
else if (choice == "2") {
documentation();
menu();
}
else if (choice == "3") {
//quit();
}
else {
std::cout << " Invalid choice!" << std::endl;
std::cout << " Make a new choice: ";
std::cin >> choice;
}
}
int main() {
menu();
}

Det er sikkert ikke helt nemt at se ud fra koden hvad programmet gør,
men prøv at kompilere det (læs den indbyggede dokumentation først)
så vil du opdage hvad det er for nogle mærkelige idéer jeg render
rundt med


Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407944
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste