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

999ANDRE999

Problemas com codigo

Recommended Posts

999ANDRE999

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...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.