Anda di halaman 1dari 27

Material desenvolvido por

Prof. M.Sc. Adriano Brum Fontoura




Motivao
A automatizao de tarefas um aspecto marcante da sociedade moderna. O avano tecnolgico tem
como elementos fundamentais a anlise e a obteno de descries da execuo de tarefas em termos
de aes simples o suficiente, tal que pudessem ser automatizadas por uma mquina especialmente
desenvolvida para este fim, O COMPUTADOR.
Na rea de cincia da computao houve um processo de desenvolvimento simultneo e interativo de
mquinas (hardware) e dos elementos que gerenciam a execuo automtica (software) de uma dada
tarefa. E essa descrio da execuo de uma tarefa, como considerada acima, chamada algoritmo.
O objetivo desta disciplina a Lgica de Programao dando uma base terica e prtica,
suficientemente, para que, o aluno domine a elaborao de algoritmos e esteja habilitado a aprender uma
linguagem de programao.

Uma Viso Geral do Processo de Desenvolvimento de Software

Antes de comearmos a estudar lgica de programao, importante que tenhamos uma viso geral do
processo de desenvolvimento de software, uma vez que estudaremos lgica de programao com o
objetivo de conseguir um bom embasamento para a prtica da programao de computadores.

O processo de desenvolvimento de software consiste basicamente num conjunto de atividades divididas
em etapas, onde o objetivo , ao executar estas etapas, chegar efetiva construo de um software
1
.

Podemos encontrar na literatura em Informtica, mais especificamente na rea de engenharia de
software, vrias formas de representao das etapas em que consiste o processo de desenvolvimento de
software. Estas formas de representao podem variar tanto na quantidade de etapas como nas
atividades que devem ser realizadas por cada etapa.

A seguir apresentaremos uma forma de representao do processo de desenvolvimento de software que
bastante encontrada na literatura:















Figura 1 Etapas do processo de desenvolvimento de software.

Na Figura 1 podemos ver o processo de desenvolvimento de software dividido em 6 etapas. A seguir
daremos uma rpida explicao das atividades realizadas por cada etapa.

1
Conjunto de instrues (comandos) interpretveis pelo computador.
Planejamento
Anlise
Projeto
Implementao
Teste
Manuteno
Prof. M.Sc. Adriano Brum Fontoura Pg. 1/27

Planejamento: na etapa de planejamento onde deve ser desenvolvido um plano inicial de
desenvolvimento, levando em consideraes questes como definio da abrangncia do sistema,
misso e objetivos do sistema, cronogramas de desenvolvimento, anlise custo x benefcio, levantamento
inicial de informaes etc.

Anlise: tambm chamada de anlise de requisitos, onde deve se obter um claro entendimento
sobre o sistema. A anlise proporciona a base para uma boa implementao do software. Nesta etapa
so construdos os modelos do sistema.

Projeto: tambm chamada de especificao do projeto, onde propomos uma arquitetura de
implementao para o software, que atenda aos requisitos do sistema identificados na anlise. Aqui
passamos a nos preocupar com os diversos aspectos computacionais necessrios para uma boa
implementao do software. Os algoritmos dos programas a serem implementados so construdos nesta
fase.

Implementao: a etapa de implementao onde os programas so efetivamente construdos, a
partir da arquitetura de implementao feita na etapa anterior. Nesta etapa onde a atividade de
codificao ocorre de forma massiva.

Teste: nesta etapa todos os programas construdos sero testados de forma exaustiva. Existe uma
grande variedade de testes que so realizados, indo desde o teste unitrio dos mdulos de programas
at o teste de integrao de todo o sistema de software.

Manuteno: onde ocorrem ajustes do software implementado, que podem ser ocasionados por
vrios motivos: erros de projeto identificados aps a implementao e o teste do software, inovaes
tecnolgicas, evoluo do sistema etc.

Introduo Lgica de Programao

Como esta uma disciplina de lgica de programao, vamos iniciar nossos estudos procurando
entender o que lgica de uma forma geral. A seguir sero dadas algumas definies que procuram
elucidar o termo lgica.

Lgica:

[do grego logik, que significa "arte de raciocinar"]. Na tradio clssica, aristotlico-tomista,
conjunto de estudos que visam a determinar os processos intelectuais que so condio geral do
conhecimento verdadeiro. (1. definio encontrada no Dicionrio Aurlio da Lngua Portuguesa)

Coerncia de raciocnio, de idias. (6. definio encontrada no Dicionrio Aurlio da Lngua
Portuguesa)

Maneira de raciocinar particular a um indivduo ou a um grupo: a lgica da criana, a lgica
primitiva, a lgica do louco. (7a. definio encontrada no Dicionrio Aurlio da Lngua Portuguesa)

A lgica trata da correo do pensamento. Como filosofia ela procura saber por que pensamos de uma
forma e no de outra. Poderamos dizer tambm que a lgica a arte de pensar corretamente e, visto
que a forma mais complexa de pensamento o raciocnio, a Lgica estuda ou tem em vista a "correo
do pensamento". A Lgica ensina a colocar Ordem no Pensamento.

Exemplo:

Todo vulcano tem orelhas pontudas.
Spock vulcano.
Logo, Spock tem orelhas pontudas.
Prof. M.Sc. Adriano Brum Fontoura Pg. 2/27


Se quisermos ter sucesso numa modalidade esportiva, devemos treinar, descansar e nos
alimentarmos adequadamente.
Se quisermos desenvolver bons programas de computador, devemos program-lo logicamente,
para que este possa resolver o problema desejado da forma mais otimizada possvel, dado um
conjunto de restries. neste ponto que entra o conceito de lgica de programao.

Lgica de Programao: raciocnio lgico empregado no desenvolvimento de programas de
computador, fazendo uso ordenado dos elementos bsicos suportados por um dado estilo de
programao.

Uma boa lgica de programao desenvolvida a partir de um conjunto de elementos, entre eles:
Organizao
Criatividade
Perseverana
Padronizao
Otimizao

Algoritmos e lgica de programao

O estudo de ambos essencial no contexto do processo de criao de um software (programa de
computador). O algoritmo est diretamente relacionado com a etapa de projeto de um software, mesmo
antes de sabermos qual ser a linguagem usada na codificao se especifica o software por meio de um
algoritmo.
Nesta etapa e possvel se verificar em um nvel maior de abstrao, se o software atender as
necessidades da proposta original.

Algoritmizando a Lgica

Algoritmo

a descrio, de forma lgica, dos passos a serem executados no cumprimento de determinada
tarefa.
O algoritmo pode ser usado como uma ferramenta genrica para representar a soluo de tarefas
independente do desejo de automatiz-las, mas em geral est associado ao processamento eletrnico de
dados, onde representa o rascunho para programas (Software).

Apesar do nome estranho, os algoritmos so muito comuns no nosso cotidiano, como por exemplo, em
uma receita de bolo. Nela esto descritos os ingredientes necessrios e a seqncia de passos ou aes
a serem cumpridos para que se consiga fazer um determinado tipo de bolo.
Em um modo geral, um algoritmo segue um determinado PADRO DE COMPORTAMENTO, com
objetivo de alcanar a soluo do problema.
Padro de Comportamento: imagine a seqncia de nmeros: 1,6,11,16,21,26, ... Para determinar qual
ser o stimo elemento dessa srie, precisamos descobrir qual a sua regra de formao, isto , qual
o seu padro de comportamento. Como a seqncia segue uma certa constncia, facilmente
determinada, somos capazes de determinar qual seria o stimo termo ou outro qualquer.

Programa

uma seqncia finita de etapas que devem ser executadas pelo computador para resolver um
determinado problema.
Um programa de computador e a implementao de um determinado algoritmo utilizando um
linguagem de programao

Prof. M.Sc. Adriano Brum Fontoura Pg. 3/27
Formalizao de um algoritmo

A tarefa de especificar os algoritmos para representar um programa consiste em detalhar os dados que
sero processados por este programa e as instrues que vo operar sobre estes dados.
Esta especificao pode ser feita livremente, sem regras, mas importante formalizarmos a descrio de
um algoritmo segundo alguma conveno, para que todos os envolvidos na sua criao possam entend-
lo.
Em primeiro lugar, necessrio definir um conjunto de regras que regulamentem a escrita do
algoritmo, ou seja, regras de sintaxe.
P.exemplo: (algoritmo usando as sintaxe do VisuAlg)
(Algoritmo)
algoritmo "Primeiro"
var
valor: inteiro
Inicio
escreva("Informe o valor:")
leia(valor)
escreval("Valor digitado = ", valor)
fimalgoritmo
(Estrutura de um algoritmo/programa)
Programa <nome_do_Programa>
Constantes
{Aqui declaramos as constantes}
Variveis
{Aqui declaramos as variveis}
Inicio {incio do bloco de execuo}
Escreva(<mensagem que sai no vdeo ou impr.>);
Leia(<colocamos a varivel a ser lida>);
Escreva(<mensagem que sai no vdeo ou impr.>);
Fim {fim do bloco de execuo}

Em segundo lugar preciso estabelecer as regras que permitem interpretar um algoritmo, que so as
regras de semntica.

Sintaxe e Semntica

Sintaxe
A sintaxe de um algoritmo resume-se nas regras para escrev-lo corretamente. Em computao, essas
regras indicam quais so os tipos de comandos que podem ser usados e tambm como neles escrever
expresses
Por Exemplo:
Comando que envia uma mensagem para o monitor do computador
Escreva(Valor da Mdia); { Program Design Language PDL } => Mensagem
printf(Valor da Media); {Linguagem C}
Escreva(Mdia); {Comando que exibe o resultado final, sada de dados} => Varivel
printf(Media); {Comando que exibe o resultado final, sada de dados}

Semntica
A semntica e a descrio de como as construes sintaticamente corretas so interpretadas ou
executadas, ou seja, estabelece regras para sua interpretao.
Desta forma, a semntica de um algoritmo sempre acompanha a sua sintaxe, fornecendo um significado.
A importncia da formalizao de um algoritmo, sua sintaxe e semntica podem ser resumidas assim:
Evitar ambigidades, pois definem regras sintticas e semnticas que sempre so interpretadas da
mesma forma.
Impedir a criao de smbolos ou comandos desnecessrios na criao de um algoritmo: representam
um conjunto mnimo de regras que pode ser utilizado em qualquer algoritmo.
Permitir uma aproximao com as regras de uma linguagem de programao, fazendo, assim uma
fcil traduo de um algoritmo para sua implementao.




Prof. M.Sc. Adriano Brum Fontoura Pg. 4/27
Tcnica de resoluo por mtodo cartesiano

A famosa frase de Descartes Dividir para conquistar muito importante dentro da programao. um
mtodo que ataca um grande problema, de difcil soluo, dividindo-o em problemas menores, de soluo
mais fcil. Se necessrio, pode-se dividir novamente as partes no compreendidas.
Esse mtodo pode ser esquematizado em passos:
I. Dividir o problema em partes;
II. Analisar a diviso e garantir a coerncia entre as partes;
III. Reaplicar o mtodo, se necessrio.
Por Exemplo: A soluo de:
a
ac b b
2
4
2


Planejamento reverso

Consiste em a partir do resultado final, determinar quais so os componentes bsicos. Ou seja, a partir
da sada desejada, devemos poder determinar, reversamente, quais so os componentes da entrada de
dados necessrios.
Por Exemplo: algoritmo que calcule o juro de um dado valor, onde partimos do valor final a nossa analise.

Mtodo para constru um algoritmo

Utilizando os conceitos j desenvolvidos, esquematizaremos um mtodo para construir um algoritmo
logicamente correto:

A. Identificar o problema: Deve-se ler o enunciado de um exerccio quantas vezes for necessrio, at
compreende-lo completamente. A maior parte da resoluo de um exerccio consiste na compreenso
completa do enunciado.

B. Identificar a Entrada de Dados: Retirar a relao das entradas de dados do enunciado,
descobrirmos quais so os dados que devem ser fornecidos ao programa, via teclado, a partir dos quais
so desenvolvidos os processamentos necessrios.

C. Identificar a Sada de Dados: Atravs do enunciado podemos descobrir quais so as informaes
que devem ser mostradas, ou seja, a relao de sadas de dados para compor o resultado final, objetivo
do algoritmo.

D. Identificar o Processamento: Determinar o que deve ser feito para transformar as entradas nas
sadas especificadas.
Nessa fase que teremos a construo do algoritmo propriamente dito. Devemos determinar qual
seqncia de passos ou aes capaz de transformar um conjunto de dados nas informaes de
resultado. Para isso utilizarmos os fatores descritos anteriormente, tais como legibilidade, portabilidade,
mtodo cartesiano e planejamento reverso, e finalmente podemos construir o algoritmo.








Formas de Representao de Algoritmos

Algumas formas de representao de algoritmos tratam o problema apenas em um nvel lgico,
abstraindo-se de detalhes de implementao muitas vezes relacionados com uma linguagem de
programao especifica. Por outro lado existem formas de representao de algoritmos que possuem
O que preciso?
(entrada)
Como chegar ao que
quero?
(Processamento)
O que quero?
(Sada)
Prof. M.Sc. Adriano Brum Fontoura Pg. 5/27
uma maior riqueza de detalhes e muitas vezes acabam por obscurecer a idia principal, o algoritmo,
dificultando seu entendimento
Dentre estas formas as mais conhecidas so:
Descrio Narrativa
Diagrama de Nassi-Shneidermam ou Diagrama de Chapin
Fluxograma / Diagrama de blocos
Pseudocdigo /Portugus Estruturado (Portugol)

Descrio Narrativa

Nesta forma de representao os algoritmos so expressos diretamente em linguagem natural. Como por
exemplo, o algoritmo da troca de um pneu.
1. Afrouxar os parafusos;
2. Suspender o carro;
3. Retirar as porcas e o pneu;
4. Colocar pneu reserva;
5. Apertar as porcas;
6. Abaixar o carro;
7. Dar o aperto final nas porcas.
Esta representao pouco usada na prtica, devido ao fato que a utilizao da linguagem natural
muitas vezes d oportunidade a ms interpretaes, ambigidade e imprecises.



Diagrama de Nassi-Shneiderman

O diagrama foi desenvolvido por Nassi e Shneidermam e ampliado por Ned Chapin, os quais resolveram
substituir o diagrama de blocos tradicional por um diagrama de quadros que permite apresentar uma
viso hierrquica e estruturada da lgica do programa.
Esta ferramenta de representao oferece grande clareza para a representao de sequenciao,
seleo e repetio num algoritmo, utilizando-se de uma simbologia prpria. A idia bsica deste
diagrama representar as aes de um algoritmo dentro de um nico retngulo, subdividido-o em
retngulos menores, que representam os diferentes blocos de seqncia de aes do algoritmo. Seleo
e repetio tambm so representadas de forma grfica, dentro dos retngulos.

Seqncia

ao-1
ao-2
ao-n

Seleo









Repetio (teste inicial)







Repetio (teste final)



condio
V F
aes aes
Aes
Repetir at condio
Aes
Enquanto condio faa
Prof. M.Sc. Adriano Brum Fontoura Pg. 6/27
Exemplo:















Embora os diagramas N-S ofeream uma representao muito clara do algoritmo, medida que os
algoritmos vo se tornando mais complexos, fica difcil realizar os desenhos necessrios numa nica
pgina, prejudicando a sua visualizao.

Fluxograma

O fluxograma foi utilizado por muito tempo para a representao de algoritmos. No entanto, o seu grande
problema permitir o desenvolvimento de algoritmos no estruturados. Com o advento das linguagens de
programao estruturada o fluxograma caiu em desuso. O fluxograma utiliza-se de smbolos especficos
para a representao de algoritmos. Existe uma certa variao na simbologia empregada, apresentamos
a seguir uma simbologia tradicionalmente usada:


Exemplo de Representao com Fluxograma:



























Incio
Fim Fim da lista de
alunos ?
Sim

No
nota1
nota2
mdia = (nota1 + nota2) /2

mdia >= 5,0
Sim
No
Aluno
aprovado
Aluno
reprovado

Escrita
Conector
Processo
Deciso
Leitura
Terminal
Setas de fluxo
de controle

Enquanto no for fim da lista de alunos
Leia nota1
Leia nota2
mdia = (nota1 + nota2) / 2
mdia >= 5,0
V F
Escreva
Aluno aprovado
Escreva
Aluno reprovado
Prof. M.Sc. Adriano Brum Fontoura Pg. 7/27


Desenvolvimento top-down

Para resolver um diagrama correto, devemos considerar como procedimentos prioritrios os itens
seguintes:
I. Os diagramas devem ser feitos e quebrados em vrios nveis. Os primeiros devem conter apenas
as idias gerais, deixando para as etapas posteriores os detalhamentos necessrios;

II. Para o desenvolvimento correto de um diagrama de bloco, sempre que possvel, deve ser
desenvolvido de cima para baixo e da esquerda para direita;

III. incorreto e proibido ocorrer cruzamento das linhas de fluxo de dados.

A seguir ser abordada a segunda etapa que apresenta o detalhamento no que se refere entrada e
sada de dados do diagrama de bloco da Figura1.














.



































Figura 4 Diagrama c/ entrada de notas e sada se houver
aprovao
Figura 5 Uso de uma condio em diagrama de bloco

Particularidade entre lgica

As representaes grficas de um diagrama de blocos podem ser feitas de vrias maneiras e possurem
estruturas diferenciadas.

Lineares

A tcnica lgica linear conhecida como um modelo tradicional de desenvolvimento e resoluo de um
problema. No est ligada a regra de hierarquia ou de estruturas de linguagens especificas de
programao de computadores. Devemos entender que este tipo de procedimento est voltado tcnica
matemtica, a qual permite determinar a atribuio de recursos limitados, utilizando uma coleo de
Entrada com 4
notas
Calcular a mdia e
determinar a
aprovao
Apresentar
se houve
ou no
aprovao
Incio
Fim
Entrada com 4
notas

Calcular a mdia
Reprovado
Incio
Fim
Mdia
>=7
Aprovado
N
S
Prof. M.Sc. Adriano Brum Fontoura Pg. 8/27
elementos organizados ou ordenados por uma s propriedade, de tal forma que cada um deles seja
executado passo a passo de cima para baixo, em que tenha um s predecessor e um s sucessor.
Afigura 2.6 apresenta um exemplo deste tipo de lgica.




















Figura 6: Exemplo de lgica linear

Estruturada

A tcnica da lgica estruturada a mais usada pelos profissionais de processamento eletrnico de
dados. Possui caractersticas e padres particulares, os quais diferem dos modelos das linguagens
elaboradas por seus fabricantes. Tem como pontos fortes para elaborao futura de um programa,
produzi-lo com alta qualidade e baixo custo.

A seqncia, a seleo e a interao so as trs estruturas bsicas para a construo do diagrama de
blocos. A figura 2.7 seguinte apresenta um exemplo do tipo de lgica estruturada.




Figura 7: Exemplo de lgica estruturada

Modular

A tcnica de a lgica modular deve ser elaborada como uma estrutura de partes independentes,
denominada de mdulos, cujo procedimento controlado por um conjunto de regras. Segundo James
Martin, suas metas so as seguintes:

Decompor um diagrama em partes independentes;
Dividir um problema complexo em problemas menores ou mais simples
Verificar a correo de um modulo de blocos, independentemente de sua utilizao como uma
unidade de um processo maior.

A modularizao deve ser desenvolvida, se possvel, em diferentes nveis. Poder ser utilizada para
separar um problema em sistemas, um sistema em programas e um programa em mdulos.



N
S
Prof. M.Sc. Adriano Brum Fontoura Pg. 9/27










OU






Figura 8: Exemplos de lgica modular


Portugus estruturado

Como foi visto at agora, o diagrama de blocos a forma mais utilizada de notao grfica, mas existe
outra, que uma tcnica narrativa denominada pseudocdigo, tambm conhecida como portugus
estruturado ou chamada por alguns de portugol.

Est tcnica de algoritmizao baseada em uma PDL Program Design Language ( Linguagem de
Projeto de Programao). A forma original de escrita conhecida como ingls estruturado, muito
parecida com a notao da linguagem PASCAL. A PDL (neste caso, o portugus estruturado) usada
como referncia gentica para uma linguagem de projeto de programao, tendo como finalidade mostrar
uma notao para elaborao de algoritmos, os quais sero utilizados na definio, criao e
desenvolvimento de uma linguagem computacional (Clipper, C, Pascal, Delphi, Visual-Objects) e sua
documentao. Abaixo, apresentado um exemplo deste tipo de algoritmo.

Estrutura Bsica de um Algoritmo

PDL Program Design Language ou Portugus Estruturado (Portugol)
Problema: Elabore um algoritmo que resolva o calculo da mdia, segundo a formula Media igual a soma das
nota1 e nota2 dividido por dois.
algoritmo "segundo"
var
N1,N2, soma, media: real
Inicio
escreva("Informe a Nota 1:") {comando que exibe uma mensagem da tela}
leia(n1) {Comando que realiza a leitura das variveis, entrada de dados}
escreva("Informe a Nota 2:")
leia(n2)
soma := n1 + n2
media := soma/2
Escreva(media) {Comando que mostrado a resultado final, sada de dados}
Fimalgoritmo
Linguagem C
#include <stdio.h>
int main()
{
float n1,n2,soma,media; // Declara as variveis
printf(" Informe Nota 1 "); // Exibe uma mensagem na tela
scanf("%f",&n1); // L um valor para uma varivel
printf(" Informe Nota 2 ");
scanf("%f",&n2);
Entrada de
dados
Processo de
transformao
Dados de Sada
Rotina A
Rotina B
Rotina A
Prof. M.Sc. Adriano Brum Fontoura Pg. 10/27
soma=n1+n2; //Formula da soma
media=soma/2; //Formula da mdia
printf(" Media = %f \n",media);
system("pause"); // Aguarda o usurio teclar algo para sair do programa
return(0);
}

A diferena entre uma linguagem de programao de alto nvel utilizada em computao e uma em PDL
que esta (seja escrita em portugus, ingls ou qualquer outro idioma) no pode ser compilada em um
computador (por enquanto).Porm existem Processadores de PDL que possibilitam traduzir essa
linguagem numa representao grfica de projeto.

Constantes

Entende-se por uma informao constante, aquela que no sofre nenhuma alterao no decorrer do
tempo, ou seja, da execuo do algoritmo. Por exemplo, na frmula a seguir.

Algoritmo Teste"
Cont {constante}
Pi:= 3,14159
Inicio
<comandos>
Fim

Variveis

Tem-se como definio de variveis, tudo aquilo que sujeito a variaes. Variveis so espaos de
memria que so alocados para armazenar informaes. Por que se precisa de variveis?

R. Para armazenar valores que sero utilizados posteriormente. Ex: em um calculo, onde resultados
intermedirios podem ser armazenados e posteriormente processados para se obter o resultado final.

Imagine que a memria de um computador um grande armrio com diversas gavetas, onde cada
gaveta pode conter somente um valor (numrico, caractere ou lgico). Deve-se concordar que
necessrio identificar cada gaveta, para sua posterior utilizao, atravs do nome.


raio
rea
2
. =
rea da Circunferncia


2
.altura base
are =
rea de um tringulo

PDL Program Design Language ou Portugus Estruturado (Portugol)
lgoritmo "terceiro"
// Funo : circunferencia;
// Autor : Adriano
// Data : 12/2/2008
// Seo de Declaraes
var
P, area, raio: real
inicio
P <- 3.14159 //Constante
Leia(raio)
area := pi * (raio * raio)
Escreval(area)
fimalgoritmo
algoritmo "Quarto"
// Funo : triangulo;
// Autor : Adriano
// Data : 12/2/2008
// Seo de Declaraes
Var
base, alt, area :real
Inicio
escreva("Informe a base ")
leia (base)
escreva("Informe a altura ")
leia (alt)
area <-(base * alt) /2 //constante
escreva("Area do triangulo = ",area)
Prof. M.Sc. Adriano Brum Fontoura Pg. 11/27
fimalgoritmo
Linguagem Pascal Lingagem C
Program circunf;
Cont
Pi:= 3,14159;
Var
area, raio: real; constante
Begin
Write(Informe o raio);
Raed(raio);
area := pi * (raio * raio);
Write(Area = ,area);
End.
#include <stdio.h>
#define pi 3.14159
int main() Constante
{
float area,raio;
printf(" Informe o raio ");
scanf("%f",&raio);
area=pi*(raio*raio);
printf(" Area = %f \n",area);
system("pause");
return(0);
}


Tipos Primitivos de Dados

Podemos classificar os tipo de dados a serem processados, de forma resumida, como dados e
instrues.

Inteiro
Toda e qualquer informao numrica que pertena ao conjunto dos nmeros inteiros (negativa nula ou
positiva). Exs: 39, 0, -56, entre outros.
a)Ele tem 15 irmos. b)A temperatura desta noite ser de 2 graus

Real
Toda e qualquer informao numrica que pertena ao conjunto dos nmeros reais (negativa, nula ou
positiva, inteiro ou fracionrio). Exs:-4, 3, 0, 35, 1,23
a)Ela tem 1,73 metro de altura b) Meu saldo bancrio de - R$ 121,07.

Caractere
So caracterizadas como tipo caracteres, as seqncias contendo letras, nmeros e smbolos especiais.
Uma seqncia de caracteres deve ser indicada entre aspas( ). Este tipo de dado tambm conhecido
como alfanumrico, string, literal ou texto. Exs: Rua Alfa,52 Apto1, Fone: 574-9988
a)Constava na prova: Use somente caneta!.

Lgico
So caractersticos tipos lgicos, os dados com valores verdadeiro e falso, sendo que este tipo de dado
poder representar apenas um dos dois valores. Ele chamado por alguns de tipo boleano, devido a
contribuio do filsofo e matemtico ingls George Boole na rea da lgica matemtica. Os dados do
tipo lgico, podero ser apresentados e delineados pelo caractere ponto(.) ou no. Exs.Falso., FALSO
ou .f. (para o valor lgico :falso) e .Verdadeiro. VERDADEIRO ou.v. (para valor lgico : verdadeiro).
a) A porta pode estar aberta ou fechada
Tipo Exemplo Basic(VB) Pascal/Delphi Java/C++
Inteiro 2; 45; 100 Integer Integer Int
Real 2,456; 101,19 Single Real Float
Caractere/String A; 4; Oi Byte / String Char / String Char / String
Lgico Verdadeiro; Falso; .v.; .f. True / False True / False True / False
Prof. M.Sc. Adriano Brum Fontoura Pg. 12/27


Nomenclatura e declarao de variveis

O nome de uma varivel faz referncia ao endereo de memria onde essa varivel se encontra. Existem
algumas regras para utilizao das variveis:
Nome de varivel pode ter 1 o u mais caracteres
O primeiro caractere de uma varivel sempre deve ser uma letra
Nenhuma varivel pode ter espaos em branco em seu nome
Nenhum nome de varivel pode ser uma palavra reservada a uma instruo da linguagem usada
Podero ser utilizadas somente letras, letras e nmeros
Procure sempre utilizar variveis que tenham sentido (Mnemnico). Ex: Alt_homem ao invs de x

Linguagens Variveis X Variveis Y
Visual Basic / Basic Dim X as integer Dim Y as single
Pascal / Delphi X: integer; Y:real;
Java/C# / C++ Int X; Float Y;


Atribuio de vaiveis

O comando de (=, :=, ou ) permite fornecer um valor a uma certa varivel, onde o tipo de
informao deve ser compatvel com o tipo de varivel utilizada, ou seja, somente podemos atribuir
Pedro a uma varivel do tipo caractere. Exs: a:=mesa, b:=2+5-X, c:= -5,4-b

Quando uma varivel declarada (criada) qual o seu valor inicial?
R: no se pode saber o valor inicial da varivel, pois na memria existem vrias informaes
armazenadas, muitas podem estar sendo utilizadas pelo computador, mas podem existir espaos em que
foram armazenadas informaes anteriores, mas que no esto mais em uso. Esses espaos, mesmo
com informaes uma nova varivel pode ser criada, e seu valor ser um lixo qualquer da memria.
Mas uma pode ser criada em um espao vazio da memria, nesse caso seu valor ser nulo. Para
resolver esse problema, o valor inicial da varivel, algumas linguagens inicializam suas variveis com 0
(zero) ou nulo.
Suponha que fossem atribudos os seguintes valores s seguintes variveis:
A:= mesa, B:=0, C:=2, D:=-5.4, E:=Joo, E:=5.656

Veja abaixo como poderia ficar a memria do computador:
1 2 mesa 0
C:\ 125
BA TXT
-5.4 XYz 2
Joo 30 5.656

Utilizado No vazio, no em uso (lixo) Vazio, no utilizado

Expresses matemticas ou frmulas matemticas

Uma expresso matemtica apresentada como: X = {43 . [55 : (30+2)]} nos algoritmos deve ser
apresentada como: x := (43 * (55 / (30+2 )))
Uma frmula que matematicamente representada como:
2
.altura base
are = nos algoritmos deve ser
apresentada como: rea := (base * alt) / 2
Prof. M.Sc. Adriano Brum Fontoura Pg. 13/27


Instrues Bsicas ou Comandos Bsicos






Formato do Programa
Vejamos um primeiro programa em C:
main ()
{
printf ("Ola! Eu estou vivo!\n");
}
O programa inicia com a funo main, e o corpo do programa fica entre chaves { }. Compilando e executando
este programa voc ver que ele coloca a mensagem Ola! Eu estou vivo! na tela.

Comandos de entrada e sada
Todo o programa de computador salvo algumas excees, consistem de trs etapas ou pontos de
trabalho: Entrada de dados, Processamento e Sada dos dados.

A entrada de dados e representada pela instruo: scanf()
scanf (string-de-controle,lista-de-argumentos);
scanf(%d,idade)
scanf(<parametro>,<parametro>)

A sada de dados e representada pela instruo: printf()
printf (string_de_controle,lista_de_argumentos);
printf(%d,A);
printf(<mensagem>,<varivel>);
printf (O valor resultante : %f,B);
Exemplo
1. #include <stdio.h>
2. void main()
3. {
4. int x;
5. scanf("%d",&x);
6. printf("%d",x);
7. }
Linha 1: diz ao compilador que ele deve incluir o arquivo-cabealho stdio.h, pois neste arquivo existem
declaraes de funes teis para entrada e sada de dados.
Linha 4: declara uma variavel para armazenar a informao digitado pelo usurio.
Linha 5: Ler do teclado o valor informado pelo usurio.
Linha 6: Coloca o valor da varivel x na tela do computador.
Linhas 3 e 7: Abrem e fecham o corpo do programa.
A partir deste momento, vamos aprender os conceitos e comandos bsicos da linguagem de
programao C, que ser utilizada nesta disciplina com a finalidade de desenvolver a
lgica de programao.
Dois pontos importantes so, sabermos a sintaxe dos comandos e entender a semntica dos
mesmos, pois isto tornar o processo de aprendizagem mais fcil e rpido
Prof. M.Sc. Adriano Brum Fontoura Pg. 14/27

A entrada de dados e representada pela instruo (lendo string): gets()
gets(<varivel>);
gets(nome);
Pede ao usurio que entre uma string, que ser armazenada na string nome.
Exemplo
1. #include <stdio.h>
2. void main()
3. {
4. char buffer[10];
5. printf("Entre com o seu nome");
6. gets(buffer);
7. printf("O nome : %s", buffer);
8. system(pause);
9. }
Linha 4: Declara uma varivel do tipo string
Linha 6: L uma varivel do tipo string
Linha 7: Exibe a varivel do tipo string, utilizando a formatao %s para exibir strings
Linha 8: O comendo system(pause) aguarda at que se tecle algo para continuar/finalizar o programa

Operadores aritmticos

So classificados em duas categorias:
Unrios: quando atua na inverso de um valor, atribuindo o sinal positivo ou negativo.
Binrio: Quando atua em operaes de expomemciao, multiplicao, adio, subtrao.
Na resoluo das expresses aritmticas, as operaes tm uma hierarquia entre si. Para operaes de
mesma prioridade, seguimos a ordem especificada, isto , primeiro resolvemos os operadores mais
esquerda e, depois, os mais direita da expresso. Para alterar a prioridade da tabela, utilizamos
parnteses mais internos.

Operador Operao Tipo Prioridade de operao
+
Manuteno do sinal Unrio 1
-
Inverso de sinal Unrio 1
** Exponenciao Binrio 2
/
Diviso Binrio 3
*
Multiplicao Binrio 3
+
Adio Binrio 4
-
Subtrao Binrio 4


Prof. M.Sc. Adriano Brum Fontoura Pg. 15/27
Expresses lgicas

Operadores relacionais
So utilizados para relacionar as variveis ou expresses, resultando num valor lgico (Verdadeiro ou
Falso), sendo eles:

= == = - igual <> - diferente
< - menor > - maior
<=- menor ou igual >= - maior ou igual

EXS: AS VARIVEIS A E B TEM OS SEGUINTES VALORES: A:=5, B := 8

Teste Resposta Teste Resposta
A > B (falso) A < B (verdadeiro)
A <= B (verdadeiro) A = B (falso)
A <> 15 (verdadeiro) B = 2 (falso)

Operadores lgicos
Os operadores lgicos permitem trabalhar com o relacionamento de duas ou mais condies, ao mesmo
tempo, ou seja, efetuando testes mltiplos. Neste caso se torna necessrio trabalhar com operadores
lgicos ou boleanos. Os lgicos so trs: e, ou, no

Operado e (and): Tambm chamado de conjuno. Neste caso, todas as expresses condicionais
componentes de uma conjuno, ou seja, de um conjunto de testes, devem ser verdadeiras para que a
expresso resultante tenha valor verdadeiro.

Condio I Condio II Resultado
Verdadeira Verdadeira V
Verdadeira Falsa F
Falsa Verdadeira F
Falsa Falsa F

OPERADOR OU (OR): TAMBM CHAMADO DE DISJUNO. NESTE CASO QUANDO QUALQUER UMA DAS EXPRESSES
COMPONENTES DA DISJUNO FOR VERDADEIRA, A EXPRESSO RESULTANTE TER VALOR VERDADEIRO.

Condio I Condio II Resultado
Verdadeira Verdadeira V
Verdadeira Falsa V
Falsa Verdadeira V
Falsa Falsa F


Prof. M.Sc. Adriano Brum Fontoura Pg. 16/27
Operador no (not): Tambm chamada de negao. Neste caso, a negao apenas inverte o valor
verdadeiro da expresso. Se X for falso, no X verdadeiro.
Condio I Resultado
Verdadeira F
Falsa V


Exemplos:
a) 3 > 6 ou 4 < 5
F ou V
Resultado: V
b) 4 < 7 e 5 > 9
V e F
Resultado: F

Estruturas de Controle
Uma estrutura de controle permite a escolha de um ou um grupo de aes a ser executado quando
determinada condio for ou no satisfeita. Essas condies so representadas por expresses lgicas
ou relacionais.

Desvio condicional

Simples (if... )
Quando necessitamos testar uma condio antes de executar uma ao, utilizamos um desvio
condicional simples. Veja o modelo:

se <expresso-lgica> entao
<seqncia-de-comandos>
fimse

if (condio)
declarao;
#include <stdio.h>
int main ()
{
int num;
printf ("Digite um numero: ");
scanf ("%d",&num);
if (num>10)
printf ("\n\nO numero e maior que 10");
if (num==10)
{
printf ("\n\nVoce acertou!\n");
printf ("O numero e igual a 10.");
}
if (num<10)
printf ("\n\nO numero e menor que 10");
system(pause);
return(0);
}

Composto (if ... else...)
O desvio condicional Se quando o seu resultado do teste for VERDADEIRO, todos os comandos da
<seqncia-de-comandos-1> so executados. Se o resultado for FALSO, os comando da <seqncia-de-
comandos-2> que sero executados.. Veja o modelo:

se <expresso-lgica> entao
<seqncia-de-comandos-1>
senao
<seqncia-de-comandos-2>
fimse
if (condio)
declarao_1;
else
declarao_2;
Prof. M.Sc. Adriano Brum Fontoura Pg. 17/27
Exerccio Faa o algoritmo
#include <stdio.h>
int main ()
{
int num;
printf ("Digite um numero: ");
scanf ("%d",&num);
if (num==10)
{
printf ("\n\nVoce acertou!\n");
printf ("O numero e igual a 10.\n");
}
else
{
printf ("\n\nVoce errou!\n");
printf ("O numero e diferente de 10.\n");
}
return(0);
}

Composto encadeados (if ...else...)
Existem situaes em que necessrio estabelecer verificaes sucessivas. Quando uma ao
executada, ela poder ainda estabelecer novas condies, isso significa condies dentro de condies.
Esse tipo de estrutura poder ter diversos nveis de condio, sendo chamados de aninhamento ou
encadeamento. O encadeamento pode ser tanto para uma condio verdadeira como falsa.
Exemplo:
#include <stdio.h>
void main ()
{
int num;
printf ("Digite um numero: ");
scanf ("%d",&num);
if (num>10)
printf ("\n\n O numero e maior que 10");
else
if (num==10)
{
printf ("\n\n Voce acertou!\n");
printf ("O numero e igual a 10.");
}
else
if (num<10)
printf ("\n\n O numero e menor que 10");
system(pause);
}


Mltiplas opes

Outro comumente utilizado, alm do se... ento seno fim_se, quando h mais de duas situaes a
serem testadas, o comando switch.

escolha <expresso-de-seleo>
caso <exp11>, <exp12>, ..., <exp1n>
<seqncia-de-comandos-1>
caso <exp21>, <exp22>, ..., <exp2n>
<seqncia-de-comandos-2>
...
outrocaso
<seqncia-de-comandos-extra>
fimescolha
switch (varivel)
{
case constante_1:
declarao_1;
break;
case constante_2:
declarao_2;
break;
.
.
.
case constante_n:
Prof. M.Sc. Adriano Brum Fontoura Pg. 18/27
declarao_n;
break;
default
declarao_default;
}

#include <stdio.h>
Void main ()
{
int num;
printf ("Digite um numero: ");
scanf ("%d",&num);
switch (num)
{
case 9:
printf ("\n\nO numero e igual a 9.\n");
break;
case 10:
printf ("\n\nO numero e igual a 10.\n");
break;
case 11:
printf ("\n\nO numero e igual a 11.\n");
break;
default:
printf ("\n\nO numero nao e nem 9 nem 10 nem 11.\n");
}
}

Laos ou malhas de repetio

Quando uma seqncia de comandos deve ser executada repetidas vezes, tem-se uma estrutura de
repetio. Esta estrutura, assim como a de deciso, envolve sempre a avaliao de uma condio.
Repetio determinada (for... )
Na repetio determinada o algoritmo apresenta previamente a quantidade de repeties.
for (inicializao; condio; incremento)
declarao;
1. #include <stdio.h>
2. void main ()
3. {
4. int count;
5. for (count=1; count<=100; count++)
6. printf ("%d ",count);
7. system(cause);
8. }

Linha 5: O comando for composto por trs argumentos sendo eles: for (inicializao; condio; incremento
Inicializao: Inicializa a varivel, ou seja, o valor ao qual iniciar o incrementou ou decremento.
Condio: onde se realiza o teste para finalizar o looping
Incremento/Decremento: onde soma-se um valor ao contador ou subtrai-se no caso do decremento

OBS: A repetio por padro determina o passo do valor inicial at o valor final como sendo 1.
Determinadas linguagens possuem passo 1 ou permitem que o programador defina o passo.




Prof. M.Sc. Adriano Brum Fontoura Pg. 19/27
Repetio Indeterminada c/ validao inicial (while... )

usada para repetir N vezes uma ou mais instrues. Tendo como vantagem o fato de no ser
necessrio o conhecimento prvio do nmero de repeties.

enquanto <expresso-lgica> faca
<seqncia-de-comandos>
fimenquanto

while (condio) declarao;
#include <stdio.h>
void main ()
{
int i = 0;
while ( i < 100) // Inicia o lao com um teste inicial I tem que ser menor que 100
{
printf(" %d", i);
i++; // Incrementa (soma) 1 a varivel i
}
system(pause);
}

Repetio Indeterminada c/ validao final (do ...while )

Assim como a estrutura ENQUANTO usada para repetir N vezes uma ou mais instrues. Sua
validao final fazendo com que a repetio seja executada pelo menos uma vez.
repita
<seqncia-de-comandos>
ate <expresso-lgica>

do
{
declarao;
} while (condio);

#include <stdio.h>
void main(){
int i=0;
do{
printf("\n\n Escolha sua fruta pelo numero\n\n "
"\t (1)...Mamao\n"
"\t (2)...Abacaxi\n"
"\t (4)...Sair\n");
scanf("%d",&i);
switch(i){
case 1:
printf("\t\t Voce escolheu Mamao \n ");
break;
case 2:
printf("\t\t Voce escolheu Abacaxi \n ");
break;
case 4:
printf("\t\t Saida! \n ");
return(0);
default:
printf("\t\t Opcao invalida \n ");
break;
}
getch();
system("cls");
}while((i>=1)||(i<=4));
printf(" \n F I M \n");
getch();
}
Prof. M.Sc. Adriano Brum Fontoura Pg. 20/27


O Comando break
Ns j vimos dois usos para o comando break: interrompendo os comandos switch e for. Na
verdade, estes so os dois usos do comando break: ele pode quebrar a execuo de um comando (como
no caso do switch) ou interromper a execuo de qualquer loop (como no caso do for, do while ou do do
while). O break faz com que a execuo do programa continue na primeira linha seguinte ao loop ou
bloco que est sendo interrompido.

Contadores e Acumuladores

Contadores

uma varivel de controle, inteira, que serve para controlar quantas vezes um determinado trecho do
algoritmo (programa) foi executado. Por exemplo: um programa que leia 100 valores, podendo eles
serem somente negativos ou positivos (desconsiderando os valores nulos). A seguir, considere que o
programa deva mostrar a quantidade de valores positivos digitados. Nesse caso, devemos fazer um teste
a cada leitura, e no caso do valor ser positivo, adicionar +1 para a varivel contador ( contp := contp + 1 ).

Acumuladores

uma varivel de controle, inteira, que serve para acumular valores. Considere que um programa, alm
de ler 100 valores e mostrar a quantidade de nmeros positivos, deva mostra o somatrio destes valores.


Estruturas de Dados

Temos os seguintes tipos de dados bsicos: numrico (inteiros, reais), lgico e caractere. Baseando-se
nestes tipos bsicos podemos construir tipos compostos. Os tipos compostos dividem-se em:
Homogneo (vetores e matrizes) e Heterogneos (registros)

Tipos de dados homogneos
A utilizao deste tipo de estrutura de dados recebe diversos nomes, como: variveis indexadas,
variveis compostas, variveis subscritas, arranjos, vetores, matrizes, tabelas de memria ou array
(ingls). Para simplificar chamaremos de vetores e matrizes. Vetores ou Matrizes s permitem trabalhar
com um nico tipo de dado, a nica forma de trabalhamos com dados de tipos diferentes trabalharmos
com duas matrizes ou dois vetores.

Vetores: so as variveis compostas unidimensionais.
Matrizes: So as variveis compostas multidimensionais.

Vetores

Para definirmos o tipo do vetor seguimos a seguinte regra sinttica:
tipo_da_varivel nome_da_varivel [tamanho];
Exs: Um vetor de 8 posies reais poderia ser declarado da seguinte forma:
Int notas: vetor[8] ;

Com o conhecimento adquirido at o presente momento, poderemos elaborar um programa que:
Declare um vetor
Exiba o vetor.
Leia os dados e armazena nas respectivas posies do vetor
Exiba os dados armazenados no vetor.
Prof. M.Sc. Adriano Brum Fontoura Pg. 21/27

Como seria este algoritmo utilizando vetor em sua construo:
#INCLUDE <STDIO.H>

VOID MAIN(VOID){
INT VETOR[3] ={0,0,0}; // DECLARA UM VETOR DE TAMANHO 3
INT CONTADOR;
// EXIBE O VETOR SEM DADOS
//COMO O COMANDO FOR (INCIA DA POSIO ZERO, TESTA SE O CONTADOR TEM VALOR MENOR QUE 3,
INCREMENTA O CONTADO)
FOR(CONTADOR=0; CONTADOR<3; CONTADOR++)
PRINTF("\N EXIBE O POSICAO VETOR[%D] DADO INSERIDO: %D ",CONTADOR,VETOR[CONTADOR]);

// INSER DADOS EM UM VETOR
FOR(CONTADOR=0; CONTADOR<3; CONTADOR++){
PRINTF("\NINFORME UM VALOR INTEIRO NA POSICAO %D: ",CONTADOR);
SCANF("%D",&VETOR[CONTADOR]);
}
// EXIBE O VETOR COM DADOS INSERIDOS
FOR(CONTADOR=0; CONTADOR<3; CONTADOR++)
PRINTF("\N EXIBE O POSICAO VETOR[%D] DADO INSERIDO: %D ",CONTADOR,VETOR[CONTADOR]);

GETCH();
}


Matrizes

Para definirmos o tipo da matriz seguimos a regra sinttica do vetor, com um alterao que a de definir as
dimenses da matriz. A matriz mais comum a de duas dimenses, composta por linhas e colunas, mas
vale ressaltar que em algum momento pode ser necessrio trabalhar com matrizes de 3 ou mais
dimenses. Na definio, tambm necessrio informar o nmero de linhas e o nmero de colunas que a
matriz ter.
tipo_da_varivel nome_da_varivel Linhas][columas];

Vejamos como acessar (preencher) os valores na matriz, ou seja, o processo de armazenamento das
informaes.

#include <stdio.h>
#define NLIN 2 //nmero de linhas
#define NCOL 4 // nmero de colunas
void main(){
int Matriz[NLIN][NCOL]; // declara a matriz de inteiro
int i,j;

// Leitura dos dados
for(i=0; i < NLIN; i++)
for(j=0; j < NCOL; j++)
Matriz[i][j] = i;

// mostra os dados da matriz
for(i=0; i < NLIN; i++){
printf("\n");
for(j=0; j < NCOL; j++) {
if (i==j)
printf(" %d, ",Matriz[i][j]);
}
}
getch();
}
Prof. M.Sc. Adriano Brum Fontoura Pg. 22/27


Tipos de dados heterogneos

Registros

Esta estrutura de dados, o registro, a qual consiste em trabalhar vrios tipos de dados (campos) em uma
mesma estrutura. Por esta razo, este tipo de dado considerado heterogneo. A seguir vejamos um
exemplo do layout de um registro com suas informaes, as quais recebem o nome de campos.








O registro est formado pelos campos: Nome, Pnota, Snota, Tnota e pode ser chamado de aluno.

Declarao de um registro em C

struct aluno
{
Char nome[20];
float nota1;
float nota2;
float nota2;

}cadastro;

struct nome_do_tipo_da_estrutura
{
tipo_1 nome_1;
tipo_2 nome_2;
...
tipo_n nome_n;
} variveis_estrutura;



#include <stdio.h>
#include <string.h>
// Cria a estrutura
struct ficha_pessoal {
char nome [50];
long int telefone;
char rua [50];
int numero;
};
main (void){
struct ficha_pessoal ficha; // declara a estrutura
system("cls");
Cadastro Escolares
Nome.............:
Primeira Nota:
Segunda Nota:
Terceira Nota:
Prof. M.Sc. Adriano Brum Fontoura Pg. 23/27
printf("\n Informe o Nome:" );
gets(ficha.nome); fflush(stdin); // acessa para entrada de dados
printf("\n Infome o Telefone:");
scanf("%d",&ficha.telefone);
printf("\n Infome a Rua:");
fflush(stdin); gets(ficha.rua); fflush(stdin);
printf("\n\n EXIBE DADOS DIGITADOS \n\n");
printf("\n Nome....: %s \n",ficha.nome); // exibe os dados
printf("\n Telefone: %d \n",ficha.telefone);
system("pause");
return 0;
}


Sub-Rotinas (modularizao)

No geral, problemas complexos exigem algoritmos complexos. Mas sempre que possvel dividir um
problema grande em pequenos. Desta forma, a cada parte teremos um algoritmo mais simples e este
pequeno algoritmo chamamos de sub-rotina.

A sub-rotinas, alm de facilitar a compreenso do algoritmo, tambm possibilita que estes trechos
possam ser utilizados em outros algoritmos. Isso facilita a manuteno, pois se uma sub-rotina para
verificar se um nmero primo ou no esta incorreta, sabemos onde verificar este erro.

Quando as sub-rotinas ficam demasiadamente complexas, podemos dividi-las novamente. O processo de
diviso de sub-rotinas em outras, chamado de refinamento sucessivo.

O processo de programao torna-se bastante simples quando aplicamos algum mtodo para a utilizao
de sub-rotina. Um dos mais usados na programao estruturada Top-Down, o qual caracteriza-se
basicamente por:

Antes de iniciar o programa desejvel se ter em mente as tarefas principais que este dever
executar. No necessrio saber como funcionaro, somente saber quais so.
Deve-se ter em mente como ser o funcionamento do programa principal, o que controlar toda
as tarefas das sub-rotinas.
Tendo o programa principal definido, detalha-se as sub-rotinas. So definidos vrios algoritmos,
um para cada rotina, para que se tenha viso do que ser executado em cada mdulo do programa. Isso
tambm facilita a manuteno.

O mtodo Top-Down pode ser graficamente visualizado abixo:






Prof. M.Sc. Adriano Brum Fontoura Pg. 24/27
















Procedimentos

Procedimentos, na realidade so trechos de programas independentes que, para serem processados
devem ser referenciado (chamados) pelo programa principal. Quando uma rotina chamada, ela
executada e ao seu trmino o controle do processamento retorna automaticamente a primeira linha de
instruo aps a linha que efetuou o chamado.

Exemplo:
Introduo s Funes/procedimentos
Uma funo um bloco de cdigo de programa que pode ser usado diversas vezes em sua execuo. O uso de
funes permite que o programa fique mais legvel, mais bem estruturado. Um programa em C consiste, no fundo, de
vrias funes colocadas juntas.
Abaixo o tipo mais simples de funo:
#include <stdio.h>
void mensagem () /* Funcao simples: so imprime Ola! */
{
printf ("Ola! ");
}
void main ()
{
mensagem();
printf ("Eu estou vivo!\n");
}

Variveis globais e locais
Uma varivel considerada Global, quando declarada no incio do algoritmo principal, podendo
ser utilizada por qualquer sub-rotina subordinada a este algoritmo principal.
A varivel considerada Local, quando declarada no incio dentro de uma sub-rotina somente
vlida dentro da rotina qual est declarada. Desta forma, as demais sub-rotinas ou at mesmo o
algoritmo principal no podero fazer use desta varivel.

Parmetros formais e reais

Os parmetros tm por finalidade de servir como um ponto de comunicao bidirecional entre uma sub-
rotina e o algoritmo principal ou uma outra sub-rotina hierarquicamente de nvel mais alto. Estes
parmetros podem ser formais e reais.

Programa
Principal
Rotina 1 Rotina 2 Rotina 3
Rotina 2.1 Rotina 2.2
Rotina 3.2
Rotina 3.2.1
Prof. M.Sc. Adriano Brum Fontoura Pg. 25/27
Sero considerados Parmetros Formais quando forem declarados por meio de variveis juntamente
com a identificao do nome da sub-rotina, os quais sero tratados da mesma forma que as variveis
globais ou locais.


int square (int x) /* Calcula o quadrado de x */
{
printf ("O quadrado e %d",(x*x));
return(0);
}


Sero considerados Parmetros Reais quando substiturem os parmetros formais, quando na sua
utilizao de uma sub-rotina. Vejamos o exemplo abaixo.
...
int main ()
{
int num;
printf ("Entre com um numero: ");
scanf ("%d",&num);
printf ("\n\n");
square(num);
return(0);
}

Passagem de parmetros

A passagem dos parmetros e feita quando ocorre a troca de parmetros formais para reais. Eles podem
ser passados de duas formas: por valor ou por referncia.

Por Valor, caracteriza-se pela ao de dar apenas entrada de um tipo de dado em uma determinada sub-
rotina. Desta forma, qualquer modificao que ocorra na varivel local existente dentro da sub-rotina no
afetar o valor do parmetro passado.

Exemplo:

#include <stdio.h>
int prod (int x,int y)
{
return (x*y);
}

void main ()
{
int saida;
saida=prod (12,7);
printf ("A saida e: %d\n",saida);
}



Por Referncia, caracteriza-se pela ao de dar entrada obter sada de um tipo de dado em uma sub-
rotina. Desta forma, qualquer modificao que ocorra na varivel local afetar o valor do parmetro
passado por referncia, pois a alterao devolvida para a rotina chamadora.




Prof. M.Sc. Adriano Brum Fontoura Pg. 26/27
Exemplo:
#include <stdio.h>
int prod (int *x,int *y)
{
return (x*y);
}

int main ()
{
int sada,A=12,B=7,*px,*py;
px=&A;
py=&B;
saida=prod (&px,&py);
printf ("A saida e: %d\n",saida);
return(0);
}

Usa ponteiros.