Algoritmos Escher. Agenda Estruturas Homogêneas; Matrizes; Exercícios.
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I.
Transcript of UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS PROGRAMAÇÃO I.
UNIDADE 5
ESTRUTURAS DE DADOS HOMOGÊNEAS
PROGRAMAÇÃO I
Programação I
2
Estruturas de Dados Homogêneas
VetoresMatrizesStrings
Programação I
3
Conjuntos de uma dimensão: Vetores
Vetores são estruturas de dados que permitem armazenar um conjunto de valores na memória do computador.
O vetor é uma fileira de variáveis de mesmo tipo que ocupa uma região contínua de memória.
O vetor é uma estrutura de uma dimensão.
Programação I
4
Declaração de vetores
Sintaxe: A sintaxe para a declaração de um vetor é a seguinte:
tipo nome[tam];onde:
tipo é o tipo dos elementos do vetor: int, float, double ...Nome é o nome identificador do vetor. As regras de
nomenclatura dos nomes de vetores são as mesmas usadas na declaração de variáveis .
tam é o tamanho do vetor, isto é, o número de elementos que o vetor pode armazenar.
Atenção: o sistema de execução não verifica se um determinado acesso esta dentro dos limites de um vetor.
Programação I
5
Declaração de vetores
Exemplo:int notas[5];
A declaração acima reserva um espaço na memória para 5 inteiros.
A quantidade de memória (em bytes) usada para armazenar um vetor pode ser calculada como:
quantidade de memória = tamanho do tipo * tamanho do vetor
No exemplo acima, a quantidade de memória utilizada pelo vetor é 10 bytes (2*5).
Programação I
6
Acesso aos elementos do vetor
Cada elemento do vetor é referenciado pelo nome do vetor seguido de um índice escrito entre colchetes.
O primeiro elemento do vetor tem índice 0 e o último tem índice tam-1.
O índice de um vetor deve ser inteiro.Exemplo:
int i = 7;float valor[10]; // declaração de vetorvalor[1] = 6.645; // atribuindo valor a um // elemento do vetorvalor[5] = 3.867;valor[i] = 7.645;
Programação I
7
Inicialização de vetores
Sintaxe: A sintaxe para a inicialização dos elementos de um vetor é:
tipo nome[tam] = {lista de valores};onde:
lista de valores é uma lista dos valores de cada elemento do vetor, separados por vírgulas.
Exemplos:int dia[7] = {12,30,14,7,13,15,6};float nota[5] = {8.4,6.9,4.5,4.6,7.2};char vogal[5] = {'a’, ‘e’, ‘i’, ‘o’, ‘u'};
Programação I
8
Exemplo de uso de Vetores
Imprimindo dados de um vetor#include <stdio.h>#include <stdlib.h>int main (void){ int i; float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9}; printf("Dados do vetor: \n\n"); for (i=0; i<6; i++) { printf("%f ", v[i]); } printf("\n\n"); system("pause"); return 0;}
Programação I
9
Exemplo de uso de Vetores
Calculando somatoria do vetor#include <stdio.h>#include <stdlib.h>int main (void){ int i; float soma = 0.0; //declara e inicializa a soma float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9}; // declara e inicializa o vetor printf("Dados do vetor: \n\n"); for (i=0; i<6; i++) { printf("%.2f ", v[i]); // imprime o valor armazenado no índice i do vetor soma = soma + v[i]; // calcula a soma } // fim do laço for printf("\n\nSoma=%.2f\n\n", soma); system("pause"); return 0;}
Programação I
10
Exemplo de uso de Vetores
Pesquisa em vetores#include <stdio.h>#include <stdlib.h>int main (void){ int i; float valor; float v[6] = {2.3, 5.4, 1.0, 7.6, 8.8, 3.9}; printf("Vetor de dados: \n\n"); for (i=0; i<6; i++) { printf("%.2f ", v[i]); } printf("\n\nQual valor deseja pesquisar? "); scanf("%f",&valor); for (i=0; i<6; i++) { if (v[i]==valor){ printf("\n\tO valor %.2f foi encontrado no indice %d\n\n",valor, i); system("pause"); return 0; } } printf("\n\t%.2f nao foi encontrado no vetor\n\n", valor); system("pause"); return 0;}
Programação I
11
Conjuntos de duas dimensões: Matrizes
Uma matriz representa um conjunto bi-dimensional de valores;
Similar a variáveis simples e vetores, matrizes devem ser declaradas para que o espaço de memória apropriado seja reservado.
Como a matriz representa um conjunto bi-dimensional, devemos especificar as duas dimensões na declaração: o número de linhas e o número de colunas.
Programação I
12
Declaração de matrizes
Sintaxe: A sintaxe para a declaração de uma matriz é a seguinte:
tipo nome[tam1][tam2];
onde:tipo é o tipo dos elementos da matriz: int, float, ...Nome é o nome identificador da matriz. As regras
de nomenclatura dos nomes são as mesmas usadas na declaração de variáveis .
tam1 representa o número de linhastam2 representa o número de colunas.
Programação I
13
Declaração de matrizes
Exemplo:float mat[3][4] ;– Declara uma matriz de 3 linhas por 4 colunas (armazenamento de 12 valores do tipo float).– O nome da variável mat representa uma referência para o espaço de memória reservado.
Programação I
14
Matriz multidimensional
Declarando uma matriz multidimensional
<tipo> nome da matriz [<tam1>] [<tam2>] ...[<tamn>]
Essa matriz possui tam1 x tam2 x ... x tamn variáveis do tipo <tipo>
Cada dimensão é numerada de 0 a tami -1
Programação I
15
Acesso aos elementos da matriz
Para acessar um elemento da matriz, utilizamos indexação dupla, da seguinte forma:
nome_da_matriz [<linha] [<coluna>]
Exemplo: mat[i][j]– Para uma matriz com m linhas e n colunas, os índices usados
no acesso aos elementos devem satisfazer: 0<=i<m e 0<=j<n
– O compilador não verifica se foram utilizados valores validos para a linha e para a coluna. É responsabilidade do programador fazer essa verificação.
Como é armazenada uma matriz em memória:– A memória do computador é linear.– Uma matriz declarada em C é armazenada na memória linha
por linha.
Programação I
16
Acesso aos elementos da matriz
749
1322 | 3 | 1 | 9 | 4 | 7
m[i][j] = i *n + j onde n éo número de colunas.
Exemplo: m[1][2] = 1*3 + 2 = 5
0 1 2 3 4 5
Programação I
17
Inserindo dados em uma Matriz
Lendo dados do teclado/*Leitura*/
for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) { printf ("Matriz[%d][%d]: ", i, j); scanf ("%d", &matriz[i][j]); }
Programação I
18
Exibindo dados de uma Matriz
Escrevendo uma matriz na tela/*Escrita*/for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) printf ("%3d ", matriz[i][j]); printf ("\n");}
Programação I
19
Exemplo de uso de matrizes
printf("Digite o numero de alunos da turma: "); scanf("%d",&n); nalunos = 0; /* lê dados dos alunos*/ while (nalunos < n) { printf("\nAluno %d: \n",nalunos+1); printf("\tDigite a 1a. nota: "); scanf("%f",¬as[nalunos][0]); printf("\tDigite a 2a. nota: "); scanf("%f",¬as[nalunos][1]); printf("\tDigite a 3a. nota: "); scanf("%f",¬as[nalunos][2]); nalunos++; } /* calcula média */ for (i=0;i<n;i++) { for (j=0; j<3; j++) { media = media + notas[i][j]; } } media = media / (3*nalunos); /* exibe média calculada */ printf("\nMedia da disciplina: %.2f\n", media); system("pause"); return 0; }
Programação I
20
Strings (Cadeias de caracteres)
A linguagem C não possui um tipo primitivo que permita a manipulação de strings.
Em C, uma string é implementada através do uso de um vetor de caracteres terminado pelo caractere nulo. O caractere nulo tem configuração binária 00000000 (o seu código ASCII é 0), e é representado pela seqüência '\0' ou pela macro NULL.
Programação I
21
Declarando uma cadeia de caracteres
A declaração geral para uma string é:
char nome_da_string[tamanho+1];
Deve-se declarar o vetor com uma posição a mais do que o tamanho desejado para que se possa incluído o marcador ’\0’ no final da string.
Exemplo: para armazenar uma cadeia de caracteres de até 10 caracteres escreve-se o comando, onde str é o nome da variável string :
char str[11];
Programação I
22
Inicializando Strings
O vetor de caracteres pode ser inicializado de duas maneiras distintas:1. listando os caracteres um a um, e
acrescentando o caractere nulo no final. Ex:char str[11]={'a','l','o',' ','m','u','n','d','o','\0'};
2.usando uma constante do tipo cadeia de caracteres; neste caso, o compilador acrescenta o caracter nulo automaticamente. Ex:
char str[11]="alo mundo";
Programação I
23
Lendo Strings
A biblioteca padrão de E/S, stdio.h, fornece funções para E/S com strings. gets
A função gets() lê uma string do teclado. Sua forma geral é:
gets (nome_da_string);
Os caracteres digitados são transferidos para a memória após um Enter. O Enter não se torna parte do string; em seu lugar é colocado o caractere nulo (‘\0’).
Programação I
24
Lendo Strings
O programa abaixo demonstra o funcionamento da função gets():
#include <stdio.h>#include <stdlib.h>int main (){
char nome[100];printf ("Digite o seu nome: ");gets (nome);printf ("\n Ola %s\n\n",nome);system("pause");return(0);
}
Programação I
25
Lendo Strings
scanf()A função scanf() pode ser utilizada para ler uma cadeia de caracteres do teclado usando o especificador de formato %s.
scanf ("%s", nome_string);Note que não se utiliza o & para strings, pois o nome de
um vetor já é um endereço de memória (o endereço de memória do começo do vetor).
O %s faz com que scanf() leia caracteres até que seja encontrado um caractere de espaço.
Os caracteres lidos são colocados em um vetor de caracteres apontado pelo argumento correspondente, e o resultado tem terminação nula (‘\0’).
Programação I
26
Lendo Strings
Infelizmente, a leitura a partir do teclado utilizando o scanf lê somente até o primeiro espaço, ou seja, lê somente uma palavra, o que torna o seu uso desta forma um pouco restrito.
Para contornar isso, pode-se utilizar a função gets, que faz a leitura até encontrar o caracter de fim de linha (enter ).
gets(texto);
Programação I
27
Lendo Strings
Outra opção é explorar as outras possibilidades fornecidas pela função scanf. Por exemplo, a opção abaixo
scanf("%[^\n]);
lê uma cadeia de caracteres até encontrar um enter.
Programação I
28
Lendo Strings
Aqui, deparamos com outro problema: tanto o comando scanf quanto o gets podem ler mais caracteres que os existentes na string, provocando erros.
A solução aqui, é utilizar uma função que tenha o mesmo comportamento do gets, mas que permita limitar a leitura a um tamanho máximo. As opções são:
fgets (texto, 50, stdin);scanf("%50[^\n]);
Programação I
29
Escrevendo Strings
printf()Pode-se escrever uma string na tela caracter a caracter, mas é mais simples escrever utilizando o comando printf, com o mesmo comando utilizado para leitura (%s)
printf ("%s", nome_string);
Programação I
30
Escrevendo Strings
De forma análoga ao gets e fgets, temos o puts e fputs, que escrevem a string na tela.
puts (texto);fputs (texto, stdout);
Programação I
31
Funções básicas para Strings
A biblioteca string.h, fornece uma gama variada de funções para a manipulação de strings. As mais comuns são fornecidas pela maioria dos compiladores C. São elas:
strlen(texto) : Retorna o número de caracteres da string. O caracter ‘\0’ não é contado.
strcpy(destino, fonte) : Copia a string fonte para a string destino
Programação I
32
Funções básicas para Strings
strcmp(str1, str2) : Compara duas cadeias e caracteres e retorna um valor
= 0 - se str1 e str2 forem iguais< 0 - se str1 for menor que str2> 0 - se str1 for maior que str2
strcat(destino, fonte) : Concatena a string fonte no fim da string destino
Programação I
33
Exemplos de uso das funções básicas
strlen
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char nome[41]; printf("Informe um nome: "); gets(nome); printf("\n%s contem %d caracteres\n\n",nome,strlen(nome)); system("pause"); return 0;}
Programação I
34
Exemplos de uso das funções básicas
strcpy
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char nome[41], aluno[41]; printf("Informe um Nome: "); gets(nome); strcpy(aluno,nome); printf("\nO nome do aluno e' %s\n\n",aluno); system("pause"); return 0;}
Programação I
35
Exemplos de uso das funções básicas
strcmp#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char nome1[41], nome2[41]; printf("Informe um nome: "); gets(nome1); printf("\nInforme outro nome: "); gets(nome2); if(strcmp(nome1,nome2)==0) printf("\nOs nomes sao iguais"); else printf("\nOs nomes sao diferentes"); printf("\n\n"); system("pause"); return 0;}
Programação I
36
Exemplos de uso das funções básicas
strcat#include <stdio.h>#include <stdlib.h>#include <string.h>
int main (){
char str1[100],str2[100];printf ("Entre com uma string: ");gets (str1);strcpy (str2,"Voce digitou a string ");
/* str2 armazenara' Voce digitou a string + o conteudo de str1 */strcat (str2,str1);printf ("\n%s\n\n",str2);system("pause");return(0);
}
Programação I
37
Strings (Cadeia de caracteres)
Vetor de caracteres terminado pelo caracter '\0'. Exemplo:
#include <stdio.h>#include <stdlib.h>int main (){ char str[30]; int i; printf("Digite uma cadeia de caracteres: "); scanf("%s", str); /* escreve um caracter em cada linha*/ for (i = 0; str[i] != '\0'; i++){ printf("%c\n", str[i]); } printf("\n"); system("pause"); return 0;}