• Nenhum resultado encontrado

LINGUAGEM DE PROGRAMAÇÃO ESTRUTURADA CAPÍTULO 6 ARRAYS (VETORES E MATRIZES)

N/A
N/A
Protected

Academic year: 2021

Share "LINGUAGEM DE PROGRAMAÇÃO ESTRUTURADA CAPÍTULO 6 ARRAYS (VETORES E MATRIZES)"

Copied!
6
0
0

Texto

(1)

LINGUAGEM DE PROGRAMAÇÃO ESTRUTURADA CAPÍTULO 6 – ARRAYS (VETORES E MATRIZES)

A tradução do termo “array” para a língua portuguesa seria “arranjo”. Em programação, emprega-se este termo para a representação de uma variável com diversos elementos ordenados segundo uma seqüência de índices, Fig. 24.

Imaginar que vetores e matrizes em programação são comparados às matrizes e vetores tal qual são representados matematicamente é um grande erro. A amplitude da aplicação de matrizes e vetores em tecnologia da informação é muito mais ampla do que se pode imaginar matematicamente. Por exemplo, pode-se empregar uma matriz para a representação de uma sala de teatro, onde o índice que representa a linha e a coluna de um elemento representaria a fileira (poderia ser por uma letra) e a numeração da cadeira que um indivíduo estaria sentado. Este indivíduo poderia ser representado pelo número do seu ingresso e seria o elemento representado na matriz. Uma matriz poderia representar a disposição de mesas em um restaurante, um tabuleiro de xadrez, etc.. Vetores podem representar listas de compras, uma lista de procedimentos para instalação de um software em um computador, uma pilha ou uma fila de dados estruturados ou ordenados segundo uma seqüência lógica, uma pilha de arquivos textos que representa uma caixa de entrada de mensagens de celular, etc..

Em todas as linguagens de programação, vetores, são tratados como arrays unidimensionais e matrizes multidimensionais, ou seja, vetores possuem apenas um índice para representação de seus elementos, pois, estão todos dispostos em uma única coluna ou linha. Matrizes (arrays multidimensionais) possuem dois ou mais índices e depende da dimensão desejada e do tipo de elemento representado.

As variáveis conhecidas até este capítulo eram denominadas de variáveis de tipos simples. Já os arrays são conhecidos, assim como estruturas e enumerações, como variáveis de tipos complexos. Estas variáveis possuem características próprias onde se destacam:

                =                 = ) 2 , 4 ( ) 1 , 4 ( ) 0 , 4 ( ) 2 , 3 ( ) 1 , 3 ( ) 0 , 3 ( ) 2 , 2 ( ) 1 , 2 ( ) 0 , 2 ( ) 2 , 1 ( ) 1 , 1 ( ) 0 , 1 ( ) 2 , 0 ( ) 1 , 0 ( ) 0 , 0 ( ) 4 ( ) 3 ( ) 2 ( ) 1 ( ) 0 ( a a a a a a a a a a a a a a a A a a a a a A

Figura 24 – Formas de um Array

                =                 = ) 2 , 4 ( ) 1 , 4 ( ) 0 , 4 ( ) 2 , 3 ( ) 1 , 3 ( ) 0 , 3 ( ) 2 , 2 ( ) 1 , 2 ( ) 0 , 2 ( ) 2 , 1 ( ) 1 , 1 ( ) 0 , 1 ( ) 2 , 0 ( ) 1 , 0 ( ) 0 , 0 ( ) 4 ( ) 3 ( ) 2 ( ) 1 ( ) 0 ( a a a a a a a a a a a a a a a A a a a a a A

(2)

• Os elementos são tratados pela sua localização, ou seja, índice que representa a posição da linha (no caso do vetor) e posição da linha e da coluna para matrizes, figura 25;

• Os elementos são de um mesmo tipo, ou seja, uma matriz ou vetor não podem possuir tipos diferentes e

• A identificação de um elemento se dá pelo identificador do vetor ou da matriz e os índices que representam sua posição dentro da estrutura, figura 25.

Observe da figuras 25-a, adotando-se um índice com valor inicial 0 (zero), conforme o padrão da linguagem C#, o elemento A[3] seria o String “São Paulo”, já na figura 25-b, que representa uma matriz de imagem binária, adotando-se o mesmo critério de índices para localização de um valor, no caso representado por uma posição em uma linha e uma coluna, tem-se que A[1,1]=0.

6.1 – Vetores

A sintaxe de declaração de um vetor em C# é: <tipoBase> [ ] <nome>;

Onde tipoBase pode ser qualquer tipo de variável, inclusive de outros tipos complexos que não serão tratados nesta apostila, como enumeração e estrutura.

Os vetores devem ser criados (ou declarados) e inicializados. A inicialização dos vetores pode ser feita de várias formas. Pode-se especificar o conteúdo completo do vetor ou e seu tamanho e usar a palavra-chave new para inicialização de seus elementos.

) ( ) ( 0 1 1 1 1 1 0 0 0 1 1 0 0 0 1 0 1 1 1 1 1 0 0 0 1 1 0 0 0 1 0 1 1 1 1 " " " " " " " " " " " " " " b a A Alegre Porto lis Florianópo Curitiba Paulo São Janeiro de Rio Horizonte Belo Vitória A                       =                       =

Figura 25 – (a) Vetor de String representando as capitais do Sul e Sudeste do Brasil (b) Matriz com elementos binários representando a imagem da letra B.

) ( ) ( 0 1 1 1 1 1 0 0 0 1 1 0 0 0 1 0 1 1 1 1 1 0 0 0 1 1 0 0 0 1 0 1 1 1 1 " " " " " " " " " " " " " " b a A Alegre Porto lis Florianópo Curitiba Paulo São Janeiro de Rio Horizonte Belo Vitória A                       =                       =

Figura 25 – (a) Vetor de String representando as capitais do Sul e Sudeste do Brasil (b) Matriz com elementos binários representando a imagem da letra B.

(3)

Ex.:

int [ ] myIntArray = {5, 9, 10, 2, 99};

O vetor myIntArray possui 5 elementos cada qual com um valor de número inteiro

atribuído a ele. Desta forma tem-se:

myIntArray[0]=5; myIntArray[1]=9; myIntArray[2]=10; myIntArray[3]=2; myIntArray[4]=99;

Neste segundo exemplo: int [ ] myIntArray = new int[5]; todos os elementos do array foram inicializados com o valor zero, devendo ser atribuído os valores posteriormente. A sintaxe de declaração neste caso é:

int [ ] myIntArray = new int[tamanho do Vetor];

Deve-se ressaltar que em nenhum dos casos pode-se atribuir um número maior de valores aos elementos do vetor.

Atividade em Laboratório:

Um fabricante de motores deseja avaliar a resistência de uma das peças componentes de seu motor em relação à temperatura. Para tanto, diversos experimentos foram realizados e cada um deles consistia na medição da temperatura da peça em dois pontos diferentes. Um algoritmo foi elaborado com o propósito de receber como entrada a leitura de cada um dos termopares (medidores de temperatura considerando a condução de calor) e apresentar como saída, de forma ordenada, a maior e menor temperatura medida e a média entre as duas temperaturas.

Vale ressaltar que o número de experimentos para uma peça é indefinido tendo como máximo 15 experimentos.

SOLUÇÃO:

Para entrada de dados (temperaturas medidas) empregaremos dois vetores: T1 e T2 contendo 15 elementos cada. Deve-se ressaltar que caso não utilizemos os demais elementos o espaço reservado para eles não será utilizado e ficará sem conteúdo na memória do computador. Sendo assim, a sintaxe de declaração destes vetores seria:

float [ ] T1:new float[15]; float [ ] T2: new float[15];

(4)

Observe ainda que serão criados vetores com índices e dimensões correspondentes de forma a armazenar os parâmetros de saída (resultados desejados) do algoritmo:

float [ ] T_M:new float[15]; float [ ] T_m: new float[15]; float [ ] T_media:new float[15];

Uma estrutura de repetição deve ser aplicada com uma variável de controle “i”. Esta variável terá como função a variação do valor do índice que representa a posição do elemento no vetor. Com isto faz-se a leitura dos vetores elemento a elemento e os vetores que representarão o resultado do algoritmo terão índices correspondentes. Fica claro então que, se numerarmos os experimentos (sendo o número máximo “nexp”), teríamos índices variando de 0 (zero) a nexp-1 e cada um deles corresponderiam a um experimento.

Início T1[15],T2[15],T_M[15], T_m[15],T-media[15], nexp,i nexp I ← 0;i < nexp;1 T1[i] , T2[i] T_media ←(T1[i]+T2[i])/2 (T1[i]-T2[i]) > 0 T_M[i] ←T2[i] T_m[i] ←T1[i] T_M[i] ←T2[i] T_m[i] ←T1[i] V V F

Temp1(°C) Temp2(°C) T Maior(°C) T Menor(°C) T Média(°C)

I ← 0;i < nexp;1 T1[i],T2[i],T_M[i],T_m[i],T_media[i] Fim F V F

Figura 26 – Algoritmo para avaliação experimental da temperatura média de uma autopeça - Fluxograma

Início T1[15],T2[15],T_M[15], T_m[15],T-media[15], nexp,i nexp I ← 0;i < nexp;1 T1[i] , T2[i] T_media ←(T1[i]+T2[i])/2 (T1[i]-T2[i]) > 0 T_M[i] ←T2[i] T_m[i] ←T1[i] T_M[i] ←T2[i] T_m[i] ←T1[i] V V F

Temp1(°C) Temp2(°C) T Maior(°C) T Menor(°C) T Média(°C)

I ← 0;i < nexp;1 T1[i],T2[i],T_M[i],T_m[i],T_media[i] Fim F V F

Figura 26 – Algoritmo para avaliação experimental da temperatura média de uma autopeça - Fluxograma

(5)

O algoritmo resultante em C# fica:

static void Main(string[] args) {

/* Cálculo das temperaturas máximas, mínimas e médias em um conjunto de * experimentos realizados em uma indústria automobilistica */

// Declaração de variáveis // nexp - número de experimentos // i - variável de controle

// T1[0 ... nexp-1] - Temperatura medida no termopar de número 1 // T2[0 ... nexp-1] - Temperatura medida no termopar de número 2 // T_M[0 ... nexp-1] - Maior valor de temperatura entre os termopares; // T_m[0 ... nexp-1] - Menor valor de temperatura entre os termopares; // T_media[0 ... nexp-1] - Temperatura média entre os termopares.

int i, nexp;

float[] T1 = new float[15]; float[] T2 = new float[15]; float[] T_M = new float[15]; float[] T_m = new float[15]; float[] T_media = new float[15];

//

// Entrada de Dados

// Número de experimentos: nexp //

Console.Write("**********************\n Digite o número de experimentos ==> "); nexp = int.Parse(Console.ReadLine());

for (i = 0; i < nexp; i++) {

//

// Entrada de Dados:

// Temperaturas nos termopares: T1 e T2 //

Console.WriteLine(" ====> Experimento n. {0} ", i + 1);

Console.Write(" Digite a temperatura em °C do Primeiro Termopar ==> "); T1[i] = float.Parse(Console.ReadLine());

Console.Write(" Digite a temperatura em °C do Segundo Termopar ==> "); T2[i] = float.Parse(Console.ReadLine());

T_media[i] = (T1[i] + T2[i]) / 2; if (T1[i] - T2[i] >= 0) { T_M[i] = T1[i]; T_m[i] = T2[i]; } else { T_M[i] = T2[i]; T_m[i] = T1[i]; } }

Console.WriteLine("T - 1 (°C) \tT - 2 (°C) \tMaior T (°C) \tMenor T (°C) \tT Média (°C)");

for (i = 0; i < nexp; i++)

Console.Write("{0} \t\t{1} \t\t{2} \t\t{3} \t\t{4}\n", T1[i], T2[i], T_M[i], T_m[i], T_media[i]);

} } }

A saída do algoritmo é apresentada na figura 27. Os resultados referem-se aos dados de entrada também apresentados na figura.

ATIVIDADE: Faça a implementação do algoritmo e faça sua execução passo a passo (Tecla F10). Observe o fluxo de execução do algoritmo e a concordância entre as variáveis de entrada e de saída.

Faça um teste de mesa e execute novamente o programa. Faça uma verificação se os resultados obtidos pela execução do programa estão de acordo com o teste de mesa realizado.

(6)

Figura 27 – Apresentação do console resultante da execução do algoritmo.

Exercícios Propostos :

1) Elabore um algoritmo que receba como entrada dois vetores A e B cujos elementos são números inteiros. O algoritmo deverá apresentar como saída três vetores, C, D e E, sendo:

C = A + B D = A – B E = A * E

2) Elabore um algoritmo que receba como entrada um vetor de caracteres contendo uma palavra qualquer. O algoritmo deverá apresentar como saída esta palavra invertida.

3) Elabore um algoritmo que receba como entrada as componentes de dois vetores

) , , (x1 y1 z1 u = e v =(x2,y2,z2) 

. O algoritmo deverá apresentar como resultado o vetorw

que é o vetor resultante da soma entre os vetores, bem como os módulos dos vetores, o produto escalar e o ângulo entre os vetores u

e v

.

4) Elabore um algoritmo que calcule e exiba os ângulos formados por um vetor e os eixos de um sistema cartesiano no R3. (Sugestão: Lembre-se que os eixos de um sistema podem ser representados por versores e, o produto escalar entre esses vetores e versores resultam em uma expressão matemática que permite a obtenção do ângulo entre eles).

5) Elabore um algoritmo que receba como entrada uma string. Este algoritmo deverá transformar este string em um vetor e a seguir escrever esta palavra invertida.

Nota: faça um teste (ou investigação) das instruções abaixo:

nome_da_string.ToCharArray( ); nome_da_string.ToLower( ); • nome_da_string.ToUpper( );

Referências

Documentos relacionados