sexta-feira, 16 de setembro de 2011

Classe Array -> manipulação de vetores - source


-----------------------
file : array.cpp
-----------------------

#include "array.h"
/**
* ...
* @autor Daniel Schreiner
*/

Array::Array(int tamanho){
myTamanho = tamanho;
myDados = new int[tamanho];


}

Array::~Array(){
delete[] myDados;
delete[] tmpDados;

}
int Array::get(unsigned i) const {
return myDados[i];
}

void Array::set(unsigned i, int valor ) {
myDados[i] = valor;

}
void Array::print(std::ostream& out) const {

for (int i = 0 ; i < myTamanho ; i++) {
out << myDados[i] << std::endl;
}


}

/**
* Metodo resize
* redimensiona matriz
*/
void Array::resize(unsigned i) {
tmpDados = new int[i];

for (int x = 0 ; x < i ; x++ ){
if (x > myTamanho){
tmpDados[x] = 0;
}
else {
tmpDados[x] = myDados[x];
}

}

myTamanho = i;
myDados = tmpDados;



}

/**
* retorna quantidade de elementos da matriz
*/

int Array::length(){
return myTamanho;
}

/**
* ...
* coloca em ordem crescente elementos da matriz
*/


void Array::sort(){
int j,i,key;
for (j = 1 ; j < myTamanho ; j++){
key = myDados[j];
i = j - 1;
while (i > (-1) && myDados[i] > key) {
myDados[i + 1] = myDados[i];
i = i -1 ;

}
myDados[i + 1] = key;

}


}

/**
* ...
* adiciona um elemento no final da matriz
*/

void Array::push(int i){

this->resize(myTamanho+1);
myDados[myTamanho-1] = i;

}

/**
* ...
* remove um elemento da matriz
* int i: indice do elemento a ser removido
*/

void Array::deleteIndex(int i){
if (i <= myTamanho){

tmpDados = new int[myTamanho-1];

for (int j=0; j <= myTamanho; j++) {
if (j < i){
tmpDados[j] = myDados[j];

}
else if (j > i){
tmpDados[j-1] = myDados[j];
}

}
myDados = tmpDados;
this->resize(myTamanho-1);

}
}

/**
* ...
* insere um elemento na matriz
* int i: indice de onde deve ser inserido o elemento
* int val: valor a ser inserido no elemento de indice i
*/

void Array::insert(int i, int val){
if (i <= myTamanho){
this->resize(myTamanho+1);
tmpDados = new int[myTamanho+1];

for (int j=0; j <= myTamanho; j++) {
if (j < i){
tmpDados[j] = myDados[j];

}
else if (j == i) {
tmpDados[j] = val;
}
else if (j > i){
tmpDados[j] = myDados[j-1];
}

}

myDados = tmpDados;


}
}

-----------------------
file : array.h
-----------------------

#ifndef INT_ARRAY_H
#define INT_ARRAY_H
/**
* ...
* @autor Daniel Schreiner
*/

#include <iostream>

class Array {
private:
int* myDados;
int myTamanho;
int* tmpDados;


public:
//aloca memopria suficiente para guardar tamanho inteiros

Array(int tamanho);

~Array();

int get(unsigned i) const;

void set(unsigned i, int valor);

void print(std::ostream& out = std::cout) const;

void resize(unsigned i);

int length(void);

void sort(void);

void push(int i);

void deleteIndex(int i);

void insert(int i, int val);

};

#endif