Buscar

Computação Básica - Sub-algoritmos I

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 32 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
COMPUTAÇÃO BÁSICA
Sub-algoritmos I
Prof. Bruno Macchiavello (bruno@cic.unb.br)
Universidade de Brasília – UnB 
Instituto de Ciências Exatas – IE 
Departamento de Ciência da Computação – CIC 
Prof. Bruno Macchiavello 1
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Modularização
• Às vezes, como programadores temos de
desenvolver programas para resolver problemas
muito complicados, o que provavelmente
envolve algoritmos grandes e complexos. Isso
costuma implicar em códigos mais difíceis decostuma implicar em códigos mais difíceis de
ler e em repetição de trechos de código ao
longo do programa.
Prof. Bruno Macchiavello 2
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Modularização
• Uma técnica aconselhada para desenvolver
bons programas de computador consiste em
dividir o problema inicial em subproblemas
mais simples ou, por outras palavras, dividir o
programa que permite a resoluçãoprograma que permite a resolução
computacional do problema em subprogramas
ou sub-algoritmos.
• A idéia é dividir os algoritmos em
subalgoritmos menores e de mais fácil
compreensão.
Prof. Bruno Macchiavello 3
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Modularização
• Um subprograma constitui um bloco independente
dentro de um programa, podendo ser visto como um
programa dentro de outro programa.
• Tal como um programa necessita de comunicar com
o ambiente exterior, através da leitura de dados e
da apresentação de resultados, também um
subprograma deve ter capacidade de aceitar
valores e de, eventualmente, devolver resultados ao
ambiente em que se insere, ou seja, o programa ou
subprograma que controla a sua execução.
Prof. Bruno Macchiavello 4
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Funções vs Procedimentos
• Em algumas linguagens de programação e em 
alguns livros os sub-algoritmos são divididos 
em: funções e procedimentos.
�O procedimentos não devolvem nenhum valor ao 
programa que o invocou.
�A função devolve um valor ao programa que o 
invocou.
Prof. Bruno Macchiavello 5
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Funções vs Procedimentos
• Porém, um procedimento pode ser visto como
uma função sem valor de retorno.
• Logo, na disciplinas vamos chamar todos os• Logo, na disciplinas vamos chamar todos os
sub-algoritmos de FUNÇÕES, mesmo se
retornam ou não nenhum valor.
Prof. Bruno Macchiavello 6
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Declaração em Pseudo-código
• Para declarar as funções usaremos o seguinte 
formato
Função tipo_de_retorno nome_da_função (t1 p1, t2 p2, ..., tn pn)
• onde ti é o tipo do parâmetro i e pi é o nome do 
parâmetro i (no exemplo mostrado, só há um 
parâmetro, do tipo inteiro, que chamamos de 
“a”.)
Prof. Bruno Macchiavello 7
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Declarando em Pseudo-código
• Em seguida, haverá uma declaração Início, que
delimita visualmente a função.
• Pode haver ainda declarações de variáveis, como
haveria num programa sem funções.
• Depois há o corpo da função, onde são realizados
os cálculos, e o comando retorne(), que encerra a
função e se o valor de retorno for informado, retorna
este valor.
• Depois há a declaração Fim, para delimitar
visualmente o limite da função.
Prof. Bruno Macchiavello 8
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exemplo 1
Exemplo:
Faça um faça o algoritmo, que leia um número inteiro digitado pelo usuário e
mostre na tela o quadrado dele que deve ser calculado por um subalgoritmo
(função).
Algoritmo Modular
Função inteiro Quadrado (inteiro a)
Prof. Bruno Macchiavello 9
Função inteiro Quadrado (inteiro a)
Início
retorne (a*a)
Fim
Variáveis
i : inteiro
Início
Leia(i)
Escreva(Quadrado(i))
Fim
SUBALGORITMO
(FUNÇÃO)
ALGORITMO
PRINCIPAL
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exemplo 1
Exemplo:
Faça um faça o algoritmo, que leia um número inteiro digitado pelo usuário e
mostre na tela o quadrado dele que deve ser calculado por um subalgoritmo
(função).
Algoritmo Modular
Função inteiro Quadrado (inteiro a)
Prof. Bruno Macchiavello 10
Função inteiro Quadrado (inteiro a)
Início
retorne (a*a)
Fim
Variáveis
i : inteiro
Início
Leia(i)
Escreva(Quadrado(i))
Fim
Tipo do retorno da função
Tipo do parâmetro de entrada da função
Parâmetro de entrada da função
Chama a função
Encerra a função
Argumento de chamada
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Argumentos e Parâmetros
• Muitas vezes é necessário indicar explicitamente ao
subprograma as condições sob as quais a sua
execução vai ser realizada. Por estas razões, um
subprograma poderá aceitar argumentos que
determinam essas condições. Os argumentosdeterminam essas condições. Os argumentos
poderão ser variáveis, constantes ou expressões
• Na descrição do subprograma terão de estar
definidos, por sua vez, os parâmetros que
correspondem aos argumentos que o programa do
nível acima determinou
Prof. Bruno Macchiavello 11
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Argumentos e Parâmetros
• Considere-se, por exemplo, um subprograma para
calcular a área de um retângulo, dados os
comprimentos dos lados. Este subprograma irá
devolver o valor da área do retângulo. O
subprograma seria invocado recorrendo a uma
instrução do tipoinstrução do tipo
a = retangulo( comprimento, largura )
• A variável a seria de um tipo compatível com o valor
de retorno do subprograma e comprimento e
largura seriam variáveis usadas como argumentos
Prof. Bruno Macchiavello 12
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Argumentos e Parâmetros
• O subprograma seria definido como:
Função real rectangulo( real x, real y ) 
Variaveis
Inicio 
retorne (x*y); 
Fim
• Na função rectangulo x e y são parâmetros do tipo real. 
Prof. Bruno Macchiavello 13
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exemplo 2
Exemplo:
Faça um algoritmo que leia um número inteiro e mostre o fatorial dele, sendo
que o fatorial deve ser calculado por uma função.
Algoritmo FatorialModular
Função inteiro Fatorial (inteiro a)
Variáveis
i, fat : inteiro
Prof. Bruno Macchiavello14
i, fat : inteiro
Início
fat←1
para i←1 até a faça
fat←fat*i
retorne (fat)
Fim
Variáveis
n : inteiro
Início
Leia(n)
Escreva(Fatorial(n))
Fim
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
A função Retorne()
• Quando uma função está sendo executada, e se
chega a uma declaração Retorne() a função é
encerrada imediatamente e, se o valor de retorno é
informado, a função retorna este valor.
• OBS: É importante lembrar que o valor de retorno• OBS: É importante lembrar que o valor de retorno
fornecido tem que ser compatível com o tipo de
retorno declarado para a função.
• Uma função pode ter mais de uma declaração
Retorne(). A função é terminada quando o
programa chega à primeira declaração Retorne().
Prof. Bruno Macchiavello 15
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exemplo 3
Exemplo de um algoritmo com uma função que utiliza dois comandos
Retorne().
Algoritmo ExemploRetorne
Função inteiro Negativo (inteiro a)
Início
Se (a<0) 
Retorne (1)
Prof. Bruno Macchiavello 16
Retorne (1)
Senão
Retorne (0)
Fim
Variáveis
n : inteiro
Início
Leia(n)
Se (negativo(n)==1)
Escreva (“O número é negativo”)
Senão
Escreva (“O número não é negativo”)
Fim
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Funções da Linguagem C
• Formalmente, uma função em C tem essa
“cara”:
tipo_de_retorno nome_da_função (t1 p1, t2 p2, ..., tn pn) {tipo_de_retorno nome_da_função (t1 p1, t2 p2, ..., tn pn) {
corpo da função
• Onde ti é o tipo do parâmetro i e pi é o nome do
parâmetro i;
Prof. Bruno Macchiavello 17
corpo da função
}
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exemplo 4
Exemplo de um algoritmo com uma função que utiliza dois comandos
Retorne() em Ansi C.
#include <stdio.h>
int negativo (int a) {
if (a<0) 
return 1;
else 
Prof. Bruno Macchiavello 18
else 
return 0;
}
int main () {
int n;
scanf("%d",&n);
if (negativo(n)==1) 
printf("O número é negativo\n");
else 
printf("O número não é negativo\n");
return 0;
}
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Funções da Linguagem C
• Pelo exemplo anterior, podemos ver que uma
função pode ser declarada antes da main, e que
seu formato é muito parecido com o da main (de
fato, a main é uma função!).
• No exemplo mostrado, só há um parâmetro, do tipo
int que chamamos de “a”.
• Vale ressaltar que o nome do parâmetro na função
não tem relação com o nome do argumento (da
variável que será passada por quem a chamou).
Prof. Bruno Macchiavello 19
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Funçoes de Linguagem C
• Como já foi dito, a main() é uma função, e seu valor
de retorno é lido pelo sistema operacional. A
convenção é que se um programa retorna zero ele
foi executado com sucesso, e se retorna não-zero é
porque teve problemas.
• O printf() é uma função que retorna um inteiro com
o número de caracteres impressos na tela. (Embora
esse valor seja descartado, pois não é utilizado.)
• O scanf() é uma função que retorna um inteiro com
o número de elementos lidos.
Prof. Bruno Macchiavello 20
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Escopos de Variáveis
• Uma variavél puede ser global o local. A varaivél local tem
como esopo a função onde é declarada, a global tem como
escopo TODAS as funções.
• VARIÁVEIS GLOBAIS: são úteis para facilitar a vida do
programador em algumas circunstâncias, mas podem ser
realmente perigosas, pois podem ser alteradas em qualquerrealmente perigosas, pois podem ser alteradas em qualquer
parte do programa. Evite ao máximo o uso de variáveis
globais (NOS TRABALHOS É PROIBIDO O USO DE
VARIAVEIS GLOBAIS).
• VARIÁVEIS LOCAIS: são mais seguras e permitem que
várias funções possuam variáveis com o mesmo nome
(embora pareça contraditório, a experiência mostra que isso
facilita a leitura do programa). Além disso, variáveis locais
poupam memória, pois só existem enquanto são necessárias.
Prof. Bruno Macchiavello 21
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Escopo de Variáveis
Esqueleto de um programa em C. A variável N é global, enquanto func() e
main() possuem cada uma uma variável i, e modificar o valor em uma não
influencia o valor que é mantido em outra. Se modificarmos N tanto em func()
quanto em main(), o valor visto pela outra será alterado, pois N é modificável
por todas elas.
#include <stdio.h>
Prof. Bruno Macchiavello 22
int N;
int func (...) {
int i;
...
return (...);
}
int main () {
int i;
...
return 0;
}
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
O tipo VOID
• Em inglês, void quer dizer vazio.
• O tipo void em C é usado (dentre outras circunstâncias)
quando uma função não retorna nada e em funções que
não têm parâmetros!
• Uma função do tipo void não precisa de return, pois ela
não retorna nada. Caso deseje sair imediatamente da
função, use return; (sem um valor associado).
• Uma função do tipo void pode ser considerada com um 
Procedimento.
Prof. Bruno Macchiavello 23
void nome_da_função (t1 p1, t2 p2, ..., tn pn)
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
O tipo VOID
• Também podemos fazer funções que não têm
parâmetros:
tipo_de_retorno nome_da_função (void)
• Ou ainda, que não tem parâmetros e que não
retornam nada:
Prof. Bruno Macchiavello 24
void nome_da_função (void)
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
O tipo VOID
• Em C se vc não declara parâmetros assume 
que é void. 
tipo_de_retorno nome_da_função (void)
• É equivalente a:
Prof. Bruno Macchiavello 25
tipo_de_retorno nome_da_função ()
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exemplo 5
Exemplo:
Programa em C com uma função do tipo Void (não retorna nada) e sem
parâmetros de entrada.
#include <stdio.h>
void Mensagem (void)
{
Prof. Bruno Macchiavello 26
{
printf ("Ola! Eu estou vivo.\n");
}
int main ()
{
Mensagem();
printf ("\tDiga de novo:\n");
Mensagem();
return 0;
}
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Diferentes Declarações de Funções
• Na linguagem ANSI C existem 3 formas de 
declarar uma função:
1. Sempre escrever a função acima da função que vai 
chamar ela.
2. Escrever a função em qualquer posição mas fazer a 
referência de todas as funções antes.
3. Utilizar um arquivo auxiliar (.h) para fazer a 
referênciae incluir o arquivo auxiliar no programa.
Prof. Bruno Macchiavello 27
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Exemplo 6
#include <stdio.h>
int negativo (float a)
{
if (a < 0 )
return 1;
else
return 0;
}
void area (void)
{
Prof. Bruno Macchiavello 28
{
float r; 
do
{
printf(“Informe o valor do raio:\n”);
scanf(“%f”,r);
}while(negativo(r));
printf(“A area e: %.2f”, 3.14*r^2);
}
int main ()
{
area();
return 1;
}
Funções na ordem 
correta
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
#include <stdio.h>
int negativo (float a);
float area (void);
int main ()
{
area();
return 1;
}
void area (void)
{
float r; 
Referencia das funções
Prof. Bruno Macchiavello 29
float r; 
do
{
printf(“Informe o valor do raio:\n”);
scanf(“%f”,r);
}while(negativo(r));
printf(“A area e: %.2f”, 3.14*r^2);
}
int negativo (float a)
{
if (a < 0 )
return 1;
else
return 0;
}
Funções em qualquer 
ordem
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
#include <stdio.h>
#include “funcoes.h”
int main ()
{
area();
return 1;
}
void area (void)
{
float r; 
do Funções 
• A terceira forma é criar um 
arquivo com extensão “.h” 
para fazer as referência e 
colocar o arquivo na mesma 
pasta do arquivo “.c”. Por 
exemplo criarmos um 
arquivo chamado 
“funcoes.h”. Com o 
Prof. Bruno Macchiavello 30
int negativo (float a);
float area (void);
do
{
printf(“Informe o valor do raio:\n”);
scanf(“%f”,r);
}while(negativo(r));
printf(“A area e: %.2f”, 3.14*r^2);
}
int negativo (float a)
{
if (a < 0 )
return 1;
else
return 0;
}
Funções 
em 
qualquer 
ordem
“funcoes.h”. Com o 
conteúdo abaixo.
• No programa (arquivo “.c”) 
deve-se incluir o arquivo de 
cabeçalho com o comando 
INCLUDE. 
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Diferentes Declarações de Funções
• Qual a melhor forma?
• Não existe uma opção melhor (todas são
equivalentes).
• Porém é recomendado sempre declarar as
funções na ordem correta, para facilitar a leitura
do código. E utilizar a referência das funções
(podendo utilizar o arquivo .h ou não) para
garantir possíveis erros de compilação em um
programa com MUITAS funções.
Prof. Bruno Macchiavello 31
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação
Universidade Universidade de de BrasíliaBrasília
Computação BásicaComputação Básica
Observação
• Em pseudo-código vamos utilizar como padrão
na disciplina sempre a opção 1 (colocar as
funções na ordem correta).
Prof. Bruno Macchiavello 32

Outros materiais