0
When I run the first consultList() data is shown in the console, however, after executing the bubbleSort() the query does not display the data.
Follow the code below:
#include <iostream>
#define TAM 10 // Define constante para o tamanho do vetor de dados
/*
* Nesta questão foi escolhido trabalhar com Lista pois
*/
using namespace std;
struct Aluno {
int RU;
string nome;
string email;
};
struct Lista {
Aluno dados[TAM];
int ult;
};
Aluno criaAluno(int RU, string nome, string email) {
Aluno aluno;
aluno.nome = nome;
aluno.email = email;
aluno.RU = RU;
return aluno;
}
void iniciarLista(Lista *lista) {
lista->ult = -1;
}
bool listaCheia(Lista *lista) {
return lista->ult == TAM - 1;
}
void consultarLista(Lista *lista) {
for (int i = 0; i <= lista->ult; ++i) {
cout << "Ru: " << lista->dados[i].RU << endl;
cout << "Nome: " << lista->dados[i].nome << endl;
cout << "Email: " << lista->dados[i].email << endl << endl;
}
}
void insereNoFim(Lista *lista, Aluno aluno) {
if (listaCheia(lista)) {
cout << "Lista cheia!" << endl;
return;
}
lista->ult++;
lista->dados[lista->ult] = aluno;
}
void insereDadosNaLista(Lista *lista) {
insereNoFim(lista, criaAluno(2524388, "Artur asd", "[email protected]"));
insereNoFim(lista, criaAluno(1, "Lorem", "[email protected]"));
insereNoFim(lista, criaAluno(2, "Ipsum Dassi", "[email protected]"));
insereNoFim(lista, criaAluno(3, "Artorios", "[email protected]"));
insereNoFim(lista, criaAluno(4, "Marcos", "[email protected]"));
insereNoFim(lista, criaAluno(5, "Antonio", "[email protected]"));
insereNoFim(lista, criaAluno(6, "Marcus", "[email protected]"));
insereNoFim(lista, criaAluno(7, "Felipe", "[email protected]"));
insereNoFim(lista, criaAluno(8, "Daniele", "[email protected]"));
insereNoFim(lista, criaAluno(9, "Soulja", "[email protected]"));
}
void buubleSort(Lista *lista) {
for (int i = 0; i <= lista->ult; ++i) {
for (int j = 0; j <= lista->ult; ++j) {
Aluno atual = lista->dados[j];
Aluno prox = lista->dados[j + 1];
if (atual.RU > prox.RU) {
lista->dados[j] = prox;
lista->dados[j + 1] = atual;
}
}
}
}
int main() {
Lista alunos;
iniciarLista(&alunos);
insereDadosNaLista(&alunos);
consultarLista(&alunos); //Quando executado aqui, os valores aparecem
buubleSort(&alunos);
consultarLista(&alunos); //Aqui não
cout << alunos.dados[1].nome << endl;
return 0;
}
In
buubleSort()
, function writes outside the array boundariesLista *lista->dados
whenj = 9
. The problem could be fixed if you replace the linefor (int j = 0; j <= aux.ult; ++j)
forfor (int j = 0; j < aux.ult; ++j)
. But it seems to me that this function has more problems than this since you do not apply the ordering directly on the varivellLista* lista
, but in the copyLista aux
.– user142154