Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos BCC Diego Bertolini diegobertolini@gmail.com http://www.inf.ufpr.br/diegob/ Aula 002 – Introdução à Ling. C.•Aula Anterior: • Introdução à linguagem C. •Aula de Hoje: • Operadores aritméticos, lógicos e relacionais. Operador de Atribuição “=” • A Atribuição “ = “ é uma das operações mais usadas na programação ; • Responsável por atribuir determinado valor a uma variável ; • Em linguagem C, o uso do operador “=” segue esta forma geral: nome_da_variavel = expressao ; • Por expressão, entende-se: Valores, Variáveis, Constantes ou Chamadas de Funções ; Exemplos: • A Atribuição “ = “ é uma das operações mais usadas na programação ; • Responsável por atribuir determinado valor a uma variável ; • Em linguagem C, o uso do operador “=” segue esta forma geral: nome_da_variavel = expressao ; • Por expressão, entende-se: Valores, Variáveis, Constantes ou Chamadas de Funções ; Exemplos: Operador de Atribuição “=” • A Linguagem C suporta Múltiplas Atribuições ; Operador de Atribuição “=” • A Linguagem C também permite atribuição entre dois tipos básicos diferentes ; • O compilador converte automaticamente o valor do lado direito para o tipo do lado esquerdo do comando de atribuição “=”; • Durante a etapa de conversão de tipos, pode haver perda de informação. Operador de Atribuição “=” • Na conversão de tipos, durante a atribuição, pode haver perdas... Operadores Aritméticos Operadores Aritméticos Operador de Atribuição “=” • Podemos devolver o resultado de uma expressão a uma variável ; • Ou para um outro comando ou função que espere receber um valor do mesmo tipo do resultado da operação. • De modo geral, os operadores aritméticos são operadores binários (atuam sobre dois valores); • Os operadores de Adição e Subtração podem ser unários ; • x = - y ; • X = (-1) * y ; Operador de Atribuição “=” • Em uma operação utilizando o operador de quociente (/), Em uma operação utilizando o operador de quociente (/), se o numerador e o denominador forem números se o numerador e o denominador forem números inteiros, por padrão o compilador retornará apenas a inteiros, por padrão o compilador retornará apenas a parte inteira da divisão ;parte inteira da divisão ; Operadores Relacionais • Os operadores relacionais são aqueles que operam sobre dois valores (valores, variáveis, constantes ou chamadas de funções) e/ou expressões e verificam a magnitude (qual é maior ou menor) e/ou igualdade entre eles. • Os operadores relacionais são operadores de comparação de valores ; • A linguagem C possuem 6 operadores relacionais: Operadores Relacionais Operadores Relacionais • Como resultado, esse tipo de operador retorna: • O valor UM (1), se a expressão relacional for considerada VERDADEIRA ; • O valor ZERO (0), se a expressão relacional for considerada FALSA ; Operadores Relacionais Operadores Lógicos • Certas situações não podem ser modeladas apenas utilizando operadores aritméticos e relacionais ; • Um exemplo bem simples disso é saber se determinada variável esta dentro de uma faixa de valores ; • Por exemplo: 0 < x < 10 Para modelar esse tipo de situação, a linguagem C possui um conjunto de três operadores Lógicos. Operadores Lógicos Operadores Lógicos • Operador E (&&): A expressão só é verdade se ambas as expressões unidas por esse operador também forem. • Operador OU (||): A expressão resultante é verdadeira se alguma das expressões unidas por esse operador também for. • Operador NEGAÇÃO (!): Inverte o valor lógico da expressão à qual se aplica. • Os operadores Lógicos atuam sobre valores lógicos e retornam um valor lógico • 1 : Se a expressão for verdadeira ; • 0 : Se a expressão for falsa; Operadores Lógicos Tabela Verdade Operadores de Atribuição Simplificada • Muitos operadores são sempre usado em conjunto com o operador de atribuição ; • Para tornar esta tarefa mais simples, a Linguagem C permite simplificar algumas expressões Operadores de Atribuição Simplificados. • Exemplos: Op. Significado Exemplo *= Aritmético de atribuição (multiplicação) N*=2; equivale a N=N*2; /= Aritmético de atribuição (divisão) N/=4; equivale a N=N/4; %= Aritmético de atribuição (módulo) N%=5; equivale a N igual ao resto da divisão de N por 5; += Aritmético de atribuição (adição) N+=3; equivale a N=N+3; -= Aritmético de atribuição (subtração) N-=2; equivale a N=N-2; Operadores de Pré e Pós Incremento • Além dos operadores simplificados, a linguagem C também possui operadores de incremento (++) e decremento (--). Esses operadores podem ser utilizados sempre que for necessário somar uma unidade (incremento) ou subtrair uma unidade (decremento) a determinado valor. – Incremento (++) – Decremento (–) Exemplos: – x++ → x = x + 1 – y-- → y = y - 1 – ++x → x = x + 1 – --y → y = y - 1 Operadores de Pré e Pós Incremento • Note que este operador pode ser usado antes ou depois do nome da variável, com uma diferença significativa: – ++x (pré-incremento): Soma +1 a variável x antes de utilizar seu valor ; – x++ (pós-incremento): Soma +1 a variável x depois de utilizar seu valor ; – --x (pré-decremento): Subtrai -1 a variável x antes de utilizar seu valor ; – x-- (pós-decremento): Subtrai -1 a variável x depois de utilizar seu valor ; Operadores de Pré e Pós Incremento • Essa diferença de sintaxe no uso do operador não tem importância se o operador for usado sozinho; Operadores de Pré e Pós Incremento • Porém, se esse operador for utilizado dentro de uma expressão aritmética, a diferença entre os dois operadores será evidente; Operadores de Pré e Pós Incremento – y = ++x ; é equivalente à: – x = x + 1 – y = x – y = x++ ; é equivalente à : – y = x ; – x = x + 1 ; Modeladores de Tipo (casts) Modeladores de tipo ou (type cast) são uma forma explícita de conversão de tipo, na qual o tipo a ser convertido é explicitamente definido dentro de um programa. Em linguagem C, o uso do modelador de tipo, segue a forma geral: (nome_do_tipo) expressão – Um modelador de tipo é definido pelo próprio nome_do_tipo entre parênteses. Ele é colocado à frente de uma expressão e tem como objetivo forçar o resultado da expressão a ser de um tipo especificado Modeladores de Tipo (casts) Modeladores de Tipo (casts) Operador Vírgula (,) Na Linguagem C, o operador vírgula pode ser utilizado de duas maneiras ; – Como pontuação para separar elementos de uma função: • int minha_funcao (int a , int b, float r) - Para determinar uma lista de expressões que devem ser executadas sequencialmente: X = (y = 2 , y + 3) ; Nesse caso, as expressões serão executadas da esquerda para direita; Precedência de Operadores A Linguagem C contém muitos operadores. Consequentemente o uso de muitos operadores em uma expressão pode tornar confuso a sua interpretação. Por esse motivo a linguagem C possui uma série de regras de precedência de operadores. Isso permite que o compilador possa decidir corretamente qual a ordem que os operadores serão executados ; Seguem basicamente as regras matemáticas ; Pode-se utilizar parênteses para forçar o compilador a executar uma parte da expressão antes das demais ; Tabela em pdf. Lista dos Mais Utilizados... • Exemplos:Op. Significado Exemplo = Atribuição A=5; caracter=‘B’; *= Aritmético de atribuição (multiplicação) N*=2; equivale a N=N*2; /= Aritmético de atribuição (divisão) N/=4; equivale a N=N/4; %= Aritmético de atribuição (módulo) N%=5; equivale a N igual ao resto da divisão de N por 5; += Aritmético de atribuição (adição) N+=3; equivale a N=N+3; -= Aritmético de atribuição (subtração) N-=2; equivale a N=N-2; + Soma A=A+1; - Subtração Total=subtotal-desconto; * Multiplicação nota=nota*2; / Divisão Comissão=lucro/4; % Módulo (retorna o resto da divisão) Resto=8%3; ++ Incrementa de um o operando i++; -- Decrementade um o operando j--; Atividades: Bloco de Comandos • Blocosde código formados por um ou mais comandos que são tratados como uma unidade. • Em C, os delimitadores de bloco: { e }; • Utilizados normalmente em conjunto com outros comandos: if(), while(), for(); Escopo de Variáveis • Trata sobre a acessibilidade das variáveis. • Escopo de uma variável entende-se o bloco de código onde esta variável é válida. • Escopo local: visível em um local específico • Exemplo: variáveis locais de uma função. • Escopo global: visível a todo o programa. • Exemplo: variáveis globais do programa. Escopo de Variáveis • Algumas regras a partir do conceito: • 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; • Os parâmetros formais de uma função valem também somente dentro da função; • Uma variável definida dentro de uma função não é acessível em outras funções, mesmo que tenham nomes idênticos. Escopo de Variáveis main funcaoB funcaoA funcaoC funcaoB: 3 funcaoA: 1 funcaoC: 4 resultado Teste de Mesa • Consiste em elencar as variáveis em uma espécie de tabela e mostrar as alterações que estas sofrem no decorrer da execução do programa. Funções • É o conceito de subprogramas • Permite modularizar um programa → divisão em várias partes • É um conjunto de comandos agrupados em um bloco que recebe um nome e através deste nome pode ser invocado (chamado). Por que usar? • Reaproveitamento de código existente. • Evitar que um trecho de código que seja repetido várias vezes dentro de um mesmo programa. • Permitir a alteração de um trecho de código de uma forma mais rápida. Com o uso de uma função é preciso alterar apenas dentro da função que se deseja; • Para que os blocos do programa não fiquem grandes demais → mais difíceis de entender; • Facilitar a leitura do programa-fonte → legibilidade • Para separar o programa em partes (blocos) que possam ser logicamente compreendidos de forma isolada. Funções de entrada e saída • Exemplo que já vimos de uso de funções. Formato Geral de uma função em C • A Lista de Parâmetros (lista_de_parametros) ou Lista de Argumentos, é opcional. • O próprio main (programa principal) é uma função. tipo_da_funcao NomeDaFuncao (lista_de_parametros) { /* corpo da função */ } int main(){ /* Corpo do programa principal */ return 0; } Parâmetros • A utilização de parâmetros torna o uso de funções um pouco mais amplo. • Eles determinam sobre quais dados a função trabalhará. • A função printf(“Olá Mundo!”) recebe por parâmetro a mensagem “Olá Mundo!” e a imprime na saída padrão. Parâmetros • A definição de parâmetros é feita da mesma forma que a declaração de variáveis, entre os parênteses do cabeçalho da função. • Caso precise declarar mais de um parâmetro, basta separá-los por vírgulas. • No exemplo a seguir temos a função SOMA que possui dois parâmetros, sendo o primeiro um float e o segundo um int. Parâmetros (aqui) Parâmetros Formais • Os parâmetros da função na sua declaração são chamados parâmetros formais. Parâmetros Reais •Na chamada da função os parâmetros são chamados parâmetros reais ou atuais. Retorno da função • O valor que será retornado para o chamador da função. • Deve respeitar o tipo de retorno declarado. Retorno da função • O valor que será retornado para o chamador da função. • Deve respeitar o tipo de retorno declarado. Passagem de parâmetros • Dois tipos: –Por valor –Por referência • Os parâmetros são passados para uma função de acordo com a sua posição. • O primeiro parâmetro real (da chamada) define o valor o primeiro parâmetro formal (na definição da função) • O segundo parâmetro atual define o valor do segundo parâmetro formal e assim por diante. • Os nomes dos parâmetros na chamada não tem relação com os nomes dos parâmetros na definição da função. Passagem por valor • Os parâmetros reais devem ser do mesmo tipo que os parâmetros formais, respectivamente. • Se foi declarado (formalizado): float soma(float a, int b) A chamada à função: soma(1.0, 2) deve respeitar a ordem estabelecida na declaração formal da função. O primeiro parâmetro é um float e o segundo é um int. Passagem por valor • As alterações feitas a um parâmetro formal NÃO modifica o parâmetro real correspondente. • {EXEMPLO: param_por_valor.c} Passagem por referência • Os parâmetros reais devem ser endereços de memória. • Os parâmetros formais devem ser ponteiros. • Se foi declarado (formalizado): float soma(float *a, int *b) A chamada à função: float x = 1.2; int t = 5; soma(&x, &t) Passagem por referência • A alteração de um parâmetro formal MODIFICA o parâmetro real correspondente. Forma de Organizar • A princípio podemos tomar com regra: • “toda função deve ser declarada antes de ser usada” • Foi o que fizemos até agora → definir as funções antes de usa-las. • Na definição da função está implícita a declaração. • Pode-se preferir que a função principal (main) seja a primeira parte do programa. • 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 é a assinatura da função → trecho de código que especifica o nome e os seus parâmetros. Exemplo de prototipação de funções • Prototipadas antes de serem usadas, sendo chamadas antes de serem definidas. Exemplo de prototipação de funções • Prototipadas antes de serem usadas, sendo chamadas antes de serem definidas. Declaradas Chamadas Exemplo de prototipação de funções • Definições das Funções depois do main. Definições depois do main, na ordem que se preferir. Verificação de Parâmetros • Os parâmetros atuais (aqueles da chamada da função) devem ser dos mesmos tipos dos parâmetros formais. • Se isto não ocorrer, dependendo do compilador, ele pode se encarregar de converter automaticamente (cast automático). • No caso de você declarar corretamente a função antes de usá-la, a conversão de tipos é feita como no caso de variáveis. Verificação de Parâmetros Na segunda chamada, a função multiplicar é chamada com os parâmetros reais dos tipos int e float, nesta ordem. Como na declaração da função o primeiro parâmetro é float e o segundo é int, é feita uma conversão de int para float e de float para int, respectivamente. Exercícios 1) Modificar o programa do cálculo da média para que utilize uma função media(...) no cálculo. 2) Ler um número e chamar uma função que retorna o dobro e o quadrado do número. 3)Ler os coeficientes (a, b, c) de uma equação do 2º grau e chamar uma função que retorne o valor do delta e das raízes. Dúvidas, Críticas ou Sugestões diegobertolini@gmail.com Operadores Aritméticos Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37 Slide 38 Slide 39 Slide 40 Slide 41 Slide 42 Slide 43 Slide 44 Slide 45 Slide 46 Slide 47 Slide 48 Slide 49 Slide 50 Slide 51 Slide 52 Slide 53 Slide 54 Slide 55 Slide 56 Slide 57 Slide 58 Slide 59 Slide 60 Slide 61 Slide 62 Slide 63 Slide 64 Slide 65 Slide 66
Compartilhar