|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 39
|
Ricorsione Binaria in c...
Qualcuno è in grado di trovare l'errore a questo programma..? ...sicuramente è la funzione ricorsiva...ma non so proprio che cambiare...aiutatemi...
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int somma_ric(int *a, int inizio, int fine);
void main()
{
int *num,somma,start,i,end;
start = 1;
srand((unsigned) time(NULL));
printf ("Inserisci di quanti elementi deve essere formato l'array:\n");
fflush(stdin);
scanf("%d",&end);
fflush(stdin);
num = malloc(end);
if (num == NULL){
puts ("ERRORE ALLOCAZIONE MEMORIA");
exit(1);
}
printf ("L'array generato in modo casuale e':\n");
fflush(stdin);
for (i = 1; i <= end;i++){
num [i] = 0 + rand() % 40;
printf ("%d\n",num[i]);
}
fflush(stdin);
somma=somma_ric(num,start,end);
printf ("La somma dei suoi elementi e'%d.\n\n\n",somma);
}
/*funzione somma ricorsiva binaria elementi array*/
int somma_ric(int *a, int inizio,int fine)
{
int mediano,temp,somma_1,somma_2;
temp = fine;
mediano = (fine)/2;
if (mediano < 1)
return 0;
else
somma_1 = a[mediano] + somma_ric(a,inizio,mediano-1);
if (temp > mediano)
somma_2 = a[temp] + somma_ric (a,temp-1,mediano);
return somma_1 + somma_2;
}
Ultima modifica di cionci : 16-09-2005 alle 09:34. |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
somma_2 = a[temp] + somma_ric (a,mediano+1,fine-1);
prova così EDIT Ultima modifica di Brazorv : 16-09-2005 alle 08:52. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 39
|
ho provato...e Niente...adesso il programma non mi dà nemmeno il risultato....
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
num = malloc(end * sizeof(int));
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 39
|
risp
...Gia avevo provato una cosa analoga con CALLOC... ma probabilmente non riguarda l'allocazione di memoria...NON FUNZIONA...
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
for (i = 1; i <= end;i++) Il for è sbagliato... I vettori sono zero-based quindi li devi accedere da i=0 a i<end... A che serve lo zero prima della rand ? A niente Poi suppongo che ci siano altri errori in mediano...ad esempio start deve essere uguale a 0... |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Anzi deve essere così la malloc:
num = (int *)malloc(end * sizeof(int)); |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 39
|
con calloc ho provato facendo così: calloc (end,sizeof(int))
che è praticamente la stessa cosa di malloc (end*sizeof(int))....nel for ho messo i = 1 a posta perchè non mi trovavo con la printf e i numeri che venivano generati dalla rand...praticamente gli davo tre numeri e la printf me ne restituiva 4....adesso ho provato a cambiare un pò le cose come hai detto tu...solo che la somma data è un numero col meno....niente...... #include <stdio.h> #include <stdlib.h> #include <time.h> int somma_ric(int *a, int inizio, int fine); void main() { int *num,somma,start,i,end; start = 0; srand((unsigned) time(NULL)); printf ("Inserisci di quanti elementi deve essere formato l'array:\n"); fflush(stdin); scanf("%d",&end); fflush(stdin); num = (int*)malloc(end*sizeof(int)); if (num == NULL){ puts ("ERRORE ALLOCAZIONE MEMORIA"); exit(1); } printf ("L'array generato in modo casuale e':\n"); fflush(stdin); for (i = 0; i < end;i++){ num [i] = 0 + rand() % 40; printf ("%d\n",num[i]); } fflush(stdin); somma=somma_ric(num,start,end); printf ("La somma dei suoi elementi e'%d.\n\n\n",somma); } /*funzione somma ricorsiva binaria elementi array*/ int somma_ric(int *a, int inizio,int fine) { int mediano,temp,somma_1,somma_2; temp = fine; mediano = (fine)/2; if (mediano < 1) return 0; else somma_1 = a[mediano] + somma_ric(a,inizio,mediano-1); if (temp > mediano) somma_2 = a[temp] + somma_ric (a,temp-1,mediano); return somma_1 + somma_2; } |
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 39
|
lo zero prima della rand...mi sa che forse non serve a niente......
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int somma(int *a, int inizio, int fine)
{
int med;
if (inizio > fine)
return 0;
med = (inizio+fine)/2;
return a[med] + somma(a, inizio, med-1) + somma(a, med+1, fine);
}
int main()
{
int *num, i, end;
srand((unsigned) time(NULL));
printf ("Inserisci il numero degli elementi dell'array: ");
fflush(stdout);
scanf("%d", &end);
if ((num = malloc(end*sizeof(int))) == NULL) {
perror ("malloc()");
exit(1);
}
printf ("L'array generato in modo casuale e':\n");
for (i = 0; i < end;i++){
num[i] = rand() % 40;
printf ("%d\n", num[i]);
}
printf ("La somma dei suoi elementi e' %d.\n", somma(num, 0, end-1));
return 0;
}
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Sep 2005
Messaggi: 39
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:00.


















