341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de...

13
Prof. Alceu Britto Slides cedidos pelo Prof. Dr. Edson J. R. Justino Aula 15 até 18 UEPG Algoritmos e Programação 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.

Transcript of 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de...

Page 1: 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de uma sub-rotina é carregado uma vez e pode ser ... em C que receba um inteiro de quatro

Prof. Alceu Britto

Slides cedidos pelo Prof. Dr. Edson J. R. Justino

Aula 15 até 18

UEPG

Algoritmos e

Programação

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.

Page 2: 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de uma sub-rotina é carregado uma vez e pode ser ... em C que receba um inteiro de quatro

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.

Page 3: 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de uma sub-rotina é carregado uma vez e pode ser ... em C que receba um inteiro de quatro

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

Page 4: 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de uma sub-rotina é carregado uma vez e pode ser ... em C que receba um inteiro de quatro

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 EntradaDado de Saída

Indicação do dado de saída

Indicação do dado de saída

Page 5: 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de uma sub-rotina é carregado uma vez e pode ser ... em C que receba um inteiro de quatro

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.

Page 6: 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de uma sub-rotina é carregado uma vez e pode ser ... em C que receba um inteiro de quatro

Chamando um função em Csem 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 Csem 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;

}

Page 7: 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de uma sub-rotina é carregado uma vez e pode ser ... em C que receba um inteiro de quatro

#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 Csem 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 Ccom parâmetros de saída e com entrada

Page 8: 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de uma sub-rotina é carregado uma vez e pode ser ... em C que receba um inteiro de quatro

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;

for (i = val_1+1; i< val_2; i++)soma += i;

return soma;}

Page 9: 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de uma sub-rotina é carregado uma vez e pode ser ... em C que receba um inteiro de quatro

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 cque 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 (a<= 1)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 minutossoma = hora*60;//Converte minutos em segundossoma = soma*60 + min*60;//Calcula total de segundossoma = soma + seg;return soma;

}

Page 10: 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de uma sub-rotina é carregado uma vez e pode ser ... em C que receba um inteiro de quatro

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úmeroprimeiro = numero / 100;segundo = numero % 100;// determina característicasoma = primeiro + segundo;quadrado = soma*soma;if (quadrado == numero)

return 1;else

return 0;

}

Page 11: 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de uma sub-rotina é carregado uma vez e pode ser ... em C que receba um inteiro de quatro

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 24 30 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.);

elsereturn ((float)(n1*5 + n2*3 + n3*2)/(5+3+2));

}

Page 12: 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de uma sub-rotina é carregado uma vez e pode ser ... em C que receba um inteiro de quatro

Exercício Proposto

1) Elabore um programa que leia um valor inteiro,

positivo e chame uma função que receba esse valor e retorne o fatorial do mesmo. Ao finalizar o

programa deverá imprimir esse valor.

2) Elabore um programa que lei um valor inteiro,

positivo e chame uma função que determine se o

valor é primo ou não. Caso o valor seja primo a função deverá retornar o valor 0, caso contrário o

valor será -1. Ao finalizar o programa deverá

imprimir se o número é primo ou não.

Exercício Proposto

3) Elabore um programa que lei um valor inteiro e chame uma

função que determine se o valor é par ou impar. Caso o

valor seja par a função deverá retornar o valor 0, caso

contrário o valor será 1. Ao finalizar o programa deverá

imprimir se o número é par ou impar.

4) Elaborar um programa para ler três valores inteiros e

chame uma função que receba esse valores e determine

se os mesmos pertencem a uma equação do segundo

grau. Caso sejam, a função deverá retornar as raízes e o

código 0, do contrário, deverá retornar o código 1. Ao

finalizar o programa deverá imprimir se são parâmetros de

uma equação do segundo grau e os valores das raízes,

quando for o caso.

Page 13: 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de uma sub-rotina é carregado uma vez e pode ser ... em C que receba um inteiro de quatro

Exercício Proposto5) 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).