lucca.bertolucci Postado Abril 18, 2022 Denunciar Share Postado Abril 18, 2022 #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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
lucca.bertolucci
Meu grupo chegou até aqui, todas as funções funcionam, menos a ordenação.
Alguém pode nos dar uma luz?
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.