MATRIZES 01
Na linguagem C, uma matriz é um conjunto de variáveis do mesmo tipo referenciadas por um nome em comum. Essas variáveis são armazenadas de forma contígua na memória, e cada elemento da matriz é acessado através de um índice entre colchetes [].
As matrizes possuem utilidade subestimada pela maioria dos iniciantes em programação, mas vale lembrar que elas proporcionam a solução de inúmeros problemas na engenharia relacionados a sistemas lineares. Afora isso, muitos dados são tratados como matrizes. Um exemplo simples é um arquivo de áudio, no qual as amostras de áudio são armazenadas de forma sucessiva na memória. Outro exemplo é um arquivo de imagem, que pode ser processado como uma matriz com duas dimensões.
O tipo mais comum de matriz é a matriz unidimensional, chamada muitas vezes de vetor (ou array).
V
ETORESComo mencionado acima, uma matriz que possui apenas uma dimensão é chamada de vetor (ou array). Para criar um vetor na linguagem C, basta utilizar uma construção como a apresentada abaixo:
tipo_de_dado nome[tamanho];
tipo_de_dado é o tipo dos dados armazenados no vetor. O nome é o identificador do
vetor. tamanho é a quantidade de variáveis que o vetor consegue armazenar. Por exemplo,
int vet[10];
Declara um vetor com o nome vet capaz de armazenar 10 variáveis do tipo int. Observe o exemplo abaixo onde um vetor com cinco variáveis int é declarado e utilizado.
#include <stdio.h> #include <stdlib.h>
int main(void) {
int vet[5];
vet[0] = 234; vet[1] = -145; vet[2] = 120; vet[3] = -456; vet[4] = 453;
printf("%d, %d, %d, %d, %d\n", vet[0], vet[1], vet[2], vet[3], vet[4]); system("PAUSE");
return 0; }
Programa 1 Vetor.
INICIALIZANDO VETORES
É possível facilmente inicializar vetores. Observe o exemplo abaixo:
#include <stdio.h> #include <stdlib.h>
int main(void) {
int vet[5] = { 234, -145, 120, -456, 453 };
printf("%d, %d, %d, %d, %d\n", vet[0], vet[1], vet[2], vet[3], vet[4]); system("PAUSE");
return 0; }
Programa 2 Inicializando um Vetor.
UTILIZANDO LAÇOS PARA ESCREVER E LER VETORES
É possível facilmente utilizar um laço para escrever a quantidade desejada de elementos de um determinado vetor na tela. Observe o exemplo abaixo, onde o comando for é utilizado para
imprimir na tela um vetor.
#include <stdio.h> #include <stdlib.h>
int main(void) {
float vet[10] = { 10.6, 34.0, -34, 9.8, 0, 34, 2, 0.12, -43, 93.2 }; int i;
for(i = 0; i < 10; i++) printf("%f\n", vet[i]); system("PAUSE");
return 0; }
Programa 3 Imprimindo Vetor utilizando o comando for.
Note que agora a indexação fica a cargo de uma variável (a variável i). Essa construção é
muito comum para ler ou escrever vetores. Compile o Programa 4 e estude seu código.
#include <stdio.h> #include <stdlib.h>
int main(void) {
int vet[10]; int i;
printf("Digite 10 numeros inteiros...\n"); for(i = 0; i < 10; i++) //loop para leitura...
{
printf("indice %d: ", i); scanf("%d",&vet[i]); }
printf("Os numeros digitados foram: \n");
for(i = 0; i < 10; i++) printf("%d ", vet[i]); //loop para escrita
putchar('\n'); system("PAUSE"); return 0;
}
VERIFICAÇÃO DE LIMITES
É muito importante ressaltar que o compilador não realiza verificação de limites. Isso torna o processamento do programa mais rápido, porém pode acarretar problemas graves. Compile e execute o programa abaixo.
#include <stdio.h> #include <stdlib.h>
int main(void) {
int vet[10]; int i;
for(i = 0; i < 1000; i++) //loop para leitura...
{ //observe que o loop ultrapassa e muito
printf("%d\n",i); //a declaração do vetor...
vet[i] = 10; }
system("PAUSE"); return 0;
}
Programa 5 Verificação de limites.
Perceba como o compilador compila e executa o programa (mesmo com o loop for
ultrapassando o limite da declaração do vetor). Lembre-se que o compilador reserva memória apenas para o tamanho do vetor especificado quando da declaração do vetor. No caso do Programa 5, apenas memória para 10 variáveis int é reservada. É provável que o programa tenha
tentado acessar uma área da memória utilizada para carregar o próprio programa, o que causou que o mesmo parasse de funcionar.
Assim, como a linguagem C não verifica limites, cabe ao programador evitar que os limites definidos para as variáveis não sejam ultrapassados.
S
TRINGSNa linguagem C, uma string é um vetor de caracteres terminado em um caractere nulo. Essa abordagem faz com que algumas rotinas com strings sejam otimizadas em relação a outras linguagens. Compile o programa abaixo.
#include <stdio.h> #include <stdlib.h>
int main(void) {
char c[5] = { 'O', 'L', 'A', '!', '\0' }; //’\0’ é o caractere nulo...
char str[5] = "OLA!";
printf("%s\n", c); //%s imprime uma string...
printf("%s\n", str); //%s imprime uma string...
system("PAUSE"); return 0;
}
Perceba como as strings são impressas utilizando printf.
É possível realizar a leitura de uma string com a função scanf utilizando o caractere de controle %s. Porém a função scanf utiliza como delimitador, além do caractere de nova linha, o
caractere espaço e tabulação. Isso faz com que, em muitos casos, caracteres permaneçam no buffer de entrada, causando alguns problemas. Para tentar contornar esses problemas, pode-se utilizar a função gets. Observe os dois programas que seguem. Tente utilizar strings com e sem espaços.
#include <stdio.h> #include <stdlib.h>
#define TAM 100
int main(void) {
char str[TAM];
printf("Digite uma string com no maximo %d caracteres...\n", TAM); scanf("%s", &str);
printf("A string digitada foi: %s\n", str);
printf("Digite uma string com no maximo %d caracteres...\n", TAM); scanf("%s", &str);
printf("A string digitada foi: %s\n", str); system("PAUSE");
return 0; }
Programa 7 Lendo uma string com scanf.
Pode-se utilizar a função gets para ler uma string com espaços. Observe o uso de gets no programa abaixo.
#include <stdio.h> #include <stdlib.h>
#include <string.h> //biblioteca com funções de strings...
#define TAM 100
int main(void) {
char str[TAM]; while (1) {
printf("Digite uma string com no maximo %d caracteres...\n", TAM); printf("Digite (exit) para sair...\n");
gets(str);
if( strcmp( str , "exit" ) == 0 ) return 0; }
}
Programa 8 Lendo uma string com a função gets.
Perceba que uma nova biblioteca é adicionada: #include <string.h> Essa biblioteca contém várias funções para manipulação e teste de strings.
Exercício 1 Escreva um programa que realiza a leitura de um vetor de 6 números inteiros do
teclado. Após isso, o programa deverá imprimir o vetor na tela. Além disso, o programa deverá calcular a média dos valores armazenados no vetor, imprimindo o resultado na tela.
Exercício 2 Suponha uma string declarada como segue:
char str[7] = "V?L?BS";
Escreva um programa que copia a string para uma outra string somando duas unidades em cada elemento do vetor. Após, o programa deverá imprimir a string modificada. Não esqueça que a string de destino deve terminar com um caractere nulo.
Exercício 3 Escreva um programa que realiza a leitura de um vetor de 10 números inteiros do
teclado. Após isso, o programa deverá obter o índice do maior elemento do vetor. DICA: Utilize uma variável para armazenar sempre o maior valor, e percorra o vetor comparando o maior valor até o momento com o elemento do vetor.
Exercício 4 Escreva um programa que realiza a leitura de duas strings do teclado e as compara
utilizando a função strcmp. O programa deverá escrever um aviso na tela caso as duas strings sejam iguais.
Exercício 5 Escreva um programa que realiza a leitura de um vetor do teclado. Após o programa