Advertisement
daniele2013

boh

Oct 28th, 2014
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.91 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include "object.h"
  5. #include "array.h"
  6.  
  7. int main()
  8. {
  9.     Array a = newArray();
  10.     a->setDim(a,10);
  11.     a->random(a);
  12.     a->print(a);
  13.     a->iSort(a);
  14.     a->print(a);
  15.     a->rimuovi(a);
  16.     a->print(a);
  17.     a->freeArray(a);
  18.     a->print(a);
  19.     return 0;
  20. }
  21.  
  22. // object.h
  23. #ifndef _ob_h
  24. #define _ob_h
  25.  
  26. typedef struct object object;
  27. typedef object *Object;
  28. typedef void (*modify)(void *,int);
  29. typedef void (*set)(void *,char *);
  30. typedef int (*get)(void *);
  31. typedef void (*free1)(void *);
  32. typedef void (*acquisisci)(void *);
  33. typedef int (*confronta)(void *, void *);
  34.  
  35. struct object{
  36.     int x;
  37.     char nome[32];
  38.     char cognome[32];
  39.     modify modifica;
  40.     set setnome;
  41.     set setcognome;
  42.     get geteta;
  43.     free1 freeObject;
  44. };
  45.  
  46. void modifica(Object, int);
  47. Object costr();
  48. void setnome(Object, char *);
  49. void setcognome(Object, char *);
  50. int geteta(Object);
  51. void freeObject(Object);
  52.  
  53. #endif // _ob_h
  54.  
  55. // object.c
  56.  
  57. #include <stdio.h>
  58. #include <stdlib.h>
  59. #include <string.h>
  60.  
  61. #include "object.h"
  62.  
  63. void modifica(Object this, int value){
  64.     this->x = value;
  65. }
  66.  
  67. Object costr(){
  68.     Object this = (Object)malloc(sizeof(object));
  69.     this->modifica = (modify)modifica;
  70.     this->setnome = (set)setnome;
  71.     this->setcognome = (set)setcognome;
  72.     this->geteta = (get)geteta;
  73.     this->freeObject = (free1)freeObject;
  74.     return this;
  75. }
  76.  
  77. void setnome(Object this, char *buff){
  78.     strcpy(this->nome,buff);
  79. }
  80.  
  81. void setcognome(Object this, char *buff){
  82.     strcpy(this->cognome,buff);
  83. }
  84.  
  85. int geteta(Object this){
  86.     return this->x;
  87. }
  88.  
  89. void freeObject(Object this){
  90.     free(this);
  91.     this = NULL;
  92. }
  93.  
  94. // array.h
  95.  
  96. #ifndef _arr_h
  97. #define _arr_h
  98.  
  99. #include "object.h"
  100.  
  101. typedef struct array array;
  102. typedef array *Array;
  103.  
  104. struct array{
  105.     int dimensione;
  106.     int *vettore;
  107.     modify setDim;
  108.     acquisisci getElems;
  109.     acquisisci print;
  110.     acquisisci iSort;
  111.     acquisisci rimuovi;
  112.     confronta equals;
  113.     acquisisci freeArray;
  114.     acquisisci random;
  115. };
  116.  
  117. Array newArray();
  118. void setDim(Array, int);
  119. void getElems(Array);
  120. void print(Array);
  121. void iSort(Array);
  122. int equals(Array, Array);
  123. void rimuovi(Array);
  124. void freeArray(Array);
  125. void random(Array);
  126.  
  127. #endif // _arr_h
  128.  
  129. // array.c
  130.  
  131. #include <stdio.h>
  132. #include <stdlib.h>
  133. #include <string.h>
  134.  
  135. #include "array.h"
  136. #include "object.h"
  137.  
  138. Array newArray(){
  139.     Array this = (Array)malloc(sizeof(array));
  140.     this->vettore = NULL;
  141.     this->dimensione = 0;
  142.     this->setDim = (modify)setDim;
  143.     this->getElems = (acquisisci)getElems;
  144.     this->print = (acquisisci)print;
  145.     this->iSort = (acquisisci)iSort;
  146.     this->equals = (confronta)equals;
  147.     this->rimuovi = (acquisisci)rimuovi;
  148.     this->freeArray = (acquisisci)freeArray;
  149.     this->random = (acquisisci)random;
  150.     return this;
  151. }
  152.  
  153. void setDim(Array this, int value){
  154.     this->vettore = (int *)malloc(value * sizeof(int));
  155.     this->dimensione = value;
  156. }
  157.  
  158. void getElems(Array this){
  159.     int i;
  160.     for(i = 0; i < this->dimensione; i++){
  161.         printf("%d^ elemento: ", i+1);
  162.         scanf("%d", &(this->vettore[i]));
  163.     }
  164. }
  165.  
  166. void print(Array this){
  167.     int i;
  168.     puts("Ecco il vettore:");
  169.     for(i = 0; i < this->dimensione; i++)
  170.         printf("%d -> ", this->vettore[i]);
  171.     puts("FINE");
  172. }
  173.  
  174. void iSort(Array this){
  175.   int i, j, app;
  176.   for (i = 1; i < this->dimensione; i++) {
  177.     app = this->vettore[i];
  178.     j = i - 1;
  179.     while(j >= 0 && this->vettore[j]>app) {
  180.       this->vettore[j+1] = this->vettore[j];
  181.       j--;
  182.     }
  183.     this->vettore[j+1] = app;
  184.   }
  185. }
  186.  
  187. int equals(Array this, Array a){
  188.     int i, contr = 0;
  189.     if(this->dimensione == a->dimensione){
  190.         puts("Dimesioni uguali.");
  191.         for(i = 0; i < a->dimensione; i++)
  192.             if(this->vettore[i] != a->vettore[i]){
  193.                 contr = 1;
  194.                 break;
  195.             }
  196.         if(contr)
  197.             puts("...ma gli elementi sono diversi!");
  198.         else
  199.             puts("...e non solo, ma hanno pure elementi tutti uguali!");
  200.         return 1;
  201.     }
  202.     else{
  203.         puts("Array non confrontabili.");
  204.         if(this->dimensione < a->dimensione)
  205.             puts("[secondo array piu' grande del primo].");
  206.         else
  207.             puts("[primo array piu' grande del secondo].");
  208.         return 0;
  209.     }
  210. }
  211.  
  212. void rimuovi(Array this){
  213.     int i, choice;
  214.     puts("Quale indice vuoi rimuovere?");
  215.     scanf("%d", &choice);
  216.     for(i = choice; i < this->dimensione - 1; i++){
  217.         this->vettore[i] = this->vettore[i+1];
  218.     }
  219.     this->dimensione--;
  220.     this->vettore = (int *)realloc(this->vettore,this->dimensione*sizeof(int));
  221. }
  222.  
  223. void freeArray(Array this){
  224.     this->dimensione = 0;
  225.     free(this->vettore);
  226.     this->vettore = NULL;
  227. }
  228.  
  229. void random(Array this){
  230.     int i;
  231.     for(i = 0; i < this->dimensione; i++)
  232.         this->vettore[i] = rand() % this->dimensione;
  233. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement