Linguagem C
Variáveis
Indexadas ( vetores e Matrizes)
Lógica de Programação
Caro(a) aluno(a),
Começaremos agora a montar vetores e
matrizes na linguagem de programação.
Bom trabalho!!!
É uma coleção de variáveis de mesmo tipo que são referenciadas pelo mesmo nome, utilizando-se um índice para diferenciá-los.
Consiste em locações contíguas de memória, ou seja, os elementos encontram-se em seqüência (contigüidade física). O menor endereço corresponde ao primeiro elemento, e o maior corresponde ao último elemento.
Uma vantagem na utilização é poder armazenar vários valores (elementos), na memória RAM, ao mesmo tempo, permitindo, por exemplo, compará-los e classificá-los.
Variáveis Indexadas
Variáveis Unidimensionais - Vetores
Vetor (matriz de uma dimensão - 1D) é um tipo especial de matriz que possui apenas um índice, ou seja, permite armazenar variáveis unidimensionais (permite representar uma tabela).
Tipo_dos_dados nome_do_vetor [número_de_elementos];
Onde:
• tipo_dos_dados: tipo de dado de cada elemento (char, int, float, double).• nome_do_vetor: nome da variável que irá representar o vetor• número_de_elementos: número total de elementos do vetor• primeiro elemento: 0• último elemento: número_de_elementos – 1• número de bytes ocupados na memória RAM: número_de_elementos x quantidade_de_bytes_de_um_elemento
Variáveis Unidimensionais - Vetores
Exemplo:
int x[10]; /* 10 elementos: x[0] à x[9] */
Onde:• primeiro elemento: x[0]• último elemento: x[número_de_elementos – 1], ou seja, x[9]• número de bytes: 10 x 2 = 20 bytes (um inteiro ocupa 2 bytes)
Observação: O programador deve verificar os limites do vetor, pois o compilador C não verifica estes limites, ou seja, o programador pode referenciar qualquer elemento do vetor, inclusive um que não existe. Isto pode causar um grave erro, “travar” o programa.
Variáveis Bidimensionais ou
Multidimensionais - Matrizes
tipo_dos_dados nome_variável [tamanho_1][tamanho_2]...[tamanho_n];
Exemplo: float y[5][5]; /* matriz 2D */
Para acessar o elemento 3, 4 da matriz y, deve-se escrever y[3][4]. Note que o
primeiro elemento é y[0][0] e o último elemento é y[4][4]. O total de elementos
é 25.
Inicialização – Matrizes e Vetores
tipo_dos_dados nome_matriz [tam_1]...[tam_n] = {lista_valores};
lista_valores: lista de constantes separadas por vírgulas que são compatíveis em tipo com o tipo base da matriz.
Exemplo: int i[10] = {0,1,2,3,4,5,6,7,8,9};
/* vetor i – 1D */ou
int i[] = {0,1,2,3,4,5,6,7,8,9};
Observação: Quando um vetor é declarado e inicializado (ao mesmo tempo) o número de elementos (neste caso 10) pode ser suprimido, ou seja, neste caso é opcional.
Inicialização de um vetor de caracteres
char nome_vetor [tamanho] = "string";
Exemplo: char str[4] = "alo";
0 1 2 3
'a' 'l' 'o' NULL
Inicialização de matrizes
multidimensionais
int y[4][2] = { {1,1}, {2,4}, {3,9}, {4,16} };
y[0][0] = 1 y[2][0] = 3
y[0][1] = 1 y[2][1] = 9
y[1][0] = 2 y[3][0] = 4y[1][1] = 4 y[3][1] = 16
Exemplo:
O programa realiza a soma de duas matrizes (A e B) bidimensionais, gerando uma matriz resultante C.
#include <stdio.h>#include <conio.h>#define MAX 10
void main(void){float a[MAX][MAX], b[MAX][MAX], c[MAX][MAX];int col,lin,j,m,n; clrscr();printf("Informe a ORDEM da MATRIZ: (mxn)\n");do {
printf("Número de linhas (m): ");scanf("%d",&m);} while (m < 1 || m > MAX);
/* m de 1 a 10 */do {
Exemplo:
printf("Número de colunas (n): ");scanf("%d",&n);} while (n < 1 || n > MAX); /* n de 1 a 10 */
for (lin = 1;lin <= m;lin++)for (col = 1;col <= n;col++){printf("A[%d,%d] = ",lin,col);scanf("%d",&a[lin][col]);printf("B[%d,%d] = ",lin,col);scanf("%d",&b[lin][col]);}
printf("\n");for (lin = 1;lin <= m;lin++)
for (col = 1;col <= n;col++){c[lin][col] = a[lin][col] + b[lin][col];printf("C[%d,%d] = %d\n",lin,col,c[lin][col]);}
getch();}
Classificação de dados ou ordenação
(sort)
Para exemplificar melhor as variáveis do tipo vetor, são
exibidos a seguir dois tipos de ordenação, também chamado
sort (classificação de dados).
Tipo de Ordenação 1
O programa classifica os nomes digitados pelo usuário.
#include <stdio.h>#include <conio.h>#include <ctype.h>#include <string.h>#define QUANT 50
void main(void){char nome[QUANT][40];char temp[40];int i, j, n;char tecla;n = -1;do {
char nome[QUANT][40];char temp[40];int i, j, n;char tecla;n = -1;do {
n++;clrscr();printf("Nome: ");gets(nome[n]); /* gets – permite a
entrada de um nome */printf("Continua [S/N]? ");do {
Tipo de Ordenação 1
tecla = toupper(getche()); /* toupper – converte o caracterpara maiúsculo */
} while (!strchr(“SN”, tecla)); /* strchr – verifica se um caracter pertence a string */
} while (tecla != 'N' && i < QUANT);
for (i = 0; i <= n-1; i++)for (j = i+1; j <= n; j++)
if ((strcmp(nome[i], nome[j])) > 0) /* strcmp – permite comparar strings */
{strcpy(temp, nome[i]); /* strcpy – permite copiar strings */strcpy(nome[i], nome[j]);strcpy(nome[j], temp);
}
printf("\nNomes ORDENADOS:");for (i = 0; i <= n; i++)
printf("Nome: %s\n", nome[i]);getch();}
Tipo de Ordenação 1
Tipo de Ordenação 2
O programa utiliza um método de sort chamado bubble sort (método da bolha) para classificar nomes.
#include <stdio.h>#include <conio.h>#include <ctype.h>#include <string.h>#define TRUE !0#define FALSE 0#define QUANT 50
void main(void){char nome[QUANT][40];char temp[40], tecla;Int i, k, n;int sort;n = 0;
Tipo de Ordenação 2
do {clrscr();printf("Nome: ");gets(nome[n]); /* entrada de um nome */n++;printf(" Continua [S/N]? ");do {
tecla = getche();} while (!strchr(“SsNn”, tecla));
} while (strchr(“Nn”, tecla) && i < QUANT);n = n - 1; /* n número de elementos */
k = n;do {
sort = FALSE;for (i = 0; i < k; i++)
if ((strcmp(nome[i],nome[i+1])) > 0){
strcpy(temp, nome[i]); Buble sortstrcpy(nome[i], nome[i+1]);strcpy(nome[i+1], temp);sort = TRUE;}
k--;} while (sort);
printf("\nNomes ORDENADOS:\n");for (i = 0; i <= n; i++)
printf("Nome: %s\n", nome[i]);getch();}
Tipo de Ordenação 2