Untitled
unknown
c_cpp
a year ago
2.5 kB
8
Indexable
/*
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;
}Editor is loading...
Leave a Comment