Matrizes e recursividade em Dev C++ Matrizes (Manzano (2015) utiliza apenas uma nomenclatura para definir variáveis compostas: matrizes, e as divide em matrizes unidimensionais e bidimensionais.)
Fonte: Artero (2018, p.189)
Características de matrizes A capacidade da matriz, ou seja, a quantidade de linhas e colunas tem que ser determinada no momento em que se declara essa variável. A quantidade de elementos é a multiplicação da quantidade de linhas por colunas (M x N). A matriz é uma variável composta bidimensional, ou seja, o acesso a seus dados tanto para leitura como para escrita precisa de dois índices. Dentro de cada espaço está o número da linha seguido do número da coluna. A matriz tem que ter o tipo de dado que irá armazenar no momento da declaração. Fonte: Artero (2018, p.189) Atribuição de valores em uma matriz Para armazenarmos um valor dentro de uma matriz usamos o índice da linha e da coluna, portanto, basta informar a variável e entre o primeiro colchete o índice da linha e entre o segundo colchete o índice da coluna e usando a atribuição escolher o valor. Sintaxe: variavel[M][N] = valor; Exemplo: numeros[0][1] = -100; Temperatura[50][0] = 37.5; Iteração sobre os elementos de matrizes Com matrizes utilizamos estruturas de repetição para que seus valores sejam acessados de forma mais eficiente. Precisamos de estruturas de repetições aninhadas. A quantidade de estruturas que precisamos está diretamente associada à quantidade de índices da variável composta, portanto se temos dois índices, usaremos duas estruturas de repetição. A primeira estrutura de repetição controla o índice das linhas, e a segunda controla o índice das colunas, portanto sua sintaxe será for (i = 0; i<= 9; i++) { for (j = 0; j<= 9; j++){ numeros[i] [j]; } } Utilização de funções com matrizes Matrizes são amplamente utilizadas para armazenar valores temporariamente a fim de efetuar diversos cálculos. Grandes aplicações de matrizes é na computação gráfica, pois cada pixel de uma imagem é representada com um valor na matriz. Segundo Colares (2011), o mecanismo de busca do Google utiliza esse recurso para ranquear as páginas de resultado. Exemplo de Implementação de Matrizes 1)Matriz 2 x 2 #include <stdio.h> #define LIM 2 int main(){ int mat[LIM][LIM]; int i=0,j=0; printf("Faremos uma matriz 2x2\n"); for (i=0; i<LIM; i++) { for (j=0; j<LIM; j++) { printf("Digite o valor da posicao (%d,%d): ",i,j); scanf("%d",&mat[i][j]); } } 1)Matriz 2 x 2 for (i=0; i<LIM; i++){ for (j=0; j<LIM; j++) printf("%d ",mat[i][j]); printf("\n"); } return 0; } 2) Matriz 3 x 3 multiplica 5 #include <stdio.h> #include <stdlib.h> int main(){ int i, j, m[3][3]; for(i=0;i<3;i++) for(j=0;j<3;j++){ printf("Elemento[%d][%d]= ",i,j); scanf("%d",&m[i][j]); } printf("\n::: Valores Originais :::\n"); for(i=0;i<3;i++){ for(j=0;j<3;j++) printf("%d ",m[i][j]); printf("\n"); } 2) Matriz 3 x 3 multiplica 5 for(i=0;i<3;i++) for(j=0;j<3;j++) m[i][j]=m[i][j]*5; printf("\n::: Valores Multiplicados por 5:::\n"); for(i=0;i<3;i++){ for(j=0;j<3;j++) printf("%d ",m[i][j]); printf("\n"); } return 0; } 3) Soma 3 notas de 4 alunos #include <stdio.h> #include <stdlib.h> int main() { float matNotas[4][4]; int i, j; for (i=0; i<4; i++) { for (j=0; j<3; j++) { printf("Para o aluno %d informe a nota %d: \n", i+1, j+1); scanf("%f", &matNotas[i][j]); } matNotas[i][3] = matNotas[i][0] + matNotas[i][1] + matNotas[i][2]; } 3) Soma 3 notas de 4 alunos for (i=0; i<4; i++) { printf("Notas do Aluno %d\n", i); for (j=0; j<3; j++) { if (j != 2) printf("%f \t", matNotas[i][j]); else printf("%f \n", matNotas[i][j]); } printf("Nota final......: %f \n", matNotas[i][3]); } } 4) Média da temperatura dos braços mecânicos Algoritmo para calcular a media da temperatura dos braços mecânicos: Siga os seguintes passos: • Crie uma matriz com 10 linhas e 5 colunas. As colunas vão armazenar: código, temp1, temp2, temp3, média. • Guarde os 10 códigos na coluna 0 da matriz. • Preencha as outras 3 colunas com a temperatura de cada máquina. • Calcule a média e guarda na coluna 4 da matriz. • Exiba na tela a média de cada um dos 10 braços mecânicos. 4) Média da temperatura dos braços mecânicos #include<stdio.h> #include<locale.h> float braco[10][5]; int i, j; void ArmazenarCodigo(){ //função para guardar o código dos braços int codigo = 1000; //variável local for(i=0;i<10;i++){ codigo = codigo + 10; braco[i][0] = codigo; } } 4) Média da temperatura dos braços mecânicos void ArmazenarTemperaturas(){ //função para guardar os demais dados ArmazenarCodigo(); //chamando a função para atribuir os códigos. for(i=0;i<10;i++){ printf("Digite as 3 temperaturas do braço %.0f: \n",braco[i][0]); scanf("%f %f %f",&braco[i][1],&braco[i][2],&braco[i][3]); braco[i][4] = (braco[i][1] + braco[i][2] + braco[i][3])/3; } } 4) Média da temperatura dos braços mecânicos void ExibirDados(){ //função para exibir os médias calculadas ArmazenarTemperaturas(); //chamando a função para atribuir valores for(i=0;i<10;i++){ printf("\n Média do braço %.0f: %.2f",braco[i][0],braco[i][4]); } } int main(){ setlocale(LC_ALL,"Portuguese"); ExibirDados(); //chamando a função para exibir os dados } Recursividade Definições Utilizar funções melhora a organização do código, permite a reutilização de trechos de código e evita a repetição de comandos. Para criar uma função temos que seguir uma determinada estrutura com os seguintes passos: (i) determinar o tipo de retorno da função (lembrando que quando a função não retorna nada usamos void); (ii) escolher o nome da função (lembrando que a condição para o nome é o mesmo da nomenclatura para variáveis); Definições (iii) entre parênteses especificar quantos e quais tipos de parâmetros a função receberá; (iv)especificar os comandos da função, incluindo as variáveis locais (variáveis que pertencem somente a essa função); (v) se o tipo de retorno for diferente de void, então a função deverá ter o comando return valor. Os itens (iv) e (v) sempre estarão entre chaves que marcam o início e o final da função. Sintaxe da criação de uma função Exemplo clássico de uma função com retorno! Definição e caracterização de recursividade Recursividade significa recorrer a uma determinada situação (AULETE, 2017). Em programação uma função recursiva é uma função que chama a ela própria ou ainda nas palavras de Soffener (2017): “Recursividade é a possibilidade de uma função chamar a si mesma.” (SOFFENER, 2017, p. 107). Para criar uma função recursiva basta fazermos uma chamada da função dentro da própria função. Sintaxe de função recursiva: Exemplos 5) Juros main(){ float conta, resultado; printf("Digite o valor da conta: "); scanf("%f",&conta); resultado = AdicionarJuros(conta); printf("\n Valor final da conta = %.2f",resultado); getchar(); } 6) Expoente 2 elevado a 4 #include <stdio.h> int potencia(int base, int expoente){ if(expoente == 0) return 1; else return (base * potencia(base, expoente-1)); } int main(){ int base = 2, expoente = 4, resultado; resultado = potencia(base,expoente); printf("%d elevado a %d = %d", base, expoente,resultado); return 0; } 7)Fatorial Recursivo main(){ setlocale(LC_ALL,"Portuguese"); int n, resultado; printf("\n Digite um número inteiro: "); scanf("%d",&n); resultado = CalcularFatorial(n); printf("\n Resultado do fatorial = %d",resultado); getchar(); } Relatório Registre suas observações em um relatório a ser entregue no fim da prática. Boa atividade a todos! Obrigada!