• Nenhum resultado encontrado

Atribuição e obtenção de valores em matriz

No documento Introdução ao C em 10 aulas (páginas 94-102)

A atribuição e obtenção de valores em matriz segue os mesmos procedimentos rea- lizados para um vetor, a única diferença será que, neste caso, é preciso informar as dimensões no qual se deseja armazenar ou obter um valor. A figura19esclarece bem em como definir os argumentos de linha e coluna ao fazer acesso ou atribuição à uma matriz.

Figura 19 – Exemplo de acesso à matriz

Como pode ver na figura19, para acessar, por exemplo, o valor que intuitivamente pode-se dizer que seria a segunda nota do segundo aluno, então basta informar 1 para o primeiro argumento, a linha, e 1 para o segundo argumento, a coluna. Pois, apesar de ser a segunda nota do segundo aluno, as posições da matriz iniciam com o valor 0

(zero), assim como acontece com o vetor. Veja a seguir alguns exemplos de atribuição e

acesso à valores de uma matriz.

1 //atribuindo valores a matriz matNotas

2 matNotas[1][2] = 2.5;

3 matNotas[2][2] = 3;

4

5 //atribuindo valor com o scanf

6 printf("Informe a segunda nota do aluno \n");

7 scanf("%f", &matNotas[1][1]);

8

9 //atribuindo valor com calculo de soma

10 matNotas[1][3] = matNotas[1][0] + matNotas[1][1] + matNotas[1][2];

11

12 //imprimindo a partir de uma posicao de matNotas

13 printf("Nota Final: %f \n", matNotas[1][3]);

As linhas 2 e 3 são exemplos de atribuição de valor à posições da matriz matNotas, na linha 7 é feita atribuição utilizando o scanf, a linha 10 mostra um exemplo de atribuição com um cálculo de soma, cujos valores obtidos são da própria matNotas. A linha 13 apresenta outro exemplo de obtenção de um valor da matriz, neste caso, para impressão na tela com a função printf.

5.4. Atribuição e acesso a valores com estrutura de iteração 91

5.4

Atribuição e acesso a valores com estrutura de ite-

ração

É possível utilizar laços com matrizes também, contudo, no caso da matriz, em geral é necessário 1 laço para cada dimensão. Considerando o exemplo da figura19, são necessários dois laços, uma vez que a matriz tem duas dimensões, sendo 4 linhas e 4 colunas. A seguir um exemplo em forma de exercício.

5.4.1

Exercício de Exemplo

Faça um programa em C que armazene as 3 notas de 4 alunos. Após a leitura o programa deve calcular a nota final com o somatório das três notas. Ao final deve imprimir as notas e a nota final para cada aluno.

1 #include <stdio.h>

2 #include <stdlib.h>

3 void main() {

4 float matNotas[4][4];

5 int i, j;

6 for (i=0; i<4; i++) {

7 for (j=0; j<3; j++) {

8 printf("Para o aluno %d informe a nota %d: \n", i+1, j+1);

9 scanf("%f", &matNotas[i][j]);

10 }

11 matNotas[i][3] = matNotas[i][0] + matNotas[i][1] + matNotas[i][2];

12 }

13

14 //imprimindo as notas dos alunos

15 for (i=0; i<4; i++) {

16 printf("Notas do Aluno %d\n", i);

17 for (j=0; j<3; j++) { 18 if (j != 2) 19 printf("%f \t", matNotas[i][j]); 20 else 21 printf("%f \n", matNotas[i][j]); 22 }

23 printf("Nota final...: %f \n", matNotas[i][3]);

24 }

25 }

Na linha 4 foi feita a declaração da matriz matNotas com duas dimensões sendo 4 linhas por 4 colunas. Foi definida com esse tamanho para permitir armazenar para os quatro alunos, as 3 notas e a nota final. Na linha 5 foram declaradas duas variáveis, i e j, para uso como contador dos dois laços necessários para percorrer as duas dimensões da matriz. Entre as linhas 6 e 12 foi implementada a leitura das notas e o cálculo da nota final, note que o primeiro laço na linha 6 é responsável pela iteração das linhas, ou seja, a cada iteração deste laço uma linha da matriz é lida, começando da primeira. Na linha 7, o laço é responsável por percorrer as colunas, assim, a cada linha que é percorrida, todas as colunas também o são, e a cada coluna percorrida, uma nota é lida, com o

scanf na linha 9.

Agora veja o printf da linha 8, percebeu que foram utilizados os contadores i e j para indicar para qual aluno são lançadas as notas no momento e qual nota está sendo lançada? Entendeu porque foi somado 1 no contador, como em i+1? Bem, a soma foi

92 Aula 5. Matrizes

realizada porque como os contadores iniciam com zero, seria estranho dizer que estão sendo lançadas as notas do aluno 0 (zero) ou que está sendo lançada a nota da avaliação 0, assim, bastou somar 1 para remover a estranheza.

Na linha 11 foi realizado o cálculo da nota final, este é mais um ponto de atenção, veja que o cálculo foi realizado dentro do escopo do primeiro laço, pois a chave, }, na linha 10 encerra o escopo do laço que percorre as colunas. Para entender porque, basta pensar o seguinte, para calcular a nota final é necessário ter todas as notas lançadas, assim, o laço responsável pelo lançamento das notas já deve estar completo. Por outro lado, é preciso calcular a nota para todos os alunos, portanto esse é o motivo do cálculo ter sido posicionado ao final do escopo do laço que percorre as linhas, ou seja, os alunos.

Entre as linhas 15 e 24 é realizada a impressão das notas dos alunos. Novamente o primeiro laço na linha 15 é responsável por percorrer as linhas da matriz e o laço na linha 17 é responsável por percorrer as colunas imprimindo as notas. Veja que o laço na linha 17 percorre até a terceira nota, j<3, porque há a intenção de imprimir a nota final embaixo das notas individuais. Assim, é realizada a impressão das notas individuais nas linhas 19 ou 21, em que o if da linha 18 é responsável por determinar se chegou na última coluna da nota ou não, pois caso não tenha chegado na última coluna, então a impressão é acompanhada de uma tabulação conforme o \t na linha 19. Por fim, na linha 23 foi incluído o printf responsável pela impressão da nota final.

5.5. Resumo da Aula 93

5.5

Resumo da Aula

Esta aula trouxe conceitos importantes sobre o uso de matrizes, que, assim como os vetores, são uma estrutura homogênea. Diferente dos vetores, as matrizes permitem o armazenamento em várias dimensões, sendo cada dimensão com n valores com fácil acesso por meio de índices. Assim, foram apresentados conceitos e exemplos práticos na linguagem C que permitem implementar as operações de atribuição de valores em uma matriz, acesso à valores em uma matriz e utilizar estruturas de iteração para facilitar a manipulação de matrizes.

Para atribuir e acessar valores em uma matriz, basta utilizar o índice da posição da matriz, que inicia com 0 (zero) e termina com n-1, sendo n o tamanho da dimensão da matriz, para cada dimensão, ou seja, uma matriz com duas dimensões, por exemplo, terá duas faixas de índice a ser informadas. Cada acesso, seja atribuição ou leitura de um valor requer uma instrução do programa, o que poderia levar o programador a ter de escrever centenas de instruções, em alguns casos milhares, mas, felizmente as estruturas de iteração permitem eliminar essa necessidade tornando possível o acesso à matrizes com milhares de posições em algumas poucas linhas de código. Contudo, para cada dimensão da matriz será necessário uma estrutura de iteração afim de percorrer todas as dimensões. Nesta aula, foram abordados apenas exemplos e exercícios com no máximo duas dimensões.

94 Aula 5. Matrizes

5.6

Exercícios da Aula

Os exercícios desta lista foram Adaptados deLopes e Garcia(2002, p. 340-367).

1. Faça um programa em C que leia os elementos de uma matriz do tipo inteiro com tamanho 10 X 10. Ao final, imprima todos os elementos.

2. Faça um programa que leia os elementos de uma matriz do tipo inteiro com tamanho 3 X 3 e imprima os elementos multiplicando por 2.

3. Crie um programa que armazene dados inteiros em uma matriz de ordem 5 e imprima: Todos os elementos que se encontram em posições cuja linha mais coluna formam um número par.

4. Construa um programa que armazene dados em uma matriz de ordem 4 e im- prima: Todos os elementos com números ímpares.

5. Faça um programa que permita entrar com valores em uma matriz A de tamanho 3 X 4. Gerar e imprimir uma matriz B que é o triplo da matriz A.

6. Crie um programa que leia valores inteiros em uma matriz A[2][2] e em uma matriz B[2][2]. Gerar e imprimir a matriz SOMA[2][2].

7. Construa um programa para ler valores para duas matrizes do tipo inteiro de ordem 3. Gerar e imprimir a matriz diferença.

8. Faça um programa que leia uma matriz 4 X 5 de inteiros, calcule e imprima a soma de todos os seus elementos.

9. Construa um programa em C que leia valores inteiros para a matriz A3 x 5. Gerar e

imprimir a matriz SOMALINHA, em que cada elemento é a soma dos elementos de uma linha da matriz A. Faça o trecho que gera a matriz separado da entrada e da saída.

10. Construa um programa em C que leia valores inteiros para a matriz A3 x 5. Gerar e

imprimir a matriz SOMACOLUNA, em que cada elemento é a soma dos elementos de uma coluna da matriz A. Faça o trecho que gera a matriz separado da entrada e da saída.

11. Entrar com valores para uma matriz C2 x 3. Gerar e imprimir a Ct.

A matriz transposta é gerada trocando linha por coluna. Veja o exemplo a seguir:

C = µ 1 2 3 4 5 6 ¶ Ct=   1 4 2 5 3 6  

12. Uma floricultura conhecedora de sua clientela gostaria de fazer um programa que pudesse controlar sempre um estoque mínimo de determinadas plantas, pois todo dia, pela manhã, o dono faz novas aquisições. Criar um algoritmo que deixe cadastrar 50 plantas, nome, estoque mínimo, estoque atual. Imprimir ao final do programa uma lista das plantas que devem ser adquiridas.

5.6. Exercícios da Aula 95

13. A gerente do cabeleireiro Sempre Bela tem uma tabela em que registra as quan- tidades de serviços executados nos "pes", nas "mãos"e o serviço de podologia das cinco manicures. Sabendo-se que cada uma ganha 50% do que faturou ao mês, criar um programa que possa calcular e imprimir quanto cada uma vai receber, uma vez que não têm carteiras assinadas, os valores, respectivamente, são: R$10,00, R$15,00 e R$30,00.

14. Crie um programa que leia e armazene os elementos de uma matriz inteira com tamanho 5 X 5 e imprimi-la. Troque, a seguir:

• a segunda linha pela quinta; • a terceira coluna pela quinta;

• a diagonal principal pela diagonal secundária.

15. A matriz dados contém na 1ª coluna a matrícula do aluno; na 2ª, o sexo (0 para feminino e 1 para masculino); na 3ª, o código do curso, e na 4ª, o CR (coeficiente de rendimento).

Faça um programa que armazene esses dados sabendo-se que o código do curso é uma parte da matrícula: aascccnnn (aa ano, s semestre, ccc código do curso e

nnn matrícula no curso).

Além disso, um grupo empresarial resolveu premiar a aluna com CR mais alto de um curso cujo código deverá ser digitado. Suponha 10 alunos e que o CR é um nº inteiro.

16. Faça um programa em C que possa armazenar as alturas de dez atletas de cinco delegações que participarão dos jogos de verão. Imprimir a maior altura de cada delegação.

17. A Viação José Maria Rodrigues tem na Rodoviária de Rio Novo uma tabela con- tendo os horários de partidas dos ônibus para Juiz de Fora nos sete dias da semana. Faça um programa que possa armazenar esses horários e os horários do dia quando forem solicitados pelo funcionário, sabendo-se que, no máximo, são dez horários. Ao final, o programa deve imprimir a lista de horários para todos os dias.

18. Faça um programa que leia uma matriz 5 X 5 inteira e apresente uma determinada linha da matriz, solicitada via teclado.

19. Construa um programa que carregue uma matriz 12 X 4 com os valores das vendas de uma loja, em cada linha represente um mês do ano, e cada coluna, uma semana do mês. Calcule e imprima:

• total vendido em cada mês do ano;

• total vendido em cada semana durante todo o ano; • total vendido no ano.

20. Supondo que uma matriz apresente em cada linha o total de produtos vendidos ao mês por uma loja que trabalha com cinco tipos diferentes de produtos, construir um programa que leia esse total e, ao final, apresente o total de produtos vendidos em cada mês e o total de vendas por ano por produto.

AULA

6

Tipos de Dados definidos pelo

Programador

Metas da Aula

1. Entender os conceitos necessários para definir um tipo em linguagem C. 2. Aprender a utilizar o novo tipo de dado definido.

3. Aplicar o uso de definição do próprio tipo de dado em variadas aplicações.

4. Aprender a escrever programas em linguagem C que utilizam tipos de dados definidos pelo pro- gramador.

Ao término desta aula, você será capaz de:

1. Definir o próprio tipo de dado em linguagem C.

2. Determinar qual a melhor estrutura se aplica ao tipo de dado necessário ao problema. 3. Escrever programas que utilizam os tipos de dados definidos pelo programador.

98 Aula 6. Tipos de Dados definidos pelo Programador

No documento Introdução ao C em 10 aulas (páginas 94-102)