Prévia do material em texto
Prof. Edson J. R. Justino
Prof. Claudio Carvilhe
Parte 1
Pontifícia Universidade Católica do Paraná - PUCPR
Sub-Rotinas
� Sub-rotinas, também chamadas de
subprogramas, são blocos de instruções que
realizam tarefas específicas. O código de uma
sub-rotina é carregado uma vez e pode ser
executado quantas vezes for necessário.
� Desta forma os programas tendem a ficar
menores e mais organizados.
� De maneira geral os programas são
executados linearmente até o fim. Entretanto,
quando são utilizadas sub-rotinas, é possível
a realização de desvios na execução do
programa principal.
Sub-Rotinas em C
� Um importante recurso apresentado nas
linguagens de programação é a
modularização.
� A linguagem C possibilita a
modularização por meio de funções.
� Um programa em C possui no mínimo
uma função (main), por onde a
execução do programa começa.
Sub-Rotinas em C
� Existem muitas outras função predefinidas
na linguagem C, por exemplo, printf, scanf,
gets, puts e outras. Estas funções são
adicionadas aos programas pela diretiva
#include e no momento da link edição
através da chamada às bibliotecas.
� O usuário também pode criar quantas
funções quiser, dependendo do problema
que está sendo resolvido pelo programa.
Sub-Rotinas em C
� As Sub-Rotinas em C são chamadas
Funções
� Passagem de Parâmetros e tipo de
retorno
� Cada função pode receber vários valores
(parâmetros) e pode devolver um valor
(retorno).
� Dessa maneira, quando se especifica uma
função deve-se deixar claro qual será o tipo
de retorno e quais os parâmetros
necessários para a execução da função.
Sub-Rotinas em C
� Exemplo 1:
int soma (int a, int b){
int s;
s = a + b;
return s;
}
Dados de EntradaDado de Saída
Indicação do dado de saída
Sub-Rotinas em C
� Exemplo 2
float divisao (int dividendo, int divisor){
float q;
q = dividendo / divisor;
return q;
}
Dados de Entrada
Dado de Saída
Indicação do dado de saída
Sub-Rotinas em C
� Exemplo 3
int main(int argc, char *argv[]){
int i;
if (argc != 2){
printf(“ Número de parâmetros incorreto!\n);
return -1;
}
for (i= 0; i <= argc ;++i){
printf(“argv[%d] -> \”%s\”\n”,i, argv[i]);
}
printf(“\n”);
return 0;
}
Dados de Entrada
Dado de Saída
Indicação do dado de saída
Indicação do dado de saída
Sub-Rotinas em C
� Podemos resumir função então, em um conceito mais
moderno, como sendo um trecho independente de programa
com atribuições definidas.
� A função, uma vez desenvolvida e testada, passa a ser
completamente transparente ao usuário, que só necessita
saber sua utilidade, entrada e saída.
Sintaxe:
Qualquer função em C tem o seguinte formato:
tipo de retorno nome (declaração dos tipos de parâmetros)
{
[ declaração de variáveis locais]
comandos
}
Funções
� Em C uma função pode retornar apenas um valor ou nenhum. Este
retorno é feito pelo comando return.
#include <stdio.h>
long pot(int, int);
long resposta;
void main( ) {
int a, b;
a = 10; b = 3;
resposta = pot(a, b);
printf(“%d\n”,resposta);
}
long pot (int x, int y) {
long i, potencia = 1;
for (i = 0; i < y; i++)
potencia *= x;
return(potencia);
}
Função main(){
Resposta = Pot()
}
Função Pot(){
Return(potência)
}
Que tipo de dado a
função retorna ?
p/ main()
p/ S.O.
Chamando um função em C
sem parâmetros de passagem
#include <stdio.h>
#include <stdlib.h>
// Declaração do cabeçalho da função
void pot(void);
//Função principal
int main( ){
pot();
return 0;
}
// Inicio da Função
void pot(void) {
int i,potencia = 1;
int x=2, y=3;
for (i = 0; i < y; i++)
potencia *= x; // potência = potência * x
printf("%d\n",potencia);
system("PAUSE");
}
OBS: Quando as funções
precederem a função
principal o cabeçalho
pode ser omitido
Chamando um função em C
sem parâmetros de entrada e com retorno
#include <stdio.h>
#include <stdlib.h>
int pot(void);
int main( ){
int c;
c = pot();
printf("%d\n",c);
system("PAUSE");
return 0;
}
/* Inicio da Função*/
int pot(void) {
int i,potencia = 1;
int x=2, y=3;
for (i = 0; i < y; i++)
potencia *= x; // potência = potência * x
return potencia;
}
#include <stdio.h>
#include <stdlib.h>
void pot(int, int);
int main( ){
int a, b;
a = 10;
b = 3;
pot(a,b);
return 0;
}
// Inicio da Função
void pot(int x,int y) {
int i,potencia = 1;
for (i = 0; i < y; i++)
potencia *= x; // potência = potência * x
printf("%d\n",potencia);
system("PAUSE");
}
Chamando um função em C
sem parâmetros de saída e com entrada
#include <stdio.h>
#include <stdlib.h>
int pot(int, int);
int main( ){
int a, b, c;
a = 10;
b = 3;
c = pot(a,b);
printf("%d\n",c);
system("PAUSE");
return 0;
}
// Inicio da Função
int pot(int x,int y) {
int i,potencia = 1;
for (i = 0; i < y; i++)
potencia *= x; // potência = potência * x
return potencia;
}
Chamando um função em C
com parâmetros de saída e com entrada
Sub-Rotinas em C -
exercícios
� 1) Faça uma função em
C que retorne 1 se o
número passado como
parâmetro for positivo e 0
se negativo. Os
parâmetros devem ser
valores inteiros.
int pos_neg (int val){
if (val < 0)
return 0;
else
return 1;
}
Sub-Rotinas em C -
exercícios
� 2) Faça uma função em
C que receba dois
números inteiros e
positivos por parâmetro
e retorne a soma dos N
números inteiros
existentes entre eles.
int soma_intervalo (int val_1, int val_2){
int i, soma = 0;
if (val_1 >= val_2)
return soma;
else{
for (i = val_1+1; i< val_2; i++)
soma += i;
return soma;
}
}
Sub-Rotinas em C -
exercícios
� 3) Faça uma função
em C que receba
como parâmetros
três números
inteiros: a, b, e c,
sendo a maior que
1. A função deve
somar todos os
inteiros entre b e c
que sejam divisíveis
por a (inclusive b e
c) e retornar o
resultado.
int soma_intervalo(int a, int b, int c){
int i, soma = 0;
if (b >= c)
return soma;
else{
for (i = b; i<= c; i++){
if ((i%a) == 0)
soma += i;
}
return soma;
}
}
Sub-Rotinas em C -
exercícios
� 4) Faça uma
função em C que
converta horas,
minutos e
segundos em
segundos. A
função recebe os
valores das horas
minutos e
segundos e
retorna o total de
segundos.
int calc_segundos(int hora, int min, int seg){
int soma = 0;
//Converte hora em minutos
soma = hora*60;
//Converte minutos em segundos
soma = soma*60 + min*60;
//Calcula total de segundos
soma = soma + seg;
return soma;
}
Sub-Rotinas em C -
exercícios
� 5) Faça uma
função que
receba o total de
segundos e
converta o valor
em horas,
minutos e
segundos. A
função deve
imprimir os
valores.
void calcula_hora (int seg){
int h, m, s, r;
h = seg / 3600;
r = seg % 3600;
m = r / 60;
s = r % 60;
printf("%d:%d:%d\n",h,m,s);
}
Sub-Rotinas em C -
exercícios
� 6) O número 3.025
possui a seguinte
característica:
� 30 + 25 = 55
� 552 = 3.025
� Faça uma função
em C que receba
um inteiro de
quatro dígitos e
retorne 1 se o
número possuir
essa característica
e 0, caso contrário.
int verifica (int numero){
int primeiro, segundo,
soma, quadrado;
//separa as duas parte do número
primeiro = numero / 100;
segundo = numero % 100;
// determina característica
soma = primeiro + segundo;
quadrado = soma*soma;
if (quadrado == numero)
return 1;
else
return 0;
}
Sub-Rotinas em C -
exercícios
� 7) Faça uma função em C que recebe
como parâmetro um inteiro no intervalo de
1 a 9 e mostre a seguinte tabela de
multiplicação.
� 1
� 2 4
� 3 6 9
� 4 8 12 16
� 5 10 15 20 25
� 6 12 18 2430 36
� 7 14 21 28 35 42 49
� 8 16 24 32 40 48 56 64
� 9 18 27 36 45 54 63 72 81
int multiplica(int numero){
int i, soma;
if(( numero < 1)||(numero >9)){
printf("valor fora do intervalo \n");
return 0;
}
for(i=1, soma= numero; i<=numero; i++){
printf("%d ", soma);
soma += numero;
}
printf("\n");
return 0;
}
Sub-Rotinas em C -
exercícios
� 8) Faça uma função e C que receba as três notas de um
aluno como parâmetro e uma letra. Se a letra for A a
função calcula a média aritmética das notas do aluno, se
for P a função calcula a média ponderada com pesos 5, 3 e
2. A média calculada deve ser devolvida como parâmetro
de saída da função.
float media(int n1,int n2, int n3, char letra){
if (letra == 'A')
return ((n1+n2+n3)/3.);
else
return ((float)(n1*5 + n2*3 + n3*2)/(5+3+2));
}
Exercício Proposto
� 1) Usando funções para cada operação,
desenvolva um programa que implemente
uma calculadora com as seguintes
operações:
� Adição (a+b) - float adic(float a, float b);
� Subtração (a-b) - float subt(float a, float b);
� Multiplicação (a.b) – float multi(float a, float b);
� Divisão (a/b) – float divi(float a, float b);
� Expoente (a**b) – float expo(float a, float b);
� Quadrado (a**2) – float quad(float a);
� Inverso (1/x) – float inv(float x);
� Valor absoluto – float abs(float a).