Você pode criar suas próprias bibliotecas facilmente. Como exemplo, pegaremos um código do artigo anterior desta série e criaremos uma biblioteca a partir de duas de suas funções. Eis o código com o qual iniciaremos:
#include <stdio.h>
#define MAX 10
int a[MAX];
int rand_seed=10;
int rand()
/* de K&R
- produz um número aleatório entre 0 e 32767.*/
{
rand_seed = rand_seed * 1103515245 +12345;
return (unsigned int)(rand_seed / 65536) % 32768;
}
void main()
{
int i,t,x,y;
/* preenche a matriz*/
for (i=0; i < MAX; i++)
{
a[i]=rand();
printf("%d\n",a[i]);
}
/* ordenação por bolha da matriz */
for (x=0; x < MAX-1; x++)
for (y=0; y < MAX-x-1; y++)
if (a[y] > a[y+1])
{
t=a[y];
a[y]=a[y+1];
a[y+1]=t;
}
/* imprime matriz classificada */
printf("--------------------n");
for (i=0; i < MAX; i++)
printf("%d\n",a[i]);
}
Este código preenche uma matriz com números aleatórios, ordena-os em bubble sort e depois os exibe na lista ordenada.
Pegue o código bubble sort e use o que aprendeu no artigo anterior para criar uma função a partir dele. Visto que a matriz a e a constante MAX são globalmente conhecidas, a função que você cria não precisa de parâmetros, tampouco apresentar um resultado. Porém, você deve usar variáveis locais para x, y e t.
Uma vez testada a função para verificar se ela está funcionado, passe o número de elementos como um parâmetro em vez de utilizar MAX:
#include<stdio.h> #define MAX 10 int a[MAX]; int rand_seed=10; /* de K&R - retorna um número aleatório entre 0 e 32767.*/ int rand() { rand_seed = rand_seed * 1103515245 +12345; return (unsigned int)(rand_seed / 65536) % 32768; } void bubble_sort(int m) { int x,y,t; for (x=0; x < m-1; x++) for (y=0; y < m-x-1; y++) if (a[y] > a[y+1]) { t=a[y]; a[y]=a[y+1]; a[y+1]=t; } } void main() { int i,t,x,y; /* preenche a matriz */ for (i=0; i < MAX; i++) { a[i]=rand(); printf("%d\n",a[i]); } bubble_sort(MAX); /* imprime matriz classificada */ printf("--------------------n"); for (i=0; i < MAX; i++) printf("%d\n",a[i]); }
Você também pode generalizar ainda mais a função bubble_sort passando a como um parâmetro:
bubble_sort(int m, int a[])
Esta linha diz: "Aceitar a matriz do inteiro a de qualquer tamanho como parâmetro". Nada precisa ser alterado no corpo da função bubble_sort. Para chamar bubble_sort, altere a chamada para:
bubble_sort(MAX, a);
Observe que &a não foi usado na chamada de função, embora a classificação vá mudar a. O motivo para tal ficará mais evidente depois que você entender os ponteiros.