Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Tartaglia - Funzioni.h

Funzioni.h

Caricato da: Poggi Marco
Scarica il programma completo

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <string.h>
  5.  
  6. #ifndef FUNZIONI_TARTAGLIA
  7. #define FUNZIONI_TARTAGLIA
  8.  
  9. typedef struct Tvettore
  10. {
  11.            int *v;
  12.            int elementi,caricati;      
  13. }Tvettore;
  14.  
  15. void azzera(struct Tvettore *, int);
  16. void distruggi(struct Tvettore *);
  17. void ciclo(int);
  18. void stampa(struct Tvettore, int);
  19. void somma(struct Tvettore, struct Tvettore *);
  20. void eguaglia(struct Tvettore, struct Tvettore *);
  21. int domanda(const char *, int, int);
  22. void centra(char *, char, int);
  23.  
  24. void azzera(struct Tvettore *linea, int dimensione)
  25. {
  26.         linea->elementi=abs(dimensione);
  27.         if ((linea->elementi == 0) || (linea->elementi > 2000))
  28.                 linea->elementi=50;
  29.         linea->v=(int*) (malloc(linea->elementi * sizeof(int)));
  30.         linea->v[0]=1;
  31.         linea->caricati=1;
  32.         int i;
  33.         for(i=1; i<linea->elementi; i++)
  34.         {
  35.                 linea->v[i]=0;
  36.         }
  37. }
  38.  
  39. void ciclo(int linee)
  40. {
  41.         Tvettore attuale, successiva;
  42.         int i=1;
  43.         azzera(&attuale, 20);
  44.         azzera(&successiva, 20);
  45.         printf("\n\n");
  46.         stampa(attuale, i);
  47.         while (i<linee)
  48.         {
  49.                 i++;
  50.                 somma(attuale, &successiva);
  51.                 stampa(successiva, i);
  52.                 eguaglia(successiva, &attuale);
  53.         }
  54.         distruggi(&attuale);
  55.         distruggi(&successiva);
  56. }
  57.  
  58. void distruggi(struct Tvettore *linea)
  59. {
  60.         if (linea->v != NULL)
  61.         {
  62.                 free(linea->v);
  63.                 linea->v=NULL;
  64.                 linea->elementi=0;
  65.                 linea->caricati=0;
  66.         }
  67. }
  68.  
  69. void stampa(struct Tvettore linea, int indice)
  70. {
  71.         int i=0;
  72.         char numero[40]="", sequenza[150]=" ";
  73.         printf("%3d|", indice);
  74.         for (i=0; i<linea.caricati; i++)
  75.         {
  76.                 sprintf(numero, "%d ", linea.v[i]);
  77.                 strcat(sequenza, numero);
  78.         }
  79.         centra(sequenza, ' ', 74);
  80.         printf("%s\n", sequenza);
  81. }
  82.  
  83. void somma(struct Tvettore sopra, struct Tvettore *sotto)
  84. {
  85.         sotto->caricati=sopra.caricati + 1;
  86.         if (sotto->caricati < sotto->elementi)
  87.         {
  88.                 sotto->v[0]=1;
  89.                 int i;
  90.                 for (i=1; i<sopra.caricati; i++)
  91.                 {
  92.                         (*sotto).v[i]=sopra.v[i - 1] + sopra.v[i];
  93.                 }
  94.                 sotto->v[sotto->caricati - 1]=1;
  95.                
  96.         }
  97. }
  98.  
  99. void eguaglia(struct Tvettore origine, struct Tvettore *travaso)
  100. {
  101.         if (origine.caricati < travaso->elementi)
  102.         {
  103.                 int i;
  104.                 travaso->caricati=origine.caricati;
  105.                 for (i=0; i < origine.caricati; i++)
  106.                 {
  107.                         travaso->v[i]=origine.v[i];
  108.                 }
  109.         }
  110. }
  111.  
  112. int domanda(const char *messaggio, int linf, int lsup)
  113. {
  114.         int esito=0, test=1;
  115.         char numero[80]="";
  116.         while (test)
  117.         {
  118.                 test=0;
  119.                 printf("\n%s", messaggio);
  120.                 scanf(" %s", numero);
  121.                 while (getchar() != '\n');
  122.                 esito=atoi(numero);
  123.                 if (esito < linf)
  124.                 {
  125.                         test=1;
  126.                         printf("Inserire un valore superiore a %d\n", linf);
  127.                 }
  128.                 if (esito > lsup)
  129.                 {
  130.                         test=1;
  131.                         printf("Inserire un valore inferiore a %d \n", lsup);
  132.                 }
  133.         }
  134.         return esito;
  135. }
  136.  
  137. void centra(char *frase, char carattere, int lunghezza)
  138. {
  139.         int parziali, j, i;
  140.         char risultato[150] = "";
  141.         if ((frase != NULL) && (lunghezza < 120))
  142.         {
  143.                 if (lunghezza > strlen(frase))
  144.                 {
  145.                         parziali=(int)(lunghezza - strlen(frase)) / 2;
  146.                         i=0;
  147.                         while (i < parziali)
  148.                         {
  149.                                 risultato[i]=carattere;
  150.                                 i++;
  151.                         }
  152.                         risultato[i]='\0';
  153.                         strcat(risultato, frase);
  154.                         j=strlen(risultato);
  155.                         while (j < lunghezza)
  156.                         {
  157.                                 risultato[j]=carattere;
  158.                                 j++;
  159.                         }
  160.                         risultato[j]='\0';
  161.                         strcpy(frase, risultato);
  162.                 }
  163.         }
  164. }
  165.  
  166. #endif