USF EAD U4 Ferramentas e Técnicas de Programação
USF EAD U4 Ferramentas e Técnicas de Programação
USF EAD U4 Ferramentas e Técnicas de Programação
DE PROGRAMAÇÃO
FABIO ANDRIJAUSKAS
Utilização de Estruturas Heterogêneas na Leitura e Escrita de Arquivos de Dados UNIDADE 4
UTILIZAÇÃO DE ESTRUTURAS
HETEROGÊNEAS NA LEITURA E
4
ESCRITA DE ARQUIVOS DE DADOS
INTRODUÇÃO
Estamos na última etapa na produção de um software e, para finalizar, o ponto mais
importante não está nas “ferramentas” que são necessárias, mas sim como utilizar
e manter tudo de uma maneira organizada. Vamos listar o que é necessário para
construir um software:
a. Trabalhar os dados: variáveis, comandos de repetição e controle;
int vet[ ]
malloc e struct
fwrite e fread.
1. FUNÇÕES
Diversos comandos (scanf(), printf(), strlen(), strcmp(), sin(), cos(), etc.) realizam tare-
fas bastante complexas sobre valores de entrada. Esses comandos são denominados
funções, pois consistem em agrupamentos de instruções assim como a função princi-
pal. Existem muitas funções em C que são de extrema importância e a documentação
desses dados é um pouco “solta”, mas o modelo apresentado na Figura 01 possui uma
grande gama de exemplos.
51
Figura 01. Exemplo de documentação de uma função.
Uma função, portanto, é uma sequência de comandos que pode ser executada
a partir da função principal (ou de qualquer outra função). A função main(), por
exemplo, agrupa as instruções do programa e as funções simplificam a codifica-
ção, permitindo uma melhor estruturação do programa e evitando que uma mesma
sequência de comandos seja escrita diversas vezes no corpo (escopo) da função
principal. A Figura 02 apresenta uma função para calcular o fatorial de um número
(por exemplo, 5! = 5.4.3.2.1)
1. #include <stdio.h>
4 2. double fatorial(int x);
3.
4. double fatorial(int x)
5. {
6. double fat=1;
7. int i;
8. for (i=x; i > 1; i--)
9. {
10. fat = fat * i;
11. return(fat);
12. }
13. }
14. int main()
15. {
16. int c = fat(5);
17. printf(“%i\n”,);
18. }
Fonte: elaborado pelo autor.
53
O tipo do valor retornado pela função deve ser compatível com o tipo da função. Em
outras palavras, os valores de entrada e saída de uma função dos denominados parâ-
metros. Esses parâmetros podem ser de qualquer tipo:
4
` Registros
` Apontadores
` Vetores.
1. double fatorial(int x)
2. {
3. double fat=1;
4. while (x > 1){
5. fat = fat * x;
6. x--;
7. }
8. return(fat);
9. }
Fonte: elaborado pelo autor.
1. #include <stdio.h>
4 2. double fatorial(int x);
3. void troca(int *x, int *y);
4. double fatorial(int x)
5. {
6. double fat=1;
7. while (x > 1){
8. fat = fat * x;
9. x--;
10. }
11. return(fat);
12. }
13. void troca(int *x, int *y)
14. {
15. int aux;
16. aux = *x;
17. *x = *y;
18. *y = aux;
19. }
20. int main()
21. {
22. int n,p,c;
23. scanf(“%d %d” ,&n,&p);
24. if (p > n) troca(&p,&n);
25. if((p >= O)&&(n >= 0) ){
26. c = (int)(fatorial(n)/
(fatorial(p)*(fatorial(n-p))));
27. printf(“%d \n”,c);
28. }
29. return 0;
30. }
Fonte: elaborado pelo autor.
55
SAIBA MAIS
A linguagem C possui diversas funções que podem ser utilizadas, mais informações
4
Disponível em: https://cplusplus.com/reference/cmath/
scalbln: Escala significando usando expoente de base de ponto flutuante (longo) (função)
3. ARQUIVOS
Para utilizar arquivos, existe uma variável para isso: FILE *arquivo; Abertura (e fecha-
4 mento) de arquivos e para fechar o arquivo:
Onde:
` variavel: variável a ser lida do arquivo (tipos básicos ou compostos, porém ape-
nas variáveis, e não vetores);
` t é a quantidade de dados a ser lida (1 para uma só variável, mais para leitura
de vetores);
57
Onde:
` variavel: variável a ser escrita no arquivo (tipos básicos ou compostos, porém
apenas variáveis, e não vetores);
4
` tipo_var: o tipo da variável a ser escrita no arquivo;
` t é a quantidade de dados a ser escrita (1 para uma só variável, mais para leitura
1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <string.h>
4. #define TAM 2
5. struct Elemento
6. {
7. char nome [100];
8. char rua [100];
9. char cidade [100];
10. char estado [2];
11. char cep [10];
12. } Lista [TAM];
13. char menu ();
14. void inicia_lista ();
15. void cadastra ();
16. void mostra ();
17. void salva ();
18. void carrega ();
Fonte: Elaborado pelo autor.
1. int main()
2. {
3. char escolha;
4. inicia_lista();
5. for ( ;; )
6. {escolha = menu();
7. switch (escolha)
8. {case ‘c’:
9. case ‘C’: { cadastra(); } break;
10. case ‘m’:
11. case ‘M’: { mostra(); } break;
12. case ‘s’:
13. case ‘S’: { salva(); } break;
14. case ‘a’:
15. case ‘A’: { carrega(); } break;
16. case ‘t’:
17. case ‘T’: { exit (0 ); } break;
18. default : { printf ( “Opcao invalida. \n” ); }
19. }
20. printf ( “\n \n \n” );
21. }
22. system ( “Pause” );
23. return 0;
24. }
Fonte: Elaborado pelo autor.
59
A Figura 08 apresenta o menu que é chamado na função principal e essa parte consiste
na interface com o usuário. Dessa forma, caso seja necessário fazer alterações na área
que controla a interação com o usuário, é possível com menos interferências do que
quando as funções estão todas juntas. 4
Figura 08. Primeira parte do exemplo completo do sistema.
1. char menu()
1. void mostra()
4 2. {
3. int t;
4. printf (“\n \n \n”);
5. for( t = 0; t < TAM; t++ )
6. {
7. if (!(strcmp(Lista[t].nome, “”)==0) )
8. {
9. printf ( “%s \n”, Lista[t].nome);
10. printf ( “%s \n”, Lista[t].rua);
11. printf ( “%s \n”, Lista[t].cidade);
12. printf ( “%s \n”, Lista[t].estado);
13. printf ( “%s \n”, Lista[t].cep);
14. }
15. printf (“\n”);
16. }
17. }
Fonte: Elaborado pelo autor.
A Figura 10 apresenta como o sistema define os registros inicializados. Dessa forma,
ao tratar dos dados, não existiram dados aleatórios nos vetores e ainda marcam os
registros como vazios.
Figura 10. Primeira parte do exemplo completo do sistema.
void inicia_lista()
{
int t;
for (t = 0; t < TAM; t++)
{
strcpy(Lista[t].nome , “”);
}
}
Fonte: Elaborado pelo autor.
61
A Figura 11 apresenta como é feito o cadastro, onde cada elemento é preenchido pelo
teclado.
Figura 11. Primeira parte do exemplo completo do sistema.
4
void cadastra ()
{
A Figura 12 apresenta como é feito a escrita dos arquivos. Na linha 6 o arquivo é aberto
para escrita e entre as linhas 12 a 19, os vetores de struct são gravados no arquivo.
1. void salva ()
4 2. {
3. FILE *fp;
4. int i, result;
5. printf (“\n \n \n”);
6. fp = fopen (“cadastro”, “wb”);
7. if ( fp == NULL )
8. {
9. printf ( “O arquivo nao pode ser aberto. \n” );
10. return;
11. }
12. for (i = 0; i < TAM; i++ )
13. {
14. if ( !(strcmp(Lista[i].nome, “”)==0) )
15. {
16. result = fwrite ( &Lista[i], sizeof ( struct
Elemento ), 1, fp );
17. if ( result != 1 )
18. {
19. printf ( “Erro de escrita no arquivo. \n”
);
20. }
21. }
22. }
23. fclose (fp);
24. }
Fonte: Elaborado pelo autor.
A função carrega faz o mesmo processo da função salva, porém ele faz a leitura de
cada item.
63
Figura 13. Primeira parte do exemplo completo do sistema.
void carrega ()
{ 4
FILE *fp;
4. RECURSÃO
Recursão é uma parte fundamental na programação, visto que um programa recursivo é
um programa que chama a si mesmo. Logo, uma função recursiva é definida em termos
4 dela mesma, ou seja, uma função que chama a si própria.
` Exemplos:
Números naturais, Função fatorial, Árvore.
A recursividade é uma forma que pode ser utilizada quando o cálculo de uma função para o
valor n pode ser descrito a partir da operação desta mesma função para o termo anterior (n-1).
Figura 14. Exemplo – Função fatorial
Quando dentro do corpo de uma função chama-se novamente a própria função, deno-
minamos definição. A recursão direta é quando a função A chama a própria função
A. Já a recursão indireta é quando a função A chama uma função B que chama A.
Nenhum programa e nenhuma função podem ser exclusivamente definidos por si. Além
disso, se torna necessário uma condição de parada.
Para cada chamada de uma função, recursiva ou não, os parâmetros e as variáveis
locais são empilhados na pilha de execução. Quando qualquer chamada de função é
feita dentro de um programa, é criado uma pilha de execução do programa.
Figura 15. Função fatorial recursiva
1. Fat (int n) {
2. if (n<=0)
3. return 1;
4. else
5. return n * Fat(n-1);
6. }
7. Main() {
8. int f;
9. f = fat(5);
10. printf(“%d”,f);
11. }
Fonte: Elaborado pelo autor.
65
Figura 16. Função fatorial iterativo
` F0 = F1 = 1
1. int Fib(int n) {
2. if (n<2)
3. return 1;
4. else
5. return Fib(n-1) + Fib(n-2);
6. }
Fonte: Elaborado pelo autor.
SAIBA MAIS
A recursividade consiste em uma forma de programação poderosa que pode criar diversas
formas de código, como o ilustrado na Figura 18.
4
Figura 18. Desenho das formas dos códigos na programação
5. PROJETO DE SOFTWARE
O projeto de software é algo muito importante. Veja, a seguir, notícias de casos que
envolvem o seu uso.
“A Anac acredita que o caos foi provocado por uma falha no software da Gol que calcula a
carga horária de trabalho dos funcionários, como disse a empresa.”
67
FALHA EM SOFTWARE DE DIFUSÃO DE DADOS CAUSOU PARADA DA BOVESPA HOJE
“De acordo com nota divulgada pela instituição, houve falha em software licenciado da NYSE 4
Euronext, utilizado para difusão de dados e envio de mensagens de confirmação de execu-
ção de ordens.”
` De que forma devo produzir um software que depois de 30 anos de sua criação
seja passível de manutenção?
` Como gerar documentação para que o software seja produzido de forma correta?
` ao desenvolvedor ter uma base para produzir software de alta qualidade de ma-
neira produtiva
` Rigor e Formalidade
` Decisões focadas
hw sw
Alteração
Mortalidade
Taxa de falhas
Taxa de falhas
infantil Desgaste
Real
0
0
0
Ideal
Tempo
CONCLUSÃO
Para que seja possível construir um sistema completo são necessários vários elementos:
69
REFERÊNCIAS BIBLIOGRÁFICAS.
Andrijauskas, Fabio, Programação orientada a objetos II Londrina: Editora e Distribuidora Educacional
S.A.,2018. 240
4
DEITEL, Paul; DEITEL, Harvey. C Como Programar. 6. ed. São Paulo: Prentice Hall, 2011.
Feofiloff, Paulo. Algoritmos em linguagem C. Rio de Janeiro: Elsevier, 2009. 208 p. ISBN 978-85-352-3249-3.
Mokarzel, Fábio; Soma, Nei. Introdução à ciência da computação. Rio de Janeiro: Elsevier, 2008. 429 p. ISBN
978-85-352-1879-4.
MANZANO, José Augusto Navarro G. Estudo Dirigido de Linguagem C. [Digite o Local da Editora]: Edi-
tora Saraiva, 2002. 9788536519128. E-book. Disponível em: https://integrada.minhabiblioteca.com.br/#/
books/9788536519128/. Acesso em: 15 ago. 2022.
PRESSMAN, Roger S.; MAXIM, Bruce R.. Engenharia de software: uma abordagem profissional. 8 ed. Porto
Alegre: AMGH, 2016. 940 p.
71