Buscar

Agregados Homogêneos - Vetores, Matrizes e Strings_UNILA_2019

Prévia do material em texto

Universidade Federal da Integração Latino-Americana - UNILA 
Agregados Homogêneos: 
Vetores, Matrizes e Strings 
1	
Sumário	
•  Vetores	
–  Definição,	declaração,	manipulação	e	exemplos	
–  Exercícios	
•  Matrizes	
–  Definição,	declaração,	manipulação	e	exemplos	
–  Exercícios	
l  Cadeira	de	caracteres	–	strings	
l  Definição	e	declaração		
l  Funções	de	manipulação,	exemplos	e	exercícios	
	
2	Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	
Definição	de	vetores	
•  Ao	utilizamos	variáveis,	podemos	armazenar	apenas	um	valor	por	vez	
•  Agora,	imagine	um	programa	onde	precisa-se	armazenar	as	notas	de	5	
pessoas	
•  Com	seus	conhecimentos	seria	necessário	criar	cinco	variáveis	para	
armazenar	as	notas	
	
... 
float n1, n2, n3, n4, n5; 
 
n1=9,5; n2=5,5; n3=8,0; n4=8,5; n5=6,0; 
.... 
3	Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	
Definição	de	vetores	
•  Em	C	existem	estruturas	que	permitem	agruparmos	várias	informações	
dentro	de	uma	mesma	variável	
•  Estas	estruturas	são	os	tipos	de	dados	homogêneos	e	recebem	diversos	
nomes:	
–  Variáveis	indexadas,	compostas,	subscritas	
–  Vetores	
–  Matrizes	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 4	
Definição	de	vetores	
•  Vetores	são	usados	para	conjunto	de	dados	que	possuem	a	mesma	
característica,	mesmo	tipo	de	informação	(agregado	homogêneo)	
	
•  O	vetor	é	uma	variável	que	recebe	um	nome		único	e	seus	elementos	são	
acessados	linearmente	por	meio	de	índices	
	
•  Uma	variável	do	tipo	vetor	armazena	diversos	elementos	do	tipo	pré-
definido	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 5	
Declaração	de	vetores	
•  Sintaxe:	tipo_dados			nome_vetor[tamanho];	
•  Exemplos:	
	int			vetor_idade[10];	/*armazena	10	idades*/	
	float			vetor_altura[50];	/*armazena	50	alturas*/	
•  Se	o	vetor	tem	tamanho	N,	os	elementos	de	0	até	N-1	são	acessíveis.	
Exemplo	N=10:	
–  Declaração:	int			vetor_idade[10];	
•  Primeiro	elemento:	vetor_idade[0]	=	43;	
•  Quinto	elemento: 	vetor_idade[4]	=	15;	
•  Último	elemento: 	vetor_idade[9]	=	24;’	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 6	
Declaração	de	vetores	
•  Representação	
– tipo_dados			nome_vetor[tamanho];	
	
	
–  int	v_idade[6]; 	/*armazena	6	idades*/	
	
	
– float	va[10];	/*armazena	10	valores	reais*/	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 7	
v_idade[0]	 v_idade[1]	 v_idade[2]	 v_idade[3]	 v_idade[4]	 v_idade[5]	
nome_vetor[0]	 nome_vetor[1]	 ......	 nome_vetor[tamanho-1]	
va[0]	 va[1]	 va[2]	 va[3]	 va[4]	 va[5]	 va[6]	 va[7]	 va[8]	 va[9]	
Manipulação	de	vetores	
•  Para	guardar	as	5	notas	de	alunos	vistas	anteriormente	
podemos	usar	um	vetor	de	notas.	Ex.	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 8	
... 
float vNotas[5]; 
 
vNotas[0]=9,5; 
vNotas[1]=5,5; 
vNotas[2]=8,0; 
vNotas[3]=8,5; 
vNotas[4]=6,0; 
.... 
Manipulação	de	vetores	
•  Para	ler	do	usuário	e	imprimir	as	5	notas	de	alunos	usando	um	vetor.	Ex.	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 9	
#include<stdio.h> 
int main() { 
 
 float vNotas[5]; /*declaracao do vetor*/ 
 int cont; /*declaracao do indice do vetor e loop (for)*/ 
 
 for (cont=0; cont<5; cont++) { /*leitura das 5 notas*/ 
 printf(“Informe a %d nota: ”, cont); 
 scanf(“%f”, &vNotas[cont]); 
 } 
 for (cont=0; cont<5;cont++) /*imprimindo as 5 notas*/ 
 printf(“%d nota = %.2f \n”, cont, vNotas[cont]); 
 return(0); 
} 
Exercício	com	vetores	
1.	Leia	do	usuário	a	altura	de	15	pessoas	e	as	armazene.	Após	isso,	apresente	
em	tela	todas	as	alturas	no	seguinte	formato:	
	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 10	
Elemento 0 tem valor 1,76 
Elemento 1 tem valor 1,55 
Elemento 2 tem valor 1,66 
Elemento 3 tem valor 1,85 
.... 
Elemento 13 tem valor 2,05 
Elemento 14 tem valor 1,96 
Exercício	com	vetores	
2.	Leia	do	usuário	as	alturas	de	15	pessoas.	Após	a	leitura	das	
alturas,	apresente:	
a)  Todas	as	alturas	lidas	em	tela		
b)  Menor	altura	e	sua	posição	
c)  Maior	altura	e	sua	posição	
d)  Média	de	todas	as	alturas	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 11	
Exercício	com	vetores	
3.	Leia	do	usuário	a	altura	de	N	pessoas.	Após	a	leitura	das	
alturas,	apresente	:	
a)  Números	de	alturas	fornecidas	pelo	usuário	
b)  Menor	altura	e	sua	posição	
c)  Maior	altura	e	sua	posição	
d)  Média	de	todas	as	alturas	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 12	
Definição	de	matrizes	
•  A	matriz	é	uma	extensão	do	conceito	de	vetor	
•  A	matriz	mais	comum	possui	duas	dimensões:	
–  Linha	(horizontal)	
–  Coluna	(vertical)	
•  A	matriz	é	uma	variável	que	recebe	um	nome		único	e	seus	elementos	são	
acessados	por	meio	de	dois	índices	relativos	a	linha	e	coluna	
–  Armazena	valores	contendo	o	mesmo	tipo	de	informação	(agregado	
homogêneo)	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 13	
Definição	de	matrizes	
•  A	quantidade	de	elementos	de	uma	matriz	é	dada	por	linhas	x	colunas	
•  Elementos	de	uma	matriz	M	de	tamanho	L	x	C:	
	
	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 14	
M[0,	1]	 M[0,	2]	
M[1,	0]	 M[1,	1]	 M[1,	2]	
M[2,	0]	 M[2,	1]	 M[2,	2]	
....	
....	
....	
....	 ....	 ....	 ....	
M[L-1,	0]	 M[L-1,	1]	 M[L-1,	2]	 ....	
M[0,	C-1]	
M[1,	C-1]	
M[2,	C-1]	
....	
M[L-1,	C-1]	
Linhas	
Colunas	
M[0,	1]	
-	 +	
-	
+	
Declaração	de	matrizes	
•  Sintaxe:		
	tipo_dado		nome_matriz[tam_linha][tam_coluna];	
•  Exemplos:	
	int			mat_int[3][3];	/*armazena	9	inteiros*/	
	float			mat_notas[5][4];	/*armazena	20	notas*/	
	char			mat_char[5][5];	/*armazena	25	caracteres*/	
•  Se	uma	matriz	M	tem	tamanho	LxC,	os	elementos	de	M[0,0]	até	M[L-1,	C-1]	
são	acessíveis	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 15	
Declaração	de	matrizes	
•  Exemplo	L=3		e	C=5:	
–  Declaração:	int		mat1[3][5];	
•  Primeiro	elemento: 		mat1[0][0]	=	43;	
•  Qualquer	elemento:	mat1[1][3]	=	65;	
•  Último	elemento: 		mat1[2][4]	=	24;	
•  Exemplo	L=10		e	C=20:	
–  Declaração:	double		mat2[10][20];	
•  Primeiro	elemento: 		mat2[0][0]	=	1.87345;	
•  Qualquer	elemento:	mat2[5][7]	=	-21.54;	
•  Último	elemento: 		mat2[9][19]	=	23923.36765;	
	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 16	
Declaração	de	matrizes	
•  Representação	
–  int	mat1[3][3];	/*armazena	9	inteiros*/	
	
	
	
	
–  float	mat2[5,	3];	/*armazena	15	floats*/	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 17	
mat1[0][0]	 mat1[0][1]	 mat1[0][2]	
mat1[1][0]	 mat1[1][1]	 mat1[1][2]	
mat1[2][0]	 mat1[2][1]	 mat1[2][2]	
43	 5	 28	
2435	 6	 -13	
134	 -73	 772	
mat2[0][0]	 mat2[0][1]	 mat2[0][2]	
mat2[1][0]	 mat2[1][1]	 mat2[1][2]	
mat2[2][0]	 mat2[2][1]	 mat2[2][2]	
mat2[3][0]	 mat2[3][1]	 mat2[3][2]	
mat2[4][0]	 mat2[4][1]	 mat2[4][2]	
1.2	 10.23	 -9.22	
4.5	 5.23	 12.33	
-3.6	 77.2433	 7.2	
20.24	 412.3	 0.00	
1845.2	 1122.22	 1.211	
Manipulação	de	matrizes	
•  Para	guardar	as	5	notas	de	um	aluno	basta	utilizarmos	um	
vetor	com	cinco	elementos.	
•  Agora,	cada	aluno	tem	5	notas	e	você	precisa	guardar	as	
notas	de	4	alunos.	Como	fazer	isto?	
	
	
	
	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 18	
Cada	linha	representará	um	aluno	
Cada	coluna	representará	uma	nota	
Usando uma matriz de notas com 
tamanho 4 linhas por 5 colunas 
Manipulação	de	matrizes	
•  Agora,	cada	aluno	tem	5	notas	e	você	precisa	guardar	as	notas	de	4	
alunos.	Como	fazer	isto?	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 19	
float mNotas[4][5]; 
 
/*lendo estaticamente as notas do aluno 1*/ 
mNotas[0][0]=5,5; mNotas[0][1]=3,5; mNotas[0][2]=7,0; mNotas[0]
[3]=9,5; mNotas[0][4]=9,5; 
 
/*lendo do usuario as notas do aluno 4*/ 
scanf(“%f”, &mNotas[3][0]); scanf(“%f”, &mNotas[3][1]); scanf(“%f”, 
&mNotas[3][2]); scanf(“%f”, &mNotas[3][3]); scanf(“%f”, &mNotas[3]
[4]); 
Manipulação	de	matrizes	
•  Agora,	cada	aluno	tem	5	notas	e	você	precisaguardar	as	notas	de	4	
alunos.	Como	fazer	isto?	
	
	
	
	
	
	
	
	
•  As	notas	do	aluno	2	são	acessadas	por	:	
–  mNotas[1][0],		mNotas[1][1]		....	mNotas[1][4]	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 20	
6.5	 8.5	 4.5	 6.5	 6.5	
9.0	 8.0	 8.5	 6.5	 8.5	
6.0	 8.0	 4.5	 7.0	 6.5	
5.5	 8.5	 2.5	 6.5	 7.5	
Notas	
Alunos	
Aluno	1	
Aluno	2	
Aluno	3	
Aluno	4	
Manipulação	de	vetores	
•  Lendo	e	imprimindo	dados	de	uma	matriz	(3x4)	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 21	
#include<stdio.h> 
int main() { 
 int mat[3][3]; /*declaracao da matriz*/ 
 int lin, col; /*declaracao dos indices da matriz e loop (for)*/ 
 /*leitura de dados para a matriz*/ 
 for (lin=0; lin<3; lin++) { /*for para percorrer cada linha*/ 
 for (col=0; col<3; col++) { /*for para percorrer cada coluna*/ 
 printf(“Informe o valor do elemento m[%d][%d]: ”, lin, col); 
 scanf(“%d”, &mat[lin][col]); 
 } 
 } /*impressao de dados para da matriz*/ 
 for (lin=0; lin<3; lin++) /*for para percorrer cada linha*/ 
 for (col=0; col<3; col++) /*for para percorrer cada coluna*/ 
 printf(“Elemento m[%d][%d] = %d \n”, lin, col, mat[lin][col]); 
 return 0; 
} 
Exercício	com	matrizes	
1.  Leia	do	usuário	valores	inteiros	para	uma	matriz	3x3.	Após	isso,	
apresente	os	valores	lidos	no	seguinte	formato:	
	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 22	
Matriz na linha=0 coluna=0 tem valor 65 
Matriz na linha=0 coluna=1 tem valor 9 
Matriz na linha=0 coluna=2 tem valor 56 
Matriz na linha=1 coluna=0 tem valor -83 
Matriz na linha=1 coluna=1 tem valor 58 
Matriz na linha=1 coluna=2 tem valor 0 
Matriz na linha=2 coluna=0 tem valor 11 
Matriz na linha=2 coluna=1 tem valor 8 
Matriz na linha=2 coluna=2 tem valor 13 
Exercício	com	matrizes	
2.	Leia	do	usuário	valores	reais	para	uma	matriz	3x4.	Após	a	leitura	das	
alturas,	apresente:	
a)  Menor	valor	e	sua	posição	(linha	e	coluna)	
b)  Maior	altura	e	sua	posição	(linha	e	coluna)	
c)  Quantidade	de	valores	da	matriz	
d)  Média	de	todas	os	valores	lidos	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 23	
Exercício	com	matrizes	
3.	Leia	do	usuário	o	tamanho	de	uma	matriz	(LxC).	Depois	leia	dados	inteiros	
para	essa	matriz	M[L][C]	e	apresente	:	
a)  Tamanho	da	matriz	
b)  Menor	altura	e	sua	posição	(linha	e	coluna)	
c)  Maior	altura	e	sua	posição	(linha	e	coluna)	
d)  Média	de	todos	os	valores	
e)  Elementos	da	diagonal	principal	da	matriz	M	
Universidade	Federal	da	Integração	Latino-Americana	-	UNILA	 24	
Universidade Federal da Integração Latino-Americana - UNILA 
O que são Strings?... 
1)  Vetores de caracteres 
2)  Strings têm como seu último elemento o caracter 
‘\0’ 
3)  Declaração é feita como qualquer outro vetor: 
¡  char nome_da_string [tamanho]; 
4)  Atribuindo valores a strings: 
 
char nome1[10] = "Cassio"; 
char nome2[10] = {'C', 'a', 's', 's', 'i', 'o'}; 
char nome3[] = "Turma X11"; 
Universidade Federal da Integração Latino-Americana - UNILA 
Lendo strings a partir do usuário 
#include<stdio.h> 
 
void main(){ 
char nome[50]; 
scanf(“%s”, &nome); 
gets(nome2); 
 fgets(nome2, 50, stdin); 
} 
3	formas	diferentes:	
Problemas: 
l  1) scanf não lê espaços em branco. 
 Se o usuário digitar: 
 >“Alexandre Costa e Silva” 
 O scanf vai pegar apenas “Alexandre”. 
 
l  2) O gets pega tudo. Porém, seu uso não é 
recomendado, nem mesmo pelo 
compilador C: warning: the `gets' function is 
dangerous and should not be used. 
Universidade Federal da Integração Latino-Americana - UNILA 
String como dados primitivos?!?!... 
l  Em C, strings são vetores, e por isso não podem ser tratadas 
como dados primitivos: 
 
string1=string2;        /* NÃO faca isso!!!!!! */ 
 
l  As strings devem ser atribuídas elemento a elemento. 
l  Comparações devem ser feitas uma a uma também 
 
int eh_igual =1; 
for(i=0;i<6;i++){ 
 if (nome1[i] != nome2[i]) eh_igual = 0; 
 } 
Funções auxiliares (1) 
1) Manipular textos caractere a caractere não é 
interessante, tampouco produtivo!! 
2) C oferece funções especiais para manipular strings 
de maneira mais apropriada (biblioteca string.h) 
¡  Determinando  o tamanho de uma string 
÷ strlen(string); 
¡  Copiando uma string em outra 
÷ strcpy(destino, origem); 
¡  Unindo duas strings: 
÷ strcat(destino, origem); 
¡  Convertendo uma string para maiúsculas e minuscula: 
÷ strupr(string) e strlwr(string); 
Funções auxiliares (2) 
¡  Invertendo uma string utilizando a função strrev( ): 
÷ strrev(string); 
¡  Comparando duas strings: 
÷ strcmp(string1,string2); 
Exemplos 
/* strcat example */ 
#include <stdio.h> 
#include <string.h> 
 
int main () 
{ 
 char str[80]; 
 strcpy (str,"Estas "); 
 strcat (str,"strings "); 
 strcat (str,"estão "); 
 strcat (str,"concatenadas."); 
 printf (“%s”,str); 
 return 0; 
} 
Saída do programa: 
 
Estas strings estão concatenadas. 
Universidade Federal da Integração Latino-Americana - UNILA 31	
Bibliografias 
l Wirth, N. Algoritmos e Estruturas de Dados, LTC Editora, 1989. 
l Oliveira, Ulysses. Programando em C, Ciência Moderna, 2008. 
l Mizrahi, V. V. Treinamento em Linguagem C, Pearson Education, 
2008. 
l Dobay, E. S; Programação em C, Apostila. Instituto de Física da 
Universidade de São Paulo, 2010. 
l Cruz, A. J. de O. C. Curso de Linguagem C. Instituto de 
Matemática da UFRJ. Apostila, 2011. 
l Feofiloff, Paulo. Algoritmos em Linguagem C, Campus, 2008. 
l Ricarte, I. L. M. Programação em C (nota de aula). Disponível em 
< http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/
node129.html> , Acessado em setembro de 2011, 2003. 
31

Continue navegando