Ir ao conteúdo
  • Cadastre-se

Trabalho Faculdade


erysouza

Posts recomendados

Olá pessoal! Tenho esse trabalho para apresentar na faculdade com esses 4 métodos de ordenação mas,estou com dificuldade pra chama a ordenação MergeSort,quando entro com a opção 6 do menu é apresentado um erro já modifiquei de todo jeito mas não consegui resolver se alguém pude me

ajudar fico grato. Pois foi a única função que não consegui fazer funcionar no de do código do programa que fiz. Porque se for executado este código do "MergeSort" isolado ele roda normalmente.

O código do programa que fiz esta ai qualquer coisa estou no aguardo.

só não entendi porque está dando este erro!:confused:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include <stdbool.h>
void preenche(int vetp[])
{
int x;
for (x=0; x<5; x++)
{
//[%d] e o x vão mostrar a posição do número digitado

//%d e x+1 Mostra a sequencia dos numeros inserido

printf ("indice:\t[%d] Digite o %d\xa7 numero: ",x,x+1);
scanf("%d",&vetp[x]);
printf ("\n");
}
}

/*--------------Imprime o conteúdo do vetor-------------------*/
void imprimevet(int vetp[])
{
int x;
for (x=0; x<5; x++)
printf (" [%d] %d\t",x,vetp[x]);
}

/*-------------------FUNÇÃO Insertion Sort-------------------------*/

void InsertionSort(int vetp[])
{
int aux, i,t=5, j;
for(j = 0; j <= t - 1; j++)
{
aux = vetp[j];
i = j - 1;

while((i >= 0) && (vetp[i] > aux))
{
vetp[i+1] = vetp[i];
vetp[i] = aux;
i--;
}
}
printf("Insertion Sort: ");
for(i = 0; i <= t - 1; i++)
{
printf("%d\t", vetp[i]);
}
}

/*-------------------FUNÇÃO Selection Sort-------------------------*/

void SelectionSort(int vetp[])
{
int i, j,t=5, aux, menor;
for(i = 0; i < t - 1; i++)
{
menor = i;
for(j = i + 1; j < t ; j++)
{
if(vetp[menor] > vetp[j])
{
menor = j;
}
}
if(menor != i)
{
aux = vetp[menor];
vetp[menor] = vetp[i];
vetp[i] = aux;
}
}
printf("Selection Sort: ");
for(i = 0; i < t; i++)
{
printf("%d\t", vetp[i]);
}
}

/*-------------------FUNÇÃO BUBLLE SORT-------------------------*/
void BubbleSort(int vetp[])
{
bool mudou = true;
int i,t=5, aux;
while (mudou)
{
mudou = false;
for (i = 0; i < t - 1; i++)
{
if (vetp[i] > vetp[i+1])
{
aux = vetp[i+1];
vetp[i+1] = vetp[i];
vetp[i] = aux;

mudou = true;
}

}

}
printf("Bubble Sort: ");
for(i = 0; i < t; i++)
{
printf(" %d\t", vetp[i]);
}
}
/*-------------------FUNÇÃO MERGE SORT-------------------------*/
void mergesort(int vetp[])
{
void intercalar (int vetp[],int aux[],int ini1, int ini2,int fim2)
{
int in1=ini1,in2=ini2,fim1=in2-1,au=0,i,j;
while(in1<=fim1 && in2<=fim2)
{
if (vetp[in1]< vetp[in2])
{
aux[au++] = vetp[in1++];
}
else
{
aux[au++] = vetp[in2++];
}
}
while(in1<=fim1)
{
aux[au++] = vetp[in1++];
}
while(in2<=fim2)
{
aux[au++] = vetp[in2++];
}

for(i=0;i<au;i++)
{
vetp[i+ini1]=aux[i];
}
}

void mergeSort (int vetp[], int aux[],int esq, int dir)
{
int meio,i;
if(esq<dir)
{
meio=(esq+dir)/2;
mergeSort(vetp,aux,esq,meio);
mergeSort(vetp,aux,meio+1,dir);
intercalar(vetp,aux,esq,meio+1,dir);
}
}
int aux,i;
mergeSort(vetp,aux,0,5);
for(i=0;i<5;i++)
{
printf("%d\t",vetp[i]);
}
}

/*-------------------Desordena Vetor-------------------------*/

void desorvet(int vetp[])
{
int x;
for (x=0; x<5; x++)
{
printf("%d\t",vetp[x]);
}
printf("\n\n");
printf ("%d\t %d\t %d\t %d\t %d\t",vetp[3],vetp[0],vetp[1],vetp[4],vetp[2]);
}

/*-------------------Declarando o Vetor-------------------------*/
int vetp[5];

/*-------------------inicializa o Programa-------------------------*/
main()
{
int x, resp;
resp=1;

/*-----------------Condição de Execução do MENU-----------------*/
while(resp!=0)
{
printf(" TRABALHO ORDEN\x80\x8fO\n\n");

printf("\n 1 - Preenche o vetor com 5 valores: ");
printf("\n");
printf("\n 2 - Mostrar o vetor: ");
printf("\n");
printf("\n 3 - Ordenar o vetor Insertion Sort: ");
printf("\n");
printf("\n 4 - Ordenar o vetor Selection Sort: ");
printf("\n");
printf("\n 5 - Ordenar o vetor Bubble Sort: ");
printf("\n");
printf("\n 6 - Ordenar o vetor Merge Sort: ");
printf("\n");
printf("\n 7 - Desordenar o vetor: ");
printf("\n");
printf("\n 0 - Sair do programa: ");
scanf("%d",&resp);
printf("\n\n");

//IF aninhados para chamar uma das funções declaradas
if(resp==0)break;
if(resp==1)
preenche(vetp);
if(resp==2)
imprimevet(vetp);
if(resp==3)
InsertionSort(vetp);
if(resp==4)
SelectionSort(vetp);
if(resp==5)
BubbleSort(vetp);
if(resp==6)
mergesort(vetp);
if(resp==7)
desorvet(vetp);
printf("\n\n");
system("pause");
system("cls");
}
return(0);
}

Link para o comentário
Compartilhar em outros sites

Souza,

Olá pessoal!

Olá!! ;)

Souza, fica melhor desmembrando as funções intercalar() e mergeSort(). Para não alterar muito o que já foi feito, criei uma função principal que vai fazer a primeira chamada à mergeSort() e posteriormente mostrar o vetor ordenado. Isso deixa o código mais claro.

Atenção também ao último parâmetro passado à mergeSort(). O valor deveria ter sido 4, e não 5. Coloquei um comentário sobre isso também.


#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>

void preenche(int vetp[])
{
int x;
for (x=0; x<5; x++)
{
printf ("indice:\t[%d] Digite o %d\xa7 numero: ",x,x+1);
scanf("%d",&vetp[x]);
printf ("\n");
}
}

/*--------------Imprime o conteúdo do vetor-------------------*/
void imprimevet(int vetp[])
{
int x;
for (x=0; x<5; x++)
printf (" [%d] %d\t",x,vetp[x]);
}

/*-------------------FUNÇÃO Insertion Sort-------------------------*/

void InsertionSort(int vetp[])
{
int aux, i,t=5, j;
for(j = 0; j <= t - 1; j++)
{
aux = vetp[j];
i = j - 1;

while((i >= 0) && (vetp[i] > aux))
{
vetp[i+1] = vetp[i];
vetp[i] = aux;
i--;
}
}
printf("Insertion Sort: ");
for(i = 0; i <= t - 1; i++)
{
printf("%d\t", vetp[i]);
}
}

/*-------------------FUNÇÃO Selection Sort-------------------------*/

void SelectionSort(int vetp[])
{
int i, j,t=5, aux, menor;
for(i = 0; i < t - 1; i++)
{
menor = i;
for(j = i + 1; j < t ; j++)
{
if(vetp[menor] > vetp[j])
{
menor = j;
}
}
if(menor != i)
{
aux = vetp[menor];
vetp[menor] = vetp[i];
vetp[i] = aux;
}
}
printf("Selection Sort: ");
for(i = 0; i < t; i++)
{
printf("%d\t", vetp[i]);
}
}

/*-------------------FUNÇÃO BUBLLE SORT-------------------------*/
void BubbleSort(int vetp[])
{
bool mudou = true;
int i,t=5, aux;
while (mudou)
{
mudou = false;
for (i = 0; i < t - 1; i++)
{
if (vetp[i] > vetp[i+1])
{
aux = vetp[i+1];
vetp[i+1] = vetp[i];
vetp[i] = aux;

mudou = true;
}

}

}
printf("Bubble Sort: ");
for(i = 0; i < t; i++)
{
printf(" %d\t", vetp[i]);
}
}
/*-------------------FUNÇÃO MERGE SORT-------------------------*/

void intercalar (int vetp[],int aux[],int ini1, int ini2, int fim2)
{
int in1=ini1, in2=ini2, fim1=in2-1, au=0, i;
while(in1<=fim1 && in2<=fim2)
{
if (vetp[in1]< vetp[in2])
{
aux[au++] = vetp[in1++];
}
else
{
aux[au++] = vetp[in2++];
}
}
while(in1<=fim1)
{
aux[au++] = vetp[in1++];
}
while(in2<=fim2)
{
aux[au++] = vetp[in2++];
}

for(i=0; i<au; i++)
{
vetp[i+ini1]=aux[i];

}
}

void mergeSort (int vetp[], int aux[],int esq, int dir)
{
int meio;
if(esq<dir)
{
meio=(esq+dir)/2;
mergeSort(vetp,aux,esq,meio);
mergeSort(vetp,aux,meio+1,dir);
intercalar(vetp,aux,esq,meio+1,dir);
}
}

void mergeSort_main(int vetp[])
{
int aux[5]= {0},i;
mergeSort(vetp,aux,0,5-1); /* Atencao ao limite do array */
for(i=0; i<5; i++)
{
printf("%d\t",vetp[i]);
}
}

/*-------------------Desordena Vetor-------------------------*/

void desorvet(int vetp[])
{
int x;
for (x=0; x<5; x++)
{
printf("%d\t",vetp[x]);
}
printf("\n\n");
printf ("%d\t %d\t %d\t %d\t %d\t",vetp[3],vetp[0],vetp[1],vetp[4],vetp[2]);
}

/*-------------------Declarando o Vetor-------------------------*/
int vetp[5];

/*-------------------inicializa o Programa-------------------------*/
int main()
{
int resp = 1;

/*-----------------Condição de Execução do MENU-----------------*/
while (resp != 0)
{
printf(" TRABALHO ORDEN\x80\x8fO\n\n");

printf("\n 1 - Preenche o vetor com 5 valores: ");
printf("\n");
printf("\n 2 - Mostrar o vetor: ");
printf("\n");
printf("\n 3 - Ordenar o vetor Insertion Sort: ");
printf("\n");
printf("\n 4 - Ordenar o vetor Selection Sort: ");
printf("\n");
printf("\n 5 - Ordenar o vetor Bubble Sort: ");
printf("\n");
printf("\n 6 - Ordenar o vetor Merge Sort: ");
printf("\n");
printf("\n 7 - Desordenar o vetor: ");
printf("\n");
printf("\n 0 - Sair do programa: ");
scanf("%d",&resp);
printf("\n\n");

/* IF aninhados para chamar uma das funções declaradas */
if(resp==0)break;
if(resp==1)
preenche(vetp);
if(resp==2)
imprimevet(vetp);
if(resp==3)
InsertionSort(vetp);
if(resp==4)
SelectionSort(vetp);
if(resp==5)
BubbleSort(vetp);
if(resp==6)
mergeSort_main(vetp);
if(resp==7)
desorvet(vetp);
printf("\n\n");
system("pause");
system("cls");
}
return(0);
}
#include <stdio.h>

[]'s

LNW

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...