Salve a tutti sto cercando di realizzare un programmino in c che mi consenta di calcolare in un vettore di interi il suo punto di equilibrio, ovvero quando la somma della parte sinistra e quella di destra, sottratte mi diano come risultato un intero il più vicino possibile a zero. Io ho fatto questo codice ma non funge come dovrebbe, qualcuno sa dirmi perché o lo sa direttamente correggere?
Grazie in anticipo per le risposte!
Codice:
#include <stdlib.h>
#include <stdio.h>
#define DIM 10;
int main()
{
int a[10];
int i, n;
int somma;
int sinistra=0;
int destra=0;
int differenza_minima;
int pos_minimo;
int differenza;
/* leggi n - numero di elementi del vettore */
printf("Numero di elementi del vettore = ");
scanf("%d",&n);
if(n > 10)
{
printf("errore nei dati\n");
}
else
/* leggi vettore */
{
for (i=0;i<n;i++)
{
printf("a[%d] = ",i);
scanf("%d",&a[i]);
}
/*somma la parte sinistra del vettore*/
/*si somma fino alla posizione n-2, visto che il vettore ha da 0 a n-1, e la posizione n-1 inizialmente deve essere assegnata a destra*/
for (i=0;i<n-2;i++)
{
sinistra+=a[i];
}
/* dopo che ha tutto in sinistra comincia da destra verso sinistra, quindi il contrario da come avevamo visto da me, e' lo stesso */
/*in sinistra abbiamo la somma di tutti gli elementi;*/
destra=a[i];
if(sinistra>destra) {
differenza_minima=sinistra-destra;
} else {
differenza_minima=destra-sinistra;
}
printf("sinistra:%d destra:%d diff minima:%d pos:%d \n",sinistra,
destra, differenza_minima, pos_minimo);
pos_minimo=n-1;
for(i=n-2;i>=0;i--) {
if(sinistra>destra) {
differenza=sinistra-destra;
} else {
differenza=destra-sinistra;
}
if(differenza<differenza_minima) {
differenza_minima=differenza;
pos_minimo=i;
}
printf("sinistra:%d destra:%d diff minima:%d pos:%d)\n",sinistra, destra, differenza_minima, pos_minimo);
sinistra-=a[i];
destra+=a[i];
}
}
printf("Il minimo e': %d alla posizione: %d\n", a[pos_minimo],pos_minimo);
system("pause");
return 0;
}