TA 345 Informática Aplicada à Engenharia de Alimentos

Aula 6 Subtema 01: Matriz


Matrizes

Um comando de declaração determina as características de uma variável matriz em um programa Borland C. A declaração determina quatro características:

  1. Nome da matriz.
  2. Tipo de valores que a matriz vai armazenar.
  3. Número de dimensões da matriz.
  4. Número de valores que a matriz pode armazenar em cada dimensão.

O local para armazenar um valor particular em uma matriz é chamado elemento da matriz. O número de elementos em uma matriz depende do número de dimensões e o comprimento de cada uma delas.


Matriz unidimensional

Sintaxe:


      tipo variável[comprimento];

Exemplo:


       int list[10];

Neste exemplo a matriz list tem comprimento 10, o que significa que pode armazenar uma lista de 10 valores do tipo int.

Os elementos individuais dessa matriz são representados como se segue:

list[0]
list[1]
list[2]
list[3]
....
list[9]

O número incluído entre colchetes após o nome da matriz é chamado índice. Em geral, se uma matriz tem n elementos, o primeiro elemento tem índice igual a zero e o último elemento tem um índice igual a n - 1.

Um programa utiliza esse sistema de índices para referir-se aos valores individuais na matriz. Um nome de matriz indexado pode aparecer em qualquer comando que normalmente utiliza uma variável simples, incluindo a entrada, a saída e os comandos de atribuição.


 /* ex28.c  */
 #include < stdio.h >         /* diretiva */
 void imprime();             /* indica uso de função */


main()                  /* função principal */
{
   int valor [3];
   char parada;
   clrscr();
valor[0] = 1;
       valor[1] = 2;
       valor[2] = 3;

   imprime (valor);
   parada = getche();
}

void imprime (dado)        /* função secundaria */
int *dado;
{
   printf ("dado [0] = %d\n", *dado);
   printf ("dado [1] = %d\n", *(dado + 1));
   printf ("dado [2] = %d\n", *(dado + 2));
}

Poderia dizer qual é o resultado colocado na tela do computador?
1
2
3
Concorda?


Matriz de caracteres

Uma matriz de valores do tipo char é um caso especial em C, e nos referimos a ela como uma variável string. Em uma variável string cada valor é um caracter.Ao declarar uma variável string, sempre conceda espaço para o caracter nulo. C automaticamente anexa um caracter nulo no final de cada string de entrada ou valor de string literal.


/* ex35.c         F. Albuquerque pag. 226 */
#include < stdio.h >
#include < alloc.h >
#include < string.h >
#define SUCESSO 1
#define FALHA 0
#define VERDADEIRO 1


struct val
{   int dado;
    struct val *próxim;
} *primeiro = (struct val*)NULL, *último = (struct val*)NULL;


main()
{

   char escolha[10];


   int dado;
   clrscr();
   while (VERDADEIRO)
   {
         printf ("Escolha: insere ou remove\n");


         scanf ("%s", escolha);


         if (strcmp (escolha, "insere"))
         {
             printf ("Qual o valor a inserir? ");
             scanf ("%d", &dado);
             printf ("\n");
             if (insere_fila(&dado))    printf ("Dado inserido\n");
             else    printf ("Não foi possível inserir\n");
         }
        else
        {
             if (remove_fila(&dado))     printf ("Dado removido = %d\n", dado);
             else       printf ("Não foi possível remover\n");
         }
   }
}


insere_fila(valor)
int valor;
{
     struct val *ptr;
     ptr = malloc((unsigned) sizeof(struct val));

     if (ptr == (struct val*)NULL)   return FALHA;

     if (último == (struct val*)NULL)
     {
          primeiro = ptr;
          ultimo = ptr;
     }
     else    último-> próximo = ptr;
 
     ultimo = ptr;
     ultimo-> dado = valor;
     ultimo-> próximo = (struct val *)NULL;
     return SUCESSO;
}


remove_fila(valor)
int *valor;
{
     struct val*ptr;
     if (primeiro == (struct val*)NULL)    return FALHA;

   *valor = primeiro-> dado;
     ptr = primeiro;
     primeiro = primeiro-> próximo;

     if (primeiro == (struct val*)NULL)
     ultimo = (struct val*)NULL;
     free(ptr);
     return SUCESSO;
}


Matriz bidimensional

Uma matriz bidimensional armazena uma tabela de dados, com linhas e colunas de valores especificando o comprimento de cada dimensão.

Sintaxe:


      tipo variável[comprimento1] [comprimento2];

Exemplo:


       int table[3] [4];

Essa matriz pode armazenar 3 linhas por 4 colunas de dados, para um total de 12 valores ao todo.


/* ex42.c                      matriz bidimensional */
#include < stdio.h >                /* diretivas */
#include < conio.h >
#define TAXRATE   .065
#define DOLLARS   10
#define CENTS 100

main ()                  /* função principal */
   {
    float taxtable[dollars][cents];
    int i, j;

    for (i = 0; i < DOLLARS; i ++)
       for (j = 0 j < CENTS; j++)
          taxtable[i][j] = (i + j / 100.0) * TAXRATE;
    clrscr();

   printf ("Imposto de venda sobre $5.40 é $%4.2f\n", taxtable[5][40] );
    printf ("Imposto de venda sobre $0.85 é $%4.2f\n", taxtable[0][85] );
    printf ("Imposto de venda sobre $9.53 é $%4.2f\n", taxtable[9][53] );
   }

Utilizando matriz na classificação

Classificar é o processo de organizar um conjunto de dados em ordem alfabética ou numérica. Numa classificação simples, a chave é a lista de itens de dados pela qual a classificação é executada.

Os programadores utilizam uma variedade de algoritmos diferentes para classificação. Um algoritmo é uma seqüência de passos projetados para executar uma tarefa particular.

Uma das mais simples é chamada ordenação de bolhas. Essa técnica compara cada elemento de uma matriz com todos os itens localizados abaixo dele na lista, e troca as posições de qualquer par de valores que estiver fora de ordem. Quando o processo atingir o final da lista, os dados estão ordenados. Ordenação de bolhas trabalha com um conjunto pequeno de dados.

A grande vantagem da ordenação de bolhas é sua simplicidade - a tarefa é executada em poucas linhas de código.

C não permite comandos de atribuição operando diretamente com valores string. Utilizamos a função strcpy para copiar strings de uma variável para outra.

/* ex43.c                  classificação de matriz */
#include < stdio.h >            /* diretivas */
#include < string.h >

main()            /* função principal */
   {
    char holds[4];            /* matriz */
    char alphstr[10][4] =         /* matriz de strings */
    {
         "MNO", "JKL", "ABC", "XYZ", "PQR", "TUV", 
        "GHI", "STU", "DEF", "VWX"
    };
    int i, j;
   
    for (i = 0; i < 9; i++)
       for (j = i + 1; j < 10; j ++)        /* as funções de strings serão descritas nas páginas seguintes */
        if (strcmp(alphstr[i], alphstr[j]) > 0)            /* comando de comparação de strings */
        {
         strcpy(holds, alphstr[i]);           /* comando de transferência de string */
         strcpy(alphstr[i], alphstr[j]);     
         strcpy(alphstr[j], holds);            
        }

    for (i = 0; i < 10; i ++)
       printf ("%s\n", alphstr[i]);
   }    


Inicializando matriz

Uma matriz pode ter todos ou parte dos seus valores inicializados quando da sua declaração.

Sintaxe:

     tipo variável[comprimento] = { valor1, valor2, valor3, ...};

Exemplo:

      int dados[4] = { 1, 3, 6, 2};

Se não especificamos o número do comprimento, C assume que o comprimento é igual ao número de valores relacionados na inicialização.



Voltar à HomePage

Ir para o topo da Página

Ir para a Aula 6 Subtema 02