Escolar Documentos
Profissional Documentos
Cultura Documentos
APLICAÇÕES DE PROGRAMAÇÃO
0
121 minutos
seõçatona reV
Aula 1 - Programação e funções com vetores
Aula 2 - Programação com matrizes
Referências
Aula 1
INTRODUÇÃO
Olá, estudante, hoje vamos iniciar uma nova unidade da disciplina de algoritmos e lógica de programação,
em que você verá na prática a programação de uma estrutura de dados baseada em vetores, que é um
recurso muito utilizado na engenharia.
Na programação, o vetor é usado para manipular um conjunto de dados de um mesmo tipo primitivo
(inteiro, real, caracter). Estes ficarão em posições contiguas da memória do computador, permitindo o seu
acesso de uma forma mais fácil e rápida.
Nesta unidade estudaremos a sintaxe e a codificação destes vetores, usando a linguagem de programação
C.
Vamos ver que os conceitos de declaração de variáveis, estrutura de repetição e de vetores estudados nas
unidades anteriores serão importantes e muito bem aplicados nesta unidade.
Por exemplo: se quisermos armazenar em um programa as notas que 40 alunos tiveram em uma
determinada prova de uma disciplina e não tivéssemos o vetor, precisaríamos usar no programa 40
variáveis com nomes distintos, sendo armazenada em cada variável a nota de um aluno. Com o uso de
vetor, vamos conseguir armazenar em uma única variável as notas dos 40 alunos. Esta variável terá dentro
dela 40 posições, sendo que, em cada posição, vamos incluir a nota de um aluno.
• Homogênea porque estas posições são do mesmo tipo de dado (inteiro, real, caracter).
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&ati… 1/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
O vetor passa a existir a partir da sua declaração, quando, então, lhe são associados um nome ou
identificador e a respectiva posição de memória por ela representada. Qualquer referência ao seu
identificador significa o acesso ao conteúdo de uma única posição de memória (FARRER, 1999).
As posições do vetor são guardadas em uma sequência contínua de memória, ou seja, uma posição seguida
0
da outra.
A diferença da declaração de um vetor e de uma variável normal do programa está na parte que vem após o
seõçatona reV
nome, em que, na declaração do vetor, tem-se a quantidade de posições do vetor entre colchetes.
No qual temos:
• Real: tipo primitivo de dados do vetor, indicando que em cada posição do vetor, será inserido um número
do tipo real da matemática;
• Vnota: nome da variável do tipo vetor. Neste exemplo, será a nota dos alunos;
• 40: quantidade de posições do vetor. Neste exemplo, cada posição conterá a nota de um aluno.
Percebam que na declaração do vetor, ele é definido com 40 posições. Estas posições são numeradas
sequencialmente, iniciando com a posição 0 até a posição 39. Chamamos estas posições de índice do vetor.
Agora vamos trabalhar com este vetor, usando uma pseudolinguagem, inserindo nas posições do vetor as
notas dos alunos.
Vnota [ 1 ] = 7,8;
Vnota [ 3 ] = 5,3;
Conseguimos acessar as posições de forma aleatória, ou seja, fomos para a 6ª posição, depois para a 1ª
posição e depois para a 3ª posição do vetor.
Vamos incluir novos elementos no vetor, mas usando uma nova variável A, que terá a posição em que será
incluído o elemento no vetor.
Inteiro A;
Vnota[ A ] = 9,8;
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&ati… 2/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
0
seõçatona reV
Fonte: elaborada pelo autor.
Vamos usar o mesmo vetor Vnota que codificamos anteriormente uma pseudolinguagem, mas agora,
vamos implementá-lo na linguagem de programação C.
1 #include <stdio.h>
2 main()
3 {
4 float Vnota[40];
5 int A;
6 Vnota [6]=6.5;
7 Vnota [1]=7.8;
8 Vnota [3]=5.3;
Inicialmente, foi declarada na linha 1 do programa, a biblioteca stdio.h da linguagem C, para usarmos os
comandos de entrada e saída de dados printf e scanf.
Na linha 4, foi criado o vetor Vnota, com 40 posições e nas linhas 6, 7 e 8 foram incluídas as notas 6,5, 7,8 e
5,3 nas posições 6, 1 e 3 do vetor.
10 scanf(\"%d\",&A);
11 Vnota[A]=9.8;
12 Vnota[A-1]=9.1;
14 scanf(\"%d\",&Vnota[A+3]);
18 }
Nas linhas 9 e 10, foi solicitada a entrada de um dado do tipo inteiro que será armazenado na variável A. O
valor desta variável está sendo usado como posição de memória para a inclusão da nota 9,8. Se for digitado
o valor 5, a nota 9,8 será inserida na posição 5 do vetor, conforme mostrado na linha 11.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&ati… 3/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
Na linha 12, foi subtraído 1 do valor digitado, ou seja, se foi digitado o valor 5, a nota 9,1 será incluída na
posição 4 do vetor.
Na linha 13 e 14, foi solicitada a digitação de uma nota, sendo esta inserida na posição A+3, ou seja, a nota
digitada será inserida na posição 8, se o valor digitado para A foi 5.
0
Para acessar todas as posições do vetor, precisamos usar uma estrutura de repetição. Dentro desta
estrutura de repetição conseguimos acessar todos os elementos do vetor.
seõçatona reV
A estrutura de repetição mais indicada para a manipulação do vetor é o Para (valor inicial do índice,
condição de repetição, incremento do índice). A codificação desta estrutura de repetição está nas linhas 16 e
17 deste código.
Como pode ser observado, a estrutura de repetição se inicia com o valor 0 no índice, para acessar a 1ª
posição do vetor, incrementando de 1 em 1 para cada execução dos comandos que fazem do bloco da
estrutura de repetição, até a última posição do vetor.
Para resolver, é necessário ler todas as notas e armazená-las em um vetor. Com os valores armazenados,
será possível manipulá-los.
Então vamos resolver da seguinte forma: (1) ler as notas dos alunos, (2) calcular a média aritmética, (3)
comparar cada nota com a média calculada (4) contar as notas maiores que a média (5) mostrar a
quantidade.
1 #include <stdio.h>
2 main()
3 {
5 int somamaior=0;
7 {
9 scanf(\"%f\",&Vnota[x]);
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&ati… 4/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
11 fflush(stdin);
12 }
0
14 printf (\" Media das notas: %.1f\",media);
seõçatona reV
16 {
17 if (Vnota[x]>media)
18 somamaior ++;
19 }
21 }
Vamos fazer um outro exercício com vetor, mas agora os elementos do vetor serão inicializados quando
forem declarados. Depois vamos somar os elementos do vetor e mostrar o resultado da soma.
1 #include <stdio.h>
2 #include <stdio.h>
3 main()
4 {
5 int vetor[5]={1,3,5,7,9},soma=0;
9 }
Continuando este mesmo programa, agora vamos mostrar o vetor que foi declarado e inicializado na linha 4,
de trás para frente, ou seja, o último elemento do vetor será o último mostrado, o penúltimo será o segundo
e assim sucessivamente.
9 #include <stdio.h>
12 }
Veja que, para mostrar o vetor de trás para frente, foi codificada uma estrutura de repetição, iniciando com
o valor do maior índice do vetor e decrementando de 1 até a primeira posição do vetor.
VÍDEO RESUMO
Olá, estudante, vamos agora ao vídeo, em que você verá uma explicação como se programam vetores na
linguagem de programação C. No vídeo, usaremos este recurso da programação e explicaremos como você
deve fazer para codificá-lo, considerando a sua sintaxe e a sua lógica.
Vamos ver também que os conceitos de lógica, estrutura de repetição e de vetores estudados são muito
bem usadas nesta unidade.
Saiba mais
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&ati… 5/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
Para codificar programas na linguagem de programação C, você deverá usar um aplicativo que tenha as
ferramentas necessárias para programar em C/C++.
Recomendamos o uso do Bloodshed Dev C++. Este pacote compõe um ambiente completo de
desenvolvimento para a criação, debug e compilação do código de programação em C, e pode ser
0
analisado e ser feito download em seu site.
seõçatona reV
Aula 2
29 minutos
INTRODUÇÃO
Olá, estudante, hoje vamos para um novo tópico da disciplina Algoritmos e Lógica de Programação, em que
você verá na prática a programação de uma estrutura de dados baseada em matrizes.
Vamos ver também que a matriz é um instrumento muito usado pelos programadores para resolver vários
problemas do dia a dia na programação.
Enquanto um vetor é uma estrutura de dados homogênea unidimensional, pelo motivo de crescer os dados
de estrutura apenas em uma direção, que é para o lado direito, na forma de linha, a matriz é uma estrutura
de dados homogênea multidimensional, por permitir crescer os dados da estrutura em mais de uma
direção, que é para o lado direito (linha) e para baixo (coluna).
Se quisermos inserir novos elementos no vetor, estes deverão ser incluídos em novas posições, que ficarão
do lado direito, na mesma linha.
Agora vamos para um exemplo de uma matriz, com 8 elementos divididos em linhas e colunas.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&ati… 6/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
0
Fonte: elaborada pela autora.
seõçatona reV
Veja que organizamos os mesmos dados representados no vetor, mas agora em 2 linhas e 4 colunas. Esta
forma de organização de estrutura de dados foi feita em uma matriz [2,4].
Se quisermos incluir novos elementos na matriz, podemos inclui-los em uma nova coluna no lado direito,
mas também podemos incluí-los em uma nova linha, abaixo da existente.
Da mesma forma que o vetor, as matrizes precisam ter um nome e precisam ter índices para identificar a
posição dos seus elementos. Como a matriz que estamos representando possui 2 dimensões, baseada na
linha e na coluna, precisamos de 2 índices para identificar uma posição de um elemento na matriz, o
primeiro identifica a linha e o segundo identifica a coluna.
Por exemplo:
A matriz também é uma estrutura composta homogênea, com isto, todos os seus elementos devem ter o
mesmo tipo primitivo de dado (inteiro, real, caracter). Com isto, quando declaramos uma matriz, precisamos
identificar qual é o tipo de dados que serão inseridos nas suas posições.
Por exemplo:
Caracter Letra[2,4] => é uma matriz em que poderão ser inseridos até 8 elementos do tipo caracter.
Em que temos:
• Caracter: tipo primitivo de dados do vetor, indicando que em cada posição do vetor, será inserido um
caracter.
Percebam que na declaração da matriz, ela é definida com 8 posições divididas em 2 linhas e 4 colunas. O
índice para a linha é numerado sequencialmente, iniciando com 0, da mesma forma para a coluna, que
também tem um índice iniciando com 0.
Outro exemplo:
Real Nota[3,4] => é uma matriz em que poderão ser inseridos até 12 elementos do tipo real.
Vamos usar como exemplo o mesmo Vnota que usamos para codificá-lo na forma de vetor, mas, agora,
vamos trabalhar com o Vnota na forma de uma estrutura de dados homogênea bidimensional, que é uma
matriz.
1 #include <stdio.h>
2 main()
3 {
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&ati… 7/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
4 float Vnota[4][10];
5 int x,y;
6 Vnota [0][0]=8.1;
0
7 Vnota [0][2]=6.5;
8 Vnota [1][4]=7.8;
seõçatona reV
9 Vnota [2][6]=9.4;
14 Vnota[x][y]=6.0;
15 Vnota[x][y+1]=3.9;
16 Vnota[x+1][y+2]=7.0;
22 }
Na linha 4, foi declarada uma matriz com nome Vnota, com 40 posições, organizada na forma de 4 linhas e
10 colunas, sendo os elementos da matriz do tipo de dados float (Real).
Nas linhas 6 a 9, foram inseridos elementos na matriz nas posições [0,0], [0,2],[1,4] e [2,6].
Nas linhas 11 e 13 foram solicitadas a entrada de dois dados do tipo inteiro que serão armazenados
respectivamente nas variáveis x e y. Supondo neste exemplo que foram digitados os valores 2 para x e 1
para y.
Na linha 14 os valores da variáveis x e y foram usados para a inclusão do elemento 6.0 na posição [2,1] da
matriz.
Na linha 15 a variável y que é usada para indicar a coluna, foi incrementada de 1, com isto, o elemento 3.9
foi incluído na posição [2,2] da matriz.
Na linha 16, a variável x que é usada para indicar a linha, foi incrementada de 1 e a variável y que é usada
para indicar a coluna, foi incrementada de 2, com isto, o elemento 7.0 foi incluído na posição [3,3] da matriz.
Na linha 17 e 18, foi solicitado a digitação de uma nota, sendo está inserida na posição [9,9] da matriz.
Para acessar todos os elementos de uma matriz, precisamos usar uma estrutura de repetição dentro de
outra estrutura de repetição, em que a estrutura de repetição externa vai passar por todas as linhas e a
estrutura de repetição interna vai passar pelas colunas da matriz.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&ati… 8/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
1 for (x=0;x<4;x++)
2 {
0
3 for (y=0;y<10;y++)
seõçatona reV
5 }
A variável x é para a linha e a variável y é para a coluna. Iniciamos a variável x com o valor 0 na estrutura de
repetição que está na linha 1. A estrutura de repetição que está na linha 3 inicia com a variável y com valor 0,
então será mostrado o elemento de Vnota[0,0], que é o comando da linha 4. A estrutura de repetição de
linha 3 incrementa 1 em y, mostrando o elemento de Vnota[0,1] e fica neste looping até que y tenha o valor
10, ou seja, serão mostrados todos os elementos da linha 0 da matriz. Depois, o programa volta para e
estrutura de repetição da linha 1, incrementando 1 em x e executa novamente a estrutura de repetição da
linha 3, voltando y com o valor 0. Com isto, é percorrida toda a linha 1 da matriz. Este processamento fica
até que x tenha o valor 5, saindo da estrutura de repetição da linha 1.
Como pode ser observado, a estrutura de repetição se inicia com o valor 0 no índice, para acessar a 1ª
posição do vetor, incrementando de 1 em 1 para cada execução dos comandos que fazem do bloco da
estrutura de repetição, até a última posição do vetor.
IMPLEMENTAÇÃO DE MATRIZES
Agora vamos codificar uma matriz para atender o seguinte enunciado:
Faça um programa em C que tenha uma matriz M[3,4] e insira os valores 1 a 12 nos elementos da matriz,
conforme figura abaixo. Depois some os elementos da matriz que estão marcados em vermelho.
Podemos perceber que a matriz tem valores sequenciais para os elementos e que os elementos que estão
marcados em vermelho são os que estão na posição em que o valor da coluna é maior que o valor da linha.
Desta forma, podemos codificar o programa da seguinte forma:
1 #include <stdio.h>
2 main()
3 {
6 {
8 {
9 if ( y > x)
11 }
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&ati… 9/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
12 }
14 }
Na linha 4 do programa, inicializamos a matriz no mesmo momento da sua declaração, como uma matriz [3]
0
[4] tem 12 elementos, fizemos uma definição sequencial de 1 a 12 entre chaves logo após a declaração de
seõçatona reV
matriz.
Como é solicitado que sejam somados somente os elementos em vermelho e estes elementos são os que a
coluna é maior que a linha, consideramos no programa que a variável x para a linha, declarado na estrutura
de repetição externa e y para a coluna, declarado na estrutura de repetição interna.
Na linha 9, foi codificada uma condicional, considerando somente os elementos nos quais o valor de y
(coluna) for maior que x(linha).
Faça um algoritmo que leia uma matriz M[3,3] e um valor X. A seguir, multiplique cada elemento da matriz
pelo valor X, colocando o resultado da multiplicação de cada elemento da matriz em um vetor V[9]. No final,
o algoritmo deve listar todos os elementos do vetor.
Veja que para a codificação deste programa, vamos usar os conhecimentos de matrizes e vetores.
1 #include <stdio.h>
2 main()
3 {
4 int M[3][3],V[9],cont=0;
6 {
8 {
10 scanf(\"%d\",&M[x][y]);
11 V[cont]=M[x][y];
12 cont++;
13 }
14 }
15 for (cont=0;cont<9;cont++)
17 }
Na linha 10, fizemos a codificação para a leitura dos elementos da matriz M[3][3].
Na linha 11, atribuímos o valor de cada elemento da matriz para uma posição do vetor V[9].
Na linha 15 declaramos uma nova estrutura de repetição para percorrer todo do vetor V[9], mostrando os
elementos do vetor (linha 16].
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 10/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
0
seõçatona reV
Fonte: captura de tela do DEV C++ elaborada pelo autor.
VÍDEO RESUMO
Olá, estudante, neste vídeo vamos estudar formas de organização dos dados em uma estrutura baseada em
matrizes da matemática. Vamos ver como ela deve ser usada, a sintaxe e a codificação destas matrizes,
usando a linguagem de programação C.
Saiba mais
Veja os conceitos e dicas para codificação de matrizes no site Learn da Microsoft.
Aula 3
INTRODUÇÃO
Olá, estudante, hoje vamos para um novo tópico da disciplina de Algoritmos e Lógica de Programação, em
que será abordado o recurso de funções na programação de computadores.
Vamos ver que podemos criar as nossas próprias funções no programa e podemos usar as funções pré-
definidas, as quais ajudam, e muito, na organização dos programas.
Também vamos estudar um tipo especial de função que permite a codificação de recursividade, em que a
função é chamada para si mesma.
Vamos ver que as funções são soluções elegantes e simples nos programas, mas esta elegância e
simplicidade têm um preço que requer muita atenção em sua implementação. Então estudantes, vamos em
frente.
A função cria uma forma de encapsulamento da sua lógica interna, expondo como se fosse um serviço, na
qual um bloco de comandos será executado, recebendo alguns parâmetros de entrada e retornando um
resultado como saída da função.
O principal benefício de usar funções na programação é que podemos evitar repetição de linhas de código,
pois, se o programador quiser executar uma operação mais de uma vez, ele pode simplesmente escrever a
função uma vez e utilizá-la diversas vezes, ao invés de escrever o mesmo código várias vezes.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 11/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
Outro benefício é que se você desejar alterar ou corrigir alguma coisa mais tarde, é mais fácil alterar em um
único lugar.
Toda função precisa ser invocada para ser executada. Desta forma, quando uma função que já foi usada
anteriormente é invocada, o programador não vai mais precisar se preocupar como a lógica deve ser
0
realizada na função e também não vai precisar se preocupar com os testes da função.
Funções são codificadas independentemente umas das outras e as variáveis usadas dentro de funções não
seõçatona reV
são compartilhadas, ou seja, as variáveis são locais a uma função.
As funções se comunicam por meio de parâmetros passados como entrada e os valores retornados como
saída, com isto, a comunicação entre as funções é totalmente controlada.
A função poderá também chamar a si própria, criando-se uma função recursiva. Este tipo de função torna-se
uma implementação elegante e simples, por serem executadas tarefas repetitivas sem utilizar nenhuma
estrutura de repetição.
Para declarar uma função no programa, a seguinte sintaxe deve ser utilizada:
<corpo da função>
return valor_de_retorno;
Toda função deve ter um tipo de dados. Esse tipo determina qual será o tipo de seu valor de retorno,
podendo ser inteiro, real, caractere, etc. Quando a função não tem um tipo (void), então ela não pode
retornar um valor, ou seja, passa a ser um procedimento.
Os parâmetros são os valores passados para a função que vão sofrer algum tipo de modificação durante a
execução dos comandos da função como se fosse uma função matemática, em que o parâmetro é o valor de
entrada função.
Exemplo de função:
1 #include
3 int soma;
4 soma = a + b;
5 return soma;
6 }
7 main() {
9 }
Neste exemplo, foi codificada a função soma, que recebe 2 números inteiros como parâmetro de entrada,
faz a soma dos 2 números e retorna o resultado;
Existem algumas funções na linguagem C que já estão prontas, ou seja, estão codificadas e testadas. Elas
recebem o nome de funções pré-definidas. Pará usá-las, precisamos somente declarar no programa o
nome da biblioteca onde está a função.
Por exemplo: para calcular a potenciação de um número, podemos usar a função pré-definida pow(base,
potência), da seguinte forma:
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 12/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
1 #include <stdio.h>
2 #include <math.h>
3 main() {
0
4 printf(\"Potenciação de 2 elevado a 3: %d\",pow(2,3));
seõçatona reV
5 }
Veja que incluímos a biblioteca <math.h> no programa. Dentro desta biblioteca há a função chamada pow,
que calcula a potenciação. No programa principal, invocamos a função pow, passando como parâmetro o
valor 2 como base e 3 como potência. O resultado que será mostrado neste programa será 8.
Veja abaixo exemplos de funções pré-definidas que estão prontas na biblioteca math.h da linguagem C.
Função Descrição
floor(float num): Retorna o menor inteiro menor que número (ex. 9.9 retorna 9)
ceil(float num): Retorna o maior inteiro maior que número (ex. 9.9 retorna 10)
Considerando a existência da função sqrt(numero) para calcular a raiz quadrada de um número, veja como
fica fácil realizar o cálculo resolver a raiz quadrada de 9:
1 #include <stdio.h>
2 #include <math.h>
3 main() {
5 }
Temos outras bibliotecas, com outros tipos de funções pré-definidas, tais como:
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 13/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
5. <stdlib.h> Contém funções para conversão de números em texto e vice-versa, locação de memória,
números aleatórios, busca e ordenação.
6. <ctype.h> Contém funções para classificar caracteres pelo tipo ou para converter entre caixa alta e baixa
0
independentemente da codificação.
seõçatona reV
Por exemplo: já estamos acostumados em usar as funções pré-definidas printf() e scanf() da biblioteca
<stdio.h>, não sabemos como elas foram escritas, mas sabemos como utilizá-las, ou seja, sabemos
o nome das funções e quais informações precisamos fornecer como parâmetros para que a função produza
os resultados esperados.
Vamos ver agora a codificação de funções recursivas, em que a função chama a si própria ou chama outras
funções que, em algum momento, chama a primeira, tornando-se um processo recursivo.
Cada chamada da função recursiva é inserida numa espécie de pilha, sendo o limite de vezes para a sua
chamada limitada ao tamanho desta pilha. Se o valor correspondente ao tamanho máximo da pilha for
atingido, haverá um estouro da pilha ou Stack Overflow, por este motivo, a sua codificação requer muita
atenção.
Trazendo a recursividade para a nossa realidade, vamos considerar como exemplo a ação contar o valor em
dinheiro que temos em um saco de moedas. Cada ato de retirar uma moeda do saco, ver o valor e somá-lo
ao valor das moedas já retiradas é um processo recursivo.
Este processo de retirar uma moeda, identificar seu valor e somar com o restante do saco se repete até que
o saco esteja vazio, quando atingiremos o ponto de parada e a função retornará o valor zero, indicando que
não há mais moedas no saco.
Nesse ponto a função contar dinheiro foi chamada um número de vezes igual a quantidade de moedas no
saco, e a última chamada começa a devolver os valores de retorno de cada instância da função, iniciando
por zero (saco vazio), somado ao valor da última moeda, da penúltima etc., até retornar à primeira chamada
referente a primeira moeda, e nesse momento a função inicial se encerra trazendo como valor de retorno a
soma dos valores de todas as moedas que estavam no saco.
2. Regra Geral: é o método que reduz a resolução do problema através da invocação recursiva de casos
menores, que por sua vez são resolvidos pela resolução de casos ainda menores pela própria função, assim
sucessivamente até atingir o “ponto de parada” que finaliza a função.
Cada vez que uma função é chamada de forma recursiva, são alojados e armazenados uma cópia dos seus
parâmetros, de modo a não perder os valores dos parâmetros das chamadas anteriores.
A chamada a uma função recursiva é igual à chamada de uma função não recursiva, na qual é necessário
guardar uma “estrutura de invocação”, sendo esta estrutura liberada depois do fim da execução da função e
atualização do valor de retorno.
Vamos então ver um exemplo de programa com recursividade, onde será criada uma função que faça a
soma dos números e fica chamando a si próprio até que a condição de parada aconteça. Neste exemplo,
será somado os números no intervalo de 5 até o número 0.
1 #include <stdio.h>
2 int soma(int x)
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 14/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
3 {
4 int y;
5 if( x == 0 )
0
6 return 0;
7 else
seõçatona reV
8 {
9 y = x + soma(x -1);
10 return y;
11 }
12 }
13 main()
14 {
15 int num;
17 }
Na linha 9, temos a chamada recursiva da função soma, onde será somado o valor do número, acumulando
a soma na variável y.
Na linha 5 temos a condição de parada, que é quando o número chega no valor 0, ou seja, está iniciando em
5, que é o parâmetro recebido na função e vai até o valor 0.
Os valores que estão sendo somados ficarão em uma pilha até a condição de parada. De uma forma
ilustrativa, ficará da seguinte forma:
Vamos para um segundo exemplo de recursividade, codificando-se agora uma função recursiva para somar
a quantidade de dígitos de um número. Será usada na função recursiva, a função pré-definida abs(num)
para teste da condição de parada e será contado na função recursiva conta, a quantidade de dígitos do
número 10.000, sendo este passado como parâmetro para a função recursiva conta.
1 #include <math.h>
2 #include <stdio.h>
3 int conta(int x)
4 {
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 15/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
5 int y;
6 if(abs(x) < 10 )
7 return 1;
0
8 else
9 y = 1 + conta(x/10);
seõçatona reV
10 }
11 main()
12 {
14 printf(\"Total: %d\",conta(num));
15 }
VÍDEO RESUMO
A maior motivação que temos para estudar a codificação de funções nas linguagens de programações
contemporâneas é a redução da complexidade e a melhoria da modularidade dos programas. Então vamos
ver neste vídeo, como implementamos estas funções e também exemplos práticos com a sua aplicabilidade.
Saiba mais
Você poderá criar o seu programa recursivo, usando um site Paiza.io para compilar e executar o
programa de forma on-line.
Agora faça um teste usando este site, copiando e colando o programa recursivo abaixo, que faz a soma
dos números que estão no intervalo de 0 a 5.
#include <stdio.h>
int soma(int x)
int y;
if( x == 0 )
return 0;
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 16/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
else
y = x + soma(x -1);
0
return y;
seõçatona reV
}
int main()
int num;
Aula 4
REGISTROS E ARQUIVOS
Vamos ver que o registro é um recurso importante para a organização dos dados utilizados
nos programas, pois permite tratar os dados na visão de um conjunto de dados heterogêneos.
27 minutos
INTRODUÇÃO
Olá, estudante, vamos para um novo tópico da disciplina de Algoritmos e Lógica de Programação, em que
será abordada a programação de registros e manipulação de arquivos, usando a linguagem de programação
C.
Vamos ver que o registro é um recurso importante para a organização dos dados utilizados nos programas,
pois permite tratar os dados na visão de um conjunto de dados heterogêneos.
Vamos ver também como podemos manipular arquivos nos programas em C, gravando e recuperando os
conjuntos de dados a serem tratados nos programas. Então, os registros serão tratados como um conjunto
de campos e os arquivos como um conjunto de registros.
Segundo Farrer (1999), os registros são um conjunto de dados logicamente relacionados, mas de tipos
diferentes, que facilita o agrupamento de variáveis que não são do mesmo tipo e que têm estreita relação
lógica entre eles.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 17/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
Este registro produto está definido com as variáveis Codigo, Descricao, Unidade e Preco, sendo que cada
variável precisa agora ser associada um determinado tipo de dados, ficando então da seguinte forma:
Inteiro Codigo,
Caracter Descricao,
0
Caracter Unidade
seõçatona reV
Real Preco
Neste exemplo, temos um registro definido para o produto de código 0001, sendo ele formado por variáveis
de tipos diferentes.
Os registros são classificados como variáveis compostas heterogêneas, pois permitem agrupar variáveis de
tipos diferentes, como mostrado no exemplo acima.
Dependendo do volume de registros que deverá ser tratado no programa, não será possível mantê-los em
memória, por falta de espaço ou pela necessidade de armazená-lo por um período de tempo longo. A
alternativa para isto é armazenar os registros em um arquivo.
O arquivo é então um conjunto de registros armazenados em algum dispositivo secundário, como por
exemplo, um disco HD.
As operações básicas que podem ser feitas neste arquivo, por meio de um programa em C são: obtenção de
um registro do arquivo, inserção de um novo registro, modificação ou exclusão de um registro.
A disposição dos registros no arquivo pode favorecer determinadas operações em detrimento de outras. O
conhecimento das possibilidades de organização dos registros nos arquivos permite ao programador
escolher aquela que seja mais adequada à solução do seu problema em termos de eficiência e eficácia.
1. Texto: armazena caracteres que podem ser mostrados diretamente na tela ou modificados por editores
de texto simples.
2. Binário: arquivo tem uma sequência de bits sujeita às convenções dos programas que o geraram, não
sendo legíveis diretamente.
Os registros, combinados com o seu armazenamento em arquivos, propiciam a gravação dos dados de
forma permanente, possibilitando a recuperação destes dados toda vez que se fizer necessário tratá-los nos
programas.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 18/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
Os registros são declarados como sendo uma estrutura na linguagem C, por meio do comando struct, sendo
uma coleção de um ou mais variáveis, possivelmente de tipos diferentes, agrupadas sob um único nome.
struct data
0
{
seõçatona reV
int dia;
int mes;
int ano;
};
Onde:
• a palavra-chave struct informa ao compilador que um modelo de estrutura está sendo definido;
• os nomes dia, mes e ano declarados entre as chaves são as variáveis da estrutura;
• uma definição de estrutura é um comando, por isso deve terminar com ponto-e-vírgula.
As variáveis de uma mesma estrutura devem ter nomes diferentes, porém, estruturas diferentes podem
conter campos com o mesmo nome.
A definição de uma estrutura não reserva qualquer espaço na memória. No exemplo dado, nenhuma
variável foi declarada de fato, apenas a forma dos dados foi definida. Essa definição, porém, cria um tipo de
dados, que pode ser usado para declarar variáveis.
struct data
int dia;
int mes;
int ano;
};
...
data x;
Nesta forma, definimos a estrutura e declaramos a variável x do novo tipo definido em um único comando.
Os campos de uma estrutura podem ser de qualquer tipo, inclusive uma estrutura previamente definida e a
declaração do formato de uma estrutura pode ser feita dentro da função principal (main) ou fora dela.
Vamos agora estudar um programa em C em que declaramos uma estrutura Reg_Produto, com variáveis de
tipos diferentes, que representam um registro para um produto, conforme mostrado anteriormente, nas
Figuras 1 e 2 deste material.
1 #include <stdio.h>
2 main ()
3 {
4 struct Reg_Produto {
5 char codigo[10];
6 char descricao[30];
7 char unidade[5];
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 19/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
8 float preco;
9 };
10 Reg_Produto Prod;
0
11 printf(\"Digite o codigo:\");
12 scanf(\"%s\", &Prod.codigo);
seõçatona reV
13 printf(\"Digite a descricao:\");
14 scanf(\"%s\",&Prod.descricao);
15 printf(\"Digite a unidade:\");
16 scanf(\"%s\", &Prod.unidade);
17 printf(\"Digite o preco:\");
18 scanf(\"%.2f\",&Prod.preco);
19 }
Na linha 4 deste programa, declaramos a estrutura que chamamos de Reg_Produto, contendo as variáveis
código, descrição, unidade e preco, declaradas nas linhas 5, 6, 7 e 8.
Na linha 10, declaramos a variável Prod, como sendo do tipo da estrutura Reg_Produto, com isto, teremos
dentro da variável Prod, os campos codigo, descricao, unidade e preco.
Na linha 12, estamos lendo um valor do teclado e inserindo este valor na variável código que está dentro da
variável Prod. Veja então que este comando de leitura tem o nome da variável associada à estrutura e
depois o nome da variável código, separados por um ponto (.). Esta é a forma de acessar individualmente os
campos de uma determinada estrutura como se fossem variáveis comuns.
Nas linhas 14, 16 e 18, estamos lendo os valores para as variáveis Prod.descricao, Prod.unidade e
Prod.preco.
Para tratar arquivos, a linguagem C fornece um nível de abstração entre o programa e o dispositivo a ser
usado. Esta abstração é chamada fila de bytes e o dispositivo normalmente é o arquivo.
A biblioteca <stdio.h> tem um identificador FILE, que é uma estrutura que define vários aspectos do arquivo,
como nome, status, posição corrente no arquivo, além de ter uma fila associada.
Para manipular o arquivo será necessário então criar no programa este ponteiro, associado a esta estrutura
FILE.
Onde arq será o ponteiro para um arquivo. É usando este tipo de ponteiro que vamos poder manipular os
arquivos na linguagem C.
Abertura de arquivos
Toda vez que for necessário trabalhar com arquivo, primeiramente precisamos ABRIR o arquivo. Abrir o
arquivo significa alocar o periférico em que o arquivo se encontra e deixá-lo disponível para
leitura/gravação.
Onde arq é o ponteiro para o arquivo e modo é a forma como arquivo será acessado, podendo ser das
seguintes formas:
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 20/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
0
• a+: para leitura ou escrita no fim do arquivo, e se não existir cria novo arquivo;
seõçatona reV
• b: modo binário;
• t: modo texto.
Fechamento de arquivos
Da mesma maneira que precisamos abrir um arquivo antes do processamento, também se faz necessário o
fechamento dele, para que suas informações não possam ser violadas ou danificadas. Fechar um arquivo
significa liberar o periférico que estava sendo utilizado.
Exemplo: fclose(arq);
Leitura de arquivos
Após abrir um arquivo é necessário LER os dados que estão em disco e transferi-los para memória. Essa
transferência é feita por registro. Esse procedimento é gerenciado pelo próprio sistema operacional.
Onde arq é o ponteiro para o arquivo e string é a variável que receberá a linha apontada pelo ponteiro
dentro do arquivo.
Gravação de arquivos
Da mesma maneira que os registros são lidos de um arquivo, também devemos gravar registros em um
arquivo. A gravação consiste na transferência de um registro da memória, para um periférico.
Toda vez que abrimos um arquivo ele posiciona o ponteiro no primeiro registro, ou seja, no início do
arquivo. Para que possamos trabalhar com os dados se torna necessário saber onde está o ponteiro do
registro. Isso poderemos fazer testando se o ponteiro está no início (BOF – Bottom Of File) ou no final do
arquivo (EOF – End Of File). Esse é sempre executado após a leitura do registro (mudança da posição do
ponteiro). Simbolicamente podemos representar esse passo da seguinte maneira:
Movimentação de registros
Quando um arquivo é aberto, o ponteiro está apontando para o primeiro registro do arquivo. A cada leitura
do arquivo o ponteiro se movimenta para o próximo registro e assim por diante.
1 while (feof(arq)==0) {
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 21/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
3 printf(\"%s %d\n\",string,num);
4 }
Este trecho do programa está lendo todos os registros de um arquivo, em que a função feof(arq) retorna 1
quando o ponteiro arq está apontando para o último registro do arquivo, senão retorna 0.
0
Agora vamos analisar um programa que abre o arquivo exemplo.txt, lê e exibe em tela todos os registros
seõçatona reV
deste arquivo.
1 #include <stdio.h>
2 #include <stdlib.h>
3 main ()
4 {
5 FILE *arq;
6 char texto[256];
8 if (arq == NULL)
9 {
11 exit (1)
12 }
14 while(!feof(arq))
15 {
18 }
19 fclose(arq);
20 }
Na linha 5 deste programa, está sendo criado um ponteiro chamado *arq que é usado para navegar no
arquivo exemplo.txt, que está sendo aberto na linha 7 deste programa. Na linha 13 do programa, está sendo
lida a 1ª linha do arquivo. Na linha 14 tem-se uma estrutura de repetição, em que é testado se o ponteiro do
arquivo *arq chegou na última linha do arquivo. Enquanto a condição for verdadeira, ou seja, não chegou na
última linha, o programa mostra a linha e lê a próxima linha.
VÍDEO RESUMO
Crie o seu programa de registros e arquivos, usando o site Paiza.io em que você poderá codificar, compilar
e rodar deforma on-line.
Saiba mais
A manipulação de caracteres e inteiros pode ocasionar dificuldades na legibilidade do código,
principalmente pelas conversões implícitas que a linguagem C permite na execução dos programas.
Para essas construções específicas, Luís Damas organizou uma subseção em sua obra, com alguns
exemplos detalhadamente descritos.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 22/23
12/10/2023, 00:37 wlldd_231_u4_alg_log_pro
O livro Linguagem C está na nossa biblioteca virtual, e o capítulo que aborda esse assunto está na
subseção Situações em que inteiros e caracteres não se devem misturar, na página 43.
REFERÊNCIAS
0
1 minutos
seõçatona reV
Aula 1
FARRER, H. et al. Algoritmos estruturados. Rio de Janeiro: LTC Editora, 1999.
MIZRAHI, V. V. Treinamento em Linguagem C: módulo 1 e 2. São Paulo: Pearson Prentice Hall, 2007.
Aula 2
FARRER, H. et al. Algoritmos estruturados. Rio de Janeiro: LTC Editora, 1999.
MIZRAHI, V. V. Treinamento em linguagem C: módulo 1 e 2. São Paulo: Pearson Prentice Hall, 2007.
Aula 3
FARRER, Harry; BECKER, Christiano; FARIA, Eduardo; MATOS, Helton; Santos, Marcos Augusto; MAIA, Miriam
L.. Algoritmos Estruturados. Rio de Janeiro: LTC Editora, 1999.
KERNIGHAN, Brian W. e RITCH, Dennis M., C: A Linguagem de Programação, Rio de Janeiro, Campus, 1986.
MIZRAHI, Victorine Viviane. Treinamento em Linguagem C: módulo 1 e 2. São Paulo: Pearson Prentice Hall,
2007; ISBN 9788576051350.
Aula 4
FARRER, H. et al. Algoritmos estruturados. Rio de Janeiro: LTC Editora, 1999.
https://www.colaboraread.com.br/integracaoAlgetec/index?usuarioEmail=natalia.gois.santos%40gmail.com&usuarioNome=NATALIA+GOIS+DOS+SANTOS+LOPES&disciplinaDescricao=&atividadeId=3662478&a… 23/23