Ir para conteúdo
Fórum Script Brasil

lucca.bertolucci

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Sobre lucca.bertolucci

lucca.bertolucci's Achievements

0

Reputação

  1. #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?
  2. Você deve implementar uma lista duplamente encadeada adicionando o método inverte(), que inverte a ordem dos elementos da lista sem modificar o conteúdo de cada nó. O método não pode fazer alteração do valor armazenado nos nós, podendo alterar somente as referências aos atributos próximo e anterior dos mesmos. Ou seja, não serão aceitas soluções que façam as trocas de valores dos nós, os nós devem mudar de posição, por meio da manipulação de ponteiros. Obs: não devem ser utilizadas estruturas de dados adicionais para a solução do problema não consegui fazer a função inverte funcionar meu código: #include <iostream> using namespace std; typedef int dado; class noh { friend class lista; private: dado valor; noh* proximo; noh* anterior; public: noh(dado d); }; noh::noh(dado d) { valor = d; proximo = NULL; anterior = NULL; } class lista { private: noh* primeiro; noh* ultimo; int tamanho; public: lista(); ~lista(); bool listaVazia(){return primeiro == NULL;}; void insere(dado valor); lista & operator=(const lista& L2); void imprime(); void inverte(); void imprimeReverso(); }; lista::lista() { primeiro = NULL; ultimo = NULL; tamanho = 0; } lista::~lista( ) { noh* aux = primeiro; noh* temp; while (aux != NULL) { temp = aux; aux = aux->proximo; delete temp; } primeiro = NULL; ultimo = NULL; tamanho = 0; } void lista::insere(dado valor) { noh* novo = new noh(valor); if(listaVazia()){ primeiro = novo; }else{ ultimo->proximo = novo; novo->anterior = ultimo; } ultimo = novo; tamanho++; } void lista::inverte() { noh* novo = new noh(valor); } lista & lista::operator=(const lista& L2){ noh* aux; if(!listaVazia()){ aux = primeiro; noh* temp; cout << aux->valor << endl; while (aux != NULL) { temp = aux; aux = aux->proximo; delete temp; } primeiro = NULL; ultimo = NULL; } aux = L2.primeiro; while (aux != NULL) { insere(aux->valor); aux = aux->proximo; } return *this; } /* void lista::inverte(){ noh* aux22 = new noh; aux22 = primeiro; primeiro = ultimo; ultimo = aux22; for(int i = 0; i < tamanho; i++){ noh* ptrAux; ptrAux = aux22->anterior; aux22->anterior = aux22->proximo; aux22->proximo = ptrAux; aux22 = aux22->anterior; } } */ void lista::imprime(){ noh* aux = primeiro; while(aux != NULL){ cout << aux->valor << " "; aux = aux->proximo; } cout << endl; } void lista::imprimeReverso(){ noh* aux = ultimo; while(aux != NULL){ cout << aux->valor << " "; aux = aux->anterior; } cout << endl; } int main() { lista minhalista; char opcao; while (opcao != 'Q') { cout << "================= Menu ====================" << endl; cout << endl << "I: Insere uma palavra na lista original" << endl; //cout << endl << "X: Executa a função inverte" << endl; cout << endl << "P: Imprime a lista em ordem direta" << endl; cout << endl << "R: Imprime a lista em ordem reversa" << endl; cout << endl << "Q: Encerra os comandos" << endl; cin >> opcao; switch (opcao) { case 'I': int valor; cin >> valor; minhalista.insere(valor); cout << "Voce inseriu um novo dado" << endl; break; /* case 'x': minhalista.inverte(); cout << "Você inseriu um novo dado"; break; */ case 'P': minhalista.imprime(); break; case 'R': minhalista.imprimeReverso(); break; } }; return 0; }
×
×
  • Criar Novo...