16/12/14 19:58
nessuno
Il problema non è in quella parte di codice ...
Mostra il resto
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
16/12/14 20:00
bruno.demarini
Postato originariamente da nessuno:
Il problema non è in quella parte di codice ...
Mostra il resto
Posto l'intero codice:
#include <stdio.h>
#include <malloc.h>
#define N 30
int arrayMaggiori(int*, int, int**);
int main(int argc, char*argv[]){
int nval, nval2, i;
int *arr, *arr2;
do{
scanf("%d", &nval);
}while (nval < 0 || nval > N);
if (arr = (int*)malloc(nval*sizeof(int))){
for (i = 0; i < nval; i++)
scanf("%d", &arr[i]);
nval2 = arrayMaggiori(arr, nval, &arr2);
free(arr);
if (nval2 > 0){
/*mostro la dimensione*/
printf("\n%d", nval2);
/*mostro i valori*/
printf("\n");
for (i = 0; i < nval2; i++)
printf("%d ", *(arr2+i));
}else if (nval2 == -2)
printf("\nErrore allocazione memoria secondo vettore");
else if (nval2 == -1)
printf("\nNessun valore inserito!");
}else
printf("\nErrore allocazione memoria primo vettore");
free(arr2);
return 0;
}
/*ritorna la dimensione del nuovo array; -2 se l'allocazione è fallita; -1 se l'array passato non ha elementi*/
int arrayMaggiori(int* v, int dim, int** newv){
int i, j, somma, newdim;
float media;
if (dim){
/*calcolo somma*/
for (i = 0, somma = 0; i < dim; i++)
somma += *(v+i);
/*calcolo media*/
media = (float)somma/dim;
/*calcolo nuova dimensione*/
for (i = 0, newdim = 0; i < dim; i++)
if (*(v+i) > media)
newdim++;
/*alloco*/
if (*newv = (int*)malloc(sizeof(int)*newdim)){
for (i = 0, j = 0; i < dim; i++)
if (*(v+i) > media){
**(newv+j) = *(v+i);
j++;
}
}else
return -2;
return newdim;
}
return -1;
}
Ovviamente lo scopo del codice è mostrare solo gli elementi che siano maggiori della media degli elementi dell'array passato.
P.S: Avevo l'impressione che l'errore fosse in quella parte di codice perché se per esempio si mette un printf("ciao"
subito dopo la visualizzazione di ciascun elemento, "ciao" viene mostrato dopo ogni elemento mostrato ad eccezione che dell'ultimo.
Ultima modifica effettuata da bruno.demarini 16/12/14 20:04
aaa
16/12/14 20:04
nessuno
Non ho avuto il tempo di esaminare tutto il codice ma l'errore avviene in questa riga
**(newv+j) = *(v+i);
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
16/12/14 20:33
nessuno
Probabilmente volevi scrivere
*(*newv+j) = *(v+i);
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
16/12/14 20:38
bruno.demarini
Postato originariamente da nessuno:
Non ho avuto il tempo di esaminare tutto il codice ma l'errore avviene in questa riga
**(newv+j) = *(v+i);
Grazie mille, ho capito l'errore! Si deve invece scrivere:
*(*newv+j) = *(v+i);
Grazie ancora, ciao!
P.S: Non mi ero accorto della tua aggiunta! Ciao
Ultima modifica effettuata da bruno.demarini 16/12/14 21:23
aaa