Livro Texto Unidade 3
Livro Texto Unidade 3
Livro Texto Unidade 3
Unidade III
5 FUNÇÕES
A função é um grupo de instruções que juntas executam uma tarefa. Todo programa em C
possui pelo menos uma função, que é a função main(), e todos os programas mais triviais podem
definir algumas funções específicas.
A biblioteca padrão C fornece inúmeras funções internas que seu programa pode instanciar. Por
exemplo, função strcat() para concatenar duas cadeias, a função memcpy() para copiar um local da
memória para outro local e muitas outras funções.
118
ALGORITMOS
Saiba mais
Biblioteca Descrição
Essa biblioteca é a mais utilizada na programação em
stdio.h línguagem C, pois é a padrão, na qual estão embutidas as
funções printf(), puts(), gets(), scanf(), entre outras
Possui as funções matemáticas usadas pela linguagem.
math.h Encontram-se funções trigonométricas, hiperbólicas,
exponenciais, logarítmicas, entre outras
Esta possui as rotinas de tratamento de strings e
string.h caracteres, na qual se encontram as funções strcmp() e
strcpy(), entre outras
Essa biblioteca possui as funções de manipulação de data
time.h e hora do sistema
Possui um conjunto de funções que não se enquadra
stdlib.h em outras categorias. As funções dessa biblioteca são
conhecidas como “funções miscelâneas
Cada função tem que ter um nome único, que serve para a sua invocação
em algum lugar no programa a que pertence.
Uma função (como o seu nome indica) deve realizar uma única tarefa
bem definida.
Uma função deve comportar-se como uma caixa preta. Não interessa
como funciona, o que interessa é que o resultado final seja o esperado, sem
efeitos colaterais.
119
Unidade III
Uma função pode retornar, para a entidade que a invocou, um valor como
resultado do seu trabalho (DAMAS, 2016, p. 104).
Uma função é conhecida com vários nomes, como método, sub-rotina, procedimento etc. A forma
geral de uma definição de função na linguagem de programação C é dada a seguir.
• Tipo de retorno: uma função pode retornar um valor. O return_type é o tipo de dados que a
função retorna (valor). Algumas funções executam as operações desejadas sem a necessidade de
retornar um valor. Nesse caso, o return_type será a palavra-chave void (vazio).
• Nome da função: o nome real da função; o nome da função e a lista de parâmetros, juntos,
constituem a assinatura da função.
• Parâmetros: um parâmetro é como um espaço reservado. Quando uma função é chamada, você
passa um valor para o parâmetro e este valor é referido como parâmetro ou argumento real.
A lista de parâmetros refere-se ao tipo, ordem e número dos parâmetros de uma função. Os
parâmetros são opcionais, isto é, uma função pode não conter parâmetros.
• Corpo da função: o corpo da função contém uma coleção de instruções que define a sua
funcionalidade.
120
ALGORITMOS
A)
B)
Saiba mais
121
Unidade III
Exemplo de aplicação
Pesquise exemplos de programas que utilizam as funções para auxiliar na organização do código fonte.
Lembrete
Observação
A POO inverte essa ordem e coloca os dados do primeiro plano, para, em seguida, analisar
os algoritmos que operam os dados. A chave para ser mais produtivo na POO é tornar cada
objeto responsável por executar um conjunto de tarefas relacionadas. Se um objeto depende
de uma tarefa que não é de sua responsabilidade, ele precisa ter acesso a outro objeto cujas
responsabilidades incluam essa tarefa. Dessa forma, o primeiro objeto pede ao segundo objeto
para executar a tarefa.
122
ALGORITMOS
Exemplo de aplicação
5.1.2 Objetos
Para trabalhar com POO, você deve identificar três características principais dos objetos,
listadas a seguir.
• Comportamento do objeto: o que você pode fazer com esse objeto ou quais métodos é
possível acessar?
• Estado do objeto: como o objeto reage quando você aplica esses métodos?
• Identidade do objeto: como o objeto se distingue dos outros que podem ter o mesmo
comportamento e estado?
Os objetos são criados a partir de uma classe usando o novo operador, que chama um construtor
com tipos de parâmetros correspondentes. Esses objetos podem ser atribuídos a variáveis declaradas
do tipo dado pelo nome da classe; cada objeto tem uma cópia de cada variável de instância em sua
classe e em todas as superclasses dessa classe.
Os métodos de instância em uma classe podem ser chamados apenas com um objeto do tipo de
classe (ou uma subclasse). Esse objeto é chamado de receptor do método e pode ser referido dentro
do método. Todos os objetos que são instâncias da mesma classe compartilham uma semelhança,
suportando o mesmo comportamento. O comportamento de um objeto é definido pelos métodos
que você pode instanciar.
Em seguida, cada objeto armazena informações sobre o estado do objeto. O estado de um objeto
pode mudar com o tempo, mas não espontaneamente. Uma mudança no estado de um objeto deve
ser uma consequência das chamadas de método. No entanto, o estado de um objeto não o descreve
completamente, pois cada objeto tem uma identidade distinta. Por exemplo, em um sistema de
processamento de pedidos, os pedidos são distintos, mesmo que solicitem itens idênticos.
123
Unidade III
Observe que os objetos individuais que são instâncias de uma classe sempre diferem em
sua identidade e geralmente diferem em seu estado. Por exemplo, o estado de um objeto pode
influenciar seu comportamento.
5.1.3 Classes
Um objeto de classe é uma variável global, contendo variáveis e métodos de classe. Esses
membros pertencem a toda a classe sem nenhuma referência a nenhuma instância.
Construtores
A classe storage define o escopo (visibilidade) e o tempo de vida das variáveis e/ou
funções
dentro de um programa C. Esses especificadores precedem o tipo que eles modificam. Existem as
seguintes classes de armazenamento que podem ser usadas em um programa C:
• auto;
• register;
• static;
• extern.
124
ALGORITMOS
{
int numero1;
auto int numero2;
}
Observação
A classe de armazenamento de registro é usada para definir variáveis locais que devem ser
armazenadas e registradas na memória RAM. Isso significa que a variável tem um tamanho máximo
e não pode apresentar o operador ‘&’ unário aplicado a ela.
{
register int numero1;
}
O registro deve ser usado apenas para variáveis que requerem acesso rápido, como contadores.
Vale esclarecer que definir como register não significa que a variável será armazenada em um
registro: isso significa que pode ser armazenado em um registro, dependendo do hardware e das
restrições de implementação.
Tornar as variáveis locais estáticas permite que elas mantenham os seus valores entre as
chamadas de função. O modificador estático também pode ser aplicado a variáveis globais.
A partir
dessa definição, é possível implementar o programa na linguagem de programação C.
125
Unidade III
A)
B)
Observação
5.2.1 Atributos
Os atributos são um mecanismo por meio do qual o desenvolvedor pode anexar informações
extras às entidades da linguagem com uma sintaxe generalizada em vez de introduzir novas
construções sintáticas ou palavras-chave para cada recurso. Essa informação destina-se a ser
usada por uma implementação de maneira que tenha um mínimo de semântica, como melhorar a
qualidade dos diagnósticos produzidos por uma implementação ou especificar o comportamento
específico da plataforma.
126
ALGORITMOS
5.2.2 Associações
• A é um tipo de B;
• A está contido em B;
• A é uma descrição de B;
• A é um membro de B;
• A usa ou gerencia B;
• A se comunica com B;
• A segue B;
• A é propriedade de B.
5.3 Métodos
A programação orientada a objetos (POO) foi usada para melhorar a qualidade, a produtividade
e a reutilização de componentes de software. Nesse paradigma de programação, os principais
agentes ou objetos do aplicativo devem ser identificados. Os objetos possuem dados e métodos
que descrevem seus recursos e comportamento. Um programa orientado a objetos é implementado
como um conjunto de classes e os objetos são criados a partir das instâncias de sua classe. Portanto,
as classes são a unidade básica de modularização em um ambiente orientado a objetos.
127
Unidade III
Observação
Lembrete
128
ALGORITMOS
Segundo Manzano:
Entrada Saída
- snprintf() / snprintf_s()
fgetc() fputc()
fgets() fputs()
fscanf() / fsacanf_s() fprintf() / fprintf_s()
getchar() putchar()
gets() / gets_s() puts()
scanf() / scanf_s() printf() / printf_s()
sscanf() / sscanf_s() sprintf() / sprint_s()
129
Unidade III
Para Soffner:
A)
B)
130
ALGORITMOS
A)
B)
Retomando Soffner:
131
Unidade III
No exemplo a seguir, é possível verificar a aplicação da função strcmp( ), que realiza a comparação
de duas string que serão digitadas pelo usuário.
A)
B)
Saiba mais
Exemplo de aplicação
132
ALGORITMOS
6.1.2 Arquivos
É um conjunto de registros (que pode ser apenas um registro) que, por sua
vez, é um conjunto de campos (que pode ser apenas um campo), sendo cada
campo o conjunto de informações (MANZANO, 2013, p. 192).
Ainda de acordo com Manzano (2013), o tipo de abertura de um arquivo é especificado por três
códigos do tipo string, a saber:
Na quadro 11, são apresentadas as funções específicas para se trabalhar com arquivos.
133
Unidade III
Para iniciar as operações com um arquivo, o primeiro passo é criá-lo. No exemplo a seguir, é
apresentado o código para a criação do arquivo e o print da criação após a sua execução.
A)
B)
C)
134
ALGORITMOS
Lembrete
Veja o código a seguir, por meio do qual é possível criar um arquivo, utilizando-o após
sua gravação.
A)
B)
C)
Figura 62 – Manipulação do arquivo (imagem do programa Dev C++ e do Bloco de Notas que foi criado)
135
Unidade III
O próximo exemplo mostra que é possível acessar as informações que foram escritas no arquivo
texto, exibindo o seu conteúdo. Observe o código com essa ação.
A)
B)
Na sequência, temos um exemplo mostrando que é possível salvar o texto de uma frase no
arquivo que será gerado.
136
ALGORITMOS
A)
B)
Figura 64 – Salvando o texto de uma frase completa (imagem do programa Dev C++)
O próximo exemplo ilustra como abrir o arquivo de modo que seja possível acrescentar um
novo texto ao conteúdo, gravando-se, depois, a alteração.
137
Unidade III
A)
B)
C)
Figura 65 – Acrescentando texto ao arquivo (imagem do programa Dev C++ e do Bloco de Notas que foi gerado)
138
ALGORITMOS
Saiba mais
Para conhecer um pouco mais sobre o assunto, você pode ler o capítulo
sobre arquivos da obra indicada a seguir.
Resumo
Exercícios
Questão 1. A sequência de Fibonacci é uma sequência numérica em que o número atual é obtido
a partir da soma dos dois números anteriores. Os primeiros números dessa sequência são 0 e 1.
{
if(num==1 || num==2)
return 1;
else
return fibonacci(num-1) + fibonacci(num-2);
}
III – A função é um exemplo de função recursiva, ou seja, que faz uso dela mesma.
A) I e IV.
B) II.
C) III.
D) I e II.
140
ALGORITMOS
I – Afirmativa incorreta.
II – Afirmativa incorreta.
Justificativa: vemos que a função retorna o número 1 ou o resultado da soma da função com
argumentos num-1 e num-2. Logo, ela retorna apenas um termo da série de Fibonacci, não a
série completa.
Logo, a função faz uma chamada de si mesma, o que caracteriza uma função recursiva.
IV – Afirmativa incorreta.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *pont;
int num;
pont=fopen(“arquivo.txt”,”a”);
fprintf(pont, “%i”, num);
fclose(pont);
}
141
Unidade III
A) I e IV.
B) II.
C) III e IV.
D) I e II.
E) II e III.
I – Afirmativa incorreta.
Justificativa: a saída de dados na tela é feita pela função printf(). No código, temos a função
fprintf(), que faz a saída de dados em um arquivo.
II – Afirmativa correta.
Justificativa: vemos, na linha de código a seguir, que é acessado o arquivo arquivo.txt. Logo,
a saída de dados é feita como uma inclusão (note o parâmetro “a”, de append, “acrescentar”)
nesse arquivo.
PRTARQ=fopen(“arquivo.txt”,”a”);
Justificativa: as funções fopen() e fclose() são as funções em linguagem C que fazem o acesso
e o fechamento de arquivos.
142
ALGORITMOS
IV – Afirmativa incorreta.
Para que a saída fosse a palavra “num”, a linha de código deveria ser:
Ou seja, a saída deveria ser do tipo string (%s) e teríamos a palavra “num” entre parênteses
como argumento da função. Se usamos num sem parênteses, fazemos referência ao conteúdo dessa
variável. Se usamos “num” entre parênteses, fazemos referência à sequência de caracteres num.
143