2012-12-01 15 views
11

Programm: Also habe ich ein Programm gemacht, das zwei Zahlen N und L nimmt. N ist die Größe eines 2D-Arrays und L ist eine Zahl von 3-16. Das Programm baut das Array auf und startet in der Mitte und arbeitet sich heraus in einer Spirale gegen den Uhrzeigersinn.I ist der Wert des Zentrums und wenn Sie durch die Anordnung gehen (in der Spirale) wird der Wert um eins erhöht.Es ist Prime, wird diese Nummer sein an dieser Stelle zugewiesen und es, wenn nicht * wird stattdessen seinen Platz einnehmenGleitkommaausnahme (Core-Dump

Fehler:. ich erhalte eine „Floating-Point exception“ Fehler, wie würde ich dieses Problem lösen

Code:?

void Array_Loop(int *Array, int n, int L) ; 

int Is_Prime(int Number) ; 

int main(int argc, char *argv[]){ 

    int **Array ; 
    int n, L ; 

    n = atoi(argv[1]) ; 
    L = atoi(argv[2]) ; 

    Matrix_Build(&Array, n, n) ; 
    Array_Loop(Array, n, L) ; 


    return 0 ; 

} 

void Array_Loop(int *Array, int n, int L){ 

    int i, j, k, h ; 
    int lctn, move; 

    lctn = n/2 + 1 ; 
    i = lctn ; 
    j = lctn ; 
    move = 1 

    while(i != 0 && j != n){ 

    for(j = lctn ; j < lctn + move ; j++){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move = move * -1 ; 

    for(i = i ; i > lctn - move ; i--){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move-- ; 

    for(j = j ; j > lctn - move ; j--){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move = move * -1 ; 

    for(i = i ; i < lctn - move ; i--){ 

     if(L % 2 == 2) Array[i][j] = -1 ; 
     else Array[i][j] = Is_Prime(L) ; 
     L++ ; 
    } 

    move++ ; 

    } 

} 


int Is_Prime(int Number){ 

    int i ; 

    for(i = 0 ; i < Number/2 ; i++){ 

    if(Number % i != 0) return -1 ; 

    } 

    return Number ; 

} 
+8

Sie Dividieren/Modding durch Null. – Mysticial

+1

'Zahl% i' ...' i = 0' in der ersten Iteration. – Mysticial

+0

Wenn 'move <0 'ist,' lctn - move> lctn'. Achte auf deine Zeichen. –

Antwort

22

Sie erhalten Floating-Point exception weil Anzahl% i, wenn i 0:

int Is_Prime(int Number){ 

    int i ; 

    for(i = 0 ; i < Number/2 ; i++){ 

    if(Number % i != 0) return -1 ; 

    } 

    return Number ; 

} 

einfach die Schleife beginnen bei i = 2. Da i = 1 in Anzahl% i es immer gleich auf Null, da Number ein int ist.

Btw: Mysticial hat zuerst auf die Kommentare hingewiesen.

+1

gerettet mein Tag danke – kapil

+0

Froh, dass es hilft ... – dreamcrash

6

Gleitkommaausnahme aufgrund einer unerwarteten Unendlichkeit oder NaN. Sie können dies mit gdb verfolgen, wodurch Sie sehen können, was in Ihrem C-Programm läuft, während es ausgeführt wird. Für weitere Informationen: https://www.cs.swarthmore.edu/~newhall/unixhelp/howto_gdb.php

Auf den Punkt gebracht, könnten diese Befehle nützlich sein ...

gcc -g myprog.c

gdb a.out

gdb core a.out

ddd a.out