Advertisement
Guest User

Untitled

a guest
Feb 18th, 2020
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 11.93 KB | None | 0 0
  1. //FUNZIONI UTILI
  2.  
  3. //gcc -g -lm -o test test.c
  4. //    debug math output  
  5.  
  6.  
  7.  
  8. // valore assoluto
  9. float valoreAssoluto(float x) {
  10.   return x >= 0 ? x : -x;
  11. }
  12.  
  13. // potenza
  14. int potenza(int base, int esp) {
  15.   int cont, prod = 1;
  16.   for (cont = 0; cont < esp; cont++)
  17.     prod *= base;
  18.   return prod;
  19. }
  20.  
  21. // radice quadrata
  22. float radice(float a) {
  23.   float x = 1.0;
  24.   while (valoreAssoluto(x * x - a) > 1e-5)
  25.     x = (x + a / x) / 2.0;
  26.   return x;
  27. }
  28.  
  29. #include <math.h>
  30.  
  31. float radq(float numero) {
  32.   // restituisce un'approssimazione della radice quadrata
  33.   // del parametro, calcolata con il metodo babilonese
  34.   float x;
  35.   x = 1.0;
  36.   while (fabsf(x * x - numero) > 1e-5)
  37.     x = (x + numero / x) / 2.0;
  38.   return x;
  39. }
  40.  
  41. // primo?
  42.  
  43. int primo(int n) {
  44.   int i, potenzialmente_primo;
  45.   potenzialmente_primo = n % 2 || n == 2;
  46.   i = 3;
  47.   while (potenzialmente_primo && i * i <= n) {
  48.     if (n % i == 0)
  49.       potenzialmente_primo = 0;
  50.     i += 2;
  51.   }
  52.   return potenzialmente_primo; //1- primo 0- non primo
  53. }
  54.  
  55. // mcm
  56. int mcm(int a, int b){
  57.     int p,d;
  58.     if(a>b){
  59.         p=a;
  60.     }else{
  61.         p=b;
  62.     }
  63.     d = p;
  64.     while(d%a!=0 || d%b!=0){
  65.         d +=p;
  66.     }
  67.     return d;
  68. }
  69. // divisori
  70. int divisori(int n){
  71.     int s = 0, i = 1;
  72.     while(i*i<=n){
  73.         if(n%i==0){
  74.             s += 1;
  75.             if(!(i*i == n)){
  76.                 s +=1;
  77.             }
  78.         }
  79.         i++;
  80.     }
  81.     return s;
  82. }
  83.  
  84. int bisestile(int anno) {
  85.   // restituisce 1 se il parametro e` un anno bisestile,
  86.   // 0 altrimenti
  87.   if (anno % 400 == 0 || (anno % 4 == 0 && anno % 100 != 0))
  88.     return 1;
  89.   else
  90.     return 0;
  91. }
  92.  
  93. int giorni_del_mese(int mese, int anno) {
  94.   // restituisce il numero di giorni
  95.   // del mese primo parametro
  96.   // nell'anno secondo parametro
  97.   if (mese == 4 || mese == 6 || mese == 9 || mese == 11)
  98.     return 30;
  99.   else if (mese == 2)
  100.     if (bisestile(anno))
  101.       return 29;
  102.     else
  103.       return 28;
  104.   else
  105.     return 31;
  106. }
  107.  
  108. // definizione della funzione massimo
  109. int massimo(int a, int b) {
  110.   if (a > b)
  111.     return a;
  112.   else
  113.     return b;
  114. }
  115.  
  116.  
  117. // ordinamento  INSERTION SORT
  118. #include <stdio.h>
  119. #define DIM 5
  120.  
  121. int main(void) {
  122.   int a[] = {4, 1, 8, 0, 5}, i, dl = 0;
  123.  
  124.   for (dl = 0; dl < DIM; dl++) {
  125.     int j = dl, m = a[dl];
  126.     while (j > 0 && m < a[j - 1]) {
  127.       a[j] = a[j - 1];
  128.       j--;
  129.     }
  130.     a[j] = m;
  131.   }
  132.   for (i = 0; i < DIM; i++)
  133.     printf("%d ", a[i]);
  134.   printf("\n");
  135. }
  136.  
  137.  
  138.  
  139. /*****************************************************************************/
  140. /*************    MIN MAX MEDIA SOMMA N DIVERSI FREQUENZA     ********************************/
  141.  
  142.  
  143. #include <stdio.h>
  144. #define DIM 100
  145.  
  146. int main() {
  147.   int a[DIM], i, dl, somma;
  148.   int numeri[DIM], frequenze[DIM];
  149.   int dlf, ind_max_frequenza;
  150.   int ind_min;
  151.   i = 0;
  152.   do {
  153.     scanf("%d", &a[i]);
  154.     i++;
  155.   } while (a[i - 1] >= 0);
  156.   dl = i - 1;
  157.  
  158.   // calcolo e stampa del minimo
  159.   ind_min = 0;
  160.   for (i = 1; i < dl; i++)
  161.     if (a[i] < a[ind_min])
  162.       ind_min = i;
  163.   // ind_min è l'indice dell'elemento minimo
  164.   printf("Minimo: %d\n", a[ind_min]);
  165.  
  166.   // calcolo e stampa del massimo
  167.  
  168.   // calcolo e stampa della media
  169.   // calcolo somma (Reduce)
  170.   somma = 0;
  171.   for (i = 0; i < dl; i++)
  172.     somma = somma + a[i];
  173.   // somma contiene la somma di tutti gli elementi dell'array
  174.   printf("Media: %.2f\n", (float)somma / dl);
  175.  
  176.   //
  177.   dlf = 0;  // numero di numeri diversi trovati
  178.   for (i = 0; i < dl; i++) {
  179.     int j;
  180.     for (j = 0; j < dlf; j++)
  181.       if (a[i] == numeri[j]) {
  182.         frequenze[j]++;
  183.         break;
  184.       }
  185.     if (j == dlf) {
  186.       numeri[j] = a[i];
  187.       frequenze[j] = 1;
  188.       dlf++;
  189.     }
  190.   }
  191.  
  192.   ind_max_frequenza = 0;
  193.   for (i = 1; i < dlf; i++)
  194.     if (frequenze[i] > frequenze[ind_max_frequenza])
  195.       ind_max_frequenza = i;
  196.  
  197.   //  frequenze[ind_max_frequenza] è la frequenza massima
  198.   printf("Numeri più frequenti: ");
  199.   for (i = 0; i < dlf; i++)
  200.     if (frequenze[i] == frequenze[ind_max_frequenza])
  201.       printf("%d ", numeri[i]);
  202.   printf("\n");
  203.  
  204.   //   // ForEach stampa
  205.   //   for (i = 0; i < dl; i++)
  206.   //     printf("%d ", a[i]);
  207.   //   printf("\n");
  208. }
  209. /*****************************************************************************/
  210. /*************    ANAGRAMMA     ********************************/
  211.  
  212. #include <stdio.h>
  213. #define DIM 30
  214.  
  215. int main() {
  216.   char parola1[DIM], parola2[DIM];
  217.   int frequenze1[26], frequenze2[26];
  218.   int i;
  219.  
  220.   printf("Digita due parole\n");
  221.   scanf("%s", parola1);
  222.   scanf("%s", parola2);
  223.  
  224.   // ForEach inizializzazione a 0
  225.   for (i = 0; i < 26; i++) {
  226.     frequenze1[i] = 0;
  227.     frequenze2[i] = 0;
  228.   }
  229.  
  230.   // se parola1[0] è c
  231.   // dobbiamo incrementare il terzo elemento di frequenze1
  232.   // cioè quello di indice 2
  233.   // 'a' = 97
  234.   // 'b' = 98
  235.   // 'c' = 99
  236.  
  237.   for (i = 0; parola1[i] != '\0'; i++)
  238.     frequenze1[parola1[i] - 'a']++;
  239.  
  240.   for (i = 0; parola2[i] != '\0'; i++)
  241.     frequenze2[parola2[i] - 'a']++;
  242.  
  243.   for (i = 0; i < 26; i++)
  244.     if (frequenze1[i] != frequenze2[i])
  245.       break;
  246.  
  247.   if (i==26)
  248.     printf("Anagramma\n");
  249.   else
  250.     printf("Non anagramma\n");
  251.  
  252.   return 0;
  253. }
  254.  
  255. //rand
  256. #include <stdlib.h>
  257. #include <time.h>
  258.  
  259. srand(time(NULL));
  260. int r = min+rand()%(max-min+1);
  261.  
  262. int dado=1+rand()%6;
  263.  
  264. //BOOLEAN
  265. typedef enum {false,true} Boolean;
  266.  
  267. //SWAP
  268. void swap(int m, int n) {
  269.   int t;
  270.   t = m;
  271.   m = n;
  272.   n = t;
  273. }
  274. //SWAP PUNTATORI
  275. //chiamata
  276. swap (&a ,&b) ;
  277. //funzione
  278. void swap(int *pm, int *pn) {
  279.   int t;
  280.   t = *pm;
  281.   *pm = *pn;
  282.   *pn = t;
  283. }
  284.  
  285. //AZZERA
  286. void azzera(int *pa){
  287.     *pa = 0;
  288. }
  289.  
  290. //ARRAY->PUNTATORE
  291. *(a+i) = a[i];
  292.  
  293. //PASSAGGIO DI UN ARRAY AD UNA FUNZIONE
  294. somma(array);
  295.  
  296. int somma(int vettore[5])
  297.  
  298. //se serve la dimensione logica la calcolo con
  299. sizeof(array)/sizeof(int)
  300.  
  301. //FILE TXT
  302.     //APERTURA
  303.     FILE* fp;
  304.     fp = fopen("file.txt","wt");
  305.     if(fp==NULL){
  306.         printf("file non trovato");
  307.         exit(-1);
  308.     }
  309.     //CHIUSURA
  310.     if(fclose(fp)!=0){
  311.         printf("Errore chiusura file\n");
  312.         exit(-2);
  313.     }
  314.     //SCRITTURA
  315.     fprintf(fp,"%s ",stringa);
  316.     //LETTURA
  317.     while(fscanf(fp,"%c",&carattere)==1)
  318.         printf("%c",carattere);
  319.  
  320. //FILE BINARI
  321.     //APERTURA
  322.     FILE* fp;
  323.     fp = fopen("file.txt","wt");
  324.     if(fp==NULL){
  325.         printf("file non trovato");
  326.         exit(-1);
  327.     }
  328.     //CHIUSURA
  329.     if(fclose(fp)!=0){
  330.         printf("Errore chiusura file\n");
  331.         exit(-2);
  332.     }
  333.     //SCRITTURA
  334.     int vet[10];
  335.     fwrite(vet,sizeof(int),10,fp);
  336.     //LETTURA
  337.     int vet[40], i, n;
  338.     n = fread(vet,sizeof(int),40,fp);
  339.     for (i=0; i<n; i++)
  340.     printf("%d ",vet[i]);
  341.  
  342.     //CREA FILE DAT PERSONE
  343.     #include <stdio.h>
  344.     #include <stdlib.h>
  345.  
  346.     typedef struct{
  347.         char cognome[30];
  348.         char nome[30];
  349.         char sesso;
  350.         int anno_nascita;
  351.     } Persona;
  352.  
  353.     Persona leggiPersona() {
  354.       Persona p;
  355.       char s[2];  // stringa ausiliaria
  356.       scanf("%s%s%s%d", p.cognome, p.nome, s, &p.anno_nascita);
  357.       p.sesso = s[0];
  358.       return p;
  359.     }
  360.  
  361.     int main(){
  362.       FILE* fp;
  363.       Persona p;
  364.       int risposta;
  365.       fp = fopen("persone.dat", "wb");
  366.       if (fp == NULL) {
  367.         printf("Errore apertura file\n");
  368.         exit(2);
  369.       }
  370.       do {
  371.         p = leggiPersona();
  372.         fwrite(&p, sizeof(Persona), 1, fp);
  373.         printf("Altra persona (1=si, 0=no)?");
  374.         scanf("%d", &risposta);
  375.       } while (risposta == 1);
  376.       fclose(fp);
  377.       return 0;
  378.     }
  379.  
  380.     //LETTURA FILE PERSONE
  381.     #include <stdio.h>
  382.   #include <stdlib.h>
  383.   #define DIM 1000
  384.  
  385.   typedef struct {
  386.     char Cognome[30];
  387.     char Nome[30];
  388.     char gender;
  389.     int anno;
  390.   } Persona;
  391.  
  392.   int main() {
  393.     Persona persone[DIM];
  394.     FILE* fp;
  395.     int dl, i;
  396.     fp = fopen("persone.dat", "rb");
  397.     if (fp == NULL) {
  398.       printf("Errore apertura file\n");
  399.       exit(1);
  400.     }
  401.     dl = fread(persone, sizeof(Persona), DIM, fp);
  402.     fclose(fp);
  403.     for (i = 0; i < dl; i++) {
  404.       printf("%s %s %d %c\n", persone[i].Nome, persone[i].Cognome,
  405.             persone[i].anno, persone[i].gender);
  406.     }
  407.     return 0;
  408.   }
  409.  
  410. //ARGS
  411. #include <stdio.h>
  412.  
  413. int main(int argc, char *argv[])
  414. {
  415.     int i = 0;
  416.     printf("Numero di argomenti passati: %d\n",argc);
  417.     for(i=0;i<argc;i++)
  418.         printf("%s\t",argv[i]);
  419.     return 0;
  420. }
  421.  
  422. //MAKEFILE
  423. prog: main.o file1.o file2.o file3.o
  424.     gcc -o prog main.o file1.o file2.o file3.o
  425.  
  426. main.o: main.c file1.h file2.h
  427.     gcc -c main.c
  428.  
  429. file1.o: file1.c file3.h
  430.     gcc -c file1.c
  431.  
  432. file2.o: file2.c file3.h
  433.     gcc -c file2.c
  434.  
  435. file3.o: file3.c
  436.     gcc -c file3.c
  437.  
  438. //esempio
  439. liste: main.o liste_sequenziali.o
  440.     gcc -o liste main.o liste_sequenziali.o -lc
  441.  
  442. main.o: main.c liste_sequenziali.h
  443.     gcc -c main.c
  444.  
  445. liste_sequenziali.o: liste_sequenziali.c liste_sequenziali.h
  446.     gcc -c liste_sequenziali.c
  447.  
  448. //RICORSIONE fattoriale
  449.   #include <stdio.h>
  450.   int fact(int n)
  451.   {
  452.       if (n<=0)
  453.       return 1;
  454.       else
  455.         return n*fact(n-1);
  456.   }
  457.  
  458.   int main()
  459.   {
  460.       int fz, z = 5;
  461.       fz = fact(z);
  462.       printf("%d\n",fz);
  463.   }
  464.  
  465. //LISTE FUNZIONI PRINCIPALI
  466.   #define DIMENSIONE 100
  467.  
  468.   typedef struct {
  469.     int n_elementi;
  470.     int dati[DIMENSIONE];
  471.   } Lista;
  472.  
  473.   void nuova_lista(Lista* pl) {
  474.     *pl = NULL;
  475.   }
  476. void insTesta(Lista *l, Dato d) {
  477.   Nodo* aux = (Nodo*)malloc(sizeof(Nodo));
  478.   aux->dato = d;
  479.   aux->next = *l;
  480.   *l = aux;
  481. }
  482.  
  483.   int vuota(Lista l){
  484.       // e' vuota se la dimensione logica e' 0
  485.       return l.n_elementi == 0;
  486.   }
  487.   int piena(Lista l){
  488.       // e' piena se la dimensione logica e' pari alla dimensione massima
  489.       return l.n_elementi == DIMENSIONE;
  490.   }
  491.   void inserimento_testa(Lista* pl, int numero) {
  492.     int i;
  493.     if (piena(*pl)) {
  494.       // se la lista e' piena non posso inserire elementi
  495.       printf("Errore: lista piena\n");
  496.       exit(-1);
  497.     }
  498.     // faccio spazio per il nuovo numero spostando gli altri a destra
  499.     for (i = pl->n_elementi; i > 0; i--)
  500.       pl->dati[i] = pl->dati[i - 1];
  501.     // inserisco il nuovo numero
  502.     pl->dati[0] = numero;
  503.     // incremento la dimensione logica
  504.     pl->n_elementi++;
  505.   }
  506.  
  507.   void inserimento_ordinato(Lista* pl, int numero) {
  508.     int i;
  509.     if (piena(*pl)) {
  510.       // se la lista e' piena non posso inserire elementi
  511.       printf("Errore: lista piena\n");
  512.       exit(-1);
  513.     }
  514.     // sposto a destra tutti gli elementi della lista
  515.     // maggiori del numero da inserire
  516.     i = pl->n_elementi;
  517.     while (i > 0 && pl->dati[i - 1] > numero) {
  518.       pl->dati[i] = pl->dati[i - 1];
  519.       i--;
  520.     }
  521.     // inserisco il numero
  522.     pl->dati[i] = numero;
  523.     // incremento la dimensione logica
  524.     pl->n_elementi++;
  525.   }
  526.  
  527.   Lista* ricerca(Lista* l, char nome[]){
  528.     //Oltrepasso tutti i nodi che precedono quello da inserire o aggiornare
  529.     while(*l)
  530.     {
  531.         if(strcmp(nome,(*l)->dato.nome) == 0)
  532.             break;
  533.       l = &(*l)->next;
  534.     }
  535.     return l;
  536.   }
  537.  
  538.   void elimina(Lista* pl, int numero) {
  539.     int i = 0;
  540.     while (i < pl->n_elementi)  // scorro tutti gli elementi
  541.     {
  542.       // se ne trovo uno uguale al numero da eliminare...
  543.       if (pl->dati[i] == numero) {
  544.         int j;
  545.         // sposto a sinistra tutti gli elementi che lo seguono
  546.         for (j = i; j < pl->n_elementi - 1; j++)
  547.           pl->dati[j] = pl->dati[j + 1];
  548.         pl->n_elementi--;  // decremento la dimensione logica
  549.       } else
  550.         i++;
  551.     }
  552.   }
  553.  
  554.   int lunghezza(Lista l) {
  555.     // Corrisponde alla dimensione logica della lista
  556.     return l.n_elementi;
  557.   }
  558.  
  559.   void stampa(Lista l) {
  560.     while(l){
  561.       printf("%d ", l->dato);
  562.       l = l->next;
  563.     }
  564.     printf("\n");
  565.   }
  566.  
  567. //NODO
  568.  
  569. typedef int Dato;
  570.  
  571. typedef struct nodo {
  572.   Dato dato;
  573.   struct nodo* next;
  574. } Nodo;
  575.  
  576. typedef Nodo* Lista;
  577.  
  578.  
  579. //UNION
  580. typedef union
  581. {int a ;
  582. float b ;}
  583. numero ;
  584. numero n ;
  585. n . a = 3;
  586. n . b = 3.5;
  587. printf ( " % d " , n . a );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement