Untitled
unknown
c_cpp
a year ago
1.6 kB
7
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;
}
Editor is loading...
Leave a Comment