Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "object.h"
- #include "array.h"
- int main()
- {
- Array a = newArray();
- a->setDim(a,10);
- a->random(a);
- a->print(a);
- a->iSort(a);
- a->print(a);
- a->rimuovi(a);
- a->print(a);
- a->freeArray(a);
- a->print(a);
- return 0;
- }
- // object.h
- #ifndef _ob_h
- #define _ob_h
- typedef struct object object;
- typedef object *Object;
- typedef void (*modify)(void *,int);
- typedef void (*set)(void *,char *);
- typedef int (*get)(void *);
- typedef void (*free1)(void *);
- typedef void (*acquisisci)(void *);
- typedef int (*confronta)(void *, void *);
- struct object{
- int x;
- char nome[32];
- char cognome[32];
- modify modifica;
- set setnome;
- set setcognome;
- get geteta;
- free1 freeObject;
- };
- void modifica(Object, int);
- Object costr();
- void setnome(Object, char *);
- void setcognome(Object, char *);
- int geteta(Object);
- void freeObject(Object);
- #endif // _ob_h
- // object.c
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "object.h"
- void modifica(Object this, int value){
- this->x = value;
- }
- Object costr(){
- Object this = (Object)malloc(sizeof(object));
- this->modifica = (modify)modifica;
- this->setnome = (set)setnome;
- this->setcognome = (set)setcognome;
- this->geteta = (get)geteta;
- this->freeObject = (free1)freeObject;
- return this;
- }
- void setnome(Object this, char *buff){
- strcpy(this->nome,buff);
- }
- void setcognome(Object this, char *buff){
- strcpy(this->cognome,buff);
- }
- int geteta(Object this){
- return this->x;
- }
- void freeObject(Object this){
- free(this);
- this = NULL;
- }
- // array.h
- #ifndef _arr_h
- #define _arr_h
- #include "object.h"
- typedef struct array array;
- typedef array *Array;
- struct array{
- int dimensione;
- int *vettore;
- modify setDim;
- acquisisci getElems;
- acquisisci print;
- acquisisci iSort;
- acquisisci rimuovi;
- confronta equals;
- acquisisci freeArray;
- acquisisci random;
- };
- Array newArray();
- void setDim(Array, int);
- void getElems(Array);
- void print(Array);
- void iSort(Array);
- int equals(Array, Array);
- void rimuovi(Array);
- void freeArray(Array);
- void random(Array);
- #endif // _arr_h
- // array.c
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "array.h"
- #include "object.h"
- Array newArray(){
- Array this = (Array)malloc(sizeof(array));
- this->vettore = NULL;
- this->dimensione = 0;
- this->setDim = (modify)setDim;
- this->getElems = (acquisisci)getElems;
- this->print = (acquisisci)print;
- this->iSort = (acquisisci)iSort;
- this->equals = (confronta)equals;
- this->rimuovi = (acquisisci)rimuovi;
- this->freeArray = (acquisisci)freeArray;
- this->random = (acquisisci)random;
- return this;
- }
- void setDim(Array this, int value){
- this->vettore = (int *)malloc(value * sizeof(int));
- this->dimensione = value;
- }
- void getElems(Array this){
- int i;
- for(i = 0; i < this->dimensione; i++){
- printf("%d^ elemento: ", i+1);
- scanf("%d", &(this->vettore[i]));
- }
- }
- void print(Array this){
- int i;
- puts("Ecco il vettore:");
- for(i = 0; i < this->dimensione; i++)
- printf("%d -> ", this->vettore[i]);
- puts("FINE");
- }
- void iSort(Array this){
- int i, j, app;
- for (i = 1; i < this->dimensione; i++) {
- app = this->vettore[i];
- j = i - 1;
- while(j >= 0 && this->vettore[j]>app) {
- this->vettore[j+1] = this->vettore[j];
- j--;
- }
- this->vettore[j+1] = app;
- }
- }
- int equals(Array this, Array a){
- int i, contr = 0;
- if(this->dimensione == a->dimensione){
- puts("Dimesioni uguali.");
- for(i = 0; i < a->dimensione; i++)
- if(this->vettore[i] != a->vettore[i]){
- contr = 1;
- break;
- }
- if(contr)
- puts("...ma gli elementi sono diversi!");
- else
- puts("...e non solo, ma hanno pure elementi tutti uguali!");
- return 1;
- }
- else{
- puts("Array non confrontabili.");
- if(this->dimensione < a->dimensione)
- puts("[secondo array piu' grande del primo].");
- else
- puts("[primo array piu' grande del secondo].");
- return 0;
- }
- }
- void rimuovi(Array this){
- int i, choice;
- puts("Quale indice vuoi rimuovere?");
- scanf("%d", &choice);
- for(i = choice; i < this->dimensione - 1; i++){
- this->vettore[i] = this->vettore[i+1];
- }
- this->dimensione--;
- this->vettore = (int *)realloc(this->vettore,this->dimensione*sizeof(int));
- }
- void freeArray(Array this){
- this->dimensione = 0;
- free(this->vettore);
- this->vettore = NULL;
- }
- void random(Array this){
- int i;
- for(i = 0; i < this->dimensione; i++)
- this->vettore[i] = rand() % this->dimensione;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement