Classificação de inteiros. Escreva um programa que
classifique um array de inteiros em ordem crescente ou
decrescente. O programa deve usar argumentos da linha
de comando para passar o parâmetro -c para a ordem
crescente, ou o parâmetro -d para a ordem decrescente.
[Nota: este é o formato-padrão para passar opções a um
programa em UNIX.]
Passo 1
Em primeiro lugar, vamos criar um algoritmo de ordenação que usaremos para ordenar o array de inteiros.
Usaremos o algoritmo de classificação de bolhas:
void bubbleSort(int arr[])
{
int change;
do
{
change = 0;
for (int i = 0; i
{
if (arr[i] > arr[i + 1])
{
int tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
change = 1;
}
}
} while (change);
}
Vamos fazer um array inteiro de 5 números com os quais vamos operar:
#define SIZE 5
int main(int argc, char* argv[])
{
int arr[SIZE] = { 1, 0, 3, 2, 4 };
bubbleSort(arr);
...
}
Passo 2
Primeiramente, verifique se o número de argumentos é válido (o primeiro argumento é o nome do programa):
int main(int argc, char* argv[])
{
...
if (argc == 2)
{
...
}
else
{
printf("Invalid argument!\n");
}
}
Em seguida, utilize a função strcmp() para verificar qual argumento o usuário inseriu. Emita a ordem correspondente dos números:
int main(int argc, char* argv[])
{
...
if (argc == 2)
{
if (strcmp(argv[1], "-a") == 0)
{
for (int i = 0; i
printf("%d ", arr[i]);
}
else if (strcmp(argv[1], "-d") == 0)
{
for (int i = SIZE - 1; i >= 0; i--)
printf("%d ", arr[i]);
}
else
{
printf("Invalid argument!\n");
}
}
else
{
printf("Invalid argument!\n");
}
return 0;
}
Passo 3
Saída do caso de teste (argumento -d):
4 3 2 1 0
Resposta
Ver o desenvolvimento.