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.

#include

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();
    }
}

Entradas relacionadas: