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.