Programação Estruturada Linguagem C Estrutura de Dados Homogêneas Prof. Luis Nícolas de Amorim Trigo nicolas.trigo@ifsertao-pe.edu.br Sumário Introdução Exercícios 2 1
Introdução [ 1 3 ] A manipulação de dados é um dos objetivos da criação de programas, que leva este a precisar de dados e informações para exercer as suas funções. Informações simples atendem a uma pequena parcela dos algoritmos. A maioria utiliza uma grande carga de informações e estas, quando utilizadas com tipos primitivos, precisam de inúmeras variáveis, tornando o algoritmo um monstro carregado de repositórios, já que um deste contém apenas uma informação. 3 Introdução [ 2 3 ] A alternativa para atender a esta demanda corresponde a criação de novos repositórios que suportem várias informações. Utilizando os armários como demonstração: uma gaveta só pode conter um objeto, uma variável tem somente uma informação, no tipo primitivo. Quando se trata de tipos construídos, uma gaveta, ou melhor, uma variável pode conter inúmeras informações. 4 2
Introdução [ 3 3 ] Os tipos construídos são denominados de Estrutura de Dados Composta, que consiste em um conjunto de informações armazenados em um repositório. É dividida em duas classificações: Estruturas de Dados Compostas Homogêneas Estruturas de Dados Compostas Heterogêneas 5 Estrutura de Dados Compostas Homogêneas É formado por variáveis que aceitam um número indeterminado de informações a partir de um mesmo tipo primitivo. Ele é dividido em duas partes: Estruturas de Dados Compostas Homogêneas Unidimensionais, conhecido como Vetor; e Estruturas de Dados Compostas Homogêneas Compostas Multidimensionais, conhecido como Matriz. 6 3
Vetor Para entendermos um vetor iremos utilizar o cenário de um edifício. Digamos que um edifício contém apenas um apartamento por andar. Um edifício corresponde a um vetor e cada apartamento corresponde a um elemento deste vetor. 7 Sintaxe de Declaração de Vetor tipo nome_var[tamanho]; Onde: tipo Refere-se ao tipo de dado(int, etc.). nome_var Identifica o nome do vetor. [tamanho] Quantidade de elementos que o vetor armazenará. Exemplo: float notas[4]; // vetor possui 4 posições (índice de 0 a 3) 8 4
Sintaxe de Manipulação de Vetor Atribuição completa do vetor nome_var[tamanho] = {x,y,z; Exemplo: float notas[4]; notas[4] = {5.5,9,6,8; 9 Sintaxe de Manipulação de Vetor Atribuição em uma posição do vetor nome_var[i] = n; Exemplo: Float notas[4]; notas[2] = 6; 10 5
Sintaxe de Manipulação de Vetor Inicialização de um vetor float notas[4]; for(int i=0;i<4;i++){ //<X> varia conforme cada repetição notas[i] = <X>; 11 Sintaxe de Manipulação de Vetor Entrada de dados em um vetor #include <stdio.h>... float notas[4]; for(int i=0;i<4;i++){ scanf( %f,¬as[i]); 12 6
Sintaxe de Manipulação de Vetor Saída de dados em um vetor #include <stdio.h> float notas[4];... for(int i=0;i<4;i++){ printf( \nnota: %.2f,notas[i]); Resultado: Nota: 5.50 Nota: 9.00 Nota: 6.00 Nota: 8.00 13 Exemplo de Vetor Elaborar um algoritmo que leia 3 salários e, no final, imprima o maior. #include <stdio.h> #include <stdlib.h> int main(){ float salario[3], maiorsalario; for(int i=0;i<3;i++){ scanf( %f,&salario[i]); if(i==0){ maiorsalario = salario[i]; else{ if(salario[i] > maiorsalario){ maiorsalario = salario[i]; printf( Maior Salario eh R$ %.2f\n,maiorsalario); system( pause ); 14 7
Matriz Vetor é uma variável composta homogênea unidimensional porque tem somente uma dimensão, ou seja, cresce somente em um sentido. Já uma matriz corresponde a uma variável composta homogênea multidimensional, pois ela pode crescer em vários sentidos. Ela pode variar de matriz bidimensional até N-dimensional, ou seja, projeta de 2 ou mais direções. 15 Matriz 16 8
Matriz Para entendermos uma matriz bidimensional (duas dimensões), será utilizado o cenário de uma platéia de um teatro. O teatro é formado por um palco e uma platéia de 20 cadeiras. Esta platéia é composta por cinco fileiras de quatro cadeiras ou quatro arquibancadas de cinco cadeiras. 17 Matriz Fazendo outra comparação para haver uma melhor compreensão, iremos utilizar novamente o cenário de um edifício, só que, agora, cada andar terá vários apartamentos. Digamos que um edifício tenha três apartamentos por andar, sendo quatro andares. Neste caso, o edifício corresponde a uma matriz com quatro linhas e três colunas, conforme a figura ao lado. As formas de declaração e manipulação a seguir são de estruturas bidimensionais. 18 9
Sintaxe de Declaração de Matriz tipo nome_var[linha][coluna]; Onde: tipo Refere-se ao tipo de dado(int, etc.). nome_var Identifica o nome da matriz. [linha][coluna] Qtde. de elementos que a matriz armazenará. linhas * colunas. Exemplo: int num[2][3]; int num2[4][4] Matriz Retangular Matriz Quadrada 19 Sintaxe de Manipulação de Matriz Atribuição completa da matriz tipo nome_var[linha][coluna] = {{x1,...,y1,{x2,...,y2,...{xn,...,yn; Exemplo: int num[2][2] = {{5,9,{6,8; int num2[3][2] = {{4,7,{5,6,{1,0; 20 10
Sintaxe de Manipulação de Matriz Atribuição em uma posição da matriz nome_var[linha][coluna] = n; Exemplo: int num[2][3]; num[1][0] = 87; int num2[4][4]; num2[0][3] = 23; 21 Sintaxe de Manipulação de Matriz Inicialização de uma matriz int num[2][3]; for(int i=0;i<2;i++){ //i<=1 for(int j=0;j<3;j++){ //j<=2 //<X> varia conforme cada repetição num[i][j] = <X>; 22 11
Sintaxe de Manipulação de Matriz Entrada de dados em uma matriz #include <stdio.h>... int num[2][3]; for(int i=0;i<2;i++){ for(int j=0;j<3;j++){ scanf( %d,&num[i][j]); Saída de dados em uma matriz #include <stdio.h>... int num[2][3]; for(int i=0;i<2;i++){ for(int j=0;j<3;j++){ printf( %d,num[i][j]); 23 Algumas considerações de Matriz Quadrada Se tratando de linha e coluna, refere-se ao índice: A Diagonal Principal corresponde à linha igual à coluna. (Amarelo [67,12,51,87]) O Triângulo Principal Superior corresponde à linha ser sempre inferior à coluna. (Verde [92,2,10,48,76,23]) O Triângulo Principal Inferior corresponde à linha ser sempre superior à coluna. (Azul [43,54,28,99,7,33]) A Diagonal Secundária corresponde à soma da linha e coluna ser a ordem da matriz decrementando um. (Laranja [33,54,2,23]) O Triângulo Secundário Superior corresponde à soma da linha e coluna ser sempre menor do que à ordem da matriz decrementando um. (bege [99,12,48,43,92,67]) O Triângulo Secundário Inferior corresponde à soma da linha e coluna ser maior ou igual à ordem. (lilás [7,51,76,28,10,87]). 24 12
Exemplo de Matriz Elabore um algoritmo que leia a matriz da 3 linhas e 2 colunas. No final, imprima o maior e o menor. #include <stdio.h> #include <stdlib.h> int main(){ int num[3][2],maior,menor; for(int i=0;i<3;i++){ for(int j=0;j<2;j++){ scanf("%d",&num[i][j]); if((i==0)&&(j==0)){ maior = num[i][j]; menor = num[i][j]; else{ if(num[i][j] > maior) maior = num[i][j]; if(num[i][j] < menor) menor = num[i][j]; printf("o maior eh %d\n",maior); printf("o menor eh %d\n",menor); system("pause"); 25 Exercício cio 1. Elabore um algoritmo que, dados dois vetores inteiros de 10 posições, leia os dois vetores, some os valores da mesma posição e armazene em um terceiro vetor inteiro de 10 posições. No final imprima este terceiro vetor. 2. Desenvolver um programa que armazene as alturas de 5 atletas em um vetor e, no final, verifique e mostre o maior altura e menor altura. 3. Elabore um programa que leia 5 inteiros do teclado, armazene em um vetor. No final, mostre os números ímpares. 4. Elabore um algoritmo que leia 10 inteiros do teclado, armazene em um vetor, calcule e, no final, mostre a média dos números ímpares. 26 13
Exercício cio 4. Elabore um algoritmo que leia uma matriz quadrada de ordem 5 e um inteiro. Apresente os números da linha indicada pelo número inteiro fornecido pelo usuário. 5. Elabore um algoritmo que leia uma matriz quadrada de ordem 5 e um inteiro. Apresente os números da coluna indicada pelo número inteiro fornecido pelo usuário. 6. Elabore um algoritmo que receba uma matriz inteira retangular 2x3, gere e imprima uma matriz transposta. Esta é gerada trocando a linha pela coluna. Exemplificado na figura ao lado. num 1 2 3 4 5 6 num transposta 1 4 2 5 3 6 27 Exercício cio 7. Elabore um algoritmo que leia uma matriz inteira quadrada de ordem 4, calcule e mostre no final: a) A soma dos Triângulos Principais e Secundários, tanto superior, quanto inferior. b) A média aritmética da Diagonal Principal e da Diagonal Secundária. 28 14