Matrizes, Funções e Parâmetros em C — Conceitos
Enviado por macbriene e classificado em Computação
Escrito em em
português com um tamanho de 5,79 KB
Matriz
Uma matriz é uma estrutura de dados homogênea e bidimensional. Exemplos:
- Prédio com mais de um apartamento por andar;
- Conjunto habitacional com várias ruas.
Características da matriz
- Endereçada por mais de um índice;
- Tamanho pré-definido — após a compilação não pode ser mudado;
- Estrutura de dados estática — mantém o mesmo tamanho ao longo de toda a execução do programa.
Exemplo conceitual
Dez elementos inteiros dispostos numa matriz com cinco linhas e duas colunas.
Exemplo em C: leitura e impressão de uma matriz
main()
{
float m[3][4];
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 4; j++)
scanf("%f", &m[i][j]);
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
printf("%10.2f", m[i][j]);
printf("\n");
}
}
Funções e Procedimentos
Procedimentos — estruturas que agrupam um conjunto de comandos executados quando o procedimento é chamado.
Funções — procedimentos que retornam um valor ao seu término.
Vantagens de funções e procedimentos
- Modularidade;
- Isolamento;
- Melhor depuração;
- Fácil manutenção;
- Reutilização de código.
Benefícios práticos:
- Evitam que os blocos do programa fiquem grandes demais e difíceis de ler e entender;
- Ajudam a organizar o programa;
- Permitem reaproveitamento de código construído anteriormente;
- Evitam repetição de trechos de código, minimizando erros e facilitando alterações.
Modularização e escopo
Permitem modularizar o programa, criando blocos de código independentes:
- As variáveis criadas dentro destes blocos e os parâmetros recebidos são locais;
- Estes blocos retornam nenhum ou, no máximo, um valor;
- O cabeçalho e as chamadas devem concordar em número, tipo e ordem dos parâmetros;
- É possível criar procedimentos/funções globais.
Variável local
Variável local: declarada dentro de uma função; existe apenas dentro da função que a contém; após o término da execução da função, ela deixa de existir.
Variável global
Variável global: declarada fora de qualquer função; acessível em qualquer parte do programa; existe durante toda a execução do programa.
Boas práticas de programação
- Evitar o uso de variáveis globais;
- As funções devem modificar apenas as suas variáveis locais e as variáveis passadas a elas como parâmetros.
Passagem de Parâmetros
Parâmetros ou argumentos são os valores recebidos e/ou retornados por uma função.
int soma(int a, int b)
{
return (a + b);
}
Os parâmetros de uma função se comportam como variáveis locais (criados na entrada e destruídos na saída).
Por valor
- É feita uma cópia das variáveis originais que permanecem inalteradas;
- Os valores das variáveis externas (função chamadora) são copiados para variáveis internas da função chamada;
- Alteração no valor das variáveis terá efeito apenas local à função chamada.
Por referência
- São passados os endereços de memória destas variáveis e qualquer alteração feita nessas variáveis no interior da função/procedimento refletirá na variável originalmente passada;
- Os valores das variáveis externas não são passados para a função, mas sim os seus endereços;
- Ocorre alteração no valor das variáveis externas.
Notação em C:
- & — indica o endereço de memória de uma variável;
- * — indica o conteúdo do endereço indicado (desreferenciação).
Parâmetros do main
Protótipo comum:
int main(int argc, char **argv)
- argc (um valor inteiro) guarda quantos parâmetros foram passados (count);
- argv (vetor de strings) guarda os parâmetros passados (value);
- Os argumentos passados são sempre strings;
- O primeiro argumento é o nome do programa.
Parâmetros do main: exemplo
Receber dois números como parâmetros e mostrar a soma. Salve o programa com o nome SOMA_ARQ.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main(int argc, char **argv)
{
float fnum1, fnum2;
fnum1 = atof(argv[1]);
fnum2 = atof(argv[2]);
printf("Programa %s", argv[0]);
printf("\nParametros passados: %d", argc);
printf("%6.2f + %6.2f = %6.2f", fnum1, fnum2, fnum1 + fnum2);
getch();
}
Recursão
Recurso também conhecido como recursividade; são funções recursivas quando uma função ou procedimento chama a si própria.
- Também chamada de definição circular;
- O computador aloca memória na pilha para novas variáveis locais e parâmetros;
- Não é feita cópia da função na memória, mas a função é executada novamente com novos argumentos;
- Desvantagem: funções recursivas costumam ser um pouco mais lentas que as iterativas;
- Vantagem: permitem versões mais claras e simples de vários algoritmos.
int num;
void dec(int x)
{
if (x > 0)
{
printf("%d | ", x);
dec(x - 1);
printf("%d | ", x * 2);
}
}
void ler()
{
printf("\nINFORME UM VALOR: ");
scanf("%d", &num);
}
main()
{
ler();
while (num != 0)
{
dec(num);
ler();
}
}