next up previous contents
Next: Compiladores Up: Estruturas de dados Previous: Acesso seqüencial   Sumário

Exercícios

2.1
Em uma função C, as seguintes variáveis foram declaradas:
  int a, b, c[10], *d, *e;
Com base nestas declarações, indique se cada uma das linhas abaixo é válida ou não, justificando suas respostas:
(a)
b = 078;
(b)
d = c;
(c)
a = b && d;
(d)
c = e;

2.2
Considere o seguinte programa em C:
       #include <stdio.h>
       int main( ) {
           int valor=12;
           char str[10];

           printf("Entre uma string: ");
           if (gets(str) == 0) {
               fprintf(stderr, "Sinto muito, algo saiu errado!\n");
               return 1;
           }
           printf("Sua string foi %s e meu valor secreto era %d\n",
                   str, valor);
           return 0;
       }
Quando compilado e executado, em uma das execuções a seguinte situação foi observada:
       Entre uma string: Pindamonhangaba
       Sua string foi Pindamonhangaba e meu valor secreto era 6382177
Explique esse comportamento do programa e indique como o código seria modificado para evitar a situação que gerou esse comportamento.

2.3
Implemente um par de programas em C que permitam (i) definir valores para um arranjo de 20 inteiros e gravar esses valores em um arquivo em disco em formato texto; e (ii) ler esses valores e apresentá-los na saída padrão.

2.4
Repita o exercício anterior usando um arquivo binário para gravar os valores dos elementos do arranjo. Use as funções para manipulação de arquivos binários descritas na Seção C.5.2.

2.5
Modifique o programa de apresentação dos exercícios acima para que a saída seja apresentada por ordem crescente de valores; porém, após cada valor deve ser indicado o índice daquele valor no arranjo original. Por exemplo, se a saída original (para cinco elementos) fosse
  36
  15
  28
  68
  13
a nova saída seria
  13 [4]
  15 [1]
  28 [2]
  36 [0]
  68 [3]

2.6
Uma função hash está sendo definida para mapear strings para a faixa de valores entre 0 e 63 da seguinte maneira: o resultado intermediário é a somatória dos valores ASCII de cada caráter não-nulo da string; esse resultado é dividido por 64 e o resto da divisão é o valor de hash.
(a)
Implemente uma função C que realize essa função.
(b)
Avalie o resultado dessa função para as seguintes strings:
  • FEEC
  • Universidade Estadual de Campinas
  • EA876
  • FA875
  • Estruturas de dados

2.7
Repita o exercício anterior substituindo o cômputo do valor de hash por divisão pelo método do meio do quadrado.

2.8
Repita os exercícios anteriores substituindo, no cálculo da função hash, a operação de soma pela operação ou-exclusivo.

2.9
Descreva os algoritmos para as operações INSERT e REMOVE para a manipulação de fila usando operações de manipulação de lista.

2.10
Descreva os algoritmos para as operações PUSH e POP para a manipulação de pilha usando operações de manipulação de lista.

2.11
Apresente a seqüência de números correspondente à varredura da árvore binária abaixo quando esta for percorrida usando (i) pré-ordem, (ii) intra-ordem e (iii) pós-ordem.
\includegraphics{arvbex.eps}


next up previous contents
Next: Compiladores Up: Estruturas de dados Previous: Acesso seqüencial   Sumário
Ivan L. M. Ricarte 2003-02-14