Você está na página 1de 62

QI - Escola de Educao Profissional Apostila de Lgica de Programao

APOSTILA DE LGICA DE PROGRAMAO

Direitos autorais reservados : Professor Eduardo Reus Souza. Escola QI Porto Alegre

Professor: Eduardo Reus Souza

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Sumrio Aula 1 ............................................................................................................................... 6 Apresentao da Disciplina .......................................................................................... 6 1. Consideraes iniciais ...................................................................................... 6 1.1. Lgica e Lgica de Programao ................................................................. 6 1.2. Problema ....................................................................................................... 6 1.3. Algoritmo ..................................................................................................... 6 1.4. Programa....................................................................................................... 6 1.5. Formas de se representar um Algoritmo ...................................................... 6 1.6. Regras para a Criao de Algoritmos ........................................................... 7 1.7. Como proceder na construo de algoritmos? .............................................. 7 1.7.1. Leia com ateno o enunciado do problema ............................................ 7 1.7.2. Obtenha os dados de entrada .................................................................... 7 1.7.3. Obtenha os dados de sada ........................................................................ 8 1.7.4. Determinar o que deve ser feito para transformar as entradas determinadas nas sadas especificadas ..................................................................... 8 1.7.5. Testar o algoritmo..................................................................................... 8 1.8. Exerccios propostos ..................................................................................... 8 2. Variveis e Constantes de memria (RAM) ..................................................... 9 2.1. Memria ....................................................................................................... 9 2.2. Como um programa tratado na memria? ................................................. 9 2.3. Variveis ....................................................................................................... 9 2.4. Constantes..................................................................................................... 9 2.5. Regras para formao de Identificadores ..................................................... 9 2.6. Tipos de Dados ........................................................................................... 10 2.7. Principais tipos de dados utilizados na disciplina ...................................... 10 2.8. Exerccios Propostos .................................................................................. 10 Aula 2 ............................................................................................................................. 11 Comeando a programar na Linguagem C ................................................................. 11 3. Linguagens de programao ........................................................................... 11 3.1. Linguagens de Baixo Nvel ........................................................................ 11 3.2. Linguagens de Alto Nvel ........................................................................... 11 3.3. Compilador ................................................................................................. 11 3.4. Estrutura padro de um algoritmo (C) ........................................................ 11 3.5. Indentao..................................................... Erro! Indicador no definido. 3.6. Operadores aritmticos ............................................................................... 13 3.7. Regras de precedncia de operadores ......................................................... 13 3.8. Exerccios Propostos .................................................................................. 13 Aula 3 ............................................................................................................................. 14 3.9. Utilizando instrues de I/O ....................................................................... 14 3.10. Exerccios Propostos .............................................................................. 15 Aula 4 ............................................................................................................................. 17 Introduo ao DEV-C++ ............................................................................................ 17 4. Sobre o software ............................................................................................. 17 4.1. O que DEV-C++? .................................................................................... 17 4.2. Verso do DEV-C++ .................................................................................. 17 4.3. Interface do Software.................................................................................. 17 4.4. Compilando um Projeto .............................................................................. 19 4.5. Tipos de Erros............................................................................................. 21

Professor: Eduardo Reus Souza

QI - Escola de Educao Profissional Apostila de Lgica de Programao

4.6. Exerccio Proposto...................................................................................... 21 Aula 5 ............................................................................................................................. 22 Algoritmos Condicionais ............................................................................................ 22 5. Introduo ....................................................................................................... 22 5.1. Instruo IF (SE) ........................................................................................ 22 5.2. Operadores Relacionais .............................................................................. 23 5.3. Exerccios Propostos .................................................................................. 24 Aula 6 ............................................................................................................................. 25 Exerccios ................................................................................................................... 25 Aula 7 ............................................................................................................................. 26 Seleo encadeada ...................................................................................................... 26 5.4. Instruo SWITCH ..................................................................................... 27 5.5. Exerccios Propostos .................................................................................. 27 5.6. Operadores (Conectores) Lgicos .............................................................. 29 5.6.1. Operador && (E) .................................................................................... 29 5.6.2. Operador || (OU) ..................................................................................... 29 5.6.3. Operador ! (No) .................................................................................... 29 5.7. Exerccios Propostos .................................................................................. 31 Aula 8 ............................................................................................................................. 32 Aula 9 ............................................................................................................................. 33 Avaliao I.................................................................................................................. 33 6. Introduo ....................................................................................................... 33 6.1. Tipo de avaliao ........................................................................................ 33 6.2. Continuao dos exerccios ........................................................................ 33 Aula 10 ........................................................................................................................... 34 Algoritmos de Repetio (Laos Loops) ................................................................. 34 7. Introduo ....................................................................................................... 34 7.1. WHILE (ENQUANTO) ............................................................................. 34 7.2. DO WHILE (FAA ENQUANTO) ........................................................ 35 7.3. FOR (PARA) .............................................................................................. 36 7.4. Tipos de Variveis ...................................................................................... 36 7.4.1. Variveis Contadoras.............................................................................. 36 7.4.2. Variveis Acumuladoras ........................................................................ 36 7.4.3. Lixo de Memria .................................................................................... 37 7.5. Modificaes do Sinal de Atribuio ......................................................... 37 7.6. Loops Infinitos............................................................................................ 37 7.7. Exerccios Propostos .................................................................................. 37 Aula 11 ........................................................................................................................... 38 Aula 12 ........................................................................................................................... 39 Aula 13 ........................................................................................................................... 40 Aula 14 ........................................................................................................................... 41 Aula 15 ........................................................................................................................... 42 Reviso Geral Para a Prova I ...................................................................................... 42 Aula 16 ........................................................................................................................... 43 Prova I ........................................................................................................................ 43 Aula 17 ........................................................................................................................... 44 Consideraes sobre a prova ...................................................................................... 44 Aula 18 ........................................................................................................................... 45 Variveis Homogneas Unidimensionais (Vetores) ................................................... 45 8. Introduo ....................................................................................................... 45

Professor: Eduardo Reus Souza

QI - Escola de Educao Profissional Apostila de Lgica de Programao

8.1. O que so vetores? ...................................................................................... 45 8.2. Representao Grfica ................................................................................ 45 8.3. Utilidade para Vetores ................................................................................ 45 8.4. Declarando Vetores .................................................................................... 45 8.5. Exemplo Prtico ......................................................................................... 46 8.6. Exerccios Propostos .................................................................................. 47 Aula 19 ........................................................................................................................... 48 Aula 20 ........................................................................................................................... 49 Aula 21 ........................................................................................................................... 50 Variveis Homogneas Multidimensionais (Matrizes) .............................................. 50 9. Introduo ....................................................................................................... 50 9.1. O que so Matrizes? ................................................................................... 50 9.2. Representao Grfica ................................................................................ 50 9.3. Declarando Matrizes. .................................................................................. 50 9.4. Exemplo Prtico ......................................................................................... 51 9.5. Exerccios Propostos .................................................................................. 52 Aula 22 ........................................................................................................................... 53 Aula 23 ........................................................................................................................... 54 Aula 24 ........................................................................................................................... 55 Introduo a Programao Modular ........................................................................... 55 10. Introduo ................................................................................................... 55 10.1. Por que Utilizar Programao Modular? ................................................ 55 10.2. Como Implementar Programao Modular? .......................................... 55 10.2.1. Funes ................................................................................................... 55 10.2.2. Assinatura ............................................................................................... 55 10.2.3. Argumento .............................................................................................. 55 10.2.4. Parmetro ................................................................................................ 55 10.3. Exemplo Prtico ..................................................................................... 55 10.4. Escopo das Variveis Instanciamento de Variveis ............................ 57 10.5. Exerccios Propostos .............................................................................. 58 Aula 25 ........................................................................................................................... 59 10.6. Passagem de Parmetros por Valor e Referncia ................................... 59

Professor: Eduardo Reus Souza

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Introduo A disciplina introduz o estudo da programao, destacando a construo de algoritmos. Abrange os conceitos fundamentais da programao at o uso de estruturas bsicas de dados (vetores, matrizes e registros).

Professor: Eduardo Reus Souza

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 1
Apresentao da Disciplina
1. Consideraes iniciais 1.1. Lgica e Lgica de Programao
Lgica de programao a tcnica de encadear pensamentos para atingir determinado objetivo. Estes pensamentos podem ser descritos como uma seqncia de instrues que devem ser seguidas para se cumprir uma determinada tarefa. Gerando ao final o que chamamos de programa.

1.2. Problema
A definio mais simples para problema uma situao que precisa ser resolvida

1.3. Algoritmo
Algoritmo uma seqncia ordenada e finita de passos lgicos, bem definas e eficazes para a soluo de um problema em um tempo finito. Reparem que algoritmo no est diretamente relacionado informtica. Uma receita de bolo, por exemplo, seria um algoritmo que iria solucionar um problema especfico do cotidiano humano. Reparem tambm que para um problema podemos ter diversos algoritmos, e que muitas vezes, estes s funcionariam dependendo de fatores externos. Como fazer um bolo de chocolate visto que faltou luz? A soluo provavelmente ser diferente da soluo convencional.

1.4. Programa
Um programa no mais do que um algoritmo computacionalmente aplicvel. Isto , serve para resolvermos problemas exclusivos do ambiente computacional. Todo programa um algoritmo, porm nem todo algoritmo um programa.

1.5. Formas de se representar um Algoritmo


Existem vrias formas de se representar um algoritmo. Uma delas escrev-lo atravs da linguagem natural que usamos no dia-a-dia. Esta maneira, porm, podem levar a muitas ambigidades, passveis de interpretaes errneas. Outra forma de se representar os algoritmos so os fluxogramas convencionais, que usam formas geomtricas diferentes para as diversas aes. Este mtodo bastante popular pela sua facilidade de compreenso, mas um pouco limitado, preocupando-se muito com detalhes de nvel fsico da implementao do algoritmo. Outros tipos de fluxogramas mais modernos foram criados, mas no obtiveram a mesma popularidade. Na medida que os algoritmos tornaram-se muito grandes e complexos, os fluxogramas deixaram de ser utilizados para a representao da implementao, sendo direcionados para a fase de projeto do software. A terceira forma chama-se de pseudocdigo ou metalinguagem. Esta forma de representao de um algoritmo assemelha-se muito forma com que os programas so escritos e consiste na descrio dos passos do algoritmo atravs de frases construdas sob uma sintaxe rigorosamente definida. Assim, consegue-se uma descrio do

Professor: Eduardo Reus Souza

QI - Escola de Educao Profissional Apostila de Lgica de Programao

algoritmo livre de ambigidades e com uma estrutura bastante flexvel e completa, onde todos os elementos esto representados. No estudo da lgica de programao da nossa disciplina, ser utilizada a terceira forma de representao, utilizando a sintaxe da linguagem de programao C. No utilizaremos o padro de portugus estruturado para evitar que nossos algoritmos precisem ser reescritos (faa em portugus, e depois refaa na sintaxe correta da linguagem).

1.6. Regras para a Criao de Algoritmos


A criao de algoritmos computacionais obedece ao princpio da informtica. Sendo assim, sempre devemos pensar que nossas solues devem passar por trs fases distintas:

Entrada

Processamento

Sada

Onde: Entrada: So os dados que devem ser informados (pelo usurio, ou no) para que o programa possa ser executado. Processamento: So os procedimentos que devem ser empregados para solucionar o problema. Neste podemos incluir operaes matemticas, comparaes, repeties, etc. Sada: o resultado final do algoritmo que deve ser entregue a algum lugar ou algum. importante ressaltar que: A ordem das instrues devem ser levadas em considerao. No existe processamento sem a entrada de dados. A sada de dados deve ser apresentada. O nmero de instrues deve ser sempre finito. Exemplo Imagine o seguinte problema: calcular a mdia final dos alunos da 3 Srie. Os alunos realizaro quatro provas: P1, P2, P3 e P4. Onde: Mdia Final = P1 + P2 + P3 + P4 4

A entrada de dados sero as quatro notas. O processamento ser o clculo da mdia propriamente dita. A sada de dados ser a exibio dessa mdia.

1.7. Como proceder na construo de algoritmos? 1.7.1. Leia com ateno o enunciado do problema
Nessa primeira etapa devemos compreender perfeitamente o que precisamos fazer. A grande maioria dos problemas encontrados nos programas atuais ocorre por falhas na interpretao inicial do problema.

1.7.2. Obtenha os dados de entrada


Durante a leitura do problema, podemos descobrir quais so os dados que precisamos solicitar para a execuo do algoritmo. Professor: Eduardo Reus Souza 7

QI - Escola de Educao Profissional Apostila de Lgica de Programao

1.7.3. Obtenha os dados de sada


Da mesma forma que na entrada de dados, os dados de sada (qual a resposta que preciso informar) tambm pode ser descoberta lendo atentamente a definio do problema.

1.7.4. Determinar o que deve ser feito para transformar as entradas determinadas nas sadas especificadas
Nesta fase que teremos a construo do algoritmo propriamente dito, pois, a partir de alguns requisitos especificados, devemos determinar qual seqncia de aes capaz de transformar um conjunto definido de dados nas informaes de resultado.

1.7.5. Testar o algoritmo


Nesta fase devemos verificar se o algoritmo realmente resolve o problema proposto, mesmo com variaes nos dados de entrada. Essa uma das principais fases do projeto, afinal, a premissa que devemos ter em relao a um software lanado no mercado a de que este funciona. Chamamos esta etapa de teste de mesa. Vale ressaltar, que por mais exaustiva que seja a bateria de testes. Um programa nunca estar 100% imune a erros. Nessa etapa tentamos chegar o mais prximo possvel deste ndice.

1.8. Exerccios propostos


1. Especifique as aes necessrias para mover trs disco de uma Torre de Hani, que consiste de trs hastes (a - b - c), uma das quais serve de suporte para trs discos de tamanhos diferentes (1 - 2 - 3 ), os menores sobre os maiores. Pode-se mover um disco de cada vez para qualquer haste, contanto que nunca seja colocado um disco maior sobre um menor. O objetivo transferir os trs disco para outra haste.

1 2 3 a b c

2. Construa um algoritmo que informe os passos necessrios para a trocar o pneu de um carro. Tendo como situao inicial que o carro estava em movimento numa estrada, que h acostamento e espao suficiente para a troca.

Professor: Eduardo Reus Souza

QI - Escola de Educao Profissional Apostila de Lgica de Programao

2. Variveis e Constantes de memria (RAM) 2.1. Memria


Memria um dispositivo utilizado para guardar de forma temporria ou no algum tipo de informao. Quando um programa executado (tornando-se o que chamamos de processo), todo o seu contedo posto na memria RAM (Random Access Memory) do computador. Sendo que somente nela que o mesmo executado.

2.2. Como um programa tratado na memria?


Todo o programa que posto da memria RAM do computador dividido em trs reas rea de Dados rea de Cdigo Pilha Onde: rea de Dados: o local destinado para o armazenamento dos dados vindos do usurio, clculos, sadas. Enfim, o espao que o algoritmo tem para trabalhar. rea de Cdigo: o local onde est o algoritmo propriamente dito. Pilha: quem garante a continuidade do programa. Se o programam efetua saltos dentro do cdigo, a pilha que mantm a informao de onde o cdigo estava antes do salto consequentemente garantindo um retorno correto ao final do salto. Pilhas utilizam uma estrutura de dados manipulada pelo que chamamos de FIFO (First Input First Output).

2.3. Variveis
Variveis so espaos reservados (alocados) na memria RAM do computador, que devem possuir um nome e um tipo de dado, sendo que seu contedo pode sofrer alterao durante a execuo do programa. Em outras palavras, variveis so as informaes que podemos utilizar na rea de dados de um programa. Por exemplo, o Nome de um cliente, as Notas de um aluno, a Temperatura atual. Mas note que todos estes dados podem mudar a qualquer momento.

2.4. Constantes
Variveis so espaos reservados (alocados) na memria RAM do computador, que devem possuir um nome e um tipo de dado, sendo que seu contedo NO pode sofrer alterao durante a execuo do programa. Repare que a diferena entre uma varivel e uma constante na sua definio sutil, porm na prtica essa diferena muito relevante. O valor que for definido na criao (declarao) de uma constante a acompanha durante todo o ciclo de vida do processo.

2.5. Regras para formao de Identificadores


Para a criao de um identificador (nome de uma varivel ou constante, por exemplo) devemos tomar cuidado com uma srie de fatores. So eles: O nome de um identificador no pode ser iniciado por nmero. O nome de um identificador no pode conter espaos ou qualquer caracter especial, exceto o underline _.

Professor: Eduardo Reus Souza

QI - Escola de Educao Profissional Apostila de Lgica de Programao

O nome de um identificador no pode ser igual ao de qualquer palavra reservada da linguagem de programao. Procure utilizar nomes curtos, e que possuam algum significado associado ao identificador.

2.6. Tipos de Dados


Dados, so as informaes em sua forma mais bruta. Sendo que estas informaes podem ser classificadas em alguns grupos distintos Numricos: Conjunto formado pelos nmeros (inteiros, reais, etc). Alfanumricos: Conjunto formado por letras e nmeros (palavras). Lgicos: Representam apenas dois valores/estados. Verdadeiro ou Falso. Vale ressaltar que a linguagem C (no C++) no possui um tipo de dado que represente valores lgicos.

2.7. Principais tipos de dados utilizados na disciplina


Int (inteiro): Nmeros inteiros entre -32768 e 32767 Float (ponto flutuante): Nmeros reais entre 3,4E-38 e 3,4E+38 Char (caracter): Tipo alfanumrico que pode variar entre 1 e 255 caracteres, este tipo pode tambm ser referido por string. Void: Representa a no existncia de um tipo. Vale ressaltar que estes no so os nicos tipos de dados existentes na linguagem C, mas sim os que utilizaremos durante o curso de lgica de programao.

2.8. Exerccios Propostos


1. Quais dos identificadores abaixo so considerados INVLIDOS? Justifique sua resposta. a) Contas_a_pagar b) Salrio_Familia c) 1Bimestre d) Nota1 e) Endereo f) #DDD g) Telefone Residencial 2. Defina o melhor tipo de dado para cada expresso abaixo. Considerando apenas int, float e char. a) 23.56 b) minha casa azul c) 45 d) 123B56 e) -345 f) 40456 g) -34.6

Professor: Eduardo Reus Souza

10

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 2
Comeando a programar na Linguagem C
3. Linguagens de programao
Linguagem de programao uma classe de software (do mesmo jeito que editores de texto, planilhas eletrnicas, etc.) onde todos os seus representantes tm por caracterstica principal a capacidade de desenvolver novos softwares. Sendo que essa classe de software dividida em dois grandes grupos. Linguagens de alto e baixo nvel.

3.1. Linguagens de Baixo Nvel


So as linguagens que mais se aproximam do idioma da mquina. Possuem uma maior complexidade de compreenso, porm seu desempenho significativamente melhor do que as linguagens de alto nvel. Exemplos de linguagens de baixo nvel: Assembly, Fortran, Algol e C.

3.2. Linguagens de Alto Nvel


So as linguagens que mais se aproximam do idioma humano. Possuem uma complexidade de aprendizado inferior as linguagens de baixo nvel, porm possuem desempenho tambm inferior a estas. Como o idioma humano vasto, vale ressaltar que a grande maioria das linguagens de programao encontram-se no idioma Ingls. Exemplos de linguagens de alto nvel: Cobol, Clipper, Basic, Visual Basic, Pascal e Delphi.

3.3. Compilador
Compilador o nome do software responsvel pela traduo de um cdigo alto nvel para baixo nvel (para que o processador possa executar suas instrues) gerando ao final o que chamamos de arquivo executvel. Sendo que a velocidade de processamento de um programa est diretamente relacionado a qualidade deste compilador.

3.4. Estrutura padro de um algoritmo (C)


Para programarmos na linguagem C, devemos nos preocupar primeiro com a sua sintaxe bsica. Abaixo esto explicitadas algumas das principais caractersticas da linguagem. Case Sensitive: O nome de um identificador, bem como de instrues devem ser escritos da mesmo forma que foram criados, de modo que letras maisculas e minsculas fazem diferena. Utilizao de bibliotecas: Para utilizarmos alguma instruo j existente na linguagem, devemos identificar em qual biblioteca essa instruo se encontra logo no inicio do cdigo atravs da instruo include. Utilizao de um bloco principal: Todo o programa desenvolvido em C, deve possuir uma funo principal definida com o nome main. Definio de inicio e fim de bloco: Sempre que precisarmos definir inicio e fim de um bloco de instrues, utilizaremos os caracteres {}. Obs: Como utilizaremos o compilador DEV-C++ durante as aulas, algumas includes podem ter nomes diferentes das tradicionais includes do C.

Professor: Eduardo Reus Souza

11

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Exemplo de um programa #include <stdio.h> void main() { int valor1, valor2; float soma; valor1 = 23000; valor2 = 15500; soma = valor1 + valor2; } Explicando o cdigo acima Esta linha define que poderemos utilizar no nosso cdigo #include <stdio.h> fonte instrues de I/O (Entrada e Sada de dados). Define onde que o nosso programava vai comear a void main() execuo Inicio do bloco de instrues { int valor1, valor2 float soma; valor1 = 23000; valor2 = 15500; soma = valor1 + valor2; } Cria na rea de dados (declara) duas variveis de tipo inteiro com nomes valor1 e valor2. Cria na rea de dados (declara) uma varivel de tipo ponto flutuante com nome soma Atribui o valor 23000 para a varivel valor1 Atribui o valor 15500 para a varivel valor2 Soma o contedo das duas variveis e joga a resposta do clculo na varivel soma. Encerra o bloco de intrues

3.5. Endentao
Repare que o cdigo acima possui alguns espaos entre os caracteres { e } que servem para facilitar a visualizao do cdigo na busca de possveis erros. Esta tcnica chamase endentao de cdigo. Sendo vital no desenvolvimento de um programa. Na grande maioria das linguagens a endentao tem uma importncia meramente esttica, porm existem linguagens que definem inicio e fim de bloco por ela. Python seria um bom exemplo disso.

Professor: Eduardo Reus Souza

12

QI - Escola de Educao Profissional Apostila de Lgica de Programao

3.6. Operadores aritmticos


Dentro da linguagem C, utilizaremos os seguintes operadores aritmticos: Operador Nome Exemplo Resposta + Adio X=5+2 7 Subtrao X=52 3 * Multiplicao X=5*2 10 / Diviso inteira X = 5/2 2 / Diviso real X = 5.0/2.0 2.5 % Resto de uma diviso inteira X=5%2 1 pow Potenciao* X = pow(5,2) 25 sqrt Raiz quadrada* X = sqrt(25) 5 * Para que as funes pow e sqrt possam funcionar corretamente, devemos adicionar a biblioteca math.h nas includes de seu cdigo.

3.7. Regras de precedncia de operadores


As regras de precedncia matemtica entre os operadores aritmticos respeitada pelo compilador C. Sendo assim, a multiplicao e diviso so efetuadas antes da adio e subtrao, por exemplo. Se voc quiser que a regra de precedncia seja modificada, permitida a utilizao de parnteses. De modo que tudo o que estiver dentro destes parnteses sero calculados primeiro.

3.8. Exerccios Propostos


1. Faa um algoritmo que calcule a mdia entre dois valores inteiros (5 e 25). 2. Faa um algoritmo que calcule a rea de um quadrado de lado L= 10. 3. Faa um algoritmo que calcule a hipotenusa de um tringulo retngulo de catetos b=3 e c = 4. ( h

b2

c2 )

4. Faa um algoritmo que efetue as seguintes operaes: a) A vale 10 b) B vale o dobro de A c) C vale a raiz quadrada do dobro de A d) D vale a metade da raiz quadrada do dobro de A e) E vale o cubo da metade da raiz quadrada do dobro de A f) F vale a tera parte do cubo da metade da raiz quadrada do dobro de A.

Professor: Eduardo Reus Souza

13

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 3
3.9. Utilizando instrues de I/O
At o momento, nossos algoritmos apesar de funcionarem, no esto respeitando corretamente o principio da informtica (aula 1) que o da Entrada, Processamento e Sada de dados. J que: Nossa entrada de dados sempre fixa No estamos exibindo o resultado de nossos clculos para o usurio do programa. Para solucionar este problema, a linguagem C possui trs instrues para a leitura/escrita de dados, scanf, gets e printf. Onde: scanf: Utilizado para a leitura de valores numricos, sendo que sempre devemos utilizar o operador & antes da varivel de leitura. gets: Utilizado para leitura de valores alfanumricos printf: Utilizado para a escrita de valores tanto numricos quanto alfanumricos. Exemplo de utilizao #include <stdio.h> void main() { int v1, v2; float media; char nome[30]; gets(nome); scanf("%d", &v1); scanf("%d", &v2); media = (v1 + v2)/2.0; printf ("A sua media : %f", media); } Repare a maneira como foi feita a leitura das variveis nome, v1 e v2: Nome como um char, foi lida utilizando a funo gets. v1 e v2 por serem numricas, precisaram ser lidas utilizando o scanf, sendo que %d um atributo da funo que avisa o compilador que ser lido (no caso da printf, escrito) um valor de tipo de dado inteiro. A leitura da linha onde encontra-se o printf seria da seguinte forma: Escreva na tela a frase A sua mdia : juntamente com um valor de ponto flutuante, sendo que esse valor foi passado para a funo logo em seguida separado por uma vrgula. Alguns atributos importantes que podem ser utilizado nas funes scanf e printf: Atributo Utilizao Exemplo %d Leitura/escrita de dados numricos inteiros scanf(%d, &idade); %f Leitura/escrita de dados numricos reais printf(%f,salario); %s Escrita de dados do tipo char (strings) printf(%s, nome);

Professor: Eduardo Reus Souza

14

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Dentro de uma instruo printf, podemos fazer a escrita de mais valores, compondo uma sentena completa. Exemplo: printf (%s, Os valores %d e %d formam a mdia: %f, nome, v1, v2, media); Podemos tambm utilizar a funo printf para exibir mensagens para o usurio. Por exemplo, no caso anterior, seria interessante exibir uma mensagem ao usurio pedindo para que ele informe o seu nome e dois valores inteiros. O cdigo ficaria da seguinte maneira: #include <stdio.h> void main() { int v1, v2; float media; char nome[30]; printf ("Digite o seu nome: "); gets(nome); printf ("Digite o primeiro valor inteiro: "); scanf("%d", &v1); printf ("Digite o segundo valor inteiro: "); scanf("%d", &v2); media = (v1 + v2)/2.0; printf ("%s, Os valores %d e %d formam a media: %f", nome, v1, v2, media); }

3.10. Exerccios Propostos


1. Refaa as questes 1, 2 e 3 da lista anterior, utilizando agora os comandos para entrada e sada de dados. 2. Faa um algoritmo que leia trs valores reais (ponto flutuante) e calcule a sua mdia ponderada, com os respectivos pesos 2, 3 e 4 para os valores. 3. Faa um algoritmo que leia um valor inteiro e um valor real. Multiplique estes valores e exiba o resultado. 4. Faa um algoritmo que leia 4 valores reais (x1, y1, x2, y2) equivalentes a dois pares ordenados. Calcule e exiba a distncia entre estes dois pontos de acordo com a frmula abaixo:

( x2

x1 ) 2

( y2

y1 ) 2

5. Faa um algoritmo que leia trs valores reais e calcule x e x de acordo com a frmula abaixo b b2 4 * a * c x' , x" 2*a

Professor: Eduardo Reus Souza

15

QI - Escola de Educao Profissional Apostila de Lgica de Programao

6. Faa um algoritmo que leia um valor inteiro equivalente a um determinado valor em segundos. Retorne quantas horas, minutos e segundos so compostos por este valor. Por exemplo o valor 3670 (segundos) formaria 1 hora, 1 minuto e 10 segundos. 7. Faa um algoritmo que leia dois valores inteiros. Logo aps troque os valores entre estas variveis. Ou seja, o contedo da varivel 1 passar para a varivel 2 e vice e versa.

Professor: Eduardo Reus Souza

16

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 4
Introduo ao DEV-C++
4. Sobre o software 4.1. O que DEV-C++?
DEV-C++ o nome de um dos mais famosos compiladores C para a plataforma Windows, sendo que este um freeware que pode ser baixado dos mais diversos lugares. Alguns links sero escritos no apndice deste manual.

4.2. Verso do DEV-C++


Utilizaremos durante as aulas a verso 4.9.9.2 do DEV-C++

4.3. Interface do Software


Aps uma instalao simples do programa o ambiente de desenvolvimento deve ser como o mostrado abaixo:

Onde: No canto esquerdo temos o navegador de classes/projetos que ser utilizado para podermos alternar entre arquivos. Na rea superior encontram-se os principais atalhos do compilador Na parte inferior temos uma caixa de mensagens que o compilador ir exibir conforme a necessidade.

Professor: Eduardo Reus Souza

17

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Criando um novo projeto Para criarmos um novo projeto devemos acessar o menu Arquivo/Novo/Projeto...

Escolha a opo Console Application, certificando-se que a opo Projeto C esteja marcada. Voc pode definir um nome para seu projeto nesta mesma janela.

Ao clicar em OK, o compilador ir solicitar que voc salve seu projeto. Procure salvar um projeto por pasta para evitar um acumulo de arquivos, de modo que seja fcil a seleo do documento certo.

Professor: Eduardo Reus Souza

18

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Logo aps a criao do projeto. Voc estar apto para comear a programar. Repare que a interface do cdigo muito similar ao que j estamos trabalhando, de modo que apenas precisamos modificar (apagar) algumas instrues e nossa aplicao estar igual ao de nosso caderno.

Repare que existe uma linha obrigatria no final do cdigo fonte: system (pause); Onde: system(pause): Far com que o programa aps sua concluso seja fechado somente aps o pressionamento de alguma tecla. A no existncia desta linha de instruo fecharia o programa sem que o usurio tenha tempo de visualizar as respostas. Podemos utilizar qualquer instruo DOS na funo system.

4.4. Compilando um Projeto


Aps a escrita do algoritmo, finalmente a hora de testar o funcionamento do mesmo. Para isso, devemos compilar nosso projeto. Existem trs atalhos importantes que devemos saber nesse momento. Pressionar as teclas CTRL + F9: Compila o cdigo, porm no o executa. Pressionar as teclas CTRL + F10: Executa um cdigo compilado. Pressionar a tecla F9: Compila e executa o cdigo. importante ressaltar que quando um projeto for compilado, ele dever ser salvo novamente.

Professor: Eduardo Reus Souza

19

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Abaixo temos uma imagem que representa o resumo do compilador:

Repare que neste caso o compilador no encontrou nenhum erro durante a traduo do cdigo fonte. Vejamos abaixo uma situao onde existam erros de sintaxe.

No lugar do resumo de compilao, o cdigo teve uma linha destacada e na parte inferior do programa esto sendo exibidos alertas do compilador. Neste caso a informao de que o programa no conseguiu compilar a linha 10, devido a falta de um ; na linha 9.

Professor: Eduardo Reus Souza

20

QI - Escola de Educao Profissional Apostila de Lgica de Programao

4.5. Tipos de Erros


Durante toda o processo de desenvolvimento de software, encontraremos apenas dois tipos de erros em nossos programas. So eles: Erros de Sintaxe: Ocorrem durante a fase de projeto do cdigo, caracterizados por falhas na digitao (eu escrevo errado). So facilmente identificados, pois so acusados pelo compilador. Como por exemplo escrever mai no lugar de main. Erros de Lgica: Ocorrem em tempo de execuo, caracterizados por falhas na concepo do cdigo (eu penso errado). So muito mais complexos de serem encontrados, j que o programa executado normalmente, sendo que este apenas devolve um valor errado de resposta. Este tipo de erro s pode ser encontrado com testes de mesa.

4.6. Exerccio Proposto


1. Passe todos os algoritmos feitos na listagem anterior para o DEV-C++, anotando possveis erros de sintaxe e perguntando para seu professor o que estes significam.

Professor: Eduardo Reus Souza

21

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 5
Algoritmos Condicionais
5. Introduo
At o momento, todos os algoritmos que estamos fazendo podem ser considerados Algoritmos Seqenciais, isto , executam todas as suas linhas de instruo sem que hajam desvios nem repeties no cdigo fonte. Em um ambiente prtico, este tipo de situao no ocorre, j que durante um programa diversas situaes devem ser testadas para que seu resultado final seja satisfatrio. Por exemplo, se formos fazer um programa para clculo de peso ideal para um indivduo, a frmula para homens e mulheres diferente. Sendo assim, em algum momento do programa deve-se descobrir o sexo da pessoa e caso seja algum do sexo masculino, faa a frmula X, caso contrrio, a frmula Y ser executada. Para podermos trabalhar com algoritmos condicionais podemos utilizar dois tipos de instrues IF (SE) e SWITCH (CASO, no traduo literal):

5.1. Instruo IF (SE)


Esta instruo avalia uma determinada condio lgica, e dependendo da resposta que esta condio retornar, ser feito um bloco de algoritmo ou no. Sintaxe: if (condio lgica) { <Bloco de algoritmo que ser executado caso a condio lgica seja verdadeira>; } <Bloco de algoritmo que ser executado independentemente da resposta da condio lgica>; Dentro da instruo if, ainda podemos utilizar uma segunda instruo (else - seno) que tambm avalia a condio lgica testada, porm somente sendo executado se esta condio for falsa. Sintaxe: if (condio lgica) { <Bloco de algoritmo que ser executado caso a condio lgica seja verdadeira>; } else { <Bloco de algoritmo que ser executado caso a condio lgica seja falsa>; } Para melhor compreenso, faremos agora um exemplo prtico da utilizao deste tipo de instruo. Faamos um algoritmo que leia o nome e as duas notas de um aluno, retornando a sua mdia e uma mensagem Aprovado ou Reprovado dependendo da sua mdia. A mdia mnima para aprovao ser 6.

Professor: Eduardo Reus Souza

22

QI - Escola de Educao Profissional Apostila de Lgica de Programao

#include <stdio.h> void main() { float n1, n2, media; char nome[25]; printf("Digite o seu nome: "); gets(nome); printf("Digite sua primeira nota: "); scanf("%f", &n1); printf("Digite sua segunda nota: "); scanf("%f", &n2); media = (n1 + n2)/ 2.0; printf ("%f \n", media); if (media >= 6) { printf ("Parabens! Voce esta APROVADO \n"); } else { printf ("Infelizmente voce esta REPROVADO \n"); } system("pause"); } O trecho em destaque no cdigo o que diferencia um algoritmo condicional de um puramente seqencial. Repare que apenas uma das duas mensagens ser exibida na tela, sendo que tudo depende do retorno do teste media >= 6(mdia ser maior ou igual a 6).

5.2. Operadores Relacionais


Para que possamos fazer perguntas lgicas para o processador, devemos sempre utilizar um dos operadores abaixo demonstrados. Operador > < >= <= == != Significado Maior do que Menor do que Maior ou igual a Menor ou igual a Igual a Diferente de

Professor: Eduardo Reus Souza

23

QI - Escola de Educao Profissional Apostila de Lgica de Programao

5.3. Exerccios Propostos


1. Faa um algoritmo que leia um valor real qualquer e o classifique como POSITIVO ou NEGATIVO. Obs: Trate o nmero ZERO como positivo. 2. Faa um algoritmo que leia um valor inteiro e informe se este valor maior do que 10 ou no. 3. Faa um algoritmo que leia dois valores reais e informe se estes valores so iguais ou diferentes. 4. Faa um algoritmo que leia um valor inteiro e retorne se este valor PAR ou MPAR. 5. Faa um algoritmo que leia dois valores reais e exiba ao final qual dos dois o maior. 6. Faa um programa que leia o Nome, Valor Hora e Total de Horas Trabalhadas de um funcionrio. Calcule e exiba: a) O salrio bruto b) O valor de Vale Transporte (6% do Salrio Bruto) c) O desconto de Imposto de Renda (11% do Salrio Bruto para salrios superiores a R$ 1440,00) d) O salrio lquido. 7. Faa um algoritmo que leia dois valores inteiros equivalentes a hora inicial e final de um jogo. Retorne o tempo de durao deste jogo sabendo que o jogo pode comear em um dia e terminar em outro, e que o tempo mximo de jogo 24 horas.

Professor: Eduardo Reus Souza

24

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 6
Exerccios
Aula destinada a continuao e implementao dos exerccios sobre algoritmos condicionais.

Professor: Eduardo Reus Souza

25

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 7
Seleo encadeada
muito comum que dentro de um algoritmo tenhamos vrios testes que tenham que ser feitos a uma mesma varivel ou situao. Para este tipo de situao podemos utilizar o encadeamento (aninhamento) de instrues if. Por exemplo, vamos modificar o exerccio nmero um da lista anterior para que agora ele considere o valor 0 (zero) como nulo. #include <stdio.h> void main() { float valor; printf("Digite um valor: "); scanf("%f", &valor); if (valor > 0) { printf("O valor positivo! \n"); } else { if (valor < 0) { printf("O valor Negativo! \n"); } else { printf("O valor nulo! \n"); } } system("pause"); } Repare que o segundo teste s ser feito caso o primeiro falhe. Este tipo de abordagem interessante para evitar que uma grande quantidade de testes similares sejam feitas quando apenas um deles pode ser executado.

Professor: Eduardo Reus Souza

26

QI - Escola de Educao Profissional Apostila de Lgica de Programao

5.4. Instruo SWITCH


Utilizar uma seqncia encadeada de testes lgicos apesar de interessante, em algumas situaes pode tornar o cdigo relativamente complexo. Quando possumos uma lista de valores para avaliar-mos, por exemplo. Quando nos deparamos com este tipo de situao existe uma instruo que se mostra mais otimizada e organizada para a manipulao dos dados. Essa instruo chama-se switch. Exemplo: #include <stdio.h> void main() { int valor; printf("Digite um valor: "); scanf("%d", &valor); switch (valor) { case 1: printf ("Foi digitado o valor 1 \n"); break; case 2: printf ("Foi digitado o valor 2 \n"); break; case 3: printf ("Foi digitado o valor 3 \n"); break; default: printf("Foi digitado um valor diferente de 1, 2 ou 3 \n"); } system("pause"); } A instruo switch atravs de instrues case avalia o contedo da varivel valor, de modo que a instruo default executada se todos os testes falharem. Percebam que dentro de cada case foi utilizado uma instruo break que far com que o switch seja interrompido no momento que encontrar a associao correta para a varivel valor. Dentro de cada case no necessrio definir o bloco entre chaves.

5.5. Exerccios Propostos


1. Faa um algoritmo que recebe um nmero inteiro, escreva o ms correspondente a este nmero ou a mensagem ms invlido

Professor: Eduardo Reus Souza

27

QI - Escola de Educao Profissional Apostila de Lgica de Programao

2. Faa um algoritmo que recebe dois valores reais juntamente com uma varivel controladora de tipo inteiro. a) Caso a varivel controladora seja 1, some os valores digitados. b) Caso a varivel controladora seja 2, multiplique os valores digitados. c) Caso a varivel controladora seja 3, encontre o maior valor. d) Caso a varivel controladora seja qualquer outro valor, calcule a mdia entre os valores. 3. Faa um algoritmo que simule o caixa de um Fast-Food. Sero digitados o cdigo de um produto, juntamente com a quantidade desejada deste produto. Seu programa deve retornar o nome do produto juntamente com o valor final a ser pago. Cdigo 1 2 3 4 Produto Sanduche de Presunto Suco de Tamarindo Pastel de Vento Po com margarina Valor Unitrio R$ 2,30 R$ 1,50 R$ 1,30 R$ 0,70

Professor: Eduardo Reus Souza

28

QI - Escola de Educao Profissional Apostila de Lgica de Programao

5.6. Operadores (Conectores) Lgicos


Alm do que j foi trabalhado durante o curso, existe a possibilidade de que uma expresso lgica faa mais de uma pergunta ao mesmo tempo. De modo que essas perguntas tem de estar relacionadas de alguma forma. Imagine que exista a necessidade de se fazer um filtro em um programa de modo que sejam tratados de forma diferente pessoas do sexo feminino menores de idade, maiores de idade, pessoas do sexo masculino maiores de idade e menores de idade. Se formos fazer um teste para cada possibilidade, o cdigo seria gigantesco. Utilizando os operadores lgicos, poderamos fazer perguntas agrupadas (se for mulher E menor de idade, se for homem E maior de idade, etc.). Durante o curso iremos trabalhar com trs operadores lgicos. So eles:

5.6.1. Operador && (E)


Tambm conhecido como multiplicao lgica Retorna como resposta Verdadeiro se e somente se as duas expresses lgicas por ele conectadas forem verdadeiras. Tabela verdade && V F V F V F F F

5.6.2. Operador || (OU)


Tambm conhecido como adio lgica Retorna como resposta Falso se e somente se as duas expresses lgicas por ele conectadas forem falsas. Tabela verdade || V F V V V V F F

5.6.3. Operador ! (No)


Tambm conhecido como inversor lgico Retorna o valor oposto a uma expresso lgica Tabela verdade ! V F F V Exemplos a) (25 > 10 && 23 % 2 == 1)? Resposta: VERDADEIRO b) (25 != 50/2 || 12 > 20)? Resposta: FALSO c) (!(2 + 2 = 4)) ? Resposta: FALSO d) (40 > 30 && 25 < 12 || 12 % 2 ==0)? Resposta: e) (!((25 > 10 && 23 % 2 == 1)))? Resposta:

Professor: Eduardo Reus Souza

29

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Exemplo Prtico Fazer um programa que leia as duas notas de um aluno juntamente com sua freqncia. Informe se o aluno est aprovado ou reprovado sabendo que a mdia mnima de aprovao 6 e que a freqncia mnima de aprovao 75. #include <stdio.h> void main() { float n1, n2, freq, media; printf("Digite sua primeira nota: "); scanf("%f", &n1); printf("Digite sua segunda nota: "); scanf("%f", &n2); printf("Digite sua freqncia: "); scanf("%f", &freq); media = (n1 + n2)/ 2.0; if (media >= 6 && freq >= 75) { printf ("Parabens! Voce esta APROVADO \n"); } else { printf ("Infelizmente voce esta REPROVADO \n"); } system("pause"); } Tente fazer o cdigo acima utilizando operador lgico OU agora.

Professor: Eduardo Reus Souza

30

QI - Escola de Educao Profissional Apostila de Lgica de Programao

5.7. Exerccios Propostos


1. Faa um algoritmo que l um valor inteiro e retorna se este um valor Par Positivo, Par Negativo, mpar Positivo, mpar Negativo ou Nulo. 2. Faa um algoritmo que leia trs valores reais e os exiba de forma crescente. 3. Faa um algoritmo que leia trs valores reais e exiba ao final o maior valor 4. Faa um algoritmo que leia trs valores reais e calcule x e x de acordo com a frmula abaixo. Obs.: Seu programa deve prever os erros de raiz negativa e diviso por zero. b b2 4 * a * c x' , x" 2*a 5. Faa um programa que dada a idade de um nadador classifica-o em uma das seguintes categorias: Infantil = 8-10 anos Juvenil = 11-17 anos Adulto = maiores de 18 anos

Professor: Eduardo Reus Souza

31

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 8
Aula destinada a continuao e implementao dos exerccios propostos na lista anterior, bem como novos exerccios disponibilizados pelo professor. Continuao dos exerccios: 6. A Secretaria de Meio Ambiente, que controla o ndice de poluio, mantm 3 grupos de indstrias que so altamente poluentes do meio ambiente. O ndice de poluio aceitvel varia de 0,05 at 0,29. Se o ndice sobe para 0,3 as indstrias do 1 grupo so intimadas a suspenderem suas atividades, se o ndice crescer para 0,4 as industrias do 1 e 2 grupo so intimadas a suspenderem suas atividades, se o ndice atingir 0,5 todos os grupos devem ser notificados a paralisarem suas atividades. Faa um programa que leia o ndice de poluio medido e emita a notificao adequada aos diferentes grupos de empresas. 7. Desenvolva um algoritmo que efetue a leitura de trs valores para os lados de um tringulo, considerando lados como: A, B e C. O algoritmo dever verificar se os lados fornecidos forma realmente um tringulo (cada lado menor que a soma dos outros dois lados). Se for esta condio verdadeira, dever ser indicado qual tipo de tringulo foi formado: issceles (dois lados iguais e um diferente), escaleno (todos os lados diferentes) ou eqiltero (todos os lados so iguais). Faa um algoritmo que leia o dia e o ms de nascimento de uma pessoa. Ao final do algoritmo retorne o seu signo de acordo com a tabela abaixo:
Nascidos entre: 20/03 a 20/04 21/04 a 20/05 21/05 a 20/06 21/06 a 21/07 22/07 a 22/08 23/08 a 22/09 23/09 a 22/10 23/10 a 21/11 22/11 a 21/12 22/12 a 20/01 21/01 a 18/02 19/02 a 19/03 Signo: ries Touro Gmeos Cncer Leo Virgem Libra Escorpio Sagitrio Capricrnio Aqurio Peixes

Professor: Eduardo Reus Souza

32

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 9
Avaliao I
6. Introduo
Aula destinada a apresentao do primeiro trabalho a ser desenvolvido na disciplina de lgica de programao.

6.1. Tipo de avaliao


Cabe ao professor decidir que tipo de avaliao ser proposta, podendo esta ser um teste, trabalho para se entregar no mesmo dia ou um trabalho para ser entregue posteriormente.

6.2. Continuao dos exerccios


No caso da avaliao ser um trabalho a ser entregue posteriormente, utilize essa aula para dar continuidade nos exerccios.

Professor: Eduardo Reus Souza

33

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 10
Algoritmos de Repetio (Laos Loops)
7. Introduo
Como visto anteriormente, dentro de um algoritmo existem vrios tipos de estruturas que podem ser utilizadas. At o momento estudamos estruturas seqenciais e condicionais. Dentro de nossos algoritmos vai ser comum encontrarmos trechos de cdigo que precisam ser executados vrias vezes em seqncia (para validaes, por exemplo). Para este tipo de problema, ao invs de repetirmos seguidamente o cdigo fonte, podemos utilizar instrues de repetio que fazem justamente o papel de re-executar um determinado bloco de algoritmo. As instrues que permitem repetio de cdigo so trs:

7.1. WHILE (ENQUANTO)


Lao de repetio que executa um determinado bloco de instrues enquanto sua condio lgica for verdadeira. Sempre testa sua condio lgica antes de executar. Aps a execuo do cdigo, retorna para a condio e repete o teste. Sintaxe: while (condio lgica) { <instrues que sero executadas enquanto a condio for verdadeira>; }

Professor: Eduardo Reus Souza

34

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Exemplo: #include <stdio.h> void main() { int valor, soma; valor = 5; soma = 0; while (valor <= 8) { soma = soma + valor; valor = valor + 1; } printf("%d\n", soma); system("PAUSE"); } Este algoritmo ir executar as instrues soma = soma + valor; e valor = valor + 1; enquanto o contedo da varivel valor for menor ou igual a 8. Sendo que quando esta condio for falsa o programa ir exibir essa soma na tela e encerrar.

7.2. DO WHILE (FAA ENQUANTO)


Possui comportamento similar ao while. Lao de repetio que executa um determinado bloco de instrues enquanto sua condio lgica for verdadeira. Sempre testa sua condio lgica depois de executar o bloco de instrues. Executa pelo menos uma vez as instrues de seu bloco. Sintaxe: do { <instrues que sero executadas> } while (condio lgica); Exemplo: #include <stdio.h> void main() { int valor, soma; valor = 5; soma = 0; do { soma = soma + valor; valor = valor + 1; } while (valor<=8); printf("%d\n", soma); system("PAUSE"); } Repare que este cdigo retorna o mesmo valor que o exemplo anterior, porm o teste feito apenas no final da execuo da primeira volta do lao. Este tipo de abordagem Professor: Eduardo Reus Souza 35

QI - Escola de Educao Profissional Apostila de Lgica de Programao

muito comum quando utilizamos menus, onde as opes devem ser exibidas na tela enquanto no for feita uma escolha vlida.

7.3. FOR (PARA)


Lao de repetio contado. Executa enquanto sua condio for verdadeira. O controle de voltas do lao feito pelo prprio lao. Esta instruo de repetio muito comum de ser utilizada quando sabemos exatamente o nmero de voltas que nosso bloco de instrues ir fazer. Sintaxe: for (varivel = valor inicia; condio de execuo; valor de incremento para a varivel) { <instrues que sero repetidas>; } Exemplo: #include <stdio.h> void main() { int valor, soma; valor = 5; soma = 0; for (valor = 5; valor<=8; valor = valor +1) { soma = soma + valor; } printf("%d\n", soma); system("PAUSE"); } Utilizando este tipo de abordagem, reparem que no foi necessrio incrementar a varivel valor dentro do bloco do for.

7.4. Tipos de Variveis


Implementado laos de repetio em nossos cdigos, devemos reparar que algumas variveis possuem um comportamento diferente do que estamos acostumados, onde elas mesmas servem de base para o seu prximo valor.

7.4.1. Variveis Contadoras


Tipo de varivel que tem por comportamento principal sofrer alterao nos seus dados de maneira constante. Nos exemplos anteriores a varivel valor possui um comportamento de contadora.

7.4.2. Variveis Acumuladoras


Tipo de varivel que tem por comportamento principal sofrer alterao nos seus dados de maneira varivel. Nos exemplos anteriores a varivel soma possui um comportamento de acumuladora.

Professor: Eduardo Reus Souza

36

QI - Escola de Educao Profissional Apostila de Lgica de Programao

7.4.3. Lixo de Memria


Na grande maioria das linguagens de programao, quando declaramos uma varivel esta possui um valor aleatrio inicial chamado lixo de memria, de modo que se mantermos este valor na varivel, teremos um programa que retornar valores incorretos. Para eliminar o problema do lixo de memria, devemos explicitamente dar um valor inicial para as variveis. Todas as variveis consideradas contadoras ou acumuladoras devem ser inicializadas pelo programador.

7.5. Modificaes do Sinal de Atribuio


O smbolo de atribuio = dentro da linguagem C pode sofrer algumas transformaes que visam diminuir o nmero de caracteres digitados dentro do cdigo. Sendo amplamente utilizados na manipulao de contadores e acumuladores. Smbolo += -= *= /= %= ++ -Exemplo A += 3; A -= 3; A *= 3; A /= 3; A %= 3; A ++ A -Similar A = A + 3; A = A 3; A = A * 3; A = A / 3; A = A % 3; A = A + 1; A = A -1;

A partir de agora, utilizaremos estes operadores sempre que possvel.

7.6. Loops Infinitos


Um algoritmo entra em Loop, quando ocorre uma situao tal que o mesmo entra em um lao e no consegue sair deste. Este erro deve ser evitado a todo o custo dentro de nossos programas. Para uma visualizao prtica sobre um programa em loop, remova a linha valor = valor + 1; de qualquer um dos exemplos acima citados e veja o resultado.

7.7. Exerccios Propostos


1. Faa um algoritmo que calcule a soma de todos os valores inteiros existentes entre 1 e 100. Faa esse algoritmo trs vezes, uma para cada lao de repetio. 2. Faa um algoritmo que leia um valor inteiro e calcule a soma de todos os valores inteiros entre 1 e o valor informado. Faa esse algoritmo trs vezes, uma para cada lao de repetio. 3. Faa um algoritmo que leia um valor inteiro e calcule o seu fatorial. O fatorial de um nmero o resultado da multiplicao deste prprio nmero pelos seus valores menores parando no 1. Exemplo: 5! = 5x4x3x2x1 = 120. Faa esse algoritmo trs vezes, uma para cada lao de repetio.

Professor: Eduardo Reus Souza

37

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 11
Continuao dos exerccios 4. Faa um programa que leia um nmero qualquer e calcule a tabuada desse nmero. A tabuada deve ser exibida ao usurio no seguinte formato (considerando a leitura do nmero 2): 2X1=2 2X2=4 2X3=6 ... 2 X 10 = 20 5. Faa um algoritmo que leia dois valores (X e Y) e calcule XY. Obs.: No utilize a funo pow. 6. Faa um algoritmo que leia dois valores positivos (A e B) e calcule a multiplicao de A por B. Obs.: No utilize o operador aritmtico *. 7. Faa um algoritmo que resolva a seguinte situao. A empresa de Joo tem um quadro de 36 funcionrios, sendo que a cada ano so contratados 5 novos colaboradores. Enquanto que a empresa de Joaquim possui um quadro de 50 funcionrios e a cada ano so contratados 3 novos funcionrios. Quantos anos sero necessrios para que Joo ultrapasse Joaquim?

Professor: Eduardo Reus Souza

38

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 12
Continuao dos exerccios (leitura de dados dentro dos laos) 8. Faa um algoritmo que leia um nmero indeterminado de valores reais e quando for digitado um valor negativo, exiba a soma destes valores. 9. Faa um algoritmo que leia 25 valores inteiros. Logo aps a leitura dos valores, exiba a mdia entre os valores. 10. Faa um algoritmo que leia um nmero indeterminado de valores. E quando for digitado 0 (zero) exiba a quantidade de nmeros pares e mpares digitados. 11. Faa um algoritmo que leia 15 valores reais e ao final da leitura exiba o maior valor informado. 12. Faa um algoritmo que leia 10 nomes e idades. Ao final da leitura exiba o nome da pessoa mais velha. 13. Faa um algoritmo que leia 50 valores inteiros e logo aps a leitura exiba o percentual de valores mltiplos de 5 digitados.

Professor: Eduardo Reus Souza

39

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 13
Continuao dos exerccios 14. Faa um algoritmo que leia um valor inteiro e retorne se este valor perfeito ou no. Obs.: Nmeros perfeitos so aqueles cujo a soma de seus divisores (excluindo o prprio nmero) formam exatamente o valor original. Exemplo: 6 (1+2+3 = 6) 15. Faa um algoritmo que leia um usurio e senha digitados pelo usurio. O programa deve exibir a mensagem Bem Vindo caso o usurio digitado seja aluno e a senha digitada seja segredo. O programa deve avisar quando o login no for efetuado e emitir um aviso de bloqueio caso o usurio erre seu login trs vezes. 16. Faa um programa que leia o Nome, Valor Hora, Total de Horas Trabalhadas e a idade de 50 funcionrios. Aps a leitura dos dados exiba: a) A mdia salarial bruta da empresa b) O nome e a idade do funcionrio mais velho c) O nome e o salrio do funcionrio que tiver a maior renda.

Professor: Eduardo Reus Souza

40

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 14
Continuao dos exerccios (desafios) 17. Faa um algoritmo que leia um nmero inteiro qualquer e retorne se este nmero primo ou no. Obs.: Nmeros primos so aqueles divisveis apenas por 1 (um) e por eles mesmos. 18. Faa um algoritmo que leia 3 valores inteiros e exiba o MMC (Mnimo Mltiplo Comum) entre estes valores. 19. Faa um algoritmo que leia o Nome, Idade e Sexo de 50 pessoas. Retorne ao final o nome da mulher mais velha e do homem mais jovem. 20. Faa um algoritmo que imprima na tela os 10 primeiros valores da seqncia de Fibonacci. (1, 1, 2, 3, 5, 8, 13, 21, 34 e 55). Obs.: Utilizar laos para gerar a seqncia.

Professor: Eduardo Reus Souza

41

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 15
Reviso Geral Para a Prova I
Aula destinada a reviso de todo o contedo desenvolvido at o momento, bem como concluso de exerccios.

Professor: Eduardo Reus Souza

42

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 16
Prova I
Boa prova a todos. Lembrem-se sempre de ler com ateno todas as questes da prova. Faa primeiro as questes que voc considerar mais fceis. No fique com dvidas em relao interpretao da prova.

Professor: Eduardo Reus Souza

43

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 17
Consideraes sobre a prova
Aula destinada a correo da prova e tirar dvidas em relao a avaliao.

Professor: Eduardo Reus Souza

44

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 18
Variveis Homogneas Unidimensionais (Vetores)
8. Introduo
A partir deste ponto do curso iremos quebrar o paradigma de que uma varivel s pode armazenar um valor por vez.

8.1. O que so vetores?


Vetores so variveis como quaisquer outras. Devem possuir nome, tipo de dado e seu contedo pode sofrer alterao durante a execuo do programa. Porm, diferente de uma varivel convencional, vetores podem armazenar mais de um valor ao mesmo tempo. Desde que estejam em posies diferentes.

8.2. Representao Grfica


Um vetor pode ser representado como uma tabela de apenas uma linha ou coluna.

Na linguagem C, a primeira posio de um vetor sempre a posio 0 (zero), sendo crescente a partir deste ponto. Sendo assim, um vetor de 6 posies possui ndice variando entre 0 e 5.

8.3. Utilidade para Vetores


Vetores so de grande utilidade quando precisamos armazenar dados de forma a no perdermos os dados anteriormente digitados.

8.4. Declarando Vetores


Declarar vetores na linguagem C relativamente simples. Sintaxe: <Tipo de dado> <Nome do vetor> [nmero de posies]; Exemplos: int vetor1[10]; float vetor2[15]; Quando o vetor a ser declarado for de tipo char, devemos informar primeiro o nmero de caracteres que cada posio ir armazenar e logo aps o nmero de posies. Exemplo: char vetor3[20] [12];

Professor: Eduardo Reus Souza

45

QI - Escola de Educao Profissional Apostila de Lgica de Programao

8.5. Exemplo Prtico


Desenvolver um programa que leia um vetor inteiro de 5 posies e exibir a soma deste vetor. #include <stdio.h> int main() { int vetor[5]; int i; float soma; for (i = 0; i<5; i++) { printf ("Digite um valor: "); scanf ("%d", &vetor[i]); } soma = 0; for (i = 0; i<5; i++) { soma = soma + vetor[i]; //ou soma += vetor[i]; } printf ("A soma do vetor : %f \n", soma); system("PAUSE"); return 0; } Explicando o cdigo: O primeiro lao faz a leitura de dados do vetor de forma seqencial (posio por posio) onde a varivel i serve de ndice para o vetor. O segundo lao faz o que chamamos de varredura no vetor (passar por todas as posies) de modo que na varivel soma seja acumulado o valor de cada posio do vetor. O programa poderia ser desenvolvido em apenas um lao, mas est disposto desta maneira justamente para demonstrar que os dados continuam armazenados no vetor, mesmo quando a leitura de informaes j est posicionada em outra linha. Se em algum momento for necessrio recuperar alguma informao digitada, ser possvel.

Professor: Eduardo Reus Souza

46

QI - Escola de Educao Profissional Apostila de Lgica de Programao

8.6. Exerccios Propostos


1. Faa um algoritmo que leia um vetor de 11 posies de tipo real. Logo aps a leitura dos dados, exiba a mdia do vetor. 2. Faa um algoritmo que leia um vetor inteiro de 10 posies. Ao final da leitura, exiba a quantidade de valores pares existentes no vetor. 3. Faa um algoritmo que leia um vetor real de 6 posies e retorne a mdia dos valores positivos do vetor. 4. Faa um algoritmo que leia dois vetores reais de 5 posies. Gere um terceiro vetor de mesmo tamanho e tipo que obedea a seguinte regra de formao: a) Na primeira posio do vetor 3 ser armazenada a multiplicao entre a primeira posio do vetor 1 e a primeira posio do vetor 2. b) Na segunda posio do vetor 3 ser armazenada a multiplicao entre a segunda posio do vetor 1 e a segunda posio do vetor 2. c) ... 5. Faa um algoritmo que leia um vetor string de 10 posies. Aps a leitura de todo o vetor o usurio deve informar mais uma palavra. Seu programa deve exibir quantas vezes esta palavra existe no vetor.

Professor: Eduardo Reus Souza

47

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 19
Continuao dos Exerccios 6. Faa um algoritmo que leia dois vetores string de 10 posies equivalentes a grade de respostas de um aluno e o gabarito da mesma prova feita pelo professor. Seu programa deve informar a nota do aluno sabendo que cada acerto equivale a 1 ponto. Seu programa tambm deve retornar uma mensagem para o usurio de acordo com o seu nmero de acertos a) At 3 acertos: PRECISA MELHORAR b) At 5 acertos: REGULAR c) At 7 acertos: BOM d) Acima de 8 acertos: CONTINUE ASSIM. 7. Faa um algoritmo que leia um vetor inteiro de 10 posies. Logo aps a leitura de todo o vetor, inverta os valores de todo o vetor. 8. Faa um algoritmo que leia um vetor real de 8 posies. Logo aps a leitura exiba o maior valor digitado no vetor. 9. Faa um algoritmo que gere um vetor de 10 posies contendo os primeiros 10 valores da seqncia Fibonacci. 10. Faa um algoritmo que leia um vetor de 6 posies inteiro e reorganize os dados deste vetor de modo que seus dados sejam exibidos de maneira crescente.

Professor: Eduardo Reus Souza

48

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 20
Aula destinada correo dos exerccios e remoo de dvidas.

Professor: Eduardo Reus Souza

49

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 21
Variveis Homogneas Multidimensionais (Matrizes)
9. Introduo
Dentro da programao, vetores no so a nica forma de se armazenar mltiplos valores dentro de uma varivel.

9.1. O que so Matrizes?


Matrizes possuem rigorosamente a mesma definio de vetores. Porm os seus dados podem ser armazenados em uma estrutura de dados que possua mais de uma dimenso.

9.2. Representao Grfica


A representao grfica de uma matriz depende do nmero de dimenses que ela possuir. A forma mais comum de encontrarmos uma matriz no formato de duas dimenses.

indiferente pensarmos que cada posio da matriz indexada pelo nmero de sua coluna seguido por sua linha ou o seu inverso. Para uma maior facilidade de compreenso, iremos trabalhar com o sistema de linha x coluna.

9.3. Declarando Matrizes.


A declarao de matrizes similar a declarao de vetores. Sintaxe: <Tipo de dado> <Nome da matriz> [nmero de linhas] [nmero de colunas]; Exemplos: int matriz1[10][5]; float matriz2[6][6]; Quando a matriz a ser declarada for de tipo char, devemos informar primeiro o nmero de caracteres que cada posio ir armazenar e logo aps o nmero de linhas e colunas. Exemplo: char matriz3[20][8][5];

Professor: Eduardo Reus Souza

50

QI - Escola de Educao Profissional Apostila de Lgica de Programao

9.4. Exemplo Prtico


#include <stdio.h> int main() { int matriz[3][3]; int linha,coluna; float soma; //Leitura dos dados for (linha = 0; linha<3; linha++) { for (coluna = 0; coluna<3; coluna++) { printf ("Digite um valor: "); scanf ("%d", &matriz[linha][coluna]); } } //Soma e exibio da matriz soma = 0; for (linha = 0; linha<3; linha++) { for (coluna = 0; coluna<3; coluna++) { printf ("%d ", matriz[linha][coluna]); soma = soma + matriz[linha][coluna];//ou soma +=matriz[linha][coluna]; } printf("\n"); } printf("\n A soma da matriz : %f",soma); system("PAUSE"); return 0; } Explicando o cdigo Agora a entrada de dados feita utilizando dois laos e no apenas um. Repare que para cada volta do lao de linha, o lao de coluna faz trs voltas. Para a varredura da matriz o processo se repete Para visualizarmos a matriz interessante que a cada linha seja feita uma quebra de linha (\n) entre os laos.

Professor: Eduardo Reus Souza

51

QI - Escola de Educao Profissional Apostila de Lgica de Programao

9.5. Exerccios Propostos


1. Faa um algoritmo que leia uma matriz 4x4 de tipo real e exiba ao final a sua mdia. 2. Faa um algoritmo que leia uma matriz 3x5 de tipo inteiro e exiba quantos valores pares existem na matriz. 3. Faa um algoritmo que leia uma matriz 5x5 de tipo real e exiba a soma das linhas pares e a mdia das linhas mpares. 4. Faa um algoritmo que leia uma matriz 2x8 e coloque seus valores em uma matriz 8x2. Ambas as matrizes de tipo char. 5. Faa um algoritmo que leia uma matriz 6x6 e exiba a soma de sua diagonal principal.

6. Faa um algoritmo que leia uma matriz 6x6 e exiba a soma de sua diagonal secundria.

7. Faa um algoritmo que leia uma matriz 6x6 e exiba a soma dos seguintes valores da matriz.

8. Faa um algoritmo que preencha uma matriz 10x10 de forma automtica com os valores de 1 a 100 de forma seqencial. Obs.: Utilize apenas os contadores dos laos e a matriz propriamente dita. No utilize uma contadora auxiliar.

Professor: Eduardo Reus Souza

52

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 22
Aula destinada concluso e correo dos exerccios.

Professor: Eduardo Reus Souza

53

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 23
Continuao e Correo de Exerccios 9. Faa um algoritmo que leia uma matriz 3x3 de tipo real e adicione seus valores a um vetor real de 9 posies. 10. Faa um algoritmo que ordene os valores de uma matriz 4x4 de forma decrescente. O procedimento a ser executado dever ser: a) Ler a matriz b) Adicionar seus dados a um vetor c) Ordenar o vetor d) Devolver os dados para a matriz. 11. Faa um algoritmo que ordene de forma crescente apenas os valores pares de uma matriz inteira 5x5, sendo que os valores mpares no devem ser deslocados.

Professor: Eduardo Reus Souza

54

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 24
Introduo a Programao Modular
10. Introduo
O conceito de programao modular consiste no desenvolvimento de rotinas de tal forma que seja permitido o seu reaproveitamento.

10.1. Por que Utilizar Programao Modular?


Um algoritmo que implementa programao modular possui inmeras vantagens. Dentre as quais se destacam: O cdigo fonte diminui drasticamente de tamanho A manuteno do cdigo fonte fica simplificada Uma possvel mudana de plataforma pode ser menos traumtica (portabilidade) Exemplo Imagine que estamos desenvolvendo um software com uma gama de clculos assombrosa. O que aconteceria se uma frmula muito comum em todo o programa tenha sido passada errada para o programador? A resposta simples, reescrever a frmula em todos os lugares em que a mesma se encontra. Esse trabalho pode levar horas, dependendo do tamanho do cdigo. Se utilizarmos o conceito de programao modular, a alterao precisar ser feita em apenas um lugar. Sendo que todo o programa ir se atualizar automaticamente.

10.2. Como Implementar Programao Modular?


Programao modular dentro da linguagem C feita utilizando o que chamamos de funes.

10.2.1. Funes
Funes so blocos de algoritmo que devem possuir uma assinatura e que ao final de sua execuo, devem retornar algum valor de resposta.

10.2.2. Assinatura
Conjunto formado pelo nome, lista de argumentos (quando necessrios) e tipo de dado de sada.

10.2.3. Argumento
So todas as informaes que devem ser enviadas pelo usurio da funo, para que esta possa ser executada de forma correta.

10.2.4. Parmetro
So as informaes que sero passadas para os argumentos das funes pelo programa principal (usurio).

10.3. Exemplo Prtico


Utilizando os conceitos de programao modular. Faremos um algoritmo que retorne o maior valor entre dois valores inteiros.

Professor: Eduardo Reus Souza

55

QI - Escola de Educao Profissional Apostila de Lgica de Programao

#include <stdio.h> //Criao da Funo int encontra_maior(int a, int b) { if (a > b) { return a; } else { return b; } } //Programa Principal int main() { int v1, v2, maior; printf ("Digite o primeiro valor: "); scanf ("%d", &v1); printf ("Digite o segundo valor: "); scanf ("%d", &v2); maior = encontra_maior(v1,v2); printf ("O maior valor : %d \n", maior); system("PAUSE"); return 0; } Explicando o cdigo int encontra_maior(int a, int b)

Return

maior = encontra_maior(v1, v2)

Assinatura da funo. Est sendo informado que existe uma funo chamada encontra_maior que recebe dois valores inteiros como argumentos (a e b) e devolve um valor inteiro no final a instruo que far com que a devoluo do valor seja feita. No caso de a ser o maior valor ser retornado a, caso contrrio a funo devolver b. Chamada da funo. feita a chamada da funo encontra_maior de modo que o contedo dos parmetros v1 e v2 sejam enviados para os argumentos a e b e o retorno da funo ser depositado na varivel maior

Repare que em nenhum momento feita a leitura dos valores dos argumentos dentro da funo. A leitura dos dados deve ser feita nos parmetros, de modo que a funo se torne o mais independente possvel. Exceto em funes especficas para captura de dados do usurio. Apesar de funcional, o exemplo acima poderia ser facilmente desenvolvido sem a utilizao de programao modular. Sendo assim, sua utilidade nesta questo posta em xeque.

Professor: Eduardo Reus Souza

56

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Porm, este tipo de abordagem mostra seu verdadeiro valor com o decorrer do tempo. Se, por exemplo, fosse necessrio agora que a leitura a ser feita seja de trs valores inteiros. Qual seria sua soluo? Reescrever a funo de modo que encontre o maior valor entre trs parmetros?. Preste ateno no exemplo abaixo, ainda utilizando a funo encontra_maior: int main() { int v1, v2, v3, maior; printf ("Digite o primeiro valor: "); scanf ("%d", &v1); printf ("Digite o segundo valor: "); scanf ("%d", &v2); printf ("Digite o terceiro valor: "); scanf ("%d", &v3); maior = encontra_maior(encontra_maior(v1,v2),v3); printf ("O maior valor : %d \n", maior); system("PAUSE"); return 0; } Com este mtodo, foi possvel reaproveitar o cdigo da funo anterior de modo que encontramos o maior valor entre as variveis v1 e v2 e comparamos este valor com v3 em uma segunda chamada da funo. Sendo assim, a funo original no precisou sofrer nenhuma alterao na sua estrutura. Podemos achar o maior valor entre qualquer grupo de valores utilizando a funo encontra_maior fazendo alteraes apenas no programa principal. Nada impede tambm, que faamos mais de uma funo dentro de um cdigo. Inclusive de modo que uma funo chame outra que esteja desenvolvida acima.

10.4. Escopo das Variveis Instanciamento de Variveis


Trabalhando com mltiplas funes em um cdigo, muito comum de termos em vrios pontos do programa variveis com utilizaes totalmente diferentes porm com o mesmo nome. Variveis declaradas dentro de uma funo, possuem validade apenas dentro desta funo. Permitindo assim que seu nome seja repetido em outras funes. Estas variveis tambm so conhecidas como variveis locais. Existem tambm, variveis que podem ter validade dentro de todo o nosso projeto (sendo visualizadas por todas as funes). Estas so denominadas como variveis Globais. Esta rea de validade o escopo de uma varivel.

Professor: Eduardo Reus Souza

57

QI - Escola de Educao Profissional Apostila de Lgica de Programao

10.5. Exerccios Propostos


1. Faa um algoritmo que leia 3 valores reais. Crie uma funo que retorne a mdia entre estes valores. 2. Faa um algoritmo que leia dois valores inteiros e retorna o triplo do maior valor. 3. Faa um algoritmo que recebe o cdigo de um produto e retorna (atravs de uma funo) o nome do mesmo de acordo com a tabela abaixo: Cdigo Produto 1 Sanduche de Presunto 2 Suco de Tamarindo 3 Pastel de Vento 4 Po com margarina 4. Faa um algoritmo que l dia, ms e ano vindos do usurio. Crie uma funo que retorne se estes valores formam uma data vlida ou no. 5. Faa um algoritmo que l um nmero inteiro e que chame uma funo que retorne o seu fatorial.

Professor: Eduardo Reus Souza

58

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 25
Continuao dos Exerccios 6. Faa um algoritmo que possua 5 funes a) Uma que calcule a soma entre dois valores reais b) Uma que calcule a multiplicao entre dois valores reais c) Uma que calcule a subtrao entre dois valores reais d) Uma que calcule a diviso entre dois valores reais e) Uma que de acordo com um cdigo fornecido pelo usurio chama as funes acima conforme a tabela abaixo: Cdigo Ao 1 Adio 2 Multiplicao 3 Subtrao 4 Diviso Crie um programa principal que deve apenas ler o cdigo da operao e dois valores reais e exiba o resultado da operao.

10.6. Passagem de Parmetros por Valor e Referncia


Como dito anteriormente, quando chamamos uma funo, o contedo existente nos parmetros so enviados para os argumentos da funo para o seu tratamento. Este processo chama-se Passagem de Parmetros, sendo que este tipo de passagem pode ser feita de duas formas: Por valor ou cpia: O contedo dos argumentos e parmetros so independentes. Ou seja, a alterao do contedo do argumento no influencia no contedo do parmetro. Por referncia: O contedo dos argumentos e parmetros so interligados, ou seja, compartilham o mesmo endereo de memria. Sendo assim, a alterao de um argumento influencia diretamente no contedo de seu parmetro correspondente. Na linguagem C, a passagem de parmetros no est bem definida, sendo feita atravs da utilizao de ponteiros. Na linguagem C, sempre que passamos um vetor ou matriz como parmetro, este passado por referncia.

Professor: Eduardo Reus Souza

59

QI - Escola de Educao Profissional Apostila de Lgica de Programao

10.7. Exemplo Prtico


Para melhor entendermos a passagem por parmetros por valor e referncia, faamos como exemplo um programa que inverte o contedo entre duas variveis inteiras. A funo desta vez no ir devolver um valor oficialmente, mas como devemos sempre informar um tipo de dado de sada, utilizaremos o tipo de dado void. Forma ERRADA de desenvolvimento #include <stdio.h> void inverte(int a, int b) { int aux; aux = a; a = b; b = aux; } int main() { int a,b; printf ("Digite o primeiro valor: "); scanf("%d", &a); printf ("Digite o segundo valor: "); scanf("%d", &b); inverte (a, b); printf ("O novo valor de A : %d\n", a); printf ("O novo valor de B : %d\n", b); system("PAUSE"); return 0; } A funo apenas inverte os valores, no h a necessidade de utilizarmos a instruo return justamente por ser de retorno void. Ao testarmos o programa, veremos que o cdigo fonte acima apesar de compilar no resolve nosso problema, pois as variveis no mudaram de valor. Isso acontece por que a passagem de parmetros na linguagem C em sua grande maioria passada por valor. Para solucionar o problema acima, devemos fazer algumas modificaes no cdigo, para forar a passagem de parmetros por referncia.

Professor: Eduardo Reus Souza

60

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Forma CORRETA de desenvolvimento #include <stdio.h> void inverte(int *a, int *b) { int aux; aux = *a; *a = *b; *b = aux; } int main() { int a,b; printf ("Digite o primeiro valor: "); scanf("%d", &a); printf ("Digite o segundo valor: "); scanf("%d", &b); inverte (&a, &b); printf ("O novo valor de A : %d\n", a); printf ("O novo valor de B : %d\n", b); system("PAUSE"); return 0; } Explicando o cdigo Na funo a nica diferena que nossos argumentos devem ser precedidos pelo operador *, assim estamos nos referenciando diretamente ao endereo do argumento na memria. No programa principal, os parmetros devem ser precedidos pelo operador & para que seja passado para o argumento a posio da varivel na memria em vez do seu contedo propriamente dito.

10.8. Exerccios Propostos


7. Faa um algoritmo que leia trs valores reais e que possua uma funo que devolva os valores de x e x de acordo com a frmula abaixo. No caso de erro, devolver zero. b b2 4 * a * c x' , x" 2*a 8. Faa um algoritmo que leia dois valores reais e possua uma funo que retorna o dobro do maior valor e a metade do menor.

Professor: Eduardo Reus Souza

61

QI - Escola de Educao Profissional Apostila de Lgica de Programao

Aula 26
Tratando Vetores Atravs de Funes
Para tratarmos vetores (ou qualquer estrutura de dados) de uma forma eficiente e organizada, aconselhvel que utilizemos funes de manipulao para estes dados. Faremos agora um exemplo prtico implementando a manipulao de um vetor de modo que sejam feitas as quatro operaes bsicas para um sistema. Insero Alterao Excluso Pesquisa Este projeto deve ser bem planejado, para que seu desenvolvimento seja de fcil compreenso. Sendo assim, iremos trabalhar passo a passo o cdigo fonte.

Professor: Eduardo Reus Souza

62

Você também pode gostar