Untitled
unknown
c_cpp
18 days ago
2.5 kB
2
Indexable
Never
/* Scrivere un sottoprogramma in C che riceve come parametri un array di interi a e qualsiasi altro parametro ritenuto strettamente necessario. Il sottoprogramma copia in un secondo array b, allocato dinamicamente delle dimensioni strettamente necessarie, i numeri pari contenuti in a. Infine il sottoprogramma trasmette al chiamante b e la sua dimensione. Gestire opportunamente gli eventuali errori di allocazione della memoria trasmettendo una dimensione dell'array allocato pari a -1. Scrivere un programma in C che chiede all'utente 10 valori interi da salvare in un array. Il programma invoca il sottoprogramma sopra definito e ne visualizza il risultato. Infine il programma libera la memoria allocata. Gestire opportunamente gli eventuali errori di allocazione della memoria. */ #include <stdio.h> #include <stdlib.h> // 1) La funzione ritorna void, e passi array b e size di b come riferimento // 2) La funzione ritorna int, e ritorni la dimensione di b, e l'array b lo passi come riferimento // 3) La funzione ritorna int*, e ritorno l'array b e la sua dimensione la passi come riferimento // a --> [3] [8] [9] [12] [9] int* copia_pari(int a[], int n, int *size) { int i; int count =0; for(i=0; i<n; i++) { if(a[i] % 2 == 0) { count++; } } if(count == 0) { *size = 0; return NULL; } int *b = (int *)malloc(count * sizeof(int)); if(b != NULL) { // a --> [3] [8] [9] [12] [9] // b --> [8] [12] int j=0; for(i=0; i<n; i++) // i = 3 { if(a[i] % 2 == 0) { b[j] = a[i]; j++; } } *size = count; return b; } else { printf("Errore allocazione"); *size=-1; return NULL; } } int main() { int a[10]; for(int i=0; i<10; i++) { printf("Valore %d: ", i + 1); scanf("%d", &a[i]); } int *b; int size; b = copia_pari(a, 10, &size); if(size == 0) { printf("Non ci sono numeri pari nell'array"); }else if (size == -1){ printf("Errore allocazione dinamica"); } if(b != NULL){ for(int i=0; i<size; i++) { printf("%d", b[i]); } printf("%d", size); free(b); } return 0; }
Leave a Comment