Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

APLICAÇÕES DE
PROGRAMAÇÃO
Aula 1
PROGRAMAÇÃO E FUNÇÕES
COM VETORES
Programação e funções com vetores
Olá, estudante! Nesta videoaula faremos uma imersão completa nos
fundamentos de vetores. Em nossa jornada de aprendizado, exploraremos os
conceitos cruciais, as características e a sintaxe essencial para compreender e
utilizar vetores de maneira eficaz.
A aula abordará, de forma didática, a definição de vetores, destacando suas
características principais e apresentando exemplos ilustrativos que facilitarão a
assimilação dos conceitos. Nesse processo, nos dedicaremos, também, à sua
declaração. Na sequência, examinaremos o acesso aos vetores e seus
elementos, proporcionando insights práticos sobre como manipular e utilizar
eficientemente as informações armazenadas. O conhecimento desses
aspectos será, pois, crucial para o desenvolvimento de soluções
computacionais robustas e eficazes.
Não perca a oportunidade de enriquecer seus conhecimentos nesse tema tão
importante da programação. Junte-se a nós nesta jornada de descobertas e
fortaleça suas habilidades computacionais. Sua participação é fundamental
para o sucesso coletivo! 
Alto Contraste A- A+ Imprimir
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 1/50
Clique aqui para acessar os slides da sua videoaula.
Bons estudos!
Ponto de Partida
Olá, caro estudante! Seja muito bem-vindo à nossa primeira aula desta
Unidade sobre os fundamentos essenciais dos vetores. Este conteúdo será de
grande valia na construção de seu conhecimento na área, abrindo portas para
oportunidades profissionais e desenvolvendo seu raciocínio lógico e
capacidade de resolução de problemas.
Assim como a programação se tornou uma habilidade indispensável em
diversos setores, hoje os vetores também desempenham um papel vital em
várias aplicações. Durante esta aula, vamos nos debruçar sobre a definição, as
características e a sintaxe de vetores, proporcionando uma base sólida para a
compreensão e aplicação prática do assunto. Na sequência, será proposto um
exercício com vetores para o entendimento desse valioso elemento no
desenvolvimento de algoritmos.
Para ilustrar a aprendizagem desta aula, imagine que em um exercício, seu
professor lança um desafio para você desenvolva um programa em C que seja
possível passar vetores com todos os elementos por parâmetro para uma
função.
Ao final desta aula, você estará familiarizado teoricamente com a declaração
de vetores e com a habilidade de acessar e manipular seus elementos e terá
as ferramentas necessárias para armazenar e gerenciar informações de
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 2/50
https://cm-kls-content.s3.amazonaws.com/202401/ALEXANDRIA/ALGORITMOS_E_LOGICA_DE_PROGRAMACAO/PPT/u4a1_algo_log_pro.pdf
maneira eficaz. Dedique-se aos tópicos abordados, pratique ativamente e trilhe
sua trajetória na área de algoritmos. Boa aula! 
Vamos Começar!
A programação é um campo vasto e dinâmico, repleto de desafios e
possibilidades. No cerne dessa disciplina, estruturas de dados são
determinantes, moldando a maneira como os programadores organizam e
manipulam informações. Entre essas estruturas, os vetores destacam-se como
uma ferramenta fundamental em linguagens de programação como C. A
habilidade de entender, declarar e manipular vetores é essencial para construir
algoritmos eficientes e soluções robustas.
Os vetores em C são uma forma estruturada de armazenar dados
homogêneos, permitindo a fácil manipulação de conjuntos de informações de
forma sequencial. Este artigo mergulha nas entranhas dessa estrutura,
explorando desde a definição e características até a sintaxe de declaração e
acesso aos elementos. Ao compreender esses aspectos fundamentais, os
programadores podem aprimorar significativamente suas habilidades de
desenvolvimento, tornando-se capazes de criar programas mais produtivos e
legíveis.
A capacidade de declarar e acessar vetores não é apenas um conhecimento
técnico, mas também uma habilidade que promove a modularidade e
escalabilidade do código. Esta aula, então, se propõe a guiar você, estudante,
através dos princípios básicos, fornecendo exemplos práticos que ilustram a
aplicação desses conceitos. Espera-se, ao fim, que você se sinta capacitado a
utilizar vetores de maneira efetiva em seus projetos, contribuindo, assim, para o
desenvolvimento de softwares mais estruturados e eficazes.
Definição, características e sintaxe de vetores
Os vetores, em linguagem C, são estruturas de dados que proporcionam uma
maneira eficiente de organizar e manipular conjuntos homogêneos de
informações. Essencialmente, um vetor é uma sequência ordenada de
elementos do mesmo tipo, armazenados de forma contígua na memória. Sua
principal característica reside na capacidade de acessar cada elemento
individualmente através de índices, facilitando a implementação de algoritmos
complexos e o gerenciamento eficaz de dados.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 3/50
As propriedades distintivas dos vetores incluem, pois, a organização sequencial
dos elementos, permitindo um acesso direto e eficiente a qualquer posição do
vetor. Além disso, eles possuem um tamanho fixo, determinado durante a
declaração. Isso implica que a quantidade de elementos não pode ser alterada
dinamicamente durante a execução do programa, o que, por um lado,
proporciona um acesso rápido, mas, por outro lado, impõe limitações em
termos de escalabilidade dinâmica.
A sintaxe de vetores em C segue um padrão específico, na qual o tipo de dado
é seguido pelo nome do vetor e o número de elementos, delimitado por
colchetes. Por exemplo, a sintaxe "int numeros[5];" cria um vetor chamado
"numeros" capaz de armazenar cinco números inteiros. A partir dessa
declaração, os programadores podem acessar e manipular cada elemento
utilizando índices, iniciando do índice zero até o número total de elementos
menos um. Vale lembrar que os índices sempre são valores inteiros, então
sempre devemos pensar na sintaxe para a criação de um vetor. Logo, temos:
Em que “tipo” é a classificação do tipo de dado que o vetor vai trabalhar, isto é,
informações numéricas, textuais, lógicas etc. Já o “nome_do_vetor”, é o
identificador atribuído ao vetor. Esse nome é utilizado para referenciar e
manipular o vetor ao longo do código. Por exemplo, em “int numeros[5];”,
“numeros” é o nome do vetor. Por fim, o “tamanho”, indica o número de
elementos que o vetor pode armazenar. Este valor deve ser um inteiro não
negativo. O tamanho do vetor é fixado durante a declaração e não pode ser
alterado dinamicamente durante a execução do programa, pois ele é definido
de forma estática.
Se fossemos pensar no vetor “números” mencionado acima, na forma gráfica,
na memória do computador, teríamos 5 espaços para armazenar 5 valores
diferentes. Observe a Tabela 1:
tipo
nome_do_vetor[tamanho];
Tipo : int 10 20 30 40 50
Índices 0 1 2 3 4
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 4/50
Tabela 1 | Exemplo de vetor. Fonte: elaborada pelo autor.
Note que o vetor está exemplificado de forma horizontal; à esquerda temos o
início do vetor e à direita o final dele. Portanto, os índices iniciam sempre no 0
(zero) e terminam um número a menos que o tamanho do vetor, 4 (quatro),
totalizando 5 (cinco) espaços na memória. Isso quer dizer que em um vetor de
5 elementos, o seu maior índice será o número 4. Da mesma maneira, se
criarmos um vetor de 38 elementos, o seu maior índice será o número 37, e
assim sucessivamente.
Os vetores em C fornecem uma organização eficaz para dados, mas, além
disso, oferecem uma sintaxe clara e características específicas que facilitam o
desenvolvimento de algoritmos eficientes. A compreensãoda definição,
características e sintaxe dessas estruturas é fundamental para explorar
plenamente o potencial dessa ferramenta no contexto da programação em C.
Declaração de vetores
Todos os recursos utilizados na programação e dentro do código-fonte para a
construção do algoritmo, que sempre terá como objetivo resolver um problema,
devem ser declarados. Mas, o que seria essa declaração? E por que ela deve
ser realizada?
A declaração de recursos, variáveis ou constantes, é necessária para a criação
do objeto no algoritmo. Veja o exemplo a seguir:
Figura 1 | Erro na declaração de variáveis. Fonte: elaborada pelo
autor.
O código da Figura 1 apresenta a criação do vetor “teste” com a inclusão de 5
valores numéricos aleatórios. Na sequência, é utilizado um laço de repetição
com o comando “for” para a apresentação em tela dos seus valores. Na linha 8,
uma condição verifica se no índice 2 do vetor existe o valor “43”, caso o retorno
lógico da condição seja verdadeiro, então o conteúdo do índice 2 do vetor, que
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 5/50
é o valor 43, será atribuído na variável que recebeu o nome de “salvo”. Porém,
existe um problema no código: a variável “salvo” não foi declarada. Observe
que na linha 9 ela tem um traço vermelho indicando que há um erro no código.
Como faríamos para resolver esse problema? Ora, basta declarar a variável no
mesmo tipo do vetor. Observe, na Figura 2, o código resolvido.
Figura 2 | Ajustes na declaração de variáveis. Fonte: elaborada
pelo autor.
Façamos, agora, esse mesmo processo com os vetores. A declaração de
vetores em linguagem C é um processo fundamental na construção de
estruturas de dados eficientes. A sintaxe básica envolve especificar o tipo de
dado dos elementos, seguido pelo nome do vetor e o número de elementos
desejados, encapsulados por colchetes. Por exemplo, a declaração int
numeros[5]; cria um vetor denominado “numeros” capaz de armazenar cinco
números inteiros. Essa estrutura fixa a quantidade de elementos e estabelece a
base para o acesso eficiente a dados sequenciais.
Ao lado da declaração, a inicialização de vetores é uma prática comum para
atribuir valores iniciais aos elementos durante a criação. Por exemplo, a
declaração int numeros[5] = {10, 20, 30, 40, 50}; cria o vetor “números” com
cinco elementos e atribui valores específicos a cada um deles. Tal capacidade
de inicialização oferece uma maneira concisa de preencher vetores com dados
relevantes desde o início, facilitando o desenvolvimento de algoritmos coesos.
Em síntese, a flexibilidade na declaração e inicialização de vetores permite aos
programadores adaptarem essas estruturas conforme as necessidades
específicas de seus algoritmos. Compreender a sintaxe e utilizar exemplos
práticos, como os mencionados acima, os capacita a criarem estruturas de
dados eficazes em C, fornecendo uma base sólida para a manipulação
eficiente de conjuntos homogêneos de informações.
Siga em Frente...
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 6/50
Acesso aos vetores e elementos
O acesso aos elementos de um vetor em linguagem C é realizado por meio de
índices, que representam a posição de cada elemento na sequência. Os
índices começam geralmente em 0, indicando o primeiro elemento, e vão até o
tamanho do vetor menos um. A expressão vetor[indice] proporciona acesso
direto ao elemento desejado, permitindo a leitura e modificação dos dados
armazenados. Essa abordagem sequencial e indexada é fundamental para a
manipulação precisa e eficiente de informações contidas nos vetores.
Além do acesso individual, iterações através dos elementos de um vetor são
comuns em muitos algoritmos. Utilizando estruturas de repetição, como o loop
“for”, os programadores podem percorrer todo o vetor, acessando e
manipulando cada elemento sucessivamente. O trecho de código a seguir
ilustra como imprimir todos os elementos de um vetor:
Figura 3 | Exemplo de acesso com índices. Fonte: elaborada pelo
autor.
Neste exemplo, o loop “for” percorrer o vetor “números” e imprime cada
elemento juntamente com seu índice correspondente.
Note que o último índice é 4, e não 5, porque ele inicia em 0.
O acesso eficiente aos elementos de um vetor, portanto, não apenas simplifica
a implementação de algoritmos, mas também contribui para a otimização do
uso de recursos de memória, pois permite manipular dados de forma
organizada e direcionada.
Vejamos, a título de curiosidade, um código mais avançado, porém bastante
interessante, sobre o uso de vetores: um jogo de adivinhação em C que utiliza
vetores para armazenar e manipular dados em que o jogador tenta adivinhar
um número aleatório entre 1 e 100.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 7/50
Figura 4 | Jogo de adivinhação. Fonte: elaborada pelo autor.
Figura 5 | Jogo de adivinhação - cont. Fonte: elaborada pelo autor.
Neste exemplo, o vetor “histórico” é utilizado para armazenar as tentativas do
jogador, permitindo ao programa exibir um histórico ao final do jogo. O jogo
continua até o jogador acertar o número ou atingir o limite de tentativas. O uso
de vetores facilita o rastreamento e a manipulação dos dados relacionados às
tentativas do jogador.
Explicando melhor:
Início do programa: o programa começa incluindo bibliotecas
necessárias e definindo constantes.
Inicialização: inicializa a semente para números aleatórios e define um
número secreto aleatório entre 1 e 100. Cria um vetor para armazenar o
histórico de tentativas (historico).
Jogo principal: um loop inicia, permitindo que o jogador faça várias
tentativas.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 8/50
Tentativa do jogador: solicita ao jogador para digitar um número.
Armazena a tentativa no histórico.
Verificação da tentativa: se o número digitado for igual ao número
secreto, o jogador acertou e o jogo termina. Caso contrário, são dadas
dicas ao jogador sobre se o número é maior ou menor.
Limite de tentativas: o jogo verifica se o jogador atingiu o limite de
tentativas.
Exibição do histórico: ao final do jogo, o histórico de tentativas do
jogador é exibido.
Fim do programa: o programa termina.
Este jogo demonstra como utilizar vetores em C para armazenar e manipular
dados, aqui, as tentativas do jogador. Esse uso facilita o rastreamento e a
exibição do histórico de uma forma organizada.
Na Figura 6, é possível observar o código rodando.
Figura 6 | Teste do jogo de adivinhação. Fonte: elaborada pelo
autor.
Conclusão
Em síntese, a compreensão abrangente sobre vetores em linguagem C abarca
a definição, as características, a sintaxe de declaração e o acesso eficiente aos
elementos. Os vetores proporcionam uma estrutura organizada para armazenar
dados homogêneos, e sua declaração, feita através da sintaxe específica,
determina o tamanho e o tipo de dados que serão manipulados. A inicialização
de vetores, com exemplos como int numeros[5] = {10, 20, 30, 40, 50};, por seu
turno, facilita a atribuição de valores iniciais aos elementos.
Ao acessar os vetores e seus elementos através de índices, os programadores
ganham a capacidade de manipular dados de forma precisa, seja para leitura,
modificação ou iteração. O exemplo prático de um loop “for” que percorre um
vetor ilustra como essa abordagem sequencial e indexada é aplicada no
desenvolvimento de algoritmos.
Em conjunto, essas qualidades fazem dos vetores em C uma ferramenta
indispensável para programadores. Dominar esses conceitos proporciona uma
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 9/50
base sólida para estruturas de dados, alémde capacitar o desenvolvedor a
criar algoritmos eficazes, contribuindo, assim, para o desenvolvimento de
software robusto e escalável.
Vamos Exercitar?
Retomando a situação apresentada no início da aula, onde você foi desafiado
pelos eu professor a fazer um exercício, que desenvolva um programa em C
que seja possível passar vetores com todos os elementos por parâmetro para
uma função.
O exercício solicita que sejam criados dois vetores de dez elementos atribuídos
da seguinte forma:
Em seguida, que seja criada uma função que receba os dois vetores e some
seus elementos, chegando em um valor total. Esse valor deve retornar e ser
exibido no programa principal.
Este é um exercício simples, porém, vai testar suas habilidades na construção,
passagem por parâmetros de vetores e manipulação de elementos em um
vetor.
Vamos à resolução?
O código a seguir mostra a resolução do exercício:
vetA[] = {10, 20, 30, 40, 50, 60,
70, 80, 90, 100}
vetB[] = {1, 2, 3, 4, 5, 6, 7, 8, 9,
10}
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 10/50
Figura 7 | Código do exercício. Fonte: elaborada pelo autor.
Neste exemplo, a função “somarElementos()” recebe os dois vetores e o
tamanho como parâmetros, percorre os elementos de ambos e calcula a soma
total. O programa principal declara e inicializa os vetores e chama a função
para obter o resultado da soma, que é então exibido. O resultado será sempre
"605", pois os valores foram atribuídos de forma fixa no código. Como
sugestão, altere o programa para que os elementos dos dois vetores sejam
atribuídos pelo usuário, assim, o valor exibido pelo programa vai depender dos
valores que o usuário informar.
Saiba Mais
Para saber mais sobre algoritmos e ter uma visão profunda sobre seus
fundamentos, acesse, em sua Biblioteca virtual, o Capítulo 1, Seção 1, “O
papel dos algoritmos na computação”, do livro Algoritmos: teoria e prática, de
Thomas Cormen, uma excelente referência na área.
CORMEN, T. et al. Capítulo 1 – Seção 1: O papel dos algoritmos na
computação. In: Algoritmos: teoria e prática. 3. ed. Rio de Janeiro: LTC, 2022,
p. 3-10. 
Referências Bibliográficas
CORMEN, T. et al. Algoritmos: teoria e prática. 3. ed. Rio de Janeiro: LTC,
2022.
MANZANO, J. A. N. G.; OLIVEIRA, J. F. de. Estudo dirigido de algoritmos.
São Paulo: Érica, 2000.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 11/50
https://integrada.minhabiblioteca.com.br/reader/books/9788595158092/epubcfi/6/16[%3Bvnd.vst.idref%3Dchapter01]!/4
https://integrada.minhabiblioteca.com.br/reader/books/9788595158092/epubcfi/6/16[%3Bvnd.vst.idref%3Dchapter01]!/4
https://integrada.minhabiblioteca.com.br/reader/books/9788595158092/epubcfi/6/16[%3Bvnd.vst.idref%3Dchapter01]!/4
https://integrada.minhabiblioteca.com.br/reader/books/9788595158092/epubcfi/6/16[%3Bvnd.vst.idref%3Dchapter01]!/4
https://integrada.minhabiblioteca.com.br/reader/books/9788595158092/epubcfi/6/16[%3Bvnd.vst.idref%3Dchapter01]!/4
https://integrada.minhabiblioteca.com.br/reader/books/9788595158092/epubcfi/6/16[%3Bvnd.vst.idref%3Dchapter01]!/4
MENÉNDEZ, A. Simplificando algoritmos. São Paulo: LTC, 2023.
SILVA, F. S. C. da; FINGER, M.; MELO, A. C. V. Lógica para computação. 2.
ed. São Paulo: Cengage Learning, 2017.
ZIVIANI, N. Projeto de algoritmos com implementações em Pascal e C. 3.
ed. São Paulo: Cengage Learning, 2011.
Aula 2
PROGRAMAÇÃO COM
MATRIZES
Programação com matrizes
Olá, estudante! Nesta videoaula abordaremos os fundamentos das matrizes.
Vamos apresentar a definição de matrizes, destacando suas características
elementares, e exemplos que facilitarão a assimilação do tema. Além disso,
exploraremos, em detalhes, a atribuição de valores a matrizes. Em seguida,
examinaremos a iteração sobre os elementos das matrizes, oferecendo insights
práticos sobre como manipular e acessar eficientemente as informações
armazenadas.
Será proposto, nesse processo, um exercício prático envolvendo programação
com matrizes na linguagem de programação C.
O domínio desses assuntos será, pois, crucial para o desenvolvimento de
soluções computacionais robustas e eficazes, ampliando suas habilidades em
programação. Aproveite o conteúdo!
Clique aqui para acessar os slides da sua videoaula.
Bons estudos!
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 12/50
https://cm-kls-content.s3.amazonaws.com/202401/ALEXANDRIA/ALGORITMOS_E_LOGICA_DE_PROGRAMACAO/PPT/u4a2_algo_log_pro.pdf
Ponto de Partida
Olá, caro estudante! Seja bem-vindo à nossa aula sobre os fundamentos
essenciais das matrizes. Vamos aprofundar nossos conhecimentos nos
conceitos, características e sintaxe de matrizes. 
Para ilustrar a aprendizagem desta aula, você será desafiado a realizar um
exercício de programação, no qual você deve criar um programa na linguagem
de programação C que lide com duas matrizes de ordem 4x4.
Ao final desta aula, você estará familiarizado teoricamente com a atribuição de
valores a matrizes e com a habilidade de iterar sobre seus elementos.
Bons estudos!
Vamos Começar!
As matrizes são estruturas de dados essenciais na programação, permitindo a
organização eficiente de conjuntos bidimensionais de informações. Elas
funcionam como tabelas virtuais, facilitando a ordenação sistemática de dados.
Nesta aula, exploraremos desde os conceitos fundamentais de matrizes,
esclarecendo aspectos teóricos do tema, até aplicações práticas em C.
Em primeiro lugar, então, compreenderemos as características distintivas das
matrizes em C enquanto estruturas estáticas, com tamanhos conhecidos
durante o tempo de compilação, cujos índices começam em zero. A sintaxe
para declarar matrizes é clara e concisa, estabelecendo uma base sólida para
a manipulação eficiente de dados.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 13/50
Exploraremos, na sequência, como atribuir valores às matrizes, tanto durante a
declaração quanto posteriormente, destacando a versatilidade dessa operação.
A iteração sobre os elementos das matrizes, por meio de loops aninhados, será
abordada em detalhes, proporcionando as habilidades necessárias para
percorrer e manipular dados em futuras aplicações.
Esta jornada tem como objetivo, portanto, capacitá-lo a dominar o uso de
matrizes em C. Ao compreender os conceitos fundamentais, a sintaxe e as
técnicas de atribuição e iteração, você estará preparado para enfrentar
desafios mais complexos e desenvolver soluções eficientes em seus projetos.
Definição, características e sintaxe de matrizes
Definição de matrizes
Uma matriz em linguagem C é uma estrutura de dados bidimensional que
organiza informações em linhas e colunas, criando uma grade.
Essencialmente, é um conjunto de elementos do mesmo tipo, permitindo o
acesso e manipulação eficiente desses dados. Ao declarar uma matriz,
especificamos o tipo de dado, seguido pelo nome e suas dimensões entre
colchetes. Por exemplo, para criar uma matriz de números inteiros com 3 linhas
e 4 colunas, utilizamos a seguinte declaração: int matriz[3][4];. Cada elemento
na matriz é acessado por meio de índices de linha e coluna, começando ambos
a partir de zero.
O esqueleto de uma matriz refere-se à sua estrutura básica e à forma como ela
é declarada em uma linguagem de programação. Observe, a seguir, o
esqueleto de uma matriz em C:
tipo_dado: indica o tipo de dado que será armazenado na matriz, como
int, float, char etc.
nome_matriz: é o nome que você atribui à matriz, permitindo referenciar e
manipular seus elementos.
tipo_dado
nome_matriz[linhas]
[colunas];
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 14/50
linhas e colunas: representam asdimensões da matriz, indicando
quantas linhas e colunas ela terá.
A visualização de uma matriz como uma tabela é uma analogia útil que facilita
a compreensão e manipulação dessas estruturas de dados. Essa
representação tabular ajuda a organizar e entender a relação espacial entre os
elementos.
Tabela 1 | Visualização de uma matriz. Fonte: elaborada pelo autor.
Como vemos na Tabela 1, cada número ocupa uma posição específica, sendo
identificado por um par de índices (linha, coluna). O número 5, por exemplo,
está na segunda linha e segunda coluna (índices 1, 1).
As vantagens de se visualizar uma matriz como tabela, deste modo, são:
Organização lógica: a visualização como tabela reflete a organização
lógica dos dados. Linhas e colunas fornecem uma estrutura clara,
permitindo que a mente humana compreenda e manipule as informações
de maneira ordenada.
Facilidade na leitura e escrita de código: ao programar, a visualização
como tabela facilita a leitura e escrita de código. Referenciar um elemento
específico se torna intuitivo, pois você utiliza os índices de linha e coluna.
Modelagem de dados estruturada: em muitos casos reais, dados são
naturalmente organizados em tabelas. Ao visualizar uma matriz como uma
tabela, podemos refletir essa estruturação, o que facilita a modelagem de
problemas complexos.
Int matrizTeste[3][3];
Índices 0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 15/50
Aplicações práticas: em domínios como processamento de imagens,
jogos e simulações, as matrizes são frequentemente utilizadas para
representar informações. Visualizá-las como tabelas torna mais fácil
conceber algoritmos e lógicas de programação relacionadas a esses
domínios.
Portanto, ao visualizar uma matriz como uma tabela, ganhamos uma
representação intuitiva e estruturada dos dados, facilitando a compreensão,
manipulação e implementação de algoritmos em programação.
Figura 1 | Criação de uma matriz. Fonte: elaborada pelo autor.
Na Figura 1, criamos uma matriz 2x3 de inteiros e atribuímos valores
diretamente durante a declaração. A primeira linha contém os valores 1, 2 e 3,
enquanto a segunda linha contém 4, 5 e 6.
Características e sintaxe de matrizes
As matrizes em C têm características distintas que moldam seu uso. Elas são
estruturas estáticas, o que significa que seu tamanho deve ser conhecido no
tempo de compilação. Seus índices começam a partir de zero, proporcionando
uma abordagem consistente e intuitiva. A sintaxe para acessar e manipular
elementos é direta, utilizando colchetes e índices. Já a atribuição de valores
pode ser feita durante a declaração ou posteriormente, e a iteração sobre os
elementos geralmente envolve o uso de loops aninhados.
Figura 2 | Atribuição de valores a elementos específicos. Fonte:
elaborada pelo autor.
Na Figura 2, declaramos uma matriz 3x2 e atribuímos valores a elementos
específicos após a declaração. A célula na primeira linha e primeira coluna
recebe 10, enquanto a célula na segunda linha e segunda coluna recebe 20.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 16/50
Este é um exemplo básico que destaca a flexibilidade na manipulação de
matrizes em C.
Siga em Frente...
Atribuição de valores e matrizes
A atribuição de valores a matrizes em C pode ocorrer durante a declaração ou
posteriormente, proporcionando flexibilidade na manipulação de dados.
Durante a declaração, os valores são especificados entre chaves e separados
por vírgulas, seguindo a ordem das linhas e colunas. Por exemplo, int matriz[2]
[3] = {{1, 2, 3}, {4, 5, 6}}; cria uma matriz 2x3 e atribui os valores diretamente.
Quando a atribuição ocorre após a declaração, cada elemento é acessado
individualmente por seus índices, permitindo uma personalização mais
detalhada.
Atribuição detalhada
Ao atribuir valores a matrizes após a declaração, a abordagem individualizada
é crucial. Consideremos, pois, uma matriz 3x3 e atribuamos valores utilizando
loops aninhados:
 Figura 3 | Preenchendo todos os elementos. Fonte: elaborada pelo autor.
Neste caso, a matriz é preenchida com valores resultantes da multiplicação dos
índices da linha e da coluna. Essa abordagem personalizada oferece controle
total sobre a atribuição, sendo especialmente útil em situações em que os
valores seguem um padrão ou lógica específica.
Atribuição de valores durante a declaração
A atribuição de valores durante a declaração é conveniente e eficaz. Ela ocorre
entre chaves e os valores são distribuídos automaticamente na ordem das
linhas e colunas. Consideremos um exemplo mais complexo:
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 17/50
Figura 4 | Atribuição na criação. Fonte: elaborada pelo autor.
Aqui, criamos uma matriz 2x4 de números de ponto flutuante e atribuímos
valores diretamente. A precisão decimal dos valores flutuantes é mantida,
demonstrando a versatilidade dessa técnica de atribuição.
Utilização da atribuição condicional
A atribuição de valores pode ser adaptada de acordo com condições
específicas. Por exemplo, podemos criar uma matriz 2x2 em que cada valor é
atribuído com base em uma condição:
Figura 5 | Atribuição com condicional. Fonte: elaborada pelo autor.
Essa abordagem condicional destaca a adaptabilidade da atribuição de valores,
possibilitando a criação de matrizes com base em lógicas específicas.
Em resumo, a atribuição de valores a matrizes em C é uma tarefa
personalizável. Seja durante a declaração, seguindo uma lógica condicional, ou
através de loops aninhados, essa flexibilidade permite a criação e manipulação
de matrizes de maneira adaptável e eficiente, atendendo às necessidades
específicas de cada situação.
Iteração sobre os elementos de matrizes
A atribuição de valores em matrizes em C é uma prática fundamental que
permite inicializar e atualizar dados de forma eficiente. Durante a declaração e
atribuição simultânea, podemos utilizar exemplos mais próximos da realidade.
Suponhamos que estamos lidando com uma matriz que armazena as vendas
diárias de produtos em uma loja ao longo de uma semana:
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 18/50
https://s3.amazonaws.com/platos-alexandria-prod/kroton/image/66198d9fea5e5e4fa5d1ba2f/67127b35-719e-4186-8f8b-e6ffe3bd8711/original
https://s3.amazonaws.com/platos-alexandria-prod/kroton/image/66198d9fea5e5e4fa5d1ba2f/67127b35-719e-4186-8f8b-e6ffe3bd8711/original
Figura 6 | Matriz de vendas. Fonte: elaborada pelo autor.
Neste exemplo, a matriz vendasDiarias armazena as vendas de três produtos
ao longo de sete dias. Cada linha representa um dia e cada coluna representa
um produto.
Características e detalhes da atribuição
É essencial entender que, ao atribuir valores em matrizes, estamos
organizando dados de forma estruturada. Podemos, posteriormente, acessar
essas informações para análises mais detalhadas, como calcular médias,
identificar tendências de vendas ou detectar variações significativas. A
flexibilidade na atribuição permite, assim, adaptar a matriz a diferentes
conjuntos de dados e contextos.
Figura 7 | Matriz de notas. Fonte: elaborada pelo autor.
A matriz da Figura 7 apresenta as notas de alunos em diferentes disciplinas.
Cada linha representa um aluno e cada coluna representa uma disciplina. Essa
matriz armazena informações e, além disso, fornece uma estrutura clara para
análises futuras, como identificar alunos com melhor desempenho em
disciplinas específicas.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 19/50
https://s3.amazonaws.com/platos-alexandria-prod/kroton/image/66198d9fea5e5e4fa5d1ba2f/98b04c82-e724-40eb-888a-348045f3a386/originalhttps://s3.amazonaws.com/platos-alexandria-prod/kroton/image/66198d9fea5e5e4fa5d1ba2f/98b04c82-e724-40eb-888a-348045f3a386/original
Iteração sobre os elementos de matrizes
Quando falamos de iteração sobre os elementos de uma matriz, estamos nos
referindo à capacidade de percorrer cada elemento individual dessa estrutura
de dados. Vamos, a título de ilustração, considerar uma matriz
temperaturaDiaria, que mostra a temperatura em uma cidade ao longo de um
mês, por 30 dias e durante 24 horas por dia.
Figura 8 | Criação de matriz grande. Fonte: elaborada pelo autor.
A iteração, aqui, seria o processo de percorrer cada célula desta matriz. Isso é
feito frequentemente usando loops aninhados, em que um loop controla o
índice das linhas e o outro o índice das colunas. Dessa forma, conseguimos
acessar e manipular cada valor individualmente.
Podemos, por exemplo, preencher essa matriz com valores simulados
utilizando um loop duplo:
Figura 9 | Preenchendo matriz com função. Fonte: elaborada pelo autor.
Neste trecho de código, um loop percorre os dias e outro as horas de um dia.
Dentro dele, a função gerarTemperaturaSimulada() (que seria uma função
hipotética) pode ser usada para gerar valores simulados de temperatura. Isso é
um exemplo prático de como a iteração nos permite preencher e manipular
grandes conjuntos de dados, como registros meteorológicos em uma matriz.
Conclusão
Em conclusão, a compreensão dos conceitos fundamentais relacionados a
matrizes, sua sintaxe, atribuição de valores e iteração sobre seus elementos é
essencial para qualquer programador. As matrizes, ao fornecerem uma
estrutura bidimensional, oferecem uma maneira poderosa e organizada de lidar
com grandes conjuntos de dados. Suas características estáticas, em que o
tamanho é conhecido no tempo de compilação, e a clareza na sintaxe tornam
as matrizes uma escolha eficiente para diversas aplicações na programação.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 20/50
https://s3.amazonaws.com/platos-alexandria-prod/kroton/image/66198d9fea5e5e4fa5d1ba2f/f6b47c45-82c3-4b96-8fc2-646e3722298f/original
https://s3.amazonaws.com/platos-alexandria-prod/kroton/image/66198d9fea5e5e4fa5d1ba2f/f6b47c45-82c3-4b96-8fc2-646e3722298f/original
A atribuição de valores em matrizes, por seu turno, permite não apenas
inicializar dados, como também adaptar dinamicamente essas estruturas
conforme necessário. Esse processo é crucial para representar informações do
mundo real de maneira organizada, como dados meteorológicos, notas de
alunos ou vendas diárias. A flexibilidade na atribuição facilita a manipulação e
análise desses dados, permitindo que programadores extraiam informações
valiosas.
Já a iteração sobre os elementos de matrizes desempenha um papel vital ao
possibilitar o acesso e a manipulação de cada célula individualmente. Essa
funcionalidade é especialmente importante quando lidamos com grandes
volumes de dados, como registros de temperatura, ocupação de salas ou
qualquer conjunto de informações distribuído em duas dimensões. A utilização
de loops aninhados para percorrer esses elementos proporciona uma
abordagem estruturada e efetiva.
No universo da programação, a importância das matrizes é inquestionável. Elas
são a espinha dorsal de muitos algoritmos e estruturas de dados, contribuindo
para a resolução de problemas em diversas áreas, desde processamento de
imagens até simulações financeiras. A capacidade de representar e manipular
dados em matrizes é uma habilidade elementar para programadores,
permitindo a criação de soluções robustas e eficazes. Em resumo, as matrizes
são ferramentas versáteis e capitais que elevam o poder e a eficiência da
programação em uma variedade de contextos. Dominar seu uso é, portanto,
um investimento para qualquer desenvolvedor.
Vamos Exercitar?
Retomando a situação apresentada no início da aula, na qual você recebeu um
desafio de realizar um exercício de programação, no qual você deve criar um
programa na linguagem de programação C que lide com duas matrizes de
ordem 4x4. Portanto, você deverá acompanhar os seguintes passos:
1. Inicializar uma matriz de 4x4 e fazer a atribuição de valores aleatórios a
ela.
2. Criar uma segunda matriz vazia do mesmo tipo e tamanho.
3. Realizar o cálculo dos elementos da primeira matriz armazenando o
resultado na segunda matriz.
4. No final do programa, exibir o conteúdo de todos os elementos das duas
matrizes em tela.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 21/50
Vamos à resolução?
Na Figura 10, apresentamos a resolução do algoritmo codificado em C em uma
ferramenta de edição de código-fonte:
Figura 10 | Resolução do algoritmo codificado em C. Fonte: elaborada pelo
autor.
A saída do programa e a apresentação dos resultados pode ser observada a
seguir:
Figura 11 | Saída do programa e resultados. Fonte: elaborada pelo autor.
Neste exercício, trabalhamos com a manipulação de matrizes em linguagem C.
Inicializamos a primeira matriz, realizamos um cálculo simples (multiplicação
dos elementos) e armazenamos o resultado na segunda matriz. Ao final,
exibimos ambas Os pontos principais abordados foram a declaração e
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 22/50
inicialização de matrizes, iteração sobre os elementos das matrizes e
realização de cálculos com base nesses elementos.
Saiba Mais
Para saber mais sobre matrizes (vetores multidimensionais), consulte o
Capítulo 10, Seção 10.7, do livro Elementos de programação em C, de
Pinheiro, disponível no repositório da Biblioteca virtual.
PINHEIRO, F. de A. C. Capítulo 10. In: Elementos de programação em C.
Porto Alegre: Bookman, 2012, p. 245-252. 
Referências Bibliográficas
CORMEN, T. et al. Algoritmos: teoria e prática. 3. ed. Rio de Janeiro: LTC,
2022.
MANZANO, J. A. N. G.; OLIVEIRA, J. F. de. Estudo dirigido de algoritmos.
São Paulo: Érica, 2000.
MENÉNDEZ, A. Simplificando algoritmos. São Paulo: LTC, 2023.
SILVA, F. S. C. da; FINGER, M.; MELO, A. C. V. Lógica para computação. 2.
ed. São Paulo: Cengage Learning, 2017.
ZIVIANI, N. Projeto de algoritmos com implementações em Pascal e C. 3.
ed. São Paulo: Cengage Learning, 2011.
Aula 3
INTRODUÇÃO A FUNÇÃO E
RECURSIVIDADE
Introdução a função e recursividade
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 23/50
https://integrada.minhabiblioteca.com.br/reader/books/9788540702035/pageid/262
https://integrada.minhabiblioteca.com.br/reader/books/9788540702035/pageid/262
https://integrada.minhabiblioteca.com.br/reader/books/9788540702035/pageid/262
https://integrada.minhabiblioteca.com.br/reader/books/9788540702035/pageid/262
Olá, estudante! Nesta videoaula, vamos explorar a declaração de funções,
assim como sua definição e a caracterização da recursividade. Iniciaremos
nossa aula destacando a importância de estruturar o código por meio de
funções bem definidas. Analisaremos, posteriormente, a sintaxe crucial para
declarar funções em diferentes contextos, visando fornecer uma compreensão
sólida dessas estruturas fundamentais em programação.
Ao adentrarmos na definição e caracterização de recursividade, abordaremos o
conceito de uma função chamando a si mesma, aspecto poderoso da
programação que oferece soluções sofisticadas para problemas complexos.
Ilustraremos a recursividade com exemplos práticos, mostrando como ela pode
simplificar tarefas e tornar o código mais legível.
Aprofundaremos nosso entendimento ao discutir situações específicas em que
a recursividade é especialmente apropriada. Analisaremos problemas que
naturalmente se prestam a soluções recursivas, demonstrando como essa
abordagem pode simplificar a implementação e trazer uma eficiência notável
emdeterminados contextos.
Clique aqui para acessar os slides da sua videoaula.
Bons estudos!
Ponto de Partida
Olá, caro estudante! Seja bem-vindo à esta aula sobre declaração de funções e
recursividade. A declaração é um aspecto essencial para estruturar códigos de
forma modular e eficiente, enquanto a recursividade permite soluções
sofisticados para problemas complexos.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 24/50
https://cm-kls-content.s3.amazonaws.com/202401/ALEXANDRIA/ALGORITMOS_E_LOGICA_DE_PROGRAMACAO/PPT/u4a3_algo_log_pro.pdf
Nesse percurso de aprendizado, utilizaremos exemplos práticos para ilustrar
como uma função pode chamar a si mesma, explorando as possibilidades que
essa abordagem oferece na simplificação de tarefas e melhoria da legibilidade
do código.
Para ilustrar a aprendizagem desta aula, você será desafiado a criar um
algoritmo para apresentar o "n-ésimo" termo da sequência de Pell. A sequência
de Pell é semelhante à sequência de Fibonacci, mas cada termo é o dobro do
termo anterior mais o termo antes do anterior. Ou seja, P(n) = 2*P(n-1) + P(n-
2), com P(0) = 0 e P(1) = 1.
Aproveite a aula e vamos, juntos, construir este conhecimento!
Vamos Começar!
No vasto universo da programação, o entendimento profundo e preciso de
temas fundamentais é a chave para a construção de códigos eficientes e
soluções sofisticadas. Nossa jornada educativa nos levará por três pilares
capitais: a declaração de funções, a definição e caracterização da
recursividade, e a identificação de situações ideais para a aplicação desse
conceito. Esses tópicos são elementos básicos para qualquer programador e
representam o alicerce para o desenvolvimento de algoritmos robustos e a
resolução de desafios complexos.
A declaração de funções, pois, emerge como um ponto-chave, proporcionando
a habilidade de modularizar e estruturar código de maneira organizada. Essa
capacidade não apenas facilita a reutilização do código, tornando-o mais fácil
de manter, mas também contribui para uma abordagem mais clara e efetiva no
desenvolvimento de programas. Entender a sintaxe e a importância da
declaração de funções é crucial para criar códigos legíveis e de fácil
manutenção.
Na sequência, exploraremos a intrigante dimensão da recursividade, em que
uma função pode chamar a si mesma. Nesse contexto, analisaremos a
definição precisa da recursividade, além de destacarmos as características
únicas desse método de resolução de problemas. A capacidade de pensar de
maneira recursiva é uma habilidade valiosa que, quando aplicada
corretamente, oferece soluções mais concisas e elegantes.
Entendendo que a recursividade pode não ser apropriada para todos os
cenários, adentraremos nas situações específicas em que esse conceito se
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 25/50
destaca, fornecendo uma visão prática e estratégica sobre como utilizar esse
poderoso recurso. Isso porque a seleção criteriosa de situações para aplicação
de recursividade é determinante para otimizar o desempenho e a eficiência do
código.
Declaração de funções
A declaração de funções é um pilar essencial na construção de códigos
modulares e eficientes em programação. Através dela, fragmentamos nosso
código em unidades lógicas, permitindo a reutilização, manutenção facilitada e
uma abordagem mais organizada.
Uma função é um bloco de código designado para realizar uma tarefa
específica, isolando e estruturando uma parte do programa. A distinção entre
procedimentos e funções reside no retorno de valores. Procedimentos realizam
tarefas sem gerar um resultado específico, enquanto funções retornam um
valor após a execução. Por exemplo, um procedimento pode exibir uma
mensagem na tela, já uma função pode calcular uma média e retornar o
resultado.
Uma função é como uma pequena fábrica que recebe entradas, executa
operações e produz saídas. Sua estrutura básica (esqueleto) inclui um nome,
parâmetros, corpo e um valor de retorno opcional. Parâmetros são as entradas
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 26/50
fornecidas à função, o corpo contém as instruções executadas e o valor de
retorno é o resultado produzido pela função. Vejamos:
Tipo de retorno (tipo_retorno): indica o tipo de dado que a função
retorna. Pode ser qualquer tipo válido em C (int, float, char etc.). Se a
função não retornar nenhum valor, utiliza-se void.
Nome da função (nome_da_funcao): é o identificador único que usamos
para chamar a função. Deve seguir as regras de nomenclatura da
linguagem.
Parâmetros (tipo_parametro parametro): são variáveis que a função
aceita como entrada. Podem ser de diferentes tipos e podem existir zero
ou mais parâmetros. Cada parâmetro é composto por um tipo e um
identificador.
Corpo da função ({...}): contém as instruções e operações realizadas
pela função. É dentro do corpo que a lógica da função é implementada.
Valor de retorno (return valor_de_retorno): se a função possui um tipo
de retorno diferente de void, é necessário incluir uma instrução return para
indicar o valor que a função retorna. Esta parte é opcional em funções do
tipo void.
Exemplifiquemos, assim, a declaração de funções em C. Considere uma
função simples que calcula a soma de dois números:
tipo_retorno nome_da_funcao(tipo_parametro1
parametro1, tipo_parametro2 parametro2, ...) {
 // Corpo da função
 // Instruções e operações realizadas pela função
 // Pode incluir declarações de variáveis locais
 
 // Retorno, se a função tem um tipo de retorno
diferente de "void"
 return valor_de_retorno;
}
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 27/50
Figura 1 | Exemplo de função. Fonte: elaborada pelo autor.
Neste exemplo, temos uma função chamada somar que aceita dois inteiros
como parâmetros, realiza a adição e retorna o resultado. Este é um esqueleto
básico que pode ser adaptado para diferentes tipos de funções, dependendo
da tarefa que a função deve executar.
Aqui, resultado conterá o valor 8, resultado da chamada da função somar.
A declaração de funções é, portanto, vital para a estruturação do código,
tornando-o mais compreensível e fácil de manter. Ela não é apenas uma
técnica de programação; é uma filosofia que promove a eficiência, clareza e
escalabilidade nos projetos.
Ao criar funções, praticamos conceitos de modularização e abstração.
Modularização envolve dividir um programa em módulos independentes,
enquanto abstração oculta os detalhes internos de uma função, permitindo que
ela seja usada sem a necessidade de entender sua implementação interna.
Funções bem definidas facilitam a colaboração em equipes de
desenvolvimento e promovem a reutilização de código, um princípio
fundamental na engenharia de software.
Definição e caracterização de recursividade
A recursividade é um conceito fundamental na programação, definindo a
capacidade de uma função chamar a si mesma durante sua execução. Esse
método oferece uma abordagem sofisticada e eficiente para resolver problemas
complexos ao dividi-lo em instâncias menores. A caracterização da
recursividade envolve uma função que se decompõe em casos base, nos quais
a solução é direta, e em casos recursivos, em que a função se chama com
entradas reduzidas.
int resultado =
somar(5, 3);
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 28/50
Fora da programação, a recursividade é uma característica encontrada em
muitos campos, como a Matemática e a Linguística, nos quais padrões
repetitivos são identificados.
Consideremos um exemplo simples e prático de recursividade fora do contexto
da programação. Imagine que vocêestá empilhando caixas em uma sala.
Caso base: se você tiver apenas uma caixa para empilhar, você a coloca
no chão. Isso representa o caso base, pois não há necessidade de
empilhar mais caixas.
Caso recursivo: se tiver duas ou mais caixas, o processo se torna
recursivo. Você coloca a primeira caixa no chão e, em seguida, empilha as
outras caixas, uma sobre a outra. Para empilhar as demais caixas, você
segue o mesmo processo, tratando cada pilha de caixas como uma única
caixa quando chegar a hora de empilhar.
Repetição do processo: se houver subpilhas de caixas dentro das pilhas
maiores, você repete o mesmo processo. Cada vez que encontra uma
subpilha, você a trata como uma única caixa e a empilha juntamente com
as outras caixas.
Essa abordagem reflete um padrão recursivo em que você resolve o problema
(empilhar as caixas) tratando uma instância menor do mesmo problema
(empilhar as subpilhas) até atingir um caso base (uma única caixa). Tal
analogia demonstra como a recursividade pode ser intuitiva e aplicada em
situações do cotidiano, ajudando a resolver tarefas complexas dividindo-as em
tarefas menores e mais gerenciáveis.
Na programação, especificamente, a recursividade é uma ferramenta poderosa
para solucionar problemas que podem ser decompostos em subproblemas
idênticos ou semelhantes. Ela reflete a capacidade de uma função se
autorreferenciar, promovendo um recurso mais conciso e claro para certos tipos
de problemas. Suas características fundamentais são:
Caso base: toda função recursiva deve ter um caso base, que representa
a condição de parada. Quando a função atinge esse caso base, ela para
de se chamar recursivamente e retorna um resultado direto.
Chamada recursiva: a função chama a si mesma com argumentos
modificados. Isso permite que a função resolva instâncias menores do
problema, avançando em direção ao caso base.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 29/50
Um exemplo clássico é o cálculo do fatorial de um número. A função fatorial
pode ser definida recursivamente da seguinte forma em C:
Figura 2 | Cálculo fatorial. Fonte: elaborada pelo autor.
Na Figura 2, o caso base é quando n é 0 ou 1, retornando 1. Para valores
maiores, a função chama a si mesma com n-1, multiplicando o resultado pelo
valor atual de n.
A recursividade é particularmente útil em problemas que podem ser
decompostos em subproblemas idênticos ou semelhantes. No entanto, seu uso
requer atenção para evitar loops infinitos e garantir que cada chamada
recursiva aproxime a função do caso base.
Compreender a definição e caracterização da recursividade é crucial para
expandir a caixa de ferramentas do programador. Saber quando e como aplicá-
la pode simplificar significativamente a resolução de questões complexas,
tornando o código mais sofisticado e modular.
Siga em Frente...
Situações de programação adequadas para a
recursividade
A recursividade é uma ferramenta poderosa, mas é primordial aplicá-la nas
situações corretas para garantir eficiência e clareza no código. A seguir,
exploraremos em que casos a recursividade é adequada, porque é benéfica e
como pode ser aplicada tanto dentro quanto fora do campo da programação.
1. Estruturas de dados recursivas: a recursividade é frequentemente ideal
para lidar com estruturas de dados recursivas, como árvores e listas
encadeadas. Por exemplo, ao percorrer uma árvore binária, uma função
recursiva pode visitar seus nós de maneira eficiente, lidando com cada
subárvore como uma instância menor do mesmo problema.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 30/50
2. Algoritmos dividir para conquistar: problemas que seguem a estratégia
“dividir para conquistar” são propensos à aplicação de recursividade.
Algoritmos como o merge sort e o quicksort são exemplos claros em que a
divisão do problema em subproblemas menores facilita a solução global.
3. Problemas que exibem autossimilaridade: situações em que o
problema pode ser decomposto em instâncias menores semelhantes ao
problema original são ideais para recursividade. Por exemplo, o cálculo do
fatorial e a sequência de Fibonacci exibem essa autossimilaridade.
4. Processamento de estruturas de dados aninhadas: a manipulação de
estruturas de dados aninhadas, como listas dentro de listas, pode ser
simplificada usando recursividade. A função pode tratar cada nível da
estrutura como uma instância menor, tornando o código mais limpo e
modular.
5. Travessia de grafos: em algoritmos de travessia de grafos, como a busca
em profundidade (DFS) e a busca em largura (BFS), a recursividade pode
ser empregada para explorar os vértices de maneira eficiente, permitindo
que cada um seja tratado como um subproblema.
Além da programação, a recursividade pode ser aplicada em problemas
matemáticos, como cálculos de sequências recursivas e problemas de divisão
e conquista. Em tarefas cotidianas, como organizar objetos ou resolver quebra-
cabeças, ela também pode ser intuitiva.
Embora seja poderosa, a recursividade não é ideal para todos os programas.
Em casos de eficiência, pode haver uma sobrecarga de chamadas de função,
resultando em um consumo excessivo de memória. Além disso, em problemas
que não exibem uma estrutura recursiva clara, a aplicação de recursividade
pode complicar desnecessariamente o código.
Figura 3 | Soma recursiva. Fonte: elaborada pelo autor.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 31/50
Neste exemplo da Figura 3, a função “somaRecursiva” calcula a soma dos
primeiros n números naturais de maneira recursiva.
Em resumo, a recursividade é adequada em situações em que a estrutura do
problema favorece uma abordagem dividida e conquistada, e sua aplicação
deve ser considerada caso a caso.
Conclusão
Ao mergulharmos nos fundamentos da programação, desde a declaração de
funções até a compreensão da recursividade e suas aplicações, ampliamos
nossa visão sobre como estruturar e resolver problemas no mundo da
codificação.
A declaração de funções se revela como uma ferramenta poderosa para a
modularização e organização de códigos. Ao entender a sintaxe e importância
dessa estrutura, programadores podem criar sistemas mais legíveis,
reutilizáveis e eficientes.
A recursividade, por sua vez, destaca-se como uma abordagem sofisticada
para lidar com problemas que podem ser divididos em subproblemas idênticos
ou semelhantes. Seu uso proporciona soluções concisas e claras, mas requer
cautela para evitar armadilhas como loops infinitos. Ela não se limita à
programação, manifestando-se em fenômenos naturais e padrões
matemáticos. Contudo, seu verdadeiro poder é desbloqueado na programação,
na qual a capacidade de criar funções que chamam a si mesmas permite
maneiras eficazes de solucionar questões.
Embora a recursividade seja uma ferramenta poderosa, sua aplicação não é
ideal para todos os programas. Em certos contextos, a complexidade e os
custos de desempenho associados podem superar seus benefícios. A escolha
da recursividade deve ser guiada pela natureza do problema a ser resolvido e
pelas características do ambiente em que o código será executado.
As situações propícias para a aplicação da recursividade incluem problemas
que seguem uma estrutura hierárquica ou divisível. Algoritmos de ordenação,
como o merge sort, ou a exploração de estruturas de dados aninhadas são
exemplos em que a recursividade se destaca, simplificando a resolução de
subproblemas.
Ao dominar a declaração de funções, entender a natureza da recursividade e
identificar situações adequadas para sua aplicação, os programadores
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 32/50
capacitam-se para construir códigos mais robustos e soluções maispoderosas.
Esses conceitos são a espinha dorsal de qualquer desenvolvedor, moldando
não apenas a forma como escrevemos códigos, mas também a maneira como
abordamos e resolvemos problemas. Ao explorar esses pilares, elevamos
nossa habilidade de criar, inovar e contribuir para o vasto universo da
programação.
Vamos Exercitar?
Retomando a situação apresentada no início da aula, onde você deverá criar
uma função recursiva para calcular o “n-ésimo” termo da sequência de Pell. A
sequência de Pell é semelhante à sequência de Fibonacci, mas cada termo é o
dobro do termo anterior mais o termo antes do anterior. Ou seja, P(n) = 2*P(n-
1) + P(n-2), com P(0) = 0 e P(1) = 1.
Vamos à resolução?
Figura 4 | Sequência de Pell. Fonte: elaborada pelo autor.
Neste código, a função sequenciaPell() calcula o n-ésimo termo da sequência
de Pell de forma recursiva, utilizando os casos base P(0) = 0 e P(1) = 1. O
exemplo no main mostra como utilizar a função para obter o 5-ésimo termo,
mas é possível substituir o valor de n conforme necessário.
Saiba Mais
Para saber mais sobre funções recursivas, consulte o Capítulo 9, Seção 9.7, do
livro Elementos de programação em C, de Pinheiro, disponível no repositório
da Biblioteca virtual.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 33/50
PINHEIRO, F. de A. C. Capítulo 9. In: Elementos de programação em C.
Porto Alegre: Bookman, 2012, p. 245-252. 
Referências Bibliográficas
CORMEN, T. et al. Algoritmos: teoria e prática. 3. ed. Rio de Janeiro: LTC,
2022.
MANZANO, J. A. N. G.; OLIVEIRA, J. F. de. Estudo dirigido de algoritmos.
São Paulo: Érica, 2000.
MENÉNDEZ, A. Simplificando algoritmos. São Paulo: LTC, 2023.
SILVA, F. S. C. da; FINGER, M.; MELO, A. C. V. Lógica para computação. 2.
ed. São Paulo: Cengage Learning, 2017.
ZIVIANI, N. Projeto de algoritmos com implementações em Pascal e C. 3.
ed. São Paulo: Cengage Learning, 2011.
Aula 4
REGISTROS E ARQUIVOS
Registros e arquivos
Olá, estudante! Nesta videoaula vamos abordar os processos de abertura e
fechamento de arquivos, desvendando as práticas recomendadas para garantir
uma interação segura e eficiente com dados armazenados. Nossa jornada de
aprendizado se concentrará na declaração de registros e no acesso a esses
dados, proporcionando uma visão aprofundada sobre a estrutura e organização
de informações em arquivos. Passaremos por cada etapa, desde a definição
inicial até as nuances da sintaxe, assegurando que você compreenda
completamente o manejo responsável desses componentes essenciais na
programação.
Na sequência, nos dedicaremos ao processo de escrita e leitura em arquivos,
explorando métodos eficazes para armazenar e recuperar dados. Essas
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 34/50
https://integrada.minhabiblioteca.com.br/reader/books/9788540702035/pageid/221
https://integrada.minhabiblioteca.com.br/reader/books/9788540702035/pageid/221
https://integrada.minhabiblioteca.com.br/reader/books/9788540702035/pageid/221
https://integrada.minhabiblioteca.com.br/reader/books/9788540702035/pageid/221
habilidades são cruciais para o desenvolvimento de aplicações robustas e para
garantir a integridade e segurança dos dados ao longo do tempo.
Clique aqui para acessar os slides da sua videoaula.
Bons estudos!
Ponto de Partida
Olá, caro estudante! Seja bem-vindo à esta aula sobre os aspectos
fundamentais da manipulação de arquivos em programação. Vamos nos
concentrar em desvendar os processos de abertura e fechamento de arquivos,
fornecendo insights práticos para garantir que você esteja equipado para lidar
eficientemente com dados armazenados. Nesse processo, exploraremos
teoricamente a declaração de registros para melhor compreender a estrutura e
organização dos dados. Além disso, abordaremos o acesso a esses registros.
Para ilustrar a aprendizagem desta aula, você foi designado para criar um
programa em C que gerencie informações de estudantes. Cada estudante
possui os seguintes dados: nome, idade e média. O programa deve permitir ao
usuário inserir informações de vários estudantes e, em seguida, salvar essas
informações em um arquivo chamado "estudantes.txt". Além disso, o programa
deve possibilitar a leitura dessas informações a partir do arquivo.
Ao final desta aula, você não apenas terá conhecimentos teóricos na área,
como também contará com as ferramentas necessárias para aplicá-los no
mundo real. Bons estudos! 
Vamos Começar!
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 35/50
https://cm-kls-content.s3.amazonaws.com/202401/ALEXANDRIA/ALGORITMOS_E_LOGICA_DE_PROGRAMACAO/PPT/u4a4_algo_log_pro.pdf
A manipulação de arquivos é essencial no desenvolvimento de programas e
sistemas de software, proporcionando a capacidade de armazenar e recuperar
dados de forma persistente. Abrir e fechar arquivos é uma operação capital
nesse contexto, permitindo que o programa estabeleça uma conexão com o
sistema de arquivos, aloque recursos necessários e libere esses recursos
quando a operação for concluída. Esse processo é importante para garantir a
integridade dos dados e o bom funcionamento do programa.
A declaração e o acesso aos registros, do mesmo modo, são conceitos
primordiais quando se trata de trabalhar com arquivos. Registros são estruturas
de dados que armazenam informações relacionadas em uma única unidade. A
declaração adequada desses registros é crucial para garantir a coerência e a
organização dos dados. Além disso, o acesso eficiente a esses registros é vital
para a leitura e gravação efetivas em arquivos. Programadores precisam
entender como navegar e manipular registros para extrair informações ou
modificar dados conforme necessário.
Escrever e ler em arquivos, por seu turno, são operações fundamentais para a
interação eficaz entre um programa e o sistema de armazenamento. Escrever
em arquivos envolve a transferência de dados do programa para o arquivo,
garantindo que as informações sejam armazenadas de maneira correta e
persistente. Já a leitura em arquivos envolve a extração de dados do arquivo
para o programa, possibilitando a utilização dessas informações dentro da
lógica do software.
Abrir e fechar arquivos, declarar e acessar registros, assim como escrever e ler
em arquivos são, pois, elementos basilares na criação de softwares que
envolvem a manipulação de dados persistentes. Uma compreensão sólida
desses conceitos é indispensável para garantir a eficiência, segurança e
integridade dos sistemas, permitindo que os programadores construam
aplicações que interajam eficazmente com eles.
Declaração e acesso aos registros
Na linguagem de programação C, a declaração e o acesso aos registros
desempenham um papel importante na organização e manipulação de dados
estruturados.
Um registro é uma estrutura de dados que permite agrupar diferentes tipos de
variáveis sob um único nome. O esqueleto de um registro em C consiste na
declaração da estrutura usando a palavra-chave struct, seguida pelo nome do
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 36/50
registro e um conjunto de membros (variáveis) entre chaves {}. Cada membro é
definido com um tipo de dado específico e um identificador associado. A
estrutura básica segue o formato:
struct: palavra-chave que indica que estamos declarando uma estrutura
(registro).
NomeDoRegistro: identificador que nomeia a estrutura, permitindo a
criação de instâncias dessa estrutura.
TipoDeDado1, TipoDeDado2, ..., TipoDeDadoN: diferentes tipos de
dados que podem incluir inteiros, caracteres, ponto flutuante, entre outros.
Membro1, Membro2, ..., MembroN: identificadores associados a cada
tipo de dado, representando os campos individuais do registro.
O esqueleto fornecea estrutura básica que define como os dados são
organizados dentro do registro. Essa estrutura é posteriormente utilizada para
criar instâncias do registro e acessar seus membros para armazenar e
manipular dados de maneira organizada.
struct NomeDoRegistro
{
 TipoDeDado1
Membro1;
 TipoDeDado2
Membro2;
 // ... outros membros
...
 TipoDeDadoN
MembroN;
};
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 37/50
Figura 1 | Declaração de registro. Fonte:
elaborada pelo autor.
No exemplo da Figura 1, declaramos um registro chamado "Pessoa" que
contém três variáveis: um array de caracteres para o nome, um inteiro para a
idade e um número em ponto flutuante para a altura.
O acesso aos registros é feito utilizando o operador ponto (.) para cada
variável. Para atribuir valores a um registro "Pessoa", faríamos algo como:
Figura 2 | Acesso aos registros. Fonte:
elaborada pelo autor.
 Neste trecho de código, criamos uma instância da estrutura "Pessoa" chamada
"pessoa1" e atribuímos valores às suas variáveis individuais.
É importante ressaltar que os registros permitem agrupar informações
relacionadas de forma organizada, facilitando a manutenção e compreensão do
código. Além disso, o acesso a eles possibilita a manipulação eficiente dos
dados armazenados, tornando-se uma ferramenta valiosa para estruturar
informações em programas escritos em C.
Siga em Frente...
Uso de typedef
O uso de typedef pode simplificar a criação de instâncias de registros,
fornecendo um nome mais conciso para o tipo.
Figura 3 | typedef. Fonte: elaborada pelo autor.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 38/50
Neste exemplo, você pode usar “Carro” diretamente como um tipo, sem a
necessidade de escrever struct toda vez que desejar criar uma instância.
Abrindo e fechando arquivos
A manipulação de arquivos é uma operação fundamental em programação que
permite que os programas armazenem e recuperem dados de maneira
persistente. Em C, a abertura e o fechamento de arquivos são realizados por
meio de funções específicas. A função fopen() é utilizada para abrir um arquivo,
enquanto fclose() é usada para fechá-lo. A função fopen() recebe dois
parâmetros: o nome do arquivo e o modo de operação (por exemplo, “r” para
leitura ou “w” para escrita).
Figura 4 | Declarando arquivo. Fonte: elaborada pelo autor.
No exemplo anterior, um ponteiro de arquivo chamado “arquivo” é declarado e,
em seguida, a função fopen() é utilizada para abrir o arquivo “exemplo.txt” para
leitura. O modo “r” indica que estamos abrindo o arquivo em modo de leitura.
Após a conclusão das operações de leitura ou escrita, é essencial fechar o
arquivo usando a função fclose() para liberar os recursos associados. O
exemplo a seguir ilustra o fechamento de um arquivo:
Figura 5 | Fechando o arquivo. Fonte: elaborada pelo autor.
Ao fechar o arquivo, o sistema operacional libera quaisquer recursos alocados
para a manipulação do arquivo, garantindo a integridade dos dados e evitando
possíveis problemas de acesso concorrente.
Vale ressaltar que, ao abrir um arquivo, é preciso verificar se a operação foi
bem-sucedida, pois falhas na abertura podem ocorrer por diversos motivos,
como inexistência do arquivo ou permissões de acesso inadequadas. O
ponteiro de arquivo retornado pela função fopen() deve ser verificado para
garantir que não seja nulo, indicando que a operação foi bem-sucedida.
Em resumo, a abertura e o fechamento de arquivos em C são operações
cruciais para garantir a persistência de dados. O uso adequado dessas
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 39/50
funções, juntamente com verificações apropriadas, contribui para a robustez e
confiabilidade dos programas.
Escrevendo e lendo em arquivos
Escrever e ler em arquivos em C é uma parte essencial da programação,
permitindo que os programas armazenem informações persistentes e
recuperem dados quando necessário. A função fprintf() é usada para escrever
dados em um arquivo, enquanto fscanf() é empregada para ler dados de um
arquivo.
A manipulação de arquivos em C é realizada por meio de modos que indicam a
operação que será executada no arquivo. O quadro a seguir mostra alguns dos
modos mais comuns de abertura de arquivos em C:
Quadro 1 | Modos de abertura de arquivos. Fonte: elaborado pelo autor.
Estes são apenas alguns dos modos mais comuns, mas há outros menos
utilizados ou específicos para operações binárias ("rb", "wb", "ab", "r+b", "w+b",
"a+b", etc.). Ao utilizá-los, é fundamental realizar verificações adequadas para
garantir que as operações de abertura sejam bem-sucedidas antes de
prosseguir com a leitura ou escrita.
Para escrever em um arquivo, primeiramente, é preciso abrir o arquivo em
modo de escrita. A Figura 6 ilustra como escrever dados simples em um
arquivo:
Modo Descrição
“r” Abre o arquivo para leitura. O arquivo deve existir; caso
contrário, a abertura falhará.
“w”
Abre o arquivo para escrita. Se o arquivo já existir, seu
conteúdo é truncado; se não existir, um novo arquivo é
criado.
“a”
Abre o arquivo para escrita no modo anexo (append). Os
dados são adicionados ao final do arquivo se ele existir, ou
um novo arquivo é criado se não existir.
“r+” Abre o arquivo para leitura e escrita. O arquivo deve existir.
“w+”
Abre o arquivo para leitura e escrita. Se o arquivo já existir,
seu conteúdo é truncado; se não existir, um novo arquivo é
criado.
“a+”
Abre o arquivo para leitura e escrita no modo anexo
(append). Os dados são adicionados ao final do arquivo se
ele existir, ou um novo arquivo é criado se não existir.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 40/50
Figura 6 | Escrevendo. Fonte: elaborada pelo autor.
Neste exemplo, a função fprintf() é usada para escrever uma string e um
número no arquivo "exemplo.txt". O caractere de nova linha (\n) é usado para
separar as linhas no arquivo.
Para ler dados de um arquivo, é necessário abri-lo em modo de leitura. Na
Figura 7, observamos como ler dados previamente escritos no arquivo:
Figura 7 | Lendo. Fonte: elaborada pelo autor.
Neste caso, a função fgets() é utilizada para ler uma linha por vez do arquivo. O
conteúdo lido é então exibido no console usando printf().
Ao lidar com leitura e escrita de dados em arquivos, é crucial realizar
verificações para garantir que as operações ocorram sem problemas.
Certifique-se de que o arquivo foi aberto corretamente e que as operações de
leitura ou escrita foram concluídas com sucesso.
Para escrita e leitura de tipos de dados complexos, como estruturas, as
funções fwrite() e fread() podem ser utilizadas. Elas são particularmente úteis
para armazenar e recuperar blocos de dados binários.
Conclusão
O entendimento dos conceitos relacionados à declaração e acesso aos
registros, abertura e fechamento de arquivos, e escrita e leitura em arquivos é
essencial para o desenvolvimento de programas robustos e eficientes. A
capacidade de organizar dados em registros, assim, oferece uma estrutura
lógica para representar informações complexas de maneira clara e ordenada,
facilitando a manipulação e análise dos dados. Essa qualidade é
particularmente útil ao modelar objetos palpáveis, como registros de
funcionários, informações de clientes ou dados de transações.
Já a operação adequada de abertura e fechamento de arquivos é determinante
para garantir a persistência de dados. Abrir um arquivo permite que o programa
estabeleça uma conexão com o sistema de arquivos, aloque recursos
necessários e inicie operações de leitura ou escrita. Por outro lado, fechar o
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html41/50
arquivo é primordial para liberar recursos e evitar possíveis problemas de
integridade dos dados. Essas operações são fundamentais em cenários reais,
nos quais a persistência e a recuperação de informações são indispensáveis,
como em sistemas de gerenciamento de arquivos ou bancos de dados.
A habilidade de escrever e ler em arquivos, por seu turno, permite a interação
dinâmica e contínua entre um programa e o sistema de armazenamento. Ao
escrever em arquivos, os programas podem armazenar dados relevantes para
uso futuro, enquanto a leitura de arquivos possibilita a recuperação dessas
informações quando necessário. Essa funcionalidade é vital em muitas
aplicações cotidianas, como sistemas de registro de logs, armazenamento de
configurações de aplicativos e processamento de grandes conjuntos de dados
armazenados externamente.
Ao aplicar esses conceitos, os desenvolvedores podem criar softwares mais
flexíveis e adaptáveis às necessidades do mundo real. A manipulação eficaz de
registros, combinada com operações adequadas de abertura, fechamento,
escrita e leitura de arquivos, resulta em programas mais eficientes, seguros e
capazes de lidar com uma variedade de cenários práticos. Essas práticas são
capitais para o desenvolvimento de sistemas que lidam com dados
persistentes, garantindo uma interação fluida entre o software e o sistema de
armazenamento, contribuindo para a robustez e confiabilidade do sistema
como um todo.
Vamos Exercitar?
Retomando a situação apresentada no início da aula, na qual você foi
designado para criar um programa em C que gerencie informações de
estudantes. Cada estudante possui os seguintes dados: nome, idade e média.
O programa deve permitir ao usuário inserir informações de vários estudantes
e, em seguida, salvar essas informações em um arquivo chamado
"estudantes.txt". Além disso, o programa deve possibilitar a leitura dessas
informações a partir do arquivo.
Vamos à resolução?
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 42/50
Figura 8 | Registros para armazenar informações. Fonte: elaborada pelo
autor
Figura 9 | Leitura das informações. Fonte: elaborada pelo autor.
Este programa em C mostra a utilização de registros (structs) para armazenar
informações sobre estudantes e como gravar esses dados em um arquivo.
Além disso, ele possibilita a leitura das informações a partir do arquivo,
fornecendo uma abordagem prática sobre o uso de registros e manipulação de
arquivos em C.
Saiba Mais
Para saber mais sobre registros e arquivos, consulte o Capítulo 13 - Entrada e
Saída: Arquivos, do livro Elementos de programação em C, de Pinheiro,
disponível no repositório da Biblioteca virtual.
PINHEIRO, F. de A. C. Capítulo 13 - Entrada e Saída: Arquivos. In: Elementos
de programação em C. Porto Alegre: Bookman, 2012, p. 341-384. 
Referências Bibliográficas
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 43/50
https://integrada.minhabiblioteca.com.br/reader/books/9788540702035/pageid/358
https://integrada.minhabiblioteca.com.br/reader/books/9788540702035/pageid/358
https://integrada.minhabiblioteca.com.br/reader/books/9788540702035/pageid/358
https://integrada.minhabiblioteca.com.br/reader/books/9788540702035/pageid/358
https://integrada.minhabiblioteca.com.br/reader/books/9788540702035/pageid/358
CORMEN, T. et al. Algoritmos: teoria e prática. 3. ed. Rio de Janeiro: LTC,
2022.
MANZANO, J. A. N. G.; OLIVEIRA, J. F. de. Estudo dirigido de algoritmos.
São Paulo: Érica, 2000.
MENÉNDEZ, A. Simplificando algoritmos. São Paulo: LTC, 2023.
SILVA, F. S. C. da; FINGER, M.; MELO, A. C. V. Lógica para computação. 2.
ed. São Paulo: Cengage Learning, 2017.
ZIVIANI, N. Projeto de algoritmos com implementações em Pascal e C. 3.
ed. São Paulo: Cengage Learning, 2011.
Encerramento da Unidade
APLICAÇÕES DE
PROGRAMAÇÃO
Videoaula de Encerramento
Olá, caro estudante! Seja muito bem-vindo à nossa videoaula dedicada às
funções, funções recursivas, registros e arquivos. Nela, exploraremos a fundo
tais conteúdos e os elementos essenciais de um programa na linguagem C.
Aproveite esta oportunidade de aprendizado e mergulhe neste conteúdo
fundamental para o cenário de algoritmos.
Clique aqui para acessar os slides da sua videoaula.
Bons estudos!
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 44/50
https://cm-kls-content.s3.amazonaws.com/202401/ALEXANDRIA/ALGORITMOS_E_LOGICA_DE_PROGRAMACAO/PPT/u4enc_algo_log_pro.pdf
Ponto de Chegada
Olá, estudante! Para desenvolver a competência desta Unidade, isto é, criar
soluções algorítmicas utilizando técnicas de funções e recursividade e
estruturas, como vetores e matrizes, tivemos que estudar a fundo
procedimentos e funções.
Durante esta jornada de aprendizado em programação C, mergulhamos em
conceitos fundamentais para o desenvolvimento de algoritmos. Entre estes
tópicos importantes estão:
Programação e funções com vetores: exploração de conceitos e
técnicas relacionados à manipulação de vetores em programação.
Programação com matrizes: abordagem de técnicas e práticas voltadas
para a programação envolvendo matrizes.
Introdução a função e recursividade: apresentação inicial de conceitos
sobre funções e recursividade em programação.
Registros e arquivos: estudo de registros e manipulação de arquivos em
programação.
Tais conhecimentos, que constituem a base para enfrentar desafios de maior
complexidade, o preparou para adentrar temas mais profundos e empregar
suas habilidades em projetos do mundo real. 
É Hora de Praticar!
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 45/50
Agora, convido você, estudante, a trabalhar com o conteúdo abordado nesta
unidade de ensino. Para tanto, vamos abordar um estudo de caso sobre
Cálculo do Imposto de Renda Pessoa Física (IRPF) com o cenário descrito a
seguir:
Requisitos
Você foi designado para desenvolver uma função em linguagem C que calcule
o Imposto de Renda Pessoa Física (IRPF) com base nos rendimentos anuais
de um contribuinte. Os requisitos detalhados são os seguintes:
Entrada de dados
A função deve receber como parâmetro a renda anual do contribuinte.
Faixas de renda
A tabela de alíquotas é dividida em faixas de renda.
Considerar três faixas: até R$ 50.000, de R$ 50.001 até R$ 100.000, e
acima de R$ 100.000.
Alíquotas e deduções
Estabelecer alíquotas de imposto diferentes para cada faixa.
Definir valores fictícios para as alíquotas.
Incluir deduções fiscais para cada faixa.
Cálculo do imposto
Realizar o cálculo do imposto devido considerando as faixas, alíquotas e
deduções estabelecidas.
Retorno
A função deve retornar o valor do imposto devido.
Testes
Incluir exemplos de uso da função em um programa principal (main) para
demonstrar como a função pode ser utilizada.
Reflita
A seguir, apresentamos duas questões de reflexão para aprofundar nossa
compreensão sobre esses temas:
1. Funções com vetores
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 46/50
Refletindo sobre a utilização de funções com vetores, considere como
essa abordagem pode otimizar a organização e eficiência do código. 
Pense em situações práticas em que a modularidade proporcionada por
funções pode facilitar a manipulação de vetores e como isso contribui para
a manutenção do código. 
Além disso, questione-se sobre como essa prática pode melhorar a
legibilidade e a reusabilidade do seu código.
 2. Funções recursivas
Ao explorar o conceito de funções recursivas, reflita sobre a elegância e
simplicidade que essa abordagem pode oferecer em certos contextos. 
Considere exemplos de situações em que a recursividade se destaca e
questione-sesobre os desafios e as precauções necessárias ao utilizar
esse recurso.
Pondere sobre como a compreensão profunda da recursividade pode
influenciar a resolução de problemas complexos e como você pode aplicar
essa técnica de maneira eficiente em seus projetos. 
Refletindo sobre funções com vetores e funções recursivas, percebemos
que estes são pilares fundamentais na construção de habilidades sólidas
em programação. 
O entendimento desses temas não apenas capacita a resolução de
problemas específicos, mas também aprimora a capacidade de pensar de
forma algorítmica. 
Dê o Play!
Clique aqui para acessar os slides do Dê o play!
 
Resolução do estudo de caso
Cálculo do Imposto de Renda Pessoa Física (IRPF)
O desenvolvimento da função segue uma lógica de tomada de decisões
baseada nas faixas de renda, utilizando estruturas condicionais (if, else if). O
cálculo do imposto é realizado multiplicando a renda pela alíquota da faixa
correspondente e subtraindo as deduções fiscais.
A seguir, oferecemos uma solução em linguagem C, com um exemplo de
programa principal (main) para testar a função de cálculo do Imposto de Renda
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 47/50
https://cm-kls-content.s3.amazonaws.com/202401/ALEXANDRIA/ALGORITMOS_E_LOGICA_DE_PROGRAMACAO/PPT/u4play_algo_log_pro.pdf
Pessoa Física (IRPF).
Figura 1 | Cálculo do IRPF. Fonte: elaborada pelo autor.
Conclusão
Este estudo de caso destaca a abordagem conceitual na criação da função,
apresentando uma visão detalhada dos requisitos para o cálculo do Imposto de
Renda Pessoa Física (IRPF) em linguagem C. 
Dê o play!
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 48/50
Assimile
Nesta linha do tempo, apresentamos, resumidamente, os principais conceitos
relacionados a funções com vetores, programação com matrizes, a função e
recursividade, e registros e arquivos.
Figura | Programação lógica. Fonte: elaborada pelo autor.
 
 
Referências
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 49/50
CORMEN, T. et al. Algoritmos: teoria e prática. 3. ed. Rio de Janeiro: LTC,
2022.
MANZANO, J. A. N. G.; OLIVEIRA, J. F. de. Estudo dirigido de algoritmos.
São Paulo: Érica, 2000.
MENÉNDEZ, A. Simplificando algoritmos. São Paulo: LTC, 2023.
PINHEIRO, F. de A. C. Elementos de programação em C. Porto Alegre:
Bookman, 2012.
SILVA, F. S. C. da; FINGER, M.; MELO, A. C. V. Lógica para computação. 2.
ed. São Paulo: Cengage Learning, 2017.
ZIVIANI, N. Projeto de algoritmos com implementações em Pascal e C. 3.
ed. São Paulo: Cengage Learning, 2011.
WAZLAWICK, R. S. Introdução a algoritmos e programação com Python: uma
abordagem dirigida por testes. Rio de Janeiro: LTC, 2018.
01/08/2024, 14:24 Aplicações de Programação
https://alexandria-html-published.platosedu.io/644bc15d-593f-4e53-bcf6-3978e05a63c7/v1/index.html 50/50

Mais conteúdos dessa disciplina