26 - Subprogramas Executar um programa é pedir ao sistema operativo (que é o programa principal de um computador) que passe o comando do computador para o nosso programa.
... Subprogramas Após fazer as tarefas previstas o nosso programa devolve o comando ao sistema operativo. Isto está numa hierarquia onde o nosso programa funciona com um subprograma do sistema operativo.
... Subprogramas Os programas também podem utilizar subprogramas, como exemplo disso temos o scanf, o printf e as funções matemáticas sqrt, sin, cos, etc... que recebem o comando do (nosso) programa fazem as suas tarefas e depois devolvem o comando.
... Subprogramas Os exemplos anteriores já estão prontos, mas é possível desenvolver (codificar) subprogramas dentro dos programas. Os subprogramas podem ser do 2 tipos: - procedimentos - funções
27 - Procedimentos Os procedimentos executam tarefas como ler, calcular, escrever e funcionam com se fossem uma instrução, ou seja são chamados pela escrita do nome.
Exemplo: Programa que desenha um quadrado com lado e caracter escolhidos pelo utilizador.
#include <stdio.h> main ( ) { char a; int i, j, n; printf( Pf o caracter\n ); scanf( %c,&a); printf( Pf o lado\n ); scanf( %d,&n); for ( i = 1; i <= n; i = i +1) { for ( j = 1; j <= n; j = j +1) printf( %c,a); printf( \n ); } }
Implementando um procedimento para escrever o quadrado seria:
#include <stdio.h> void desenho(char c, int x) {int i, j; for ( i = 1; i <= x; i = i +1) { for ( j = 1; j <= x; j = j +1) printf( %c,c); printf( \n ); } return; } main ( ) { char a; int n; printf( Pf o caracter\n ); scanf( %c,&a); printf( Pf o lado\n ); scanf( %d,&n); desenho(a,n); }
27 - Funções As funções são valores a serem calculados, possuem um tipo ( int, float ou char) e funcionam com se fossem uma variável. São chamados pela utilização em : - uma instrução de atribuição -um printf - uma comparação.
... Funções Por exemplo, se tivermos um função que soma dois valores e de nome soma poderíamos utilizá-la com:... x = soma(a,b);... printf ( A soma é %d\n, soma(a,b));... if (soma(a,b) >0)...
Exemplo: Programa que calcula o factorial de um número.
#include <stdio.h> main ( ) {int i, n, f; printf( Pf o número\n ); scanf( %d,&n); f = 1; for ( i = 1; i <= n; i = i +1) f = f * i; print( O factorial é %d\n,f); }
Implementando com uma função para o cálculo do factorial seria:
#include <stdio.h> int fact(int p) { int i,resultado; resultado = 1; for ( i = 1; i <= p; i = i +1) resultado = resultado * i; return resultado; } main ( ) {int n, f; printf( Pf o número\n ); scanf( %d,&n); f = fact(n); print( O factorial é %d\n,f); }
28 O retorno O retorno (devolução) do comando de um subprograma é feito através da instrução return. - nos procedimentos é apenas um fim: return; - nas funções no fim é devolvido ( atribuido ) um valor para a função ( como uma variável recebendo um valor): return valor;
... O retorno - no procedimento: void desenho(char c, int x) {int i, j; for ( i = 1; i <= x; i = i +1) { for ( j = 1; j <= x; j = j +1) printf( %c,c); printf( \n ); } return; } é apenas um fim.
... O retorno - na função: int fact(int p) { int i,resultado; resultado = 1; for ( i = 1; i <= p; i = i +1) resultado = resultado * i; return resultado; } no fim o valor de resultado é atribuído a fact.
29 Parâmetros A passagem de valores para um subprograma (procedimento ou função ) é feito através de parâmetros, no subprograma aparecem com a declaração do tipo e nome, sempre com um tipo para cada parâmetro ou seja, é errado: int soma(int a, b) deve ser: int soma(int a, int b)
... Parâmetros Para chamarmos um subprograma devemos utilizar o número exacto de parâmetros e a posição correcta, os parâmetros são posicionais.
... Parâmetros -em: void desenho(char c, int x)... temos que, se um programa quer chamar este procedimento deve ser com 2 parâmetros (não 1 nem 3) e que o primeiro deve ser um caracter e o segundo um inteiro.
- assim para: void desenho(char c, int x) (caracter,inteiro)... main ( ) int a,b; char c,d;... está errado: desenho(a,b); (inteiro,inteiro) desenho(a,c); (inteiro,caracter) desenho(a); (inteiro)
- para: void desenho(char c, int x) (caracter,inteiro)... main ( ) int a,b; char c,d;... estaria correcto: desenho(c,b); (caracter,inteiro) desenho( *,4); (caracter,inteiro) desenho(d,9-2); (caracter,inteiro)
Formato: Procedimento void nome(tipo par1, tipo par2,...) {...... return; }
Formato: Função tipo nome(tipo par1, tipo par2,...) {...... return valor; }
Formato: O formato de um subprograma é similar ao do programa, tem uma linha com tipo nome(parâmetros), que equivale ao main ( ) e um bloco com declarações de variáveis e as instruções.
Funcionamento: O programa executa as instruções uma a uma a partir da primeira, ao encontrar um subprograma passa o comando. O subprograma executa suas instruções (como um programa), ao terminar devolve o comando para o programa, que continua na instrução seguinte de onde havia parado.
Exemplo: Programa que soma dois valores, onde a soma é implementada por uma função e a escrita do resultado por um procedimento.
#include <stdio.h> void escrever(int z) { printf( A soma é %d\n,z); return; } int soma(int m, int n) { int total; total = m + n; return total; } main ( ) { int a,b,s; printf( Pf o 1º número\n ); scanf( %d,&a); printf( Pf o 2º número\n ); scanf( %d,&b); s = soma(a,b); escrever(s); }