[C] il programma parte ma si blocca

gio881
salve!praticamente ho svolto questo esercizio , solo che non capisco perchè , il programma parte , solo che dopo aver inserito i valori e al momento di stampare di da "il programma ha smesso di funzionare" e si è interrotto , ho sbagliato qualcosa? al momento di compilare non mi ha dato errori , quindi immagine che possa essere solo un problema al livello "logico" grazie in anticipo

Descrivere un algoritmo codificato in linguaggio C/C++ che dopo aver letto un array A a 1000 elementi
interi da standard input, calcoli e stampi su standard output
la somma degli elementi di A in cui A[i] è multiplo di i.

#include <stdio.h>
#include <stdlib.h>

int main() {

int i , A[1000] , somma;

somma=0;


for(i=0 ; i<1000 ; i++){
    scanf("%d" , &A[i]);
}

for(i=0 ; i<1000 ; i++){
    if (A[i]%i==0) {somma=somma+A[i];}

}

printf("%d" ,  somma);


return 0;
}

Risposte
vict85
Hai inserito 1000 elementi a mano :o .

Comunque fai il resto con \(\displaystyle 0 \) e con \(\displaystyle 1 \). Matematicamente parlando è una operazione discutibile.

gio881
l'esercizio mi chiedeva 1000 , ma al momento di controllare il programma ho modificato i valori in 10 :D

ho sbagliato qualcosa?

Cronovirus
Io ti consiglio di dare una bella occhiata a GDB o a qualche altro debugger. Prima o poi lo dovrai imparare, meglio prima che poi :)

gio881
scusa la mia ignoranza , a cosa serve?

Cronovirus
A rispondere da solo alle tue questioni "il programma si blocca e non capisco dove sia il problema" ;) utilizzando un debugger puoi fare dell'analisi dinamica.
In particolare avresti visto che come suggerito in precedenza non puoi fare la divisione in modulo 0

gio881
ho installato gdb come suggerito , effettivamente ora mi da degli errori solo che non capisco cosa vogliano dire



http://i60.tinypic.com/2hi56hf.jpg

vict85
Io e Cronovirus ti abbiamo già detto dove cercare l'errore. Se scrivi
somma =A[1];
for(i=2;i<1000;++i)
  if(A[i]%i==0)
    somma+= A[i];
dovrebbe funzionare.

Comunque, se hai errori con un programma è meglio se non lo cambi prima di portarlo.

gio881
scusa se rompo ancora , ma ho un dubbio teorico perchè si pone "somma=A" e non si inizializza a 0?

vict85
Perché il resto con 1 è sempre 0.

gio881
grazie ho capito!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.