LÓGICA DE PROGRAMAÇÃO³gica de Programação/Apostila_de... · 5 PLANO DE ENSINO 2º SEMESTRE...
Transcript of LÓGICA DE PROGRAMAÇÃO³gica de Programação/Apostila_de... · 5 PLANO DE ENSINO 2º SEMESTRE...
1
UNIGUAÇU – UNIDADE DE ENSINO SUPERIOR VALE DO IGUAÇU
FACULDADES INTEGRADAS DO VALE DO IGUAÇU
LÓGICA DE PROGRAMAÇÃO
PROF. CLEVERSON BÚSSOLO KLETTENBERG
União da Vitória
2017
2
PLANO DE ENSINO 1º SEMESTRE
EMENTA
Introdução a Algoritmos, Português Estruturado, Variáveis e Operadores Matemáticos e Lógicos,Estrutura de um programa de computador, Procedimentos e Funções, Tipos de dados.
OBJETIVO GERAL
Instruir os conceitos básicos de algoritmos de programação, familiarizando os acadêmicos com osrecursos computacionais na resolução de problemas reais. Com a utilização de pseudocódigos ouportuguês estruturado, aplicar tanto prática como teoricamente, as estruturas básicas deprogramação de computadores. A aplicação da ementa servirá como manual introdutório para asdemais disciplinas que tratarão de análise e desenvolvimento de sistemas computacionais.
OBJETIVOS ESPECÍFICOS
• Incentivar os acadêmicos a raciocinarem logicamente na resolução dos problemaspropostos, utilizando, de forma adequada, os recursos da linguagem de programação.
• Propor aos acadêmicos a tomada de iniciativa própria, a criatividade e a pesquisa, itensindispensáveis para o desenvolvimento e capacitação profissional na área de sistemas deinformação.
CONTEÚDO PROGRAMÁTICO
Conteúdo C.H.
1.INTRODUÇÃOConceitoTipos de algoritmosDescrição geral dos algoritmos
8
2. LÓGICA DE PROGRAMAÇÃOFormas de representação gráficaPrincípios de resolução de problemasTipos de variáveisUso de ConstantesFórmulas matemáticasInstruções básicas
10
3. TOMADAS DE DECISÃODesvio condicional simplesDesvio condicional compostoDesvio condicional encadeadosPrática com Linguagem Pascal
18
4.LAÇOS DE REPETIÇÃOLooping com teste lógico no inícioLooping com teste lógico no fimLooping com variável de controlePrática com Linguagem Pascal
20
5. MATRIZESMatrizes de uma dimensão ou vetoresBuscas e ordenaçãoMatrizes com mais de uma dimensãoPrática com Linguagem Pascal
16
3
METODOLOGIA DE ENSINO
O método de ensino propõe problemas com a finalidade de desafiar o estudante a utilizarconhecimentos já adquiridos em busca de uma adaptação a uma situação nova. A intervenção doprofessor é no sentido de pequenas ajudas, devolução de questões, evidenciar falhas e prepararpara novas estratégias. As situações didáticas devem favorecer o compartilhamento doconhecimento, a discussão e a ação por parte dos estudantes. Também serão utilizados exemplospráticos e concretos em problemas diversos.
ATIVIDADES DISCENTES
• Os alunos devem desenvolver atividades relacionadas ao conteúdo que simulam situaçõesreais no desenvolvimento de sistemas orientados a objetos.
• Fazer a análise de softwares utilizados em empresas com intuito de criar idéias e as por emprática.
• Desenvolver pesquisas bibliográficas e on-line.• Desenvolver soluções para problemas apresentados em aula, utilizando conhecimentos
adquiridos.
PROCEDIMENTOS DE AVALIAÇÃO
Avaliações Bimestrais - As avaliações serão de forma contínua pela participação dos alunos nasatividades de classe, com peso de 30% da nota integral. Trabalhos feitos no laboratório eatividades extra classe, individualmente ou em grupo de estudos, com peso de 10% da notaintegral. Uma prova bimestral para reconhecimento da fixação do conteúdo, com valor de 60% danota integral.Avaliações Bimestrais - As avaliações serão de forma contínua pela participação dos alunos nasatividades de classe, com peso de 30% da nota integral. Trabalhos feitos no laboratório eatividades extra classe, individualmente ou em grupo de estudos, com peso de 10% da notaintegral. Uma prova bimestral para reconhecimento da fixação do conteúdo, com valor de 60% danota integral.
BIBLIOGRAFIA BÁSICA
FORBELLONE, A. L. V. ; EBERSPACHER, H. F. Lógica de programação. 2.ed. São Paulo:Makron Books, 2000. 3ex.MANZANO, J.A.N.G. ; YAMATUMI, W. Y. Estudo dirigido de algoritmos. São Paulo:Érica,1997. 3ex.LOPES, Anita; GARCIA, Guto. Introdução a Programação – 500 algoritmos resolvidos. Rio deJaneiro: Campus, 2002. 3exWOOD, S. Turbo pascal: guia do usuário. São Paulo: Mcgraw-Hill do Brasil, 1987. 1ex.
BIBLIOGRAFIA COMPLEMENTAR
GOODRICH, M. ; TAMASSIA R. Estruturas de Dados e Algoritmos em Java. São Paulo:Bookman, 2002. 6ex.BEZERRA, Eduardo. Princípios de Análise e Projeto de Sistemas Com UML. Rio de Janeiro:Campus, 2003. 6ex.WORTMAN, L. A. Programando em turbo pascal:com aplicações. Rio de Janeiro: Campus,1988. 1ex.LAURA, Lemay. Aprenda em 21 dias Java 2. São Paulo: Campus, 2003. 3 ex.SANTOS, Rafael. Introdução à Programação Orientada a Objetos Usando Java. São Paulo:Campus, 2003. 3ex.NIEMEYER, Patrick. Aprendento Java. São Paulo: Campus, 2000. 3ex
4
5
PLANO DE ENSINO 2º SEMESTRE
EMENTA
Lógica de programação avançada incluindo sub-rotinas, registros, eficiência e correção. Análise dealgoritmos de programação estruturados. Aplicação em uma linguagem de programação.
OBJETIVO GERAL
Desenvolver ao aluno habilidades técnicas necessárias ao conhecimento de teorias paracomposição de programas.
OBJETIVOS ESPECÍFICOS
CONTEÚDO PROGRAMÁTICO
Conteúdo C.H.
1. Estruturas de dadosMatrizes unidimensionais e multidimensionaisRegistrosMatrizes de registros e registros de matrizesArmazenamento permanente de dados utilizando arquivos
30
2. Modularização de programasProcedimentos e funçõesPassagem de parâmetrosUnitsExercícios de programação
26
3. Análise de AlgoritmosBuscaMétodos de Ordenação
8
4. Utilização de Arquivos e Noções de Ìndices 12
METODOLOGIA DE ENSINO
O método de ensino é baseado na Teoria das Situações de Guy Brousseau (1996. Recherches enDidactique des Mathématiques, vol.9, n.3) em que problemas são propostos com a finalidade dedesafiar o estudante a utilizar conhecimentos já adquiridos em busca de uma adaptação a umasituação nova. A intervenção do professor é no sentido de pequenas ajudas, devolução de questões,evidenciar falhas e preparar para novas estratégias. As situações didáticas devem favorecer ocompartilhamento do conhecimento, a discussão e a ação por parte dos estudantes. Também serãoutilizados materiais concretos em problemas diversos, proporcionando uma mudança de contratodidático.
ATIVIDADES DISCENTES
• Os alunos devem desenvolver atividades relacionadas ao conteúdo que simulam situaçõesreais no desenvolvimento de sistemas orientados a objetos.
• Fazer a análise de softwares utilizados em empresas com intuito de criar idéias e as por emprática.
• Desenvolver pesquisas bibliográficas e on-line.• Desenvolver soluções para problemas apresentados em aula, utilizando conhecimentos
adquiridos.
6
PROCEDIMENTOS DE AVALIAÇÃO
Avaliações Bimestrais - As avaliações serão de forma contínua pela participação dos alunos nasatividades de classe, com peso de 30% da nota integral. Trabalhos feitos no laboratório eatividades extra classe, individualmente ou em grupo de estudos, com peso de 10% da notaintegral. Uma prova bimestral para reconhecimento da fixação do conteúdo, com valor de 60% danota integral.
BIBLIOGRAFIA BÁSICA
DEITEL, H. M. Java Como Programar 4 ed, Porto Alegre: Bookman, 2003. 6ex.LOPES, Anita GARCIA Guto. Introdução a Programação- 500 algoritmos resolvidos. Rio deJaneiro: Campus, 2002.
BIBLIOGRAFIA COMPLEMENTAR
LAURA, Lemay. Aprenda em 21 dias Java 2. São Paulo: Campus, 2003. 3 ex.SANTOS, Rafael. Introdução à Programação Orientada a Objetos Usando Java. São Paulo:Campus, 2003. 3ex.NIEMEYER, Patrick. Aprendento Java. São Paulo: Campus, 2000. 3ex
7
SUMÁRIO1. INTRODUÇÃO................................................................................................................................7
1.1. Conceito de Algoritmo..............................................................................................................72. LÓGICA DE PROGRAMAÇÃO.....................................................................................................9
2.1. Formas de Representação Gráfica............................................................................................92.2. Princípios de Resolução de Problemas.....................................................................................92.3. Tipos de Variáveis...................................................................................................................122.4. Uso de Constantes...................................................................................................................132.5. Operadores Aritméticos..........................................................................................................132.6. Fórmulas Matemáticas............................................................................................................132.7. Instruções Básicas...................................................................................................................13
3. TOMADAS DE DECISÃO............................................................................................................163.1. Operadores Relacionais..........................................................................................................16
3.1.1. Operador lógico .e...........................................................................................................163.1.2. Operador lógico .ou.........................................................................................................163.1.3. Operador lógico .não.......................................................................................................16
3.2. Desvio Condicional Simples...................................................................................................173.3. Desvio Condicional Composto...............................................................................................173.4. Desvio Condicional Encadeados............................................................................................18
4. LAÇOS DE REPETIÇÃO..............................................................................................................204.1. Looping com Teste Lógico no Início......................................................................................204.2. Looping com Teste Lógico no Fim.........................................................................................204.3. Looping com Variável de Controle.........................................................................................21
5. MATRIZES.....................................................................................................................................235.1. Matrizes de uma Dimensão ou Vetores...................................................................................235.2. Matrizes com Mais de uma Dimensão....................................................................................26
6. BUSCAS E ORDENAÇÃO DE MATRIZES................................................................................296.1. Busca Sequencial....................................................................................................................296.2. Algoritmos de Busca B-SEARCH..........................................................................................296.3. Ordenação...............................................................................................................................29
7 – UTILIZAÇÃO DE SUBROTINAS.............................................................................................317.1. O Método da Recursividade...................................................................................................32
8 - REGISTROS.................................................................................................................................349. ARQUIVOS....................................................................................................................................36
9.1. Abrindo e Fechando Arquivos................................................................................................369.1.1 Modo de abertura de arquivos..........................................................................................369.1.2. Movimentação do ponteiro ou cursor.............................................................................37
9.2. Arquivos de Strings.................................................................................................................379.3. Arquivos de Registros.............................................................................................................38
1. INTRODUÇÃO
1.1. Conceito de Algoritmo
É um processo de cálculo matemático ou de resolução de um grupo de problemas
semelhantes, em que se estipulam, com generalidade e sem restrições. Podemos dizer também, que
são regras formais para obtenção de um resultado ou da solução de um problema, englobando
fórmulas de expressões aritméticas.
A técnica mais importante no projeto da lógica de programas é chamada programação
estruturada, a qual consiste em uma metodologia de projeto, objetivando:
Agilizar a codificação da escrita da programação;
Permitir a verificação de possíveis falhas apresentadas pelos programas;
Facilitar as alterações e atualizações dos programas.
fim
a bagaça funciona?
nem relavc que
estragou o treco?
seu imbecil
SEM PROBLEMAS
se ferrou!!!
inicio
nãosim
sim
alguem sabe q foi
vc
dá prá jogar a
culpa em alguem?
alguem pode te culpar?
não
sim
não
sim
sim
esconda
não
não
9
Exemplo de solução de problema por um fluxograma (com erros mas bem divertido)
Baseado no exemplo acima, como seria um algoritmo para descascar
batatas?
10
2. LÓGICA DE PROGRAMAÇÃO
2.1. Formas de Representação Gráfica
São vários os símbolos utilizados na programação estruturadas, a seguir, uma relação das
simbologias mais utilizadas:
Terminal: indica o início ou o fim de um programa
Conector: serve para a união dos fluxos de informações
Entrada: indica a entrada de informações passadas pelo usuário, seja por
escâner, teclado, mouse ou qualquer dispositivo de entrada
Processamento: utilizado para fazer cálculos e atribuição de valores
Saída: indica a saída de informações processadas para o usuário por
qualquer dispositivo de saída como monitor, impressora, etc.
Condição: indica a divisão do fluxo por uma determinada condição.
Seta de fluxo de informações: indica o caminho que o processamento pode
tomar.
2.2. Princípios de Resolução de Problemas
Para desenvolver um fluxograma (diagrama de bloco) correto, devemos levar como
procedimentos prioritários, os itens a seguir:
1 – Os diagramas de blocos devem ser feitos e quebrados em vários níveis. Os primeiros
devem conter apenas as ideias gerais, deixando para as etapas posteriores os detalhamentos
necessários;
11
2 – Para o desenvolvimento correto de um diagrama de bloco, sempre que possível deve
ser feito de cima para baixo e da esquerda para a direita;
3 – É incorreto ocorrer cruzamento das linhas de fluxo de dados de um diagrama de
bloco.
4 – Transcrever o diagrama de bloco em português estruturado (pseudolinguagem)
Tomemos como exemplo uma escola qualquer, onde o cálculo da média é realizado por
duas notas bimestrais que determinam a aprovação ou reprovação dos seus alunos. Considere ainda,
que o valor da média deve ser maior ou igual a 7 para que haja aprovação.
12
A primeira etapa se inicia e termina com umterminador e existe apenas um processamentoque indica a ideia geral do problema:
O segundo detalhamento está no que se refere aentrada e saída dos dados do problema:
A terceira etapa consiste em trabalhar o termo“determinar a aprovação”. Para ser possíveldeterminar algo é necessário estabelecer umacondição. Esta condição decide sobre oresultado da aprovação:
Esta terceira etapa deve ser aperfeiçoada paratrabalhar com variáveis.
INÍCIO
Solicitar 2 notas
calcular média edeterminar aprovação
Apresentar se aprovou ou reprovou
FIM
INÍCIO
ler(n1,n2)
md:=(n1+n2)/2
Escreva('Aprovado')
FIM
Semd>= 7
Escreva('Reprovado')
INÍCIO
Solicitar 2 notas
calcular média
ApresentarAprovado
FIM
Semédia maiorou igual a 7
ApresentarReprovado
CALCULAR MÉDIA E DETERMINAR
APROVAÇÃO
INÍCIO
FIM
13
A Quarta fase consiste em escrever o diagrama de bloco de forma narrativa denominadapseudocódigo.
Programa médiaVar
n1,n2,md : realInicio
Ler(n1,n2)md:=(n1+n2)/2Se (md >=7) então
escreva('Aprovado')Senão
escreva('Reprovado')Fim_se
fim
2.3. Tipos de Variáveis
Tipos Inteiros: São tipos inteiros, os dados numéricos positivos ou negativos, excluindo-
se, destes qualquer fracionário. Como exemplo deste tipo de dado, têm-se os valores : 35,0,-56;
Tipos Reais: São tipos reais, os dados numéricos positivos, negativos e números
fracionários. Ex. : 35,0,-56,1.2,-45.897
Tipos Caracteres: São caracteres, as sequências contendo letras, números e símbolos
especiais. Uma sequência de caractere deve ser indicada entre aspas(“”). Ex.:
“PROGRAMAÇÃO”,”Rua Alfa”,” “,”98”.
Tipos Lógicos: São tipos lógicos ou boleanos, os dados com valores verdadeiro ou falso,
e deve ser escrito entre pontos. Ex.: .Falso.,.Verdadeiro..
O nome de uma variável é utilizado para sua identificação e posterior uso dentro de um
programa, sendo assim, é necessário estabelecer algumas regras de utilização das mesmas:
Nomes de variáveis poderão ser atribuídos com um ou mais caracterres;
O primeiro caractere do nome de uma variável não poderá ser em hipótese alguma,
um número, sempre deverá ser uma letra;
O nome de uma variável não poderá possuir espaços em branco;
Não poderá ser nome de uma variável, uma instrução de programa;
14
Não poderão ser utilizados outros caracteres a não ser letras e números. Obs.: o
caracter “_” Under-line ou sub-linha é considerado uma letra.
2.4. Uso de Constantes
Tem-se como definição de constante tudo aquilo que é fixo ou estável. E existirão vários
momentos em que este conceito deverá estar um uso. Por exemplo, o valor 1.23 da fórmula a seguir
é uma constante: RESULTADO=ENTRADA*1.23.
2.5. Operadores Aritméticos
Operador Operação Prioridade Matemática+ Manutenção de sinal (números positivos 1- Inversão de sinal (números negativos) 1^ Exponenciação 2/ Divisão 3* Multiplicação 3+ Adição 4
- Subtração 4
2.6. Fórmulas Matemáticas
Na programação é comum usar fórmulas matemáticas, mas para facilitar a escrita da
programação as fórmulas são escritas de uma forma diferenciada, como mostrados nos exemplos a
seguir:
(Exemplificar a fórmula do raio e da área)
2.7. Instruções Básicas
Cada linguagem de programação usa um conjunto de palavras onde cada uma desenvolve
uma ação. Estas palavras reservadas de cada linguagem são conhecidas como comandos ou
instruções. Daqui para frente vamos utilizar instruções em português estruturado, tais como : inicio,
fim, var , programa, enquanto, se, então, senão, para, escreva, leia, faça, repita e até que, entre
outras que serão estudadas.
15
Exemplo de algorítmo
• Ler dois valores
• Efetuar a soma destes valores
• Apresentar o resultado
Exercícios
1 – Indique o tipo de variável que poderão armazenar os valores abaixo.
I : inteiro; R : real; S : String ou Literal ou Caractere; L : Lógico ou Booleano.
( )1000 ( ) “0” ( ) “-900” ( ).Verdadeiro.
( )-456 ( )34 ( )”Casa 8” ( )0
( )-1.56 ( )”.falso.” ( )1.87 ( ).F.
2 – Assinale com V ou F considerando se os nomes de uma variável são válidos ou não.
( )Endereco ( )21brasil ( )Fone$com
( )NomeUsuario ( )Nome_usuario ( )Nome*usuario
( )End-A ( )Cidade3 ( )#Cabec
( )23 ( )N23
3 – Desenvolva a lógica de um programa que efetue o cálculo da área de uma
circunferência, apresentando a medida da área calculada.
Fórmula : Area=Pi*Raio^2
4 – Elaborar um algoritmo que calcule o salário de um professor onde o usuário deverá
entrar com o número de aulas dadas, o valor da hora aula e o percentual de desconto do INSS.
5 – Ler dois valores A e B, efetuar a troca dos valores de forma que a variável A passe a
possuir o valor da variável B e que a variável B passe a possuir o valor da variável A. Apresentar os
valores trocados
16
6 – Ler dois valores A e B, efetuar as operações de adição, subtração, multiplicação e
divisão de A por B, apresentando no final os quatro resultados obtidos.
7 – Efetuar o cálculo do valor de uma prestação em atraso, utilizando a fórmula:
PRESTAÇÃO:=VALOR+(VALOR*(TAXA/100)*TEMPO).
8 – Indique o tipo de variável que poderão armazenar os valores abaixo.
I : inteiro; R : real; S : String ou Literal ou Caractere; L : Lógico ou Booleano.
( )-900 ( )0 ( ) “-900” ( ).Verdadeiro.
( )4.54 ( )34 ( )”.falso.” ( )”Real”
9 – Assinale com X os nomes válidos de uma variável
( ) Dia 21 ( )7quedas ( )C/C
( )x*y ( )Senha_conta2 ( )Nome Cliente
17
3. TOMADAS DE DECISÃO
Você já aprendeu como trabalhar com entrada, processamento e saída. Apesar de já
conseguir solucionar problemas e transformá-los em programas, os recusrsos aqui estudados são
limitados, pois haverá momentos em que um determinado valor dentro de um programa necessitará
ser tratado para se efetuar um processamento mais adequado.
Para aprendermos desvio condicional devemos conhecer os operadores utilizados para se
estabelecer uma condição. São eles:
3.1. Operadores Relacionais
Simbolo Significado= Igual a<> Diferente de> Maior que< Menor que>= Maior ou igual a <= Menor ou igual a
3.1.1. Operador lógico .e.
Condição1 Condição 2 ResultadoF F FV F FF V FV V V
3.1.2. Operador lógico .ou.
Condição1 Condição 2 ResultadoF F FV F VF V VV V V
3.1.3. Operador lógico .não.
Condição ResultadoV FF V
18
3.2. Desvio Condicional Simples
Imagine a seguinte situação: um programa que apresente a média escolar de um aluno.
Baseado em sua média, se o aluno tiver nota maior ou igual a 7 devera apresentar uma mensagem
parabenizando o aluno.
Para solucionar o problema proposto será necessário trabalhar uma nova instrução:
SE...ENTÃO...FIM_SE. Esta instrução tem por finalidade tomar uma decisão. Sendo a condição
verdadeira, serão executadas todas as instruções que estejam entre a instrução se...então e a
instrução fim_se.
Sintaxe :
SE <condição> ENTÃO <instruções para condição verdadeira>FIM_SE<instruções executadas se a condição for falsa ou após condição ser verdadeira>
Exemplo : elaborar um programa que pessa dois valores para as variáveis A e B. Efetuar a
soma dos dois valores. Apresentar o resultado se a soma for maior que 10.
Exercício
1 – Efetuar a leitura de um número inteiro positivo ou negativo e apresentá-lo como
sendo positivo.
3.3. Desvio Condicional Composto
O desvio condicional composto utiliza a estrutura SE...ENTÃO...SENAO...FIM_SE,
como mostra a sintaxe :
SE <condição> ENTÃO <instruções para condição verdadeira>SENAO <instruções para condição falsa>FIM_SE
Exemplo : Ler duas notas bimestrais, calcular a média. Se a nota for maior ou igual a 7
apresentar “aprovado” senão, “reprovado”
19
Exercícios :
1 – Determine o resultado lógico das expressões abaixo baseado nos seguintes valores:
X=1, A=3,B=5,C=8 e D=7.
.não.(x>3) (X<>1).e..não.(b>d) .não.(d<0).e.(c=5)
.não(x>3).ou.(a+c<7) (a<>b).ou.(c=5) a>b>c
.não.(d>3).ou..não.(b<7) (x-1<1).e.(b>=d) a>b e c
2 – Efetuar a leitura de dois valores e apresentá-los em ordem crescente.
3 – Efetuar a leitura de três valores (a,b,c) e efetuar o cálculo da equação de segundo
grau, apresentando as duas raízes, se para os valores informados for possível efetuar o referido
cálculo.
3.4. Desvio Condicional Encadeados
Sintaxe :
SE <condição> ENTÃO SE <condição> ENTÃO <instruções para condição verdadeira> SENAO <instruções para condição falsa> FIM_SESENAO SE <condição> ENTÃO <instruções para condição verdadeira> SENAO <instruções para condição falsa> FIM_SEFIM_SE
Exemplo : Ler 2 notas escolares de um aluno. Se o a média do aluno for maior ou igual a
7 apresentar a média e uma mensagem dizendo que foi aprovado, senão, efetuar a leitura da nota do
20
exame, somar à média e dividir por dois, se a média do exame for maior ou igual a 5 apresentar a
média e uma mensagem dizendo que está aprovado no exame, senão apresentar uma mensagem que
está reprovado.
Exercícios:
1 – Elaborar um programa que efetue o cálculo do reajuste de salário de um funcionário.
Considere que o funcionário deverá receber um reajuste de 15% caso seu salario seja menor que
500. Se o salario for maior ou igual a 500 e menor ou igual a 1000, seu reajuste será de 10%, e caso
seja ainda maior que 1000, o reajuste deverá ser de 5%.
• ler um valor para o salario
• verificar se o valor de salario < 500; se sim, reajustar em 15%
• verificar se o valor de salario <=1000; se sim, reajustar em 10%
• verificar se o valor de salario > 1000; se sim, reajustar em 5%
• apresentar o valor reajustado.
2 – O programa abaixo serve para cálculo do IMC (Índice de Massa Corporal). Execute o
teste de mesa, encontre o erro lógico e o erro de sintaxe.
Programa calculaimc;var imc,peso,altura: real;inicio ler(peso,altura); imc=peso/(altura*altura); escreva(‘Seu imc é = ‘,imc); se imc < 18.5 então escreva(‘Abaixo do peso’); senao se imc>= 18.5 ou imc < 25 escreva(‘Peso normal’); senao escreva(‘Acima do peso’); fim_se; fim_se;fim.
3 – Efetuar a leitura de três valores (a,b,c) apresentá-los em ordem crescente.
4 – Efetuar a leitura de 3 números inteiros e apresentar os que são divisíveis por 2 ou 3.
5 – Ler Hora e Minuto de início e fim de um jogo de xadrez. Calcular o tempo do jogo. (o
jogo não dura mais que 24h)
21
4. LAÇOS DE REPETIÇÃO
4.1. Looping com Teste Lógico no Início
Este tipo de estrutura efetua um teste lógico no início do looping, verificando se é
permitido executar o trecho de intruções subordinado a este looping. Esta estrutura é conhecida
como: enquanto, através do conjunto de instruções ENQUANTO...FAÇA...FIM_ENQUANTO.
Esta estrutura, tem o seu funcionamento controlado por decisão, podendo executar um
determinado conjunto de instruções enquanto a condição verificada for verdadeira. No momento em
que esta condição se torna falsa o processamento da rotina é desviado para fora do looping.
SINTAXE:
ENQUANTO <condição> FAÇA <conjunto de instruções para condição verdadeira>FIM_ENQUANTO
Exemplo: Um programa que mostra os números de 1 a N, onde N é um número
informado pelo usuário.
Exercícios:
1 - Apresentar todos os valores numéricos inteiros ímpares situados na faixa de 0 a 20.
2 – O que o programa abaixo faz e qual seu resultado?
Programa fazcoisas;var x,c : inteiro;inicio c:=1; x:=0; enquanto c<=7 faça x:=x+c; c:=c+2; fim_enquanto; escreva(x);fim.
3 - Apresentar os resultados de uma tabuada de um número apresentado pelo usuário.
Todo o programa deve se repetir enquanto o usuário desejar.
22
4 – Determinar a aprovação de um aluno, enquanto o usuário desejar.
5 – Desenvolva um algoritmo que solicite do usuário o valor em R$. Apresentes quantas
notas e moedas serão necessárias para atingir este valor. As notas/moedas disponíveis são: 10; 5; 1;
0,50; 0,10; 0,01
4.2. Looping com Teste Lógico no Fim
Caracteriza-se por uma estrutura que efetua um teste lógico no fim de um looping,
denominada repita, sendo conseguida com a utilização do conjunto de instruções repita...até_que.
A estrutura repita...até_que tem o seu funcionamento controlado também por decisão,
porém irá efetuar a execução de um conjunto de instruções pelo menos uma vez antes de verificar a
validade da condição estabelecida. Diferente da estrutura enquanto que execugta somente um
conjunto de instruções, enquanto a condição é verdadeira.
Exemplo: Apresentar o total da soma obtido dos cinco primeiros números inteiros.
Exercícios:
1. Apresentar a tabuada de um número qualquer. Todo o programa deve se repetir
enquanto o usuário desejar.
2. Desenvolva um programa que solicite do usuário o valor de uma dívida até que o valor
esteja entre 500 e 100000. Apresentar o valor de cada prestação de 1 a 6 parcelas acrescentando a
cada uma 1% de juros.
4.3. Looping com Variável de Controle
Os loopings que possuem um número finito de execuções poderão ser processados através
de estrutura para, sendo conseguida com a utilização das instruções
para...de...até...passo...faça...fim_para.
Esta estrutura tem o seu funcionamento controlado por uma variável denominada
contador. Sendo assim, poderá executar um determinado conjunto de instruções um determinado
número de vezes.
23
Sintaxe:
PARA <variável> DE <início> ATÉ <fim> PASSO <incremento> FAÇA <instruções>FIM_PARA
Exemplo : Apresentar todos os valores numéricos inteiros ímpares situados na faixa de
1000 a 1500.
Exercícios:
a) Apresentar o total da soma obtido de N números inteiros onde N é um número digitado
pelo usuário.
b) Apresentar a tabuada de um número qualquer.
c) Apresentar os números divisíveis por 3 que sejam menores que 12.
d) (questão de concurso) Em matemática, a Sucessão de Fibonacci (também Sequência
de Fibonacci), é uma sequência de números inteiros, começando normalmente por 0 e 1, na qual,
cada termo subsequente corresponde a soma dos dois anteriores. A sequência recebeu o nome do
matemático italiano Leonardo de Pisa, mais conhecido por Fibonacci, que descreveu, no ano de
1202, o crescimento de uma população de coelhos, a partir desta.
Os números de Fibonacci são, portanto, os números que compõem a seguinte sequência:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, … (podendo ser omitido o zero inicial).
Construa um programa que apresente a sequência fibonacci até o número digitado pelo
usuário.
e) (questão de concurso) O fatorial de um número é a multiplicação de todos os números
inteiros que o antecedem, exemplo: O fatorial de 4 é 1 * 2 * 3 * 4 = 24. Construa um programa que
solicite do usuário um número e apresente o fatorial deste número.
f) Números primos são aqueles que só são divisíveis por 1 e por ele mesmo. Desenvolva
um programa que solicita um número do usuário e apresente todos os números primos de 1 até o
número digitado.
24
5. MATRIZES
As matrizes consistem em uma técnica de programação que permite trabalhar com o
agrupamento de várias informações dentro de uma mesma variável. Este agrupamento ocorrerá
obedecendo sempre ao mesmo tipo de dado, e por esta razão é chamado de estruturas de dados
homogêneas ou matriz.
5.1. Matrizes de uma Dimensão ou Vetores
Este tipo de estrutura é também denominado por alguns como matrizes unidimensionais.
Sua utilização mais comum está vinculada à criação de tabelas. Caracteriza-se por ser definida uma
única variável dimensionada com um determinado tamanho. A dimensão de uma matriz é
constituída por constantes inteiras e positivas. Os nomes dados às matrizes seguem as mesmas
regras de nomes utilizados para indicar as variáveis simples.
Para se Ter uma ideia de como utilizar matrizes em uma determinada situação, considere
o seguinte problema: “Calcular e apresentar a média geral de uma turma de 8 alunos. A média a ser
obtida deve ser a média geral das médias de cada aluno obtida durante o ano letivo”. Desta forma
será necessário somar todas as médias e dividi-las por 8. A tabela a seguir, apresenta o número de
alunos, suas médias e respectivas médias anuais.
ALUNO MÉDIA1 4.52 6.53 8.04 6.55 6.06 7.07 6.58 6.0
Agora basta escrever um programa para efetuar o cálculo das 8 médias de cada aluno.
Para representar a média do primeiro aluno será utilizada a variável MD1, para o segundo MD2 e
assim por diante. Então tem-se:
MD1=4.5;MD2=6.5;MD3=8.0;MD4=6.5;MD5=6.0;MD6=7.0;MD7=6.5;MD8=6.0.
Com o conhecimento adquirido até este momento, seria então elaborado um programa
que efetuaria a leitura de cada nota, a soma das mesmas e a divisão do valor da soma por 8,
obtendo-se desta forma a média, conforme exemplo abaixo:
25
Programa média_turmaVar MD1,MD2,MD3,MD4,MD5,MD6,MD7,MD8 : real Soma, media : realInicio Soma:=0; Ler(MD1,MD2,MD3,MD4,MD5,MD6,MD7,MD8); Soma:=MD1+MD2+MD3+MD4+MD5+MD6+MD7+MD8; Media:=soma/8; Escreva(media);Fim
Perceba que para receber a média foram utilizada 8 variáveis. Com a técnica de matrizes
poderia Ter sido utilizada apenas uma variável com a capacidade de armazenar 8 valores.
Vamos utilizar como representação de nome a forma mais comum usada pelas linguagens
de programação, que é o nome da variável e em seguida, entre colchetes, a dimensão da mesma.
Desta forma, teríamos uma matriz MD[1..8], onde seu nome é MD, possuindo um tamanho de 1 a 8.
MD[1]=4.5;MD[2]=6.5;MD[3]=8.0;MD[4]=3.5;MD[5]=6.0;MD[6]=7.0;MD[7]=6.5;MD[8]=6.0
Observe que o nome é um só, o que muda é a informação indicada dentro dos colchetes.
A esta informação dá-se o nome de índice, sendo este o endereço onde o elemento está armazenado.
Para definir as variáveis no português estruturado utilizaremos a seguinte sintaxe:
VARIAVEL : Matriz[<dimensão>] de <tipo de dado>
Desta forma utilizaríamos no exemplo :
Var MD : Matriz[1..8] de real;
Obs.: outros autores poderão utilizar outros tipos de declaração, isto também acontece
com as linguagens de programação.
26
A leitura e escrita da matriz é feita passo a passo, um elemento por vez com as instruções
leia e escreva, como as variáveis simples, embora deva-se observar o índice.
Exemplo:
Escreva(MD[2]); {este comando escrevera o valor 6.5}Ler(MD[1]); {este comando efetua a leirua de um valor para a nota do 1º aluno}
Abaixo é apresentado o algoritmo da leitura da notas dos 8 alunos, cálculo da média e a
apresentação da mesma e apresentação das notas lidas.
Programa média_turmaVar MD : matriz[1..8] de real; Soma, media : real; I : inteiro;Inicio Soma:=0; Para i de 1 até 8 passo 1 faça Ler(MD[i]); Soma:=soma+MD[i]; Fim_para Media:=soma/8; Escreva(media); Para i de 1 até 8 passo 1 faça Escreva(MD[i]); Fim_paraFim
Exercícios
1 - Desenvolva um programa que efetue a leitura de 5 valores para uma matriz A e que
esses valores sejam passados para a matriz B acresentando 10 porcento a cada elemento. Apresente
a matriz gerada.
2 - Desenvolva um programa que efetue a leitura de 4 valores para uma matriz A e que
esses valores sejam passados para a matriz B verificando se o índice for par deverá ser multiplicado
por 5 e se for impar, somado a 5. Apresente a matriz gerada.
3 - Desenvolva um programa que efetue a leitura de 4 elementos para uma matriz A e
apresente no final a somatória dos elementos ímpares.
27
4 - Ler duas matrizes A e B com 5 elementos. Construir uma matriz C, sendo esta formada
pelos elementos de A subtratídos dos elementos de B. Apresente a matriz gerada.
5 - Ler duas matrizes A e B de 3 elementos cada. Construir uma matriz R, sendo esta a
junção das duas outras matrizes. Desta forma, R deverá ter o dobro de elementos, ou seja, 6.
Apresente a matriz gerada.
6 - Ler 4 elementos de uma matriz A e construir uma matriz B de mesa dimensão com os
mesmos elementos de A, sendo que estes deverão estar invertidos, ou seja, o primeiro elemento de
A passa a ser o último de B, o segundo elemento de A passa a ser o penúltimo de b e assim por
diante. Apresente a matriz gerada.
5.2. Matrizes com Mais de uma Dimensão
Em matrizes unidimensionais a manipulação dos elementos "é feita através de um único
looping (enquanto, para ou repita). No caso de matrizes com mais dimensões, devera ser utilizado o
número de loopings relativo ao tamanho de sua dimensão Desta forma, uma matriz de duas
dimensões deverá ser controlada com dois loopings, sendo que de três dimensões deverá ser
controlada por três loopings e assim por diante.
Nestas matrizes, os seus elementos serão também manipulados de forma individualizada,
sendo a referência feita sempre através de dois índices : o primeiro para indicar a linha e o segundo
para indicar a coluna. Desta forma para referenciar um elemento que está na Segunda linha e na
terceira coluna de uma matriz, tem-se tabela[2,3]. Para declarar uma matriz de 8 linhas e 5 colunas,
por exemplo, ficaria :
VAR <nomevariavel> : MATRIZ[dimensão1,dimensão2] DE <tipodedado>;
Caso 1 - Como modelo, vamos utilizar dos exemplos, o primeiro, que efetue a leitura de 4
notas para 4 bimestres e apresente no final as médias de cada bimestre :
5 7 3 9
9 8 10 6
9 10 8 8
7 9 9 8
28
PROGRAMA EXEMPLO1;{declaração das variáveis}VAR
Notas : MATRIZ[1..4,1..4] DE REAL;Nota, Bim : integer;Soma : REAL;
INICIO{leitura dos elementos da matriz}PARA bim DE 1 ATE 4 FACA
PARA nota DE 1 ATE 4 FACALEIA(notas[bim,nota]);
FIM_PARA;FIM_PARA;
{cálculo e apresentação das médias}PARA bim DE 1 ATE 4 FACA
Soma :=0;PARA nota DE 1 ATE 4 FACA
Soma := soma +notas[bim,nota];FIM_PARA;ESCREVA(‘A nota do bimestre ‘,bim,’ é ‘,soma/4);
FIM_PARA;FIM.
Caso2 - Imaginemos a seguinte matriz tridimensional:
jk Gf sa R k l j N A g d F
1 5 7 8 a Ee x f h f h H
Considerando esta matriz com 2 linhas e 3 colunas e cada elemento (célula) da tabela é
dividida em 4 partes, temos uma matriz com 3 dimensões que pode ser declarada da seguinte
maneira:
VAR Tabela : array[1..2,1..3,1..4] de caractere;
A maneira mais correta de efetuar a leitura e escrita de matrizes é utilizando um laço de
repetição para cada dimensão da matriz. `
Para efetuar a leitura do elemento que está na linha 2 coluna 3 elemento 4 utilizamos:
29
Escreva(‘Digite o elemento da linha 2 coluna 3 elemento 4:’);Leia(tabela[2,3,4]);
Ou para ler todos os elementos:
Programa Leitura;Var Tabela: array[1..2,1..3,1..4] de caractere; l,c,e: integer;inicio para l de 1 ate 2 passo 1 faça {percorre as linhas de 1 a 2} para c de 1 ate 3 passo 1 faça {percorre as colunas de 1 a 3} para e de 1 até 4 passo 1 faça {percorre os elementos de 1 a 4} escreva(‘Digite o elemento da linha ‘,l,’ coluna ‘,c,’ elemento ‘,e,’ : ‘); leia(tabela[l,c,e]; fim_para; fim_para; fim_para;fim.
Exercícios
1 – Desenvolver um programa de agenda que cadastre o nome, endereço, cep de 4 pessoas
e em seguida liste-os.
2 – Crie um programa que faça a leitura de 10 nomes de alunos onde cada aluno deverá
ter 4 notas. Para isso crie uma matriz unidimensional para armazenar os nomes e uma bidimensional
para as notas. Após efetuar a leitura o programa deve apresentar os alunos e as médias.
3 – Construa uma matriz de 3 linhas por 3 colunas e apresente:
• A diagonal da matrizes
• O maior elemento da matrizes
• O menor da coluna 2
• A soma de todos os valores
30
6. BUSCAS E ORDENAÇÃO DE MATRIZES
6.1. Busca Sequencial
Caso1: Efetuar a leitura de 5 nomes para uma matriz A. Solicitar um valor para pesquisa
do usuário, pesquisar na matriz os nomes que coincidem com o valor e apresentar os nomes e as
posições dos elementos encontrados. Caso não tenha encontrado, apresente uma mensagem que o
valor de busca não foi encontrado.
Caso2: Efetuar a leitura de 5 alunos para uma matriz “alunos” e suas 5 médias para uma
matriz chamada “medias”. Apresente os alunos que têm nota menor que 7 dizendo que estão para
exame. Se não foi encontrado nenhum aluno, apresente uma mensagem que nenhum aluno ficou
para exame.
6.2. Algoritmos de Busca B-SEARCH
int meio;int ini=1;int fim=n; // onde n é o número de elementosprintf(“Digite o valor de busca”);scanf(“%d”,&busca);do{ meio=(ini+fim)/2; if(strcmp(busca,a[meio])>0){ //se o valor a buscar está depois do meio ini=meio+1; }else{ fim=meio1; }}while(!(strcmp(busca,a[meio])==0 and ini>fim)); //executa até achar ou ini>fim
6.3. Ordenação
Imagine um programa com 5 elementos inteiros em uma matriz A dispostos como
mostrado a tabela abaixo :
31
MATRIZ AINDICE ELEMENTO1 92 83 74 55 3
Ou seja :
A[1]=9A[2]=8A[3]=7A[4]=5A[5]=3
Para efetuar o processo de troca é necessário aplicar o método de propriedade distributiva,
sendo assim, o elemento que estiver em A[1] deverá ser comparado com os elementos que
estiverem em A[2], A[3], A[4] e A[5]. Depois, o elemento que estiver em A[2] não necessita ser
comparado com o elemento que estiver em A[1], pois já foram anteriormente comparados, passando
a ser comparado somente com os elementos que estiverem em A[3], A[4] e a[5]. Na sequência, o
elemento que estiver em A[3] é comparado com os elementos que estiverem em A[4] e A[5] e por
fim o elemento de a[4] comparado com A[5]. A cada comparação se o primeiro elemento
comparado for maior que o segundo os valores deverão ser trocados utilizando-se uma variável de
troca.
Exemplo :
int main(){ int a[5]; int i,j,troca; for(i=1;i<=5;i++){ printf(“Digite um número para o elemento %d “,i); scanf(“ %d”,a[i]); } for(i=1;i<=4;i++){ //até o penúltimo for(j=i+1;i<=5;i++){ if(a[i]>a[j]){ troca=a[i]; a[i]=a[j]; a[j]=troca; } } } for(i=1;i<=5;i++){ printf(“Elemento %d = %d\n“,a[i]); } return 0;}
32
7 – UTILIZAÇÃO DE SUBROTINAS
Os procedimentos e funções são utilizados na divisão de um programa complexo,
permitindo assim possuir a modularização de um determinado problema, considerado grande e de
difícil solução. A modularização do código nos dá várias vantagem:
Para tarefas que devem ser efetuadas mais do que uma vez num programa, a
modularidade evita a necessidade de programação redundante (repetida) de
essencialmente o mesmo conjunto de instruções. Dessa forma, cada módulo pode ser
definido apenas uma vez e depois acedido de vários pontos do programa.
Um conjunto diferente de dados pode ser processado de cada vez que o módulo é
acessado.
Facilidade na interpretação do código.
Uso otimizado da memória, pois variáveis criadas dentro das sub-rotinas só existem
quando elas estão sem execução.
O uso de módulos de programa pode, portanto, reduzir apreciavelmente o tamanho de um
programa.
Uma sub-rotina é, na verdade, um programa, e sendo um programa poderá efetuar
diversas operações computacionais (entrada, processamento e saída). As sub-rotinas são utilizadas
na divisão de algoritmos complexos, permitindo assim possuir a modularização de um determinado
problema, considerado grande e de difícil solução.
Uma sub-rotina pode receber (opcional) dados através de parâmetros e devolve um
resultado (opcional) através de “result”.
33
Sintaxe :
int soma(int a,int b){ int res; res=a+b; return res;}//==============================================int main(){ int numero; numero=soma(45,5); printf(“a soma de 45 e 5 é %d\n“,numero); printf(“a soma de 10 e 5 é %d\n“,soma(10,5)); printf(“a soma de 10,20,30 é %d\n“,soma(10,soma(20,30)));}
Exercícios:
1 – Desenvolva um programa que solicite do usuário o seu salário e o percentual de
acréscimo. Após a leitura chame uma sub-rotina para calcular e apresentar o salário atualizado.
2 – Desensolva um programa que solicite do usuário a base e a altura de um triângulo
retângulo e chame um procedimento para calcular e apresentar a área do triangulo.
3 – Elaborar um programa que possua uma sub-rotina que apresente o total do somatório
dos N primeiros números inteiros. (1+2+3+4+...+N)
4 – Elaborar um programa que utilize um procedimento para calcular a potência de um
número, ou seja, chamando-se o procedimento POTENCIA(2,3) o procedimento deve calcular e
apresentar o resultado 8.
5 – Construa uma sub-rotina que receba como parâmetro uma frase e um número inteiro,
esta sub-rotina deve escrever a frase na tela repetidamente o número de vezes que foi passado como
parâmetro.
7.1. O Método da Recursividade
Um método comum de simplificação consiste em dividir um problema em subproblemas
do mesmo tipo. Como técnica de programação, isto se denomina divisão e conquista, e constitui a
chave para o desenvolvimento de muitos algoritmos importantes, bem como um elemento
fundamental do paradigma de programação dinâmica.
34
A recursão está profundamente entranhada na Teoria da computação, uma vez que a
equivalência teórica entre as funções recursivas e as Máquinas de Turing está na base das ideias
sobre a universalidade do computador moderno.
Um exemplo comum usando recursão é a função para calcular o fatorial de um natural N.
No caso recursivo, dado um N > 0, o valor de N é calculado multiplicando por N o valor de (N-1), e
assim por diante, de tal forma que N tem como valor N * (N-1) * (N-2) * ... . Em termos recursivos:
int fatorial(int x){ if(x==1){ return x; }else{ return x*fatorial(x1); }}
Aqui está a mesma função codificada sem recursão.
int main(){ int i,aux; printf(“Digite um número “); scanf(“%d”,&x); aux=1; for(i=1;i<=x;i++){ aux=aux*i; } printf(“O fatorial de x é %d”,aux);}
Exercícios
1 – Dado a função abaixo, desenvolva testes de mesa e diga que tipo de cálculo ela está
fazendo?
int calcula(int a, int b){ if(a<b){ return 0; }else{ return (calcula(ab,b)+1); }}
2 – Desenvolva um programa que solicite NUM para o usuário e apresente os números
inteiros de NUM até 1 utilizando recursividade, ou seja, sem laço de repetição.
3 – (pesquisa na internet) Desenvolva um programa que resolva a série fibonacci
35
utilizando recursividade.
4 – Desenvolva um programa que calcule a potência. Exemplo: potencia(4,3);
36
8 - REGISTROS
Até agora aprendemos a trabalhar com uma estrutura de dados de tipos homogêneos
(matrizes). Os registros são estruturas de dados que se diferenciam das matrizes, devido o fato de
possuírem campos onde definimos tipos de dados diferentes para cada campo.
Sintaxe:
typedef struct { char nom[30]; float sal;} tFunc; //definise aqui o tipo tFunc como uma estrutura de um registro de funcionário//===================================================int main(){ tFunc f[5]; //cria uma matriz de 5 funcionarios ...
No capítulo anterior, um exercício de aprendizagem solicitava que fosse informado o
nome de 10 alunos e suas 4 notas bimestrais, o que obrigou a utilização de duas matrizes, uma para
conter os nomes, por seus valores serem do tipo caractere e a outra para conter as notas, por seus
valores serem do tipo real. Com registros podemos armazenar os mesmos dados em apenas uma
estrutura.
O acesso a estes dados, tanto para leitura quanto para a escrita seria :
scanf(“ %s”,&f[1].nom);scanf(“ %f”,&f[1].sal);
Exercícios:
1 – Elaborar um programa que faça a leitura de 10 produtos contendo descrição,
quantidade, quantidade mínima e valor. Após a leitura dos dados apresentar uma ficha de compra
onde deverão ser listados todos os produtos que estão abaixo da quantidade mínima. No final da
lista apresentar o total a ser gasto para repor estes produtos. {conjunto de registro}
2 - Efetuar a leitura de 4 notas bimestrais para 8 alunos. Apresentar o boletim escolar dos
alunos.
3 – Elaborar um programa que contenha em um menu do seguinte formato :
37
PROGRAMA AGENDA DE TELEFONES1 – CADASTRAR2 – PESQUISAR3 – ALTERAR
4 EXCLUIR5 – CLASSIFICAR6 – LISTAR7 SAIR
ESCOLHA UMA OPÇÃO : [ ]
Construa rotinas que desempenham cada uma das funções do menu acima. Os dados da
agenda deverão ser : nome, telefone e celular
38
9. ARQUIVOS
Até o momento, todas as variáveis, cálculos e dados de nossos programas foram
temporários pois os dados ficam em memória RAM como variáveis. Mas na prática, poucos
programas funcionam assim. A gigantesca maioria dos programas que usamos armazenam (salvam)
informações em algum lugar (HD, pendrive, banco de dados de um servidor etc) e consultam
informações de algum local.
9.1. Abrindo e Fechando Arquivos
Para abrir, alterar ou criar um arquivo em seu HD é necessário criar uma espécie de
vínculo entre seu programa e um determinado endereço de memória, onde está localizado (ou vai se
localizar) o arquivo.
Essa ligação, entre nosso programa e seu disco de dados é feita através de um ponteiro
(cursor).
Tal ponteiro é do tipo FILE, e o nome você escolhe.
FILE *f;
Mas ele precisa apontar para 'alguém', só ter a referência (endereço de memória onde o
ponteiro aponta) não serve de muita coisa. E é aí que entra as funções de abertura e fechamento de
arquivos.
Exemplo:
f=fopen('dados.dat','r'); //abre arquivo dados.dat no modo r (read)…fclose(f);
9.1.1 Modo de abertura de arquivos
MODO DETALHE SE ARQ. EXISTE SE NÃO EXISTE
r Abre para leitura Abre Erro
w Abre para escrita Cria (apagando) Cria
a Abre para escrita com cursor no fim doarquivo (append)
Abre Cria
39
rb Abre para leitura (binário) Abre Erro
wb Abre para escrita (binário) Cria (apagando) Cria
ab Abre para escrita com cursor no fim doarquivo (binário)
Abre Cria
r+ Abre para leitura e gravação Abre Erro
w+ Abre para escrita e leitura Cria (apagando) Cria
a+ Abre para escrita e leitura com cursor nofim do arquivo
Abre Cria
r+b Abre para leitura e gravação (binário) Abre Erro
w+b Abre para escrita e leitura (binário) Cria (apagando) Cria
a+b Abre para escrita e leitura com cursor nofim do arquivo (binário)
Abre Cria
9.1.2. Movimentação do ponteiro ou cursor
Normalmente ao abrir um arquivo devemos certificar onde o cursor ou ponteiro se
encontra para realizar determinada operação. Se formos incluir dados, por exemplo, queremos que o
ponteiro esteja no fim do arquivo. Se formos listar, o ponteiro deve estar no início. Desta forma,
podemos usar o comando fseek para mover este ponteiro para onde queremos.
fseek(f,0,SEEK_SET); //move no arquivo f zero posições desde o iníciofseek(f,20,0); //move no arquivo f 20 posições desde o iníciofseek(f,10,SEEK_CUR); //move no arquivo f 10 posições desde a posição atualfseek(f,5,SEEK_END); //move no arquivo f a 5 posições anteriores do fim do arquivo
Portando :SEEK_SET representa o início do arquivo, SEEK_CUR representa a posição
do cursor atual e SEEK_END indica o fim do arquivo. Também pode ser usados respectivamente 0,
1 e 2.
9.2. Arquivos de Strings
Em arquivos Strings, cada linha é uma string formatada. Para ler e escrever estas
informações temos os comandos abaixo:
fprintf(f,”%s %f\n”,nome,valor); //escreve uma string e um float e quebra linha…fscanf(f,”%s %n\n”,&nome,&valor); //le uma string e um float no mesmo formato que a escrita
40
Exemplo:
int incluir(){ printf("Nome: "); scanf(" %s",&nome); printf("Valor.: "); scanf(" %f",&valor); fseek(f,0,SEEK_END); fprintf(f,"%s %f\n",nome,valor); }
int listar(){ fseek(f,0,0); while(fscanf(f,"%s %f\n",nome,&valor)!=EOF){ printf("Nome: %s Valor: %f\n",nome,valor); } }
Exercícios:
1 - Escreva um programa em C que solicita o nome, peso e altura de pessoas enquanto o
usuário desejar. Os dados informados devem ser salvos no arquivo pessoas.txt.
2 – Escreva um programa que lista o nome e o IMC das pessoas inseridas no exercício 1.
(IMC=p*a2)
3 – Desenvolva um programa que solicita um nome do usuário e liste o IMC desta pessoa,
ou informe se a pessoa não existir no arquivo.
9.3. Arquivos de Registros
Para manipular arquivos de registro temos os seguintes comandos:
ftell(f); Retorna a posição atual em bytes do cursor
sizeof(var); Retorna o tamanho em bytes de uma variável de qualquer tipo
fwrite(&var,sizeof(var),1,f); Escreve var no arquivo f
fread(&var,sizeof(var),1,f); Lê o número de bytes de var para a variável var
Exemplo:
typedef struct{ char nom[20]; float sal;} typofunc;
41
FILE *f;
typofunc funcionario;
int inclui(){ printf("Digite o nome: "); scanf(" %s",&funcionario.nom); printf("Digite o salario: "); scanf(" %f",&funcionario.sal); fseek(f,0,SEEK_END); fwrite(&funcionario,sizeof(funcionario),1,f);}
int lista(){ fseek(f,0,SEEK_SET); while(fread(&funcionario,sizeof(funcionario),1,f)){ printf("%s %f\n",funcionario.nom,funcionario.sal); }}
Exercícios:
1 - Escreva um programa em C que solicita o nome, peso e altura de pessoas enquanto o
usuário desejar. Os dados informados devem ser salvos no arquivo pessoas.txt.
2 – Escreva um programa que lista o nome e o IMC das pessoas inseridas no exercício 1.
(IMC=p*a2)
3 – Desenvolva um programa que solicita um nome do usuário e liste o IMC desta pessoa,
ou informe se a pessoa não existir no arquivo.
4 – Desenvolva um cadastro de produtos com Nome, Quantidade, Valor que desempenhe
as funções dos seguintes itens num menu principal:
PROGRAMA AGENDA DE TELEFONESc – CADASTRARp – PESQUISARa – ALTERARo – ORDENARl – LISTARs SAIR
ESCOLHA UMA OPÇÃO : [ ]