Вы находитесь на странице: 1из 188

INTRODUO A LOGICA DA PROGRAMAO

A tecnologia atual de computadores est baseada na construo de equipamentos


formados por circuitos eletrnicos, cabos e fontes de alimentao que so precisos na
identificao distinta entre dois tipos de sinais eltricos, caracterizados pela passagem
de corrente eltrica em um sentido, ou no seu sentido inverso. Por isso, os
computadores representam dados e operaes por meio de dois smbolos, constituindo
a linguagem binria, usualmente descrita com 0 e 1 (zero e um).

A seqncia descritiva de um conjunto de smbolos (0 e 1) em linguagem de binria,


tambm chamada de linguagem de mquina, pode representar dados e/ou operaes a
serem executadas pelo computador. Cada um dos smbolos existentes neste conjunto
chamado de bit (a menor unidade de armazenamento de dados), onde a juno de oito
bits forma o conhecido byte. Por exemplo:

O conjunto de smbolos representado no exemplo acima pode estar descrevendo, em


linguagem de mquina, um simples dado a ser armazenado na memria do computador
ou ainda uma operao a ser realizada por este (por exemplo, uma adio entre dois
valores numricos), onde seu resultado ser armazenado pelo computador.

A utilizao desta linguagem permite ao computador realizar o armazenamento e a


manipulao dos dados entre os diversos dispositivos eletrnicos que o compe.
Suponha a necessidade do armazenamento de dois valores numricos a serem
somados (operao aritmtica de adio entre eles), para na seqncia ser apresentado
o resultado desta operao (resultado da adio).

Primeiramente, o computador necessitar armazenar estes dois valores numricos,


quando estes lhe forem informados. Em seguida, ele efetuar a operao de adio
entre os valores, armazenando o seu resultado, que posteriormente poder ser
apresentado ao usurio (pessoa que utiliza o computador).

Todas estas aes executadas pelo computador envolvem vrios dispositivos


eletrnicos, que interconectados formam este importante, e cada vez mais essencial,
equipamento eletrnico. Uma representao clssica do computador no processamento
de dados pode ser observada no esquema abaixo.

De acordo com a representao simplificada acima de processamento de dados seus


principais dispositivos eletrnicos so definidos e exemplificados na relao a seguir:

PROCESSADOR: componente eletrnico que executa a instruo corrente e determina

qual a prxima instruo a ser executada, sendo tambm chamado de CPU


(Central Processing Unit) ou UCP (Unidade Central de Processamento);
MEMRIA: dispositivo que consisti em uma seqncia finita de unidades de

armazenamento identificadas por um endereo nico, descrito por um nmero


inteiro no negativo e responsvel pelo armazenamento de programas e dados que
sero manipulados pelo computador;
DISPOSITIVOS DE ENTRADA: conjunto de componentes que podem ser conectados ao

computador para permitir a comunicao com o mundo real para coleta de dados
relevantes aos problemas que o mesmo possa estar inserido exemplo: teclado
usado para coleta de dados do usurio que sejam necessrios ao processamento
de dados desejado;
DISPOSITIVOS DE SADA: componentes eletrnicos que podem ser conectados ao

computador para permitir a comunicao dele com o mundo real exemplo: vdeo
usado para que o computador possa se comunicar com seu usurio.
Todo dispositivo que pode ser conectado a um computador chamado de perifrico,
existindo entre estes alguns que realizam operaes de entrada e sada, como os discos
e fitas magnticas usadas para guardar dados utilizados pelo computador.

O processamento de dados, realizado pelo computador, consiste na execuo de vrias


operaes sobre os dados armazenados, que posteriormente sero mostrados aos seus
usurios como contedo empregado no auxlio da soluo de seus problemas
cotidianos. Assim, este recurso eletrnico torna-se til ao ser humano, principalmente
por sua agilidade no processamento de uma quantidade elevada de dados, com um
tempo consideravelmente reduzido. Entretanto, este recurso tambm depende do
raciocnio humano para a realizao de tarefas corretas, porque os computadores no
possuem um raciocino coerente com todas as necessidades presentes no dia-a-dia
real.

O adequado aproveitamento de tamanha capacidade computacional essencial ao uso


dos computadores no cotidiano que os envolvem, contudo esta capacidade impossibilita
a constante interferncia humana no processamento almejado para soluo dos mais
diversos problemas. Repare, por exemplo, na velocidade de processamento de um
computador em nanosegundos (1 milsimo de microsegundo) no processamento de
dados, enquanto que uma deciso humana que pode levar alguns segundos, minutos,
horas, dias, etc.

Toda esta capacidade no adiantaria nada caso tivesse que aguardar muito tempo
para dar continuidade as aes e operaes a serem realizadas no caminho da soluo
de um problema.

Dessa forma, o automatismo do computador no processamento de dados se torna


essencial ao aproveitamento da agilidade do mesmo, sendo relevante o seu prvio
planejamento. Neste planejamento devero ser considerados todos os possveis
acontecimentos relacionados ao processamento desejado, pois assim o computador
poder realizar uma ao coerente com o ocorrido, sem prejudicar o processamento
desejado.
No entanto, as operaes e instrues a serem efetuadas por um computador devem
ser previstas e planejadas pelo raciocnio humano, que posteriormente os implementar,
possibilitando ao computador realizar, eficientemente, as operaes desejadas por seus
usurios e definidas por meio do uso das linguagens de programao.
Os programas de computador consistem em seqncias de instrues elaboradas em
linguagem de programao com o objetivo de resolverem ou auxiliarem na soluo

problemas. Estas linguagens so codificaes padronizadas que possibilitam a


comunicao entre o ser humano e o computador com o objetivo de se atingir um
resultado desejado. Porm, antes dessa comunicao acontecer, o ser humano deve
encontrar uma lgica coerente para resoluo do problema existente. Por exemplo:
como poder ser resolvido o problema de correo de provas de concurso em um
perodo reduzido de tempo para contratao urgente de novos funcionrios?

A primeira preocupao deve se concentrar na aprendizagem de tudo que pode


envolver este problema e em como resolve-lo. Assim, ser possvel elaborar um
raciocnio lgico mais completo sobre o mesmo e, conseqentemente, elaborar uma
soluo mais segura e eficaz para o problema existente. Ao problema proposto
anteriormente, de correo de provas de um concurso, seria necessrio conhecer um
pouco mais seus dados, situaes e informaes: Seriam as provas muito longas?; Qual
a quantidade de candidatos inscritos?; Em que data os candidatos aprovados devero
iniciar suas atividades profissionais?. Sem estes dados no nem possvel afirmar que
existe realmente um problema, ento como poderia ser pensada uma soluo para esta
situao?

Como um programa de computador precisa especificar, com certo detalhamento, todos


os processos e operaes a serem executados pelo computador, de fundamental
importncia a tomada de todo o conhecimento que esteja envolvido com seu problema
para que possa ser planejada e elaborada posteriormente uma soluo coerente com
todas as suas possveis nuanas.

Esse conhecimento detalhado sobre o problema possibilita ao indivduo responsvel


pelo planejamento, desenvolvimento e disponibilizao do programa um apurado
conhecimento sobre as possveis situaes diferentes que este programa possa ser
utilizado. Com isso, sero menores as chances do processamento incorreto, ou mesmo
incompleto, a ser executado pelo computador atravs de seu programa. Geralmente, o
profissional responsvel pelo desenvolvimento de programas conhecido como
programador.

A elaborao de uma lgica coerente e completa exige caractersticas relacionadas ao


indivduo que procura encontr-la, sendo interessante criatividade, conhecimento,
versatilidade, persistncia, responsabilidade, ponderao, entre outras caractersticas
pessoais que formam um bom programador. Cada programador ainda precisa exercer
domnio sobre seu pensamento, de forma a conseguir organizar o seu raciocnio em
busca de um objetivo almejado.

Algumas definies so importantes no incio do estudo da subrea de Programao


Computacional, sendo a concepo de lgica proposta por Mazano (2000) voltada
mais s caractersticas computacionais:
Lgica consiste em um esquema sistemtico que define as interaes de sinais no

equipamento automtico do processamento de dados, ou computador cientfico com


critrio e princpios formais de raciocnio e pensamento. (Manzano, 2000, p.3).

Uma definio no to computacional de lgica seria: a cincia que estuda as leis e


critrios de validade que regem o pensamento e a demonstrao, ou seja, a cincia de
princpios formais do raciocnio (Manzano, 2000, p.3).

O uso da lgica para alguns profissionais essencial e inseri um ponto divisor entre
estes indivduos, principalmente naqueles da subrea de Programao. Observe, por
exemplo, a simples constatao lgica proposta no exemplo abaixo:

Hoje sbado.
Todo sbado que no feriado tem aula.
Hoje no feriado.
Logo, hoje tem aula.
(uma concluso lgica)

No exemplo acima os dados conhecidos (fatos) so que hoje sbado e que no


feriado, alm de que todo sbado tem aula, menos nos feriados. Assim, possvel
concluir que hoje tem aula.

O estudo na rea de Informtica, mas especificamente na subrea de Programao,


no tem o objetivo de ensinar ningum a pensar, pois todas as pessoas normais j
desenvolveram esta habilidade durante o seu processo de evoluo (criana jovem
adulto velho). Porm, seu principal objetivo apresentar, desenvolver e aperfeioar o
raciocnio lgico possvel de ser implementado em computadores e utilizados por seus
usurios.

O estudo na rea de Informtica, mas especificamente na subrea de Programao,


no tem o objetivo de ensinar ningum a pensar, pois todas as pessoas normais j
desenvolveram esta habilidade durante o seu processo de evoluo (criana jovem
adulto velho). Porm, seu principal objetivo apresentar, desenvolver e aperfeioar o
raciocnio lgico possvel de ser implementado em computadores e utilizados por seus
usurios..

A implementao para rea de Informtica consiste na codificao do raciocnio


humano, que soluciona problemas computacionais, em um programa de computador,
sendo este raciocnio descrito em uma linguagem de programao.

No entanto, o programador s poder descrever uma possvel soluo depois de


encontrar o raciocnio adequado que permita ao computador chegar a uma resoluo
correta a situao apresentada por seu usurio.

A complexidade do problema tambm faz diferena ao processamento, pois quanto


maior ela for, mais complicada e cuidadosa dever ser sua soluo. Outra considerao
importante a quantidade de profissionais dedicados a construo de um raciocnio
lgico coerente com o problema existente, podendo estes profissionais estarem
organizados em equipes ou possurem um nico indivduo com tal responsabilidade.

Estas duas possveis situaes identificam um trabalho rduo a ser desenvolvido, onde
tcnicas e mtodos de representao de raciocnio contribuem, significativamente, na
anlise, discusso e teste das possveis solues encontradas.

Uma destas tcnicas conhecida como algoritmo e possibilita a representao simples,


mas com clareza suficiente para a compreenso da lgica racional a ser empregada na
soluo do problema existente.

A definio conceitual da expresso algoritmo realizada por vrios estudiosos, sendo


as mais interessantes ao estudo desta disciplina as relacionadas a seguir:

Algoritmo so regras formais para a obteno de um resultado ou da soluo de um


problema, englobando frmulas de expresses aritmticas (MANZANO, 2000, p.6).

Ao um acontecimento que, a partir de um estado inicial, aps um perodo de


tempo finito, produz um estado final previsvel e bem definido. Portanto, um algoritmo
a descrio de um conjunto de comandos que, obedecidos, resultam numa
sucesso finita de aes (FARRER, 1999, 1999, p.14).

Algoritmo uma seqncia finita de instrues ou operaes cuja execuo, em


tempo finito, resolve um problema computacional, qualquer que seja sua instncia
(SALVETTI, 1998, p.5).

Com base nestas definies de algoritmo constatado que este conceito no peculiar
somente a rea de Informtica, como pode ser observado no exemplo de criao de um
simplrio algoritmo empregado na criao de um saboroso sanduche:

1 - Pegar um po
2 - Cortar o po ao meio
3 - Pegar a maionese
4 - Passar maionese nas fatias de po
5 - Pegar alface e tomate
6 - Cortar alface e tomate
7 - Colocar alface e tomate no po
8 - Pegar um hambrguer
9 - Fritar o hambrguer
10 - Colocar o hambrguer no po
11 - Juntar as fatias do po cortado

Estes onze passos indicados acima orientam na execuo de diversas instrues


organizadas de forma seqencial que resultaro em um delicioso sanduche (estado

final). Estes passos so seqncias e finitos, podendo ser executados sem auxlio
nenhum de um computador.

A alterao na seqncia destes passos tambm poder resultar em um outro gostoso


sanduche, atingindo tambm o objetivo esperado.

Geralmente, um problema possui algumas alternativas de solues que chegam ao


resultado correto, podendo existir vrios algoritmos que solucionem um determinado
problema. Entre estas possveis solues algumas so mais rpidas, outras mais
seguras, mas todos conseguem resolver o problema adequadamente, apesar de suas
diferenas existentes no raciocnio lgico proposto como soluo.

Diversas so as tcnicas e mtodos existentes para a construo de algoritmos. No


entanto, todas elas possuem um mesmo objetivo, onde as suas variaes no passam
de pequenos detalhes frente a sua organizao geral no atendimento a uma ou outra
rea mais especificamente. Em uma abordagem, enfocando mais a rea de Tecnologia
da Informao, apresentado um mtodo para a construo de algoritmos que
possibilite a implementao dos mesmos, posteriormente, em um computador
(desenvolvimento de programas computacionais):

1 -

empenhar grande ateno sobre os dados relacionados ao problema,


procurando conhecer e compreender o mximo sobre ele;

2 - definir os dados que essencialmente devero serinformados pelo usurio


para que o processamento seja realizado com sucesso(dados de entrada);

3 - descrever detalhadamente o processamento ou atransformao a ser


executada sobre os dados de entrada em busca dos resultadosdesejados
(como chegar no objetivo);

4 - definir quais so os dados resultantes do processamento ou transformao


(dados de sada);

5 - construir o algoritmo que represente a soluo encontrada com o


detalhamento necessrio a implementao almejada;

6 - testar o algoritmo por meio de simulaes e efetuar as devidas correes


que possam vir a ser necessrias na lgica proposta.

A implementao das lgicas, elaboradas e representadas em um algoritmo, realizada


sobre o computador, por meio da transcrio, representada no algoritmo, para uma
linguagem de programao, que tambm possibilitar a compreenso e execuo das
instrues pelo computador. Essa transcrio tambm pode ser chamada de traduo,
pois somente efetuar mudana na forma de descrever o raciocnio a ser implementado
no computador.

O uso da linguagem de programao permite ao programador elaborar programas que


instruiro o computador nas operaes a serem efetuadas. Para a elaborao de
programas, principalmente os mais complexos, necessria a aplicao de um mtodo
sistemtico de programao que contribuir com o desenvolvimento de programas
confiveis, flexveis e eficientes. Esse tipo de desenvolvimento apresenta uma
metodologia organizada em etapas bsicas fundamentais, sendo estas descritas a
seguir:

ANLISE:

nessa etapa se estuda o problema, buscando sua completa


compreenso, onde os dados de entrada, o processamento e os dados
de sadas possam ser identificados corretamente;

PROJETO:

essa etapa aplica mtodos e tcnicas quepossibilitem a descrio


necessria do problema com suas possveis solues. Elaconsiste no
projeto do programa, sendo elaborada por meio da construo
doalgoritmo e da definio correta das estruturas de dados necessrias a
talsoluo;

CODIFICAO: essa etapa consiste na implementao do projeto do programa, ou seja,

na traduo do raciocnio, representado no algoritmo, para um programa


computacional, escrito na linguagem de programao desejada;

VERIFICAO: nessa etapa finalizado o processo de desenvolvimento do programa,

que classificado como software, sendo tambm chamado de aplicao.


Simulaes, testes e verificaes dos resultados alcanados pelo
programa so analisados, podendo resultar em alteraes no cdigo
elaborado. Essas alteraes procuraro o atendimento eficaz do objetivo
desejado pelo programa, que finalmente liberado aos usurios finais.

O uso destas metodologias possibilitar o desenvolvimento organizado e eficiente do


programa desejado. Porm, essas etapas destinadas elaborao do programa e do
algoritmo, devem ser realizadas com a documentao coerente em cada uma delas.
Isso permitir a construo de uma lgica clara e detalhada o suficiente para a
compreenso de qualquer outro profissional da rea, promovendo alta qualidade nesse
desenvolvimento.

ELABORAO DO ALGORITMO
A elaborao do algoritmo descreve a necessidade dos dados e as suas manipulaes
durante a execuo da lgica proposta por ele. Essa descrio pode ser feita de
diversas formas por meio de tcnicas diferentes que representaro a seqncia dos
passos (ou etapas) a serem realizados pela execuo do algoritmo.

Cada tcnica possibilita formas de representao diferentes, o que privilegia algumas


caractersticas na percepo e compreenso dos profissionais envolvidos. Sendo assim,
sero apresentadas algumas destas tcnicas, com os principais aspectos a serem
avaliados na sua escolha para aplicao. Entre as vrias tcnicas existentes, trs delas
sero abordadas nesse material, sendo uma a mais relevante durante o aprendizado
almejado neste estudo de algoritmo e programao.

FLUXOGRAMA
O fluxograma utiliza figuras geomtricas predefinidas para descrever as aes (ou
instrues) a serem realizadas na resoluo de um problema. Ele elaborado aps a
fase de anlise do problema.

As principais figuras usadas na elaborao de um fluxograma esto relacionadas a


seguir, sendo importante esclarecer que so vrias as figuras geomtricas empregadas
na construo dos mesmos, porm neste estudo se estar buscando a compreenso da
lgica racional proposta por este tipo de representao. As figuras usadas so:

Imagine uma situao onde a idade de uma pessoa deva ser analisada para sua
classificao em jovem ou adulto. O algoritmo a seguir apresentado graficamente por
meio do fluxograma coerente com a soluo desejada.

Vrias anlises podem ser feitas sobre as vantagens e desvantagens dessa forma de
representao do raciocnio (algoritmo), porm somente a mais relevante vantagem
(face sorridente) e desvantagem (face triste) sero apresentadas para sua reflexo.

DIAGRAMA DE CHAPIN
Essa diagramao foi elaborada por Nassi e Shneiderman e ampliada por Ned Chapin.
Ela almejada a substituio da representao tradicional (diagrama de blocos) por uma
diagramao com quadros que oferecessem a viso hierrquica e estruturada da lgica
proposta para um programa.

Observe na representao acima a mesma situao representada no exemplo anterior


por um fluxograma. Agora, o algoritmo est representando o mesmo raciocnio do
exemplo anterior, porm sua representao foi elaborada pelos esquemas adotados no
Diagrama de Chapin.

Entre os diversos mtodos existentes para este tipo de representao, o Diagrama de


Chapin um dos menos utilizados atualmente, principalmente, porque exige bastante
ateno do programador na representao do seu raciocnio, ao invs de se concentrar
mais sobre o prprio problema a ser analisado e posteriormente solucionado.

PORTUGUS ESTRUTURADO
Essa forma de representao, tambm conhecida como portugol ou pseudocdigo,
consiste na descrio estruturada, por meio de regras pr-definidas, de passos (ou
instrues) a serem realizados para a resoluo do problema. O portugus estruturado
utiliza a linguagem natural para representar o raciocnio. No caso brasileiro, a linguagem
natural o portugus, que ser bastante usado na representao dos raciocnios
propostos. Para Espanha ou Frana seriam utilizadas as linguagens espanhola e
francesa, respectivamente, como base natural na representao dos raciocnios lgicos
elaborados atravs da desta tcnica de construo de algoritmos.

Suponha o mesmo exemplo representado nos algoritmos anteriores, por meio do


fluxograma e do diagrama de Chapin, observando as diferentes caractersticas
descritivas existentes no portugus estruturado, alm de sua organizao pr-definida.

SNTESE
Objetivo: analisar a idade de uma pessoa
Entrada: uma idade
Sada: situao da maturidade da pessoa
DECLARAES
inteiro IDADE;
INCIO
escreva (Informe sua idade: );
leia (IDADE);
se (IDADE < 21) ento
escreva (voc jovem);
seno
escreva (voc adulto);
fim_se;
FIM

A linguagem de comunicao natural imprecisa e muitas vezes prolixa, dificultando a


comunicao correta com o computador se usada de forma bem natural. Por isso
necessria agregao de regras e normas que permitam a representao organizada
e eficiente da soluo desejada, indicando sempre, com clareza e precisam, o que
realmente o computador deve fazer.

Entre essas trs formas de representao (fluxograma, Chapin e portugus estruturado),


o portugus estruturado ser o mais utilizado por esta disciplina no desenvolvimento de
algoritmos condizentes com os problemas educacionais sugeridos. Por meio desta
forma de representao se almeja:

facilitar o entendimento do problema pelo ser humano;

promover desenvolvimento de algoritmo coerente com o problema;

antecipar depurao (verificao de erros) do raciocnio lgico;

facilitar a manuteno corretiva e evolutiva do raciocnio proposto;

agilizar aprendizagem de normas e regras comuns na elaborao de


programas computacionais;

contribuir com trabalho em equipe para elaborao de programas.

Por meio dessa ltima representao de raciocnio (portugus estruturado), aliasse a


facilidade de uso da linguagem natural do indivduo, com a tcnica de desenvolvimento
estruturado. Apesar disso, essa juno, por si s, ainda no atinge automaticamente os
objetivos visados, ela apenas preconiza uma ajuda sistemtica para o alcance deste

objetivo. Sua aplicao ainda conta com o esforo e a disciplina incessante na busca da
simplicidade e da clareza, que fornecero facilidades inestimveis manuteno e
modificao evolutiva do algoritmo.

A elaborao de algoritmos pode envolver trs estruturas lgicas fundamentais no


controle do fluxo de dados e instrues. Essas trs estruturas, conhecidas como
estruturas de controle de dados, desempenham o papel de controle sobre a seqncia
de aes (ou tarefas) a serem realizadas (ou executadas) no algoritmo, que
posteriormente se tornar um programa computacional, por meio de sua transcrio (ou
traduo) para uma linguagem de programao. A principal caracterstica referente ao
seu controle na seqncia de execuo de cada uma destas estruturas descrita a
seguir:

SEQENCIAL: as instrues existentes no algoritmo so executadas uma aps a outra,

respeitando sempre a seqncia linear de cima para baixo;

SELETIVA:

exerce o controle sobre a seqncia deinstrues a serem executadas, por


meio do resultado de um teste ou verificaobaseada na lgica
convencional, sendo tambm conhecida comocondicional;

REPETITIVA:

por meio de um teste, ou verificao lgicacondicional, uma instruo, ou


um conjunto de instrues, executadorepetidamente (mais que uma vez),
conforme discriminado no raciocnio lgicoproposto. Esta estrutura ainda
conhecida como lao oulooping.

Um outro aspecto lgico importante e muito aplicado na elaborao de algoritmos a


modularizao, ou seja, a diviso de um raciocnio lgico maior, ou mais complexo, em
vrios raciocnios menores, ou mais simples, que possibilitem a realizao ou
atendimento completo do raciocnio lgico maior (mais complexo). Esta organizao
lgica conhecida como modularizao, pois confere a um conjunto de mdulos a
capacidade de resolver o mesmo problema, porm de forma mais organizada e flexvel.

Isso possibilita, entre outras caractersticas positivas no desenvolvimento de programas,


o re-aproveitamento do cdigo j elaborado, ou seja, o melhor aproveitamento de
trechos bem definidos e j elaborados no algoritmo proposto em diversos momentos que
sejam necessrios no mesmo.

Alm das estruturas de controle e da modualarizao, os algoritmos tambm permitem a


criao e a manipulao de estruturas de dados. Estas estruturas consistem em
organizaes eficientes sobre os recursos de armazenamento de dados, normalmente
disponveis em um computador. A utilizao, logicamente correta, deste tipo de estrutura
propicia a otimizao no uso dos recursos disponibilizados pelo emprego do computador
na realizao das mais diversas tarefas, satisfazendo as pretenses do usurio com
maior segurana, eficincia e agilidade.

Diante deste estudo, importante a criao da conscincia do estudante na dimenso


da responsabilidade do algoritmo frente ao desafio da aprendizagem sobre o problema a
ser resolvido por meio de um raciocnio lgico coerente que possa ser transcrito em um
programa de computador que auxiliar seu usurio na realizao de suas tarefas
cotidianas, sejam elas pessoais, profissionais ou at educacionais.

O algoritmo a parte mais importante no desenvolvimento de um programa,


pois nele que se encontra a representao do raciocnio lgico que
solucionar o problema existente.

LINGUAGEM DE PROGRAMAO

O algoritmo auxilia o desenvolvimento dos programas, porque nele os programadores


representam a soluo proposta para ser analisada e testada. Quando um algoritmo
est finalizado, ou seja, est pronto, resta apenas transform-lo em um programa
computacional, respeitando toda lgica racional j elaborada e avaliada para soluo do
problema existente.

Realmente, um bom algoritmo, s necessita ser traduzido para uma linguagem de


programao, respeitando suas regras de sintaxe e semntica essenciais na construo
de um programa de computador. O perodo de aprofundamento no conhecimento
relacionado ao problema em questo, sua proposta de soluo, os testes e a
manuteno do mesmo, ocorrem durante os estudos, pesquisas e elaborao do
algoritmo, restando, simplesmente, a re-escrita da soluo encontrada para uma
linguagem de programao computacional, ou seja, aps a confeco do algoritmo
coerente com o problema o programador s dever traduzi-lo para uma linguagem de
programao para obter um programa computacional.

As linguagens de programao, assim como as de comunicao, possuem regras


sintticas e semnticas que devem ser obedecidas, pois as instrues computacionais
no podem oferecer possibilidades de interpretao para o computador, que somente
executa o que lhe solicitado. Existem varias linguagens de programao, mas em
todas elas a lgica relacionada a proposta construda no algoritmo poder ser
implementada afim de atender ao objetivo almejado.

Exemplo:

Acompanhe neste exemplo a "traduo" da instruo escreva que ser estudada um


pouco mais frente em algoritmo.

escreva("Informe a sua idade:")

Esta instruo (escreva) corresponde a um comando que instrui o computador a realizar


algumas aes sobre seus recursos disponveis. Porm a mesma deve ser traduzida
para uma linguagem de programao, possibilitando ao computador sua compreenso.
Na tabela abaixo so mostradas algumas possveis tradues para instruo escreva
em 3 linguagens de programao diferentes.

COMANDO

LINGUAGEM

writeln

Pascal

printf

System.out.println

Java

ATIVIDADE DE FIXAO

No intuito de auxiliar na aprendizagem iniciada por meio deste mdulo e verificar como
est sua compreenso sobre os mesmos, so sugeridos alguns exerccios de apoio a
serem resolvidos. Clique sobre a figura Exerccios? e acesse a lista de atividades sobre
os contedos estudados at este momento.
CONCEITOS FUNDAMENTAIS
O processamento de dados consiste, basicamente, em um conjunto de trs partes
fundamentais (Entrada, Processamento e Sada de dados) que so articuladas para
se atingir as expectativas desejadas.

Entrada de dados: usa dispositivos eletrnicos que possibilitam o fornecimento


de dados ao computador que os utilizar conforme as instrues contidas em seu
algoritmo para se chegar aos resultados desejados. Vrios so estes dispositivos
como: teclado, mouse, etc.

Processamento: os dados obtidos pelos dispositivos de entrada sero


processados conforme as instrues existentes no algoritmo, sendo ambos, os
dados de entrada e resultados processados, armazenados na memria do
computador. Esta parte, identificada como processamento, relacionada
diretamente com os dispositivos de armazenamento de dados (memria), pois
so neles guardados os dados que sero acessados e manipulados pelo
computador que procura atingir os resultados desejados.

Sada de dados: consiste na realizao das instrues que esto sendo


processadas pelo computador com o objetivo de mostrar os dados obtidos na
execuo do algoritmo. Esta apresentao acontece por meio dos dispositivos
de sada de dados como: monitores ou vdeos, impressoras e outros recursos
tecnolgicos capazes de facilitarem o acesso a estes dados alcanados.

A coleta e armazenamento de dados solicitados ao usurio de um algoritmo realizada


atravs dos dispositivos de entrada de dados. Estes dados so manipulados pelo
processador respeitando rigorosamente as instrues contidas no algoritmo e buscando
satisfazer as necessidades de seu usurio. Assim, se concebe a importante
compreenso sobre os dados brutos que so necessrios para gerao da informao,
que contextualizada para um fim especfico e atende as expectativas do usurio, tendo
este acesso aos mesmos atravs dos dispositivos de sada de dados.
A efetivao de todo este processo s ocorre com dados que estejam armazenados em
memria, sendo todos os seus recursos relacionados ao armazenamento e
recuperao de dados de fundamental importncia ao funcionamento do computador.

IDENTIFICADOR
O uso da memria pelo computador fundamental ao seu correto funcionamento, por
isso necessrio, na elaborao do algoritmo, o fornecimento de nomes que
identificaram os dados, informaes ou recursos computacionais que possam estar
armazenados na mesma. Um exemplo desta identificao o seu prprio nome, que no
meio de muitas pessoas quando for pronunciado voc saber que esto se referindo
somente a voc.

Na elaborao do algoritmo todos os recursos de armazenamento e manipulao de


dados devero ser identificados para serem acionados mediante seu nome especfico
de identificao. Conforme as caractersticas de definio de um identificador para os
possveis recursos computacionais a serem usados na construo dos algoritmos estar
se abordando seus detalhes de criao e uso coerente com a programao eficiente dos
computadores.

TIPOS DE DADOS

Os computadores atuais compreende um conjunto de dados e informaes atravs de


seus recursos de arquitetura e operacionalizao dos diversos dispositivos eltricos e
eletrnicos que o compe. Para o incio da aprendizagem na rea de Programao
relevante conhecer quais tipos de dados os computadores compreendem e aplicam
suas caractersticas e propriedades coerentes com a realidade onde estes so usados.
Estes tipos de dados podem ser classificados em Numricos, Lgicos e Literais.

Numricos: representados por valores definidos nos conjuntos matemticos dos


inteiros e reais, onde o ponto '.' separa a parte inteira da decimal. Exemplo: 0.59; 2.0; 0; -34; 597; 10

Lgicos: representados pelas palavras VERDADEIRO ou FALSO, respeitando


as definies matemticas contidas na Lgica Convencional ou Booleana.

Literais: formados por um ou vrios smbolos (caracteres) aceitos na


simbologia da linguagem (smbolos especiais, letras e dgitos) em questo. Estes
valores so representados por seus smbolos vlidos e correspondentes em
nossa linguagem de comunicao (portugus), alm de estarem sempre entre
aspas (" ") no corpo descritivo das instrues contidas no algoritmo.

A especificao do grau de complexidade e o escopo de valores possveis para um


dado que ser usado em um algoritmo exigi a definio de seu tipo de dado, assim

como o identificador que possibilitar seu armazenamento e manipulao em memria.


A identificao de como um certo dado poder se apresentar, qual a sua simbologia e
quais operaes e propriedades podem ser realizadas sobre o mesmo so definidas
atravs da indicao de qual seu tipo.

Os tipos de dados j reconhecidos pelo computador so chamados de escalares ou


primitivos. Estes tipos so indicados no algoritmo por meio de palavras ou expresses
chaves (inteiro, real, logico, caracter) que so reservadas ao reconhecimento correto
do computador que os utilizar no processamento do algoritmo.

NUMRICOS

inteiro: corresponde ao conjunto matemtico dos valores numricos inteiros.


Exemplo: 100, 0, -3

real: corresponde ao conjunto matemtico dos valores numricos reais. Exemplo:


100, 0, -3, 1.7, 1000, -0.7

LGICO

logico: conjunto de valores possveis na lgica convencional (booleana) - FALSO


ou VERDADEIRO. Esse tipo s apresenta um desses dois valores, sendo eles
mutuamente exclusivos.

LITERAL

caracter: valores alfanumricos, contendo letras, dgitos (smbolos numricos) e


smbolos especiais, estando sempre descritos entre aspas (" "). O conjunto de
caracteres consecutivos, como o nome de uma pessoa, uma frase, entre vrias

outras situaes com caracteres, tambm chamado de cadeia de caracteres ou


string. Exemplo: "M", "Taguatinga - DF", "356-9025", "Taxa=10%", "#"

A especificao do tipo de dado correto fundamental ao processamento do


computador, pois ele reconhecer quais dados podem ou no sofrerem determinadas
manipulaes e quais as necessidades de espaos de memria necessrios na
efetivao do armazenamento de cada dado ou informao a ser utilizada no algoritmo.

Menu

CONSTANTES

Uma constante consiste em recurso computacional que pode ser criado em um


algoritmo, sendo ela capaz de armazenar um nico valor de um tipo de dado definido
durante toda execuo deste algoritmo. Este recurso no est sujeito a variaes no
seu valor armazenado, ou seja, o valor guardado em uma constante no sofre alterao,
se mantendo sempre constante aps a sua criao.

A criao de uma constante exige a indicao de um tipo de dado e um identificador


para mesma ser armazenada e acessada na memria do computador. Quando esta
constante criada com sucesso, ela ocupa uma rea de memria que poder ser
acessada por meio de seu nome (identificador), mas seu valor inicial nunca poder ser
alterado enquanto seu algoritmo estiver em execuo.

Sintaxe:

constante <tipo do dado> <identificador>

<valor do identificador>

constante : palavra reservada que identifica a criao de um recurso constante


<tipo do dado> : descrio do tipo de dado da constante a ser criada
<identificador> : nome fornecido a constante na memria do computador
: operador de atribuio de valores
<valor do identificador> : valor constante atribudo a constante (no pode ser
alterado)

A definio de uma constante consiste na criao de uma varivel que no se altera


durante toda uma execuo do algoritmo (varivel que no se altera consiste em uma
constante).

Exemplo:
constante inteiro idade_maxima
constante caracter SexoMasculino

25;
"M";

LEMBRETE: No se pode modificar o contedo armazenado por uma constante.

VARIVEIS

Outro recurso computacional criado por um algoritmo e que permite a variao de seu
valor armazenado na memria durante uma mesma execuo deste algoritmo,
denominado varivel. Os valores guardados por este importante recurso podem ser
incertos, instveis ou inconstantes, conforme a situao a ser processada pelo
computador.

Similar as constantes, uma varivel exige um tipo de dado conhecido pelo computador e
um identificador para ser criada e manipulada na memria do mesmo. No entanto, este
recurso pode guardar um ou vrios valores de um mesmo tipo de dado nesta rea de
memria, conforme seja necessrio ao computador processar o algoritmo elaborado e
em execuo.

Apesar da varivel poder armazenar vrios valores de um mesmo tipo, ela s consegue
guardar um valor por vez, ou seja, o armazenamento de uma varivel no simultneo
de vrios valores, mas somente um de cada vez (sobreposio dos valores de uma
mesma varivel na memria).

Anlise o exemplo a seguir que almeja facilitar a compreenso dos conceitos


relacionados ao uso de variveis pelo computador.

No dia de seu aniversrio sua tia lhe presenteou com uma linda pasta de couro e disse
que esta era para voc se lembrar sempre dela quando fosse guardar seus documentos
profissionais. No entanto, ela se esqueceu que voc est comeando a faculdade e s
daqui alguns anos que isso poder acontecer. Porm, por esta pasta ser muito bonita
e resistente, voc resolveu utiliz-la para outros fins, at a carreira profissional
deslanchar. Assim, comea a freqentar a aula com a pasta e guardar seus materiais
acadmicos de estudo na mesma.

Dessa forma, sempre que for necessrio encontrar algum material de estudo voc
saber exatamente onde ele estar guardado (na bela pasta). Com o passar do tempo
voc trocou o contedo que estava sendo armazenado na pasta, passando a guardar os
documentos e relatrios de seus estgios onde a mesma fazia sucesso entre os colegas
que sempre lhe perguntavam onde voc havia comprado-a. Com o desgaste natural de
muito uso da pasta voc teve que troc-la, logo que a carreira comeou a acontecer
depois do termino da faculdade.

Na situao ilustrada anteriormente pode-se observar a variao do contedo


armazenado na mesma pasta. Esta variao aconteceu de acordo com a sua
necessidade de armazenamento de coisas ao longo do tempo.

Uma varivel tambm funciona assim, sendo ela um espao de memria que o
computador reserva para utilizao de um algoritmo. Quando este termina, a varivel
deixa de existir na memria, assim como a pasta teve que ser deixada de lado aps
tanto uso.

Provavelmente no caberiam todos os livros de sua faculdade nesta pasta, e seria no


mnimo imprprio tentar guardar somente gua dentro dela. por isso que uma varivel
deve ter o seu tipo de dado definido, indicando, exatamente, quais os dados e
informaes que podero ser armazenadas e manipulados com seu uso em um
algoritmo.

Sintaxe:

<tipo do dado> <identificador>;

Exemplo:
inteiro contador;
caracter primeiroNome;

Assim como na declarao de constantes, a declarao de variveis define primeiro o


tipo de dado a ser armazenado como seu contedo e qual o seu identificador (nome da
varivel). A principal diferena entre estes recursos a possibilidade de modificao

do contedo armazenado na varivel, sendo ele alterado quantas vezes forem


necessrias para o correto funcionamento do algoritmo. No entanto, as constantes
possuem uma mesma sintaxe de definio, incluindo somente a palavra reservada
constante, porm elas no sofrem alterao durante toda execuo do algoritmo,
somente recebendo um valor que permanece inaltervel durante toda esta execuo.

Menu

ENTRADA E SADA DE DADOS


O conhecimento relacionado a declarao de variveis e constantes coerentes com a
definio de seus tipos de dados adequados, para serem manipulados corretamente no
processamento de um computador, estabelece o emprego de seus dispositivos de
entrada e sada de dados no algoritmo.

Esses dispositivos so acionados por instrues computacionais definidas por palavras


reservadas que possuem compreenso do computador sobre qual ao realizar e sobre
qual dispositivo eletrnico. Os dispositivos de entrada de dados so acionados por
meio da expresso chave (ou instruo) leia. Esta palavra reservada (leia) possui um
significado definido as operaes lgicas que sero realizadas pelo computador sobre
seus recursos eletrnicos disponveis (instalados). Por isso no se pode declarar
nenhum identificador igual a uma palavra reservada na construo de um algoritmo, pois
isso prejudicaria a lgica de execuo relacionada a esta instruo e no permitiria a
correta compreenso do computador sobre o que lhe est sendo solicitado executar.

Para os dispositivos de sada de dados a palavra reservada escreva, que aciona os


dispositivos disponveis no computador que est executando o algoritmo. Porm, caso
um algoritmo solicite a impresso de uma carta na impressora e este recurso no esteja
instalado no computador em questo a carta no ser impressa.

Instruo

leia

O uso desta instruo responsvel pelo recebimento de dados (entrada) fornecidos


pelo usurio e armazenados em reas reservadas da memria atravs da declarao
de variveis, pois as constantes s podem ter seu valor definido no prprio algoritmo.
Esse dado ser recebido por um dispositivo de entrada de dados, normalmente, sendo
padronizado o teclado para tal operao.

Sintaxe:
leia(primeiroNome);

sendo primeiroNome o identificador de uma varivel que armazenar o dado


coerentemente tipificado na declarao da varivel, logo no incio do algoritmo.

Exemplo:

A criao da varivel com identificador nota armazenar um valor numrico relacionado


a nota obtida por um aluno em uma disciplina

real nota; { declara uma varivel real de identificador nota }

leia(nota); { l uma nota informada e a armazena na memria (em nota) }

Suponha que o usurio de seu algoritmo informou a nota 8.5, tendo assim lido o valor
desejado pelo usurio no processamento a ser efetuado pelo computador.

Dessa forma, o contedo da varivel nota passou a guardar o valor 8.5, informado pelo
usurio do algoritmo. Isto significa que uma determinada posio (endereo) de
memria, identificada pelo nome nota, ir armazenar o dado fornecido 8.5.

Instruo

escreva

Esta instruo ou comando indica que determinados dados sero exibidos ao usurio
do algoritmo que est sendo executado. Esse dado exibido em um dispositivo de
sada de dados instalado neste computador, sendo considerado como padro o vdeo
ou monitor (tela).

A instruo escreva pode apresentar o contedo armazenado em uma varivel ou,


exatamente, a mensagem de orientao especificada entre aspas por esta instruo.
Observe o exemplo a seguir que melhora o exemplo anterior que usava a instruo leia.

Exemplo:

Alm de criar a varivel nota, o trecho do algoritmo a seguir orienta as aes do usurio
e apresenta o valor armazenado por esta varivel na memria do computador.

real nota; { declara uma varivel real de identificador nota }

escreva("Informe a nota da prova: "); { orientao para ao do usurio }

leia(nota); { l uma nota informada e a armazena na memria (em nota) }

escreval(nota);

{ apresenta o contedo da memria na varivel nota }

escreva(" foi armazenada com sucesso"); { mostra mensagem ao usurio }

Novamente, imagine que o usurio deste algoritmo informou a nota 8.5.

A primeira instruo escreva mostrar a mensagem (conjunto de caracteres) fixa


descrita entre as aspas (" ") para orientar a ao do usurio no algoritmo que est
sendo executado pelo computador.

Em seguida efetuada a leitura da nota informado e a segunda instruo escreva exibi


o valor armazenado pela varivel nota. Observe que no existem aspas nesta instruo
porque se deseja apresentar o contedo armazenado por esta varivel e no
exatamente o nome da varivel como uma mensagem (veja que no tem aspas,
somente o identificador exato da varivel).

A seguir apresentada uma mensagem entre aspas que ser exibida exatamente como
est escrita entre estas aspas.

Observe o que ser executado pelo trecho do algoritmo usado como exemplo
anteriormente nesta representao da tela (ou vdeo) de seu computador que o est
executando.

Repare na diferena do que ser apresentado se for utilizada as possibilidades de


sintaxe da instruo escreva. Suponha o algoritmo a seguir:

inteiro idade; { cria uma varivel inteira com identificador idade }

escreva("Informe sua idade: "); { orientao para o usurio }

leia(idade); { l e armazena a idade informada na varivel idade }

escreva("Idade = ", idade); { mostra mensagem entre aspas e o contedo da varivel


idade }

O segundo escreva do algoritmo acima, apresenta uma mensagem entre aspas, e em


seguida, aps uma vrgula, descrito o identificador que mostrar seu contedo. Por
meio deste exemplo, possvel esclarecer que a instruo escreva pode apresentar
vrios valores em uma nica instruo, porm todos eles devem estar separados por

vrgula, alm de respeitar a sintaxe para exibir cada mensagem ou contedo de varivel
ou constante guardado na memria do computador.

Existe ainda uma variao da instruo escreva que permite uma melhor organizao
da apresentao e orientao do usurio do algoritmo. Esta variao a instruo
escreval que realiza a mesma ao explicada anteriormente para instruo escreva,
porm a escreval ainda salta uma linha aps escrever todo o contedo especificado em
sua instruo. Este salto de linha acontece na janela de execuo do algoritmo aps
escrever tudo que lhe foi solicitado.
Menu

OPERADORES
Alguns smbolos ou caracteres especficos so responsveis pela execuo de
operaes sobre os valores manipulados por um algoritmo, sendo estas operaes
completamente dependentes dos tipos de dados envolvidos. As principais operaes
realizadas em um algoritmo so aritmticas, relacionais e lgicas.

Operadores aritmticos:
As operaes aritmticas mais comuns so representadas pelos smbolos descritos na
relao a seguir.

OPERAO
SOMA
SUBTRAO
MULTIPLICAO
DIVISO
RAIZ QUADRADA
EXPONENCIAO
DIVISO INTEIRA (quociente)

SMBOLO

+
*
/
raizq(varivel)
^
div

mod

RESTO DA DIVISO INTEIRA

Exemplos:

2 +3

altura * peso

raizq(4)

// usando variveis declaradas no algoritmo

Operadores relacionais:
Os smbolos que solicitam a execuo de operaes relacionais na elaborao dos
algoritmos so descritas a seguir.

OPERAO
IGUALDADE
DIFERENA
MAIOR
MAIOR ou IGUAL
MENOR
MENOR OU IGUAL

Exemplos:

5<7

// 5 menor que 7?

altura = 1.64

// altura igual 1.64?

4 <> -4

// 4 diferente de -4?

Operadores lgicos:

SMBOLO

=
<>
>
>=
<
<=

As operaes lgicas so definidas pela Matemtica, sendo seus smbolos


apresentados na relao a seguir. Todas os aspectos existentes nestas operaes so
empregados na elaborao dos algoritmos.

OPERAO

SMBOLO

CONJUNO

e (E)
ou (OU)
nao (NAO)

DISJUNO
NEGAO

Exemplos:

falso E falso

// resultar em falso, conforme tabela verdade

nao ano

// inverte o valor contido na varivel ano

((aux = ano) ou (5 < dia))

// expresso matemtica com operador ou

Operador de Atribuio
A operao de atribuio consiste em uma das mais importantes na manipulao dos
contedos armazenados na memria do computador, pois ela uma das operaes
responsveis pela troca do contedo armazenado em variveis, alm do fornecimento
do nico valor possvel para as constantes existentes nos algoritmos.

OPERAO

SMBOLO

ATRIBUIO

A sintaxe desta operao simples, mas no deve ser confundida com a operao
matemtica de atribuio de valores, sendo a atribuio computacional mais rgida em
sua sintaxe. Esta operao sempre atribui a uma varivel ou constante identificada
esquerda do smbolo de atribuio (seta para esquerda) o valor ou resultado da
expresso existente direita deste mesmo smbolo.

Exemplo:

ano

salarioJaneiro

1893

// valor atribudo a varivel ou constante ano


5.2 + 3.0

// valor atribudo a varivel salarioJaneiro

Menu

ESTRUTURA DO ALGORITMO
O desenvolvimento de algoritmos adequados e eficientes devem sempre respeitar um
conjunto de normas ou regras para elaborao de uma representao correta a sua
lgica que ser executada. Por existirem vrias maneiras de representar os raciocnios
desejados, essas regras que so responsveis pela orientao na elaborao e
compartilhamento dos mesmo, devendo sempre serem seguidas buscando a garantia
de um algoritmo correto e claro a todos que lhe tenham acesso.

Para representao grfica (fluxograma e Chapin) as figuras geomtricas e os


esquemas de diagramao corretos devem ser respeitados, enquanto que na
representao descritiva (portugus estruturado) se deve seguir sempre o modelo
descrito a seguir.

Declaraes
<constantes>
<variveis>
Incio
<bloco de instrues>
Fim

A definio deste modelo indica a primeira regra organizacional de todos os algoritmos


que sero elaborados, sendo possvel identificar com certa facilidade a existncia de
dois blocos fundamentais na criao de um algoritmo, sendo eles:

bloco de declaraes

bloco sempre iniciado pela palavra reservada Declaraes;

neste bloco so criados os recursos computacionais de variveis, constantes e


subprogramas utilizados no algoritmo;

este bloco termina na palavra reservada Incio que indica tambm o comeo do
segundo bloco (de instrues). O bloco de declaraes pode ficar sem nenhuma
instruo, de acordo com a necessidade da soluo proposta.

bloco de instrues

inicia a partir da palavra reservada Incio, sendo encerrado somente na palavra


reservada Fim, que termina a execuo do algoritmo;

contm todas as instrues ou comandos que descrevem o que o algoritmo deve


fazer (processamento e execuo do algoritmo);

neste bloco deve existir no mnimo uma instruo, caso contrrio o algoritmo no
existiria.

Conhecendo a estrutura bsica para elaborao de algoritmo, observe com ateno o


primeiro algoritmo em portugus estruturado que respeita exatamente esta estrutura
(regras).

Declaraes
num1, num2, resultado : inteiro
Incio
escreva ("Digite um nmero inteiro: ")
leia(num1)
escreval ("Digite o segundo nmero inteiro: ") { escreve e salta linha }

leia(num2)
resultado <- num1 + num2
escreval

{ salta uma linha sem mostrar nada na janela de execuo }

escreva("Total = ", resultado)


Fim

O correto processamento do algoritmo depende da sintaxe (palavras, expresses,


pontuaes) e da semntica coerente com a forma de representao adotada para
representar o raciocnio desejado. Portanto, acompanhe com ateno as regras
existentes em cada tipo de representao, pois isso lhe facilitar a elaborao das
lgicas corretas, sendo estas normas um conjunto de regras que no tem excees e
garantem um algoritmo de qualidade desde sua concepo at a implementao final..

ATIVIDADE DE FIXAO

No intuito de fixar os contedos abordados neste mdulo e verificar sua compreenso


sobre o mesmo, esto sendo sugeridos alguns exerccios de fixao. Clique sobre a
figura Exerccios a seguir e inicie a Lista de Exerccio sobre o contedo desta aula.

ESTRUTURA DE CONTROLE DE DADOS


As estrutura de controle de dado so responsveis pela manipulao dos dados
conforme seja necessrio na realizao de um processamento. Cada instruo
programvel possui uma lgica de operao e estabelece uma sequencia de aes a
serem efetuadas ou verificadas.

Quando estivermos criando os algoritmos sero necessrias as manipulaes de dados


respeitando a sequencia lgica de cada comando, buscando sempre alcanar os
objetivos almejados pelos algoritmos.

Basicamente as estruturas de controle de dados so de trs tipos principais:

Sequencial: conjunto de comandos separados por ponto-e-vrgula (;) que

so executados em uma seqncia linear de cima para baixo.

Seleo:a partir de um teste condicional, uma instruo, ou um conjunto de


instrues, podem ser executados ou no, dependendo exatamente do resultado
do teste efetuado.

Repetio:uma instruo ou o conjunto de instrues que ser executado


repetidamente, de acordo com o resultado de um teste condicional.

ESTRUTURA SEQUENCIAL

A estrutura sequencial a mais convencional entre todas as possveis, pois ela consiste
na execuo de uma instruo de cada vez, onde o encerramento da primeira instruo
permite o acionamento da instruo seguinte, respeitando a ordem de cima para baixo.

Observe o exemplo a seguir:

Declaraes
real NOTA;

{ cria uma varivel real denominada NOTA }

Inicio
escreva("Informa a nota da prova: ");
leia(NOTA);

{ orientao para o usurio }

{ leitura e armazenamento do valor informado }

escreva("Nota =", NOTA);{ mostra a mensagem e o contedo de NOTA }


Fim

O algoritmo proposto no exemplo anterior descritivo e respeita as regras de


organizao e sintaxe do portugus estruturado. Porm, qual a primeira instruo a
ser executada neste algoritmo?

Ele ser executado de maneira sequencial, onde, a partir da palavra reservada


Declaraes, as instrues vo sendo executadas de cima para baixo e a prxima
instruo s executada aps a anterior ser encerrada. O ponto e vrgula marca
exatamente o final da instruo a ser executada.

1. primeira execuo ser a criao da varivel NOTA


2. a segunda ser a escrita da mensagem que orienta o usurio
3. na terceira ser armazenado o valor informado pelo usurio
4. a quarta e ltima mostrar uma mensagem e o valor lido

importante observar que sempre ser executado primeiro o bloco de declaraes e na


sequencia o bloco de instrues. A execuo da palavra reservada Fim encerra a
execuo do algoritmo.

ESTRUTURA DE SELEO OU CONDICIONAL


Este tipo de estrutura permitir a escolha de um caminho sequencial a ser executado.
Primeiramente, ela efetua um teste condicional que definir o caminho de execuo do
algoritmo baseado no resultado deste teste.

Os testes condicionais so baseados na lgica convencional, podem obter o resultado


de verdadeiro ou falso. Estes testes podem ser efetuados sobre operaes relacionais
simples ou com expresses lgicas complexas que resultem em um valor lgico
(verdadeiro ou falso).

As estruturas de seleo podem ser classificadas de 4 formas diferentes, sendo esta


classificao baseada na organizao lgica existente em cada situao. Esta
classificao se resume em:

Seleo simples

Seleo composta

Seleo encadeada

Seleo de mltipla escolha

Seleo Simples

Neste tipo de seleo proposto um teste condicional, que sendo verdadeiro


possibilitar a execuo de uma instruo ou um conjunto de instrues (bloco
condicional) especfica.

Portugus estruturado

Acompanhe a seguir as regras de representao em algoritmo para a tcnica descritiva


do portugus estruturado.

Sintaxe:
:
se (<condio>) ento
comando 1;
comando 2;
:
:
comando n;
fim se;

Exemplo:

Declaraes
inteiro IDADE;
Inicio
escreva("Informe sua idade: ");
leia(IDADE);
se (IDADE < 15) ento
escreva ("Voc uma criana");
fim se;
Fim

Este algoritmo ser executado sequencialmente at chegar ao comando SE (comando


condicional SE) que realizar o teste condicional para verificar a veracidade do valor
informado pelo usurio e armazenado na varivel IDADE.

Se ela for verdadeira, ou seja, for menor que 15 a mensagem "Voc uma criana"
ser mostrada na tela. Se o valor informado pelo usurio no atender ao teste
condicional, a mensagem no ser exibida e o bloco condicional no ser executado.

Fluxograma:

Acompanhe a seguir a representao em algoritmo na tcnica grfica do fluxograma.

Seleo Composta

A seleo composta sempre executar um bloco condicional, pois se o resultado do


teste condicional for verdadeiro um conjunto de instrues ou somente uma ser
executada e se o resultado no for verdadeiro um outro conjunto de instrues, ou
somente uma, ser executada tambm.

Este tipo de seleo sempre identificar um nico caminho de instrues a ser


percorrido, dependendo sempre do resultado da veracidade do testes condicional
executado.

Sintaxe:
:
se (<condio>) ento
comando 1;
:
comando n;
seno
comando 5;
:
comando m;
fim se;

Exemplo:

Declaraes
inteiro IDADE;
Inicio
escreva("Informe sua idade: ");
leia(IDADE);
se (IDADE < 15) ento
escreva ("Voc uma criana");
seno

escreva("Voc adulto");
fim se;
Fim

Se a idade informada for menor que 15 ento a mensagem a classificar como uma
criana, seno a mensagem apresentada ser que Voc adulto.

Fluxograma:
Veja a seguir a representao grfica do algoritmo anterior em fluxograma.

Seleo encadeada

A instruo de seleo (SE) pode ser encadeada uma dentro da outra, seja no bloco
verdadeiro (ento) ou falso (seno). Todas as instrues programveis podem estar
dentro de qualquer um dos blocos da instruo de seleo.

O encadeamento destas instrues tambm chamada de aninhamento de instrues


de seleo ou condicional vrias, no existindo um limite de quantos testes condicionais
podem estar dentro de outro. Quem estabelece este tipo de limite a soluo lgica
proposta no algoritmo para alcanar uma soluo eficiente.

Sintaxe:
:
se (<condio_1>) ento
<bloco de comandos 1>;
seno
se (<condio_2>) ento
<bloco de comandos 2>;
seno
se (<condio_3>) ento
:
fim se;
fim se;
fim se;

Exemplo:

Declaraes
inteiro IDADE;

Inicio
escreva("Informe sua idade: ");
leia(IDADE);
se (IDADE < 20) ento
se(IDADE < 15) ento
escreva ("Voc criana");
seno
escreva ("Voc adolescente");
fim se;
seno
se(IDADE < 50) ento
escreva("Voc adulto");
seno
escreva("Voc velho");
fim se;
fim se;
Fim

Fluxograma:

Seleo de Mltipla Escolha

Uma outra instruo condicional, muito utilizada nas avaliaes de igualdade, a


seleo de mltipla escolha. Ela verifica somente a igualdade do valor avaliado, onde
sua veracidade resultar na execuo de um bloco, ou de uma nica instruo
especfica.

Sintaxe:

:
escolha (X)
caso <v1>:
comandos;
caso <v2>:
comandos;
caso <v3>:
comandos;
caso contrario:
comandos;
fim escolha;

<v1>, <v2>, <v3> so supostos valores a serem relacionados por meio da operao de
igualdade

Exemplo:

Declaraes
inteiro EPOCA;
Inicio
escreva("Digite o perodo trimestral do ano em que estamos: ");
leia(EPOCA);
escolha (EPOCA)

{ instruo de mltipla escolha sobre EPOCA }

caso 1: escreva ("vero");

{ testes de igualdades sobre EPOCA }

caso 2: escreva ("outono");


caso 3: escreva ("inverno");
caso 4: escreva ("primavera");
caso contrario: escreva ("perodo invlido");
fim escolha;
Fim

ATIVIDADE DE FIXAO

No intuito de fixar os contedos abordados neste mdulo e verificar qual foi sua
aprendizagem sobre o mesmo sugerido alguns exerccios de fixao para serem
resolvidos. Clique sobre o diagrama abaixo e inicie a lista de exerccio coerente com o
contedo estudado at agora.

ESTRUTURA DE REPETIO
O processamento de valores pode ocorrer diversas vezes sobre uma mesma lgica,
porm os dados a serem manipulados podem ser diferentes, como no calculo da
tabuada de um nmero. Este calculo realiza a mesma operao de multiplicao sobre
os valores numricos inteiros sequencias, normalmente iniciados em um (1) e seguindo
at o nmero dez (10) quando estamos aprendendo a calcular e memorizar o resultado
obtido nesta operao.

Sendo assim, Vamos criar um algoritmo que leia um nmero positivo e apresente o
resultado de sua tabuada de um a dez (1 10). Observe o exemplo proposto:

Exemplo:

Supondo que o valor desejado seja 2 ento:


2x1=2
2x2=4

2x3=6
2x4=8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
2 x 10 = 20

Soluo (algoritmo descritivo):


Declaraes
inteiro VALOR;
Incio
escreva ("Informe o valor desejado: ");
leia(VALOR);
escreva(VALOR, " x 1 = ", (VALOR * 1) );
escreva(VALOR, " x 2 = ", (VALOR * 2) );
escreva(VALOR, " x 3 = ", (VALOR * 3) );
escreva(VALOR, " x 3 = ", (VALOR * 4) );
escreva(VALOR, " x 3 = ", (VALOR * 5) );
escreva(VALOR, " x 3 = ", (VALOR * 6) );
escreva(VALOR, " x 3 = ", (VALOR * 7) );
escreva(VALOR, " x 3 = ", (VALOR * 8) );
escreva(VALOR, " x 9 = ", (VALOR * 9) );
escreva(VALOR, " x 10 = ", (VALOR * 10) );
Fim

Para o exemplo acima foi desenvolvido um algoritmo que atende ao problema


apresentado, mas se os valores tivessem que ser gerados at 1000. Assim o algoritmo
no ficaria mais complexo, pois a operao a ser realizada seria a mesma, mas ele
ficaria bem maior.

Com o intuito de controlarmos as manipulaes necessrios sobre os dados


armazenados, tambm podemos utilizar as instrues de repetio, que permitem a
repetio de uma operao quantas vezes forem necessrias, baseando esta repetio
no resultado de um teste condicional.

PARA ... FAA

A instruo de repetio PARA ... FAA executa um conjunto de instrues por uma
quantidade de vezes bem definidas (conhecidas).

Sintaxe:
:
para X de i at f passo p faa
<comandos>;
fim para;

onde

X uma varivel inteira que auxiliar na contagem da repetio iniciada com o


valor i at o valor final de f

p o valor do incremento dado a varivel X

O problema da tabuada, apresentado anteriormente, pode ser solucionado com o


algoritmo que usa eficientemente a instruo de repetio para ... faa.
Soluo da tabuada (descritiva):

Declaraes
inteiro VALOR, CONTADOR;
Incio
escreva ("Informe o valor desejado: ");

leia(VALOR);
para CONTADOR de 1 at 10 passo 1 faa
escreva(VALOR, " x ",CONTADOR," = ", (VALOR * CONTADOR) );
fim para;
Fim

Vamos acompanhar outro exemplo na aplicao desta instruo de repetio.

Exemplo (descritivo):

Declaraes
real NOTA, SOMA, MEDIA;
inteiro AUX;
Incio
SOMA

0;

para AUX de 1 at 50 passo 1 faa


escreva("Informe sua nota: ");
leia(NOTA);
SOMA + NOTA;

SOMA
fim para;
MEDIA

SOMA / 50;

escreva ("Mdia da turma = ", MEDIA);


Fim

Neste exemplo, a repetio, ou looping, realizado pela instruo para ... faa efetua a
leitura e a soma de 50 notas de alunos de uma turma, apresentando no seu final a
mdia desta turma.
Fluxograma:
Acompanhe a seguir o algoritmo grfico da soluo descrita anteriormente me portugus
estruturado.

ENQUANTO ... FAA

A instruo de repetio ENQUANTO ... FAA permite a execuo do conjunto de


comandos pertencentes ao seu bloco de repetio, sendo eles executados a partir de

um teste condicional verdadeiro. Enquanto este teste permanecer verdadeiro a


repetio executada continuamente, sendo encerrada somente quando a condio for
falsa.

Efetua um teste lgico antes de iniciar as instrues de repetio (ou looping).


O controle pode ser feito pelo usurio ou automaticamente por um contador.

Sintaxe:
:
enquanto (< condio >) faa
<bloco de repetio>; { com um ou vrios comandos }
fim enquanto;

Fluxograma:
Observe a representao genrica em um algoritmo grfico usando o ENQUANTO
...FAA.

Vamos utilizar o mesmo exemplo anterior, usado na instruo PARA ... FAA, para
construir um algoritmo com a instruo de repetio ENQUANTO ... FAA.

Exemplo (descritivo):

Declaraes
real NOTA, MEDIA;
inteiro AUX;
Incio
AUX
MEDIA

1;
0;

enquanto (AUX <= 50) faa

escreva("Informe sua nota: ");


leia(NOTA);
MEDIA + NOTA;

MEDIA
AUX

AUX + 1;

fim enquanto;
MEDIA

MEDIA / 50;

escreva ("Mdia da turma = ", MEDIA);


Fim
Fluxograma:

REPITA ... AT
A instruo de repetio REPITA ... AT possui caractersticas relevantes na sua lgica
de execuo.

As principais caractersticas dessa instruo so:

O teste condicional para realizar a repetio sobre o bloco de instrues existente


entre a palavra reservada REPITA e AT executado somente no final do bloco,
conforme organizao sequencial do algoritmo

O bloco entre as duas palavras reservadas desta instruo ser executado no


mnimo uma vez

A repetio executada somente se o teste condicional for falso, pois sendo ele
verdadeiro a repetio encerrada.

Sintaxe:
:
repita
<bloco de repetio>;

{ com um ou vrios comandos }

at (<condio>);
:

Vamos usar o mesmo exemplo demonstrado na instruo PARA ... FAA e


ENQUANTO ... FAA para visualizarmos com mais facilidade a diferena no emprego
de cada uma sobre um mesmo problema.

Exemplo (descritivo):

Declaraes
real NOTA, MEDIA;
inteiro AUX;
Incio
AUX
MEDIA

1;
0;

repita
escreva("Informe sua nota: ");
leia(NOTA);
MEDIA
AUX

MEDIA + NOTA;
AUX + 1;

at (AUX > 50);


escreva ("Mdia da turma = ", MEDIA / 50);
Fim

Usando a representao grfica, vamos observar o mesmo exemplo usando a instruo


REPITA ... AT.

Fluxograma:

Formas de Controle das Estruturas de Repetio

As estruturas de repetio possuem um forma diferenciada para controlar a quantidade


de repeties a serem executadas. Estes controles podem ser genericamente
classificados em automticos ou controlados pelo usurio do programa.

AUTOMTICO: Uma varivel auxiliar contar de quantas vezes ser executado o

conjunto de comandos (bloco de repetio), sem interferncia direta do usurio.


O bloco ser repetido sempre a quantidade de vez prevista pelo desenvolvedor
do programa.

CONTROLADO PELO USURIO: O programa sempre respeitar a solicitao do

usurio, executando um bloco de repetio quantas vezes forem solicitadas pelo


usurio, respeitando a lgica existente no programa desenvolvido.

Vejamos alguns exemplos que facilitem esta compreenso.

# Contador automtico usando a instruo enquanto:


{ algoritmo descritivo para ler o peso de 5 pessoas }

Declaraes
inteiro CONTADOR;
real PESO;
Inicio
CONTADOR

0;

enquanto (CONTADOR < 5) faa


escreva ("Informe o peso: ");
leia (PESO);
CONTADOR

CONTADOR + 1;

fim enquanto;
escreva ("Foram informados 5 pesos.");
Fim

O algoritmo descritivo (portugus estruturado) anterior efetua a leitura de cinco pesos de


pessoas e s encerrado aps a leitura dos cinco pesos lidos. Este tipo de repetio
classificada como automtica, pois o algoritmo sempre ler cinco pesos, nunca lendo
mais ou menos valores. Observe as diferenas existentes no exemplo a seguir.

# Contador controlado pelo usurio usando a instruo enquanto:


{ algoritmo descritivo para ler o peso de pessoas }

Declaraes
inteiro CONTADOR;
real PESO;
Inicio
PESO

1;

CONTADOR

0;

enquanto (PESO > 0) faa


escreva ("Informe o peso: ");
leia (PESO);
CONTADOR

CONTADOR + 1;

fim enquanto;
escreva ("Foram informados", (CONTADOR - 1), " pesos.");
Fim

O algoritmo anterior l quantos pesos o usurio desejar, aplicando a mesma lgica para
a quantidade que o usurio necessite. Este tipo de controle da repetio tambm
conhecido como flag ou sentinela de interrupo da repetio.

Acompanhe a seguir o exemplo anterior utilizando a instruo de repetio REPITA.


# Contador automtico com a instruo repita:
{ algoritmo descritivo para ler o peso de 5 pessoas }

Declaraes
inteiro CONTADOR;
real PESO;
Inicio
CONTADOR

0;

repita
escreva ("Informe o peso: ");
leia (PESO);
CONTADOR + 1;

CONTADOR

ate (CONTADOR = 5);


escreva ("Foram informados 5 pesos.");
Fim

O mesmo problema, porm com o algoritmo usando a instruo repita controlado pelo
usurio apresentado a seguir.

# Contador controlado pelo usurio usando o repita:


{ algoritmo descritivo para ler o peso de pessoas }

Declaraes
inteiro CONTADOR;
real PESO;
Inicio
PESO

1;

CONTADOR

0;

repita
escreva ("Informe o peso: ");
leia (PESO);
CONTADOR
ate (PESO = -1);

CONTADOR + 1;

escreva ("Foram informados", (CONTADOR - 1), " pesos.");


Fim

LINGUAGEM DE PROGRAMAO

O algoritmo auxilia o desenvolvimento dos programas, pois nele que os


programadores vo representar a soluo proposta para ser testada e avaliada.
Quando o algoritmo est finalizado, ou pronto, resta simplesmente transform-lo em um
programa computacional, respeitando toda lgica envolvida na soluo testada e
avaliada.

Realmente, um bom algoritmo s precisar ser traduzido para a linguagem de


programao desejada, respeitando as suas regras de sintaxe e semntica. O perodo
de aprofundamento no conhecimento relacionado ao problema em questo, sua
proposta de soluo, os testes e a manuteno da mesmo, ocorrem durante os estudos,
pesquisas e elaborao do algoritmo restando assim, simplesmente a re-escrita da
soluo encontrada para uma linguagem de programao computacional (processo de
traduo).

As linguagens de programao, assim como as de comunicao, possuem regras


sintticas e semnticas que devem ser obedecidas, pois as instrues computacionais
no podem oferecer possibilidades de interpretao para o computador, que somente
executa o que lhe solicitado. Existem varias linguagens de programao, mas em
todas elas a lgica relacionada a proposta construda no algoritmo poder ser
implementada para atender ao objetivo almejado.

Exemplo:

Acompanhe neste exemplo a "traduo" da instruo escreva proposta a seguir:

escreva("Informe a sua idade:");

A instruo escreva corresponde aos comandos especificados respectivamente na


linguagens identificadas na relao a seguir:

ATIVIDADE DE FIXAO

No intuito de fixar estes novos contedos abordados na continuao deste mdulo e


verificar sua compreenso sobre o mesmo sugerido alguns exerccios de fixao para
serem resolvidos. Clique sobre o diagrama que inicia a lista de exerccio sobre tais
contedos abordado at o momento e boa reviso sobre eles!!
SUBPROGRAMAS
A identificao de problemas mais complexos resultar no desenvolvimento de
algoritmos tambm mais complexos para resolve-os.

Uma abordagem eficiente para este tipo de problema a diviso do problema mais
complexo em problemas mais simples de serem resolvidos.

Este mtodo conhecido como modularizao, onde um grande problema divido em


problemas menores e a soluo destes problemas menores resultar na soluo do
problema maior (mais complexo). Estes programas menores so denominados subrotinas, subprogramas ou sub-algoritmos.

Um subprograma um trecho de um algoritmo (futuro programa) maior (mais complexo)


que realiza qualquer operao computacional estudada at agora (entrada,

processamento, sada). Ele efetua parte de uma tarefa que um algoritmo maior dever
executar. O algoritmo que aciona um subprograma chamado de algoritmo principal
daquele subprograma.

Observe a seguir a representao da lgica funcional de uma algoritmo elaborado com


alguns subprogramas ou mdulos

O funcionamento de um subprograma corresponde a implementao de uma funo, no


sentido matemtico da expresso, pois um subprograma tambm retorna um nico
valor, de um ou mais valores manipulados em uma ou mais operaes realizadas.

A expresso "funo" tambm usada na elaborao de um subprograma, onde ela


identifica a disponibilizao de um ou mais subprogramas para um algoritmo principal,
sendo esta expresso (funo) uma palavra reservada.

FUNO

um subprograma iniciado pela palavra reservada funo, seguida de um identificador


que fornece um nome a funo, uma lista de parmetros, alm de um tipo de dado
vlido para retornar o resultado encontrado pela aplicao da mesma.

A lista de parmetros consiste nos valores que o algoritmo principal possui e o


subprograma precisa usar para obter, ou gerar, outro dado importante ao algoritmo
principal.

O acionamento de qualquer subprograma ocorre por meio da especificao do seu


nome, seguido da lista de parmetros a serem manipulados pelo subprograma (funo).

Esta lista tem a sua representao opcional ao programador, pois pode no existir
nenhum valor do algoritmo principal que seja necessrio ao subprograma.

Forma geral de uma funo

Uma funo possui trs momentos no algoritmo:

1. Primeiro momento o da declarao;


2. Segundo momento identifica o que ela faz (seu corpo);
3. Terceiro momento a utilizao ou acionamento (vrias situaes).

Sintaxe:

Funo <tipo de dado> <identificador> (<lista de parmetros>);


<tipo de dado> Identificador 1;
:
<tipo de dado> Identificador n;
inicio
&nbspInstruo 1;
&nbspInstruo 2;

:
&nbspInstruo n;
retorna(<valor>);
fim funo;
Onde:

Funo a palavra reservada;

<tipo de dado> um tipo de dado vlido (inteiro, real, caracter, lgico);

<identificador> o nome atribudo a funo.

<lista de parmetros> so os parmetros usados no subprograma.

Parmetros da funo

Os parmetros de uma funo so dados fundamentais que a funo deve ter acesso
para realizar seu objetivo. Por exemplo, se voc tem uma funo media que calcula a
mdia aritmtica de dois nmeros, essencial que essa funo "saiba" quais so esses
nmeros, do contrrio, ela no pode efetuar os clculos. Pois bem, esses dois nmeros
sero disponibilizados funo por meio de parmetros.

Portanto, a estrutura descritiva dessa funo seria:

Funo real MEDIA (real NUM_1, real NUM_2)


real RESULTADO;
inicio
RESULTADO

(NUM_1+NUM_2) / 2;

retorna(resultado);
fim funo;

Onde NUM1 e NUM2 so parmetros da funo MEDIA descrita anteriormente.

Uso do ponto e vrgula ";"

A sintaxe de criao da funo exige o ponto e vrgula no momento de sua declarao,


tambm chamado de prottipo da funo.

Na identificao ou descrio das instrues realizadas pela funo (definio do seu


corpo), o ponto e vrgula no pode ser includo no cabealho da funo, pois a partir da
palavra reservada funo at a expresso fim funo o corpo da funo est sendo
descrito (desenvolvido).

Na utilizao, tambm denominada chamada da funo, o ponto e vrgula necessrio


de acordo com a situao em que a funo ser acionada (pedido de execuo),
obedecendo as regras j estudadas da aplicao desta pontuao ( ; ).

Exemplo:

Este algoritmo calcula a mdia de cada aluno de uma turma de 50 estudantes. O


interessante que o calculo de cada mdia feito por uma funo, que recebe como
parmetros dois nmeros e retorna a mdia aritmtica entre eles.

Declaraes
funo real MEDIA (real VALOR_1, real VALOR_2);
constante inteiro QTDE

50;

{ prottipo}

{ quantidade de alunos }

real NOTA_1, NOTA_2, TOTAL;


inteiro CONTADOR;
Inicio

{ algoritmo principal }

para CONTADOR de 1 at QTDE passo 1 faa


escreva("Informe as notas de um aluno: ");
leia(NOTA_1, NOTA_2);
TOTAL

Media(NOTA_1, NOTA_2);

escreva("Mdia Final = ", TOTAL);


fim para;

{ chamada da funo }

Fim

{ descrio do que esta funo faz }


funo real MEDIA (real VALOR_1, real VALOR_2);

{ corpo da funo }

real RESULTADO;
inicio
RESULTADO

(VALOR_1 + VALOR_2) / 2;

retorna (RESULTADO);
fim funo;

Observe no exemplo anterior que existe um subprograma para o algoritmo principal que
aciona por 50 vezes o subprograma (funo MEDIA). Em cada momento que esta
funo foi acionada, foram lhe enviados parmetros com valores possivelmente
diferentes, o que resultar em uma mdia diferente para cada acionamento.

Aspectos de Execuo dos Subprogramas

Um algoritmo em execuo deve obedecer a seqncia das instrues, a menos que


existam comandos (instrues) especificas que alterem esta ordem seqencial (seleo
u repetio).

Porm a chamada do subprograma desloca a sequencia de execuo do algoritmo


para o corpo da funo que tambm obedecer a seqncia de execuo, respeitando
as instrues existentes no seu corpo.

Quando o subprograma (funo) chegar ao seu final, ele retornar um nico valor para
o algoritmo que o acionou, continuando a execuo do mesmo a partir da prxima
instruo a ser realizada.

Um algoritmo possui uma estrutura bem organizada, onde subprogramas executam


tarefas bem determinadas. Esta diviso facilita a legibilidade e a manuteno corretiva
e/ou evolutiva sobre eles.

Um subprograma s pode ser acionado pelo programa que o contm e ele tambm
pode possuir outros subprogramas.

Todo programa com subprograma deve possuir uma estrutura similar a representada, de
forma simples, abaixo:

Declaraes
Algoritmo Principal
Subprogramas
Fluxograma:

A representao do subprograma em uma tcnica grfica, como o fluxograma,


apresentado a seguir.

Por meio do nome do subprograma e seus parmetros, se houverem, o local do


acionamento do subprograma identificado, deslocando a sua execuo para um
outro fluxograma.

Este outro fluxograma dever ser elaborado, representando exatamente o que este
subprograma executa, ou seja, as instrues existentes no corpo do subprograma, ou
o que ele faz.
As elipses de incio e fim do algoritmo acionador (principal) so inseridas da mesma
forma, porm no diagrama que especifica o corpo da funo a elipse inicial
substituda pelo nome do subprograma e sua lista de parmetros, enquanto que a
elipse final contm a palavra reservada retorna e a informao que ser retornada.

Instruo de Retorno

Um subprograma sempre retorna uma valor ao algoritmo que o aciona, por isso ele
possui um tipo de dado declarado, retornando ao acionador um dado exatamente deste
tipo.
Exemplo:

funo real MEDIA (real VALOR_1, real VALOR_2)


real RESULTADO;
inicio
RESULTADO

(VALOR_1 + VALOR_2) / 2;

retorna (RESULTADO);
fim funo;
A instruo retorna executa o encerramento do subprograma, retornando imediatamente
o valor desejado a instruo acionadora da funo. Esta instruo s pode retornar um
nico valor ao acionador.
Objetos Locais e Globais

A elaborao de subprogramas no desenvolvimento de algoritmos conhecido tambm


como processo de modularizao, pois estabelecem mdulos independentes e bem
definidos que podem ser acessados a qualquer momento, de acordo com a necessidade
existente.

Usando deste processo os recursos ou objetos (variveis, constantes ou


subprogramas) que podem ser criados e manipulados por um algoritmo tambm
passam a ter algumas novas caractersticas.

Estas novas caractersticas permitem que os objetos sejam classificados em locais ou


globais.

Por exemplo: uma varivel considerada global quando sua declarao acontece no
algoritmo principal, enquanto que uma varivel considerada local quando a sua
declarao acontece em um subprograma (ou funo).

OBJETO GLOBAL

Declarao feita no algoritmo principal;

Todos os subprogramas do algoritmo principal podem acessar e manipular o


valor armazenado por um objeto global;

Tambm chamado de objeto pblico, pois oferece o acesso de todos os


subprogramas existentes no algoritmo principal.

OBJETO LOCAL

Declarao feita no subprograma de um algoritmo principal;

Somente o subprograma que declara o objeto pode acessa-lo, ou os


subprogramas hierarquicamente desenvolvidos aps este subprograma, tornando
este subprograma um algoritmo principal para os seus subprogramas;

Todos os objetos criados em um subprograma so locais, sendo destrudos


quando tal subprograma encerrado (deixam de existir).

O correto uso dos objetos permite uma otimizao no acesso e manipulao da


memria, transformando o algoritmo em uma sequencia lgica de processamento mais
eficiente.
Exemplo:
Declaraes
inteiro VALOR_1, VALOR_2;

OBJETOS GLOBAIS

funo inteiro SOMA(inteiro VALOR_1, inteiro VALOR_2);


Incio
escreva("Informe dois valores: );
leia(VALOR_1, VALOR_2);
escreva(SOMA(VALOR_1, VALOR_2));
Fim

funo inteiro SOMA(inteiro VALOR_1, inteiro VALOR_2) { corpo subprog.}


inteiro TOTAL;
inicio

OBJETO LOCAL

TOTAL

VALOR_1 + VALOR_2;

retorna (TOTAL);
fim funo;

Caractersticas Relevantes da Programao Modular

Reutilizao de cdigo (aproveitamento do subprograma);

Subprogramas devem ser genricos o bastante para se adaptarem as diversas


situaes, visando justamente essa reutilizao;

A passagem de parmetros possibilita o envio de diferentes valores para um


mesmo subprograma, que realizar as operaes necessrios sobre estes dados;

A passagem de parmetros pode ocorrer de duas formas:


1. Passagem por valor.
2. Passagem por referncia.

Passagem por Valor

Subprograma usa uma cpia do valor existente no algoritmo principal;

No altera o valor original existente no algoritmo principal, somente o valor local


do subprograma;

Valor existente no subprograma no pode ser acessado pelo algoritmo principal,


a menos que seja retornado para o algoritmo chamador;

Com a finalizao do subprograma, todos os parmetros e as variveis locais so


destrudo, ou seja, deixam de existir.

Passagem por Referncia

Subprograma usa o valor original existente no algoritmo principal;

A manipulao desse tipo de parmetro altera o valor existente no algoritmo


principal, ou seja, o valor original pblico e sofre alterao;

Com a finalizao do subprograma o valor do parmetro passado por referncia


no destrudo, pois ele alterou o valor original existente no algoritmo principal;
ATIVIDADE DE FIXAO

No intuito de fixar os contedos abordados neste mdulo e verificar qual foi sua
aprendizagem sobre o mesmo sugerido alguns exerccios de fixao para serem
resolvidos. Clique sobre o diagrama de acesso a lista de exerccio e boa prtica com
os mesmo!!

ESTRUTURAS DE DADOS
As estruturas de dados consistem em organizaes lgicas sobre o armazenamento e
manipulao dos dados que sero necessrios ao algoritmo e posteriormente ao
programa resultante de tal representao.

As principais estruturas a serem manipuladas nos algoritmos so classificadas em


homogneas (de um mesmo tipo de dado) e heterogneas (tipos diferentes).
ESTRUTURA DE DADOS COMPOSTA HOMOGNEA

A elaborao de um algoritmo que armazene as notas de cinco alunos diferentes


poderia ser feita como sugerido no portugus estruturado a seguir.

Declaraes
real ALUNO1,ALUNO2,ALUNO3,ALUNO4,ALUNO5;
Inicio
escreva("Informe a nota do 1 aluno: ");
leia (ALUNO1);
escreva("Informe a nota do 2 aluno: ");
leia (ALUNO2);
escreva("Informe a nota do 3 aluno: ");
leia (ALUNO3);
escreva("Informe a nota do 4 aluno: ");
leia (ALUNO4);
escreva("Informe a nota do 5 aluno: ");
leia (ALUNO5);
Fim

Por meio deste algoritmo seria possvel ler 5 notas de 5 alunos diferentes e armazenalas em 5 diferentes variveis. Uma instruo de repetio no melhoraria muito esta
lgica, pois os cinco valores precisaro estar disponveis independente dos outros
valores informados. Mas imagine se a leitura de todas as notas dos alunos do seu curso
tivessem quer ser lidas pelo seu algoritmo, o que faramos? E no prximo semestre
quantos alunos seriam?

em uma situao como esta que as estruturas de dados so fundamentais para o


processamento dos dados. Elas so de dois tipos bsicos: Homogneas (vetores e
matrizes) e Heterogneas (registros).

Variveis Compostas Unidimensionais (vetor)

Uma estrutura de dados composta homognea consiste em uma nica varivel que
pode armazenar vrios valores (por isso composta) do mesmo tipo (por isso
homognea). Suas principais caractersticas so:

Contm vrios valores (nmero definido);

Todos valores so do mesmo tipo de dado;

Possui um nico nome (identificador da varivel);

Cada valor do conjunto acessvel independentemente, de acordo com o seu


ndice (ou posio na estrutura).

Exemplo:

Suponha a existncia de uma estrutura que armazena a idade de 12 pessoas.


nome do identificador = IDADES

valores
ndices

10

11

Os valores correspondem aos contedos informados pelo usurio, ou seja, so as


idades desejadas.

Os ndices correspondem as posies que identificam os valores armazenados


independentemente dos outros valores, sendo atravs deles manipulados
especificamente o valor desejado.

Suponha que desejamos apresentar somente a idade do sexto indivduo. Como o ndice
da estrutura de dados sempre comea com zero, o sexto indivduo possui a sua idade
armazenada na 5 posio da estrutura, sendo o contedo desta posio (5) igual a 7
(idade do indivduo).

Os vetores tambm so chamados de variveis compostas unidimensionais:

Composta: porque podem armazenar vrios valores;

Unidimensional: porque vetor s possui variao em uma dimenso;

Homognea: porque s armazena um nico tipo de dado.

A sintaxe necessria para a criao de uma estrutura de dados composta


unidimensional (vetor) em um algoritmo descritivo (portugus estruturado)
apresentada na forma geral a seguir:

Declarao de uma varivel convencional:


<tipo bsico> <identificador>;

Exemplo:
real NOTA;

Declarao da estrutura de dados composta unidimensional:


<tipo bsico> <identificador> [<tamanho>];

onde:
<tipo bsico> o tipo de dado que ser armazenado na estrutura;
<identificador> o nome atribudo a estrutura (vetor);
<tamanho> a quantidade de elementos que o vetor poder armazenar.

Exemplo:

real NOTAS[20];

No exemplo anterior criamos um vetor chamado NOTAS que pode armazenar at 20


nmeros reais diferentes.

O acesso a um elemento do vetor pode acontecer por meio da especificao do nome


do vetor seguido do ndice desejado entre colchetes.

IDADES
0

Exemplo:

O valor de IDADES[10] 45, o de IDADES[2] 29, e assim por diante.

Observe a seguir o exemplo descritivo de manipulao do vetor.

{ manipulao de vetor }
Declaraes
inteiro AUX, IDADES[12];
Incio
AUX

4;

IDADES[1]
IDADES[AUX]

IDADES[AUX];
IDADES[ 2 * AUX ] / 2;

Fim

Soluo:

IDADES[1]

IDADES[4];

IDADES[4]

IDADES[8] / 2;

{ IDADES[1]

{ IDADES[4]

15 }

12/2 }

Realizando as operaes anteriores o vetor IDADES ficaria assim:

Exemplo:

10

11

Escrever um programa que declare um vetor de reais e leia as notas de 30 alunos.

Declaraes
real NOTA[30];

{ vetor de 30 valores reais }

inteiro AUX;
Incio
para AUX de 1 at 30 passo 1 faa
escreva("Informe a nota do aluno :");
leia (NOTA[AUX]);
fim para;
Fim

Tipo Caracter

Quando declaramos uma varivel do tipo caracter, para armazenar um nome por
exemplo, estamos na verdade criando um vetor de caracteres, pois um nome consiste
de um conjunto de letras (ou smbolos alfabticos).

Um conjunto de caracteres tambm chamado de string ou cadeia de caracteres.


Suponha a necessidade de armazenar o nome Marilda em uma varivel. Se criamos a
varivel caracter com identificador de NOME ela s ter a capacidade da armazenar
uma letra do nome desejado. Portanto, ser necessrio criar um vetor do tipo caracter
com tamanho coerente para o armazenamento de todos os caracteres do nome
desejado.

Exemplo:

Declaraes
caracter NOME[10];
inteiro AUX;

Incio
AUX

0;

escreva("Informe o nome desejado terminando com ponto final: ");


repita
leia (NOME[AUX]);
AUX + 1;

AUX

ate (NOME[AUX - 1] = "." ou AUX = 10);


escreva(NOME[0]);
Fim

A instruo escreva existente no final deste algoritmo apresentar somente a letra M se


o nome informado for Marilda, pois a posio 0 (zero) estar armazenando somente
esta letra (M).

Vamos praticar com outro exemplo que dever solicitar uma senha para um usurio e
verificar se ela foi informada corretamente ou no.

Declaraes
caracter SENHA[4], SENHA_USUARIO;
inteiro AUX;
lgico IGUAL;
Inicio
verdadeiro;

IGUAL
AUX

0;

{ registrando a senha CUBO }


SENHA[0]

"C";

SENHA[1]

"U";

SENHA[2]

"B";

SENHA[3]

"O";

escreva("Informe a senha e ponto final para encerrar: ");


repita

leia(SENHA_USUARIO[AUX]);
AUX

AUX + 1;

ate (SENHA_USUARIO[AUX - 1] = "." ou AUX = 4);


para AUX de 0 at 4 passo 1 faa
se (SENHA[AUX] <> SENHA_USUARIO[AUX]) ento
IGUAL

falso;

fim se;
fim para;
se (IGUAL = verdadeiro) ento
escreva("Senha correta!");
seno
escreva("Senha incorreta!");
fim se;
Fim

Declarao de Tipos

A palavra reservada "tipo" indica a criao de um novo tipo de dado, criado pelo
algoritmo.

Quando criamos um tipo este s funciona dentro do algoritmo onde foi criado.

Exemplo:

Declaraes
tipo real VALORES[10];

{ criao de um novo tipo de dado }

VALORES NUMERO;

{ criao de uma varivel deste novo tipo }

Incio
:
Fim

No exemplo anterior criamos um tipo chamado VALORES. Este tipo representa um


vetor de 10 posies que s armazena nmeros reais. Em seguida declaramos a
varivel NUMERO que exatamente do tipo VALORES criado anteriormente.

Sendo assim, a varivel NUMERO consiste de uma estrutura de dados composta


homognea (vetor) de 10 posies que s armazena valores reais.

ATIVIDADE DE FIXAO

No intuito de fixar estes novos contedos abordados at o momento e verificar sua


compreenso sobre o mesmo so sugeridos alguns exerccios de fixao para serem
resolvidos, por meio do seu clique sobre o diagrama abaixo que permitir o incio da
lista de exerccio. Bom trabalho!!
ESTRUTURAS DE DADOS
Uma outra possibilidade de organizao dos dados consistem da estrutura descrita a
seguir, sendo ela muito eficiente quando aplicada coerentemente.
ESTRUTURA DE DADOS COMPOSTA HETEROGNEA

Uma empresa vai fornecer o credirio para um cliente efetuar o pagamento em vrias
parcelas, mas para isso ser necessrio efetivar um cadastro dos dados mais relevantes
para a localizao do cliente, caso algum problema venha a ocorrer com os
pagamentos.

Estas informaes seriam:


Nome,
Endereo,
Nmero do CPF.

A criao destas fichas cadastrais conter dados com tipos diferentes, no sendo
possvel usar uma varivel composta homognea para guardar todos eles. Apesar
disso, todos estes dados so relacionados, pois pertencem a uma mesma pessoa, ou
seja, cada ficha possuir diferentes dados (nome, endereo e CPF), mas todos eles so
de um mesmo cliente, sendo todos estes dados relacionados logicamente a este cliente.

Cada um dos dados que formam esta ficha chamado de componente ou elemento do
registro, sendo cada ficha completa identificada como um cdigo de registro. Portanto,
neste exemplo, s ser possvel conseguir um credirio aps a efetivao do registro do
cliente, sendo este registro formado pelos componentes nome, endereo e nmero do
CPF.

FICHA: 0

(ou primeiro registro)

NOME

Joo Carlos da Silva

caracter

ENDEREO

Rua So Jos, 576

caracter

CPF

04568715898

inteiro

componentes

dados armazenados

tipo de dados

Esta empresa tambm no far o credirio somente para um cliente, mas para os vrios
clientes que possurem um perfil interessante para a mesma. Assim, ser necessrio
criar uma estrutura de dados que possa armazenar vrios dados (composta) de tipos
diferentes (heterognea).

Estas estruturas (compostas heterogneas) tambm so chamadas de registros e


permitem uma organizao eficiente no armazenamento e manipulao dos dados que
esto implicitamente relacionados.

As caractersticas dos registros so:

Pode conter vrios registros com valores (nmero definido);

Os valores no precisam ser do mesmo tipo de dado;

Um registro possui um nico nome (identificador);

Cada registro acessvel independentemente, sendo seus elementos tambm


independentes de acordo com o seu nome significativo.

Exemplo:

Primeiro
Registro[0]
Segundo
Registro[1]

NOME: Joo Carlos da Silva


ENDEREO: Rua So Jos, 576
CPF: 045687158-98
NOME: Maria Rita Amaral
ENDEREO: Avenida Rui Barbosa, 234 apto. 31
CPF: 132876851-01

Observe o exemplo com dois registros cadastrados. A primeira ficha contm os dados
do Joo Carlos da Silva, enquanto que a segunda possui os dados da Maria Rita
Amaral.

Os componentes deste registro so identificados por meio do seus nomes, atribudos


aps a especificao do registro com o uso do operador ponto (.).

Sintaxe:

Declarao geral de registro:

registro = <identificador>
<componente> <tipo bsico>;
<componente> <tipo bsico>;
fim_registro;

onde:
registro uma palavra reservada;
<identificador> o nome do registro (segue as regras de nomenclatura);
<componente> o nome do componente que forma este registro;
<tipo bsico> o tipo de dado que ser armazenado em cada componente;

Vamos criar um registro para armazenar os trs componentes diferentes (SEXO, CPF,
PESO).

{ manipulao de registro }
Declaraes
registro = pessoa
inteiro CPF;
caracter SEXO;
real PESO;
fim_registro;
Incio
escreva ("Informe o seu CPF: ");
leia(cliente.CPF);
escreva ("Digite F para sexo feminino e M para masculino: ");
leia(cliente.SEXO);
escreva ("Informe o seu peso: ");
leia(cliente.PESO);
Fim

Supondo que este cadastro seja feito por uma empresa de publicidade, que esta
procurando alguns novos modelos. Ela no ira cadastrar somente um candidato a vaga
de modelo, mas todos os interessados, que podero ser vrios. Portanto ser criado um
vetor para este tipo de estrutura heterognea. Observe o exemplo a seguir que cria a

possibilidade de 1000 registros a serem armazenados na estrutura composta


homognea (vetor).

{ manipulao de vetor de registros }


Declaraes
tipo registro = PESSOA

{ criao de um novo tipo de dado }

inteiro CPF;
caracter SEXO;
real PESO;
fim_registro;
constante inteiro TODOS

1000; { quantidade mxima de registros }

PESSOA FICHA[TODOS];
inteiro AUX;
Incio
Para AUX de 0 at 999 passo 1 faa
escreva ("informe o seu CPF: ");
leia(FICHA[AUX].CPF);
escreva ("Digite F para sexo feminino e M para masculino: ");
leia(FICHA[AUX].SEXO);
escreva ("informe o seu peso: ");
leia(FICHA[AUX].PESO);
fim_para;
Fim

Este algoritmo permite o cadastramento de 1000 fichas com os componentes CPF,


SEXO e PESO, sendo cada um deles para pessoas diferentes. Essa estrutura
armazenar todos os 1000 registros, denominados FICHA, no algoritmo, sendo ela
homognea, pois cada um destes elementos do vetor do mesmo tipo de dado criado
no bloco de declaraes, ou seja, o registro criado anteriormente do tipo PESSOA.

ATIVIDADE DE FIXAO

No intuito de fixar estes novos contedos abordados na continuao deste mdulo


sobre estrutura de dados e verificar sua compreenso sobre o mesmo, so sugeridos
alguns exerccios de fixao para serem resolvidos. Clique sobre o diagrama que inicia
a lista de exerccio sobre estas novas estruturas de dados e acompanhe como esta seu
aprendizado at aqui.
AMBIENTE DE PROGRAMAO EM C - DEV-C++
Introduo

A Universidade Catlica de Braslia (UCB) passou a utilizar o compilador Dev-C++ a


partir do ano de 2003, aps a avaliao de algumas ferramentas free disponveis no
mercado, sendo esta a que melhor atendeu aos objetivos almejados com a
aprendizagem desejada aos seus estudantes dos cursos de informtica (Cincia da
Computao e Sistemas de Informao).

Esta ferramenta consiste de um ambiente grfico e intuitivo para o desenvolvimento de


programas usando a Linguagem de Programao Computacional C ou C++.

O incio da aprendizagem prtica, no maior ncleo temtico dos cursos de informtica


da UCB, comea com o uso desta ferramenta que contribui, significativamente, com o
avano de cada estudante sobre a aprendizagem de uma linguagem de programao.
Todos eles trabalham com o desenvolvimento procedural de programas computacionais
sobre o paradigma de Programao Estruturada.

Por se tratar de uma ferramenta free, o Dev-C++ pode ser conseguido, sem nenhum
nus financeiro, por meio da rede mundial de computadores (internet), podendo ser
instalado em qualquer equipamento de arquitetura e sistema operacional coerente com
as suas necessidades de instalao da ferramenta (arquitetura de equipamentos IBMPC com sistema operacional Windows).

Por esta facilidade, alm da eficincia e evoluo continua desta ferramenta, que a
equipe de professores da UCB decidiu utiliza-la no processo de ensino-aprendizagem
deste paradigma de programao, onde ainda possvel que todos os estudantes da
Universidade trabalhem com a mesma ferramenta usada no perodo de aula, assim
como em atividades de estudo e pesquisa fora de sala de aula ou mesmo da
Universidade Catlica.

Apesar da existncia de vrios caminhos de acesso e download desta ferramenta, os


professores da UCB sugerem que seja usado o site http://www.bloodshed.net por
motivos de segurana basicamente.

Acompanhe a seguir as informaes essenciais para o correto uso do Dev-C++ nos


laboratrios de informtica da UCB, assim como algumas dicas sobre o acesso e
instalao desta ferramenta em um outro computador pessoal que o estudante deseje
usar para estudo e/ou como equipamento de apoio a sua aprendizagem.

UTILIZAO DA FERRAMENTA NOS LABORATRIOS DA UCB

Em um computador do laboratrio de informtica da UCB, com o sistema operacional


Windows e a ferramenta Dev-C++ instalada, clique no boto Iniciar e procure a opo
Programas no menu que surgir a partir do boto Iniciar. Acione esta opo
(Programas) de menu e localize a opo Dev-C++. Entre as novas opes que
surgiram, a partir do menu Dev-C++, encontre uma nova opo Dev-C++ e a acione
novamente. Com isso o ambiente de programao Dev-C++ estar acionado e uma
nova janela dever aparecer em sua tela.

Os passos a seguir lhe encaminharam para a criao de um novo projeto e seu


respectivo programa fonte, por isso preste muita ateno e tenha cuidado na seleo

dos itens referenciados abaixo, pois a inicializao errada do ambiente provocar muitos
problemas at que se alcance o sucesso do programa desejado.

Iniciando um novo projeto


Aps aguardar a carga do ambiente de desenvolvimento Dev-C++ (Iniciar Programas
Dev-C++ Dev-C++), siga os passos a seguir para criao de um novo projeto:
1) Escolha a opo File (Arquivo), seguida da opo New (Novo) e Project (Projeto)
na barra de menu do Dev-C++;
2) Na janela New Project (Novo Projeto), que surgir em sua tela, escolha o cone
Aluno com um nico clique sobre ele (simplesmente selecione-o);
3) Na mesma janela selecione a opo C Project (Projeto em C) e escolha o item
Make Default Language (Use a Linguagem Padro);
4) Por fim, informe o nome do seu projeto no campo denominado Name (Nome), tendo
o cuidado de no inserir nenhum caracter com acento e nem espao(s) em branco;

5) Pressione o boto OK e a janela Create New Project (Novo Projeto) solicitar qual o
local onde este projeto dever ser criado e armazenado;

6) Aps selecionar o diretrio ou drive desejado pressione o boto Save (Salvar);

Neste momento ser criado um arquivo de projeto, com o nome descrito no campo
Name (Exer_1 na figura acima) e extenso DEV, no diretrio ou drive escolhido na
janela Create New Project.

Uma informao importante diz respeito ao diretrio de trabalho em todos os


laboratrios de informtica da UCB. Este diretrio, onde se poder criar, modificar e
apagar os arquivos, o C:\temp, onde os arquivos de projeto do Dev-C++, alm de
outros, devero ser criados e utilizados.

A seguir, o ambiente Dev-C++ apresentado e poder ser iniciada a elaborao do


programa fonte desejado.

Itens Importantes no Ambiente Dev-C++

No ambiente Dev-C++ importante reconhecer alguns itens, que sero melhor


explorados pelos professores no decorrer das aulas e contribuiro na correta
manipulao de seus recursos. Observe na figura anterior os itens destacados A, B, C,
D:

A barra de menu:
opes e recursos disponveis neste ambiente de desenvolvimento de programas
computacionais na Linguagem C e C++;
B barra de botes:
botes de acionamento rpido de alguns dos recursos do ambiente;
C navegador de objetos:
situado na parte esquerda da janela, apresenta todos os objetos (arquivos,
funes, procedimentos, outros) que podem ser apresentados na rea de edio
dos programas fontes a serem elaborados;

D editor de programas:
rea de desenvolvimento dos cdigos fontes na Linguagem C e C++.

No editor de programas o programador dever desenvolver os programas desejados,


sempre respeitando as caractersticas estudadas em sala de aula com seu professor.
Para isso ele dever escrever programas ou cdigos fontes na linguagem de
programao C ou C++. Essa escrita dever respeitar o modelo padro adotado pela
UCB no desenvolvimento de programas sobre o paradigma estruturado. A organizao
bsica deste padro apresentada automaticamente no editor de programas, quando
um novo projeto criado, e ela contribui com o desenvolvimento de bons programas,
que respeitam algumas regras de organizao e estrutura de cdigo no intuito do
desenvolvimento de bons cdigos (organizao, compreenso e legibilidade).

O editor de programas do Dev-C++ consiste em um editor de texto padro sobre o


conjunto de caracteres ASCII simples, sem tratamento na apresentao (negrito,
sublinhado, etc.). O editor de texto do Windows, chamado BLOCO DE NOTAS
(notepad), um bom exemplo para este tipo de editor, inclusive, os programas fontes
elaborados no editor de programas do Dev-C++ podem se abertos pelo BLOCO DE
NOTAS e vice-versa.

Configurando a ferramenta ou o Ambiente Dev-C++;

As ltimas verses do Dev-C++ possibilitam a configurao do ambiente na janela de


abertura da ferramenta, mas se a verso que voc possui no possibilita isso, ser
interessante voc selecionar a opo Tools (Ferramentas) na barra de menu, seguido
da opo Environment Options (Opes do Ambiente). Na janela que aparecer na

tela escolha a aba superior denominada Interface (Interface) e no campo Language


(Linguagem) selecione a opo Portugus(Brasil). Com isso, o ambiente Dev-C++
estar todo em Portugus, o que facilitar bastante o seu uso neste momento inicial.

Algumas outras configuraes podem facilitar a edio dos cdigos fontes no ambiente
Dev-C++. Observe a seguir algumas delas:

Inserir Numerao de Linha: coloca um nmero sequncial nas linhas escritas no


editor de programas, facilitando a localizao dos erros apontados pelo
compilador no seu cdigo fonte. Para isso, selecione na barra de menu a opo
Ferramentas, seguida de Opes do Editor e clique na aba superior Display
(Tela de apresentao). Nas opes e campos desta janela voc poder
configurar a aparncia do ambiente Dev, como por exemplo sua fonte, porm o
interesse desta dica esta na seleo da caixa de verificao Nmero das Linhas
que dever ser selecionada (deixa-la como marcada). Para finalizar pressione o
boto OK da janela Opes do Editor.

OBSERVAO IMPORTANTE
No selecione a caixa de verificao Iniciar em Zero porque as instrues do
compilador Dev-C++ so feitas sobre as linhas existentes no cdigo fonte a partir
de um (primeira linha existente). Caso esta caixa seja selecionada a orientao
das linhas na tela ser iniciada em zero, mas o compilado continuar fornecendo
orientaes a partir de um, o que pode atrapalhar a sua utilizao.

Destaques dos Elementos de Blocos: esta opo possibilita a rpida e fcil


identificao dos smbolos de incio e fim de bloco, que usam chaves, parnteses
e colchetes em sua correta sintaxe. Para habilitar este recurso deve ser
acionada a opo Ferramentas, na barra de menu, e em seguida Opes do
Editor. Na aba ou guia Geral da nova janela Opes do Editor dever ser
selecionada a caixa de verificao Destacar Chaves e Parnteses. Ao habilitar
esta opo, a simples seleo da chave, que indica o incio de um bloco de

instruo no programa fonte, ser destacada juntamente com a respectiva chave


que termina este mesmo bloco.
A janela Opes do Editor, na aba Geral, possui vrias opes de configurao
sobre a forma de apresentao do ambiente Dev-C++, porm no incio deste
material de estudo s sero fornecidas estas duas dicas de grande utilidade na
elaborao de bons programas. As demais opes podem ser conhecidas
mediante pesquisa e teste de cada uma delas.

Elaborando o primeiro programa!!!

A elaborao do seu primeiro programa, utilizando a ferramenta Dev-C++, deve ser


iniciada com a carga do ambiente desta ferramenta, conforme o tpico denominado
Iniciando um novo projeto, apresentado anteriormente neste material.

A primeira parte a ser elaborada a Sntese, que consiste na sntese do problema a ser
solucionado pelo seu programa. Observe a sntese descrita abaixo, respeitando os
padres de desenvolvimento da UCB (template aluno), no desenvolvimento do primeiro
programa neste novo ambiente:

// NOME DO ALUNO: Jos Carlos Silva


/*
Sntese
Objetivo: Fazer uma saudao como primeiro programa
Entrada: nenhuma entrada
Sada:
mensagem de desenvolvimento do primeiro programa
*/
A seguir so includas as bibliotecas necessrias na execuo deste primeiro programa,
sendo elas adicionadas ao seu cdigo fonte por meio do acionamento do prprocessador do computador.

#include<stdio.h> // biblioteca com funes padres de entrada/sada


#include<conio.h> // biblioteca com funes de manipulao de valores
Na elaborao de um programa na linguagem C sempre dever existir uma funo,
sendo ela a funo principal. por meio dela que tudo executado em um programa
nesta linguagem, logo, se for desenvolvido um programa em C ele consistir ao menos
nesta funo, a funo principal, denominada sempre main. Observe abaixo a
descrio do padro aluno disponvel nos laboratrio de informtica da UCB.

int main(void)
{
// DECLARAES

// INSTRUES

getch( );
return 0;

Acompanhe a elaborao do primeiro programa no Dev-C++ respeitando o padro de


desenvolvimento de programas da rea de programao da Universidade.

// NOME DO ALUNO: Jos Carlos Silva


/*
Sntese
Objetivo: Fazer uma saudao como primeiro programa
Entrada: nenhuma entrada
Sada:
mensagem de desenvolvimento do primeiro programa
*/
#include<stdio.h>
#include<conio.h>
int main(void)
{
// DECLARAES
// INSTRUES
printf("Meu primeiro programa no Dev-C++.");
getch( );
return 0;
}

Agora que j esta elaborado o primeiro programa fonte na linguagem C ser necessrio
verificar se ele esta correto ou existe algum erro na sua elaborao. Para isso ser
acionado o compilador, que faz a traduo do programa fonte criado em um programa
objeto, ou seja, na traduo para linguagem que o computador realmente compreende linguagem de mquina ou binria. A seguir, se o compilador no encontrar nenhum
erro, ele permitir que seja realizada a linkedio do programa objeto para que o mesmo
possa ser transformado em um programa executvel e assim poder ser executado pelo
computador que est em uso e possui o ambiente Dev-C++ instalado ou no, no caso
de ser usado o programa executvel.

Para realizar estas tradues e transformaes o ambiente do Dev-C oferece algumas


opes de acionamento do compilador, assim como a gerao do programa executvel.
Observe a seguir algumas destas opes:
por meio da barra de menu:
existe na barra de menu vrias opes de acionamento do compilador, assim
como da execuo do programa compilado, mas neste momento inicial sero
apresentados somente as opes essenciais para compilao (traduo) e
execuo do programa fonte desenvolvido.
Acione na barra de menu a opo Executar e novas opes aparecero no
menu. Entre elas observe a primeira (Compilar), a segunda (Executar) e a
quarta (Compilar & Executar). Estas trs opes so as opes essenciais
que sero utilizadas na manipulao correta deste ambiente para gerao de
programas executveis na linguagem C.
Compilar: esta opo aciona o compilador para verificao e anlise do
programa fonte que ser traduzido para a linguagem de mquina. Para seu
acionamento, simplesmente selecione a primeira opo do menu Executar.
Surgir uma nova janela, denominada Salvar Arquivo, que solicita que o
arquivo fonte seja salvo para depois ser traduzido. Nesta nova janela deve
ser observado que o arquivo a ser salvo o arquivo fonte e no o projeto que
j havia sido salvo anteriormente (como pode ser revisto no tpico Iniciando
um novo projeto). Para isso proceda da seguinte maneira:
1- identifique o local de salvamento, normalmente junto ao projeto (C:/temp);
2- coloque no campo Nome do arquivo o mesmo nome do projeto,
respeitando as mesmas restries de acentuao e espaos;
3- confirme no campo Salvar como tipo se a opo selecionada C source
(*.c), caso no seja altere a seleo para esta opo para que seu
programa seja analisado como um programa em C;
4- por fim pressione o boto Salvar e aguarde a compilao (traduo).
Aps a compilao duas situaes podem acontecer: o programa fonte pode
ter sido compilado com xito ou no. Suponha que a instruo printf,
existente no seu primeiro programa, no tenha o ponto e vrgula no final. O
compilador no conseguir traduzir o seu programa e lhe informar o motivo
pelo qual ele no esta compreendendo suas instrues no fonte. Com isso o
programa fonte no foi compilado (traduzido) e necessita de correo para
que isso acontea.

por meio da barra de botes:


outra opo para execuo dos trs itens abordados no sub-tpico por meio
da barra de menu tambm podem ser acionados, rapidamente, atravs de
trs botes disponveis na barra de botes.

As operaes acionadas pela barra de menu ou pela barra de botes so as


mesmas, sendo somente o caminho de acionamento das diferentes de forma
a agilizar o uso mais coerente ao usurio do ambiente.

por meio de teclas e atalho:


Outra forma de acionamento rpido para as trs opes de compilao,
abordadas anteriormente, so as teclas de atalho, onde por meio do
pressionamento de uma ou mais teclas juntas uma das respectivas opes
ser acionada. Observe a combinao de teclas para acionamento de um
destes trs itens de compilao e execuo:
Compilar:

pressione simultaneamente as teclas

Ctrl + F9
e a opo Compilar ser acionada imediatamente.
Executar:

pressione simultaneamente as teclas

Ctrl + F10
e a opo Executar ser acionada imediatamente.
Compilar & Executar:

pressione somente a tecla

F9
e a opo Compilar & Executar ser acionada.
As opes das teclas de atalho consistem no caminho mais rpido para o acionamento
de um destes itens de compilao e execuo, mas para serem utilizadas precisam ser
memorizadas pelo(s) programador(es). Enquanto isso no acontece, pode ser usado
qualquer uma das outras duas opes (menu ou botes) abordadas anteriormente.
Acompanhe o resultado na tela de um computador, caso o primeiro programa no
possua nenhum erro e o compilador o traduza, gere seu programa objeto e por fim o
executvel acionando-o para que seja visualizado o seu resultado final.

Agora, por meio destas instrues fundamentais na manipulao deste ambiente, ser
possvel o desenvolvimento de outros programas mais complexos, assim como o
estudo, pesquisa e teste das outras opes disponveis no Dev-C++.

Um item relevante no desenvolvimento de programas para uma ao segura durante


este processo de elaborao o continuo armazenamento do programa fonte atual, ou
seja, salve sempre o cdigo que esta sendo desenvolvido, pois o trabalho de
desenvolvimento pode contribuir com alguns problemas e deficincias na manipulao
equivocado de recursos computacionais, chegando at ao travamento do ambiente,
assim como do computador completamente. As opes de salvamento do programa
so:

INSTALAO E CONFIGURAO DO Dev-C++ EM OUTRAS MQUINAS

A instalao e configurao da ferramenta Dev-C++ em outras mquinas (ou


computadores pessoais) precisa atender, primeiramente, a algumas caractersticas
essenciais do equipamento envolvido e seu sistema operacional. Em seguida devem
ser configurados alguns itens do ambiente Dev-C++ para que este possa ser utilizado
conforme este ambiente de estudo trabalha com seus aprendizes.

Alm destas preocupaes outro aspecto fundamental para a correta configurao do


ambiente a verso da ferramenta que foi encontrada na INTERNET e realizado o
download. Por estes motivos que fica, por enquanto, a orientao de contato com o
seu professor para que o mesmo detalhe todos os cuidados referente a instalao e
configurao correta da verso do ambiente que estar sendo usada no semestre
corrente.

ATIVIDADE DE FIXAO

No intuito de fixar estes novos contedos abordados neste mdulo e verificar sua
compreenso sobre o mesmo sugerido alguns exerccios de fixao para serem
resolvidos. Clique sobre o diagrama e inicie a lista de exerccio sobre os contedos
estudados. Boa atividade de fixao!!
APLICAO DOS CONCEITOS FUNDAMENTAIS
Histrico da Linguagem de Programao C

A linguagem de programao denominada C foi criada em 1972 por Dennis Ritchie no


centro de Pesquisas da Bell Laboratories. Sua primeira utilizao marcante foi a
reescrita do Sistema Operacional UNIX, que at ento era escrito na linguagem
Assembly.

Em meados da dcada de 70 o sistema operacional UNIX deixou o laboratrio para ser


utilizado nas universidades. Foi o suficiente para que o sucesso da linguagem atingisse
grandes propores na rea de informtica. Por volta do ano de 1980, j existiam vrias
verses de compiladores C disponveis no mercado. Com isso a linguagem C no
estava mais restritas somente ao ambiente operacional UNIX, mas j era utilizado por
outros sistemas operacionais.

A linguagem C uma ferramenta de propsito geral, constituindo-se ainda em uma


ferramenta poderosa no desenvolvimento de programas em diversos paradigmas de
programao. No entanto mais utilizada na construo de compiladores, analisadores
lxicos, bancos de dados, editores de texto, entre outras aplicaes. Veja a seguir
alguns exemplos de aplicaes desenvolvidas com esta linguagem:

Sistema

UNIX

Operacional
Banco de dados

dBase III, IV e Access

Planilhas

Excel

eletrnicas
Aplicaes

Efeitos Especiais em filmes como: Star Trek e Star War

grficas

A Linguagem C de alto nvel, pois seus programas so elaborados por meio de


instrues prximas a linguagem de comunicao usada pelo ser humano (comunicao
natural), mas pode ser considerada de nvel intermedirio. Essa classificao tambm
considera a possibilidade que esta linguagem tem de efetuar a codificao mais prxima
da linguagem de mquina ou binria (baixo nvel), otimizando alguns programas que
precisam de manipulaes e acessos muito especficos e dinmicos. Observe a seguir
as indicaes relativas ao nvel de classificao para algumas linguagens:

BAIXO NIVEL

ALTO NIVEL

CLARESA PARA O SER HUMANO

VELOCIDADE DO PROGRAMA

Assembler

Cobol
Basic

Pascal

Ada
Modula-2

Linguagem Case Sensitive

A Linguagem C Case Sensitive, ou seja, as letras maisculas e minsculas so


manipuladas como smbolos completamente diferentes. Suponha a necessidade de
armazenamento da idade, em anos, de uma pessoa. Para isso ser necessrio criar
uma varivel no bloco de declaraes deste programa, sendo nele includa a seguinte
instruo:
inteiro IDADE;

Por meio desta declarao foi criada uma nica varivel, com o tipo de dado inteiro, que
recebeu o nome de identificao IDADE. Esta varivel seria completamente diferente
de outra que se chamasse idade ou iDaDe, pois as letras que compem o seu nome
esto diferentemente definidas em letras maisculas e minsculas. Sendo assim, estas
trs variveis poderiam ser declaradas em um mesmo programa, no ocasionando
nenhum tipo de erro de compilao, pois elas so completamente diferentes. Mas este
tipo de declarao no aconselhada porque pode dificultar a compreenso do
programador sobre a ao realizada pelo cdigo proposto.
inteiro IDADE, idade, iDaDe;

As palavras reservadas nesta linguagem so escritas sempre em letras minsculas, o


que pode ocasionar erros, caso este cuidado no seja observado. Por exemplo, a
declarao da varivel IDADE no seria possvel porque o tipo de dado especificado
no existe.
INTEIRO IDADE;
O tipo de dado inteiro descrito por meio da palavra reservada inteiro, descrita
corretamente em minsculo, sendo a grafia proposta no exemplo anterior muito diferente
da reconhecida por esta linguagem.

Palavras Reservadas

Uma palavra reservada, em uma linguagem de programao, j possui um significado


definido na linguagem, no podendo ser utilizada para criao de outros objetos, tais
como variveis, constantes ou subprogramas, pois no permitir a correta execuo da
tarefa solicitada ao computador.

A Linguagem C possui 32 palavras reservadas, de acordo com o padro definido pela


American National Standards Institute (ANSI). Acompanhe a grafia correta de cada uma
delas na relao apresentada a seguir :

auto
break
case
char
const
continue
defaut
do

double
else
enum
extern
float
for
goto
if

int
long
register
return
short
signed
sizeof
static

struct
switch
typedef
union
unsigned
void
volatile
while

O Corpo Principal dos Programa em C

Um programa em C formado por no mnimo um subprograma, sendo este obrigatrio


para a criao de um programa. Este subprograma consiste de uma funo especifica,
sendo a nica a possuir um nome j definido - main (principal). por meio dela que um
programa executado, e sua ausncia no caracteriza a existncia de um programa em
C, mas um cdigo escrito na linguagem C que no pode ser executado. Para a
execuo do mesmo necessria a elaborao da funo principal.

Outros subprogramas podem ser desenvolvidos pelo programador, atendendo as


necessidades que este tenha no desenvolvimento do seu programa, mas entre estes
subprogramas um ser a funo principal. Somente ela possui um nome j definido
(main), tendo todos os outros subprogramas seus nomes especificados pelo
programador, respeitando sempre as regras de fornecimento de nomes as
identificadores.

Comentrios

O utilizao de comentrios na elaborao de programas permite uma


compreenso mais rpida das tarefas realizadas pelo programa, principalmente quando
so desenvolvidos cdigos extensos. Em C, os comentrios comeam com /* e
terminam com */, mantendo-se todas as linhas existentes entre este incio(/*) e fim (*\)

de comentrio como informaes que no sero usadas pelo compilador, mas que
auxiliam na correta compreenso do programador. O uso de // tambm insere um
comentrio no programa, sendo este iniciado a partir do cdigo (//) e se estendendo at
o final da linha onde ele se encontra, por exemplo:

/* SNTESE
Objetivo: saudar o usurio
Entrada: nenhuma
Sada:
mensagem de saudao
*/
#include <stdio.h>

// instruo da linguagem C

void main (void)


{
// DECLARAES

// instruo da linguagem C

// INSTRUES
printf(Ol usurio!!!);

// instruo da linguagem C

Incio de blocos
Assim como na elaborao do algoritmo, os programas em C tambm so
desenvolvidos por meio de alguns blocos lgicos principais (sntese, declaraes,
instrues), sendo todos eles destinados a uma organizao coerente na codificao
desejada. Respeitando esta organizao ser elaborado um cdigo eficiente por um
programador organizado que no tem dificuldades na manipulao e manuteno dos
seus programas.

SNTESE:
Este bloco representa um resumo lgico do que o programa dever fazer. A
confeco do mesmo identifica trs informaes relevantes que sintetizam as
atividades do programa, sendo elas: OBJETIVO (objetivo que este programa atende);

ENTRADA (as entradas de dados necessrias para atender este objetivo); SADA (os
dados de sada aps o processamento das entradas).
A construo da sntese deve ser cuidadosa, pois ela exatamente o algoritmo, ou
melhor, a sntese dele.

DECLARAES:
A criao dos recursos manipulados pelo programa ser efetuada neste bloco e
contribuir com a organizao no desenvolvimento do programa, pois facilitar a
compreenso no uso de cada recurso. Os recursos aqui citados consistem das
variveis, constantes e subprogramas.

INSTRUES:
Neste bloco so descritas as aes a serem realizadas por um programa que busca
atingir o objetivo almejado pelo programador que o elaborou. As instrues ou
comandos esto neste bloco.
Na construo dos algoritmos as palavras reservadas incio e fim representam o
comeo e o trmino deste bloco. Cada instruo tambm encerrada por meio de
uma pontuao especfica, sendo normalmente utilizado o ponto e vrgula (;).
O desenvolvimento dos programas em C possuem as mesmas regras, porm a grafia
ou os smbolos so diferentes. O bloco iniciado pelo smbolo de abertura de chaves
({) e encerrado pelo fechamento da mesma (}), enquanto cada instruo terminada
tambm pelo ponto e vrgula (;).

Observe o exemplo a seguir:

/* SNTESE
Objetivo: saudar o usurio
Entrada: nenhuma
Sada:
mensagem de saudao

*/
#include <stdio.h>

// instruo da linguagem C

void main (void)


{
// DECLARAES

// instruo da linguagem C

// INSTRUES
printf(Ol usurio!!!);
// instrues da linguagem C
printf(Seja bem vindo ao Curso de C);
}

Tipos de dados
Ao se declarar um objeto (constante, varivel, funo) necessrio identificar qual o tipo
de informao que ele manipular , pois atravs dessa declarao que o computador
poder verificar a existncia e a disponibilidade de espao suficiente para que o
programa possa ser executado com sucesso.
A Linguagem C possui cinco tipos de dados escalares, sendo eles determinantes nas possibilidades de manipulao de
informaes efetuadas pelo computador que estiver executando o programa em C.

Tipo
Caracter
Inteiro
Real
No definido

Sintaxe em C
char
int
float
double
void

Tamanho (byte)
1
2
4
8
0

Faixa
0 a 255
-32768 a 32767
3.4E-38 a 3.4E38
1.7E-308 a 1.7E308
sem valor

Observe a correta sintaxe na criao de algumas variveis e constantes em C.

const int TAXA = 15;


char LETRA;

// cria uma constante do tipo inteiro.

// cria a varivel LETRA que armazena um nico caracter

int VALOR;

/* cria uma varivel inteira com certa capacidade de


armazenamento */
float SALARIO; /*varivel real com certa preciso (3.4*10-38 3.4*1038) */
double PI; /* varivel real com grande preciso (1.7*10-308 1.7*10308 ) */

Modificadores dos Tipos de Dados

A mudana nas propriedades relacionadas ao armazenamento de dados em C, podem


ocorrer por meio dos modificadores. Eles so aplicados a alguns dos tipos de dados
escalares da linguagem. Na relao a seguir so apresentados os quatro modificadores
existentes na Linguagem C padro ANSI.

long
short
signed
unsigned
Os modificadores no podem ser aplicados a qualquer tipo, por exemplo: em float no
se pode aplicar nenhum deles (no tem efeito algum), enquanto que o int aceita
qualquer um dos quatro.

A uso dos modificadores long e short contribuem com o aumento ou reduo do


espao de armazenamento do dado na memria. O unsigned permite a manipulao
dos valores sem sinal, ou seja, s os valores positivos.

Criao ou Declarao de Varivel e Constantes

As variveis e constantes em C podem possuir qualquer nome desejado pelo


programador, desde que estes nomes respeitem as regras de criao dos
identificadores, como esclarecido anteriormente.

Para se utilizar variveis ou constantes em C necessria a declarao de cada uma


delas, respeitando as regras de organizao e sintaxe da linguagem. A forma geral de
declarao destes dois recursos so apresentadas abaixo:

Forma geral para varivel:


<tipo de dado> <nome da varivel> ;

Forma Geral para constante


const <tipo de dado> <nome da constante> = <valor atribudo a constante>;

No algoritmo a seguir, veja as instrues que criam uma constante inteira e duas
variveis (uma real e outra caracter).

Sntese
Objetivo: declarar uma constante e duas variveis
Entrada: nenhuma
Sada:
nenhuma
Declaraes
inteiro numero;
real money;
Incio
{ sem instrues }
Fim

Acompanhe a traduo deste algoritmo para a linguagem computacional denominada C:

/* SNTESE
Objetivo: declarar uma constante e duas variveis

Entrada: nenhuma
Sada:
nenhuma
*/
#include <stdio.h>

// instruo da linguagem C

void main (void)

// instruo da linguagem C

{
// DECLARAES
const int TUDO = 100; // declarao da constante inteira TUDO
char LETRA;

// declarao da varivel caracter chamada LETRA

float SALARIO;

// declarao de uma varivel do tipo real

// INSTRUES
/* instrues a serem executadas pelo programa */
}

ESTRUTURA DE UM PROGRAMA

Um programa em C possui caractersticas que devem ser obedecidas, pois um erro de


sintaxe ou semntica resultam na falha de cumprimento do objetivo almejado pelo
programa.

Na continuao da aprendizagem sobre a programao estruturada, todos os cdigos,


ou programas, em C devero ser elaborados respeitando a estrutura de
desenvolvimento de programas em trs grandes blocos, sendo eles:
SNTESE;
DECLARAES;
INSTRUES.

O exemplo a seguir mostra a organizao destas estruturas em um algoritmo simples,


descrito respeitando as regras do portugus estruturado.

Sntese

objetivo: exemplificar a estrutura padro de um programa escrito em C


entrada: nenhuma
sada: mensagem de sucesso no primeiro programa
Declaraes
Incio
escreva(Esse o meu primeiro programa!!);
Fim

A transformao deste algoritmo em um programa em C apresentado na sequncia.


Observe que as estruturas se mantm, apesar de conterem alguns simples detalhes
importantes que as diferenciam.

/*SNTESE
objetivo: exemplificar a estrutura padro de um programa escrito em C
entrada: nenhuma
sada: mensagem de sucesso no primeiro programa
*/
#include <stdio.h> // incluso da biblioteca padro de entrada e sada
void main (void)

// inicio do programa - funo main()

// abertura do bloco principal da funo main()


// DECLARAES
/* declaraes das variveis e constantes */
// INSTRUES
printf(Esse o meu primeiro programa!!); // funo de escrita na tela
getch();

// fora uma parada para leitura


// final da funo main(), logo fim do programa

Com a elaborao do algoritmo, seguido de sua traduo para a linguagem C,


possvel identificar algumas descries diferentes que so muito importantes para o
programa em C. Acompanhe com ateno alguns cuidados importantes na elaborao
de um programa fonte nesta linguagem:

No incio do programa o pr-processador deve ser acionado, por meio do cdigo


#, para incluir alguma biblioteca que seja necessria ao cdigo, ou programa
proposto;

O bloco de instruo iniciado pela abertura de uma chave ({ - Incio) e


encerrado pelo fechamento da chave ( } - Fim);

Um programa em C sempre ter ao menos um subprograma, a funo main, pois


a partir dele que tudo executado;

Toda instruo termina com um ponto e vrgula (;);

Os comentrios a serem inseridos no programa fonte so antecedidos pelos


cdigos (// - comentrio at o final da linha) ou entre /* e*/ que inseri um
comentrios a partir do /* at o seu final no smbolo */.

No exemplo anterior foi possvel acompanhar a elaborao de um algoritmo e sua


traduo para a linguagem C, onde ambos esto respeitando as regras de sinttica,
semntica e a organizao na descrio do programa.

INTRODUO BSICA AS ENTRADAS E SADAS

A expresso ENTRADA significa, para a rea de programao, todos os dados que


sero informados ao computador atravs dos dispositivos de entrada acoplados a ele
(teclado, mouse, scanner, etc.). Existe porm um dispositivo padro para a leitura de
dados na Linguagem C, o teclado, que sempre acionado para ler valor(es) quando no
existe nenhuma especificao. A SADA representa todo dado que passado do
computador para o usurio por meio dos respectivos dispositivos (monitor, impressora,
caixas acsticas, discos, etc.). Da mesma forma, esta linguagem tambm possui um
dispositivo padro de sada, sendo ele o monitor.

Quando o usurio digita algum dado no teclado do


computador, ele est fornecendo informaes para o
mesmo, atravs do dispositivo de entrada padro.
Com isso o computador poder usar estes dados
para processar as informaes desejadas,
apresentando os resultados obtidos ao usurio.

Esta apresentao acontecer atravs de um


dispositivo de sada, podendo ser o prprio monitor
de vdeo, dispositivo padro de sada em C, caso
nenhum outro seja especificado pelo usurio.

Conhecendo a importncia da comunicao do computador com seus usurios, assim


como dos usurios para com o computador, ser esclarecida a seguir as instrues em
C que possibilitam a entrada e sada de dados no computador.

Instruo de Sada

A primeira instruo a ser apresentada consiste de uma funo, ou seja, de um


subprograma existente na biblioteca stdio.h existente em todos os compiladores da
Linguagem C que respeitam o padro ANSI.

# Funo printf()

Esta funo responsvel pela apresentao de dados no dispositivo padro de sada


da Linguagem C. Por se tratar de uma funo, esta instruo no uma palavra

reservada da linguagem, mas sua utilizao como nome de um outro recurso no


programa (varivel, constante, subprograma) pode dificultar a compreenso e
manipulao do mesmo. A representao da forma geral desta funo mostrada a
seguir:

printf("<expresso de controle>", lista de argumentos);

A expresso de controle obrigatria e sempre estar entre aspas ("). Ela controla tudo
que ser apresentado ao usurio, usando de cdigos especiais para apresentar dados
de qualquer tipo, alm de algumas orientados sobre o posicionamento da informao na
tela. Para mostrar dados de qualquer tipo so utilizados os cdigos precedidos do
smbolo percentual (%), enquanto que as orientaes na tela tem um cdigo com o
precedente com a barra invertida (\).

Na expresso de controle so inseridos os cdigos correspondentes a apresentao


desejada, consistindo assim na mscara que controlar a apresentao das
informaes ao usurio. Nesta mascara so definidos os tipos de dados a serem
apresentados, alm de qual a posio na expresso de controle que eles sero
mostrados no monitor.

Cada cdigo % deve referenciar um valor ou recurso (varivel, constante, subprograma)


especificado na lista de argumentos do printf. Esta lista iniciada aps a expresso de
controle, sendo separada por vrgula (,). A vrgula tambm separa os diferentes
elementos existentes nessa lista que so correspondentes a cada cdigo percentual
existente na expresso de controle..

Existem vrios cdigos % que referem-se a diferentes tipos de dados que podem ser
manipulados, mas os relacionados a seguir sero suficientes para a aprendizagem
inicial nesta linguagem de programao.

Cdigo
%d
%f
%c
%s
%o
%x
%lf
%%

Significado
Inteiro
Real (float)
Caractere
String
Octal
Hexadecimal
Real grande (double)
Mostra um %

A seguir, observe alguns exemplos que usam esta funo de sada:

printf(Testar); // apresenta somente a string da expresso de controle


printf(Tem %d valores,VALOR); // apresenta o valor inteiro na posio %d
printf(Valor = %f e o caracter de sexo de uma pessoa %c, 23.5, M);
printf(%s legal,Maria); // Apresenta o nome na posio do %

# Funo scanf()

Esta funo faz a leitura dos dados informados pelo usurio. Ela possui a mesma
organizao da printf, mas fazendo a leitura dos dados, por isso sua manipulao ocorre
sobre os dispositivos de entrada de dados, sendo o teclado acionado por esta funo.
Observe a representao da forma geral desta funo:

scanf("<expresso de controle>", lista de argumentos);

Observe os exemplos de leitura de dados do usurio.


scanf(%d,&NUMERO); //armazena um valor inteiro no endereo de NUMERO
scanf(%f%c,&VALOR, &SEXO); // armazena um valor real e outro caracter

A leitura de um dado deve ser armazenada em uma varivel, pois o valor informado
poder ser usado na realizao de algum processamento do programa. Para que ele
fique disponvel para o programa necessrio, primeiro, a declarao da varivel, que
deve ter o tipo de dado coerente com a leitura desejada.

A leitura do dado deve ser armazenada no endereo de memria que o computador


alocou para a varivel declarada. Por isso o operador & utilizado nesta funo,
armazenando o valor informado pelo usurio no correto endereo de memria onde tal
varivel foi criada pelo computador.

Anlise o que algoritmo a seguir faz.

Sntese
objetivo: ler e escrever dados
entrada: uma idade, um salrio e a letra inicial do sexo de uma pessoa
sada: a idade, o salrio e o sexo informado pelo usurio
Declarao
inteiro IDADE;
real SALARIO;
caractere SEXO;
Inicio
escreva(Informe a idade: );
leia(NUMERO);
escreva(Informe o salrio: );
leia(SALARIO);
escreva(Informe M para masculino ou F para feminino: );
leia(SEXO);
escreva(Sua idade = , IDADE, e seu salrio = ,SALARIO);
escreva(A letra inicial do seu sexo = ,SEXO);
Fim

Agora, observa a traduo do algoritmo em um programa em C.

/*SNTESE
objetivo: ler e escrever dados
entrada: uma idade, um salrio e a letra inicial do sexo de uma pessoa
sada: a idade, o salrio e o sexo informado pelo usurio
*/
#include <stdio.h>
#include <conio.h>
void main(void)
{
// DECLARAES
int IDADE;
float SALARIO;
char SEXO;
// INSTRUES
printf("Informe a idade: ");
scanf("%d",&IDADE);
printf("Informe o salrio: ");
scanf("%f",&SALARIO);
printf("Informe M para masculino ou F para feminino: ");
scanf("%c",&SEXO);
printf("\nSua idade = %d e seu salrio = %f ", IDADE, SALARIO);
printf("\nA letra inicial do seu sexo = %c,SEXO);
getch();
}

As duas ltimas instrues printf possuem um cdigo de barra invertida, que controla o
posicionamento na tela. Especificamente o cdigo \n leva o cursor para a prxima linha.
Este cursor identifica a posio onde sero apresentados os valores de sada
desejados.

# Funo getche()

Esta funo faz a leitura imediata de um caractere do teclado, no utilizando a memria


temporria (buffer) para armazena-lo. Ela permite ainda que o caractere pressionado
seja mostrado na tela. Veja no exemplo a seguir a leitura de um caractere por meio
desta funo, sendo ele armazenado na varivel LETRA.

void main ()
{
// DECLARAES
char LETRA;
// INSTRUES
LETRA = getche();

// incio do corpo da funo principal

// retorna o valor lido e o atribui a LETRA

# Funo getch()

Similar a funo getche(), esta funo tambm l um caractere do teclado, sem usar o
buffer, mas ela no permiti a sua apresentao no dispositivo de sada padro (monitor).

void main ()
{
// DECLARAES
char TECLA;
// INSTRUES
TECLA = getch();
}

// incio do corpo da funo principal

// retorna o valor lido e o atribui a TECLA

# Funo getchar()

A leitura de um nico caractere tambm realizada por esta funo, mas ela usa o
buffer para efetuar esta leitura, sendo necessrio pressionar a tecla ENTER aps digitar
a tecla desejada. A tecla digita permanece na memria temporria (buffer) at que o
ENTER seja pressionado, o que solicitar ao computador a copia dos dados do buffer
para a memria principal, memria esta que o computador utiliza para manipular os
dados enquanto so processados. Observe a sintaxe similar da getchar() com as
outras funes que fazem a leitura de um nico caractere.

void main ()
{
// DECLARAES
char TECLA;

// incio do corpo da funo principal

// INSTRUES
TECLA = getchar(); /* retorna o valor lido na varivel TECLA
usando o buffer */
}

Operadores Lgicos e Relacionais


Os operadores relacionais so usados para identificar o relacionamento existente entre
dados, contribuindo muito com o processamento a ser efetuado por um programa.

O resultado da aplicao de um operador relacional sempre ser lgico, ou seja,


VERDADEIRO ou FALSO.

Na Linguagem C esses operadores respeitam a sintaxe apresentada na tabela a seguir:

Operador em Algoritmo

Operador em C

Significado da Operao

>

>

Maior do que

>=

>=

Maior ou igual a

<

<

Menor do que

<=

<=

Menor ou igual a

==

Igual a

<>

!=

Diferente de

Observe a seguir alguns exemplos na aplicao dos operadores relacionais.

Exemplo em Algoritmo

Sintaxe do exemplo em C

VALOR = 0 // verifica se VALOR igual a zero

VALOR == 0

MAX > 1 // verifica se MAX maior que um

MAX > 1

LETRA <> "A" // verifica se LETRA diferente de "A"

LETRA != 'A'

No terceiro exemplo (LETRA <> "A") esta se comparando um caractere com o contedo
da varivel LETRA, que tambm deve ser do tipo caractere. Porm a transformao
deste exemplo para a operao relacional respectiva em C usa o apostrofe aos invs
das aspas do algoritmo. A identificao de um nico caractere em C feita por
apostrofe (aspas simples), enquanto que as aspas (aspas duplas) so aplicadas
somente a um conjunto de caracteres (string).

Os operadores lgicos de conjuno (E), disjuno (OU) e negao (NO) tambm


possuem uma sintaxe diferente na Linguagem C. Observe na relao a seguir a sintaxe
de cada um deles que permitem a elaborao de expresses relacionais mais
complexas e abrangentes.

Operador Lgico em Algoritmo

Operador Lgico em C

&&

OU

||

NO

Acompanhe na sequencia a reviso das operaes lgicas efetuadas sobre as tabelas


verdades representadas a seguir. Suponha que os valores atribudos as variveis A e B
sejam os representados por V (verdadeiro) e F (falso).
Operador E Lgico em C

A
V
V
F
F

B
V
F
V
F

A && B
V
F
F
F

Operador OU Lgico em C

A
V
V
F
F

B
V
F
V
F

A || B
V
V
V
F

Operador
NO Lgico
em C

A
V
F

!A
F
V

O exemplo a seguir mostra as operaes relacionais na expresso proposta e seu


resultado.

((5 > 5) || ((2 != 3) && (1 < 3))) => o resultado desta expresso Verdadeiro

Sempre deve haver cuidado com a anlise da expresso proposta, pois os parnteses
interferem diretamente no resultado final, modificam a ordem da sequencia alcanada
por cada expresso, pois eles alteram a precedncia das operaes (prioridades), por
exemplo:

3 + 5 * 2 = 13 mas com o uso dos parnteses pode-se ter que (3+5) * 2 = 16

Operador de atribuio

O operador de atribuio utilizado para atribuir um valor a uma varivel ou constante,


somente na sua declarao, pois no decorrer do programa a constante no recebe
nenhum outro valor. Este operador sempre armazena o valor, ou o resultado da
expresso, que est a direita do smbolo de atribuio (um sinal igual = ), armazenando
este valor, ou resultado da expresso, na varivel que est a sua esquerda.

Veja a diferena existente na sintaxe usado pelo algoritmo e sua respectiva traduo
para a Linguagem C:

Linguagem C

Algoritmo
VALOR

50;

Operadores Aritmticos

VALOR = 50;

Os operadores aritmticos em C possuem a sua sintaxe especificada por meio dos


smbolos identificados a seguir:

SMBOLO DO OPERADOR

+
*
/
%

OPERAO

Adio
Subtrao
Multiplicao
Diviso
Mdulo (resto da diviso de inteiros)

A operao de diviso de inteiros (div do algoritmo) em C acontece sempre que dois


valores inteiros so divididos (/), como pode ser visto na comparao a seguir:

5/2 =2

enquanto que

5.0 / 2 = 2.5

O resultado destas operaes so apresentadas pela linguagem C, quando forem


solicitadas dessa forma. Por isso deve ter cuidado com as operaes de diviso a
serem solicitadas no programa, pois o resultado sempre estar relacionado a sintaxe e a
lgica desejada na elaborao da expresso.

Acompanhe o algoritmo que efetua uma operao aritmtica.

Sntese
Objetivo: somar duas variveis
Entrada: nenhuma
Sada: resultado da soma
Declaraes
inteiro VALOR_1, VALOR_2, RESULTADO;
Inicio
VALOR_1

35;

VALOR_2

42;

RESULTADO

VALOR_1 + VALOR_2;

escreva (Total = , RESULTADO);


Fim

Acompanhe agora a traduo deste algoritmo para o programa computacional em C.

/*SNTESE
Objetivo: somar duas variveis
Entrada: nenhuma
Sada: resultado da soma
*/
void main ()
{
// DECLARAES
int VALOR_1, VALOR_2, RESULTADO; // declaraes das variveis
// INSTRUES
VALOR_1 = 35;

// atribuio de 35 a VALOR_1

VALOR_2 = 42;

// atribuio de 42 a VALOR_2

RESULTADO =VALOR_1+VALOR_2; // soma e atribui a RESULTADO


printf (Total = %d ,RESULTADO); // mostra o valor da adio atribudo
}

Veja o resultado apresentado no monitor de vdeo do computador que est executando


este programa.

Incremento e decremento
Os operadores de incremento ou decremento podem ser escritos de uma forma mais
simplificada na Linguagem C. O incremento representa um simples contador que
acrescenta um ao valor da varivel inteira utilizada na expresso. Por exemplo:

CONTADOR

CONTADOR + 1;

equivale a

CONTADOR++;

Estes operadores podem ser descritos de duas forma diferentes:


Pr-fixados (++CONTADOR)
Ps-fixados (CONTADOR++)

Estas diferenas so significativas, por isso acompanhe com ateno os exemplos a


seguir:

Supondo os valores de X = 10; e

Y = 0;

Pr-incremento (pr-fixado)

Y = ++X; equivale a X = X+1; primeiro X incrementado de 1


Y = X;

depois X atribudo a Y.

Seus valores finais, aps as operaes acima seriam de X e Y igual a 11.

Ps-incremento (ps-fixado)

Y = X++; equivale a Y = X;

primeiro X atribudo a Y.

X = X+1; depois X incrementado de 1.

Iniciando com os menos valores propostos acima, os valores finais para as operaes
de ps-incremento seriam de X igual a 11 e Y igual a 10.
As mesma lgica envolve os operadores de decremento em C:

Pr-decremento

Y = --X; equivale a X = X -1; primeiro X decrementado de 1.


Y = X;

depois X atribudo a Y.

Seus respectivos valores finais so: X = 9 e Y = 9.

Ps-decremento

Y = X--; equivale a Y = X;

primeiro X atribudo a Y.

X = X -1; depois X decrementado de 1.

Com os mesmos valores iniciais, X encerrado com 9 e Y com 10.

Operaes de Atribuio Simplificadas

A forma como as operaes de atribuio so descritas em uma expresso tambm


podem ser simplificadas n a Linguagem C, porm isso deve ser compreendido
corretamente, pois esta representao pode tornar-se um complicador na compreenso
das expresses.

Expresso Convencional

Expresso Equivalente em C

X = X + Y;

X += Y;

X = X - Y;

X -=Y;

X = X * Y;

X *= Y;

X = X / Y;

X /= Y;

X = X % Y;

X %= Y;

/*SNTESE
Objetivo: somar duas variveis
Entrada: valor das variaveis
Sada: resultado da soma
*/
void main( )
{
// DECLARAES
int NUMERO_1, NUMERO_2;
// INSTRUES
printf (Informe o primeiro valor: );
scanf(%d,&NUMERO_1);

printf (\nInforme o segundo valor: );


scanf(%d,&NUMERO_2);
NUMERO_1 += NUMERO_2; /*equivalente a expresso
NUMERO_1=NUMERO_1+NUMERO_2 */
printf (\nValor 1 = %3d e Valor 2 = %3d", NUMERO_1, NUMERO_2);
getch(); /* aguarda ser informada uma tecla
para encerrar o programa */
}

Supondo que o usurio do programa digitou os valores 13 e 5, respectivamente, sendo a


execuo do programa demonstrada na representao do monitor de vdeo a seguir:

ATIVIDADE DE FIXAO

No intuito de fixar os novos contedos abordados por este mdulo e verificar sua
compreenso sobre o mesmo sugerido alguns exerccios de fixao para serem

resolvidos. Clique sobre o diagrama abaixo para iniciar a lista de exerccio referente a
este contedo abordado. Bons estudos sobre os mesmos!!
PRTICA - ESTRUTURAS DE CONTROLE NA LINGUAGEM C
Como se sabe, controlar o fluxo do programa mais do que uma necessidade para
os programadores, mas agora voc ir estudar isso na prtica. Mas antes veja um
detalhe importante.

Em C os comandos so divididos em blocos onde se abrem e fecham esses blocos


com chaves.

Veja o exemplo a seguir:

/* SNTESE
Objetivo: apresentar uma mensagem na tela
Entrada: nenhuma
Sada:
mensagem
*/
# include <stdio.h>
# include <conio.h>
void main ()
{ /*essa chave inicia o bloco do programa principal*/
printf(Os programas em C so divididos em blocos.);

getch();
} // essa chave fecha o bloco do programa principal

Nesse exemplo em particular s tivemos um bloco que foi a funo principal, mas
nos nossos prximos exemplos voc vai comear a observar mais blocos em um nico
programa.

Agora que voc j tem uma noo superficial de blocos vamos iniciar nossos estudos
prticos em estruturas de controle, onde voltaremos a tocar no assunto de blocos.

ESTRUTURA SEQUNCIAL

Para refrescar sua memria, estrutura seqencial corresponde em um conjunto de


aes que sero executadas seqencialmente linha aps linha, ou seja, assim como se
escreve, de cima para baixo e da esquerda para direita.

Por exemplo: Um universitrio necessita de passar por vrias etapas para conseguir
entrar na faculdade,ou seja, teve que respeitar uma seqncia de estudos para
conseguir. Isso...

No exemplo a seguir iremos calcular e imprimir a mdia de duas notas, algoritmo:

Sntese
Objetivo: Calcular a media de duas notas
Entrada: duas notas
Sada: media aritmtica das duas notas
Declaraes
real NOTA_1, NOTA_2, MEDIA;
Inicio
escreva(Informe a primeira nota:);
leia(NOTA_1);
escreva(Informe a segunda nota:);
leia (NOTA_2);
MEDIA

(NOTA_1 + NOTA_2) / 2;

escreva(Mdia final:, MEDIA);


Fim

A implementao deste algoritimo em linguagem C seria:

/* Sntese
Objetivo: Calcular a media de duas notas
Entrada: duas notas
Sada: media aritmtica das duas notas
*/
# include <stdio.h>
# include <conio.h>
// Declaraes
float NOTA_1, NOTA_2, MEDIA;
// Instrues
void main()
{

// Incio
printf(\nInforme a primeira nota: );

scanf(%f,&NOTA_1);

// lendo a primeira nota

printf(\nInforme a segunda nota: );


scanf(%f,&NOTA_2);

// lendo a segunda nota

MEDIA=(NOTA_1+NOTA_2)/2; // o calculo da media


printf(\nMedia final: %.2f,MEDIA); // mostrando a media
getch();
}

// Fim

Como voc pde observar a execuo desse programa no teve nenhuma variao do
seu fluxo. Vamos ver agora uma nova instruo, que efetua a alterao seqencial de
execuo de um programa.

ESTRUTURAS DE SELEO

As estruturas de seleo permitem a execuo de uma instruo ou um bloco de


instrues escolhidas aps a avaliao do resultado de um teste condicional que pode
ser VERDADEIRO ou FALSO.

Este teste condicional pode consistir em uma operao relacional simples ou em uma
expresso mais complexa. Existem algumas caractersticas importantes relacionadas as
estruturas de seleo, permitindo que elas sejam dividas ou classificadas em: simples,
composta, aninhada e de mltipla escolha.

Simples:

Nesse tipo de seleo antes de executar um bloco de instrues, o programa testa a


condio. lembre-se s executar o bloco se o resultado da condio for VERDADEIRO.
Toda instruo de seleo resulta em uma informao lgica (VERDADEIRO ou
FALSO) que distinguir o caminho a ser seguido pelo programa, quebrando a sua
ordem sempre seqencial.

Observe o exemplo anterior que apresenta como resultado a mdia conseguida por um
aluno que obteve as notas anteriores de 7.5 e 9.5. Supondo que a mdia mnima para
aprovao seja 7.0 em uma escola, pode-se incluir na apresentao final a mensagem
que identifica a situao deste aluno, que ser APROVADO ou REPROVADO, de
acordo com a mdia alcanada. Sendo assim, ser necessria a incluso de um teste
condicional que possibilite a correta identificao da situao do aluno. Como estudado

na parte lgica desta disciplina ser necessria a incluso do comando SE...ENTO,


que resultar no algoritmo:

Sntese
Objetivo: calcular a media aritmtica de duas notas e informar
somente a aprovao para media maior que 7.0.
Entrada: duas notas.
Sada: a media aritmtica e a situao
Declaraes
real NOTA_1, NOTA_2, MEDIA;
Inicio
escreva(Informe a primeira nota:);
leia(NOTA_1);
escreva(Informe a segunda nota:);
leia(NOTA_2);
MEDIA

(NOTA_1+ NOTA_2) / 2;

escreva(Mdia final:, MEDIA);


se (MEDIA > 7.0) ento
escreva(Aluno aprovado);
fim_se;
Fim

Aps identificada a lgica que resolve o problema apresentado e o desenvolvimento do


seu respectivo algoritmo, ser iniciada a elaborao do programa que consiste na
traduo do algoritmo proposto.

/*
Sntese
Objetivo: calcular a media aritmtica de duas notas e informar
somente a aprovao para media maior que 7.0.
Entrada: duas notas.

Sada: media aritmtica e a situao


*/
# include <stdio.h>
# include <conio.h>
// Declaraes
float NOTA_1, NOTA_2, MEDIA;
// Instrues
void main()
{
printf("\nInforme a primeira nota: ");
scanf("%f",&NOTA_1); //lendo a primeira nota
printf("\nInforme a segunda nota: ");
scanf("%f",&NOTA_2); //lendo a segunda nota
MEDIA=(NOTA_1+NOTA_2) / 2; //o calculo da media
printf("\nMedia final:%.2f", MEDIA); //mostrando a media
if(MEDIA >= 7.0) //fazendo o teste condicional
printf("\nAPROVADO"); //apresenta mensagem caso verdadeiro
getch();
}

O if um comando que contm uma ou mais instrues, e como voc j viu, para
mais que uma instruo necessria a criao de bloco que ser aberto e fechado por
meio de chaves, mas isso s ser necessrio se dentro do if tiver mais de uma linha
de comando, como no exemplo anterior tinha apenas um comando printf, ento no foi
necessrio abrir e fechar chaves. Veja o exemplo da condio a seguir:

if(MEDIA>=7.0)
{ // abrindo um bloco de instruo do comando if
printf(\nAPROVADO);
printf(\nBom Aluno!);
} // fechando o bloco de instruo do comando if

Se no tivesse as chaves o compilador no executaria as instrues como desejado,


apesar de no apresentar um erro a sua execuo estaria com problemas, pois o
resultado de sua execuo nem sempre seria correto.

Ateno: A endentao de suma importncia para a interpretao do programa, por


exemplo:

if(MEDIA >= 7.0)


printf(\nAPROVADO);
printf(Bom Aluno!);

Neste caso observe que foram retiradas as chaves e feita a endentao e o programa
ir escrever Bom aluno para qualquer condio, ou seja, mesmo que a mdia seja
menor que 7.0, porque ele est interpretando que o printf(Bom aluno) est fora do if e
realmente est, ento a concluso a seguinte: endentao e interpretadores de
blocos(chaves) precisam de cuidados ao serem usados.

Composta:

Essa estrutura vai ocorrer quando duas alternativas dependerem da mesma condio,
ou seja, uma a condio ser verdadeira e a outra da condio ser falsa. Em algoritmo
conhecemos o se e o seno, agora vamos conhecer em C a instruo condicional
composta que usa as palavras reservadas if (se) e else (seno), mas antes vamos a
um exemplo...

Se o sexo de uma pessoa no for masculino, ento a concluso bvia que ela seja do
sexo feminino e assim vice-versa... como voc pde observar dizer o sexo de uma
pessoa tambm depende de uma certa lgica, observe que s ser possvel dizer se
uma pessoa de um determinado sexo se ela no pertencer ao oposto ( se no for
masculino ento feminino).

O comando "else"(senao) ser executado somente se o teste condicional do comando


if for falso,ou seja, se a condio do if for falsa ele automaticamente entra no else,
em caso de seleo composta.

No nosso prximo exemplo, ao invs de apenas escrever se o aluno est


Aprovado(mdia acima de 7.0), ou escrever se ele est Reprovado(mdia abaixo de
7.0), observe que se o aluno no estiver aprovado automaticamente ele estar
reprovado.

Veja o exemplo:

/*
Sntese
Objetivo: calcular a media aritmtica de um aluno e informar
a situao (APROVADO ou REPROVADO).
Entrada: duas notas do aluno.
Sada: a mdia e a situao do aluno.
*/
# include <stdio.h>
# include <conio.h>
// Declaraes
float NOTA_1, NOTA_2, MEDIA;
// Instrues
void main()

{
printf("\nInforme a primeira nota: ");
scanf("%f",&NOTA_1); //lendo a primeira nota
printf("\nInforme a segunda nota: ");
scanf("%f",&NOTA_2); //lendo a segunda nota
MEDIA=(NOTA_1+NOTA_2)/2; //calculo da media
printf("\nMedia final:%.2f",MEDIA); //mostrando a media
if(MEDIA>=7.0)
{ //fazendo o teste condicional
printf("\nAPROVADO"); // escrevendo aprovado
printf("\nParabns");
}
else {

// abrindo bloco de instruo

printf("\nREPROVADO"); // escrevendo reprovado


printf("\nEstude mais!");
} // fechando bloco de instruo
getch();
}

Lembre-se: a condio obedece o princpio da no-contradio, ou seja, a condio


nunca poder ser verdadeira e falsa ao mesmo tempo, isso quer dizer que o programa
s executa o que tem dentro do if ou s o que tem dentro do else.

No nosso exemplo como teste da condio foi falso ento o programa deixa de
executar o bloco de instrues que estava dentro do if(mudou o fluxo) e executou o
bloco de instrues que estava dentro do else.

Como voc observou, o else tambm pode possuir a abertura e fechamento de blocos
(chaves), Se for necessria a execuo de vrias instrues. No entanto, se somente
uma instruo tiver que ser executada no ser necessria a abertura e o fechamento
do bloco.

Encadear ou Aninhar a seleo:

Para voc se tornar um professor de faculdade no mnimo voc tem que ser formado, ter
uma ps-graduao, um mestrado e falar no mnimo duas lnguas. Voc percebeu que
para voc chegar a ser um professor universitrio existem condies e que as mesmas
tem que serem verdadeiras. Com a seleo aninhada a mesma coisa, o
agrupamento de vrias selees, tal agrupamento ocorre quando um determinado bloco
de instrues deve ser executado se um grupo de possibilidades ou combinaes for
satisfeito.

Observe a prtica: O prximo programa ir receber trs valores inteiros e ir informar o


maior deles.

/*
Sntese
Objetivo: receber trs valores e escrever o maior deles.
Entrada: trs valores.
Sada: o maior deles.
*/
# include <stdio.h>
# include <conio.h>
//Declaraes
int A, B, C, MAIOR;
//Instrues

void main()
{
printf("Informe trs valores:\n");
scanf("%d%d%d",&A,&B,&C); //lendo os trs valores
if(A >= B)
if(A >= C) //s ser testado se o if de fora for //verdadeiro
MAIOR = A;
else
MAIOR = C;
else
if(B >= C)
MAIOR=B;
else
MAIOR=C;
printf("\nMaior = %2d",MAIOR);
getch();
}

No exemplo acima, o terceiro valor informado (96) o maior.

Acompanhe como isso aconteceu. Como o primeiro valor no maior que o segundo, o
teste do primeiro if deu falso, automaticamente o programa executa o bloco de
instrues que existe dentro do else, mas dentro do else temos mais duas
possibilidades, do segundo ser maior que o terceiro ou o terceiro ser maior que o
segundo onde ocorre o teste do if que est dentro do else, que tambm falso e
automaticamente o programa executa o que tem dentro do outro else.

Alguns de seus questionamentos neste momento deve ser o seguinte:Por que no teve
nenhum bloco iniciado e fechado com chaves, sendo que tem blocos que tem um if e

um else? Lembre-se que o programa s executa ou um ou outro, nunca os dois.


Portanto se ele executar o if ele no vai executar o else, ou seja, o programa
interpretar apenas uma instruo ou o if ou o else.

Mltipla escolha:

Em algoritmo foi estudado a instruo escolha que ser abordada agora como mais uma
instruo de seleo possvel na linguagem C.

No tpico anterior foi falado sobre a seleo aninhada, mas ser que ela sempre a
melhor opo para selecionar instrues que dependem da mesma condio? e se
existirem inumeras condies para selecionar as instrues? caso existam muitas
condies aninhadas a melhor opo o escolha em C conhecido como switch,
onde o caso substitudo por case e o caso contrrio por default,mas lembre-se
para selecionar uma instruo no escolha a condio analisada dever ser um caracter
ou um inteiro.

O exemplo a seguir ns vamos simular uma calculadora em algoritmo usando a seleo


aninhada e logo em seguida usando o escolha, para voc poder estar refletindo qual
seria a melhor opo. O programa estar recebendo do usurio dois valores e qual das
operaes bsicas(*,/,-,+) ele deseja fazer.

Sntese

Objetivo: simular uma calculadora utilizando seleo Aninhada


Entrada: dois operandos e um operador.
Sada: resultado de acordo com a operao.
Declaraes
real VALOR_1, VALOR_2, RESULTADO;
caracter OPERADOR;
Inicio
escreva(Informe o primeiro valor:);
leia(VALOR_1);
escreva(Informe o operador:);
leia(OPERADOR);
escreva(Informe o segundo valor:);
leia(VALOR_2);
se(OPERADOR=*) ento
RESULTADO

VALOR_1 * VALOR_2;

seno
se(OPERADOR=+) ento
RESULTADO

VALOR_1 + VALOR_2;

seno
se(OPERADOR=-) ento
RESULTADO

VALOR_1 - VALOR_2;

seno
se(OPERADOR=/) ento
RESULTADO

VALOR_1 / VALOR_2;

seno
escreva(Operador invlido);
fim_se;
fim_se;
fim_se;
fim_se;
Fim

Utilizando a instruo escolha:

Sntese
Objetivo: simular uma calculadora nas operaes convencionais
Entrada: dois operandos e um operador.
Sada: resultado de acordo com a operao.
Declaraes
real VALOR_1, VALOR_2, RESULTADO;
caracter OPERADOR;
Inicio
escreva(Informe o primeiro valor:);
leia(VALOR_1);
escreva(Informe o operador:);
leia(OPERADOR);
escreva(Informe o segundo valor:);
leia(VALOR_2);
escolha(OPERADOR)
caso "*" : RESULTADO

VALOR_1 * VALOR_2;

caso "+" : RESULTADO

VALOR_1 + VALOR_2;

caso "-" : RESULTADO

VALOR_1 - VALOR_2;

caso "/" : RESULTADO

VALOR_1 / VALOR_2;

caso contrario : escreva(Operador invlido);

RESULTADO

0;

fim_escolha;
Fim

Elaborando a implementao na linguagem C tem-se:

/*
Sntese
Objetivo: simular uma calculadora
Entrada: dois operandos e um operador
Sada: resultado de acordo com a operao
*/
# include <stdio.h>
# include <conio.h>
//Declaraes
float VALOR_1,VALOR_2,RESULTADO;
char OPERADOR;
//Instrues
void main()
{
printf("Informe o primeiro valor: ");
scanf("%f",&VALOR_1);
printf("Informe o operador: ");
scanf("%c",&OPERADOR);
printf("Informe o segundo valor: ");
scanf("%f",&VALOR_2);
switch (OPERADOR)
{

//selecionando o operador
case '*' : RESULTADO=VALOR_1*VALOR_2;
break;

case '/' : RESULTADO=VALOR_1/VALOR_2;


break;
case '+' : RESULTADO=VALOR_1+VALOR_2;
break;
case '-' : RESULTADO=VALOR_1-VALOR_2;
break;
default :
{
printf("\nOperador invlido");
RESULTADO = 0;
}
}
printf("\nResultado = :%.2f", RESULTADO);
getch();
}

O comando break que voc viu logo aps a linha de comando do case, chamado
de comando de desvio, onde ele realiza um desvio incondicional.O case ser
executado at que o comando break ou o fim do switch seja alcanado.

Quando o comando break alcanado salta para linha de cdigo seguinte ao final do
switch. Caso no tivssemos inserido o break o programa continuaria testando os
outros cases e poderia causar um erro em seu programa.

Se voc tem alguma dvida sobre o switch vamos tentar tir-las agora. H trs coisas
importantes que voc tem que saber sobre o comando switch:

O comando switch difere do comando "if porque switch s pode testar


igualdade, enquanto if pode avaliar uma expresso lgica ou relacional;

Duas constantes case no mesmo switch no podem ter valores idnticos.


Obviamente, um comando switch includo em outro switch mais externo pode
ter as mesmas constantes case;

Se constantes de caractere so usadas em um comando swicth,elas so


automaticamente convertidas para seus valores inteiros.

ESTRUTURAS DE REPETIO

Voc j deve ter alguma intimidade com as estruturas de repetio, mas antes de
comearmos logo na prtica vamos relembrar alguns conceitos bsicos.

Fazer um programa para calcular a mdia de duas notas de um aluno voc j sabe
fazer. Simples, no ? Agora imagine calcular a mdia de notas de 50 alunos. Ser que
s escrever o algoritmo 50 vezes? pode at dar certo, porm nada vivel.

Outro modo de resolver essa questo seria utilizar a mesma seqncia de comandos
novamente, ou seja, fazer um retrocesso ao incio dos comandos para cada aluno,
fazendo, portanto com que o fluxo de execuo repetisse certo trecho do programa, o
que nesta aplicao corresponderia escrever o mesmo trecho 50 vezes.

Existem trs tipos de estruturas de repetio em algoritmo, so elas: para, enquanto e


o repita. Em c temos respectivamente: for, while, do...while.

Vamos comear pelo o for que uma estrutura de repetio finita, ou seja, possui
limites fixos e uma varivel de controle dentro desse limite.

A forma geral da repetio, tambm chamada de lao ou looping for em C :

for (<inicializao> ; <teste condicional> ; <incremento ou decremento>)


{
<instrues>;
}

inicializao: um comando de atribuio que usado para colocar um

valor na varivel de controle(que deve ser declarada normalmente como outra


varivel qualquer) do lao;

teste condicional: uma expresso relacional que determina quando o

lao acaba, ou seja, enquanto condio verdadeira a repetio acontece;

incremento ou decremento: Define como a varivel de controle deve

variar a cada vez que o lao se repete.

Importante: observe que estas trs sees so separadas por meio de ponto-e-vrgula
(;).

Visando uma melhor fixao do contedo, vamos primeiro fazer um algoritmo para
calcular a media de uma turma de 50 alunos em uma prova de algoritmo, usando a
estrutura de repetio para.

Sntese
Objetivo: calcular a mdia de uma turma de 50 alunos em
uma Prova de algoritmo usando para
Entrada: nota de cada aluno
Sada: a media geral da turma
Declaraes
real NOTA, ACUMULADOR, MEDIA;
inteiro CONT;
Inicio
ACUMULADOR 0;
para CONT de 1 ate 50 passo 1 faca
escreva(Informe a ,CONT, nota:);
leia(NOTA);
ACUMULADOR ACUMULADOR + NOTA;
fim_para;
MEDIA ACUMULADOR / 50;
escreva(Media geral:,MEDIA);
Fim

A implementao na linguagem C seria:

/*
Sntese

Objetivo: calcular a mdia de uma turma de 50 alunos em


uma Prova de algoritmo.
Entrada: nota de cada aluno.
Sada: a media geral da turma.
*/
# include <stdio.h>
# include <conio.h>
//Declaraes
float NOTA, ACUMULADOR=0 ,MEDIA;
int CONT;
//Instrues
void main()
{
for(CONT=1;CONT<=50;CONT++)
{
printf("Informe a %d nota:",Cont);
scanf("%f",&NOTA); //lendo a nota
ACUMULADOR=ACUMULADOR+NOTA; //acumulando as 50
}
MEDIA=ACUMULADOR/50; //calculando a mdia
printf("\nMedia Geral =%2.1f",MEDIA); //mostrando a media
getch();
}

Em nosso exemplo a varivel de controle Cont varia de 1 at 50, fazendo a leitura da


nota e o acumulador repetir 50 vezes.

A mdia como s necessita ser calculada uma vez, ela tem que esta fora do bloco de
comandos do for.

ATENO: Como voc observou foi necessrio acumular as 50 notas, ento nuca se
esquea de inicializar a varivel(zero).

Observao: Como o lao for um bloco de comando e como dentro do lao tem
mais de uma linha de comando, ele tambm necessita de chaves.

Continuando com o lao for... Vamos imprimir na tela os nmero pares de 1 at 100.
Para resolvermos esse problema existem vrias formas, vamos resolver de algumas
maneiras diferentes para treinarmos as versatilidades do lao for.

/*
Sntese
Objetivo: imprimir na tela os nmeros pares entre 1 e 100
Entrada: nenhuma
Sada: os nmeros pares entre 1 e 100.
*/
# include <stdio.h>
# include <conio.h>
//Declaraes
int CONT;
//Instrues
void main()
{
for(CONT=1;CONT<=100;CONT++)
if(CONT%2==0) // testando para ver se par
printf("%1d-",CONT);
getch();
}

Como voc pde observar foi usada a varivel de controle para obtermos os nmeros
pares, ou seja, podemos usar a varivel de controle para fazermos o que quisermos,
mas temos que tomar cuidado para no mudar a ordem do lao(incrementando ou
decrementando a varivel dentro do bloco tambm) a no ser que voc use uma lgica
para isso.

Vamos ver outra forma de mostrar os nmeros pares mas s que agora em ordem
decrescente de 100 at 2...

/*
Sntese
Objetivo: imprimir na tela os nmeros pares entre 1 e
100 em ordem decrescente.
Entrada: nenhuma
Sada: os nmeros pares entre 1 e 100.

*/
# include <stdio.h>
# include <conio.h>
//Declaraes
int CONT;
//Instrues
void main()
{
for(CONT=100;CONT<=2;CONT=CONT-2)
printf("%1d-",CONT);
getch();
}

Desta vez mudamos a inicializao e a cada vez que a repetio ocorrer a varivel ser
decrementada com 2. Com isso s basta escrever a varivel de controle na tela.

Lembre-se: O for acontece de onde a varivel de controle inicializada at a


condio se tornar falsa ou se preferir enquanto verdadeira.

Outra estrutura de repetio que j conhecemos chamada enquanto, em C


chamada de while.

Para relembrar, o enquanto (while) ele executado enquanto o teste de sua


condio for verdadeiro ou at a condio se tornar falsa. A condio pode ser qualquer
expresso, e lembre-se verdadeiro em C qualquer valor no zero. Se j na primeira
vez o resultado da condio for falso, os comandos no sero executados nenhuma
vez, o que representa a caracterstica principal desse modelo de repetio.

A forme geral do comando while :

while (<condio>)
{
<instrues>;
}

Vamos utilizar o mesmo exemplo anterior, calcular a mdia de cinqenta alunos na


prova de algoritmo, usando o while. Mas espere a, qual ser a nossa condio de
sada? A condio poderia ser quantidade de notas recebidas, ou seja, a quantidade de
alunos menor que 50; porm, o que indica quantas vezes a nota foi acumulada? O
while no oferece esse recurso, ento teramos que implementar um sistema de
contagem, feito atravs de um contador representado por uma varivel com um dado
valor inicial,que ser incrementada a cada repetio.

/*
Sntese
Objetivo: calcular a mdia de uma turma de 50 alunos em uma

Prova de algoritmo usando a estrutura while


Entrada: nota de cada aluno
Sada:

a media geral da turma.

*/
# include <stdio.h>
# include <conio.h>
void main()
{
// Declaraes
float NOTA, ACUMULADOR=0 , MEDIA;
int CONTADOR=1 ;
// Instrues
while(contador<=50)

// teste da condio

{
printf("Informe a %d nota: ",contador);
scanf("%f",&NOTA);

//lendo a nota

ACUMULADOR=ACUMULADOR+NOTA; //acumulando as 50
CONTADOR++;

//incrementando o contador

}
Media=ACUMULADOR / 50;
printf("\nMedia = :%2.1f",MEDIA);
getch();
}

//calculando a mdia
//mostrando a media

Observe que o lao ir repetir enquanto o contador estiver com um valor menor ou
igual a 50.

No exemplo anterior tnhamos definido a quantidade de notas que iramos acumular,


mas e se ns tivssemos que acumular notas de uma turma que no soubssemos a
quantidade de alunos, teramos que admitir um flag de sada.
flag conhecido como um finalizador, em nosso prximo exemplo vamos admitir o
valor finalizador como nota negativa;

Observe o exemplo a seguir:

/*
Sntese
Objetivo: calcular a mdia de uma turma de X alunos em
uma Prova de algoritmo usando a estrutura "while"

Entrada: nota de cada aluno e o flag como nota negativa.


Sada:

a media geral da turma.

*/
# include <stdio.h>
# include <conio.h>
void main()
{
// Declaraes
float NOTA, ACUMULADOR=0 ,MEDIA;
int CONTADOR=0 ;
// Instrues
printf("Informe a %d nota:",CONTADOR+1); //no altera o contador
scanf("%f",&Nota);
while(Nota>0)
{
acumulador=acumulador+Nota; //acumulando as notas
contador++; //incrementando o contador
printf("Informe a %d nota:",contador+1);
scanf("%f",&Nota);
}
Media=acumulador/contador;

//calculando a mdia

printf("\n\nMedia = %2.1f",Media);
printf("\nQuantidade = %2d",contador); //mostrando a qde.
getch();
}

Nesse caso o usurio poder calcular quantas notas ele quiser, e para encerrar a
repetio basta digitar uma nota negativa.

Vamos agora comear nossos estudos com a ltima estrutura de repetio a ser vista o
do...while que em partes a mesma coisa do repita. O do...while se diferencia do
repita no que se diz respeito a condio de sada. Por exemplo: o repita em algoritmo
executa o lao at que a condio se torne verdadeira, ou seja, enquanto falso, j em
C o do...while, executa enquanto verdadeiro assim como o for e o enquanto.
Lembrando que o do...while tambm pode ser executado com flag(finalizador) de
sada.

Neste exemplo vamos calcular a media de uma turma de 30 alunos usando o


do...while:

/*

Sntese
Objetivo: calcular a mdia de uma turma de 30 alunos em uma
prova de algoritmo usando a estrutura do..while
Entrada: nota de cada aluno.
Sada:

a media geral da turma.

*/
# include <stdio.h>
# include <conio.h>
void main()
{
// Declaraes
float NOTA, ACUMULADOR=0 ,MEDIA;
int CONTADOR=1 ;
// Instrues
do{
printf("Informe a %d nota:",CONTADOR);
scanf("%f",&NOTA);
ACUMULADOR=ACUMULADOR+NOTA; //acumulando notas
CONTADOR++;

//incrementando o contador

} while(CONTADOR<=30);
MEDIA=ACUMULADOR/CONTADOR;
printf("\n\nMedia = %2.1f",MEDIA);

// mostrando a media

printf("\nQuantidade = %2d",CONTADOR-1);// mostrando a qtde.


getch();
}

No exemplo anterior tivemos que inicializar o contador que controla o lao do..while
com o valor 1, porque como j havamos comentado ele executa todos os comandos
antes de testar, ento quando ele fizer o primeiro teste ele j vai ter executado o bloco
uma vez. E na hora de escrever a quantidade de execues, ou seja, as notas recebidas
ele iria escrever uma execuo a mais se no estivesse sido decrementado, porque o
contador incrementado antes do teste.

Afinal qual a diferena entre o while e o do...while? o do...while faz o seu


teste condicional somente no final do bloco, isso quer dizer que ele primeiro executa o
que tem no bloco, e s depois testa se a condio se tem valor verdadeiro ou falso.

Seguindo o exemplo no qual admitimos como flag uma nota negativa, vamos faze-lo
novamente mas agora com o do..while, para voc ver a diferena entre o while e o
do...while

/*
Sntese
Objetivo: calcular a mdia de uma turma de X alunos em uma
Prova de algoritmo usando a estrutura do while
Entrada: nota de cada aluno e o flag como nota negativa.
Sada: a media geral da turma.
*/
# include <stdio.h>
# include <conio.h>
void main()
{
// Declaraes
float NOTA, ACUMULADOR=0 ,MEDIA;
int CONTADOR=0;
// Instrues
do{
printf("Informe a %d nota:",CONTADOR+1);
scanf("%f",&NOTA);
ACUMULADOR=ACUMULADOR + NOTA;
CONTADOR++;
} while(NOTA>0);
MEDIA=ACUMULADOR/CONTADOR;

printf("\nMedia = %3.2f",MEDIA);

//mostrando a media

printf("\nQuantidade = %2d",CONTADOR); // mostrando a qtde.


getch();
}

Como voc pode observar o resultado no foi o esperado, porque como ele primeiro
executou depois testou. Quando foi digitado o valor negativo, alm de contar a nota
negativa como uma nota vlida e acumular o valor negativo tambm contou a nota como
um calculo vlido.

A forma correta seria:

/*
Sntese

Objetivo: calcular a mdia de uma turma de X alunos em uma


Prova de algoritmo usando a estrutura do while
Entrada: nota de cada aluno e o flag como nota negativa.
Sada:

a media geral da turma.

*/
# include <stdio.h>
# include <conio.h>
void main()
{
// Declaraes
float NOTA, ACUMUMULADOR=0 ,MEDIA;
int CONTADOR=0 ;
//Instrues
printf("Informe a %d nota:",contador+1);
scanf("%f",&NOTA);
do {
ACUMULADOR=ACUMULADOR+NOTA;
CONTADOR++;
printf("Informe a %d nota:",CONTADOR+1);
scanf("%f",&NOTA);

// lendo a nova nota

} while(NOTA>0);
MEDIA=ACUMULADOR/CONTADOR;
printf("\nMedia = %2.1f",MEDIA); //mostrando a media
printf("\nQuantidade = %2d",CONTADOR); //mostrando a qtde.
getch();
}

Concluso:
O comando do...while no indicado para executar tarefas que necessitam serem
testadas antes de executar.

ATIVIDADE DE FIXAO

No intuito de fixar os contedos abordados neste mdulo e verificar qual foi sua
aprendizagem sobre o mesmo sugerido alguns exerccios de fixao para serem
resolvidos. Clique sobre o diagrama a seguir e comece a solucionar a lista de exerccio
proposta.

triste falhar na vida, porm mais triste ainda no tentar vencer...


PRTICA - SUBPROGRAMAS
INTRODUO

Uma das caractersticas mais importantes da linguagem C so as funes, pois so


nelas que ocorrem todas as atividades de um programa. Cada funo equivale a um
bloco de instrues, o qual pertence exclusivamente mesma, no podendo ser
acessado por nenhuma outra, exceto por meio de uma chamada esta funo.
Dividindo o programa em vrias funes, torna-se mais fcil a deteco de erros e
organizao do cdigo. importante observar que na linguagem C no existe distino
entre funes (possui um nico retorno) e procedimentos (no possui retorno algum).

DECLARAO E ESTRUTURA DE UMA FUNO EM C

Em geral, a declarao de uma funo se faz da seguinte maneira:

<tipo de dado> <identificador> (lista de parmetros)


1

1-Tipo de dado: especifica o tipo de valor que o comando return devolve funo,
consistindo do seu nico valor de retorno. Quando este campo no foi informado, o
compilador interpreta como seu tipo de dado padro int (inteiro).

2-Identificador: corresponde ao nome dado a funo, respeitando todas as regras de


dar nomes a objetos (variveis e constantes) na programao computacional.

3-Lista de parmetros: compreende valores que sero enviados pela chamada da


funo que necessita enviar alguns dados para dentro dela, de forma que ela possa
resolver corretamente o que lhe solicitado.

(<tipo de dados><identificador>,.....);

similar a uma "lista de variveis" separadas por vrgula e entre os parnteses da


funo, com seus respectivos tipos de dados totalmente compatveis com os definidos
em sua declarao (prottipo da funo). Uma funo pode ter vrios parmetros ou
nenhum, ma sempre deve possuir seus parnteses: ( - abrir

) - fechar.

Exemplos - observe alguns prottipos a seguir:

float MEDIA (float NOTA1,float NOTA2); // funo float com 2 parmetros float
int SOMA (int VALOR1, int VALOR2); // funo int com 2 parmetros int
char MOSTRA ( ); // funo char sem nenhum parmetro
POTENCIA (int EXP, float BASE, char RESP);
/* funo POTENCIA sem definio explcita do seu tipo assumi o tipo de dado
padro da linguagem C (int) com trs parmetros, sendo o primeiro int, o segundo
float e o terceiro char, independentemente do seu tipo de dado de retorno */

A funo deve ser declarada no incio do programa a ser elaborado por meio do seu
prottipo. Aps a criao da funo principal (funo main), o corpo da funo
desejada, e j declarada pelo seu prottipo, deve ser definido, consistindo ele na cpia
de sua declarao (prottipo), sem o ponto e vrgula (;) no final. Em seguida, similar a
funo principal, e o corpo da nova funo comea a ser definido, sempre entre chaves:
{ - abrir

} - fechar.

Exemplo - observe o corpo da funo MEDIA que teve seu prottipo (declarao)
realizado no exemplo anterior:

float MEDIA (float NOTA1, float NOTA2)


{
// Declaraes
float RESULTADO;

// criao de uma nova varivel, sendo ela local

// Instrues
RESULTADO = (NOTA1 + NOTA2) / 2;
return (RESULTADO);
}

Este exemplo mostra uma funo que calcula a mdia entre duas notas e retorna o
resultado deste clculo. Observe qual seria o algoritmo desta funo e veja a
similaridade da criao de ambos.

funo real MEDIA (real NOTA1, real NOTA2); { declarao da funo }


{ a declarao acima deve estar no bloco de declaraes do algoritmo principal }
funo real MEDIA (real NOTA1, real NOTA2) { corpo da funo }
real RESULTADO;

{ criao da varivel local RESULTADO }

incio
RESULTADO = (NOTA1 + NOTA2) / 2;

returna (RESULTADO);
fim_funo;

FUNO MAIN

Todo programa em C consiste em uma ou mais funes, sendo a main a nica


funo que necessariamente precisa estar presente em qualquer programa, pois ela a
primeira a ser chamada quando a execuo do programa comea. Por se tratar de uma
funo, a main segue s mesmas regras de declarao de uma funo. Tambm
chamada de funo principal.

PARMETROS DE UMA FUNO

Existem duas maneiras de se passar dados para dentro de uma funo, sendo elas
conhecidas como:passagem por VALOR ou por REFERNCIA.

PASSAGEM DE PARMETROS POR VALOR

Quando uma funo chamada, a mesma funo faz cpias dos valores enviados
como parmetros, dessa forma os valores originais no so alterados, pois a funo
manipula apenas as cpias dos mesmos.
Os valores existentes na funo que foi chamada no podem ser acessados por
outras funes, a menos que estes valores sejam enviados por parmetros para outras
funes, a partir da mesma, ou ainda retornado por ela. Todos os valores de uma
funo so apagados com o trmino da execuo da mesma.

PASSAGEM DE PARMETROS POR REFERNCIA

Ao invs de se fazer uma cpia dos valores existentes na funo principal, a funo
que chamada leva como parmetro o endereo de memria original das variveis que
ela manipular durante sua execuo, por meio dos parmetros enviados a ela.
Neste tipo de passagem de parmetros, o valor original da varivel pode ser alterado,
j que a funo tem acesso ao seu endereo original, onde o dado manipulado esta
realmente armazenado na memria do computador. Quando esta funo encerrada, o
contedo enviado para ela no destrudo, pois ela somente recebeu o endereo
original pertencente a outra funo, normalmente o funo principal, que s permitir
sua destruio quando ela for encerrada. Porm, quando uma funo principal
encerrada o programa termina.

Exemplo:
int CALCULO (int &VALOR);

& - o "E comercial" na linguagem C o operador de endereo e indica a


manipulao ou uso do mesmo.

COMANDO RETURN

O comando return usado na execuo de duas aes na funo, similar ao que j


foi estudado no comando retorna em algoritmo. Este comando finalizar a funo
fazendo com que sua execuo retorne funo chamadora e devolva um nico valor
existente dentro desta funo para a funo chamadora.
Todas as funes, com exceo as do tipo de dado void, retornam um nico valor.
Caso no exista nenhum comando return presente, o valor de retorno ser tecnicamente
indefinido (na maioria dos casos, os compiladores C devolvem ZERO quando no h
nenhum valor de retorno especificado, mas isto no recomendado para elaborao de
programas eficientes). Uma funo pode ter vrios comandos return, mas somente um

ser executado realmente, pois aps a sua execuo ele encerra a funo em execuo
e retorna para funo chamadora, imediatamente.

PROCEDIMENTO X FUNO

Na linguagem C, procedimento corresponde a uma funo sem retorno, como em


algoritmo. Nesta linguagem no existe distino entre funo e procedimento, sendo
ambos tratados como funo, ou seja, um subprograma com lgica bem definida que
pode ser acionada quantas vezes seja necessria para solucionar um problema.

O procedimento corresponde a uma funo do tipo void (tipo de dado indefinido) que
no possui o comando return devolvendo algum valor para a funo chamadora. Desta
forma se for preciso armazenar os dados coletados durante a execuo da funo pode
-se recorrer a passagem de parmetros por referncia, uso de variveis globais ou ainda
alguns outros mtodos que sero estudados mais adiante sobre esta linguagem de
programao computacional.

VARIVEIS LOCAIS E GLOBAIS

As variveis locais so variveis que so declaradas dentro das funes. Somente as


funes que as criaram podem utiliz-las, sendo que aps o trmino da funo, estas
variveis so destrudas (apagadas da memria do computador).

Exemplo:

/*
Sntese
Objetivo:Determinar se um estudante foi aprovado ou reprovado
Entrada: Mdia
Sada: Mensagem informativa de "Aprovado" ou "Reprovado"
*/

#include <stdio.h>
#include <conio.h> // de acordo com a verso do Dev-C pode ser usada <conio.c>

int main (void)

// funo principal

{
// Declaracoes
float MEDIA;
int VERIFICA;
int SITUACAO (float VAL);
// Instrucoes

// declarao de outra funo (seu prottipo)

printf("Informe a mdia do aluno");


scanf("%f",&MEDIA);

// l a mdia do aluno

VERIFICA = SITUACAO(MEDIA); // VERIFICA recebe o resultado da funo


if(VERIFICA == 1)
puts("APROVADO");
else
puts("REPROVADO");
getch();
return(0);
}

// Corpo da funo SITUACAO (descrio do que a funo SITUACAO faz


int SITUACAO (float VAL) // parmetro VAL s existe dentro da funo,
{

// funcionando como uma varivel local


// Declaracoes
int AUXILIAR

// declarao de varivel local - s existe dentro da funo

// Instrucoes
if(VAL >= 7)
AUXILIAR=1;
else
AUXILIAR=2;
return(AUXILIAR); // valor de AUXILIAR retornado para funo chamadora
}
/* Aps a execuo do comando return a varivel AUXILIAR e o parmetro
VAL so apagados da memria, ou seja, so destruidos */

Supondo uma execuo, onde o usurio tenha informado o valor 8.9 para a varivel
MEDIA, observe o resultado do programa acima na tela a seguir:

As variveis globais, ao contrrio das locais, so declaradas fora de qualquer funo


(inclusive da funo main), sendo seu contedo acessado por todas as funes que
compem o programa como um todo, pois tal varivel (ou constante) global e s ser
destruda da memria quando o programa terminar, ou seja, somente quando a funo
principal encerrar sua execuo.

Exemplo:
/*
Sntese
Objetivo: Ler o nome e pas de uma pessoa

Entrada: Nome da pessoa e nome do pas


Sada: Mensagem com o nome e pas da pessoa
*/

#include <stdio.h>
#include <conio.h>

char NOME[100], PAIS[100]; // declaraes globais

int main (void)


{
// Declaraes
void LEITURA (void); // declarao do procedimento LEITURA localmente
// Instrues
LEITURA( ); // chamada do procedimento LEITURA sem parmetro algum
printf("Ol %s! Voc mora no pas de nome %s!!", NOME, PAIS);
getch();
return(0);
}

// Corpo da funo LEITURA


void LEITURA (void)
{
// Declaraes

// Instrues
puts("Informe o seu nome:");
gets(NOME); // l o nome da pessoa
puts("Informe o seu pas:");
gets(PAIS);

// l o pas da pessoa

/* Mesmo aps o trmino da execuo da funo, o contedo de NOME e


PAIS continua disponvel na memria, pois estas variveis so globais */

Supondo que o usurio informou o nome Carlos Henrique e o pas Argentina, o


resultado da execuo seria:

O uso de variveis globais no recomendado, pois facilita a ocorrncia de alguns


problemas e dificulta a localizao de erros no cdigo fonte, alm de no contribuir com a
segurana no uso de funes (subprogramas em geral) devido as variveis serem

pblicas durante toda a execuo do programa, podendo serem alteradas a qualquer


momento no mesmo.

FUNO CHAMANDO FUNO


Uma funo pode chamar outras funes durante o seu funcionamento. Quando
isso acontece, o funcionamento da funo que chamou interrompido e a funo
chamada entra em execuo. Aps seu trmino, o programa continua a execuo de
onde parou, neste caso, logo aps a chamada de funo.

Exemplo:

/*
Sntese
Objetivo: Calcular o ndice de Massa Corporal (IMC) de uma pessoa.
Entrada: peso e altura.
Sada: Valor do IMC e sua situao (abaixo, acima ou no peso correto).
*/

include <stdio.h>
include <stdlib.h>

int SITUACAO (float VALOR1, float VALOR2); // prottipo da funo

int main(void)
{
//Declaraes
float PESO, ALTURA;
int OPCAO;
//Instrues
printf(Informe o peso e a altura:);
scanf(%f%f,&PESO,&ALTURA);
OPCAO = SITUACAO (PESO, ALTURA);
switch(OPCAO)
{
case 1:
printf(Voc est abaixo do peso.);
break;
case 2:
printf(Voc est com o peso adequado para sua altura.);
break;
case 3:
printf(Voc est acima do peso.);
break;
case 4:
printf(Voc est obeso.);
}
getch();
return(0);

}
// Corpo da funo
int SITUACAO (float VALOR1, float VALOR2)

{
//Declaraes
float RESULTADO;
float IMC(float PESO1, float ALT); // declarao de outra funo local
//Instrues
RESULTADO = IMC(VALOR1,VALOR2);
if(RESULTADO <=18.5)
return(1);
else
if(RESULTADO <= 24.9)
return(2);
else
if(RESULTADO <= 29.9)
return(3);
else
return(4);

}
float IMC(float PESO1, float ALT)

{
//Declaraes
float TOTAL;
// Instrues
TOTAL = PESO1 / (ALT * ALT);
return(TOTAL);

FUNO GLOBAL E FUNO LOCAL


Assim como as variveis, as funes tambm podem ser globais e locais, onde as
funes locais s podem ser acessadas pelas funes nas quais esto declaradas,
enquanto as funes globais podem ser utilizadas por todas as funes que compem o
programa. As regras de declarao das variveis aplicam-se tambm s funes e/ou
procedimentos.
Observe no exemplo anterior que a funo denominada SITUACAO esta
declarada fora de qualquer outra funo, sendo ela ento uma funo global, porm a
funo IMC esta declarada dentro da funo SITUACAO, o que faz dela uma funo
local podendo ser acionada somente a partir da funo SITUACAO e seu retorno ser
tambm para ela (a funo SITUACAO).

ATIVIDADE DE FIXAO

No intuito de fixar os contedos abordados neste mdulo e verificar qual foi sua
aprendizagem sobre o mesmo sugerido alguns exerccios de fixao para serem
resolvidos. Clique sobre o diagrama que inicia a lista de exerccio e boa prtica com os
mesmo!!

Вам также может понравиться