1
PROGRAMAÇÃO
FUNÇÕES NA
LINGUAGEM C
Funções em C
Implementações básicas:
a) Implementar o procedimento LerMatriz que preenche uma matriz de L linhas por C colunas de inteiros (L, C ≥ 1);
b) Implementar o procedimento EscreverMatriz que escreve uma matriz de L linhas por C colunas de inteiros (L, C ≥ 1) no écran; a) Implementar a função LerValorValido que verifica se um valor
introduzido pelo utilizador pertence ao conjunto limitado por dois dados valores inteiros, devolvendo o primeiro valor que pertença àquele intervalo;
3
Funções em C
Procedimento: LerMatriz Parâmetros:
– Uma matriz X vazia (sem valores)
– Dois números inteiros L e C (L, C ≥ 1 é a dimensão de X)
Saída:
Funções em C
Algoritmo:
Para i com valores desde 0 até L-1 Fazer
Mostrar a mensagem “Inserir a linha i da matriz” Para j com valores desde 0 até C-1 Fazer
Mostrar a mensagem “Inserir um valor inteiro” Introduzir um valor inteiro para X[i][j]
5
Funções em C
void LerMatriz (int X[][], int L, int C) {
int i, j;
for (i = 0; i <= L-1; i++)
{
printf (“Inserir a linha %d da matriz.\n”, i);
for (j = 0; j <= C-1; j++)
{
printf (“Inserir um valor inteiro: ”); scanf (“%d”, &X[i][j]);
} }
Funções em C
Procedimento: EscreverMatriz Parâmetros:
– Uma matriz X preenchida
– Dois números inteiros L e C (L, C ≥ 1 é a dimensão de X)
Saída:
7
Funções em C
Algoritmo:
Para i com valores desde 0 até L-1 Fazer
Mostrar a mensagem “Linha i da matriz: ” Para j com valores desde 0 até C-1 Fazer
Funções em C
void EscreverMatriz (int X[][], int L, int C) {
int i, j;
for (i = 0; i <= L-1; i++)
{
printf (“Linha %d da matriz: ”, i);
for (j = 0; j <= C-1; j++)
printf (“%d ”, X[i][j]); printf (“\n”);
}
9
Funções em C
Função: LerValorValido Parâmetros:
– Dois valores inteiros, inf e sup, correspondentes aos limites
inferior e superior do intervalo válido
Retorno:
Funções em C
Algoritmo:
Fazer
Mostrar a mensagem “Inserir um inteiro entre inf e sup” Introduzir um valor inteiro para Dim
Enquanto 'Dim < inf ou Dim > sup' é verdadeira
11
Funções em C
int LerValorValido (int inf, int sup) {
int Dim; do {
printf (“Insira um inteiro entre %d e %d: “, inf, sup); scanf (“%d”, &Dim);
} while (Dim < inf || Dim > sup); return (Dim);
Funções em C
Enunciado:
a) Implementar a função NumNulosMatriz para calcular a quantidade de elementos nulos de uma matriz de inteiros de L linhas por C colunas;
a) Implementar o procedimento MatrizTransposta que constrói a transposta de uma matriz quadrada de ordem N (N linhas por N colunas) X;
b) Construir um programa em C que leia uma matriz quadrada Mat de ordem N (1 ≤ N ≤ 10), determine e escreva no écran a
13
Funções em C
Procedimento: NumNulosMatriz Parâmetros:
– Uma matriz X preenchida
– Dois números inteiros L e C (L, C ≥ 1 é a dimensão de X)
Saída:
– Um valor inteiro correspondente à quantidade de nulos que estão
Funções em C
Algoritmo:
Atribuir a Nulos o valor inteiro 0
Para i com valores desde 0 até L-1 Fazer
Para j com valores desde 0 até C-1 Fazer Se 'Mat[i][j] = 0' é verdadeira Fazer
Atribuir a Nulos o valor inteiro Nulos+1
15
Funções em C
int NumNulosMatriz (int X[][], int L, int C) { int i, j, Nulos; Nulos = 0; for (i = 0; i <= L-1; i++) for (j = 0; j <= C-1; j++) if (X[i][j] == 0) Nulos++; return (Nulos); }
Funções em C
Procedimento: MatrizTransposta Parâmetros:
– Uma matriz quadrada preenchida, X – Uma matriz quadrada vazia, XT
– Um número inteiro N (N ≥ 1 é a ordem de X e XT)
Saída:
– A matriz transposta de X, XT (a linha k da matriz X corresponde
17
Funções em C
Algoritmo:
Para i com valores desde 0 até N-1 Fazer
Para j com valores desde 0 até N-1 Fazer
Funções em C
void MatrizTransposta (int X[][], int XT[][], int N) { int i, j; for (i = 0; i <= N-1; i++) for (j = 0; j <= N-1; j++) XT[j][i] = X[i][j]; }
19
Funções em C
Algoritmo (principal):
Atribuir a N o valor inteiro LerValorValido(1, 10)
LerMatriz(X, N, N)
Atribuir a Nulos o valor inteiro NumNulosMatriz(X, N, N) Mostrar a mensagem “Quantidade de nulos da matriz: ” Mostrar o valor de Nulos
MatrizTransposta(X, XT, N)
Mostrar a mensagem “Matriz transposta”
Funções em C
#include <stdio.h>
void LerMatriz (int X[][], int L, int C);
void EscreverMatriz (int X[][], int L, int C); int LerValorValido (int inf, int sup);
int NumNulosMatriz (int X[][], int L, int C);
21
Funções em C
main ( ) { int X[10][10], XT[10][10], N, Nulos; N = LerValorValido(1, 10); LerMatriz(X, N, N); Nulos = NumNulosMatriz(X, N, N);printf (“A quantidade de nulos da matriz é: %d.\n”, Nulos);
MatrizTransposta(X, XT, N);
printf(“Matriz transposta\n”);
EscreverMatriz(XT, N, N); }
Funções em C
Enunciado:
a) Implementar o procedimento MatrizProduto que calcula o produto de duas matrizes de inteiros, X (de L1 linhas por C1 colunas) e Y (de L2 linhas por C2 colunas);
b) Construir um programa em C que leia duas matrizes de inteiros,
A (de M1 linhas por N1 colunas) e B (de M2 linhas por N2
colunas) (com N1 = M2), determine a matriz produto entre A e
23
Funções em C
Procedimento: MatrizProduto Parâmetros:
– Uma matriz preenchida de inteiros X – Uma matriz preenchida de inteiros Y – Uma matriz vazia de inteiros XY
– Um número inteiro associado ao número de linhas de X, M1 – Um número inteiro associado ao número de colunas de X, N1 – Um número inteiro associado ao número de linhas de Y, M2 – Um número inteiro associado ao número de colunas de Y, N2
Saída:
Funções em C
Algoritmo:
Para i com valores desde 0 até M1-1 Fazer Para j com valores desde 0 até N2-1 Fazer
Atribuir a S o valor inteiro 0
Para k com valores desde 0 até N1-1 Fazer
Atribuir a S o valor inteiro (S + X[i][k]*Y[k][j]) Atribuir a XY[i][j] o valor inteiro S
25
Funções em C
void MatrizProduto (int X[][], int Y[][], int XY[][], int M1, int N1, int M2, int N2)
{ int i, j, k, S; for (i = 0; i <= M1-1; i++) for (j = 0; j <= N2-1; j++) { S = 0; for (k = 0; k <= N1-1; j++) S = S + X[i][k] * Y[k][j]; XY[i][j] = S; } }
Funções em C
Algoritmo (principal):
Atribuir a M1 o valor inteiro LerValorValido(1, 15) Atribuir a N1 o valor inteiro LerValorValido(1, 10) Mostrar a mensagem “Matriz A:”
LerMatriz (A, M1, N1)
Atribuir a M2 o valor inteiro N1
Atribuir a N2 o valor inteiro LerValorValido(1, 20) Mostrar a mensagem “Matriz B:”
27
Funções em C
#include <stdio.h>
void LerMatriz (int Mat[][], int L, int C);
void EscreverMatriz (int Mat[][], int L, int C); int LerValorValido (int inf, int sup);
void MatrizProduto (int X[][], int Y[][], int XY[][], int M1, int N1, int M2, int N2);
main ( ) {
int A[15][10], B[10][20], PROD[15][20]; int M1, N1, M2, N2;
Funções em C
M1 = LerValorValido (1, 15); N1 = LerValorValido (1, 10); printf (“Matriz A:\n”);
LerMatriz (A, M1, N1);
M2 = N1;
N2 = LerValorValido (1, 20); printf (“Matriz B:\n”);
LerMatriz (B, M2, N2);