Baixe o app para aproveitar ainda mais
Prévia do material em texto
2 ª A u l a – L i n g u a g e m C Ambientes Integrados de Desenvolvimento - C Dev-C++ ( 32 bits ) 2 ª A u l a – L i n g u a g e m C Ambientes Integrados de Desenvolvimento - C Turbo C++ 3.0.pif Observações: Æ O ambiente Turbo C++ 3.0 foi descontinuado. Na verdade, ele é um antepassado de uma ferramenta muito mais moderna, que hoje recebe o nome de Borland Builder C++ 6.0 (já há uma versão mais recente); Æ A grande vantagem dessa ferramenta é a sua extensa documentação online, não só das palavras reservadas da Linguagem C, mas principalmente em relação as funções da Biblioteca Padrão, com exemplos de códigos. Vale a pena conferir!!! Æ Ambas as ferramentas podem ser obtidas gratuitamente na Internet, assim como tutoriais introdutórios (instalação, como usar, recursos básicos, etc). Divirtam-se!!!. Turbo C++ 3.0 ( 16 bits ) 2 ª A u l a – L i n g u a g e m C Diretivas de Pré-Processamento Nessa fase inicial, vamos nos deter apenas em duas diretivas de pré-processamento (define e include). Todas diretivas de pré-processamento começam com o caractere sustenido ‘#’. Na verdade, é um mecanismo de informar ao compilador que na sequência será declarada uma diretiva. A linguagem C é a única linguagem de programação que possui o conceito de pré- processador. 2 ª A u l a – L i n g u a g e m C Diretivas de Pré-Processamento - #define Serve para definirmos constantes de todos os tipos de dados (char, int, float, double, string) e macros parametrizadas. Vamos começar com a declaração de constantes. Em C, há duas formas básicas de se declarar uma constante. Uma delas é através do uso da diretiva define. Lembre-se que todas as quantidades manipuladas em seu programa devem estar representadas na forma de uma constante ou de uma variável. É claro que muitas vezes aparece uma ou outra constante literal (número inteiro ou real de forma explícita). Forma Geral:Æ Declaração de constantes #define NOME_SIMBOLICO constante Vale lembrar que na estrutura geral de um programa em C, as diretivas aparecem logo no início. 2 ª A u l a – L i n g u a g e m C Diretivas de Pré-Processamento Exemplos:Æ Declaração de constantes simbólicas (constantes com nome) #define MAX 100 #define MSG1 “Erro de Entrada!!!” #define MSG2 “Introduza um valor inteiro positivo: ” #define LETRA_A ‘A’ #define LETRA_a ‘a’ #define ERRO1 0.0000000001 #define ERRO2 1.0E-008 #define ERRO3 1.0e-010 #define PI 3.141592654 #define PIOVER180 0.017453 #define PIUNDER180 57.29578 #define SQRT2 1.414214 A idéia básica de se utilizar constantes simbólicas (constantes nomeadas) é tornar o código mais legível e facilitar a sua manutenção. Em tempo de pré- processamento, todas as constantes simbólicas são substituídas pelos respectivos valores. 2 ª A u l a – L i n g u a g e m C Diretivas de Pré-Processamento - #define Um outro uso muito comum da diretiva define é na definição de macros parametrizadas. Forma Geral:Æ Declaração de macros parametrizadas #define NOME_SIMBOLICO(parametros) expressao_associada #define SQR(x) ((x)*(x)) #define AREA_CIR(r) (PI*SQR(r)) #define DEGTORAD(x) (x*PIOVER180) #define RADTODEG(x) (x*PIUNDER180) Exemplos:Æ Algumas Macros parametrizadas 180º 75ºx π → →Lembrando que:Æ 2 ª A u l a – L i n g u a g e m C Operador Condicional (?:) Forma Geral: exp1 ? exp2 : exp3 Significado : Se exp1 for verdadeira, então, exp2, senão, exp3. #define MAX3(a,b,c) ( (a>=MAX2(b,c)) ? a : MAX2(b,c)) ##define ABS(x) ((x >=0) ? (x): (-x)) #define PAR(x) ((x%2 == 0) ? 1 : 0) #define MAX2(a,b) ( (a >= b) ? a : b ) Boa Prática de Programação:Æ Escreva todas as constantes simbólicas e o nome das macros parametrizadas com letras MAIÚSCULAS. Uma outra forma de macros parametrizadas envolve o uso operador condicional (operador ternário). Operador Condicional:Æ ?: 2 ª A u l a – L i n g u a g e m C Diretivas de Pré-Processamento - #include A diretiva include permite incluir qualquer biblioteca (conjunto de funções), seja da Biblioteca Padrão da linguagem C, ou uma outra biblioteca que você tenha escrito ou obtido. Vamos aprender a usar este último recurso mais a frente. A idéia ao incluir uma biblioteca em seu programa é poder fazer uso de uma ou mais funções pertencentes a ela. Forma Geral: #include <nome_cabecalho.h> Exemplos:Æ #include <math.h> // funções matemáticas #include <ctype.h> // funções de manipulaçao de caracteres #include <stdio.h> // funções de entrada e saída 2 ª A u l a – L i n g u a g e m C Estruturas de Controle de Seleção Como escolher um, entre os possíveis caminhos a seguir. 2 ª A u l a – L i n g u a g e m C Estruturas de Controle de Seleção Linguagem C •Comando if Comandos de Seleção (condicionais) •Comando switch Selecionam o curso de uma ação entre várias ações possíveis, dependendo do valor de uma expressão (constante, aritmética, boleana). Vale lembrar que em C, todo valor diferente de zero é verdadeiro. Palavras reservadas a serem exploradas nas próximas duas aulas : if, else, switch, case, break e default. 2 ª A u l a – L i n g u a g e m C Pseudocódigo ... se ( expressão boleana ) então inicio comandos1 fim senão inicio comandos2 fim próxima instrução; ... Linguagem C ... if ( expressão ) { comandos1; } else { comandos2; } próxima instrução; ... Comando de Seleção - if 2 ª A u l a – L i n g u a g e m C Forma geral Æ if ( expressão ) { comandos1; } else { comandos2; } ¾ expressão pode ser uma expressão aritmética ou boleana, uma constante ou uma variável; ¾ se a expressão for verdadeira, ou seja ,se o seu valor/resultado for diferente de 0 (zero), então as instruções associadas a comandos1 serão executadas, senão (caso contrário) , as instruções associadas a comandos2 serão executadas. ¾ a ação associada a cláusula (ação) else NÃO É OBRIGATÓRIA. Onde:Æ Comando de Seleção - if if ( a%2 == 0 ){ sp = sp+a; qp = qp+1; } else { si = si +a; qi = qi+1; } proxima_instrução; Exemplo : 2 ª A u l a – L i n g u a g e m C Quando o número de if’s e de else’s forem diferentes você deve explicitar a relação entre eles por meio de chaves ( ‘{‘ ,’}’ ). Caso contrário, o compilador assume que o 1ª else está associado ao útimo if, e, assim, sucessivamente. Exemplo: if ( a>b ) if ( a == c+5 ) b = a*c; else c = a+b+c; Nesse caso o compilador interpreta que o último else esta associado ao if mas interno. Se não fosse esse seu desejo, ou seja, se a ação else devesse estar associada ao if mais externo, você deveria reescrever as instruções acima do seguinte modo: Comando de Seleção - if if ( a>b ) { if ( a == c+5 ) b = a*c; } else c = a+b+c; Lembre-se que a endentação do código serve apenas para facilitar a leitura e não para induzir uma estrutura lógica. 2 ª A u l a – L i n g u a g e m C Variantes da Forma Geral:Æ Comando de Seleção - if . . . if (expressão) comando1; proxima_instrução; ... Condição a ser avaliada comando1 será executado, somente no caso da expressão ser verdadeira ( ≠ 0 ) Observe que no código acima, a ação else não está presente. 2 ª A u l a – L i n g u a g e m C Exemplos : ... if ( a>=c ) a = a+c; b = a + 3*b; ... ... if ( a%2 == 0 ) printf (“O numero %d é PAR”,a); b = a + 3*b; ... if (a) b++; b = a + 3*b; Nos exemplos acima, quando a instrução b = a + 3b será executada? Comando de Seleção - if 2 ª A u l a – L i n g u a g e m C if ( expressão ) { comando1; comando2; ... comandon; } proxima_instrução; Observe que no código acima, a ação else também não está presente. Entretanto, se expressão for verdadeira, todos os n comandos/instruções no interior do blocodelimitado pelo par de chaves ‘{‘ e ‘}’ serão executados. Comando de Seleção - if Variantes da Forma Geral:Æ 2 ª A u l a – L i n g u a g e m C Exemplos : ... if ( a%2 == 0 ) { s = s+a; // s += a; qp = qp+1; // qp++; } proxima_instrução; ... ... if (a) { a = a+b; // a += b; c = a+c; // c += c; j++; } proxima_instrução; ... ... if ( 0 ) { a = a+b; c = a+c; j++; } proxima_instrução; ... Quando as instruções no interior deste comando serão executadas? Comando de Seleção - if 2 ª A u l a – L i n g u a g e m C ... if ( expressão ) comando1; else comando2; proxima_instrução; ... Observe que no código acima, a ação else está presente. Lembre-se que nesse caso, comando1 e comando2 são mutuamente excludentes, ou seja, apenas um deles será executado. if (a%2==0)printf(“o número %d é PAR”,a); else printf(“o número %d é IMPAR”,a); proxima_instrução; Exemplo : Comando de Seleção - if Variantes da Forma Geral:Æ if ( PAR(a) )printf(“o número %d é PAR”,a); else printf(“o número %d é IMPAR”,a); proxima_instrução; 2 ª A u l a – L i n g u a g e m C Comando de Seleção – if´s Aninhados Um seqüência de comandos if’s, “um dentro do outro” é chamado de if´s aninhados. Usamos esta estrutura para selecionar uma ação entre múltiplas (>2) ações possíveis. Em certos contextos esta estrutura aninhada de if´s pode ser substituída por um comando switch, aumentando a legibilidade do código, sem que ocorra alterações do ponto de vista lógico. Forma Geral de um if aninhado: if (expressão 1) if (expressão 2) if (expressão 3) comando31; else comando32; else comando21; else comando11; Nesse exemplo temos uma quantidade de if’s igual ao de else’s. Assim o 1ª else corresponde ao ultimo if, o 2º else corresponde ao penúltimo if e, assim sucessivamente . Em que situação o comando31 seria executado? E o comando21? E o comando11? 2 ª A u l a – L i n g u a g e m C Comando de Seleção – if´s Aninhados Problema:Æ Leia um numero inteiro no intervalo [1,7] e escreva o respectivo dia da semana, supondo que 1 seja segunda-feira e 7 seja domingo. Exemplo de if’s alinhados if(x==1) else if (x==2) else if(x==3) else if(x==4) else if(x==5) else if (x==6) else else printf (“o valor de entrada esta incorreto!!!”); ... printf(“\n segunda feira”); printf(“\n terça feira”); printf(“\n quarta feira”); printf (“\n quinta feira”); printf (“\n sexta feira”); printf (“\n sabado”); printf (“\n domingo”); ... if ( (x >= 1)&&( x<= 7) ) 2 ª A u l a – L i n g u a g e m C Comando de Seleção – if´s Aninhados Observe que endentação usada no slide anterior serve apenas para facilitar a leitura do código, ela não induz nenhuma estrutura lógica. O mesmo código poderia ser escrito, por exemplo, da seguinte forma: if(x==1) else if (x==2) else if(x==3) else if(x==4) else if(x==5) else if (x==6) else else printf (“o valor de entrada esta incorreto!!!”); ... printf(“\n segunda feira”); printf(“\n terça feira”); printf(“\n quarta feira”); printf (“\n quinta feira”); printf (“\n sexta feira”); printf (“\n sabado”); printf (“\n domingo”); ... if ( (x >= 1)&&( x<= 7) ) 2 ª A u l a – L i n g u a g e m C Comando de Seleção – if´s Aninhados Uma outra maneira de endentar o código anterior seria: ... if ( (x >= 1)&&( x<= 7) ) if (x ==1) printf(“\n segunda-feira”); else if (x == 2) printf(“\n terça-feira”); else if (x == 3) printf(“\n quarta-feira”); else if (x == 4) printf(“\n quinta-feira”); else if (x ==5) printf(“\n sexta-feira”); else if (x == 6) printf(“\n sabado”); else printf(“\n domingo”); else printf(“\n o valor da entrada esta incorreto!!!”); ... Como já foi dito, para o Compilador é indiferente a forma como você escreve e endenta o seu código (desde que este esteja correto, é claro!!!). Ele não terá qualquer problemas em gerar o código objeto e seguir para as demais etapas do processo de compilação, ou seja, do ponto de vista lógico não há qualquer diferença entre os códigos anteriores. Observe novamente os códigos anteriores e verifique qual deles é mais fácil de ser compreendido (mais legível) por você e por outros humanos supostamente normais. 2 ª A u l a – L i n g u a g e m C Comando de Seleção - if Exemplo: Encontre as raízes (reais ou complexas) de uma equação do segundo grau. 2 0, 0.ax bx c a+ + = ≠Análise do problema: O que nós sabemos? Se Æ Raízes reais Æ Raízes complexas 0Δ ≥ 0Δ < Solução real: ( ) 2 4b acΔ = −Onde: 1 2 bx a − + Δ= 2 2 bx a − − Δ=0Δ ≥ 2 ª A u l a – L i n g u a g e m C Comando de Seleção - if recordar é viver: Æ Como o grau do polinômio é par (2) e as raízes são complexas, uma é conjugada da outra: a+bi e a-bi. Solução complexa: ( ) 2 4b acΔ = − Onde: 1 *2 2 bx i a a Δ−= + 2 *2 2 bx i a a Δ−= −0Δ < re im 1i = − printf(“Raiz complexa 1: %f + %f *i”,re, im); printf(“Raiz complexa 1: %f - %f *i”,re, im); As saídas associadas a solução complexa (raízes) poderiam ser do tipo: Após a solução do problema (escrita do programa), procure melhorar sua saída determinando a largura do campo e fixando um número de casas decimais. 2 ª A u l a – L i n g u a g e m C Comando de Seleção - if O programa com a solução do exercício anterior (equação do segundo grau), será enviado juntamente com as Notas de Aula. Abrir e comentar o programa com a solução do exercício anterior. Alterar e acrescentar algumas constantes simbólicas. Reescreva em C, todos os pseudocódigos envolvendo estruturas de Controle de Seleção.
Compartilhar