• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

999ANDRE999

Problemas com codigo

1 mensagem neste tópico

OLa...

eu preciso da vosa ajuda pra fazer um programa em C... é um protocolo pra escola k temos k fazer... eu tentei fazer com base em programas feitos nas aulas... mas da-me erros e n consigo repara-los... alguem pode ajudar-m?? vou deixar o protocolo e o meu codigo... :(

CODIGO:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <string.h>

typedef struct {
 unsigned int num;
}numeros;


const int max=5000;

int le (numeros v[], const int nMax);
void SelectionSort(numeros v[], int n);
void Swap(numeros *a,numeros *;
void InsertionSort (numeros v[], int n);
void BubbleSort (numeros v[], int n);
void Swaped(numeros *a, int *;
void MergeSort(numeros v[], int lo, int hi);
void Merge(numeros v[], int lo, int m, int hi);
void print (numeros v[], int n);
void QuickSort(numeros v[], int lo, int hi);


void main(void)
{
 int c,n;
 numeros v[5000];
 time_t ini,fim;
 double tempo;
 do{
     printf("0-Sair\n");
     printf("1-Selection Sort\n");
     printf("2-Bubble Sort\n");
     printf("3-Insertion Sort\n");
     printf("4-Merge Sort\n");
     printf("5-QuickSort\n");

     c=getc(stdin);
     while(getc(stdin)!='\n');

     switch(c){
     case '0':break;
     case '1':n= le (v, "valores.txt", max);
       time (& ini);
       SelectionSort (v,n);
       time (&fim);
       print (v,n);
       tempo=difftime (fim, ini);
       printf ("tempo=%d \n", tempo);
       break;
     case '2':n= le (v, "valores.txt", max);
       time (& ini);
       BubbleSort (v,n);
       time (&fim);
       print (v,n);
       tempo=difftime (fim, ini);
       printf ("tempo=%d \n", tempo);
       break;
     case '3':n= le (v, "valores.txt", max);
       time (& ini);
       InsertionSort (v,n);
       time (&fim);
       print (v,n);
       tempo=difftime (fim, ini);
       printf ("tempo=%d \n", tempo);
       break;
     case '4':n= le (v, "valores.txt", max);
       time (& ini);
       MergeSort (v,0,n-1);
       time (&fim);
       print (v,n);
       tempo=difftime (fim, ini);
       printf ("tempo=%d \n", tempo);
       break;
     case '5':n= le (v, "valores.txt", max);
       time (& ini);
       QuickSort (v,0,n-1);
       time (&fim);
       print (v,n);
       tempo=difftime (fim, ini);
       printf ("tempo=%d \n", tempo);
       break;

     default:printf("Opcao Invalida\n");
     }
 }
     while(c!='0');
 }

int le (numeros v[], const int nMax)
{
 FILE*fp;
 int num,n=0,c;
 fp= fopen (num, "r");
 if (fp==NULL) return 0;
 while (1)
 {
 char *p=str;
 if (fscanf (fp, " %d", & v[n].num)==0) break;
 c= fgetc (fp);
 if( fgets (str, sizeof (str)-1, fp)==NULL) break;
 while (*p!= '\n' && p<q) p++;
 *p='\0';
 strcpy (v[n].num, str);
 n++;
 if (n==nMax) break;
}
fclose (fp);
return n;

}


void SelectionSort(numeros v[], int n)
{
 int i,j,aux;

 for(i=0;i<n-1;i++)
 {
     aux = i;
     for(j=i+1;j<n;j++)
       if(v[j].num < v[aux].num)
           aux = j;
     Swap(&v[aux],&v);
 }
}

void Swap(numeros *a, numeros *b)
{
 numeros  aux;

 aux = *a;
 *a = *b;
 *b = aux;
}

void InsertionSort(numeros v[], int n)
{
 int i,j;
 numeros aux;

 for(i=1;i<n;i++)
 {
     aux = v;
     j = i;
     while(j > 0 && v[j-1].num > aux.num)
     {
       v[j] = v[j-1];
       j = j - 1;
     }
     v[j] = aux;
 }
}


void BubbleSort(numeros v[], int n)
{
 BOOLEAN swaped;
 int i,j;

 i = n;
 do{
     swaped = FALSE;
     for(j=1;j<i;j++)
       if(v[j-1].num > v[j].num)
       {
           Swap(&v[j-1],&v[j]);
           swaped = TRUE;
       }
     i--;
 }while(i>0 && swaped==TRUE);
}


void MergeSort(numeros v[], int lo, int hi)
{
 int m;

 if (lo<hi)
 {
     m=(lo+hi)/2;

     // Divisão sucessiva

     MergeSort(v, lo, m);
     MergeSort(v, m+1, hi);

     //Junção

     Merge(v, lo, m, hi);
 }
}

void Merge(numeros v[], int lo, int m, int hi)
{
 numeros w[N];
 int i, j, k;

 //

 for (i=lo;i<=hi;i++)
     w=v;

 i=lo; j=m+1; k=lo;

 while (i<=m && j<=hi)
     if (w.nmec <= w[j].nmec)
     {
       v[k] = w;
       k++;
       i++;
     }
     else
     {
       v[k] = w[j];
       k++;
       j++;
     }

 while (i<=m)
 {
     v[k] = w;
     k++;
     i++;
 }
}


void print (numeros v[], int n)
{
 int i;
 printf ("Numero\n");
 for (i=0; i<n; i++)
 {
     printf ("%d\n", v.num);
 }
}

void QuickSort(numeros v[], int lo, int hi)
{
 int i = lo, j = hi;
 numeros h;

 //Partiton Routine

 int x = v[(lo+hi)/2].nmat;
 do
 {
     while (v.nmec < x)
       i++;
     while (v[j].nmec > x)
       j--;
     if (i <= j)
     {
       h = v;
       v = v[j];
       v[j] = h;
       i++;
       j--;
     }
 }while (i <= j);

 //Dividir para conquistar

 if (lo < j)
     QuickSort(v, lo, j);
 if (i < hi)
     QuickSort(v, i, hi);
}

PROTOCOLO:

Desenvolva um programa que permita ordenar ascendentemente um

conjunto de 5000 inteiros guardados num vector. Os 5000 inteiros

encontram-se armazenados no ficheiro <valores.txt>.

Implemente um sistema de menus que permita ao utilizador seleccionar um

dos seguintes métodos de ordenação para ordenar o vector:

 Insertion Sort;

 Selection Sort;

 Bubble Sort;

 Merge Sort;

 Quick Sort.

Com o objectivo de avaliar o desempenho de cada um dos métodos

implementados, no final da execução de cada um deles, calcule e apresente

no ecrã o seu tempo de execução em segundos.

desde ja obrigado...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora