View Full Version : 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... :muro: :cry: :help:
#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;
}
somma_2 = a[temp] + somma_ric (a,mediano+1,fine-1);
prova così
EDIT
ho provato...e Niente...adesso il programma non mi dà nemmeno il risultato....
num = malloc(end * sizeof(int));
...Gia avevo provato una cosa analoga con CALLOC... ma probabilmente non riguarda l'allocazione di memoria...NON FUNZIONA... :cry: :muro:
...Gia avevo provato una cosa analoga con CALLOC... ma probabilmente non riguarda l'allocazione di memoria...NON FUNZIONA... :cry: :muro:
Quello era sicuramente un errore... Perchè alla malloc devi passare il numero di byte...
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...
Anzi deve essere così la malloc:
num = (int *)malloc(end * sizeof(int));
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;
}
lo zero prima della rand...mi sa che forse non serve a niente......
#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;
}
:D :D :D ....GRAZIE
[email protected] PROGRAMMA FUNZIONA BENE... :) :) :) :) :) :) ....
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.