[Volta]
O programa abaixo administra uma coleção de números digitados pelo usuário. (A coleção pode conter mais de uma cópia de um mesmo número.) O usuário pode
A coleção é armazenada em ordem crescente.
/* Este programa administra uma coleção de números.
// Digite
// i 222
//
// para inserir 222 na coleção. Digite
//
// r 333
/
// para remover 333 da coleção. Digite qualquer caractere
// diferente de 'i' e 'r' para sair.
///////////////////////////////////////////////////// */
#include <stdio.h>
#include <stdlib.h>
void inserir (int k, int x, int n, int v[]);
void remover (int k, int n, int v[]);
#define MAX 100
typedef enum {FALSE, TRUE} bool;
int main (void)
{
int v[MAX], n, x;
n = 0;
while (TRUE) {
/* a coleção está em v[0..n-1], em ordem crescente */
char str[2], op;
int k;
printf ("\nOperação? ");
scanf ("%s", str);
op = str[0];
switch (op) {
case 'i': if (n >= MAX) return EXIT_FAILURE;
scanf ("%d", &x);
for (k = 0; k < n && v[k] < x; ++k) ;
n = inserir (k, x, n, v);
break;
case 'r': if (n <= 0) return EXIT_FAILURE;
scanf ("%d", &x);
for (k = 0; k < n && v[k] < x; ++k) ;
if (k < n && v[k] == x)
n = remover (k, n, v);
break;
default: return EXIT_SUCCESS;
}
printf ("Temos: ");
for (k = 0; k < n; ++k)
printf (" %d", v[k]);
printf ("\n");
}
}
O código de operação digitado pelo usuário é armazenado em str[0]; o vetor str tem dois elementos para acomodar o caractere nulo que marca o fim da string.
O programa é interrompido se o espaço alocado a v estiver esgotado e o usuário tentar inserir mais um elemento. O programa também é interrompido se o usuário tentar remover um elemento de uma coleção vazia.