Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX 100
- /*
- Jordi Cabrera Carpio
- Dati N numeri interi inseriti da input, dopo averli visualizzati, si vuole stampare su schermo:
- 1. quanti sono i numeri positivi
- 2. la somma dei negativi
- 3. la media dei numeri primi
- 4. il massimo fra i numeri inseriti
- 5. tutti i divisori dispari del massimo trovato
- */
- typedef enum { false, true } bool; ///!creo il tipo bool
- int cVet(int v[MAX]); ///Carica Vettore se il bool è settato a vero visualizzarà il risultato
- void vVet(int len,int v[MAX]); ///visualizza Vettore
- bool Primo(int n); ///Visualizza se il numero è primo
- void BubbleSort(int a[MAX],int len); ///Ordina crescente l'array col metodo BubbleSort
- 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"
- int VetSommatoR(int v[MAX],int len); ///Somma i fattori dentro il vettore in un unica variabile (Recursive)
- float MediaPrimi(int v[MAX],int len); ///fa la medai dei primi usando il risultato della funzione Primo()
- void divisori(int n); ///trova i divisori
- int main(){
- int len;
- int vet[MAX];
- len=cVet(vet); ///prende la lunghezza del vettore
- 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)
- printf("la somma dei numeri negativi sommati è [%d]\n", VetSommatoR(vet,len)); ///(esercizio 2) somma i numeri negativi
- printf("la media dei primi e' [%f]\n",MediaPrimi(vet,len)); ///(esercizio 3)mostra la media dei primi
- BubbleSort(vet,len); ///(esercizio 4)riorgasnizza l'array per trovare il massimo
- printf("il massimo numero inserito è [%d]\n",vet[len-1]); ///prende il massimo numero con len-1
- printf("i divisori del massimo numero inserito sono"); ///(esercizio 5)
- divisori(vet[len-1]);
- }
- ///-----trova i divisori----////
- void divisori(int n){
- int i; ///indice
- for(i=1;i<n;i++){ ///inizio da 1 per escludere lo 0
- if(n%i==0)printf("%d,",i); ///se il resto della divisione fra i due numeri fa 0 allora è un divisore
- }
- }
- ///-----Media dei primi------///
- float MediaPrimi(int v[MAX],int len){
- int i; ///contatore
- int div; ///divisore media
- int somma; ///somma media
- for(i=0;i<len;i++){
- if(Primo(v[i])){///richiama la funzione primo() che restituira un risultato vero o false
- somma+=v[i];
- div++;
- }}
- return (float) somma/ (float) div;///converto i due numeri in variabili float metnre facci la media
- }
- ///-------Vettore che calcola tutti i numeri negativi su se stesso----------///
- int VetSommatoR(int v[MAX],int len){
- if(len--<=0) ///len diminuisce ed se è minore o uguale di 0 andra a rompre il ciclo ricorsivo
- return 0; ///con un return di 0 la funzione chiamata in precedenza avra 0 come risultato rompendo il suo ciclo ricorsivo
- else{
- if(v[len]<0) ///la funzione sommera solo numeri negativi e ingorera' gli altri
- return v[len]+VetSommatoR(v,len); ///la funzione richiamera' se stessa sommando a v[len] il risultato prodotto dal richiamo
- else
- return VetSommatoR(v,len); ///nel caso il numero non e' negativo la funzione richiamera se stessa senza alcuna modifica
- }}
- ///-----riordina l'array in ordine devrescente----///
- void BubbleSort(int a[MAX],int len){
- int i=0;
- while(i<len){ ///il ciclo si ripeterà finche l'array non sarà visualizzato del tutto
- if(a[i]<=a[i+1]){///se il numero accanto è maggiore del numero precedente significa che l'array è in ordine crescente per il momento
- i++;
- }
- else{ ///se il numero non è maggiore il programma eseguirà un cambio fra le due variabili
- a[i]=a[i]+a[i+1]; ///il numero successivo viene sommato a quello corrente
- a[i+1]=a[i]-a[i+1]; ///verra estratto dal numero successivo
- a[i]=a[i]-a[i+1]; ///levo il numero successivo con quello corrente per estrarre il numero del successivo
- i=0; ///riparto da capo
- }
- }
- }
- ///-----Funzione Maggiore o minori (in questo caso maggiori di 0-------///
- int MaggioriMinori(int di,int nel[MAX],int len,bool MODE){
- int i; ///indice
- int cont=0;
- for(i=0;i<len;i++){
- if(MODE) cont += (di>nel[i]); ///restituisce il risultato booleano (0/1) dell'operazione (in questo progrramma verra' usato solo questo)
- else cont += (di<nel[i]); ///restituisce il risultato booleano (0/1) dell'operazione
- }
- return cont; ///ritorna il contatore
- }
- ///-----Primo o non Primo-------///
- bool Primo(int n){
- if(n<0){n*=-1;} ///anche i numeri negativi sono primi cosi li trasformo in positivi per adattarli al codice
- int div=1; ///variabile per le divisioni
- do{
- div++; ///inizio le divisioni da 2 e da qui incremento
- 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
- div = (bool) false; ///div da integrale diventa un booleano falso
- }
- }while(div<n/2 && div); ///il ciclo continua finche div non e' minore di n o finche div diventa falso
- if(div>0)div = (bool) true; ///se div non è falso (integrale maggiore di 0) allora diventa un booleano vero
- return div;
- }
- ///-----Visualizza Vettore-------///
- void vVet(int len,int v[MAX]){
- int i; ///contatore
- printf("Il vettore cariato è [%d",v[0]);
- for(i=1;i<len;i++)printf(",%d",v[i]); ///ciclo per visualizzare il vettore
- printf("]\n");
- }
- ///-----Carica Vettore-------///
- int cVet(int v[MAX]){
- int i; ///contatore
- int len; ///lunghezza Vettore
- do{
- printf("lunghezza nel vettore");
- scanf("%d",&len);
- if(len<0)printf("il numero deve essere positivo\n"); ///messaggo di errore
- }while(len<0);
- for(i=0;i<len;i++) {printf("inserisci il %d numero ",i);scanf("%d",&v[i]);} ///ciclo per immettere i numeri dentro il vettore
- vVet(len,v); ///funzione per visualizzare il vettore
- return len;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement