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.
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.
#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.
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); }