PROGRAMAÇÃO
FUNÇÕES NA
LINGUAGEM C
1
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;
2
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:
–
A matriz X preenchida (com valores)
3
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]
4
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]);
}
}
}
5
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:
–
Apresenta no écran os elementos da matriz X
6
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
Mostrar o valor de X[i][j]
7
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”);
}
}
8
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:
–
Um número inteiro pertencente ao conjunto {inf, ..., sup}
9
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
Devolver (Dim)
10
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);
}
11
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
quantidade de nulos de Mat e, calcule e escreva a matriz
transposta de Mat, usando as funções anteriores.
12
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
na matriz X
13
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
Devolver (Nulos)
14
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);
}
15
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
à coluna k da matriz XT)
16
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
Atribuir a XT[j][i] o valor inteiro X[i][j]
17
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];
}
18
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”
EscreverMatriz(XT, N, N)
19
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);
void MatrizTransposta (int X[][], int XT[][], int N);
20
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);
21
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
B, e escreva a matriz resultante, usando as funções anteriores.
22
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:
–
A matriz produto de X por Y, XY (de M1 linhas por N2 colunas)
23
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
24
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;
}
}
25
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:”
LerMatriz (B, M2, N2)
MatrizProduto (A, B, PROD, M1, N1, M2, N2)
Mostrar a mensagem “Matriz produto obtida :”
EscreverMatriz (PROD, M1, N2)
26
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;
27
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);
MatrizProduto (A, B, PROD, M1, N1, M2, N2);
printf (“Matriz produto obtida :\n”);
EscreverMatriz (PROD, M1, N2);
}
28
Download

Funções em C