|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2015
Messaggi: 16
|
[C] Confrontare la somma di due elementi di un vettore con un intero
Ciao a tutti, ho urgente bisogno di aiuto, questa è la traccia:
Dato un vettore di interi v e un intero x scrivi una funzione in C che stabilisce se esistono in v due elementi v[i] e v[i] tali che v[i] + v[i] = x. Calcola la complessita computazionale dell'algoritmo proposto. Esiste un'algoritmo che funziona in tempo O(n^2)? E possibile fare meglio? Questo è quello che ho provato a fare: Codice:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int v[100], n, i, j, position;
printf("Inserisci il numero degli elementi\n");
scanf("%d", &n);
printf("Inserisci %d elementi\n", n);
for ( i = 0 ; i < n ; i++ )
scanf("%d", &v[i]);
int x;
printf("inserisci un intero x \n");
scanf("%d", &x);
for ( i = 0 ; i < ( n - 1 ) ; i++ )
{
position = i;
int somma = v[position] + v[j];
for ( j = i + 1 ; j < n ; j++ )
{
if ( somma = x )
somma = x;
}
if ( somma != x )
i++;
}
system("pause");
return 0;
}
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Oct 2011
Città: Roma
Messaggi: 179
|
Qui di seguito trovi il codice funzionante.Ho impostato un limite alla dimensione dell'array(costante dim), per vari motivi il più importante tra questi lo spreco di risorse.
Ti suggerisco di:
Codice:
#include <stdio.h>
#include <stdlib.h>
const int dim = 4; //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;
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 = 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 è uguale a x, ho finito esco dal programma e faccio una stampa.
printf("Nella posizione v[%d]=%d e v[%d]=%d la loro somma è %d uguale a x=%d\n",k,v[k],j,v[j],somma,x);
return 0;
}
}
}
k++;
}
printf("Non ci sono elementi di V che danno per somma %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 x.
free(v); //Libero la memoria allocata per V, per renderla di nuovo disponibile al OS
return 0;
}
__________________
Sono della provincia di Roma. |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jan 2015
Messaggi: 16
|
Ok ti ringrazio molto, ormai l'esame è andato ci riproverò nella prossima sessione, purtroppo il libro sul quale ho studiato non aiuta molto al livello pratico, quindi ho dovuto fare tutto come se fossi partito da 0
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Oct 2011
Città: Roma
Messaggi: 179
|
Fai buon uso dei consigli per la prossima volta allora.
__________________
Sono della provincia di Roma. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jan 2015
Messaggi: 16
|
Si certo, e probabilmente ti "tartasserò" ancora per qualche chiarimento.
Grazie mille |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Oct 2011
Città: Roma
Messaggi: 179
|
Per avere un contatto piu diretto scrivimi un PM.
__________________
Sono della provincia di Roma. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:37.



















