Dr. Chaos Skrevet 5. juni 2011 Del Skrevet 5. juni 2011 (endret) Følgende korte kodesnutt for å finne primtall nr. 10001 (en oppgave fra nettstedet Project Euler) krasjer (i form av at windows sier "core.exe has stopped working"). Ser noen hvorfor? #include <stdio.h> #include <stdlib.h> int count, number=0, test; int main(){ for(count=1; number<=10001; count++){ prime_test(); } return 0; } int prime_test(){ for(test=0; test<=0.5*count; test++){ if(count%test==0 && test!=1){ return 0; } } number++; printf("%d. prime number: %d\n", number, count); return 0; } Edit: Endret vilkårene for if-testen da jeg fant en logisk feil. Et vilkår for if-testen må også være at test!=1 da alle naturlige tall er delbare med 1, selv primtallene. Programmet fungerer likevel ikke. Endret 5. juni 2011 av Dr. Chaos Lenke til kommentar
weebl Skrevet 5. juni 2011 Del Skrevet 5. juni 2011 ser ikke noe galt med koden.. prøvd å kjøre alt i en metode isteden for å kalle den? Lenke til kommentar
Dr. Chaos Skrevet 5. juni 2011 Forfatter Del Skrevet 5. juni 2011 ser ikke noe galt med koden.. prøvd å kjøre alt i en metode isteden for å kalle den? Ja, resultatet er det samme. Lenke til kommentar
Jaffe Skrevet 5. juni 2011 Del Skrevet 5. juni 2011 (endret) Feilen din ligger i count % test . Her får du en floating point exception fordi test er 0 helt til å begynne med. Husk at a % b gir deg resten etter å ha delt a på b. Du har ikke lov å dele på 0, og derfor gir dette en feil når test er 0. Hvorfor kan du ikke la test begynne på 1 i stedet? EDIT: når dette er sagt, så er koden din litt uryddig (jeg antar du holder på å lære C?) Hvorfor er f.eks. variablene globale? Husk at du kan sende argumenter til funksjoner i stedet for å la alle funksjonene dele de globale variablene. Endret 5. juni 2011 av Jaffe Lenke til kommentar
Dr. Chaos Skrevet 5. juni 2011 Forfatter Del Skrevet 5. juni 2011 Feilen din ligger i count % test . Her får du en floating point exception fordi test er 0 helt til å begynne med. Husk at a % b gir deg resten etter å ha delt a på b. Du har ikke lov å dele på 0, og derfor gir dette en feil når test er 0. Hvorfor kan du ikke la test begynne på 1 i stedet? EDIT: når dette er sagt, så er koden din litt uryddig (jeg antar du holder på å lære C?) Hvorfor er f.eks. variablene globale? Husk at du kan sende argumenter til funksjoner i stedet for å la alle funksjonene dele de globale variablene. Ja, jeg har i perioder holdt på med å lære meg det. Jeg gjorde variablene globale da jeg så på det som enkelt i denne situasjonen. Må tvinge meg selv til å lese mye mer dokumentasjon før jeg hopper på oppgaver heretter. Lenke til kommentar
GeirGrusom Skrevet 7. juni 2011 Del Skrevet 7. juni 2011 Det er ikke enkelt med globale variabler. Du bare tror det er enkelt ^^ Globale variabler er en gigantisk fallgruve av feil som er vanskelig å debugge, og programmet ditt KAN IKKE være multithreaded slik det er laget nå, til tross for at det kunne gitt programmet ditt et mangfoldig ganger ytelsesforbedring. Bruk det kun når du har en forbanna god grunn for å bruke dem (og ikke fordi det virker enkelt)! Lenke til kommentar
voident Skrevet 18. juni 2011 Del Skrevet 18. juni 2011 Du burde også se på hvordan du sjekker om et tall er primtall eller ei. Finnes langt raskere metoder som ikke er så kompliserte heller. Lenke til kommentar
lamahamahr Skrevet 18. juni 2011 Del Skrevet 18. juni 2011 Hvis du likte C, anbefefaler jeg deg å se D: http://www.digitalmars.com/d/ Tror du vil like det enda bedre, og tror du vil ha det morsommere når du programmerer. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå