funÇÕes na linguagem c - departamento de informática...

28
1 PROGRAMAÇÃO FUNÇÕES NA LINGUAGEM C

Upload: leliem

Post on 24-Jan-2019

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

1

PROGRAMAÇÃO

FUNÇÕES NA

LINGUAGEM C

Page 2: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

2

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;

Page 3: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

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:

– A matriz X preenchida (com valores)

Page 4: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

4

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]

Page 5: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

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]);

}}

}

Page 6: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

6

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

Page 7: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

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

Mostrar o valor de X[i][j]

Page 8: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

8

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”);

}}

Page 9: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

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:

– Um número inteiro pertencente ao conjunto {inf, ..., sup}

Page 10: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

10

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)

Page 11: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

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

}

Page 12: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

12

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.

Page 13: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

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

na matriz X

Page 14: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

14

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)

Page 15: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

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

}

Page 16: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

16

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)

Page 17: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (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

Atribuir a XT[j][i] o valor inteiro X[i][j]

Page 18: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

18

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];

}

Page 19: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

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”

EscreverMatriz(XT, N, N)

Page 20: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

20

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

Page 21: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

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

Page 22: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

22

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.

Page 23: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

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:

– A matriz produto de X por Y, XY (de M1 linhas por N2 colunas)

Page 24: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

24

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

Page 25: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

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;

}}

Page 26: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

26

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)

Page 27: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

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;

Page 28: FUNÇÕES NA LINGUAGEM C - Departamento de Informática ...muranho/Aulas/201213/prog/cbarrico/teoricas/07... · LINGUAGEM C. 2 Funções em C ... (a linha k da matriz X corresponde

28

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

}