Advertisement
icarussiano

Untitled

Jan 26th, 2023 (edited)
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //RISPOSTA 2
  4. int massimo(int a[], int n, int pos);
  5. void F_i(int F[],int A[],int size);
  6. void printarray(int x[],int size);
  7. //dichiarazione delle funzioni
  8.  
  9. int main() {
  10.     int n,n2,i=0;
  11.     int *a, *b, *F;
  12.     //dichiaro i 3 array, due che contengono gli array dei follower del caso 1(a) e caso2(b)
  13.     // e F che è l'array delle assegnazioni dei follower
  14.     printf("Inserisci dimensione array CASO 1:");
  15.     scanf("%d",&n);
  16.     //leggo in input la dimensione n del primo array di interi
  17.     a= (int*)calloc(n,sizeof(int));
  18.     //alloco la memoria per il primo array di interi dimensione n
  19.  
  20.     printf("Inserisci elementi array CASO 1:");
  21.     do {
  22.         scanf("%d", &a[i++]);
  23.     }
  24.     while (getchar()!="\n" && i<n);
  25.     //leggo gli elementi del primo array(posso mettere tutti gli elementi separati da uno spazio e premere invio)
  26.     F= (int*)calloc(n,sizeof(int));
  27.     //alloco la memoria per l'array F che associa ad ogni persona i la persona che segue F[i]
  28.     //la dimensione sarà il numero degli utenti quindi uguale all'array letto in input
  29.  
  30.     printf("Inserisci dimensione array CASO 2:");
  31.     scanf("%d",&n2);
  32.     i=0;
  33.     b= (int*)calloc(n2,sizeof(int));
  34.  
  35.     printf("Inserisci elementi array CASO 2:");
  36.     do {
  37.         scanf("%d", &b[i++]);
  38.     }
  39.     while (getchar()!="\n" && i<n2);
  40.  
  41.     F_i(F,a,n);
  42.     printf("\nCaso #1: "); //Caso #1: 2 2 1 2
  43.     printarray(F,n);
  44.     free(F);
  45.     //libera la memoria allocata da F
  46.     F= (int*) calloc(n2,sizeof(int));
  47.     F_i(F,b,n2);
  48.     printf("\nCaso #2: "); //Caso #2: 1 3 3 4 6 3 0 3
  49.     printarray(F,n2);
  50.     return 0;
  51. }
  52.  
  53. int massimo(int a[], int n, int pos){
  54.     /**
  55.      * funzione che ritorna l'indice dell'elemento massimo di un array che non sia pos
  56.      * perché l'unico follower degli utenti è diverso da se stesso@
  57.      * @param a[](stessa cosa di *a):array in input
  58.      * @param n: dimensione dell'array
  59.      * @param pos: indice dell'utente
  60.      */
  61.     int max= (pos!=0) ? 0 : 1;
  62.     //perché nel caso in cui l'utente sia 0 non vogliamo che gli venga assegnato come follower sé stesso
  63.     for(int i=0; i<n; i++){
  64.         if(a[i]>=a[max] && i!=pos)
  65.             max=i;
  66.     }
  67.     return max;
  68. }
  69.  
  70. void F_i(int F[],int A[],int size){
  71.     /**
  72.      * funzione che riempe l'array F che associa ad ogni utente i l'utente seguito F[i]
  73.      * @param F: array da riempire
  74.      * @param A: array dei follower che associa ad ogni utente il nuemro di follower
  75.      * @size : dimensione dell'array A che sarà anche uguale a quella di F(numero degli utenti)
  76.      */
  77.     int max;
  78.     for(int i=0;i<size;i++){
  79.         max=massimo(A,size,i);
  80.         F[i]= max;
  81.         A[max]--;
  82.     }
  83. }
  84.  
  85. void printarray(int x[],int size){
  86.     /**
  87.      * funzione che stampa gli elementi di un array separati da uno spazio
  88.      * @param x[]:array da stampare
  89.      * @param size: dimensione dell'array
  90.      */
  91.     for(short int i=0;i<size;i++){
  92.         printf("%d ",x[i]);
  93.     }
  94.     printf("\n");
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement