shiony710
19-05-2015, 17:00
Salve a tutti,
tra un paio di giorni ho l'esame di programmazione, devo però portare dei programmi, uno di questi mi sta dando diversi problemi nell'implementazione. Vi scrivo qui sotto il testo richiesto:
In questo esercizio ti viene chiesto di implementare l'algoritmo di Selection Sort visto in classe.
Una volta implementato l'algoritmo, risolvi i seguenti esercizi:
3. Dato un vettore di interi v e un intero x, scrivi una funzione in C che stampa a video la piu piccola
sequenza di elementi di v la cui somma supera x. Ad esempio, supponiamo che v = {3; 12;-1; 10}.
A tal ne basta prendere la sequenza formata dall'unico elemento 12 per avere 12 > 10. Qual'e la
complessita computazionale dell'algoritmo proposto?
Probabilmente, anzi quasi sicuramente ci sarà un modo migliore per implementarlo, quindi anche in questo vorrei essere aiutato, comunque la parte che mi manca è quella che mi confronta i singoli elementi dell'array con la x, quando ho provato a implementarlo il problema è che mi stampava tutti e tre i risultati, cioè sia la somma di due che somma dei tre elementi insieme al singolo.
Vi scrivo, quindi, il codice qui sotto:
#include <stdio.h>
#include <stdlib.h>
const int dim = 3; //Dimensione
int main()
{
int* v = (int*)calloc(dim,sizeof(int)); //Crea un array dinamico di 4 celle tute inizializzate a 0
int k,somma,i,j,totale;
printf("Inserisci elementi:\n");
for (i = 0 ; i < dim ; i++ )
{ //Inserisco i valori nelle celle scandite da 0 a 3
printf("\tInserisci valore: ");
scanf("%d", &v[i]);
}
int x;
printf("inserisci un intero x \n"); //Setto il valore di x
scanf("%d", &x);
k = somma = totale = 0;
while(k < dim)
{ //Se il mio scan di indice raggiunge la fine dell'array
for(j = 0; j < dim; j++)
{ //Sotto ciclo per scandire le altre posizioni
if(j != k)
{ //Leggo tutte le posizioni tranne in quella dove sono
somma = v[k]+v[j];
if(somma > x)
{ //Se la somma è superiore a x, ho finito esco dal programma e faccio una stampa.
printf("Nella posizione v[%d]=%d e v[%d]=%d la loro somma e' %d supera il valore x=%d\n",k,v[k],j,v[j],somma,x);
return 0;
}
}
}
k++;
for(j = 0; j < dim; j++)
{
if(j != k)
{
totale = v[k]+v[j]+v[j++];
if(somma < x && totale > x)
{
printf("La somma di tutti gli elementi nel vettore e' %d supera il valore x=%d\n",totale,x);
return 0;
}
}
}
}
printf("La somma di tutti gli elementi dell'array e' minore di x= %d\n",x); //Se sono arrivati qui senza essere stato bloccato sopra vuol dire che non ci sono elementi per cui la loro somma sia superiore ad x.
free(v); //Libero la memoria allocata per V, per renderla di nuovo disponibile al OS
return 0;
}
Chiedo un vostro aiuto, ringrazio anticipatamente.
tra un paio di giorni ho l'esame di programmazione, devo però portare dei programmi, uno di questi mi sta dando diversi problemi nell'implementazione. Vi scrivo qui sotto il testo richiesto:
In questo esercizio ti viene chiesto di implementare l'algoritmo di Selection Sort visto in classe.
Una volta implementato l'algoritmo, risolvi i seguenti esercizi:
3. Dato un vettore di interi v e un intero x, scrivi una funzione in C che stampa a video la piu piccola
sequenza di elementi di v la cui somma supera x. Ad esempio, supponiamo che v = {3; 12;-1; 10}.
A tal ne basta prendere la sequenza formata dall'unico elemento 12 per avere 12 > 10. Qual'e la
complessita computazionale dell'algoritmo proposto?
Probabilmente, anzi quasi sicuramente ci sarà un modo migliore per implementarlo, quindi anche in questo vorrei essere aiutato, comunque la parte che mi manca è quella che mi confronta i singoli elementi dell'array con la x, quando ho provato a implementarlo il problema è che mi stampava tutti e tre i risultati, cioè sia la somma di due che somma dei tre elementi insieme al singolo.
Vi scrivo, quindi, il codice qui sotto:
#include <stdio.h>
#include <stdlib.h>
const int dim = 3; //Dimensione
int main()
{
int* v = (int*)calloc(dim,sizeof(int)); //Crea un array dinamico di 4 celle tute inizializzate a 0
int k,somma,i,j,totale;
printf("Inserisci elementi:\n");
for (i = 0 ; i < dim ; i++ )
{ //Inserisco i valori nelle celle scandite da 0 a 3
printf("\tInserisci valore: ");
scanf("%d", &v[i]);
}
int x;
printf("inserisci un intero x \n"); //Setto il valore di x
scanf("%d", &x);
k = somma = totale = 0;
while(k < dim)
{ //Se il mio scan di indice raggiunge la fine dell'array
for(j = 0; j < dim; j++)
{ //Sotto ciclo per scandire le altre posizioni
if(j != k)
{ //Leggo tutte le posizioni tranne in quella dove sono
somma = v[k]+v[j];
if(somma > x)
{ //Se la somma è superiore a x, ho finito esco dal programma e faccio una stampa.
printf("Nella posizione v[%d]=%d e v[%d]=%d la loro somma e' %d supera il valore x=%d\n",k,v[k],j,v[j],somma,x);
return 0;
}
}
}
k++;
for(j = 0; j < dim; j++)
{
if(j != k)
{
totale = v[k]+v[j]+v[j++];
if(somma < x && totale > x)
{
printf("La somma di tutti gli elementi nel vettore e' %d supera il valore x=%d\n",totale,x);
return 0;
}
}
}
}
printf("La somma di tutti gli elementi dell'array e' minore di x= %d\n",x); //Se sono arrivati qui senza essere stato bloccato sopra vuol dire che non ci sono elementi per cui la loro somma sia superiore ad x.
free(v); //Libero la memoria allocata per V, per renderla di nuovo disponibile al OS
return 0;
}
Chiedo un vostro aiuto, ringrazio anticipatamente.