Baixe o app para aproveitar ainda mais
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).
Compartilhar