Advertisement
Jordimario

Programma Finale 3AIF

May 20th, 2019
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 100
  4. /*
  5. Jordi Cabrera Carpio
  6. Dati N numeri interi inseriti da input, dopo averli visualizzati, si vuole stampare su schermo:
  7. 1. quanti sono i numeri positivi
  8. 2. la somma dei negativi
  9. 3. la media dei numeri primi
  10. 4. il massimo fra i numeri inseriti
  11. 5. tutti i divisori dispari del massimo trovato
  12. */
  13.  
  14.  
  15.  
  16. typedef enum { false, true } bool;                          ///!creo il tipo bool
  17. int cVet(int v[MAX]);                                       ///Carica Vettore se il bool è settato a vero visualizzarà il risultato
  18. void vVet(int len,int v[MAX]);                              ///visualizza Vettore
  19. bool Primo(int n);                                          ///Visualizza se il numero è primo
  20. void BubbleSort(int a[MAX],int len);                        ///Ordina crescente l'array col metodo BubbleSort
  21. int MaggioriMinori(int di,int nel[MAX],int len,bool MODE);  ///Conta quanti numeri in un vettore "nel" sono maggiori(MODE 0)/minori(MODE 1) di "di"
  22. int VetSommatoR(int v[MAX],int len);                        ///Somma i fattori dentro il vettore in un unica variabile (Recursive)
  23. float MediaPrimi(int v[MAX],int len);                       ///fa la medai dei primi usando il risultato della funzione Primo()
  24. void divisori(int n);                                       ///trova i divisori
  25.  
  26. int main(){
  27. int len;
  28. int vet[MAX];
  29.  
  30. len=cVet(vet);                                                                  ///prende la lunghezza del vettore
  31. printf("i numeri positivo sono [%d]\n",MaggioriMinori(0,vet,len,0));            ///(esercizio 1) usa la funzione MaggioriMinori(immettendo 0 come valore da contare come minore, il vettore su cui eseguire l'operazione la lunghezza e la modalita' (se 1 se uno restituisce i numeri Maggiori del primo opratore se 0 quelli minori)
  32. printf("la somma dei numeri negativi sommati è [%d]\n", VetSommatoR(vet,len));  ///(esercizio 2) somma i numeri negativi
  33. printf("la media dei primi e' [%f]\n",MediaPrimi(vet,len));                     ///(esercizio 3)mostra la media dei primi
  34. BubbleSort(vet,len);                                                            ///(esercizio 4)riorgasnizza l'array per trovare il massimo
  35. printf("il massimo numero inserito è [%d]\n",vet[len-1]);                       ///prende il massimo numero con len-1
  36. printf("i divisori del massimo numero inserito sono");                          ///(esercizio 5)
  37. divisori(vet[len-1]);
  38. }
  39.  
  40. ///-----trova i divisori----////
  41. void divisori(int n){
  42. int i;                      ///indice
  43. for(i=1;i<n;i++){           ///inizio da 1 per escludere lo 0
  44. if(n%i==0)printf("%d,",i);  ///se il resto della divisione fra i due numeri fa 0 allora è un divisore
  45. }
  46. }
  47.  
  48. ///-----Media dei primi------///
  49. float MediaPrimi(int v[MAX],int len){
  50. int i;          ///contatore
  51. int div;        ///divisore media
  52. int somma;      ///somma media
  53. for(i=0;i<len;i++){
  54. if(Primo(v[i])){///richiama la funzione primo() che restituira un risultato vero o false
  55. somma+=v[i];
  56. div++;
  57. }}
  58. return (float) somma/ (float) div;///converto i due numeri in variabili float metnre facci la media
  59. }
  60.  
  61. ///-------Vettore che calcola tutti i numeri negativi su se stesso----------///
  62. int VetSommatoR(int v[MAX],int len){
  63. if(len--<=0)                        ///len diminuisce ed se è minore o uguale di 0 andra a rompre il ciclo ricorsivo
  64. return 0;                           ///con un return di 0 la funzione chiamata in precedenza avra 0 come risultato rompendo il suo ciclo ricorsivo
  65.  
  66. else{
  67. if(v[len]<0)                        ///la funzione sommera solo numeri negativi e ingorera' gli altri
  68. return v[len]+VetSommatoR(v,len);   ///la funzione richiamera' se stessa sommando a v[len] il risultato prodotto dal richiamo
  69. else
  70. return VetSommatoR(v,len);          ///nel caso il numero non e' negativo la funzione richiamera se stessa senza alcuna modifica
  71. }}
  72.  
  73. ///-----riordina l'array in ordine devrescente----///
  74. void BubbleSort(int a[MAX],int len){
  75. int i=0;
  76.  
  77. while(i<len){   ///il ciclo si ripeterà finche l'array non sarà visualizzato del tutto
  78.     if(a[i]<=a[i+1]){///se il numero accanto è maggiore del numero precedente significa che l'array è in ordine crescente per il momento
  79.         i++;
  80.     }
  81.  
  82.     else{                   ///se il numero non è maggiore il programma eseguirà un cambio fra le due variabili
  83.         a[i]=a[i]+a[i+1];   ///il numero successivo viene sommato a quello corrente
  84.         a[i+1]=a[i]-a[i+1]; ///verra estratto dal numero successivo
  85.         a[i]=a[i]-a[i+1];   ///levo il numero successivo con quello corrente per estrarre il numero del successivo
  86.         i=0;                ///riparto da capo
  87.     }
  88. }
  89. }
  90.  
  91. ///-----Funzione Maggiore o minori (in questo caso maggiori di 0-------///
  92. int MaggioriMinori(int di,int nel[MAX],int len,bool MODE){
  93. int i;                          ///indice
  94. int cont=0;
  95. for(i=0;i<len;i++){
  96. if(MODE) cont += (di>nel[i]);   ///restituisce il risultato booleano (0/1) dell'operazione (in questo progrramma verra' usato solo questo)
  97. else cont += (di<nel[i]);       ///restituisce il risultato booleano (0/1) dell'operazione
  98.  }
  99.  return cont;                   ///ritorna il contatore
  100.  }
  101.  
  102. ///-----Primo o non Primo-------///
  103. bool Primo(int n){
  104. if(n<0){n*=-1;}                     ///anche i numeri negativi sono primi cosi li trasformo in positivi per adattarli al codice
  105.  
  106. int div=1;                          ///variabile per le divisioni
  107.  
  108.     do{
  109.         div++;                      ///inizio le divisioni da 2 e da qui incremento
  110.  
  111.     if((n%div==0 && n!=2) || n==1){   ///se un numero puo essere diviso con un altro che non sia 1 o se stesso senza resto il numero è primo, (1) non e' primo per definizione
  112.         div = (bool) false;         ///div da integrale diventa un booleano falso
  113.         }
  114.  
  115.     }while(div<n/2 && div);         ///il ciclo continua finche div non e' minore di n o finche div diventa falso
  116.  
  117.     if(div>0)div = (bool) true;     ///se div non è falso (integrale maggiore di 0) allora diventa un booleano vero
  118. return div;
  119. }
  120.  
  121. ///-----Visualizza Vettore-------///
  122. void vVet(int len,int v[MAX]){
  123.     int i;                                          ///contatore
  124.     printf("Il vettore cariato è [%d",v[0]);
  125.         for(i=1;i<len;i++)printf(",%d",v[i]);       ///ciclo per visualizzare il vettore
  126.     printf("]\n");
  127.  
  128. }
  129.  
  130. ///-----Carica Vettore-------///
  131. int cVet(int v[MAX]){
  132. int i;                                                                          ///contatore
  133. int len;                                                                        ///lunghezza Vettore
  134. do{
  135. printf("lunghezza nel vettore");
  136. scanf("%d",&len);
  137. if(len<0)printf("il numero deve essere positivo\n");                             ///messaggo di errore
  138. }while(len<0);
  139.  
  140.     for(i=0;i<len;i++) {printf("inserisci il %d numero ",i);scanf("%d",&v[i]);} ///ciclo per immettere i numeri dentro il vettore
  141.     vVet(len,v);                                                                ///funzione per visualizzare il vettore
  142. return len;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement