Untitled
unknown
c_cpp
a month ago
1.6 kB
1
Indexable
Never
// 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