341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de...
Transcript of 341tica 15 a 18) - ppgia.pucpr.bralceu/ab/Aulas/slides%2015%20at%e9%2018/Aula... · O código de...
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.
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 EntradaDado 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 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;
}
#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
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;}
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;
}
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;
}
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));
}
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.
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).