Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos e Lógica de Programação Prof. Priscilla Cunha LÓGICA E ALGORITMOS • O processamento de dados pode ser representado da seguinte maneira: 3 Entrada Processamento Saída • O processamento de dados é uma atividade que consiste na entrada de dados, no tratamento desses dados e na apresentação dos resultados, sendo que tais resultados finais podem ser diferentes ou iguais aos dados. • Já o processamento eletrônico de dados é realizado por um equipamento eletrônico tal como o computador, sendo que o uso do computador para o processamento de dados tem sido preferido devido a sua rapidez e precisão. 4 • Dados – conjuntos de informações brutas que se transformam em informação. • Processamento – conjunto de operações lógicas e aritméticas que são aplicadas sobre os dados com o auxílio de equipamentos informáticos. • Informação – conjunto de resultados que são obtidos após um processamento de dados. 5 PROGRAMAS E LINGUAGENS DE PROGRAMAÇÃO Linguagem de Programação • Ferramentas usadas para que se possa escrever instruções que serão executadas pelo computador. • Existem muitas linguagens de programação e muitas maneiras de fazer um programa, e elas se classificam em: • Linguagens de alto nível; • Linguagens de baixo nível. 7 Linguagens de Baixo Nível • As linguagens de baixo nível são aquelas mais próximas do código de máquina • Com elas é preciso ter o conhecimento direto da arquitetura do computador • Exemplo: Assembly. 8 Linguagens de Alto Nível • As linguagens de alto nível são legíveis por seres humanos. • Algumas são altamente declarativas. • Elas possuem um nível de abstração que faz com que você entenda aquele código mais facilmente. • Não é preciso conhecer coisas como registradores ou instruções do processador 9 • Alguns exemplos de linguagens de alto nível: • JavaScript • Python • PHP • Java • Ruby 10 Programa de Computador (Software) • Um programa é um conjunto de instruções que determinam quais funções e em qual sequência o computador deve executar para a solução de um problema. 11 • Para cada passo é feita uma operação lógica ou aritmética • Para cada operação, um conjunto de sinais de controle diferente é necessário • O processador de um computador digital só reconhece 2 níveis de sinais elétricos: 0 e 1 12 • Esses programas nada mais são que arquivos, onde temos nossas instruções escritas por pessoas desenvolvedoras de software em linguagens de programação. • Este arquivo recebe o nome de código fonte. • Para que o computador execute aquilo que escrevemos, em uma linguagem de alto nível, precisamos transformar isso em código de máquina. Este processo de transformação pode ser através da interpretação ou compilação do código fonte. 13 • Os circuitos de um computador (hardware) reconhecem e executam um conjunto limitado e simples de instruções (linguagem de máquina- binária), como: • Soma; • Subtração; • Comparação; • Transferência de dados de uma parte da memória para outra. 14 • A linguagem de máquina (binária - baixo nível) está muito distante de uma linguagem natural (humana - alto nível). • O que os usuários precisam fazer é, em geral, complexo, e o que o computador é capaz de fazer acaba sendo muito simples. 15 • Exemplo: • O usuário quer calcular a correção trajetória de um foguete até a lua. • Como o usuário pode fazer isso em linguagem de máquina? • Solução • Criar uma hierarquia de abstrações de níveis mais altos baseadas nos níveis mais baixos. • Criar uma organização estruturada de computadores para facilitar a comunicação homem-máquina. 16 LÓGICA DE PROGRAMAÇÃO O que é Lógica CONJUNTO DE REGRAS E PRINCÍPIOS QUE ORIENTAM, IMPLÍCITA OU EXPLICITAMENTE, O DESENVOLVIMENTO DE UMA ARGUMENTAÇÃO OU DE UM RACIOCÍNIO, A RESOLUÇÃO DE UM PROBLEMA, ETC. A CIÊNCIA QUE ESTUDA AS LEIS E CRITÉRIOS DE VALIDADE QUE REGEM O PENSAMENTO E A DEMONSTRAÇÃO, OU SEJA, CIÊNCIA DOS PRINCÍPIOS FORMAIS DO RACIOCÍNIO. ESQUEMA SISTEMÁTICO QUE DEFINE AS INTERAÇÕES DE SINAIS NO EQUIPAMENTO AUTOMÁTICO DO PROCESSAMENTO DE DADOS. Lógica de Programação • A lógica de programação no desenvolvimento de sistemas e programas, pois permite definir a sequência lógica para o desenvolvimento. • Lógica de programação é a técnica de encadear pensamentos para atingir determinado objetivo. 19 Sequência Lógica • Os “pensamentos” acima citados podem ser descritos como uma sequência de instruções, que devem ser seguidas para se cumprir uma determinada tarefa. • Sequência Lógica são passos executados até atingir um objetivo ou solução de um problema. 20 Instruções • Na linguagem comum, entende-se por instruções “um conjunto de regras ou normas definidas para a realização ou emprego de algo”. • Em informática, porém, instrução é a informação que indica a um computador uma ação a executar. • Uma ordem isolada não permite realizar o processo completo, para isso é necessário um conjunto de instruções colocadas em ordem sequencial lógica. 21 • Lógica de Programação • Técnica de encadear pensamentos para atingir um objetivo. • Sequência Lógica • Passos executados para atingir o objetivo ou solução do problema. • Instruções • Conjunto de regras para realizar algo. 22 Algoritmo • Sequência finita de passos que levam a execução de uma tarefa. • Sequência de instruções que dão cabo de uma meta específica, devendo ser claras e precisas. 23 • Os algoritmos são descritos em uma linguagem chamada pseudocódigo. • Este nome é uma alusão à posterior implementação em uma linguagem de programação, ou seja, quando formos programar em uma linguagem, por exemplo Java, estaremos gerando código em Java. 24 • Os algoritmos são independentes das linguagens de programação. • O algoritmo deve ser fácil de se interpretar e fácil de codificar. • Ele deve ser o intermediário entre a linguagem falada e a linguagem de programação. 25 • Passos para a construção de um algoritmo • Identificar o problema • Obter as entradas de dados, ou seja, identificar os dados que devem ser fornecidos e, a partir deles, verificar se desenvolverão os cálculos/processamento • Obter as saídas de dados que devem ser gerados; • Determinar o que deve ser feito para processar as entradas em saídas; • Construir o algoritmo; • Testar a solução. 26 Exemplos de Algoritmos • Construir um algoritmo para fazer um suco de laranja. • Problema : Fazer um suco de laranja • Entrada: Laranja e Copo • Processamento: • Cortar a laranja • Espremer a laranja sobre o copo • Saída: suco de laranja • Teste: experimentar o suco • Construir um algoritmo para somar dois números • Problema : Somar dois números • Entrada: • Primeiro número • Segundo número • Processamento: somar o primeiro número com o segundo número • Saída: resultado da soma • Teste: verificar o resultado da soma 27 • Imagine o seguinte problema: • Calcular a média final dos alunos da 3ª série. Os alunos realizarão quatro provas: N1, N2, N3 e N4. • O cálculo da média se dá pela fórmula: Média final = (N1 + N2 + N3 + N4) / 4 28 • Para montar o algoritmo proposto, faremos três perguntas: 1. Quais são os dados de entrada? • N1, N2, N3, N4 2. Qual será o processamento a ser utilizado? • Somar N1, N2, N3 e N4 e depois dividir a soma por 4 3. Quais serão os dados de saída? • Média final 29 • Algoritmo ALGORITMO MÉDIA Receba nota 1 Receba nota 2 Receba nota 3 Receba nota 4 Some todas as notas e divida o resultado por 4 Mostre o resultado da divisão 30 FORMAS DE REPRESENTAÇÃO DA LÓGICA DE PROGRAMAÇÃO Representação de Algoritmos • Existem 3 formas de se representar os algoritmos: • Descrição narrativa • Fluxograma • Pseudocódigo 32 • Como exemplo, para melhor entender o assunto, usaremos o exercício a seguir: • Fazer um algoritmo que troca o conteúdo entre duas variáveis. • Suponha-se que tenhamos uma variável A cujo conteúdo seja o número 2 e tenhamos outra variável B cujo conteúdo seja o número 4. • O objetivo é colocar onúmero 4 na variável A e o número 2 na variável B. 33 Descrição Narrativa 34 Os algoritmos são expressos de maneira direta É usada linguagem natural • Passo 0: A tem como conteúdo “2” e B “4”. • Passo 1: providenciar mais uma variável “C”. • Passo 2: colocar o conteúdo da variável B na variável C. • Passo 3: colocar o conteúdo da variável A na variável B. • Passo 4: colocar o conteúdo da variável C na variável A. • Passo 5: agora A tem como conteúdo: “4” e B “2”. 35 Fluxograma 36 Tem o objetivo de descrever graficamente a solução lógica do problema Possibilita o planejamento da estrutura do programa Facilita a validação da estrutura planejada Cada operação é representada por um símbolo cuja forma representa o processo envolvido 37 Símbolos Básicos 38 Pseudocódigo 39 Usa linguagem intermediária entre a linguagem falada e a linguagem de programação É independente da linguagem de programação • Estrutura: programa <identificador_do_programa> <declaração> inicio <instruções> fim • Onde: • <identificador_do_programa> - nome do algoritmo • <declaração> - onde são declaradas variáveis, constantes e tipos de dados • <instruções> - onde ocorrem as entradas de dados, os cálculos, o processamento necessário, as saídas são exibidas 40 programa troca; var a, b, c: inteiro; inicio a 2; b 4; escreva “a = ”,a, “ e b = ”,b; c b; b a; a c; escreva “Trocamos e agora a = ”,a, “ e b = ”,b; fim 41 Cabeçalho São criadas 3 variáveis do tipo inteiro Inicia-se o bloco principal, onde vamos colocar a lógica São atribuídos valores para as variáveis a e b Mensagem mostrando a e b em tela É feita a troca de valores entre a, b e c Mensagem mostrando os valores finais e a e b Fim do bloco principal Exemplo - algoritmo que faz a soma de dois números inteiros quaisquer • Descrição narrativa Passo 0: ler n1 Passo 1: ler n2 Passo 2: somar n1 + n2 Passo 3: colocar a soma em resultado Passo 4: exibir o resultado 42 • Fluxograma 43 • Pseudocódigo programaSoma var n1, n2, resultado: inteiro; início leia (n1) leia (n2) resultado n1 + n2 escreva (resultado) fim 44 • Linguagem de Programação – C #include <stdio.h> int main() { int n1, n2, resultado; printf ("Digite o primeiro valor: "); scanf ("%d", &n1); printf ("\nDigite o segundo valor: "); scanf ("%d", &n2); resultado = n1 + n2; printf ("\n O resultado da soma é: %d.", resultado); return 0; } 45 Biblioteca de tratamento de entrada/saída Declaração das variáveis Exibir na tela Ler o que foi digitado Cálculo a ser efetuado Mostrar resultado TIPOS DE DADOS • Quando um programa está sendo executado pelo computador, as células de memória armazenam dados, e esses dados são classificados de acordo com seu tipo. • É preciso, no programa, informar ao computador que tipo de dado vai ser armazenado e/ou manipulado, para que se saiba quais operações são permitidas. 48 • Por exemplo: em dados numéricos, aplicamos operações aritméticas; em dados booleanos aplicamos operações lógicas. • O tipo de dado determina quantas células de memória são necessárias para que ele seja armazenado. 49 • Existem 2 tipos básicos: • Tipos simples • Tipos estruturados (vetor, registro, etc.) 50 Tipo de dados simples Numérico Inteiro Real Caractere Lógico • Quando estamos desenvolvendo um programa, e precisamos usar variáveis, é preciso declarar o tipo dessas variáveis. • Temos 4 tipos básicos, como vimos no gráfico anterior: • Inteiro • Real • Caractere • Lógico 51 • Inteiro • Conjunto de números positivos, negativos e nulos sem fração decimal. • Aloca dois bytes de memória • Pode ser um número entre -32768 e 32768 • Corresponde a 65536 possibilidades de valores • Exemplos: 1; -3; 0; 235; 5673 52 • Real • Conjunto de números positivos, negativos e nulos com fração decimal. • Aloca quatro bytes de memória • Pode ser um número entre 3.4e-38 e 3.4e+38 • Exemplos: 1; 2,34; -0,56; 24,69; 1245,55 53 • Caractere • Conjunto de dados alfanuméricos • Podem ser letras (a ... z, A ... Z), números (0 ... 9), espaço em branco ( ), e caracteres especiais (~; !; ?; #; $; %; @; &; etc.) • SEMPRE deve estar delimitado por aspas duplas (“ ”) • Pode alocar de 1 a 255 bytes de memória • Exemplos: “a”; “carro”; “5,67”; “Rua dos Alfeneiros, nº 4”) 54 • Lógico • Contém os valores booleanos VERDADEIRO ou FALSO • Como não representa ambos os valores ao mesmo tempo, apenas um byte de memória é alocado • Exemplos: 0 ou 1; V ou F; true ou false; sim ou não 55 • Usamos inteiro para: • Quantidade de pessoas • Idade • Quantidade de objetos • Número de uma casa • Para que se faça a escolha adequada do tipo de operador, é necessário entender bem o que seu programa precisa. • Usamos real para: • O peso de uma pessoa • O preço de um produto • Um percentual • Uma nota ou média 56 • Usamos caractere para: • Um nome • Um endereço • Usamos lógico para: • Identificar se alguém foi aprovado • Identificar se uma condição é verdadeira ou falsa • Em linguagem C, os tipos mais comuns são: • int: armazena valores numéricos inteiros • char: armazena caracteres • float: armazena números com ponto flutuante (reais) com precisão simples • double: armazena números com ponto flutuante, com precisão dupla, ou seja normalmente possui o dobro da capacidade de uma variável do tipo float 57 VARIÁVEIS E CONSTANTES • Como já falamos, os dados são armazenados nas células de memória do computador, e enquanto um programa está sendo executado, elas podem ou não mudar. • Assim, os programas possuem variáveis e constantes para armazenarem esses valores. 59 Variáveis 60 Células de memória que são alocadas para armazenar dados de qualquer tipo Esses dados podem ser alterados durante a execução do programa por meio de comandos de atribuição ou entrada de dados • A variável pode receber diversos valores ao longo da execução de um programa, mas só pode receber um valor por vez. • Quando um novo valor é atribuído à variável, o anterior é substituído. • A variável sempre recebe o mesmo tipo de dado, de acordo com o que foi definido na criação do programa. • A linguagem C é “case sensitive”, isto é as letras maiúsculas e minúsculas fazem diferença, pois sãos tratadas como caracteres diferentes. 61 Sintaxe para criação de variável em C 62 <tipo><nome_da_variável>; int contador; float nota1, nota 2, media; Pode-se declarar múltiplas variáveis do mesmo tipo juntas Constantes 63 Células de memória que são alocadas para armazenar dados de qualquer tipo Esses dados não podem ser alterados durante a execução do programa Sintaxe para criação de sintaxe em C 64 #define <nome_da_constante> <valor> #define ICMS 0.18 #define ERRO "Erro!!!" Recomenda-se deixar o nome da variável todo em maiúscula para facilitar sua identificação e diferenciá-la das variáveis • Geralmente, variáveis e constantes são criadas de acordo com algumas recomendações básicas: • Usar somente letras e números • O primeiro caractere deve ser uma letra • Não se pode usar caracteres especiais, apenas underline _ 65 • Na hora de criar nomes de variáveis e constantes, também recomenda-se que elas façam sentido no programa. 66 float media, nota1, nota2; float banana, uva, morango; Exemplo de Código com Variável e Constante #include <stdio.h> #define PI 3.14 int main () { float raio, area; printf ("Valor do raio: "); scanf ("%f", &raio); area = PI * raio * raio; printf ("\n Resultado: %0.2f", area); return 0; } 67 Declaração de Constante Declaração de Variáveis 68 ENTRADA, ATRIBUIÇÃO E SAÍDA DE DADOS • Como já falamos anteriormente, o processamento de dados pode ser representado da seguinte maneira: 70 Entrada Processamento Saída • Entrada de dados • São dados / informações enviados pelo usuário para o computador • Esses dados são armazenados nas variáveis • A sintaxe para leitura de variáveis em pseudocódigo é: leia <variável> • Em linguagem C usamos a função scanfpara ler dados de entrada 71 • Processamento • Durante o processamento dos dados, são realizadas todas as tarefas de modificações nos dados de entrada, preparação e geração de novos dados • Depois de processados, os dados são enviados para a saída de dados • A sintaxe para atribuição de variáveis em pseudocódigo é: <variável> <valor> * <expressão> <variável> <variável> + <variável> 72 • Saída de dados • São dados / informações enviados pelo computador para o usuário • Esses dados são tem como fonte as variáveis, expressões ou constantes e em geral resultam do processamento • A sintaxe para leitura de variáveis em pseudocódigo é: escreva <variável> escreva <constante> • Em linguagem C usamos a função printf para ler dados de entrada 73 Exemplo: algoritmo para transformar uma velocidade fornecida em m/s pelo usuário para km/h. OBS: para isso, multiplicar a velocidade por 3,6 • Pseudocódigo programa_km_hora velocidade: real início escreva (“Digite a velocidade em m/s: “) leia (velocidade) velocidade velocidade * 3,6 escreva (“A velocidade em km/h é: “, velocidade) fim • Linguagem C #include <stdio.h> #include <conio.h> int main () { float velocidade; printf ("Digite a velocidade em m/s: "); scanf ("%f", &velocidade); velocidade = velocidade * 3.6; printf ("\n Velocidade em km/h: %0.2f", velocidade); return 0; } 74 75 Função SCANF() 76 Permite que um valor digitado pelo usuário no teclado seja lido e armazenado em uma variável Sintaxe: cadeia de formatação + lista de argumentos, que são as variáveis para onde os dados serão enviados scanf(“formatação”, arg1, arg2, ..., argn); • A cadeia de formatação é composta pelos especificadores de formato, que indicam a quantidade e os tipos dos dados que serão lidos pela função. • Exemplo: int idade, ano; float nota; char nome; ... scanf (“%d, %f, %s, %d”, &idade, ¬a, &nome, &ano); 77 • Repare que cada especificador de formato corresponde a uma variável. • O operador & é obrigatório, e é usado para informar o endereço de memória de uma determinada variável. 78 79 ESPECIFICADORES DE FORMATO Especificador O que ele representa %c Um caractere único %o, %d, %x Um número inteiro octal, decimal ou hexadecimal %ld Um número inteiro longo em base decimal %f, %lf Um número real de precisão simples ou dupla %s Uma cadeia de caracteres (string) %% Um único sinal de porcentagem Função PRINTF 80 Permite que informações sejam exibidas em tela para o usuário. Sintaxe: cadeia de formatação + lista de argumentos. Aqui, os argumentos são os valores a serem exibidos, e não seu endereço de memória printf(“formatação”, arg1, arg2, ..., argn); • Na área destinada para formatação também é possível exibir um texto fixo juntamente de caracteres de controle, que causam alguns efeitos na tela. • Exemplo: int idade, ano; float nota; char nome; ... scanf (“%d, %f, %s, %d”, &idade, ¬a, &nome, &ano) printf (“\n O nome é: ”, nome, “ e a idade é: “, idade); 81 82 CARACTERES DE CONTROLE Caractere O que ele representa \a Soa um alarme do computador \f Alimenta uma página na impressora \n O cursor vai para a próxima linha. Equivalente a um <ENTER> \t O cursor avança para a próxima marca de tabulação. Equivalente a um <TAB> \” Exibe uma única aspa \’ Exibe um único apóstrofe \\ Exibe uma única barra • Quando usamos o printf, é possível formatar a informação que está sendo exibida para o usuário. • As formatações mais usadas são o preenchimento com zeros à esquerda, para números inteiros, e a especificação do quantidade de casas decimais, para reais. 83 Exemplo int var1; float var2; ... var1 = 345; var2 = 1.299; ... printf("|%5d| \n",var1); printf("|%06d| \n",var1); printf("|%7.3f| \n",var2); printf("|%7.2f| \n",var2); ... • A saída será: | 345| |000345| | 1.346| | 1.35| 84 85 OPERADORES • Os operadores são muito usados na etapa de processamento dos dados. • É na fase de processamento que efetivamente os dados são manipulados, as operações necessárias são realizadas e as entradas são transformadas em saídas. 87 • Muitas vezes, ao desenvolver algoritmos, é comum utilizar expressões matemáticas para a resolução de cálculos. • Bastante comuns em cálculos matemáticos onde são utilizados tarefas como comparações e expressões, são necessários os operadores para que possamos realizar algumas tarefas. 88 • Existem 3 tipos de operadores: 1. Aritméticos 2. Relacionais 3. Lógicos • Uma expressão correta é aquela em que variáveis e operadores são corretamente associados. Isso depende muito do tipo de dado que está sendo manipulado. 89 Operadores Aritméticos • Quando precisamos fazer cálculos em um algoritmo / programa, usamos os operadores aritméticos. 90 Operadores Aritméticos OPERADOR AÇÃO PRIORIDADE EXEMPLOS MATEMÁTICA ALGORITMO LINGUAGEM C RESULTADO ^ ** Exponenciação 1 2 3 2 ^ 3 2 ** 3 Implementado pela função pow, da biblioteca math.h 8 * Multiplicação 2 2 . 3 2 * 3 2 * 3 6 / Divisão 2 4 / 2 4 / 2 4 / 2 2 MOD % Resto da divisão (módulo) 2 10 / 3 10 MOD 3 10 % 3 2 + Adição 3 4 + 1 4 + 1 4 + 1 5 - Subtração 3 4 – 1 4 – 1 4 – 1 3 • Nas linguagens de programação e, portanto, nos exercícios de algoritmos, as expressões matemáticas sempre obedecem às regras matemáticas comuns: • As expressões dentro de parênteses são sempre resolvidas antes das expressões fora dos parênteses. 92 • Quando existem vários níveis de parênteses, ou seja, um parêntese dentro de outro, a solução sempre inicia do parêntese mais interno até o mais externo (“de dentro para fora”). • Quando duas ou mais expressões tiverem a mesma prioridade, a solução é sempre iniciada da expressão mais à esquerda até a mais à direita (“da esquerda para a direita”). 93 • Em algumas linguagens de programação é comum que os operadores possuam pequenas diferenças na sua forma de expressar, mas normalmente são parecidos e fáceis de interpretar. 94 Operadores Relacionais • Um algoritmo / programa pode realizar comparações entre valores de mesmo tipo, seja constantes, variáveis ou resultados de expressões. • Para isso, são usados os operadores relacionais. • O resultado de uma operação usando operadores relacionais sempre será do tipo lógico, ou seja, verdadeiro ou falso. 95 Operadores Relacionais 96 OPERADOR AÇÃO EXEMPLO Algoritmo Linguagem C Resultado < Menor que 5 < 2 5 < 2 F ou 0 > Maior que 5 > 2 5 > 2 V ou 1 <= Menor ou igual a 5 <= 2 5 <= 2 F ou 0 >= Maior ou igual a 5 >= 2 5 >= 2 V ou 1 == = Igual 5 = 2 5 == 2 F ou 0 != <> Diferente 5 <> 2 5 != 2 V ou 1 Operadores Relacionais - Exemplos • Sabendo que A=3, B=7 e C=4, informe se as expressões abaixo são verdadeiras ou falsas. a) (A + C) > B b) B > = (A + 2) c) (B + A) <= C d) (C + A) < C e) C == (B – A) 97 FALSO VERDADEIRO FALSO FALSO VERDADEIRO • A implementação a seguir, do site http://linguagemc.com.br/ mostra esses operadores em um programa. 98 http://linguagemc.com.br/ • Depois de ver essa implementação, façam a implementação de vocês, mas dessa vez, pedindo ao usuário que digite 2 números inteiros, e em seguida, fazendo todas as comparações possíveis com operadores relacionais. 101 102 Operadores Lógicos • Além destes operadores, temos ainda os operadores lógicos, usados para muitas rotinas de programação em softwares. • Eles combinam resultados lógicos, gerando novos valores lógicos (verdadeiro ou falso). • São usados na análise de 2 ou mais condições, de forma que uma decisão seja tomada. 103 Operadores Lógicos 104 OPERADOR AÇÃO PRIORIDADE Não (not) ! Negação 1 E (and) && Conjunção 2 OU (or) || Disjunção 3 • Os resultados de uma operação lógica se dão com base nas tabelas verdade. • Para o operador && (E) o resultado será verdadeiro caso todas as comparações sejam verdadeiras. 105 A B A && B 0 0 0 0 1 0 1 0 0 1 1 1 • Usando o operador || (OU) o resultado será verdadeiro bastando apenas uma das comparações ser verdadeira. 106 A B A || B 0 0 0 0 1 1 1 0 1 1 1 1• O operador de negação ! (NÃO) é utilizado para inverter o resultado de uma determinada condição. Ou seja, se a condição for verdadeira esta torna-se falsa, e se a condição for falsa ela torna-se verdadeira. 107 A !A 0 1 1 0 • A seguir podemos ver uma tabela verdade com todas as operações, e com algumas hipóteses. 108 Prioridade dos Operadores • Como vimos, os operadores possuem suas prioridades específicas. • Quando parênteses são usados, eles alteram a ordem de execução (executamos primeiro o que está dentro dos parênteses) e podemos usar quantos forem necessários. 109 • Caso uma expressão tenha operadores com a mesma prioridade, o computador vai realiza-las da esquerda para a direita. • Quando uma expressão possui vários parênteses, eles são avaliados e processados dos mais internos para os mais externos. 110 • Ordem de prioridade: 1. Expressões dentro de parênteses 2. Operadores aritméticos e suas prioridades 3. Operadores relacionais 4. Operadores lógicos e suas prioridades • Analise as operações a seguir. Qual o seu resultado? a) 10 – 4 * 2 + 1 = b) (10 – 4) * (2 + 1) = c) (10 – 4) * 2 + 1 = d) 10 – 4 * (2 + 1) = 111 3 18 13 -2 ESTRUTURAS DE DECISÃO Estruturas de Decisão • Comandos de decisão ou desvio fazem parte das técnicas de programação, para construir estruturas de algoritmos que não são totalmente sequenciais. • Com as instruções de desvio pode-se fazer com que o algoritmo proceda de uma ou outra maneira, de acordo com as decisões lógicas tomadas em função dos dados ou resultados anteriores. 113 • Na teoria, temos 3 tipos de estrutura de decisão: simples, composta e seleção encadeada. • A seleção simples é quando temos uma condição simples antes de executar uma ação. • A seleção composta é quando temos situações em que duas alternativas dependem de uma mesma condição, uma onde a condição pode ser verdadeira e outra onde a condição pode ser falsa. • A seleção encadeada é quando necessitamos agrupar várias seleções formando uma série de testes. Normalmente utilizada quando existe um grande conjunto de possibilidades ou combinações de situações. 114 • As principais estruturas de decisão são: • SE...ENTÃO (simples) • SE...ENTÃO...SENÃO (composta) • SE...ENTÃO...SENÃO (ENCADEADO) (encadeada) 115 • if ... • Executa algo somente quando uma condição é verdadeira • if... else • Bifurca a execução do código em função de uma condição • if... else... if... else... • Executa apenas o bloco em que a condição é verdadeira 116 Estruturas de Decisão Simples • Uma estrutura de decisão permite a escolha de um bloco (grupo de ações) a ser executado quando determinadas condições, representadas por expressões lógicas ou relacionais, são ou não satisfeitas. • Quando se deseja testar uma condição antes de executar uma ação, usa-se uma decisão simples. 117 • Pseudocódigo: se <condição> então <instruções> fim_se • Linguagem C: if (condição) { <instruções>; } 118 Se a condição for verdadeira, vai executar as instruções, senão, encerra a estrutura SE e não executa nada 119 • Porque usar? • Usada para decidir se um conjunto de ações opcionais deve ser executado ou não, dependendo do valor de algum dado ou de algum resultado que já tenha sido calculado no algoritmo. O valor do dado ou do resultado anterior será testado na operação lógica. 120 • Executa o bloco de instruções somente se a condição for verdadeira • A condição é uma expressão booleana que pode fazer uso de quaisquer operadores • O bloco de instruções é delimitado por chaves em linguagem C • Se for apenas uma instrução não precisa das chaves 121 Cálculo de média: 4 números tipo real • Pseudocódigo programa media var n1, n2, n3, n4, media: real início leia (n1, n2, n3, n4) media (n1+n2+n3+n4)/4 se media >= 7 então escreva (“aluno aprovado com nota”, media) fim_se fim • Linguagem C #include <stdio.h> #include <conio.h> #include <locale.h> int main() { setlocale(LC_ALL, "Portuguese"); float n1, n2, n3, n4, media; printf ("Forneça as 4 notas: \n"); scanf ("%f %f %f %f", &n1, &n2, &n3, &n4); media = (n1+n2+n3+n4)/4; if (media >=7) { printf ("\naluno aprovado com nota: %.2f",media); } return 0; } 122 if com instrução simples 123 Programa para somar dois números, se o usuário desejar 124 if com bloco de instruções 125 Estrutura de Decisão Composta • Quando temos uma situação em que duas alternativas dependem de uma mesma condição, uma alternativa se a condição for verdadeira e outra se a condição for falsa, usamos a estrutura de decisão composta. 126 • Pseudocódigo: se <condição> então <instruções> senão <instruções> fim_se • Linguagem C: if (condição) { <instruções>; } else { <instruções>; } 127 Se a condição for verdadeira, vai executar um grupo de instruções, e se for falsa, vai executar as instruções da cláusula senão 128 • Porque Usar? • Para decidir entre duas alternativas de ações. Um dos dois conjuntos de ações será executado e o outro não, dependendo do valor de algum dado ou de algum resultado que já tenha sido calculado no algoritmo. O valor do dado ou do resultado anterior será testado na operação lógica, determinando qual conjunto de ações será executado. 129 • Executa um ou o outro bloco de instruções em função da condição ser verdadeira ou falsa • Valem as mesmas regras para if... • Qualquer combinação de instrução individual ou em bloco é aceita no corpo do if ou do else • Podem ser aninhados com outras estruturas 130 Cálculo de média: 4 números tipo real • Pseudocódigo programa media var n1, n2, n3, n4, media: real início leia (n1, n2, n3, n4) media (n1+n2+n3+n4)/4 se media >= 7 então escreva (“aluno aprovado com nota”, media) senão escreva (“aluno reprovado com nota”, media) fim_se fim • Linguagem C (...) int main() { setlocale(LC_ALL, "Portuguese"); float n1, n2, n3, n4, media; printf ("Forneça as 4 notas: \n"); scanf ("%f %f %f %f", &n1, &n2, &n3, &n4); media = (n1+n2+n3+n4)/4; if (media >=7) { printf ("\naluno aprovado com nota: %.2f",media); } else { printf ("\naluno reprovado com nota: %.2f",media); } return 0; } 131 132 Estrutura de Decisão Encadeada • Em algumas situações, temos que agrupar várias decisões • Isso recebe o nome de decisão encadeada ou decisão aninhada. • Apenas o bloco no qual a condição é verdadeira é executado 133 • Podemos ter quantos if... else forem necessários • É possível adicionar um else ao final de tudo • Nesse caso, se nenhuma condição for verdadeira, o bloco do else será executado 134 • Pseudocódigo: Programa MaiorNumero; Var N1,N2: Inteiro; Inicio Escreva("Digite o primeiro número: "); Leia(N1); Escreva("Digite o segundo número: "); Leia(N2); Se (N1 == N2) então Escreva ("Os números são iguais”); Senão Se (N1 > N2) então Escreva("O maior valor é = ",N1); Senão Escreva("O maior valor é = ",N2); Fim. • Linguagem C: (...) int main() { setlocale(LC_ALL, "Portuguese"); int N1, N2 ; printf("Digite o primeiro numero: "); scanf("%d", &N1); printf("Digite o segundo numero: "); scanf("%d", &N2); if (N1 == N2) printf("Os numeros sao iguais!"); else if (N1 > N2) printf("O maior valor e = %d", N1); else printf("O maior valor e = %d", N2); return (0); } 135 136 137 Uso do if com operadores lógicos • Junto com as estruturas de decisão, pode-se usar os operadores lógicos para podermos ampliar a avaliação das condições que são testadas. • Por exemplo, se quiséssemos avaliar duas condições ao mesmo tempo no comando if e imprimir algo na tela do usuário não teríamos como fazer isto de forma prática sem os operadores lógicos. 138 • Lembrando: • And (&&): operador que une duas condições e retorna verdadeiro quando as duas forem verdadeiras • Or (||): operador que une duas condições e retorna verdadeiro quando pelo menos uma condição for verdadeira • Not (!): inverte o resultado de uma expressão lógica 139 • Podemos combinar estes operadores em um programa com as estruturas de decisão que acabamosde ver • O resultado serão programas capazes de avaliar várias condições simultaneamente. 140 ESTRUTURA DE SELEÇÃO Estrutura de Seleção • Estrutura que permite que seja executado um único conjunto de instruções entre vários, de acordo com o valor de um objeto. • Substitui a ocorrência de vários SE-ENTÃO- SENÃO • Não aceita expressões, apenas constantes 142 • Pseudocódigo Caso <variável> seja <valor 1> faça <instrução 1> seja <valor 2> faça <instrução 2> seja <valor 3> faça <instrução 3> Senão <instrução> Fim_caso 143 Variável a ser controlada Valores possíveis na variável Instruções a serem executadas quando o valor atender a variável Instruções a serem executadas caso nenhum valor seja igual a variável de comparação • Linguagem C switch (<variável>) { case <valor1>: <instrução 1>; break; case <valor2>: <instrução 2>; break; case <valor3>: <instrução 3>; break; default: <instrução>; break; } 144 •Usada para: •Escolher apenas um conjunto de ações dentre vários alternativos. •Aqui o teste não é mais uma operação lógica: o próprio valor de algum dado ou resultado anterior (que pode ser de outros tipos além do lógico) é que vai determinar qual desses conjuntos de ações será executado. 145 146 • A opção default é opcional, não obrigatória, e pode aparecer em qualquer local do switch, não obrigatoriamente no final, embora usemos sempre no fim a título de organização • O comando break não faz parte do comando switch, embora sejam usados em conjunto. 147 • Se você tiver 2 cases que não são separados por um comando break, dizemos que o controle "vaza" de um case para o outro, ou seja, quando o primeiro case é selecionado para execução, não apenas o comando associado a ele é executado, mas também o comando associado ao segundo. 148 • Se você tiver mais de um case com a mesma ação, pode colocá-los juntos: Switch case 0: case 2: case 4: printf("\nPar"); break; 149 Exemplo: digitar um dia da semana e escrever na tela que dia da semana é 150 151 ESTRUTURAS DE REPETIÇÃO Estruturas de Controle e Repetição • Estruturas de controle e repetição são utilizadas quando desejamos criar blocos controlados em nossos programas. • As estruturas de repetição (também conhecidas como loop) são necessárias quando se tem que repetir uma determinada instrução, que represente um comportamento padrão, várias vezes 153 • Com essas estruturas, escreve-se a instrução uma única vez e ela pode ser executada várias vezes. • Repetições podem ser controladas por: • Condição • Contador 154 • Quando o controle é por contador, a interrupção é prevista no instante em que é iniciada a execução da estrutura de controle de repetições. • Quando o controle é por condição, deverá haver uma expressão lógica, e a interrupção será controlada por meio do resultado dessa expressão. • É imprescindível que haja uma instrução dentro do bloco de instruções que permita a alteração do valor lógico da condição 155 • Algumas dessas estruturas são de Controle e Repetição, como While e For. Elas são estruturas que criam blocos em laço, ou seja, em loopings no programa. • Já estruturas If e o Switch (que vimos nas aulas anteriores) são apenas blocos condicionais sem looping. 156 ESTRUTURA FOR (PARA) • O For é uma estrutura de repetição que usamos quando queremos definir o número de vezes em que um bloco será repetido. • Usamos o for com um contador, que permite executar uma ou mais instruções por um determinado número de vezes. 158 • Para controlar o número de repetições, empregamos uma variável do tipo numérico inteiro • Comumente, um loop For possui uma parte inicial com o contador, seguida por uma condição, que determina o limite do laço e depois a parte final com o incremento ou decremento das variáveis do laço. 159 • Ao encontrar a instrução FOR, é atribuído à variável o valor de início declarado. • A partir daí, a sequência de comandos é executada repetidamente, até que a variável atinja o valor de fim. • A cada vez que a sequência de comandos é executada, a variável é incrementada automaticamente. 160 • Essa estrutura só pode ser utilizada em repetições controladas por um contador. • Isto é, aquelas repetições que sabemos o número de vezes que acontecerá quando iniciamos sua execução. • Trata-se de um loop com número de iterações pré-definido. 161 162 • Pseudocódigo Para (valor inicial até condição_final passo n)faça Inicio Instruções; Fim; • Onde: • valor_inicial é uma instrução de atribuição do valor inicial do laço para a variável de controle. • condição final é uma condição que controla o laço. • passo é o incremento do laço. 163 Condições do For 164 Muito útil quando se sabe de antemão quantas vezes a repetição deverá ser executada Este laço utiliza uma variável para controlar a contagem do loop, bem como seu incremento A própria estrutura faz a inicialização, incremento e encerramento do laço For em Linguagem C for(valor_inicial; condição_final; valor_incremento) { instruções; } 165 #include <stdio.h> #include <locale.h> int main(void) { setlocale(LC_ALL, "Portuguese"); int contador; for(contador = 1; contador <= 10; contador++) { printf("%d ", contador); } return(0); } 166 contador foi inicializado com um valor determinado testamos se a condição que envolve o contador é verdadeira em caso afirmativo, a repetição continua; caso contrário, ela será encerrada A cada nova repetição a variável do contador é incrementada 167 • Em certos casos, ao invés de incrementar, podemos decrementar a variável de controle e construir um laço com contagem decrescente. • Para tanto, devemos inicializar a variável de controle com um valor adequado e construir a condição necessária para que o laço seja finalizado. 168 169 ESTRUTURA WHILE (ENQUANTO) • É uma estrutura de repetição com condição que permite executar uma ou mais instruções um determinado número de vezes. • O bloco será executado enquanto o resultado da <expressão lógica> for verdadeiro. 171 • Se já da primeira vez o resultado for falso, os comandos não são executados nenhuma vez. • Portanto, a quantidade de repetições é indeterminada nessa estrutura. • Permite executar diversas vezes um trecho do algoritmo, porém, sempre verificando antes de cada execução se é permitido executar o trecho. 172 • O fluxo nesse comando é o seguinte: • A primeira vez que se chega ao comando de repetição, é feito o teste da <expressão lógica>, que determina se deve ou não entrar no bloco. • Se entrar, ao final do bloco volta-se para a primeira linha do bloco e então testa-se novamente a <expressão lógica>. 173 • Esta estrutura de repetição é também chamada de loop pré testado, pois a expressão booleana é verificada antes da primeira execução. • Como já foi dito, se inicialmente ela já resultar em FALSO, as instruções que estão dentro do bloco não são executadas nenhuma vez. 174 • Quando utilizar? • Quando não há necessidade de inicializar ou atualizar variáveis contadoras. • Quando as etapas de inicialização ou atualização requerem muitas instruções e não caberiam elegantemente numa única linha do for. • Quando as informações necessárias para avaliar a condição não dependem de uma variável contadora ou são obtidas durante a execução do bloco. 175 • É uma estrutura de repetição que inicia seu bloco com uma condição. • Caso a condição seja satisfeita (seja verdadeira), o bloco inteiro será executado, caso contrário, o bloco será desconsiderado e o fluxo normal do programa será desviado para o final do bloco. • A estrutura While é a estrutura Enquanto, utilizada em algoritmos com o Português- Estruturado. 177 • Pseudocódigo iniciar a variável de controle enquanto <expressão lógica> faça <instrução 1> <instrução 2> <instrução n> Atualizar a variável de controle; fim_enquanto 178 Lembre-se: em uma <expressão lógica>, o resultado deve ser verdadeiro ou falso Condições do While 179 Variável de controle é aquelaque é testada na condição Para que seja possível fazer o teste, a variável de controle deve ter sido inicializada previamente O teste da condição ocorre no início do laço Enquanto a condição permanecer verdadeira, as instruções são executadas Quando a condição se tornar falsa, o processamento será desviado para fora do laço Caso a condição seja falsa logo no início, as instruções do laço são ignoradas While em Liguagem C while (condição) { Instrução ou bloco de instruções; } 180 #include <stdio.h> int main(void) { int contador = 1; while (contador <= 10) { printf("%d ", contador); contador++; } return 0; } 181 variável de controle denominada contador foi declarada e inicializada com o valor 1 teste da condição while é realizado como o contador é menor que 10, então a condição é verdadeira Como a condição é verdadeira, o programa entra dentro do corpo do laço e executa o printf, exibindo o valor da variável contador Após executar o comando printf, o contador é incrementadoDepois do incremento, a condição é testada novamente e enquanto for verdadeira, os comandos são executados de novo, até que a condição se torne falsa. A condição falsa faz com que o laço seja encerrado 182 ESTRUTURA DO... WHILE • Essa estrutura de repetição, garante que o bloco de instruções seja executado no mínimo uma vez, já que a condição que controla o laço é testada apenas no final do comando. • A diferença entre o comando while e o do…while é justamente o local onde a condição que controla o laço é testada. 184 • No comando while a condição é testada antes do bloco de instruções, e caso a condição seja falsa a repetição não será executada. • No do…while o bloco de comandos é executado pelo menos uma vez de forma obrigatória, independente do resultado da expressão lógica 185 • O fluxo nesse comando é: • A primeira vez que se chega ao comando de repetição, entra-se no bloco • Ao final do bloco, testa-se a condição e volta para a primeira linha do bloco se a condição for falsa • O bloco será executado sempre que o resultado da <expressão lógica> for verdadeiro • No momento em que se tornar falso a ação subsequente ao comando “até que” será executada. 186 • Pseudocódigo faça <instrução 1> <instrução 2> <instrução n> enquanto <expressão lógica> 188 Lembre-se: em uma <expressão lógica>, o resultado deve ser verdadeiro ou falso #include <stdio.h> #include <locale.h> int main(void) { setlocale(LC_ALL, "Portuguese"); float nota1=0,nota2=0,media=0; int cont; do { printf("\nDigite a primeira nota: "); scanf("%f",¬a1); printf("Digite a segunda nota: "); scanf("%f",¬a2); media = (nota1 + nota2)/2; printf("Media do aluno = %f\n\n",media); printf("Digite 1 para continuar ou 2 para sair: "); scanf("%d", &cont); }while (cont==1); return 0; } 189 190 Comparação entre as Estruturas de Repetição 191 VETOR • Quando precisamos armazenar uma quantidade de informações e acessá-las posteriormente, não é possível apenas com estruturas de repetição. • Os vetores possuem uma característica bastante interessante, pois podem armazenar uma grande quantidade de informação dentro de uma única variável. 193 • Os vetores nada mais são do que matrizes unidimensionais, é uma estrutura de dados muito utilizada na programação. • Quando trabalhamos com vetores (assim como matrizes), todos os elementos devem ser do mesmo tipo. • Vetores são objetos mutáveis, isto é, podem ser alterados na memória. 194 • O vetor é uma variável que possui vários elementos internos, sendo acessados através de seu índice para poderem ser utilizados. • O índice é um valor numérico inteiro e positivo e corresponde ao endereço de alocação de uma unidade do vetor, ou seja, o índice é um número que identifica de qual posição dentro do vetor estamos falando. 195 • Quando se trabalha com vetores, é importante se atentar ao fato de que estamos trabalhando com uma quantidade grande de elementos, que só poderão ser acessados na íntegra com as funções apropriadas para vetores. 196 • Nos referimos a cada posição do vetor usando seu nome, seguido de seu índice, delimitado pelos caracteres de colchetes [ ] • Quando trabalhamos com linguagem C, os índices de um vetor vão de 0 até n-1, onde n é a quantidade total de posições do vetor. 197 • Para se declarar um vetor podemos utilizar a seguinte forma geral: tipo_do_vetor nome_do_vetor [tamanho]; float vet_exemplo [8]; • Quando a linguagem C, vê uma declaração como esta, ele reserva um espaço na memória suficientemente grande para armazenar o número de células especificadas em tamanho. 198 • Então, quando tivermos : vet_exemplo[2]; • O vetor vai retornar o valor do índice 2, que representa o terceiro item do mesmo 199 • Para acessar as posições desse vetor, vamos escrever: vet_exemplo[0]; vet_exemplo[1]; vet_exemplo[2]; vet_exemplo[3]; vet_exemplo[4]; vet_exemplo[5]; vet_exemplo[6]; vet_exemplo[7]; 200 • Mas durante a programação, você pode colocar vet_exemplo [24] por exemplo... • A linguagem C não verifica se o índice que você usou está dentro dos limites válidos. Este é um cuidado que o desenvolvedor deve ter. 201 • Para atribuirmos valores ao nosso vetor, devemos usar seu nome, a posição dentro dos colchetes, o símbolo de igual, e o valor a ser atribuído: vet_exemplo [0] = 1; vet_exemplo [1] = 5; vet_exemplo [2] = vet_exemplo [0] + vet_exemplo [1]; vet_exemplo [3] = vet_exemplo [2] - 4; 202 • A forma mais comum de se entrar com dados em vetores é usando o laço de repetição for: ... for (i = 0; i <= 7; i++) { scanf (“%d”, &vet_exemplo [i]); ... } ... 203 Exemplo 1 • Vamos fazer um programa que leia 5 notas de alunos, mostre as 5 notas, calcule e mostre a média 204 205 206 Exemplo 2 • Fazer um programa com 2 vetores com 5 valores reais cada, previamente definidos, em que um terceiro vetor é criado a partir da média entre os dois primeiros vetores (média entre a posição 0 do primeiro com a posição 0 do segundo; média entre a posição 1 do primeiro e a posição 1 do segundo, e assim sucessivamente). A seguir, fazer a média dos valores contidos no terceiro vetor. Apresentar ao usuário os valores contidos no terceiro vetor e sua média. • Vetor 1: 33, 21, 45, 13, 3 • Vetor 2: 8, 4, 16, 28, 12 207 208 209 Exemplo 3 • Considerando um vetor que possa armazenar 5 valores inteiros, faça um programa em C que: • Crie esse vetor • Peça ao usuário para digitar os valores • Armazene os valores no vetor • Exiba os valores de acordo com o índice do vetor em ordem crescente • Exiba os valores de acordo com o índice do vetor em ordem decrescente 210 211 212 SUB-ROTINAS • Muitos problemas grandes e de solução complexa geram problemas complexos, e podem ser divididos em problemas menores e com lógica mais simples e de compreensão mais fácil, tornando a tarefa de desenvolvimento e manutenção menos desgastantes. • Em vez de escrever um algoritmo grande, podemos dividir o mesmo em vários algoritmos menores. 214 • Chamamos essas divisões de sub-rotinas, sendo que cada uma é, na verdade, um programa, que por sua vez pode ser dividido em outros tantos quanto forem necessários. • Essas sub-rotinas podem ter variáveis próprias ou usar as variáveis declaradas no programa principal. 215 • De acordo com o contexto em que esta inserida, uma variável pode ser considerada uma variável local ou uma variável global. 216 217 • No contexto de programação, podemos definir uma sub-rotina como sendo uma porção de código que pode receber argumentos de entrada (parâmetros), realizar procedimentos específicos e retornar (ou não) um valor. • A porção de código que define uma sub-rotina possui um certo isolamento em relação ao restante do código, e pode ser chamada um número arbitrário de vezes em um programa. 218 • De maneira geral, uma sub-rotina é um estrutura para agrupar um conjunto de instruções que podem ser reutilizadas. 219 • Vantagens: • Diferentespartes do algoritmo podem ser independentes, de forma que possam ser escritas e testadas separadamente • Sub-rotinas podem ser escritas de forma a serem reutilizadas em diferentes partes do algoritmo • Algoritmos complexos podem ser elaborados a partir de unidades menores já prontas • Garante maior legibilidade • Facilitam a manutenção e a correção de erros 220 221 222 Sub-rotinas são conhecidas por diversos nomes em linguagens de programação como funções, rotinas, procedimentos, métodos e subprogramas. FUNÇÕES • Existem, na maioria das linguagens de programação, dois tipos de sub-rotinas: as que não devolvem valor e as que devolvem valor. • Em linguagem C, as sub-rotinas são chamadas de função. 224 • Funções que não devolvem valor: • Conjunto de comandos aos quais foi dado um nome específico • Nesse caso, separa-se um bloco de comandos com o intuito de realizar alguma operação • Funções que devolvem valor: • Conjunto de comandos aos quais foi dado um nome específico • Nesse caso, separa-se um bloco de comandos com o intuito de realizar alguma operação e retornar um valor. 225 • A maioria das linguagens de programação possui algumas funções pré-definidas, facilitando o trabalho de todos os programadores. • A linguagem C é uma linguagem procedural, ou seja, é baseada em funções (procedimentos). • Todo programa escrito em linguagem C precisa ter, no mínimo, a função main () 226 • O uso dos parênteses após o nome da função é o que efetivamente faz a mesma ser chamada a executar seu procedimento. • Dentro do parênteses, passamos os argumentos de entrada para a função. • Uma determinada função pode ser chamada a qualquer hora durante a execução de um programa a partir de outras funções ou por si mesma. 227 Sintaxe de uma Função em C <tipo de dado> <identificador da função> (<parâmetros>) { <instruções> } 228 Escopo de Variáveis • Por escopo de uma variável entende-se o bloco de código onde esta variável é válida. 229 • As variáveis valem no bloco que são definidas. • As variáveis definidas dentro de uma função recebem o nome de variáveis locais. • As variáveis definidas fora de qualquer função (no começo, com a importação das bibliotecas), são chamadas de variáveis globais. • Uma variável definida dentro de uma função não é acessível em outras funções, MESMO QUE ESTAS VARIÁVEIS TENHAM NOMES IDÊNTICOS 230 Função que não devolve valor • O objetivo de se declarar uma função é associá-la a um identificador para que a mesma possa ser “chamada” por um comando em outra função. 231 • Quando uma função que não devolve valor é criada, devemos usar o void no <tipo de dado> do cabeçalho da função. 232 • A chamada, ou ativação, da função que não devolve valor é feita referenciando-se seu nome, seguido de abre e fecha parênteses, no local do programa onde a mesma deve ser ativada. • Ao terminar a execução dos comandos da função, a sequencia do programa retorna sempre à instrução seguinte que provocou sua chamada. 233 Exemplo de função que não devolve valor 234 Exemplo de função que não devolve valor • Cálculo da soma de dois números utilizando o conceito de função que não devolve valor. 235 236 237 Função que devolve valor • Distingue-se da função que não devolve valor pela característica de retornar um valor. • O objetivo de se declarar uma função que devolve valor é associá-la a um identificador para que a mesma possa ser ativada em uma expressão em uma outra função. 238 • Funções desse tipo devem ser chamadas dentro de expressões: x = função (); 239 Exemplo de função que não devolve valor 240 Exemplo de função que devolve valor • Cálculo da soma de dois números utilizando o conceito de função que devolve valor. 241 242 243 Localização da Função • A princípio podemos tomar como regra a seguinte afirmativa toda função deve ser declarada antes de ser usada. • Alguns programadores preferem que o início do programa seja a primeira parte de seu programa. 244 • Para isto a linguagem C permite que se declare uma função, antes de defini-la. • Esta declaração é feita através do protótipo da função, que nada mais é que o trecho de código que especifica o nome e os parâmetros da função. 245 246 Passagem de Parâmetros • Algumas vezes, temos que enviar valores do programa principal para uma função. Esses valores são chamados de parâmetros. 247 • O parâmetro pode ser real ou formal: • Parâmetro real: variáveis, expressões ou valores usados na chamada da função, também chamado de argumento; • Parâmetro formal: identificadores usados no cabeçalho da função, também chamados de parâmetros apenas. • Existem dois tipos de passagem de parâmetros: • Passagem por valor • Passagem por referência 248 Passagem de Parâmetro por Valor • Na passagem por valor, o que é passado para a função é o valor da variável usada como parâmetro real. • A função copia o valor do parâmetro real para a variável declarada como parâmetro formal. 249 • Qualquer alteração no conteúdo de um parâmetro formal, dentro de uma função, não será refletido no parâmetro real. • Um parâmetro formal é considerado uma variável local, deixando de existir ao término da função. 250 251 252 Exemplo de Passagem de Parâmetro por Valor 253 Exemplo de Passagem de Parâmetro por Valor 254 Exemplo de Passagem de Parâmetro por Valor 255 Passagem de Parâmetro por Referência • Na passagem por referência, o que é passado para a função não é o valor de uma variável, mas o seu endereço. • Lembre-se que uma variável é uma entidade que possui um endereço de memória e um valor armazenado. 256 • A função faz com que a variável do parâmetro formal passe a ter o mesmo endereço da variável do parâmetro real. • A alteração no conteúdo de um parâmetro formal, dentro de uma função, reflete no parâmetro real, ou seja, as alterações feitas dentro da função tem efeito direto nas variáveis passadas como argumentos na chamada. • Isto proporciona a oportunidade de retornar vários valores em uma única função já que as alterações ocorrem diretamente nas variáveis. 257 Exemplo de Passagem de Parâmetro por Referência 258 Exemplo de Passagem de Parâmetro por Referência 259 Número do slide 1 LÓGICA E ALGORITMOS Número do slide 3 Número do slide 4 Número do slide 5 PROGRAMAS E LINGUAGENS DE PROGRAMAÇÃO Linguagem de Programação Linguagens de Baixo Nível Linguagens de Alto Nível Número do slide 10 Programa de Computador (Software) Número do slide 12 Número do slide 13 Número do slide 14 Número do slide 15 Número do slide 16 LÓGICA DE PROGRAMAÇÃO O que é Lógica Lógica de Programação Sequência Lógica Instruções Número do slide 22 Algoritmo Número do slide 24 Número do slide 25 Número do slide 26 Exemplos de Algoritmos Número do slide 28 Número do slide 29 Número do slide 30 FORMAS DE REPRESENTAÇÃO DA LÓGICA DE PROGRAMAÇÃO Representação de Algoritmos Número do slide 33 Descrição Narrativa Número do slide 35 Fluxograma Número do slide 37 Símbolos Básicos Pseudocódigo Número do slide 40 Número do slide 41 Exemplo - algoritmo que faz a soma de dois números inteiros quaisquer� Número do slide 43 Número do slide 44 Número do slide 45 Número do slide 46 TIPOS DE DADOS Número do slide 48 Número do slide 49 Número do slide 50 Número do slide 51 Número do slide 52 Número do slide 53 Número do slide 54 Número do slide 55 Para que se faça a escolha adequada do tipo de operador, é necessário entender bem o que seu programa precisa. Número do slide 57 VARIÁVEIS E CONSTANTES Número do slide 59 Variáveis Número do slide 61 Sintaxe para criação de variável em C Constantes Sintaxe para criação de sintaxe em C Número do slide 65 Número do slide 66 Exemplo de Código com Variável e Constante Número do slide 68 ENTRADA, ATRIBUIÇÃO E SAÍDA DE DADOS Número do slide 70 Número do slide 71 Número do slide 72 Número do slide 73 Exemplo: algoritmo para transformar umavelocidade fornecida em m/s pelo usuário para km/h. OBS: para isso, multiplicar a velocidade por 3,6 Número do slide 75 Função SCANF() Número do slide 77 Número do slide 78 Número do slide 79 Função PRINTF Número do slide 81 Número do slide 82 Número do slide 83 Exemplo Número do slide 85 OPERADORES Número do slide 87 Número do slide 88 Número do slide 89 Operadores Aritméticos Operadores Aritméticos Número do slide 92 Número do slide 93 Número do slide 94 Operadores Relacionais Operadores Relacionais Operadores Relacionais - Exemplos Número do slide 98 Número do slide 99 Número do slide 100 Número do slide 101 Número do slide 102 Operadores Lógicos Operadores Lógicos Número do slide 105 Número do slide 106 Número do slide 107 Número do slide 108 Prioridade dos Operadores Número do slide 110 Número do slide 111 ESTRUTURAS DE DECISÃO Estruturas de Decisão Número do slide 114 Número do slide 115 Número do slide 116 Estruturas de Decisão Simples Número do slide 118 Número do slide 119 Número do slide 120 Número do slide 121 Cálculo de média: 4 números tipo real Número do slide 123 Programa para somar dois números, se o usuário desejar Número do slide 125 Estrutura de Decisão Composta Número do slide 127 Número do slide 128 Número do slide 129 Número do slide 130 Cálculo de média: 4 números tipo real Número do slide 132 Estrutura de Decisão Encadeada Número do slide 134 Número do slide 135 Número do slide 136 Número do slide 137 Uso do if com operadores lógicos Número do slide 139 Número do slide 140 ESTRUTURA DE SELEÇÃO Estrutura de Seleção Número do slide 143 Número do slide 144 Número do slide 145 Número do slide 146 Número do slide 147 Número do slide 148 Número do slide 149 Exemplo: digitar um dia da semana e escrever na tela que dia da semana é Número do slide 151 ESTRUTURAS DE REPETIÇÃO Estruturas de Controle e Repetição Número do slide 154 Número do slide 155 Número do slide 156 ESTRUTURA FOR (PARA) Número do slide 158 Número do slide 159 Número do slide 160 Número do slide 161 Número do slide 162 Número do slide 163 Condições do For For em Linguagem C Número do slide 166 Número do slide 167 Número do slide 168 Número do slide 169 ESTRUTURA WHILE (ENQUANTO) Número do slide 171 Número do slide 172 Número do slide 173 Número do slide 174 Número do slide 175 Número do slide 176 Número do slide 177 Número do slide 178 Condições do While While em Liguagem C Número do slide 181 Número do slide 182 ESTRUTURA DO... WHILE Número do slide 184 Número do slide 185 Número do slide 186 Número do slide 187 Número do slide 188 Número do slide 189 Número do slide 190 Comparação entre as Estruturas de Repetição VETOR Número do slide 193 Número do slide 194 Número do slide 195 Número do slide 196 Número do slide 197 Número do slide 198 Número do slide 199 Número do slide 200 Número do slide 201 Número do slide 202 Número do slide 203 Exemplo 1 Número do slide 205 Número do slide 206 Exemplo 2 Número do slide 208 Número do slide 209 Exemplo 3 Número do slide 211 Número do slide 212 SUB-ROTINAS Número do slide 214 Número do slide 215 Número do slide 216 Número do slide 217 Número do slide 218 Número do slide 219 Número do slide 220 Número do slide 221 Número do slide 222 FUNÇÕES Número do slide 224 Número do slide 225 Número do slide 226 Número do slide 227 Sintaxe de uma Função em C Escopo de Variáveis Número do slide 230 Função que não devolve valor Número do slide 232 Número do slide 233 Exemplo de função que não devolve valor Exemplo de função que não devolve valor Número do slide 236 Número do slide 237 Função que devolve valor Número do slide 239 Exemplo de função que não devolve valor Exemplo de função que devolve valor Número do slide 242 Número do slide 243 Localização da Função Número do slide 245 Número do slide 246 Passagem de Parâmetros Número do slide 248 Passagem de Parâmetro por Valor Número do slide 250 Número do slide 251 Número do slide 252 Exemplo de Passagem de Parâmetro por Valor Exemplo de Passagem de Parâmetro por Valor Exemplo de Passagem de Parâmetro por Valor Passagem de Parâmetro por Referência Número do slide 257 Exemplo de Passagem de Parâmetro por Referência Exemplo de Passagem de Parâmetro por Referência
Compartilhar