Untitled

mail@pastecode.io avatar
unknown
c_cpp
5 months ago
1.6 kB
1
Indexable
// Online C compiler to run C program online
/*
Scrivere un programma che, acquisita una sequenza di al massimo 50 numeri interi
tra 1 e 100, stampi a video l'istogramma dei divisori. L'istogramma deve avere
tutti i valori da 2 al valore massimo immesso diviso per 2. Il programma deve considerare solo divisori propri, dove un divisore positivo di n diverso da n stesso è chiamato divisor proprio.

*/


#include <stdio.h>

#define MAX_NUMBERS 5
#define MAX_VALUE 10

int main() {

int n;

int numbers[MAX_NUMBERS];

int divisor_count[MAX_VALUE +1 ] = {0}; // [ 0 ] [ 0 ] [ 0 ] ......

int i=0;

do
{
//Acquisizione del numero di elementi
printf("Quanti numeri vuoi inserire (max %d) ", MAX_NUMBERS);
scanf("%d", &n);

}while(n>MAX_NUMBERS);

//Acquisizione dei numeri
printf("Inserisci i numeri (tra 1 e %d):\n", MAX_VALUE);
do
{
    int tmp;
    scanf("%d", &tmp);
    if(tmp < 1 || tmp > MAX_VALUE)
    {
        printf("Numero non valido: %d. Deve essere tra 1 e %d. Riprova:\n", tmp, MAX_VALUE);
    }
    else
    {
        numbers[i] = tmp;
        i++;
    }
    
}while(i<n);

//Calcolo dei divisori propri
for (i=0; i<n; i++)
{
    for(int j=2; j<=numbers[i] /2; j++)
    {
        if(numbers[i] % j == 0)
        {
            divisor_count[j]++;
            
            
        }
    }
}

for(int k=2; k<=MAX_VALUE/2; k++)
{
    if(divisor_count[k] > 0)
    {
        printf("%d: ", k);
    }
    for(int j=0; j<divisor_count[k]; j++)
    {
        printf("*");
    }
    printf(" (%d)\n", divisor_count[k]);
}


    return 0;
}













Leave a Comment