#include <iostream>
#include <string.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
struct empresas;
int redimensiona();
void incluir();
void excluir();
int listar();
void alterar();
void mergesort();
void merge(empresas *vet, int inicio, int meio, int fim);
struct empresas{
int identificador;
string nome;
int anocriacao;
string porte;
string areanegocio;
};
void mergesort(empresas *vet, int inicio, int fim){// codigo inspirado no v�deo https://www.youtube.com/watch?v=RZbg5oT5Fgw e em https://www.youtube.com/watch?v=5prE6Mz8Vh0
int meio;
if (inicio < fim){
meio = floor((inicio + fim)/2);
mergesort(vet, inicio, meio);
mergesort(vet, meio+1, fim);
merge(vet, inicio, meio, fim);
}
}
void merge(empresas *vet, int inicio, int meio, int fim){
empresas *vet2;
int p1, p2, tamanho, fim1=0, fim2=0;
tamanho = fim - inicio+1;
p1 = inicio;
p2 = meio + 1;
vet2 = new empresas[tamanho];
if (vet2 != NULL){
for(int i=0; i < tamanho; i++){
if(!fim1 && !fim2){
if(vet[p1].identificador < vet[p2].identificador){
vet2[i] = vet[p1];
p1++;}
else{
vet2[i] = vet[p2];
p2++;}
if (p1 > meio)
fim1=1;
if (p2 > fim)
fim2= 1;
}
else{
if(!fim1){
vet2[i] = vet[p1];
p1++;}
else{
vet2[i] = vet[p2];
p2++;}
}
}
for(int j= 0; j<tamanho; j++){
vet[inicio] = vet2[j];
inicio++;}
}
delete[] vet2;
}
empresas* redimensiona(empresas *dados,int &tam){///////arrumar;
int aux;
aux = tam * 0.2;
tam = tam + aux;
empresas *novo = new empresas[tam];
memcpy(novo, dados, (sizeof(empresas) * tam));
delete [] dados;
return novo;
}
void incluir(empresas *vet,int &tamanho, int &preenchido, int &i){
int op=1;
while (op != 2){
cout << "Aperte (1) para incluir \n" << "Aperte (2) para voltar para o menu \n";
cin >> op;
system("clear||cls");
if (op == 1){
int j=0;
if (preenchido+1 < tamanho){
cout << "identificador da empresa (numero): \n";
cin >> vet[i].identificador;
system("clear||cls");
cout << "Nome da Empresa: \n";
cin.ignore();
getline(cin, vet[i].nome);
system("clear||cls");
cout << "Ano de Criacao: \n";
cin >> vet[i].anocriacao;
system("clear||cls");
cout << "Porte da Empresa: \n";
cin.ignore();
getline(cin, vet[i].porte);
system("clear||cls");
cout << "Area do Negocio: \n";
cin.ignore();
getline(cin, vet[i].areanegocio);
system("clear||cls");
preenchido++;
}
else{
while((j < tamanho) and (vet[j].identificador != -1)){
j++;}
if(j < tamanho){
cout << "identificador da empresa (numero): \n";
cin >> vet[j].identificador;
system("clear||cls");
cout << "Nome da Empresa: \n";
cin.ignore();
getline(cin, vet[j].nome);
system("clear||cls");
cout << "Ano de Criacao: \n";
cin >> vet[j].anocriacao;
system("clear||cls");
cout << "Porte da Empresa: \n";
cin.ignore();
getline(cin, vet[j].porte);
system("clear||cls");
cout << "Area do Negocio: \n";
cin.ignore();
getline(cin, vet[j].areanegocio);
system("clear||cls");
}
else{
vet = redimensiona(vet, tamanho); //vetor recebe o valor redimensionado
cout << "identificador da empresa (numero): \n";
cin >> vet[i].identificador;
system("clear||cls");
cout << "Nome da Empresa: \n";
cin.ignore();
getline(cin, vet[i].nome);
system("clear||cls");
cout << "Ano de Criacao: \n";
cin >> vet[i].anocriacao;
system("clear||cls");
cout << "Porte da Empresa: \n";
cin.ignore();
getline(cin, vet[i].porte);
system("clear||cls");
cout << "Area do Negocio: \n";
cin.ignore();
getline(cin, vet[i].areanegocio);
system("clear||cls");
preenchido++;
}
}
i++;
}
}
}
void excluir(empresas *vet, int tamanho, int preenchido){
int identificador;
int i=0, j=0, k=-1;
cout << "Digite o identificador que voce deseja excluir: \n";
while ((i < tamanho) and (k < preenchido)){
if (vet[i].identificador != -1){
cout << vet[i].identificador << " " << vet[i].nome << endl;
}
i++;
k++;
}
cin >> identificador;
while (j < tamanho){
if (vet[j].identificador == identificador)
vet[j].identificador = -1;
j++;
}
}
int listar(empresas *vet, int ocupado){
int i=0, k=-1, j=0;
while (k < ocupado){
if(vet[i].identificador == -1){
k++;
i++;
}
else{
cout << "Identificador: " << vet[i].identificador << endl << "Nome da Empresa: " << vet[i].nome << endl << "Ano de Criacao: " << vet[i].anocriacao << endl << "Area do Negocio: " << vet[i].areanegocio << endl << "Porte da Empresa: " << vet[i].porte << endl << "----------------------------------" << endl;
k++;
i++;
}
}
while (j != 2){
cout << "Aperte 2 para voltar ao menu \n";
cin >> j;
}
if (j == 2){
return 7;
}
}
void alterar(empresas *vet, int preenchido, int tamanho){
int identificador, i=0, k=0, p=0, x=-1;// indices e identificador
cout << "Digite o identificador que deseja alterar \n(Caso de identificadores iguais, sera alterado aquele que aparece mais ao topo): \n";
while ((p < tamanho) and (x < preenchido)){
if (vet[p].identificador != -1){
cout << vet[p].identificador << " " << vet[p].nome << endl;
}
p++;
x++;}
cin >> identificador;
while ((k < preenchido) and (vet[i].identificador != identificador)){
i++;
k++;
}
system("clear||cls");
cout << "identificador da empresa (numero): \n";
cin >> vet[i].identificador;
system("clear||cls");
cout << "Nome da Empresa: \n";
cin.ignore();
getline(cin, vet[i].nome);
system("clear||cls");
cout << "Ano de Criacao: \n";
cin >> vet[i].anocriacao;
system("clear||cls");
cout << "Porte da Empresa: \n";
cin.ignore();
getline(cin, vet[i].porte);
system("clear||cls");
cout << "Area do Negocio: \n";
cin.ignore();
getline(cin, vet[i].areanegocio);
system("clear||cls");
}
int main(){
int opcao = 7, tam = 5, aux, indice = 0, inicio;
int preenchido = -1;
empresas *vetor = new empresas[tam];
while(opcao != 6){
system("clear||cls"); // para limpar a tela em tanto em windows quanto em linux
cout << "Digite uma opcao:" << endl << "incluir (1)" << endl << "excluir (2)" << endl << "listar (3)" << endl << "alterar (4)" << endl << "ordenar (5)" << endl << "sair (6)" << endl;
cin >> opcao;
system("clear||cls"); // para limpar a tela em tanto em windows quanto em linux
if (opcao == 1){
incluir(vetor, tam, preenchido, indice);
opcao = 7;
}
if (opcao == 2){
excluir(vetor, tam, preenchido);
opcao = 7;
}
if (opcao == 3){
opcao = listar(vetor, preenchido);
}
if (opcao == 4){
alterar(vetor, preenchido, tam);
opcao = 7;
}
if (opcao == 5){
inicio = 0;
mergesort(vetor, inicio, preenchido);
}
}
}
Meu grupo chegou até aqui, todas as funções funcionam, menos a ordenação.
Alguém pode nos dar uma luz?