Você está na página 1de 23

12/10/2023, 00:37 wlldd_231_u4_alg_log_pro

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

 Aula 3 - Introdução à função e recursividade

 Aula 4 - Registros e arquivos

 Referências

Aula 1

PROGRAMAÇÃO E FUNÇÕES COM VETORES


Nesta unidade estudaremos a sintaxe e a codificação destes vetores, usando a linguagem de
programação C.
33 minutos

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.

Então, estudantes, vamos em frente.

PROGRAMAÇÃO DE VETORES EM UMA PSEUDOLINGUAGEM: PROGRAMAÇÃO


E FUNÇÕES COM VETORES
Caro estudante, o vetor é uma estrutura que permite armazenar vários dados do mesmo tipo em uma
mesma variável.

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.

O vetor também é chamado de estrutura composta homogênea unidimensional, em que:

• Estrutura composta consiste nas várias posições que teremos na variável.

• Homogênea porque estas posições são do mesmo tipo de dado (inteiro, real, caracter).

• Unidimensional porque tem uma única dimensão; o multidimensional é uma matriz.

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.

Exemplo de nome do vetor: Vnota[40];

Exemplo de declaração do vetor: Real Vnota[40];

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.

Figura 1 | Vetor Vnota

Fonte: elaborada pelo autor.

Agora vamos trabalhar com este vetor, usando uma pseudolinguagem, inserindo nas posições do vetor as
notas dos alunos.

A posição que desejamos inserir a nota, colocamos entre os colchetes:

Vnota [ 6 ] = 6,5; // será inserido o valor 6,5 na posição 6 do vetor

Vnota [ 1 ] = 7,8;

Vnota [ 3 ] = 5,3;

Figura 2 | Vetor Vnota

Fonte: elaborada pelo autor.

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;

Leia (A); // supondo que foi informado 5

Vnota[ A ] = 9,8;

Vnota [ A-1 ] = 9,1;

Leia (Vnota [ A+2 ] ); // supondo que foi informado 4,7

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

No final da execução, o vetor ficará da seguinte forma:

Figura 3 | Vetor Vnota

0
seõçatona reV
Fonte: elaborada pelo autor.

PROGRAMAÇÃO DE VETORES NA LINGUAGEM C


Vamos agora aprofundar nossos conhecimentos referentes à codificação de vetores, trabalhando em um
exemplo da codificação do vetor na linguagem de programação C.

Vamos usar o mesmo vetor Vnota que codificamos anteriormente uma pseudolinguagem, mas agora,
vamos implementá-lo na linguagem de programação C.

Para facilitar a aprendizagem, será mostrado o código em C, numerando as linhas do programa e, em


seguida, será comentada cada uma das linhas.

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.

A linha 2 tem a declaração do programa principal e na linha 3 o início do seu bloco.

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.

Dando sequência na codificação do programa do vetor, temos:

9 printf (\"Digite o valor de A: \");

10 scanf(\"%d\",&A);

11 Vnota[A]=9.8;

12 Vnota[A-1]=9.1;

13 printf(\"Digite o valor de Vnota[A+3]: \");

14 scanf(\"%d\",&Vnota[A+3]);

15 printf (\"Valores do vetor:\");

16 for (int x=0;x<10;x++)

17 printf (\"\nVnota[%d] = %.1f\",x,Vnota[x]) ;

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.

Com a execução do programa, a saída que será mostrada será a seguinte:

Figura 4 | Tela do DEV C++ com a saída da execução do programa

Fonte: captura de tela do DEV C++ elaborada pelo autor.

MANIPULAÇÃO DAS VARIÁVEIS DO VETOR


Um algoritmo clássico em que precisamos usar vetor é quando precisamos ler determinados valores, fazer
algum tipo de cálculo com os dados e depois comparar o que foi calculado com os valores lidos. Por
exemplo: lançar as notas dos alunos de uma determinada disciplina e depois mostrar a quantidade de notas
maiores que a média.

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.

O algoritmo que implementa este exemplo segue abaixo:

1 #include <stdio.h>

2 main()

3 {

4 float Vnota[10], somanota=0, media;

5 int somamaior=0;

6 for (int x=0;x<10;x++)

7 {

8 printf (\"Digite a nota %d :\",x+1);

9 scanf(\"%f\",&Vnota[x]);

10 somanota = somanota + 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 }

13 media = somanota / 10;

0
14 printf (\" Media das notas: %.1f\",media);

15 for (int x=0;x<4;x++)

seõçatona reV
16 {

17 if (Vnota[x]>media)

18 somamaior ++;

19 }

20 printf (\"Quantidade de notas maiores que a media: %d\",somamaior);

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;

6 for (int cont=0;cont<5;cont++)

7 soma = soma + vetor[cont];

8 printf(\"Soma dos elementos do vetor: %d\",soma);

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>

10 for (int cont=4;cont>=0;cont--)

11 printf(\"\nElemento %d do vetor: %d\",cont,vetor[cont]);

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

PROGRAMAÇÃO COM MATRIZES


Nesta aula, estudaremos a sintaxe e a codificação de matrizes, usando a linguagem de
programação C.

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.

Nesta aula, estudaremos a sintaxe e a codificação de matrizes, usando a linguagem de programação C.

Vamos ver que a aprendizagem do funcionamento de um vetor estudado anterioriormente é muito


importante para o entendimento de matrizes, por ser uma estrutura composta homogênea que traz uma
maior complexidade na sua codificação.

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.

Então, estudantes, vamos em frente.

DEFINIÇÃO, CARACTERÍSTICAS E SINTAXE DE MATRIZES


Caro estudante, vamos estudar outra forma de organizar os dados dentro de uma estrutura baseada em
matrizes da matemática.

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).

Vamos ver isto no exemplo abaixo:

Exemplo de um vetor com 8 elementos, uma letra em cada posição do vetor:

Figura 1 | Vetor Letras[8]

Fonte: elaborada pela autora.

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.

Figura 2 | Matriz Letras[2,4]

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:

• Elemento da posição da matriz Letra [0,2] = C.

• Elemento da posição da matriz Letra [1,3] = H.

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.

• Letra: nome da variável do tipo matriz.

• 2: quantidade de linhas da matriz

• 4: quantidade de colunas da matriz.

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.

PROGRAMAÇÃO DE MATRIZES NA LINGUAGEM C


Vamos agora aprofundar nossos conhecimentos na codificação de matrizes na linguagem de programação
C.

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.

Para facilitar a aprendizagem, será mostrado o código em C, numerando as linhas do programa e, em


seguida, será comentada cada uma das linhas.

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;

10 printf (\"Digite o valor de X: \");

11 scanf(\"%d\",&X); // Será digitado o valor 2

12 printf (\"Digite o valor de Y: \");

13 scanf(\"%d\",&Y); // Será digitado o valor 1

14 Vnota[x][y]=6.0;

15 Vnota[x][y+1]=3.9;

16 Vnota[x+1][y+2]=7.0;

17 printf(\"Digite o valor de Vnota[9.9]: \");

18 scanf(\"%d\",&Vnota[9][9]; // Será digitado o valor 8.4

22 }

Com a inserção destes elementos na matriz, ela fica desta forma:

Figura 3 | Matriz float Vnota[4,10]

Fonte: elaborada pelo autor

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

Vamos ver este exemplo:

1 for (x=0;x<4;x++)

2 {

0
3 for (y=0;y<10;y++)

4 printf (\"\n Nota: %.2f,\",Vnota[x][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.

Figura 4 | Matriz int M[3,4]

Fonte: elaborada pela autora.

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 {

4 int M[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12},soma=0;

5 for (int x=0;x<3;x++)

6 {

7 for (int y=0;y<4;y++)

8 {

9 if ( y > x)

10 soma= soma + M[x][y];

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 }

13 printf(\"Soma dos elementos:%d\",soma);

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).

Como resultado da execução do programa, teremos: Soma dos elementos: 36

Vamos para um segundo enunciado em que se faz necessário o uso de matriz:

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;

5 for (int x=0;x<3;x++)

6 {

7 for (int y=0;y<3;y++)

8 {

9 printf (\" Valor: \");

10 scanf(\"%d\",&M[x][y]);

11 V[cont]=M[x][y];

12 cont++;

13 }

14 }

15 for (cont=0;cont<9;cont++)

16 printf (\" %d \",V[cont]);

17 }

Na linha 4 do programa, declaramos uma matriz [3][3] e um vetor [9].

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].

A saída para a execução deste programa será a seguinte:

Figura 5 | Tela do DEV C++ com a saída da execução do programa

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.

Aprofunde os seus conhecimentos sobre matrizes aplicadas na matemática e na ciência da


computação, no site do Khanacademy.

Aula 3

INTRODUÇÃO À FUNÇÃO E RECURSIVIDADE


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.
31 minutos

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.

DEFINIÇÃO E EXEMPLO DE FUNÇÕES


Caro estudante, quando precisamos resolver um problema na programação e tentamos dividi-lo em
subproblemas independentes, resolvendo o problema “em pedaços”, de forma mais simples, podemos usar
o recurso chamado de função.

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:

<tipo> nome_da_função (<tipo> parâmetro1,

<tipo> parâmetro2, ..., <tipo> parâmetroN)

<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.

As funções devem ser declaradas antes do programa principal (main).

Exemplo de função:

1 #include

2 int soma(int a, int b)

3 int soma;

4 soma = a + b;

5 return soma;

6 }

7 main() {

8 printf("Soma de 2 numeros: %d",soma(5,10));

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;

A função soma foi invocada no programa principal.

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.

PROGRAMAÇÃO DE FUNÇÕES E RECURSIVIDADE A LINGUAGEM C


Vamos agora aprofundar nossos conhecimentos de funções pré-definidas, dando ênfase às funções
matemáticas, devido a sua importância para a área de engenharia.

Veja abaixo exemplos de funções pré-definidas que estão prontas na biblioteca math.h da linguagem C.

Tabela 1 | Funções pré-definidas da biblioteca math.h

Função Descrição

fmod(dividendo,divisor) Retorna o resto da divisão (float dividendo, float divisor)

abs(numero) Retorna o valor absoluto do número (int numero)

sqrt(numero) Retorna a raiz quadrada do número

modf(num, *inteiro) Separa a parte fracionária da inteira de número

asin(numero) Retorna o arco seno de número

acos(numero) Retorna o arco cosseno de número

atan(numero) Retorna o arco tangente de número

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)

strrev(num) Retorna o inverso do número (número espelhado)

Fonte: elaborada pelo autor.

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() {

4 printf(\"Raiz Quadrada de 9: %d\",sqrt(9));

5 }

Temos outras bibliotecas, com outros tipos de funções pré-definidas, tais como:

1. <stdio.h> Contém funções para entrada e saída de dados.

2. <time.h> Contém funções para manipular horários e datas.

3. <strings.h> Contém funções para manipulação de strings.

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

4. <conio.h> Contém funções para manipulação de vídeo.

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.

Implementação de funções recursivas

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.

EXEMPLOS PRÁTICOS DE RECURSIVIDADE


Estudante, vamos agora aplicar a recursividade nas linguagens de programação, lembrando que, é um
recurso de programação que pode ser usado nas linguagens C, C++, Java, Visual Basic, Python, entre outras.
Aqui continuaremos usando a linguagem de programação C.

As funções recursivas contêm duas partes fundamentais:

1. Ponto de Parada ou Condição de Parada: é o ponto onde a função será encerrada.

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;

16 printf(\"\nA soma de 0 ate 5 = %d \",soma(5));

17 }

Na linha 2 do programa, temos a declaração da função soma.

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.

Na linha 16 temos a chamada da função soma, passando o valor 5 como parâmetro.

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:

Figura 1 | Função Recursiva

Fonte: elaborada pelo autor

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 {

13 int num = 10000;

14 printf(\"Total: %d\",conta(num));

15 }

De uma forma ilustrativa, este programa funcionará da seguinte forma:

Figura 2 | Função recursiva para contar dígitos de um número

Fonte: elaborada pelo autor

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;

printf(\"\nA soma de 0 ate 5 = %d \",soma(5));

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.

DEFINIÇÃO DE REGISTROS E ARQUIVOS


Caro estudante, ao manusearmos dados nos programas, muitas vezes, nos deparamos com informações
que não são simples de armazenar em variáveis homogêneas, como são os tipos inteiros, reais e caracteres,
mas, na verdade, eles são um conjunto de vários dados. Este conjunto de dados passa a ser então composto
com várias variáveis do tipo inteiro, real e caractere que, de alguma forma, são interligadas, formando um
registro.

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.

Por exemplo: vamos definir um registro para representar um determinado produto.

Figura 1 | Registro Produto

Fonte: elaborada pelo autor.

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

Agora vamos atribuir valores para eles:

Figura 2 | Registro Produto

Fonte: elaborada pelo autor.

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.

Existem 2 possibilidades de organização dos arquivos:

1. Sequencial: os registros são inseridos ou consultados no arquivo na ordem sequencial.

2. Direta: o acesso ao registro é feito em ordem aleatória.

Os arquivos podem assumir 2 formatos:

1. Texto: armazena caracteres que podem ser mostrados diretamente na tela ou modificados por editores
de texto simples.

- Exemplos: lista de dados, código C, texto simples, páginas HTML.

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.

- Exemplos: arquivos executáveis ou compactados.

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.

PROGRAMAÇÃO DE REGISTROS NA LINGUAGEM C


Vamos agora aprofundar nossos conhecimentos de registros e arquivos, dando ênfase na programação
destes recursos na linguagem de programação C.

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.

Exemplo de uma declaração de registro:

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;

• “data” é uma etiqueta que dá nome à definição da estrutura;

• 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.

Temos 2 formas de declarar uma variável x como sendo do tipo data:

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.

PROGRAMAÇÃO DE ARQUIVOS NA LINGUAGEM C


Agora vamos complementar os nossos estudos com a codificação para manipular os arquivos na linguagem
de programação C.

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.

Exemplo: FILE *arq;

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.

Exemplo: arq = fopen(nome_arquivo, “modo”);

Onde arq é o ponteiro para o arquivo e modo é a forma como arquivo será acessado, podendo ser das
seguintes formas:

• w: para escrita (cria novo arquivo ou sobrepõe se arquivo já existir);

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

• r: para leitura (arquivo deve existir);

• a: para escrita no final do arquivo, e se não existir cria novo arquivo;

• w+: para leitura e gravação (cria novo arquivo ou sobrepõe se já existir);

• r+: para leitura e gravação (arquivo deve existir);

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);

Onde arq é o ponteiro para o arquivo.

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.

Exemplo: fscanf (arq, "%s", string);

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.

Exemplo: fprintf (arq, "%s", string);

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:

Figura 3 | Representação dos registros em arquivos

Fonte: elaborada pelo autor.

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.

Exemplo de trecho do programa para fazer esta movimentação no arquivo:

1 while (feof(arq)==0) {

2 fscanf(arq, \"%s\", string);

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];

7 arq =fopen (\"exemplo.txt\",\"rt\");

8 if (arq == NULL)

9 {

10 printf (\"Erro na abertura do arquivo. Fim de programa.\");

11 exit (1)

12 }

13 fscanf(arq,\"%s\", texto); /* Lê a primeira linha */

14 while(!feof(arq))

15 {

16 printf(\" %s\",texto); /* Exibe a linha na tela */

17 fscanf(arq,\"%s\", texto); /* Lê a \"próxima\" linha */

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.

Imagem de capa: Storyset e ShutterStock.

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

Você também pode gostar