Escolar Documentos
Profissional Documentos
Cultura Documentos
MELAR
ANGELINAMELARE@GMAIL.COM
Linguagem
00110000 C
2011
FATEC ITU
Prof Angelina V.S.Melar
1
SUMRIO
Lgica de Programao ................................................................................................................... 7
Algoritmo ........................................................................................................................................ 8
Estruturas dos Algoritmos: Linear / Seletiva/ Repetio ............................................................. 10
Mtodo para a construo de Algoritmo ....................................................................................... 10
Etapas de Desenvolvimento .......................................................................................................... 12
Tipos de Algoritmos ...................................................................................................................... 14
1. Tipos de Algoritmos ........................................................................................................... 14
Pseudocdigo ................................................................................................................................ 15
Fluxograma.................................................................................................................................... 16
Diagrama de Chapin ...................................................................................................................... 18
Paradigmas de Programao forma de programar ...................................................................... 19
1. Programao No Estruturada: ........................................................................................... 19
2. Programao Estruturada (Procedural): ............................................................................. 19
3. Programao Orientada a Objetos ...................................................................................... 20
Modularidade ................................................................................................................................ 20
4. Estratgia de Decomposio ou Dividir para Conquistar ............................................... 20
5. Mdulos .............................................................................................................................. 21
Linguagem C ................................................................................................................................. 23
Processo de Compilao e Ciclo de Vida do Programa ................................................................ 24
6. Linguagem C Compiladora ou Interpretadora? ............................................................. 24
7. Ciclo de Vida do Programa ................................................................................................ 24
Ambiente de Desenvolvimento DEV-C++ ................................................................................... 26
1. Ambiente integrado ............................................................................................................ 26
2. Configurando o ambiente e o editor ................................................................................... 26
3. Configuraes para o Windows Vista/7 ............................................................................. 27
4. Digitao do programa ....................................................................................................... 27
5. Gravao do programa ....................................................................................................... 27
6. Compilao e execuo do programa ................................................................................. 27
7. Criando um cdigo fonte padro ........................................................................................ 28
Estrutura do Programa na Linguagem C ....................................................................................... 29
1. Estrutura bsica .................................................................................................................. 29
2. Diretivas ............................................................................................................................. 29
3. Arquivos de Cabealho (header) ........................................................................................ 30
4. Biblioteca ........................................................................................................................... 31
5. Bloco de instrues e Funo MAIN() ............................................................................... 31
6. Projeto ................................................................................................................................ 31
7. Regras de Digitao e Dicas da Estrutura em C ................................................................. 31
8. Comentrios ....................................................................................................................... 32
Variveis........................................................................................................................................ 33
1. O que so variveis? ........................................................................................................... 33
2. Mas em que parte da memria vo os dados? .................................................................... 33
Identificadores ........................................................................................................................... 33
3. Declarao de varivel ....................................................................................................... 34
Constantes ..................................................................................................................................... 35
Tipos de dados ............................................................................................................................... 36
ALGORITMOS
Depois organiz-las de acordo com suas prioridades. preciso saber qual o primeiro
passo a se tomar para depois ver o momento de executar o segundo, no esquecendo que o
primeiro deve j estar pronto.
como fazer um pudim gostoso de forma rpida. Como voc faria? Voc colocaria a
forma no forno aceso antes de fazer a massa? Como voc usaria seu raciocnio lgico nesse
procedimento?
por isso que devemos aprender a ter um raciocnio lgico. Ser atravs dele que voc
conseguir ser um bom programador.
Algoritmo
o Estrutura de Repetio: algumas aes podem ser repetidas, executadas vrias vezes.
Nessa estrutura a sequncia de execuo depender de uma condio, onde dependendo
do resultado dela, ser mudada ou no a sequncia de execuo.
Faa uma anlise de tudo, procurando definir explicitamente o que est contido
no enunciado, destacando os pontos mais importantes.
Desenvolva o algoritmo.
ABSTRAO
Existe dentro da resoluo de problemas o termo Abstrao. Ao desenvolver um
algoritmo voc est preocupado em desenvolver e representar o raciocnio lgico de
programao, mas sem se ater a detalhes computacionais, que sero depois pensados e acrescidos
na codificao. Ento ao abstrair, se deixa de lado as informaes suprfluas, se atem ao que
importante para chegar a resoluo do problema.
A abstrao tem como objetivo tirar informaes suprfluas e introduzir uma notao
concisa. Para esse objetivo ser alcanado devem-se identificar os objetos e os aspectos
importantes, dar-lhes nomes e definir operaes que possam ser aplicadas aos objetos,
permitindo assim realizar uma consistncia em relao as regras do problema.
Entrada: A entrada o processo onde voc avalia o enunciado do problema e verifica quais
dados esto presentes no enunciado e quais no esto, mas que so essenciais para a soluo do
problema. Quando faltar algum dado voc ter que receb-lo de alguma maneira. Sem as
entradas no h como resolver um problema.
O nmero de entradas muito variado e depende do objetivo do programa.
A entrada pode ser recebida por vrios dispositivos de entradas. Pode ser lida de um
arquivo ou de qualquer outro perifrico de entrada, como teclado ou scanner. Ento, a entrada
pode ser direta, atravs do usurio (receber o salrio) ou indireta, atravs da mquina (pegar a
data do sistema).
Cuidado: no so entradas os dados que podem ser gerados atravs de um clculo
ou de outras entradas.
Processamento: um processo que pega os dados de entrada e efetua uma operao (que pode
ou no ser matemtica), ou uma atribui. Nessa etapa tambm podem ser feitas comparaes e
consultas, gerando dessa forma o resultado e a soluo do problema.
Sada: a parte mais fcil e mais importante de todo o processo, onde devem ser exibidos os
resultados de todo o processamento. A sada pode ser feita por qualquer dispositivo de sada,
desde o monitor at a caixa de som.
1 Exemplo:
O Analista de Sistemas Joaquim pediu para o programador Jlio fazer um programa que efetue
a multiplicao de dois nmeros.
1 necessrio ler atentamente todo o exerccio.
2 Retire o que suprfluo, fique apenas com os dados necessrios.
3 Defina as trs etapas principais de seu algoritmo:
2 exemplo:
Juracema foi a livraria e comprou dois livros iguais de programao. Quanto ela pagar?
Entrada: Quais so os dados de entrada necessrios?
Saber o preo do livro
Algoritmo:
1 Receber o valor do livro
2 Multiplicar o valor do livro por dois (2).
3 Mostrar o resultado do clculo da multiplicao
1. Tipos de Algoritmos
Os tipos de algoritmos mais conhecidos so:
Descrio Narrativa
Fluxograma
Pseudocdigo
Diagrama de Chapin
Todos esses tipos de algoritmos consistem em analisar o enunciado do problema e
descrever os passos necessrios para a resoluo do problema. O que os diferencia a forma de
descrever e simbolizar esses passos. At o momento todos os algoritmos feitos foram atravs da
Descrio Narrativa.
Descrio Narrativa
1 Receber um nmero
2 Se o nmero for maior que zero, ento, mostre uma mensagem alertando que o nmero
positivo.
3 Se o nmero for menor ou igual 0 ento, deve aparecer uma mensagem avisando que o nmero
negativo ou nulo.
Pseudocdigo
Incio
real num;
escreva (Digite um nmero);
leia (num);
se (num > 0) ento
escreva (Nmero positivo);
seno
escreva (Nmero negativo ou nulo);
Fim
Qual das formas anteriores voc escolheria para construir um algoritmo? Qual desses
exemplos mostra de forma mais clara as aes?
Processamento
Prdefinido Utilizado nas estruturas de repetio
Entrada/Sada Pode ser usado tanto para entrada quanto para a sada de
informaes
PROCESSAMENTO: O smbolo do retngulo deve ser usado toda vez que existir
qualquer tipo de processamento; seja um clculo, uma atribuio de valores as
variveis, ou mesmo alterao de qualquer dado.
B=6 C=A+B SENHA = MARTH
INCIO K 1
K 1 FIM
Diagrama de Chapin
O Diagrama de Chapin utiliza poucos smbolos e no precisa de nenhum conhecimento
especfico. A desvantagem de uso ocorre quando precisa de muito espao na horizontal e fica
mais difcil a compreenso. Veja os exemplos abaixo:
a)
Incio
Escreva Mensagem
Fim
b)
Incio
Escreva Digite seu nome
Leia NOME pelo teclado
Escreva Bom Dia + NOME
Fim
c)
Incio
Leia A e B no teclado
A maior que B?
Sim No
Escreva Escreva
A maior que B B maior que A
Fim
1. Programao No Estruturada:
Algoritmo No Estruturado:
1. V para DESVIO2
2. DESVIO1.
3. Se precisar comprar ento
4. V para DESVIO3
5. V para DESVIO5
6. DESVIO3.
7. Procure a chave do carro
8. Se achou ento
9. V para DESVIO 2
10. V para DESVIO 4
11. DESVIO2.
Modularidade
4. Estratgia de Decomposio ou Dividir para Conquistar
A decomposio uma estratgia de resoluo de problemas. A idia dividir o
problema em problemas menores (subproblemas), at que cada parte (subdiviso) seja pequena o
bastante para que a soluo seja facilmente encontrada.
Segundo Villas, o termo Dividir para Conquistar veio da guerra, onde mais fcil vencer
grupos isolados de inimigos do que todos os inimigos juntos.
A decomposio de um problema reduz a complexidade do mesmo, pois a complexidade
tambm dividida. O foco da ateno fica isolado, de forma que se concentra em um problema
por vez. Quando se tem todos de uma vez, o desenvolvimento da lgica se dispersa e no se
chega a nenhum resultado.
A soluo mais rpida, j que a complexidade menor que ao original.
Como exemplo, podemos destacar o exemplo Folha de Pagamento de uma empresa.
Supondo que o objetivo principal gerar o demonstrativo de um funcionrio. Inicialmente parece
ser bem complexo, mas se voc analisar com calma tem como dividir esse problema, em
problemas menores, como o de calculo de descontos e clculos de benefcios.
Existe a tcnica Bottom-up (de baixo para cima), que o inverso dessa. Essa parte dos
conceitos mais detalhados e especficos e vai agrupando em nveis mais abrangentes (abstratos),
at atingir o nvel desejado.
Potenciao multiplicar somar
o Segundo Rinaldo, a modulao uma tcnica de resoluo de problemas, onde se
divide o problema maior (principal) em problemas menores. A soluo do
problema maior ocorre em decorrncia da soluo dos menores.
5. Mdulos
Cada subproblema um mdulo ou podemos dizer que um subalgoritmo ou subproblema
que realiza tarefas especficas. Em termos funcionais, existem dois tipos de mdulos:
1. Procedimento: um mdulo que executa uma tarefa especfica, que pode ou no gerar
vrias sadas usando as variveis globais ou locais. Ele no retorna valores para o
mdulo que o chamou.
2. Funo: um modulo que ir gerar uma nica sada e que ser devolvida para a funo
principal ou mdulo que o chamou.
LINGUAGEM C
Origens da linguagem C
A linguagem C foi criada por Dennis Ritchie em 1972. Sua origem foi atravs da
linguagem BCPL, desenvolvida por Martin Richards, que influenciou Ken Thompson a criar o B,
que levou a linguagem C.
Com a popularizao dos microcomputadores houve um aumento no desenvolvimento de
implementaes em C, criando discrepncias entre elas. Para resolver essa situao, o rgo
americano de padronizao (American National Standards Institute), em 1983, criou C padro
ANSI, estabelecendo uma definio padronizada da linguagem C. A maioria dos compiladores
so compatveis com esse padro.
A linguagem C++ foi construda sobre os fundamentos da linguagem C e d suporte para
a Programao Orientada a Objetos.
Existem vrios ambientes de desenvolvimento para a linguagem C, como: DEV-C++,
Visual C++, Turbo C, CodeBlocks. O ambiente a ser usado o Dev-C++, cujo compilador a
implementao Mingw do GCC (Gnu C Compiler).
Resumo histrico
1966 BCPL (Martin Richards)
1970 - B (Ken Thompson)
1972 C (Dennis Ritchie)
1978 Livro The C Programming Language (Brian Kernigham e Dennis Ritchie)
1983 - C padro ANSI - rgo americano de padronizao (American National Standards
Institute) O padro ANSI definiu o contedo da biblioteca padro C, palavras
reservadas, estrutura da linguagem (prottipo da funo).
1985 - C++ ( o C projetado para suportar Programao Orientada a Objetos).
Caractersticas e Vantagens:
Facilidade para aprendizagem de outras linguagens de programao, inclusive as
orientadas a objetos
Constitudo por funes
Linguagem de programao estruturada
Ferramenta poderosa de desenvolvimento (pode desenvolver um editor de texto, um
aplicativo comercial, um programa para microcontrolador)
Portabilidade- em relao a mudana do cdigo para plataforma Windows ou Linux
Linguagem compiladora
Criao do programa
Para se fazer um programa deve-se escrever uma sequncia correta de instrues que
devero se executados pelo computador. Para se chegar nessa sequncia deve-se desenvolver o
Algoritmo. Essa lgica deve ser desenvolvida numa linguagem natural, parecida com a do ser
humano, que pode ser a Descrio Narrativa e o Pseudocdigo.
Depois de solucionado o problema e escrito o algoritmo em pseudocdigo, este deve ser
passado para uma linguagem de programao, ou seja, codificado. Na nossa disciplina ser
usada a linguagem de programao C. O programa codificado e digitado se chama Arquivo
Fonte. Este deve ser salvo com a extenso .C. Se no for digitada a extenso, ser assumir a
extenso .cpp que padro do ambiente de desenvolvimento (cpp significa c plus plus ou c++).
Para executar esse programa necessrio compil-lo e link-lo. Na compilao as
instrues (linhas) so verificadas e interpretadas pela mquina (CPU), se no houver erros de
sintaxe, ser gerado o arquivo executvel (extenso .exe).
O linkeditor (linker) une os cdigos dos arquivos de bibliotecas usados pela linguagem C
com os arquivos fontes criados pelo programador. Para ver o programa funcionando basta digitar
seu nome ou dar um duplo clique no cone do programa, de acordo com o ambiente que voc
estiver (texto ou grfico).
Os erros de lgica s podem ser detectados pelo programador depois de gerado o arquivo
executvel.
...
arquivo objeto arquivo objeto
Linkedio
arquivo executvel
4. Digitao do programa
Para a digitao do programa no DEV-
C++ necessrio seguir os seguintes passos:
1. No menu escolha a opo Arquivo (File);
2. Escolha a opo Novo e depois Arquivo Fonte ou se preferir a tecla de atalho
<CTRL> e <N> simultaneamente;
3. Aparecer uma nova janela, com o ttulo: (*) Sem Ttulo 1, onde deve ser feita a
digitao do programa fonte.
4. Dependendo da verso, ou mesmo da configurao pr-definida no editor, aparece
um programa inicial. Pode-se apag-lo ou deix-lo, aproveitando as linhas de
cdigo j digitadas.
5. Gravao do programa
Aps a digitao do programa, ele dever ser salvo antes de ser executado, de acordo com
as etapas abaixo:
1. No menu Arquivo escolha a opo Salvar ou use a tecla de atalho <CTRL> e <S>
simultaneamente.
2. Escolha o diretrio de trabalho, digite o nome do arquivo fonte e pressione o
boto Salvar. Observe que a extenso padro do DEV-C++ o .cpp.
Ao salvar o arquivo fonte, cuidado para no salva-lo com nome invlido (com espao
entre as palavras, iniciado com nmero.
Toda vez que voc pressionar o F9 para compilar e executar o Dev estar salvando
automaticamente seu programa.
6. Compilao e execuo do programa
Existem diversas maneiras de ver se o programa est sem erros e funcionando, entre elas:
1. Escolhendo a opo Executar (Execute) do menu e dentro dela a opo Compilar e
Executar (Compile and Run); ou
2. Pressionando a tecla de funo <F9> ou na barra de ferramentas a opo Compilar
e Executar.
Se voc quiser apenas verificar se existem erros no programa, poder inicialmente
compil-lo (atravs do menu Executar, opo Compilar) e futuramente execut-lo (atravs do
menu Executar, opo Executar).
1. Estrutura bsica
Um programa feito na linguagem C constitudo basicamente de:
Documentao do programa: comentrios que o programador considera importante,
como objetivo do programa.
Cabealho:
Diretivas de pr-processamento, onde sero definidas as constantes e
includos os arquivos de cabealho.
Declarao e inicializao de variveis globais.
Blocos de instrues: um bloco principal (funo main) e outros blocos de rotinas
(outras funes chamadas a partir da main()).
2. Diretivas
As diretivas do pr-processador iniciam com o smbolo # e cada diretiva deve ser escrita
em linha distinta. As diretivas instruem o compilador a execuo de uma ao dentro do cdigo-
fonte do programa em C. As diretivas do padro C ANSI a serem usadas so: #include, #define.
O pr-processador do C um programa que examina o arquivo fonte e executa as devidas
modificaes com base nas diretivas. Como por exemplo, ao encontrar a diretiva #include ele faz
um desvio, localiza a funo na biblioteca e adiciona seu cdigo ao cdigo do arquivo fonte.
#define
Essa diretiva define um identificador (constante simblica) e uma string que o substituir
toda vez que for encontrado no cdigo-fonte.
Estrutura: #define identificador string
Arquivo de Finalidade
cabealho
stdio.h Suporta entrada e sada com arquivos
conio.h/conio.c Suporta E/S pelo console
math.h Possui diversas funes matemticas
stdlib.h Declaraes miscelneas
time.h Funes de horrio do sistema
string.h Funes de string
6. Projeto
Pode ser criado um projeto em C, onde podem existir vrios programas (arquivos fontes),
mas um nico arquivo executvel gerado pelo compilador.
Nos projetos sempre haver um arquivo com a funo principal (main()) que indicar o
incio do projeto.
Cuidado com as palavras reservadas, exemplo: include, printf, main. Na linguagem C tem
32 palavras, sendo que 27 criadas pelo Dennis Ritchie e 5 do padro ANSI.
8. Comentrios
Para facilitar a compreenso coloque comentrios ao decorrer do cdigo. Esses comentrios
podem ser feitos de duas maneiras:
usando duas barras para comentrios de uma nica linha
barra asterisco para comentrios de mais de uma linha.
Exemplos:
a) Comentrio de uma linha
#include <stdio.h> //Essa linha inclui a biblioteca que tem funes de entrada e sada
1. O que so variveis?
Os dados fornecidos pelos dispositivos de entrada ou aqueles dados processados so
armazenados numa rea da memria do computador chamada de varivel.
A varivel uma posio reservada da memria que usada para armazenar um valor
(tipo de dado) temporariamente. Esse valor pode ser alterado a qualquer momento durante a
execuo do programa. Essas variveis so utilizadas como reas de trabalho, ou seja, como uma
lousa, onde podemos escrever, modificar e apagar quantas vezes for necessrio. Cuidado: cada
varivel armazena um nico contedo por vez, quando for inserido um novo valor, o anterior
apagado.
Memria
Variveis
Identificadores
Os identificadores so os nomes dados para as variveis, constantes e funes.
A melhor forma de nomear verificar qual ser seu contedo e definir o nome de acordo com
ele. Por exemplo, se for definir uma varivel para armazenar o resultado da soma identifique
como soma.
Imagine as variveis como gavetas etiquetadas, cada uma com um nome, voc somente deve
colocar contedos (objetos) nas gavetas de acordo com a identificao e tipo definido para ela.
Em C existem algumas regras para a formao dos identificadores:
_ o primeira caracter tem que ser obrigatoriamente uma letra ou um sublinhado;
_ o nome pode ser formado por nmeros, s que estes no podem ser colocados na
primeira posio.
_ no pode ter caracteres especiais ou espao, com exceo do caracter _ (underline);
_ as letras maisculas e minsculas so tratadas diferentemente (case sensitive).
_ no pode ser igual a uma palavra reservada da linguagem.
_ no pode ter acento e cedilha ()
__ somente os 31 caracteres so vlidos
VARIVEL
CONSTANTE
X +Y+3
Exemplos:
A) Data_atual = 1990
Valor_aumento = 1000
Porc_desconto = 0.10
PI = 3.141592
B)
#include <stdio.h>
#include <stdlib.h>
const int ANO_ATUAL = 1990;
main()
{
// ANO_ATUAL = 300; //no permite mudana de valor
printf("%i", ANO_ATUAL);
_sleep(2000);
}
1. Numrico
O tipo numrico armazena apenas valores numricos, que podem ser: inteiros ou reais.
4. Caracter
O tipo char usado para armazenar um caracter da tabela ASCII, que possui letras (a..z,
A..Z), nmeros (0..9) e caracteres especiais (, ^, &, =, #, :). Na maioria dos ambientes no pode
ser usado para clculo, mesmo tendo armazenado um nmero.
Quando for um nico caracter colocamos seu contedo obrigatoriamente entre
apostrofe(). Quando for uma cadeia de caracteres, colocamos entre aspas ().
Pseudocdigo Codificao em C
caracter sexo; char sexo = f;
caracter opo = a; char flag = !;
Exemplo de programa:
main()
{
char a='1', b=1;
printf("%c - %c", a, b);
_sleep(2000);
}
Perceba que a varivel a armazena o smbolo 1 e a varivel b armazena o primeiro
smbolo da tabela ASCII que a carinha.
printf("\n%c - %c - %i - %i\n", a, b, a,b);
//Resultado:1 carinha 49 1 1
//caracter 1 e o primeiro smbolo na ASCIII - o smbolo 1 a carinha
//o smbolo 1 na ASCII tem seu decimal o 49
//o 1 inteiro o 1 na exibio definida como inteiro
6. Modificadores de Tipos
Os modificadores de tipos so usados para modificar o tipo primitivo, fazendo com que
ele aceite outra faixa de valores, aceitando nmeros negativos e positivos.
O tipo signed faz com que o tipo represente os nmeros positivos e negativos. O
unsigned somente aceita os nmeros positivos. A representao de nmeros negativos feita
tomando o bit MSB (Most Significant Bit), onde msb=1 o sinal negativo e msb=0 o sinal
positivo. Como utilizado bit para representao de sinal os valores a serem representado so
metade da faixa padro. Por exemplo, o tipo char que vai de 0 a 255 do tipo signed (s
positivos), para aceitar tipos negativos tem que ser unsigned e seus valores vo de -128..0..+127.
O padro C padro ANSI define que os tipos so signed e no compilador CCS,
MikroC o padro unsigned.
O tipo short (reduz) e long (amplia) so usados para aumentar ou diminuir a faixa de
valores dos tipos bases.
Exemplo:
a) unsigned char n1= 255;
char n2= 255; //padro signed
printf("Unsigned %i - signed %i", n1, n2);
Resultado: 255 e -1
Exemplos de Cdigos:
#include <stdio.h>
#include <stdlib.h>
#include <conio.c>
main()
{
char ch;
ch = getch();
if (ch == 13) printf ("Enter %c", ch);
if (ch == 27) printf ("ESC %c", ch);
if (ch == 9) printf ("TAB %c", ch);
if (ch == 8) printf ("Backspace %c", ch);
if (ch == 127) printf ("Del %c", ch);_sleep(2000);
}
main()
{
char ch1= '\a', ch2='\t';
printf("%s", "Alo\n");
printf("%cVeja que esta na proxima linha %c", ch2,ch1);_sleep(2000);
}
/* Exibe o alfabeto em minsculo, usando um contador definido como char.*/
main()
{
char ch;
for (ch='a'; ch <='z'; ch++)
printf("\t%c", ch);_sleep(2000);
}
b) x + 5 + x + x
_______________________________________________________________
a) 5teste h) _ir
b) n_rg i) n sapato
c) c.p.f j) num2cod2
d) valor-sal k) nome
e) cod1 l) x
f) cidade/uf m) my
g) $salario
3) Identifique o tipo ideal para as variveis abaixo. A letra F identifica como nmero real, o I como
numrico inteiro, o C como caracter e o E quando estiver incorreta a alternativa.
a) -8 ( ) g) -600 ( )
b) 0 ( ) h) 500.33 ( )
c) X ( ) i) 789003983 ( )
d) ( ) j) 300.00 ( )
e) .V. ( ) k) -92.34 ( )
f) 9 ( ) l) 945 ( )
Exponenciao: usada para elevar um nmero a outro. O operador pode ser o sinal circunflexo
(^) ou dois asteriscos (**) ou uma funo (pow ou exp), dependendo da linguagem de
programao.
Na linguagem escrita quando elevamos um nmero a outro, como o exemplo 2. Desta
forma entendemos que o nmero 2 a base e o 3 o expoente. No computador a representao
diferente. No lugar de colocarmos o 3 em cima , o colocamos do lado, e no meio o smbolo, que
representa o operador de potenciao, ficando da seguinte forma: 3 ** 2 ou 3 ^ 2.
A exponenciao tem maior prioridade que os demais operadores.
Exemplo: 2 ^ 3 ou 2 ** 3
O resultado dessa operao 8, ou seja, o 2 igual a 8.
No C pow(2,3), e em Pascal exp(2 * ln(3)).
Mod e Div
Em muitas linguagens de programao existem o operador div e mod, que tem a funo
de trabalhar com nmeros inteiros. Esses operadores tm a mesma prioridade e devem ser
efetuados antes da adio ou subtrao.
Quando estivermos fazendo clculos de diviso com nmeros inteiros (10, 4500, -900, -
15) podemos utilizar o operador DIV. O resultado da expresso onde foi usado o DIV sempre
um nmero inteiro, o quociente.
5 DIV 2 = 2
5 MOD 2 = 1
Obs: Na linguagem C usado o operador % para representar o MOD.
5 2
Resto da Diviso 1 2 Parte Inteira da Diviso
(Quociente)
Exemplos:
22 DIV 5 = 4
22 MOD 5 = 2 ou em C 22 % 5 = 2
70 MOD 10 = 0
2 DIV 2 = 1
-400 DIV 4 = 100
4. Converso de Tipo
A linguagem C oferece o recuso de converso automtica de valores. A converso pode
ser feita usando o operador cast (operador de molde de tipo). Esse operador colocado entre
parnteses antes do valor a ser convertido.
Exemplo:
a) float x = 5;
o valor de x convertido para 5.0;
c) int a, b;
a = (int) 3.5; -- atribudo o valor 3 para a varivel a
b = (int) 3.5 % 2; -- convertido o valor 3.5 para 3 para depois fazer a
operao mdulo, que s pode ser feita com valores do tipo inteiro.
Exemplos de Prioridades:
1) 3 + 4 = 7
A operao da adio pode ser efetuada em primeiro lugar quando no existir nenhuma
outra operao com maior prioridade.
2) 9 - 4 * 2 =
O operador de maior prioridade nesta expresso a multiplicao, devendo ser realizada
em primeiro lugar. 4*2=8
Depois, substitumos a expresso calculada (4 * 2) pelo seu resultado ( 8 ) e efetuamos a
segunda operao, que a subtrao.
9 - 4*2
9-8=1
O resultado 1
Percebam que no foi realizada a operao pela ordem que foi escrita, mas sim pela ordem de
prioridades, como na matemtica convencional.
Se no fosse aplicada a prioridade dos operadores o resultado da expresso seria 10, um
valor diferente de 1, o correto.
94*2=
5 * 2 = 10
3) 4 * 3 - 4 / 2 ** 2 =
Deve ser realizada em primeiro lugar a operao que tem o operador de maior prioridade,
ou seja, a potenciao 2 ** 2.
4
Prof Angelina V.S.Melar
44
Depois, substitumos a expresso de potenciao (2 ** 2) pelo seu resultado (4).
4 * 3 - 4/ 2* 2
4 * 3 - 4/ 4
Agora os operadores de maior prioridade so a multiplicao e a diviso. Esses dois
operadores tm valor de prioridade igual, ento tanto faz a ordem de execuo.
4*3
12
Ento, substituindo a operao pelo resultado, temos:
4 * 3 - 4 / 2 ** 2
4*3-4/ 4
12 - 4 / 4
Restaram duas operaes a serem feitas: a subtrao e a diviso. Como a diviso tem
maior prioridade a efetuaremos primeiro.
4/4
1
4 * 3 - 4 / 2 ** 2
4*3-4/ 4
12 - 4 / 4
12 - 1 = 11
O resultado da expresso foi 11.
Vamos supor que voc no se lembra das prioridades dos operadores e faa pela ordem
escrita. Ser que o resultado ser o mesmo? Veja a seguir a execuo da mesma expresso.
4 * 3 - 4 / 2 ** 2 =
12 - 2 ** 2 =
12 - 4
8
O resultado no o mesmo que na resoluo anterior.
4) 5 * 2 ^ (4 - 2) =
Neste exerccio temos uma expresso dentro de parnteses. O operador que est dentro do
parntese deve ser sempre efetuado em primeiro lugar.
( 4 - 2)
2
Vamos substituir o resultado da expresso dentro de parnteses na expresso geral.
5 * 2 ^ (4 - 2)
5*2^ 2
Agora, como no temos mais nenhum parnteses, efetuaremos o clculo da expresso
que tem o operador com maior prioridade.
2^2
4
Substituindo o resultado da potenciao:
5 * 2 ^ (4 - 2)
5*2^ 2
5* 4
20
O resultado 20. Se o clculo fosse feito sem priorizar o parntese o resultado da
expresso seria 100.
Prof Angelina V.S.Melar
45
Exerccios de Expresses Aritmticas e Prioridades de Operadores
1. 3 + 4 * 4 + 8 / 2 =
2. (3 + 4 ) * 4 + (8 / 2) =
3. 64 / 8 - 3 =
4. 4 ^ 3 + 2 * 3 =
5. 81 / 3 ^ 2 =
6. 2 ^ (2 * 1 + 2) / 2 =
7. 4 * 2 ** (4 / 2) =
8. 66 DIV 4 * 2 + 2=
9. 15 MOD 3 * 1 =
10. 27 MOD (3 ** 2) =
11. 17 MOD 2 + 7 DIV 3 =
12. 21 * 16 /4 =
13. 70 DIV 7 =
14. (21 / 2) / 2 * 3 =
15. [12 - (4 * 2) ] + 2 =
1. Funes Matemticas
Existem vrias funes matemticas j programadas que esto na biblioteca Math.h,
como funes para calculo da exponenciao, raiz quadrada, logaritmo. Os valores do ngulo so
em radianos.
Funo Explicao Exemplo Exibio
Abs() Retorna o valor absoluto Abs(-200) 200
pow() Calcula exponenciao (potncia) pow(3,2) 9
Sin() Calculo o seno do ngulo sin(90) 0.8939
Cos() Calculo o cosseno do ngulo cos(90) -0.448
Tan() Calculo tangente do ngulo tan(90) -1.9952
Sqrt() Calcula a raiz quadrada sqrt(25) 5
Log() Calculo o logaritmo natural log(100) 4.6051
Log10() Calculo o logaritmo decimal log10(100) 2
100 decimal = 0 1 1 0 0 1 0 0
&
15 decimal 00001111
____________
0 0 0 0 0 1 0 0 4 decimal
main()
{
int num;
num = rand()%10+1;
printf("%i", num); _sleep(2000);
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
srand((unsigned int)time((time_t *)NULL));
int num;
num = rand()%10+1;
printf("%i", num); _sleep(2000);
}
//srand(time(NULL));
Entrada: a leitura de dados feita atravs de dispositivos de entrada (teclado, mouse, arquivo,
entre outros). Essa leitura feita e depois o dado transportado para a memria principal
(RAM). A entrada no pseudocdigo denominada como leia. O dispositivo de entrada a ser
utilizado o teclado.
Pseudocdigo:
inteiro num;
leia (num) ;
Ser reservado na memria RAM um endereo para num. Depois ser feita a leitura do teclado e
armazenado o valor na varivel num.
Sada: pode ser a exibio de uma mensagem, ou a recuperao de um contedo que est na
memria e ser transmitido para um dispositivo de sada (monitor, impressora, caixa de som,
entre outros).
A sada no pseudocdigo denominada como escreva ou exiba. O dispositivo de sada
a ser utilizado o monitor.
Pseudocdigo:
Escreva (Informe um nmero);
Escreva (Salrio calculado , sal);
Bloco de instrues/comandos
Um bloco de comandos ou instrues determina o conjunto de aes a serem executadas.
Ele serve para definir os limites de existncia de uma varivel, ou seja, o escopo de uma varivel.
Podemos ter diversas variveis declaradas no decorrer do algoritmo/programa, podendo ter duas
com o mesmo nome, mas valores diferentes, dependendo do bloco em que foram declaradas.
As aes dentro do bloco so separadas pelo ponto e vrgula ( ; ). Servindo para organizar
e determinar a execuo ou encerramento de uma ao.
Podem ser recebidos vrios valores ao mesmo tempo, usando como separador de entrada
um espao em branco ou o caracter dois pontos ( : ). Os especificadores %d, %f, %e pulam
automaticamente os brancos que precedem os valores numricos.
Comandos de Formato mais usados
Cdigo Formato
%c caracter
%d , %i inteiros decimais com sinal
%f , %e, %g ponto flutuante decimal
%s string de caracteres
#include <stdio.h>
#include <stdlib.h>
#include <conio.c>
main()
{
char caracter;
caracter=getch();
printf ("Voce pressionou a tecla %c que equivale ao numero %i Asc",caracter, caracter );
_sleep(2000);
}
Exemplos
Exemplo 1
Faa um programa que receba dois nmeros inteiros e efetue as operaes: adio, subtrao,
multiplicao, diviso, resto da diviso e exponenciao.
Pseudocdigo Codificao em C
Incio #include <stdio.h>
inteiro n1, n2, soma, subtr, mult, divisao, #include <stdlib.h>
expo, resto; #define escreva printf
escreva (Informe primeiro nmero);
leia (n1); main()
escreva (Informe segundo nmero); {
leia (n2); int n1, n2, soma, subtr, mult, divisao,
soma n1+ n2; expon, resto;
subtr n1 - n2; escreva ("Informe 2 numeros");
mult n1 * n2; scanf("%i%i", &n1, &n2);
divisao n1 / n2; soma= n1+ n2;
resto n1 mod n2; subtr= n1 - n2;
expo = (n1, n2); mult= n1 * n2;
escreva (Soma:, soma); divisao= n1 / n2;
escreva (Subtracao:, subtr); resto= n1 % n2;
escreva (Multiplicacao:, mult); escreva ("Soma: %i - Subtracao: %i \n",
escreva (Divisao:, divisao); soma, subtr);
escreva (Resto da diviso:, resto); escreva ("Multiplicacao: %i \n", mult);
escreva (Exponenciao:, expo); escreva ("Divisao: %i Resto da diviso:
Fim %i\n", diviso, resto);
_sleep(8000);
}
Receber
Descrio Narrativa: ANO_NASC
Receber o ano de nascimento
Receber o ano atual
Receber
Subtrair o ano atual do ano de nascimento para saber a idade ANO_ATUAL
Somar o valor da idade com 30 para saber quantos anos ter daqui 30 anos
Mostrar idade atual
Mostrar idade daqui a 30 anos. IDADE = ANO_ATUAL - ANO_NASC
Pseudocdigo
Inicio IDADE30 = IDADE + 30
inteiro ano_nasc, ano_atual, idade, idade30;
Escreva (Digite o ano atual);
Leia (ano_nasc); Mostrar
IDADE
Escreva (Digite o ano de nascimento);
Leia (ano_atual);
Idade ano_atual ano_nasc;
Mostrar
Idade30 idade +30; IDADE30
Escreva (A sua idade , idade);
Escreva (Daqui a 30 anos voc ter:,Idade30);
Fim FIM
Linguagem C
Linguagem Pascal
#include <stdio.h> Program idade;
#include <stdlib.h> Var
main() ano_nasc, ano_atual, idade, idade30: integer;
{
int ano_nasc, ano_atual, idade, idade30; begin
printf(\nDigite o ano atual); write(Digite o ano atual);
scanf(%i,&ano_nasc); readln(ano_nasc);
printf(\nDigite o ano de nascimento); write(Digite o ano de nascimento);
scanf(%i,&ano_atual); readln(ano_atual);
idade = ano_atual ano_nasc; idade := ano_atual ano_nasc;
idade30= idade +30; idade30 := idade +30;
printf(A sua idade %i, idade); writeln(A sua idade , idade);
printf(Daqui a 30 anos voc ter: writeln(Daqui a 30 anos voc ter:, idade30);
%i,idade30); end
}
MEMRIA
ENTRADA SADA
18
PROCESSAMENTOS 48
IDADE = ANO_ATUAL - ANO_NASC IDADE30 = IDADE + 30
IDADE = 1998 - 1980 IDADE30 = 18 + 30
IDADE = 18 IDADE30 = 48
01) Uma loja de telefone celular paga aos seus vendedores um salrio fixo mais uma comisso de R$
50,00 por cada aparelho vendido. Faa o pseudocdigo e fluxograma que receba o nome do vendedor, o
nmero de aparelhos vendidos e calcule o salrio total do vendedor.
Entrada:
nome do vendedor
nmero de aparelhos vendidos
valor do salrio fixo (mesmo no sendo pedido no enunciado, o valor do salrio fixo deve ser
recebido para o clculo do salrio total)
Processamento:
calcular o valor da comisso
_ quantidade de aparelhos vendidos * 50
calcular o salrio total
_ o valor da comisso + o valor do salrio fixo
Sada: Fluxograma:
mostrar o salrio total do vendedor
INCIO
Pseudocdigo
Receber
NOME_VEND
INCIO
caracter nome;
inteiro quant; Receber
real sal_bruto, comis, sal_total; QUANT
escreva (Nome do Funcionrio:);
leia nome;
escreva (Quantos aparelhos foram vendidos); Receber
leia quant; SAL_BRUTO
escreva (Qual o valor do salrio fixo);
leia sal_bruto;
comis quant * 50; COMIS = QUANT * 50
sal_total sal_bruto + comis;
escreva (O salrio final :, sal_total);
FIM SAL_TOTAL = SAL_BRUTO + COMIS
Mostrar
SAL_TOTAL
FIM
2. Operadores Lgicos
As expresses lgicas so aquelas que operam com valores lgicos e resultam tambm
num valor lgico. Elas podem ser utilizadas em testes de variveis, tomada de deciso e
expresses matemticas. A funo do operador lgico NO pode modificar valores e
expresses, pois ele serve para negar a expresso.
Exemplos:
Pseudocdigo C Explicao
No ( Idade = 5 ) ! ( Idade = = 5 ) Nessa expresso temos o resultado Falso, pois o
operador lgico NO negou a expresso contida
dentro do parnteses.
num1 5 num1 = 5; O resultado dessa expresso Falso, pois o
num2 6 num2 = 6; operador E exige que as duas condies sejam
verdadeiras para o resultado ser Verdadeiro. Veja
num1 > 7 E num2 > 5 num1> 7 && que a primeira condio est indicando que o
num2>5 Nmero1 maior que 7, mas isso no verdadeiro,
pois o valor do Nmero1 5, e 5 menor que 7. A
segunda condio verdadeira, pois 6 maior que 5.
COMER O DOCE
F EST V
ESTRAGADO?
FIM
FIM
Exerccio Resolvido
Elabore um programa que receba dois nmeros e no final mostre o maior nmero digitado.
Entrada:
Receber dois nmeros
Processamento:
Verificar qual o maior nmero digitado Linguagem C
Sada: #include <stdio.h>
Mostrar o nmero maior #include <stdlib.h>
main()
Pseudocdigo {
Inicio float num1, num2;
Real num1, num2; printf(\nDigite o primeiro nmero);
Escreva (Digite o primeiro nmero); scanf(%f,&num1);
Leia num1; printf(\nDigite o segundo nmero);
Escreva (Digite o segundo nmero); scanf(%f,&num2);
Leia num2; if (num1 > num2)
SE (num1 > num2) ento printf(O maior nmero %f, num1);
Escreva (O maior nmero : , num1); else
Seno printf(O maior nmero %f, num2);
Escreva (O maior nmero : , num2); }
Fim
Teste de Mesa
MEMRIA
VALORES
SIMULADOS
NUM1 NUM2
PROCESSAMENTO
100 100 5
5
SADA
ENTRADA
100
if (condio) if (condio)
instruo; {
instruo 1;
instruo n;
}
Exemplo:
a) if (n1 > n2)
printf (O primeiro nmero maior que o segundo);
b) if (n1> n2)
{
printf(O primeiro nmero maior que o segundo);
printf(Informe outro valor);
scanf(%i, &n3);
}
if (condio) if (condio)
instruo; {
else instruo 1;
instruo; instruo n;
}
else
{
Instruo 1;
Instruo n;
}
Exemplo:
a) if (n1 > n2)
printf (O primeiro nmero maior que o segundo);
else if (n1 == n2)
printf (Os dois nmero so iguais);
else
printf (O segundo nmero maior que o primeiro);
Essa estrutura usada quando existem vrias verificaes a serem feitas e uma pode
depender da outra. Pode ser executada uma condio simples ou composta dentro de outra
condio.
Pode existir a Estrutura de Deciso Heterognea, quando no existe um padro lgico no
encadeamento. Exemplo: se..seno...se...se...seno.
Quando existe um padro lgico das estruturas de deciso chamada Estrutura de
Deciso Homognea. Exemplo: se..seno..se..seno..se..seno.
SE (condio) ENTO
Incio
instruo;
SE (condio) ENTO
instruo;
Fim
SENO
Incio
Instruo 1;
Instruo n;
Fim
if (condio)
instruo;
else if (condio)
{
instruo 1;
instruo n;
}
else if (condio)
instruo;
Exemplo:
If (n1 > n2)
printf(O primeiro nmero maior que o segundo);
else if (n2 == 0)
{
printf (O segundo nmero no pode ser zero);
printf(Informe outro nmero);
scanf(%i, &n2);
}
else if (n1 == n2)
{
printf (Os dois nmero so iguais);
printf(Informe outro nmero);
scanf(%i, &n3);
}
Exemplo 1: Receba uma idade qualquer e mostre uma mensagem de acordo com ela. Se a
idade for igual ou menos de 5 anos a criana deve ser INCIO
vacinada.
Receber
Pseudocdigo IDADE
Inicio
Inteiro idade;
F IDADE V
Escreva (Digite sua idade); <=
Leia (idade); 5
Exemplo 2: Receba a idade de uma pessoa e mostre uma mensagem de acordo com ela. As
pessoas que tem mais de 11 anos e menos de 18 so consideradas adolescentes.
Pseudocdigo
Pseudocdigo
Inicio
Inteiro idade;
Escreva (Digite sua idade);
Leia idade;
SE (idade < 18) ento
Escreva (No pode dirigir);
SE (idade > 85) ento
Escreva (No pode dirigir);
Fim
Operador Ternrio
Em C existe o operador ? (operador condicional) que facilita a verificao de sentenas
simples (nicas).
Estrutura: condio ? expresso1 : expresso2;
A condio avaliada;
Se ela for verdadeira o resultado a execuo da expresso1;
Se a condio for falsa o resultado a execuo da expresso2.
Pseudocdigo:
verifique <varivel>
incio
caso <valor> : <instrues> ; pare;
caso <valor> : <instrues >; pare;
....
caso no seja nenhuma das opes anteriores: < instrues>; pare;
fim do verifique
Codificao em C:
switch (varivel)
{
case <valor>:
instrues;
break;
case <valor>:
instrues;
break;
...
default:
instrues;
}
O comando default executado se nenhum valor for encontrado nos case anteriores, ou
seja, nas comparaes ele no encontrar um valor verdadeiro. O uso do default opcional.
O comando break serve como um desvio de execuo. Ao ser executado dentro do switch
ele finaliza a seqncia de instrues do case e sai do switch. Se no for usado o break o
computador continuar dentro do switch executando as instrues dos outros case.
b)
case / :
if( n2 = = 0 )
printf(No existe diviso por zero);
else
r= n1 / n2;
break;
02) Receba um nmero inteiro e classifique-o como negativo, positivo ou nulo. Essa classificao dever
ser exibida por uma mensagem.
main()
{ main()
int numero; {
scanf(%i, &numero); int numero;
if (numero = = 0) scanf(%i, &numero);
printf(Nmero Nulo); if (numero = = 0)
else printf(Nmero Nulo);
if (numero > 0) if (numero > 0)
printf (Nmero Positivo); printf (Nmero Positivo);
else if (numero < 0)
printf(Nmero Negativo); printf(Nmero Negativo);
} }
Ou...
#include <stdio.h>
#include <stdlib.h>
main()
{
int cont=0;
printf("\nValor do contador %i", cont);
printf("\nEndereco de cont %i\n", &cont);
if (cont == 0)
{
int cont = 5;
printf("\n\tValor do contador do bloco %i", cont);
printf("\n\tEndereco de cont do bloco %i\n", &cont);
}
printf("\nValor do contador fora do bloco %i", cont);
printf("\nEndereco de cont fora do bloco %i", &cont);
getch();
}
Tome cuidado na hora da definio dos processos a serem repetidos. Se voc quiser que a
tela seja limpa toda vez que for exibida uma mensagem; ento a instruo para limpar a tela deve
estar dentro do corpo do loop, seno, a tela ser limpa apenas uma vez.
A estrutura que aprenderemos a partir de agora usada para tornar automtica a repetio
de um programa inteiro ou apenas uma parte dele. Com a repetio automtica os programas
tornam-se mais rpidos e geis, no existindo linhas de comandos idnticas repetidas.
Quando for repetido um trecho do programa e j se souber a quantidade de vezes que ele
ser executado, ento, voc usar a estrutura de repetio pr-definida com contador. Um
exemplo onde podemos usar esta estrutura num programa que faz a exibio do nmero 1 at
300.
Mas, quando no conhecido de antemo o nmero de vezes a ser repetido um conjunto
de instrues, ento voc usar a estrutura com condio. Essa estrutura consiste em executar as
instrues enquanto uma condio pr-definida for verdadeira.
Enquanto .. Faa
INSTRUES
Incio Incio
... ...
Instruo; Instruo;
validao da condio; validao da condio;
ENQUANTO (condio) FAA ENQUANTO (condio) FAA
Instruo; Incio
Fim Instruo;
Instruo;
Fim
Obs:Estrutura que repete apenas uma Fim
instruo
Obs: Sero repetidas vrias instrues, por isso
h a necessidade de haver um delimitador
(inicio/fim) do bloco de repetio.
Estrutura em C
while (condio)
while (condio) {
instruo; Instruo1;
Instruo2;
...
Instruo n;
}
Prof Angelina V.S.Melar
70
2. Repetio com Ps-condio - Faa..Enquanto
Faa .. Enquanto
Nesta estrutura a execuo das instrues ocorrer pelo menos uma vez, pois a condio
que determina o fim da repetio est no final do bloco de instrues. De forma, que no
preciso validar a condio no incio.
Enquanto a condio testada for verdadeira ser feita a execuo das instrues
repetidamente.
Incio
...
Instruo;
Faa
Incio
Instruo1;
Instruo2;
...
Instruo n;
Fim
ENQUANTO (condio);
Fim
Incio
Instruo;
Repita
Instruo1;
Instruo2;
...
Instruo n;
at (condio);
Fim
Exemplos de Pseudocdigo
a) num 1; b) resp s;
enquanto (num >0) faa enquanto (resp = s) faa
incio
...
fim
c) faa
incio
....
fim
enquanto (num >0);
Exemplos em C
a) num = 1; b) resp = s; c) do
while (num >0) while (resp = s) { .
{ { ....
.... ... }while(num >0);
} }
Continue: ele encerra apenas a iterao atual do lao- no executa as instrues aps ele -
voltando ao incio da repetio.
Exemplo 2: para criar um loop com a condio de trmino definida dentro do estrutura de
repetio:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num;
while (1)
{
scanf("%d", &num);
if (num ==0)
exit(0);
}
_sleep(7000);
Dica: O exit(0) ir finalizar o programa direto. Se for usado o break no lugar do exit(0) ele ir
finalizar a repetio e ir continuar o programa executando o _sleep(7000), e as demais
instrues que houverem aps a estrutura de repetio.
#include <stdio.h>
#include <stdlib.h>
main()
{
float cont=1, nota=0, falta;
while (cont <= 2)
{
printf("\nDigite a nota do aluno:");
scanf("%f", ¬a);
if ((nota < 0) || (nota > 10))
{
printf("\nA nota digitada deve estar entre 0 e 10");
continue;
}
printf("\nDigite a frequencia do aluno:");
scanf("%f", &falta);
cont++;
}
system("pause");
}
for (varivel de controle = valor inicial; condio que define o fim do lao; valor do
incremento ou decremento)
instruo;
ou,
for (varivel de controle = valor inicial; condio que define o fim do lao; valor do
incremento ou decremento)
{
Instruo 1;
Instruo 2 ;
...
Instruo n;
}
Exemplos:
a) for (cont =1; cont <=10; cont ++)
printf(Ordem crescente: %i, cont);
O continue faz com que o lao seja finalizado sem executar as instrues abaixo
e volte ao incio, fazendo um novo ciclo.
O uso de mais de uma varivel dentro do for deve ser feito com o uso da vrgula
(,).
for (n1=1, n2=1; n1+n2 < 10; n1++, n2++)
O lao for pode ser usado para criar um atraso de tempo. Para isso ele no deve
possuir nenhuma instruo associada a ele.
for (atraso =0 ; atraso < 100; atraso++);
Incio
int numiden, cont;
PARA contl AT 200 INC contcont +1 FAA
Incio
Escreva (Nmero de identificao do funcionrio:);
Leia (numiden);
Fim
Fim
Linguagem C
Condio de trmino da repetio:
#include <stdio.h>
Repete at que o valor de cont fique maior que 200
#include <stdlib.h>
Ou
main()
Enquanto o valor de cont for menor ou igual a 200 repete
{
int numiden, cont;
for (cont=1;cont <=200;cont++)
{
printf (Nmero de identificao do funcionrio);
scanf (%i, &numiden);
system(pause);
}
}
Explicao:
1. No exemplo acima inicialmente feita a atribuio do valor 1 a varivel de controle
com o valor.
2. Em seguida feita a verificao da condio que determina o fim da repetio, se ela
for Verdadeira inicia a execuo do cdigo que est no bloco. Se for falsa j finaliza
(mesmo se nunca executou o cdigo dentro do bloco de comandos).
3. Executa o bloco de instrues, que contm a entrada do nmero de identificao. No
final da execuo do bloco automaticamente adicionado ao contedo da varivel de
controle o valor 1 (anteriormente valia 1, mais 1 de agora, a varivel passa a ter o valor
2).
4. Depois verificado o valor da varivel com o valor final pr-definido (200), como no
passo 2. Repetindo todo o processo vrias vezes. At que ...
5. o valor da varivel de controle atinja o valor maior que o definido no intervalo (201).
Quando isso ocorrer a repetio pra e ser iniciada uma nova seqncia de comandos
definidos fora da repetio, aps o bloco de comandos.
Cuidados: Cuidados:
todas as variveis contadoras todas as variveis
devem ser zeradas no incio; acumuladoras devem ser
o contedo da varivel zeradas no incio do processo;
contadora deve ser o contedo de uma varivel
incrementado com o valor de acumuladora deve ser
uma constante (normalmente incrementado com o valor de
o valor 1); outra varivel;
para a varivel contadora ser para a varivel acumuladora
incrementada vrias vezes ela ser incrementada vrias vezes
deve ser colocada dentro de ela deve ser colocada dentro
um lao. de um lao.
Exemplo: Exemplo:
ContPessoas ContPessoas + 1; Somanota Somanota + Nota;
2. Declarao da Funo
tipo_de_retorno nome_da_funo (tipo_de_parmetro nome_do_parmetro, ....)
{
declarao das variveis locais;
corpo da funo;
retorno;
}
O tipo_retorno especifica o tipo de valor (int, float) que a funo retornar atravs do
return. Os tipos podem ser inteiros (int), reais (float), char (caracter) ou mesmo void (no
retorna nada). Se no especificado o tipo o compilador assume um retorno inteiro.
O nome_da_funo o identificador da funo. Atravs dele possvel saber o que a
funo executar, por exemplo, se a funo for criada para fazer uma adio ela pode ser
chamada de soma(). O compilador procura pelo nome da funo para fazer o desvio de execuo.
A lista de parmetros separada por vrgula. O tipo_de_parmetro e o seu nome so
respectivamente o tipo e o nome da varivel que sero passados para a funo. Uma funo
pode no ter parmetros. Esses parmetros estabelecem a comunicao bidirecional entre o
subalgoritmo e o algoritmo que o chamou.
O corpo da funo contm todas as instrues que devero ser executadas pela funo.
Ele deve estar entre chaves { }. A chaves de abertura { marca o incio da funo e a chaves
fechada } marca o final da funo.
Exemplo:
float media_notas (float nota1, float nota2)
{
float media;
media = (nota1+nota2)/2;
return media;
}
Exemplo 1 :
int main(int argc, char *argv[])
{
printf("Total de argumentos passados %i", argc);
printf("Nome do programa %s", argv[0]);
_sleep(3000); return 0;
}
Exemplo 2:
int main(int argc, char *argv[])
{
int i=0;
printf("Total de argumentos passados %i", argc);
while (i< argc)
{
printf("\n%d - string informadas %s", argc, argv[i]);
i++;
}
_sleep(3000);
return 0;
}
Prof Angelina V.S.Melar
80
Exemplo 3:
int main(int argc, char *argv[])
{
int i=0;
if (atoi(argv[1]) > 0)
printf("\nNumero positivo");
_sleep(3000);
return 0;
}
4. Comando Return
Tem duas formas de uso:
ele provoca uma sada imediata das funo que o contm, retornando a funo anterior.
retornar um valor para outra funo
5. Tipo Void
Todas as funes que no devolvem valores devem ser declaradas como tipo void.
Quando uma funo no tem parmetros, deve ser colocado o void entre parnteses.
Quando no existe um retorno o tipo de funo void.
As funes podem ser usadas como rotinas de entrada, rotinas de criao de ela ou rotinas
de exibio de dados. Muitas rotinas so especficas e independem dos valores de variveis de
outras rotinas, por isso o uso do tipo void na especificao das funes.
Exemplo:
void entrada(void);
main()
{
entrada(); O void no parmetro opcional.
.... O void na definio do tipo de funo
system(pause); obrigatrio
}
void entrada(void)
{
system(cls);
printf(\n\n\n); printf(<1> - Adio \n); printf(<2> - Subtrao \n);
printf(<3> - Multiplicao \n); printf(<4> - Diviso \n);
printf(<5> - Sair \n);
}
main()
{
}
** A funo media_notas() do tipo float porque o retorno dela ser uma varivel do tipo float
(media).
** Os parmetros (nota1 e nota2) so do tipo float porque seus respectivos argumentos (n1,n2) so
do tipo float.
void contador ()
{
static int cont=0;
printf("\nValor do contador %i", cont++);
}
*** Perceba que a inicializao somente ocorre a primeira vez que a funo executada.
Tambm existe a static definida fora da funo que pode ser usada em qualquer parte do cdigo-
fonte atual, mas no pode ser usada por outros arquivos fontes. Isso quando for usada uma estrutura de
projetos.
main()
{
float num, qd; //declarao das variveis locais
printf ("Entre com um numero: ");
scanf ("%f",&num);
printf ("Na funo MAIN a varivel num vale %.2f \n", num);
qd= quadrado(num); //chama a funo quadrado() e envia o
argumento num
printf ("O quadrado do %.2f = %.2f\n",num, qd);
system(pause);
}
** A funo quadrado() do tipo float porque o retorno dela ser uma varivel do tipo float (num).
** O parmetro (num) do tipo float porque o argumento (num) do tipo float.
1) Faa uma funo que calcule a soma de dois nmeros recebidos na funo principal.
#include <stdio.h>
#include <stdlib.h>
float soma (float a, float b); // prottipo da funo soma
main( ) // incio da funo principal
{
float n1, n2, total; // definio das variveis locais
printf("\n Este programa calcula a soma de dois nmeros");
printf("\n\n Digite o valor do primeiro nmero");
scanf("%f", &n1);
printf("\n\n Digite o valor do segundo nmero");
scanf("%f", &n2);
total=soma(n1, n2); // chamada da funo soma()
printf("\n\n A soma de %.2f com %.2f %.2f \n", n1, n2,total);
system("pause");
} // fim da funo principal
void pausa(void)
{
system(pause);
system(cls);
}
main()
{
int num, r_fatorial;
printf("Informe valor: ");
scanf("%i", &num);
r_fatorial = 1;
if (num == 0)
r_fatorial = 1;
else
{
do
{
r_fatorial *= num;
num--;
}while (num !=0);
}
printf("O fatorial desse numero e %i", r_fatorial);
_sleep(2000);
}
main()
{
int num;
printf("Informe valor");
scanf("%i", &num);
As variveis locais de chamadas recursivas so independentes entre si, como se tivessem chamando
funes diferentes.
Simulao da execuo:
Fatorial do nmero 2
A)- envia o argumento 2
- na funo testa o valor
- tem o return 2 * f_fatorial(2-1)
*** no retorna, pois primeiro tem um funo a ser executada.
2. Exemplos:
0 1 2 3 4 5 6 7 8 9
2.5 4.5 6.5 3.5 10 8 7 5.5 6 8.5
3. Declarao:
A declarao de um vetor pode ser feita da seguinte maneira:
tipo_da_varivel nome_da_varivel [tamanho];
Onde:
tipo_da_varivel o tipo base do vetor (int, float, char, etc), ou seja, qual tipo de
contedo ser armazenado na varivel;
tamanho_da_varivel a quantidade de elementos que o vetor armazenar.
Exemplo:
float medias[45];
5. Armazenando os elementos
Para ser feito o armazenamento no vetor necessrio de definir seu nome e em qual
posio dever ser armazenada (qual ndice). O armazenamento pode ser feito separadamente ou
em conjunto, de uma vez s. Veja os exemplos abaixo:
media[0] = 2.5;
float media[10]= {2.5,4.5,6.5,3.5,10,8,7,5.5,6,8.5};
float media[]= {2.5,4.5,6.5,3.5,10,8,7,5.5,6,8.5};
media[1] = 4.5;
Exemplos
a) Recebendo elementos de um vetor do tipo inteiro digitados via teclado
for ( i=0; i<100; i++ )
{
printf(Digite %i elemento do vetor, i++);
scanf( %i, &vet[i] );
}
7. Exerccios Resolvidos:
1) Crie um vetor com 10 elementos do tipo inteiro e depois armazene automaticamente os
valores de 0 a 9.
main()
{
int x[10]; //definio do vetor
int i; //definio da varivel para controlar o ndice
for (i = 0; i < 10; i ++) //definio do lao para gerar o vetor
x [i] = i; //atribuio do valor da varivel i ao vetor x
system(pause); }
Funo gets()
A funo gets() usada para receber uma sria de strings, que podem ser separadas,
digitadas, com ou sem espao. Exemplo: gets(nome);
Cuidado: no coloque o ndice do vetor, pois, a funo se encarrega de separar cada
caracter na sua respectiva posio dentro do vetor ou matriz.
Exemplo: Faa um programa que receba um texto e depois mostre quantas vogais foram
digitadas.
main()
{
char texto[10];
int vogais=0,t;
printf ("Digite um texto\n");
gets(texto);
Dica: Quando voc quiser que no trave o programa na entrada de dados, de forma que o usurio
informe uma letra no lugar de entrar com o nmero, use uma dessas funes.
int main()
{
char num1[3], num2[3];
int inum1;
float fnum2;
printf("\nInforme o valor"); gets(num1);
printf("\nInforme o valor"); gets(num2);
inum1= atoi(num1);
fnum2= atof(num2);
printf("\nOs numeros validos informados sao %i e %.2f",inum1, fnum2);
_sleep(3000);
}
Ou
int i=0, i =0;
char nomes[20];
gets(nome_pes);
while(i<20 || !achou) //poderia ser ! (achou == 0)
{
if (!strcmp(nomes[i], valor)
{
achou = 1;
break;
}
else
i++;
}
Funo puts() usada para mostrar uma nica string por vez, mas com a vantagem de pular
a linha automaticamente.
main()
{
char senha1[10]= "Fatec", senha2[10]= "Fatec Itu";
puts("Senhas cadastradas\n");
puts(senha1); //aparece Fatec
puts(senha2); //aparece Fatec Itu
puts(&senha1[4]); //aparece c itu a partir do ndice 4.
}
if (strstr(nome, "Ana"))
printf("O nome possui o Ana");
else
printf("O nome no possui o Ana");
if (strchr(nome, 'a'))
printf("O nome possui o caracter a");
else
printf("O nome no possui o caracter a");
getchar();
return 0;
}
Funo fgets() A funo fgets() efetua a leitura de dados do tipo string fornecidos via teclado
delimitando seu tamanho. Ela aceita caracteres em branco no meio do string, colocando o
caractere de controle \0 apenas quando for pressionada a tecla <Enter>.
Para utilizar esta funo, preciso informar trs parmetros, sendo o nome da matriz-
string, o seu tamanho e o nome do buffer em uso:
fgets(VARIAVEL, TAMANHO, stdin);
1. Matriz Bidimensional
A linguagem C permite que seja declarada uma matriz bidimensional (varivel composta
homognea bidirecional) ou mesmo multidimensional.
Na matriz bidimensional o primeiro ndice indica a linha e o segundo a coluna. Os ndices
iniciam no zero(0). Para calcular o espao de memria necessrio para armazenar a matriz
necessrio fazer o seguinte calculo:
int pontos_jogos [2] [4];
2. Declarao:
A declarao de uma matriz bidimensional pode ser feita da seguinte maneira:
tipo nome [dimenso1] [dimenso2];
ou
tipo nome [linha] [coluna];
Exemplos:
1) char tabela[5][5];
0 1 2 3
0
1 pontos_jogos [1,3]
pontos_jogos [0,1]
3. Armazenando os elementos
A inicializao e armazenamento de uma matriz pode ser individual ou coletivo. Como
nos exemplos abaixo:
5. Mostrando os elementos
Para mostrar os valores armazenados dentro de uma matriz tambm usada a estrutura do
for. Para exibir a matriz mat declarada acima.
int *p, v;
O que define que a varivel um ponteiro o * antes do nome. O * tambm poderia estar
junto com o tipo: int* p.
p = &v;
int main()
{
int *p, v;
v= 8;
p= &v;
Podemos usar mais ponteiros para direcionar para o mesmo local da memria.
main()
{
int *p, *p2, v;
v= 8;
p= &v;
p2= p; //no usa o & para pegar o endereo do outro ponteiro
printf("\nO endereco de v e %p", &v);
printf("\nO conteudo do p e %p", p);
printf("\nO endereco do p e %p", &p);
printf("\nO valor de v %d", v);
printf("\nO valor de v mostrado atraves do ponteiro p %d", *p);
printf("\nO valor de v mostrado atraves do ponteiro p2 %d", *p2);
}
Aritmtica de ponteiros
Pode ser feito uso das operaes de adio e subtrao com os ponteiros. Mas cuidado
para no pegar o contedo da varivel para o qual ele est apontando e sim seu endereo. Se
acrescentarmos no programa anterior o cdigo abaixo:
int t;
t= sizeof(t); //ver o tamanho do tipo int e quantos bytes vai avanar
p++; printf("\nO contedo de p e %p", p);
printf("\nO contedo apontado pelo ponteiro p %d", *p);
Est sendo feito uma adio no ponteiro p++, de forma que ele ir avanar 4 bytes na
memria, pois, a cada incremento ele acrescentar ao seu endereo a quantidade de bytes de seu
tipo.
De forma que quiser retroceder e voltar a apontar para v, basta fazer uma subtrao com o
ponteiro.
p--;
Perceba que o tipo Double oculpa 8 bytes, quando subramos o ponteiro ele voltou 8 bytes.
main()
{
int *p, v;
v= 8;
p= &v;
printf("\nP %d e V %d", *p, v);
v+= 10; //somando 10 ao valor de v
printf("\nP %d e V %d", *p, v);
*p= *p+1;//somando 1 ao valor de v atravs do ponteiro
printf("\nP %d e V %d", *p, v);
(*p)++; //somando 1 ao valor de v atravs do ponteiro --use ()
printf("\nP %d e V %d", *p, v);
*p++; //erradoooo - voc acrescentou 1 ao valor do ponteiro
printf("\nP %d e V %d", *p, v);
}
Usando a passagem por referncia fica mais simples a mudana dos valores das variveis,
que deve ter seu valor usado e alterado independente da funo. Para que isso ocorra deve-se
declara as variveis como ponteiros. Os ponteiros so a referncia para poder alterar o valor da
varivel fora da funo. No se esquea quando usar a funo deve colocar um &(endereo) na
frente das variveis que estiverem sendo passadas para a funo.
No programa abaixo o que passado para a funo quadrado o endereo das variveis
num1 e num2. Estes endereos so copiados nos ponteiros pa e pb. Atravs do operador *
acessando o contedo apontado pelos ponteiros e modificando-o. Os valores armazenados em
num1 e num2 so modificados.
main()
{
int num1,num2;
printf("\nDigite o primeiro nmero"); scanf("%d",&num1);
printf("\nDigite o segundo nmero"); scanf("%d",&num2);
printf("\n\nAntes da chamada da funo Quadrado - os nmeros so %i
%i\n",num1,num2);
quadrado(&num1,&num2);
printf("\n\Depois da chamada da funo Quadrado - os nmeros so %i
%i\n",num1,num2);
system("pause");
}
void recebe(int pmat[], int t); /////////void recebe(int *pmat[], int t);
int main()
{
int mat[3], i ;
recebe(mat, 3);
for (i=0; i<3; i++)
printf("\n%d", mat[i]);
_sleep(20000);
}
struct Dados_Pessoais
{
char nome[81];
int idade;
float peso;
} P1; foi feita a declarao da varivel P1 que do tipo
Dados_Pessoais no final da definio da estrutura, mas, essa
declarao poderia ser feito de outra forma, como abaixo:
gets(Pessoa.Nome);
Pessoa.Idade = 41;
Pessoa.Peso = 75.6;
Resumindo
struct ponto typedef struct ponto
{ {
float x; float x;
float y; float y;
}; } P;
typedef struct ponto P; ou struct ponto P;
scanf (%f%f, &p.x, &p.y); printf(As coordenadas so %.2f - %.2f, p.x, p.y)
Exemplos de uso:
2. Recebendo dados
main()
{
struct dados_pessoais
{
char nome[81];
int idade;
float peso;
};
struct dados_pessoais aluno;
4. Igualando estruturas
main()
{
struct data
{
int dia;
char mes[10];
int ano;
};
data natal = { 25, "Dezembro", 1994};
data aniversario = { 30, "Julho", 1998};
printf("%i %s %i \n", aniversario.dia, aniversario.mes, aniversario.ano);
aniversario = natal;
printf("%i %s %i \n", natal.dia, natal.mes, natal.ano);
printf("%i %s %i \n", aniversario.dia, aniversario.mes, aniversario.ano);
}
Ou
typedef struct dados_pessoais{
char nome[81];
int idade;
float peso;
}Aluno; //define o tipo Aluno
int main()
{
int i;
for (i=0;i<3;i++)
{
printf("\nCadastro n: %i\n", i+1);
fflush(stdin); printf("\nNome do aluno:"); gets(aluno[i].nome);
printf("\nIdade:"); scanf("%i", &aluno[i].idade);
printf("\nPeso:"); scanf("%f", &aluno[i].peso);
printf("%i %s %.2f \n", aluno[i].idade, aluno[i].nome, aluno[i].peso);
}
system("pause"); return 0;
}
Ou
main()
{
int i;
struct dados_pessoais
{
char nome[81];
int idade;
Prof Angelina V.S.Melar
111
float peso;
};
paluno = &aluno;
for (i=0;i<3;i++)
{
printf("\nCadastro n: %i\n", i+1);
fflush(stdin);
printf("\nNome do aluno:"); gets(paluno->nome);
printf("\nIdade:"); scanf("%i", paluno->idade);
printf("\nPeso:"); scanf("%f", paluno->peso);
printf("%i %s %.2f \n", *paluno->idade, *paluno->nome, *paluno->peso);
}
system("pause");
}
struct dados_pessoais
{
char nome[81];
int idade;
float peso;
data data_niver ;
} aluno[3];
main()
{
int i;
for (i=0;i<3;i++)
{
printf("\nCadastro n: %i\n", i+1);
fflush(stdin);
printf("\nNome do aluno:"); gets(aluno[i].nome);
printf("\nIdade:"); scanf("%i", &aluno[i].idade);
printf("\nPeso:"); scanf("%f", &aluno[i].peso);
printf("\nData de Aniversario:"); scanf("%i-%i%i", &aluno[i].data_niver);
printf("%i %s %.2f \n", aluno[i].idade, aluno[i].nome, aluno[i].peso);
}
Prof Angelina V.S.Melar
112
7. Usando estrutura e funo
void exibedesenho(struct desenho xtrapezio);
struct desenho
{
int basemenor;
int basemaior;
int altura;
float area;
};
main()
{
struct desenho trapezio;
trapezio.basemenor =2;
trapezio.basemaior= 7;
trapezio.altura = 5;
trapezio.area= (trapezio.basemenor + trapezio.basemaior) * trapezio.altura/2;
exibedesenho(trapezio);
}
main()
{
struct desenho trapezio;
calculadesenho(&trapezio);
printf("Base menor: %i \n \r", trapezio.basemenor);
printf("Base maior: %i \n \r", trapezio.basemaior);
printf("Altura : %i \n \r", trapezio.altura);
printf("Area do Trapezio: %.f \n \r", trapezio.area);
system("pause");
}
Prof Angelina V.S.Melar
113
void calculadesenho(struct desenho *ptrapezio)
{
(*ptrapezio).basemenor =2;
(*ptrapezio).basemaior= 7;
(*ptrapezio).altura = 5;
(*ptrapezio).area= ((*ptrapezio).basemenor + (*ptrapezio).basemaior) * (*ptrapezio).altura/2;
}
ou
void calculadesenho(struct desenho *ptrapezio)
{
ptrapezio->basemenor =2;
ptrapezio->basemaior= 7;
ptrapezio->altura = 5;
ptrapezio->area= (ptrapezio->basemenor + ptrapezio->basemaior) * ptrapezio->altura/2;
}
main()
{
struct ponto vponto;
printf("\nDigite as coordenadas dos pontos x e y: ");
scanf("%f %f", &vponto.x, &vponto.y);
exibe(&vponto);
vponto.x= 5.7; printf("\nOs pontos digitados foram %.2f e %.2f \n", vponto.x, vponto.y);
system("pause");
}
Ou
void exibe(struct ponto cponto);
struct ponto
{
float x;
float y;
};
Prof Angelina V.S.Melar
114
main()
{
struct ponto vponto;
printf("\nDigite as coordenadas dos pontos x e y: "); scanf("%f %f", &vponto.x, &vponto.y);
exibe(vponto);
printf("\nOs pontos digitados foram %.2f e %.2f \n", vponto.x, vponto.y);
}
O tipo unio usado para compartilhar um mesmo endereo de memria para vrias variveis,
que podem ser de tipos diferentes.
void main()
{
union variavel
{
float valor_hora;
float valor_mensal;
};
union variavel var;
var.valor_hora = 5.5; printf("\nValor da Hora %.2f", var.valor_hora);
var.valor_mensal = 346.5; printf("\nValor Mensal%f", var.valor_mensal);
printf("Valor da Hora %.2f", var.valor_hora); //permanece o ltimo valor atribudo
ao endereo de memria, que o valor 346.5 (mensal)
getchar();
}
Cuidado: Somente uma varivel pode ser usada por vez, se for usado um outro membro da
unio o anterior se perde (sobrescreve).
#include <stdio.h>
#include <stdlib.h>
void main()
{
union variavel
{
int valor_hora;
float valor_mensal;
} var;
printf("\nInforme o valor da hora"); scanf("%i", &var.valor_hora);
printf("\nValor da Hora informado: %i", var.valor_hora);
var.valor_mensal = 346.5; printf("\nValor Mensal pre-definido: %f", var.valor_mensal);
printf("\nUltimo valor armazenado %g", var.valor_hora); //permanece o ltimo valor atribudo ao
endereo de memria, que o valor 346.5 (mensal)
}
Se no for definido um valor inial da sequncia definida, ele sempre inicia a partir do zero.
enum meses {Jan = 1, Fev, Mar,Abr, Mai, Jun, Jul, Ago, Set, Out,Nov, Dez};
main()
{
int dia;
meses mes;
mes = Set; //ou mes = meses(9);
if (mes == Jan || mes == Mar || mes == Mai || mes == Jul || mes == Ago || mes == Out || mes ==
Dez)
dia = 31;
else if (mes == Fev)
dia = 28;
else
dia = 30;
printf(Numero dias: %d \n,dia);
}
Os arquivos gravados em modo binrio tem um tamanho menor, j que esto convertidos
em bytes, enquanto que se for gravado em modo texto, cada caracter ter que ser convertido para
binrio. A pesquisa de dados em um arquivo binrio mais rpida e fcil. Dessa forma, usamos
arquivo binrios para armazenar uma grande quantidade de dados, como vrios cadastros
(registros) e que no sejam compreensveis por questo de segurana, e o modo texto para gravar
arquivos que podem ser compreensveis pelo usurio e abertos por qualquer editor.
3. Abertura do arquivo
Para abrir ou mesmo criar um arquivo usada a funo fopen(). Para fazer uso dessa
funo necessrio antes criar um varivel ponteiro (FILE) que direcionar para um endereo de
memria do arquivo.
FILE *parq;
A funo fopen recebe dois argumentos string: a localizao (diretrio) junto com o nome
do arquivo, e o modo de abertura do arquivo. A localizao padro o local onde est o arquivo
executvel.
fopen (nome, modo)
parq = fopen(nome_arq, modo );
Existe vrios modo com o quais o arquivo pode ser aberto ou criado.
r Abre arquivo j existente para leitura
w Abre para leitura e gravao. Caso o arquivo j exista ele sobrescreve os dados,
destruindo os dados armazenados anteriormente, seno, existir ele cria um novo arquivo.
Abre para leitura e gravao, mas, antes de tudo se posiciona no final dele. Se o arquivo
a j existir o abre e depois comea a gravar, acrescentando os dados no final. Se o arquivo
no existir ele cria um novo arquivo para gravao.
Abre o arquivo texto para leitura. Esse arquivo j deve existir
rt Abre o arquivo binrio para leitura. Esse arquivo j deve existir
rb Abre e grava no arquivo (a opo r+ abre o arquivo, e faz gravao no incio do
- + arquivodiferente do modo append (a))
Cria um novo arquivo texto e o abre para leitura e gravao.
wt Cria um novo arquivo binrio e o abre para leitura e gravao. Se o arquivo no existir,
wb ele ser criado. Se j existir, o contedo anterior ser destrudo.
at Abre um arquivo texto j existente e adiciona as informaes no final do arquivo (se o
arquivo no existir, ele criado).
Prof Angelina V.S.Melar
118
rt Abre um arquivo texto j existente para leitura
ab Abre o arquivo binrio para leitura e gravao (usa os mesmos conceitos anteriores
A funo fopen() retorna um endereo de memria do arquivo quando esta for executada
com sucesso, ou um valor NULL quando der erro (erro de abertura ou criao do arquivo). Com
esse retorno possvel fazer verificaes e exibio de mensagem de alerta para o usurio.
if (parq == NULL)
{
printf(Erro de abertura do arquivo);
exit(1);
}
4. Fechamento do arquivo
Para fechar o arquivo usada a funo fclose(). Essa funo atualiza o arquivo com as
informaes que esto no buffer (memria) e depois libera a memria. Resumindo efetiva a
gravao, fecha o arquivo e libera a memria.
fclose(parq);
5. Leitura
muito importante definir a forma de leitura e gravao de um arquivo, pois, se for
necessrio fazer uma consulta de todos os dados armazenados deve-se iniciar a leitura desde o
incio do arquivo (percorrendo todo o arquivo at o final).
Resumindo: feita a leitura de uma quantidade sequencial de bytes do arquivo fsico e depois
guardado na memria atravs de um tipo estrutura. Aps a leitura de um registro o ponteiro fica
posicionado no prximo registro do arquivo, podendo ser feita ou no sua leitura.
Prof Angelina V.S.Melar
119
Leitura de um arquivo texto
Cuidado: O tamanho sempre considerando o valor inicial no zero. Se o tamanho total 20,
ento se coloca 19, sempre total - 1.
Obs: O posicionamento fica no fim da linha atual no arquivo se o caracter de mudana de linha
ocorrer antes de serem lidos todos os caracteres. Toda vez que executa o fgets() atualizada a
posio de leitura corrente do arquivo aberto. Retornando NULL quando no h mais dados para
serem lidos.
Tambm existe as funes: fscanf(), fgetc() para leitura de um arquivo texto. Abaixo esto
alguns trechos de cdigo com essas funes:
FILE *parq
char nome[35];
parq = fopen("dados.txt", rt);
fscanf (parq,"Nome: %s",nome);
puts(Nome gravado); printf(%s, nome);
fclose(fp);
6. Gravao
Cuidado: Se a estrutura foi definida para armazenar um nico registro no se coloca o &.
main()
{
int i;
FILE *fp;
for (i=0; i<4; i++)
{
fflush(stdin); printf("Digite o nome: "); gets(devedores[i].nome);
printf("Valor da Divida: R$"); scanf("%f", &devedores[i].valor);
}
main()
{
int i;
FILE *fp;
printf("Segunga etapa Exibicao dos devedores ");
fp = fopen("devedores.txt","r");
fread(&devedores, sizeof(devedores),1,fp);
Prof Angelina V.S.Melar
121
for (i=0; i<4; i++)
{
printf("\n%s - R$ %.2f",devedores[i].nome,devedores[i].valor);
}
fclose(fp);
}
3. Exemplos diversos
f= 3.1415;
fwrite (&f, sizeof(f), 1, fp)
float m[10][2];
fwrite (m, sizeof(m), 1, fp)
fprintf ( ponteiro do arquivo a ser gravado, formato de gravao, valores a serem gravados)
fprintf (parq,"<tr> <td>%d x %d = %d </td></tr>", num, tabuada, resultado);
fprintf(parq, Cadastro de Alunos);
fprintf(parq, %s, nome);
fprintf (arquivo,"</table>");
fclose(arquivo);
printf ("Arquivo gravado com sucesso");
_sleep(4000);
}
Para ser feita a leitura e a gravao de um arquivo necessrio saber a posio ideal para
que esse processo seja realizado. Existe a funo fseek() que define um ponto especfico de
posicionamento no arquivo:
Primeiro se posiciona para depois fazer a leitura do registro. No exemplo acima, est se
posicionando 4 registro.
fread(&devedores, sizeof(devedores), 1, fp);
possvel posicionar no final do arquivo para fazer uma gravao com o fseek:
fseek(pdevedores, 0, SEEK_END);
Cada letra do alfabeto, nmero ou smbolo pode ser representado no computador por um
conjunto de sinais eltricos, chamados de Bits. Toda instruo e controle que deve ser executada
pelo computador transmitido atravs desses Bits.
O termo BIT, vem de Binary Digit, cuja traduo Digito Binrio, usado para representar
a passagem ou no da corrente eltrica no computador (ou campo magntico: positivo ou
negativo), tendo apenas dois estados. A passagem da corrente ou impulso eltrico pode ser
desginado pelo digito 1 e a no passagem da corrente eltrica pelo digito 0.
ASCII
EBCDIC
O cdigo EBCDIC (Extended Binary Coded Decimal Interchange Code- Cdigo BCD
Ampliado para Intercmbio) foi criado pela IBM e utiliza 8 bit para fazer uma representao,
existindo a possibilidade de fazer 256 combinaes diferentes.
Unicode
Existe o padro Unicode (www.unicode.org) que se prope a desenvolver um sistema
abrangente e padronizado de representao de escrita em computadores. A tabela Unicode
abrange os mais variados sistemas de escrita (latino, chins, etc), alm de considerar smbolos
matemticos, musicais, de moeda, etc.
Ela subdividida em blocos, como: Unicode Latim Bsico, Unicode Latim I
Suplementar, Unicode Latim Estendido A, Unicode Latim Estendido B, Unicode Extenses IPA,
Unicode Letras modificadoras de espaamento, Unicode Sinais diacrticos combinados
A Unicode Latim Bsico equivale exatamente tabela ASCII de 7 bits. A Unicode Latim
I Suplementar equivale a ASCII estendida, de 8 bits. Os blocos Extenses IPA, Letras
Modificadoras de Espaamento e Sinais Diacrticos combinados so de especial interesse dos
lingistas porque trazem a simbologia do Alfabeto Fontico Internacional.
Unidade de Medida
Ns temos na nossa vida diria as unidades de medidas metro, litro, hertz e no
computador os bits. Como a contagem de medida do computador binria (base 2- 2 estados 0 e
1) e o nosso sistema mtrico de medida decimal tem-se:
210 1.024bytes KB Kilo K(mil)
20
2 1.048.576 bytes MB Mega M(milho)
230 1.073.741.824 bytes GB Giga G(bilho)
Linguagem de Alto Nvel: uma linguagem que utiliza comandos na forma de palavras (o
idioma empregado o ingls). Um nico comando pode executar vrias instrues em linguagem
de mquina.
A linguagem C e C++ so consideradas por alguns escritores de Nvel Mdio, pois ele
tem recursos de baixo nvel, como acesso direto a endereos de memria, manipulao do
hardware, mas tambm tem uma linguagem com uma sintaxe mais parecida com a do ser
humano.
Exemplo de cdigo: printf(Professora Angelina\n);
RINALDI, ROBERTO. Turbo Pascal 7.0 Comandos e Funes. Ed. rica, So Paulo, 1993