Mitt kompilerade program hänger sig :/

Permalänk
Medlem

Mitt kompilerade program hänger sig :/

När jag kompilerar det här programmet så körs det några gånger, sedan fryser det sig, och tar upp all processorkraft. Det skall leta efter tal, som dels är primtal, dels palindrom, och talet i binärform skall vara ett primtal, och dessutom ett palindrom.

Finns det något enkelt som gör att program får minnesläckor eller något? Det tar inte upp äckligt mycket minne, jag har ingen aning om vad jag har gjort som är fel.

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream.h> #include <math.h> //using namespace std; double taltest; float tal; float taldiv; float talsqrt; double divi; int apa; double decimal; float primecheck( float tal ); int invert( int a ); int homo( int decimal ); double mult; double bin; double cp; int counter; double platstal; double thetal; int runk; double kolltal; int bol; int bintal; int lekvariabel; //Här kommer main int main() { kolltal=1; while (1<2){ //cout << kolltal << endl; bol=primecheck(kolltal); if (bol == 1) //Då är det ett primtal { cout << "Stage 1 (prim): " << kolltal << endl; lekvariabel=invert(kolltal); if (lekvariabel == kolltal){ cout << "Stage 2: " << kolltal << endl; bintal=homo(kolltal); bol=primecheck (bintal); if (bol == 1){ cout << "Stage 3: " << kolltal << endl; lekvariabel=invert(bintal); if (bintal == lekvariabel){ cout <<"Stage 4: " << kolltal << endl;} } } } kolltal++; } return 0; } //Här kommer en funktion som vänder ett tal int invert( int a ) { int iRet = 0, iLog = log10( a ), iExp = pow( 10, iLog ); for( iLog++; iLog; iLog-- ) { iRet += (a % 10) * iExp; a /= 10; iExp /= 10; } return iRet; } //Här börjar funktionen som kollar om tal är ett primtal float primecheck( float tal ) { talsqrt=sqrt (tal); for (divi=2; divi<=talsqrt; divi++) { taldiv=tal/divi; taltest=taldiv; if (taltest == taldiv) { return 0; break; } } return 1; } //Här börjar funktion som gör om ett tal till binärform int homo ( int decimal ) { mult=1; //Tar reda på hur många "celler" som behövs for (bin=1; decimal>=bin; bin=bin*2) { counter ++; } //Skapar ett binärtal for (cp=counter; cp>0; cp=cp-1) { runk=cp-1; platstal=pow(2, runk); mult=pow(10, cp-1); if (decimal-platstal>=0) { thetal=thetal+mult; decimal=decimal-platstal; } } return thetal; }

Code-tagg fixad /Quizor

Visa signatur

Björn

Permalänk
Medlem

OffTopic: När du lägger in kod så e det alltid trevligare om du använder kod-taggen så koden färgkodas (hur man nu gör det )

OnT: Det e inte så att det inte finns några sånna tal efter dom talen som du får fram? Iaf så kan du alltid lägga in några cout inne i alla loopar och funktioner så du ser precis var det e den hänger sig.

Permalänk
Medlem

Programmet kompilerar och funkar för mig (gcc 3.2.3).
Du har dock gjort något knasigt fel någonstans eftersom den bara hittar talet 1 som uppfyller de kriterierna.
Jag experimenterade med det förut och hittade:
1, 3, 5, 7 och 313.

Visa signatur

Scud: The other day, in the park, I was wondering why frisbees look bigger and bigger as they get closer to you
Scud: And then it hit me

Permalänk
Legendarisk

Från din primtalsfunktion:

taltest=taldiv;
if (taltest == taldiv) {.... }

uhm?

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

kBiber: jag hittade inget vettigare sätt att kolla om ett tal var ett heltal (taltest är en int, taldiv är en float).

Visa signatur

Björn

Permalänk
Medlem

int main()
{
...
while(1<2) {...}
...
}
Det där bör väl fortsätta i all oändlighet?

Visa signatur

"Gee Bender, how are you going to get past those bars?" "I don't now, I guess I just have to BEND them! Moron!" -Bender

Permalänk
Medlem

Dahpluth: Det är ju liksom meningen, den skall fortsätta söka tal i all oändlighet. Fast på ett givet tal så slutar programmets loop snurra. (Det talet är olika från dator till dator jag har testat på).
Men som Gannon säger så är det något fel, det finns många tal som skall uppfylla alla fyra villkoren. Får ta och kolla p ådet här när jag har mer tid...

Visa signatur

Björn

Permalänk
Legendarisk

ZaFt, taltest är ju iaf en double i koden du skrev in här.
Det gör ju att primtalsfunktionen inte funkar.

double taltest;
float taldiv;

Visa signatur

Abstractions all the way down.

Permalänk
Hedersmedlem

ZaFt: Vill du ha en evighetsloop, kan du skriva while(1) {...}

Ett annat sätt (mer lättläsligt) att kontrollera om ett tal är såhär:

bool PrimeCheck(int tal) { if ( tal % 2 == 0 ) return false; for ( int i = 3 ; i < sqrt(tal) ; i+=2 ) if ( tal % i == 0 ) return false; return true; }

Visa signatur

The variable 'brain' is declared but never used

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Gannon
Programmet kompilerar och funkar för mig (gcc 3.2.3).
Du har dock gjort något knasigt fel någonstans eftersom den bara hittar talet 1 som uppfyller de kriterierna.
Jag experimenterade med det förut och hittade:
1, 3, 5, 7 och 313.

1 är inget primtal.

Visa signatur

The variable 'brain' is declared but never used